DX時代:【第12回】シーメンス製の生産シミュレータ「プラントシミュレーション」の使い方を習得
www.plm.automation.siemens.com
Plant Simulation 15に収録されているサンプルモデルを使って基本操作を習得する。
第12回はカテゴリ「リソース」、トピック「Worker」、サンプル「Carry one part」を使っていく。サンプルモデルからの学び方は、以下の手順で行う。
STEP1:サンプルモデルを開き、どのような仕事内容をシミュレーションするものかを把握する。
STEP2:それぞれのオブジェクトの設定項目を参照し、定義の仕方を確認する。
STEP3:概要を理解したところで、設定の一部を変更して、意図した通りにシミュレーションの結果に反映されるかを確認する。
サンプルモデルの難易度によって、多少の変更はあるかもしれないが、流れとしては概ね上記のような進め方で習得していく。
◆サンプルモデル
リソース ⇒ Worker ⇒ Carry one part
STEP1:どのようなサンプルモデルか?
どのようなサンプルか把握するためにまずはイベントコントローラを実行してみる。シミュレーション動画を以下に示す(Vimeo)
モデル自体は非常にシンプルで、作業者がパーツを搬送するモデルである。作業者は1人でMachine工程で受け取ったパーツを逆U字の迂回したコースでTarget工程へと搬送している。ソースからは絶えずパーツが供給されるので、作業者は2つの工程をひらすら往来している。
シミュレーションから把握できるざっくりしたモデルの概要は以上だ。
STEP2:オブジェクトの設定項目を確認
それでは各オブジェクトの設定項目を順に確認していく。まずはモデル上部の「RESET」メソッドとBrokerオブジェクトから。
左側の「リセットコントロール」には、以下のメソッド(プログラム)が記述されている。
-- Set the speed of the Simulation
-- for demonstration purpose
EventController.speed := 60
デモ目的でシミュレーション実行速度を60に落としている。リセットに記述されているので、シミュレーションを実行する前にイベントコントローラのリセットを一度でも押すことでこれが有効になる。リセットに関してはPlantSimulationヘルプで以下のように説明されている。
EventController でシミュレーションをリセットをクリックすると、Plant Simulation はモデル内でreset と名付けられた全てのメソッドを呼出します。また、Plant Simulation は、スケジュールされたイベントのリストから全てのイベントを削除して、シミュレーション時間を0にセットし、統計データを削除し、全ての故障をクリアします。
その隣のBrokerオブジェクトはデフォルト通りだったので割愛する。
(インポータリクエスト、エクスポータリクエストともに空欄)
続いてはモデル右上に配置された見慣れないアイコン。
Plant Simulationの記事12回目にして初めて扱うが、「WorkerSankeyDiagram」オブジェクトだ。ヘルプでは以下のように説明される。
WorkerSankeyDiagramm オブジェクトは、領域内を自由に移動するワーカー のパスを視覚化するSankey diagram を表示します。
要は、工程間の量的な流れを可視化するツールである。Wikiがより分かりやすい。
左側の「Workers」という名称のWorkerSankeyDiagramの属性タブを確認する。
最大幅と色の指定が確認できる。また、「データの収集」にチェックが付いているので、このオブジェクトが有効化されていることがわかる。次にオブジェクトタブを見る。
オブジェクトとして、ダイアグラムを描画するための追跡対象のクラスへのパスが指示されている。Transportabeiterという名称のWorker(作業者)が定義されている。
ちなみに、シミュレーション実行時にSankeyDiagramを表示してみると以下のような感じになる。複数回通るところはより太く表示されるので、流量(量的な大きさ)が視覚的に判別できる。
また、右側の「Parts」はパーツの流れを示すもので、作業者と基本設定は同じなので割愛する。
さて次は、Sourceと「Machine」Stationオブジェクトについて確認していく。
まずはSourceオブジェクトの属性タブを確認する。
作成の時間は「間隔時間による調整」で、間隔/開始/停止がいずれもゼロになっている。これは後工程がパーツを受け取れるようになれば即座に供給することを意味する。MU選択は「選択を固定」で、Entityという名称のパーツが設定されている。
(ちなみにオブジェクト名が"Quelle"となっているがこれはドイツ語でソースと同義である。このサンプルモデルはオブジェクト名が英語変換されておらず、ドイツ語のまま残っているようだ)
次に「Machine」Stationオブジェクトについて時間設定タブを確認する。
プロセス時間は1:00固定で、セットアップやリカバリ設定はなし。
続いてインポータタブの「処理」を確認する。「有効化」にチェックが入っているので、このStationは作業者によってプロセスが実行される。ブローカはデフォルト通りで「Broker」が定義されている。
次に同じインポータタブの「トランスポート」を確認する。有効化がチェックされており、「MUターゲット」として「target」Staionが指定されている。よって、Machine工程では、作業者が到着後、1:00のプロセス(加工等)を経て完了後に次の工程であるtargetへ向かってパーツを搬送する工程となる。
最大ドゥエル時間は「一定」でゼロ設定となっている。最大ドゥエル時間とは、最大滞在時間のことで、作業者が後工程に運ぶ必要があるパーツを待つ時間のこと。この時間が過ぎると、作業者は搬送容量に達しているかいないかに関係なく移動を開始する。
次にMachine上部のWorkPlaceを確認する。属性タブは以下のようになっている。
ステーションは当然「Machine」工程が対応付けられ、「サポートするサービス」は空欄だ。(その他設定の時間設定やコントロールについてもデフォルト通りだった)
さて、ここからはモデル右側の排出側を確認していく。
まずはパーツの搬送先として指定されている「Target」Stationオブジェクトの属性タブとインポータタブの「処理」を併せて確認する。
プロセス時間は1:00固定で、インポータタブの処理は有効化されていないので、Target工程では作業者が付きっきりにならなくてもプロセスを実行できることがわかる。作業者はパーツを搬送してきて、供給したところで完了で、Machine工程へ戻っている間に自動でTarget工程でプロセスが進められることを意味している。
Targerの上のWorkPlaceとDrainオブジェクトはデフォルト設定通りだったので割愛する。
以上で本サンプルモデルの各設定項目の確認は以上だ。
STEP3:一部を変更してシミュレーション結果の確認
今回のサンプルモデルではMachineとTarget工程の往復が非常に多く、作業者の時間あたりに占める移動時間が大きいので、いわゆる”移動のムダ”が目立っている。
パーツを1個ずつ搬送するために効率が良くないので、そこを改善してみる。具体的には、作業者がパーツを2個持ってTarget工程へ移動するようにモデルを改造する。
まずは、WorkerPoolオブジェクトから今回定義されているWorkerを確認する。クラスライブラリから指定パスを辿って「Transportarbeiter」を発見。
属性タブを開き、「X-サイズ」の容量を「2」にアップさせる。これでパーツを2個持てる作業者になる。
次に作業者がパーツを2個持つ前に移動を開始してしまってはダメなので、「Machine」のインポータタブ→トランスポートから「最大ドゥエル時間」を5:00に設定しておく。Machineの1個あたりのプロセス時間は1:00なので2個待つだけなら十分な時間だ。
モデルを部分的に改修したところで、さっそくシミュレーションを実行してみる。
・・・が、おかしい。思った通りにならない。
シミュレーションを実行すると、Machine工程で1個目のパーツを作業者が受け取ったところで止まってしまう。狙いはMachine工程で2個までパーツを取って、それをTargetへ搬送するイメージだったが、実際には最大ドゥエル時間として設定した5:00までスタンバイ状態のように止まってしまって、5:00経過後にパーツは1個のままで移動を開始してしまった。
この原因として、どうやら作業者はパーツを持った状態(トランスポートの仕事)で、プロセス処理を行うことができないようだ。
解決策としては以下が考えられる。
①Machine工程のプロセス時間を0にする
②Machine工程の前に自動でプロセスを実行するStationを配置する
③作業者を2人にしてプロセスと搬送を区分する
上記②パターンでモデルをさらに改修した結果、パーツを2個搬送するモデルにできた。
「Machine(無印)」オブジェクトは、プロセス時間1:00で自動機とした。(インポータタブの「処理」を無効にして、作業者が介在しなくともプロセスを実行できる)
「Machine1」オブジェクトは、プロセス時間0:00でパーツを受け取る中継のような扱いにしている。こうすることで、作業者は前工程から供給されてくるパーツを、作業者の容量(今回は2個)になるまで待つようになる。
今回のサンプルモデル『Carry one part』の確認は以上だ。