DX時代:【第9回】シーメンス製の生産シミュレータ「プラントシミュレーション」の使い方を習得
www.plm.automation.siemens.com
Plant Simulation 15に収録されているサンプルモデルを使って基本操作を習得する。
第9回はカテゴリ「マテリアルフロー」、トピック「Dismantle station」、サンプル「Scrapyard」を使っていく。サンプルモデルからの学び方は、以下の手順で行う。
STEP1:サンプルモデルを開き、どのような仕事内容をシミュレーションするものかを把握する。
STEP2:それぞれのオブジェクトの設定項目を参照し、定義の仕方を確認する。
STEP3:概要を理解したところで、設定の一部を変更して、意図した通りにシミュレーションの結果に反映されるかを確認する。
サンプルモデルの難易度によって、多少の変更はあるかもしれないが、流れとしては概ね上記のような進め方で習得していく。
◆サンプルモデル
マテリアルフロー ⇒ Dismantle station ⇒ Scrapyard
STEP1:どのようなサンプルモデルか?
どのようなサンプルか把握するためにまずはイベントコントローラを実行してみる。シミュレーション動画を以下に示す(Vimeo)
Plant Simulationの操作方法習得のための記事も9回目を迎えて、やっとそれっぽいモデルを扱えるようになってきた。今回のサンプルモデルでは、まず緑の車がソースから供給され段階的に分解して後工程に流していくのがわかる。最初の分解工程で車体はスクラップに回され、ホイルやミラーなど部品として再利用できるものを別経路で流しているようだ。
そして、今回のモデルではワーカ(作業者)の設定がされていて、2人の作業者が到着することで仕事が開始される工程があるようだ。シミュレーション実行から推測できるモデルのざっくりした概要は以上だ。
STEP2:オブジェクトの設定項目を確認
それではサンプルモデルの各オブジェクト設定項目について順に確認していく。
まずはモデル左上のEntrance、Line、DismantleStationから。
「Entrance」というSourceオブジェクトの属性タブを確認する。
作成するMUはAutoSorterで作成間隔は一様分布が指定されている。この場合は29:00を下限、35:00を上限としてその時間幅の中で間隔が一様の確率で変わるということだ。
「コントロール」タブで「シフトカレンダ」が設定されていることを確認した。シフトカレンダについては、後でまとめて触れることにして、ここではシフトカレンダに同期させたい時はコントロールタブで行うことだけ知っておく。
Entranceの先に接続された「Line」オブジェクトは長さ2m、搬送速度1m/sのオブジェクトで、その他はデフォルト通りだったので割愛する。
さて、次はDismantle Stationオブジェクトを確認する。
前工程のEntranceからMUを受け取ったら、分解作業を行う。分解する内訳は、廃棄テーブルよりホイル4個、ミラー1個、フード1個であり、それらはすべて下流2へ排出される。本体MUとはこの場合、車体でありこちらはすべてのマウントパーツを送出した後、最後に排出される。排出先は「メインMUから下流」で下流番号1と設定されている。
モデルが密集していて多少見づらいが、下流番号を確認するには、表示オプション→下流の表示を選択する。今回のモデルではDismantle Stationからまっすぐ右側のLineが下流1、下にカーブしている方が下流2である。
「時間設定」タブは以下のようになっている。
プロセス(分解)時間は30:00で一定。
そして、「インポータ」タブの「処理」が有効化され設定が入っている。
(*インポータタブは、特定のタイプのパーツに対するステーションの稼働を設定したり、ステーションの修復を行うためのパーツの処理サービスを定義する時に使用する)
「優先度」は0になっているが、これは数字が大きいほど優先度が高くなる。
また、「サービス」ボタンをクリックすると以下の表が確認できる。
「ユーザ定義」タブでは以下の2つが定義されている。alreadycalledはデータタイプboolean型でfalseが設定されている。これはプログラムリセットで使われているようだ。もう一つのRelease Exporterはデータタイプがmethodである。
プログラム文は以下のように記述されている。
param type : integer -- Importer type (0=failure, 1=setup, 2=work)
/* if not self.~.alreadycalled
then
self.~.alreadycalled := true;
waituntil self.~.empty prio 1;
self.~.imp.releaseExporters;
self.~.alreadycalled := false;
end; */
-- release operator when the station is empty
if self.~.empty
self.~.imp.releaseExporters
end
続いては、モデル左下のWorkerPoolとFootPathについて確認していく。
WorkerPoolは作業者の待機所のことで、シフト交代などではここから出ていきまた戻っていく。FootPathは作業者の動線のことで、WorkerPoolから各仕事場所(WorkPlace)をFootPathで接続することで作業者の移動が可能になる。作業者には歩行速度が設定されていて、FootPathは設定した長さがシミュレーションの移動時間に反映される。
まずはWorkerPoolの「属性」タブを確認する。移動モードは「footpathに沿って歩く」が設定されている。(この他の選択肢は「領域内を自由に移動」と「ワークプレースに送る」の2つ)
ワーカーの「生成テーブル」ボタンを選択すると、以下の表が確認できる。
FootPathオブジェクトの「属性」タブを確認する。こちらは見るべきポイントは長さの設定(シミュレーションにも反映されるため)とカーブの有無くらいだ。
次は、WorkPlaceとBrokerについて確認していく。
WorkPlaceはその名の通り、作業者が実際に仕事を行う場所のことで、Station, Assembly,Dismantleなどに割り当て仕事を遂行させる。作業者はWorkPlaceから要求を受けてからそこに向かって移動を開始する。「属性」タブを以下に示す。
ステーションとして、「DismantleStation」に紐付けられている。モデル上でのオブジェクト配置関係からもわかる。「ジョブ終了後にワーカがこの場所にとどまる」にチェックが付いているので、作業者がここで仕事を完了した後、他の工程から呼び出しがかからない間はこの場所で待機することになる。(ちなみに「サポートするサービス」は未設定であった)
今回のサンプルモデルでは、WorkPlaceがこれ以外に残り4つあるが、設定としてはどれも同じだったので残りは割愛する。
次はBrokerオブジェクトについて。
Plant Simulationヘルプで、Brokerについては以下のように説明されている。
Broker は、サービスを提供する側とサービスを必要とする側の間の仲介者です。各Broker は、複数のエクスポータ (サービスを提供する側)を管理し、複数のインポータ (サービスを必要とする側)から要求を受付けることができます。要求は、サービスのリストと、必要とされるサービスの量から構成されます。サービス名は文字列 です。これを使用して、プラントの管理者または職場の作業長をモデル化することができます。
作業者の指揮系統を取るオブジェクトだ。コントロールタブで、インポータリクエストとエクスポータリクエストの設定箇所があるが、今回のモデルではどちらも未設定でデフォルトのままのようだ。
さて、次はモデル中央に配置されたFlowControlオブジェクトを確認する。
Plant Simulationヘルプで、以下のように説明される。
FlowControl を使用すると、プラント内のマテリアルのフローを分割および1つにまとめるための共通のストラテジーをモデル化することができます。FlowControl はMUの処理は行わず、シミュレーションモデル内のステーションのシーケンス内で後に続くオブジェクト間で、MUを配布するだけです。
加工なしの分配器のようだ。(Stationでプロセル時間を0秒にして出口ストラテジを任意に設定しても同様のことが実現できそうだが、こちらの方がより意図がわかりやすくモデルの視認性向上につながる)
「出口ストラテジー」タブは以下のようになっている。「MU属性」が指定されている。
リストを開くと以下の表が確認できる。MU属性とは、パーツの名前であった。ホイルが下流1、ミラーが下流2、フードを下流3へと分配する設定になっている。FlowControlの排出側でLineオブジェクトが密集しすぎて下流番号が見にくいので、先ほどの図に緑色で下流番号を付記しておいた。上から順に1,2,3である。
出口ストラテジータブでは、「最初に来たものを最初に提供」が選択されている。翻訳が分かりにくいが、要は先入れ先出しのことだと思っておけば良さそうだ。
モデルの主だったところはすべて確認したので、ShiftCalendarを確認する。今回のモデルでは上部に2個オブジェクトが配置されていて、左側がスクラップヤードのシフト、右側がショップのシフトを示している。
左側のオブジェクトの「シフトタイム」タブを確認する。
シフト1と2があり、何時から何時という勤務の時間帯と曜日が定義されている。
そして「リソース」タブでは、ShiftCalendaを反映させているオブジェクトが一覧で確認できる。
(ちなみにこちらは各オブジェクトの「コントロール」タブからもシフトカレンダの設定欄があり確認可能だ)
サンプルモデルの設定項目確認は以上だ。
STEP3:一部を変更してシミュレーション結果の確認
今回のサンプルモデルでは2人の作業者が5箇所のWorkPlaceをせわしなく移動しているので、もう一人追加してみる。
作業者の追加はWorkerPoolオブジェクトの「属性タブ」、「生成テーブル」から変更できる。Additional ServicesがSellとなっている作業者の数を1→2人にする。数は2列目Amountを2に変更すれば良い。
これでシミュレーションを実行するとWorkerPoolから3人の作業者が出てきて、移動が多少減って効率が良くなったように見える。(実際には1人追加分の"効果"を作業者の時間分析やスループット向上から総合的にジャッジしないといけないが、今回は変更の仕方の確認が目的なのでざっくり)
今回のサンプルモデル『Dismantle station Scrapyard』の確認は以上だ。