DX時代:【第11回】シーメンス製の生産シミュレータ「プラントシミュレーション」の使い方を習得
www.plm.automation.siemens.com
Plant Simulation 15に収録されているサンプルモデルを使って基本操作を習得する。
第11回はカテゴリ「リソース」、トピック「Worker」、サンプル「Type depending Services」を使っていく。サンプルモデルからの学び方は、以下の手順で行う。
STEP1:サンプルモデルを開き、どのような仕事内容をシミュレーションするものかを把握する。
STEP2:それぞれのオブジェクトの設定項目を参照し、定義の仕方を確認する。
STEP3:概要を理解したところで、設定の一部を変更して、意図した通りにシミュレーションの結果に反映されるかを確認する。
サンプルモデルの難易度によって、多少の変更はあるかもしれないが、流れとしては概ね上記のような進め方で習得していく。
◆サンプルモデル
リソース ⇒ Worker ⇒ Type depending Services
STEP1:どのようなサンプルモデルか?
どのようなサンプルか把握するためにまずはイベントコントローラを実行してみる。シミュレーション動画を以下に示す(Vimeo)
WorkerPoolには作業者が3人いて、Workplaceも3箇所ある。それぞれのWorkplaceに人が張り付いて作業を行うかと思ったら、そうではないようで1人の作業者が往来している。特にシミュレーションの序盤では1人の作業者のみが忙しく動き回り、残り2人はまだ待機所でスタンバイしている。
シミュレーションの時間が進むと待機していた残りの2人も出てきて3人であっちこっちと動く。また、FootPathは人の往来ができる程度の幅は持っているようだ。
加工Stationは3つあるが、その内「SingleProc」オブジェクトにはWorkPlace設定がされていない。
シミュレーションの動きから把握できるざっくりしたモデルの概要は以上だ。
STEP2:オブジェクトの設定項目を確認
サンプルモデルの各設定項目を順に確認していく。まずはモデル上部の欄外に配置された「ProcessServices」DataTableから確認する。
以下の表が確認できる。「Entity Type」がA/B/Cに応じてサービスを分類するようだ。
続いてWorkerPool、FootPath、Workerを確認する。
WorkerPoolの属性タブを確認する。
移動モードは「footpathに沿って歩く」、ブローカはモデル上部に配置された「Broker」が指定されている。(Brokerはデフォルト通りの設定なので割愛)
生成テーブルをクリックで以下の表を確認できる。
Workerは3人定義されており、すべて同一のクラスへのパスである。Amount(数)は各1名で、Additional Servicesとしてwork_A、work_B、work_Cがそれぞれ割り当てられている。
クラスライブラリからWorkerを探す。*. Models. worker.と順に辿っていきWorkerを確認する。
効率は100%で移動速度は2m/sで定義されている。提供する「サービス」は、通常の加工(仕事)であるStandardServiceだけがセットされているようだ。
「FootPath2」オブジェクトについては長さが5mなので、作業者はこれを2.5秒で移動することになる。
続いてはモデル左側のSourceとその上の「Parts」DataTableを確認していく。
「Source」オブジェクトの属性タブを以下に示す。
MU選択は「ランダム」で参照先のDataTableとして「Parts」が指定されている。作成の時間は「間隔時間による調整」で間隔/開始/停止がいずれもゼロなので、このSourceはシミュレーション実行中は後工程が受け取り可になれば即座にパーツを供給するオブジェクトとなる。
PartsのDataTableも確認する。MUとしては「Part」という同じものが定義され、それぞれ名前をA/B/Cと設定している。2列目Frequenciesは直訳で周波数だが、この場合は意味合いとしては”生産の頻度”だ。
さて、次は「SingleProc」Stationと、WorkPlaceについて確認していく。
まずは「SingleProc」Stationの時間設定タブから。プロセス時間は1:00固定だ。
インポータタブの「処理」は有効化がチェックされているので、WorkPlaceと連動していることがわかる。提供する「サービス」は「Work_B」で、Alternativeは「a」が定義されている。さらに要求コントロールは「self.OnRequest」というユーザ定義のメソッドが指定されている。
要求コントロール「self.OnRequest」のプログラムはユーザ定義タブか確認できる。
param type : integer -- Importer type (0=failure, 1=setup, 2=work, 3=carry )
var part : object
var services : object
var row : integer
var tab : table
part := ?.cont
switch type
case 0
case 1
case 2
-- working
services := root.ProcessServices
row := services.getRowNo( part.name )
if row>0
-- get the services defined for the part
tab := services["Services", row]
-- set the alternative services
?.imp.setAlternativeServices( tab )
else
debug
end
-- now import the services. This is because the default behavior
-- of Plant does not work.
?.imp.import
end
次に「WorkPlace」オブジェクトを確認する。
連動するステーションとしてSingle Procが設定されている。「サポートするサービス」は空欄設定だ。
他のSingleProcとWorkPlaceについても確認した結果、以下の表のように対応付けられていることを確認した。緑枠のWorkPlaceだけ離れた位置にあるので多少分かりづらい。
さらに各SingleProcインポータタブで処理の「サービス」について、緑枠とオレンジ枠は「work_B」、青枠は「work_A」が提供されている。
このサンプルモデルの動きを確認する時、ただシミュレーションを実行しただけでは作業者が行ったり来たりしているだけでイマイチ概要が掴めない。表示オプション→「MU名の表示」でパーツにA/B/Cの名前を表示させるようにすると動きが予測できるようになる。
以上で今回のサンプルモデル『Type depending Services』の確認は以上とする。