DX時代:【第7回】シーメンス製の生産シミュレータ「プラントシミュレーション」の使い方を習得
www.plm.automation.siemens.com
Plant Simulation 15に収録されているサンプルモデルを使って基本操作を習得する。
第3回はカテゴリ「マテリアルフロー」、トピック「Cycle object」、サンプル「Demo」を使っていく。サンプルモデルからの学び方は、以下の手順で行う。
STEP1:サンプルモデルを開き、どのような仕事内容をシミュレーションするものかを把握する。
STEP2:それぞれのオブジェクトの設定項目を参照し、定義の仕方を確認する。
STEP3:概要を理解したところで、設定の一部を変更して、意図した通りにシミュレーションの結果に反映されるかを確認する。
サンプルモデルの難易度によって、多少の変更はあるかもしれないが、流れとしては概ね上記のような進め方で習得していく。
◆サンプルモデル
マテリアルフロー ⇒ Cycle object ⇒ Demo
STEP1:どのようなサンプルモデルか?
どのようなサンプルか把握するためにまずはイベントコントローラを実行してみる。シミュレーション動画を以下に示す(Vimeo)
モデル自体はシンプルでSource0と1で生成されたパーツが9個の直列接続されたStationを通過してDrainへと排出される。上段のS01~S09は『Cycle』オブジェクトで定義され、下段のS11~S19はCycle設定がされていない。Cycleを有効化した時の効果、どのような違いが出るのかをシミュレーションで確認するモデルだ。
Cycleの効果は「Chart」の棒グラフで推移を見ながら確認するのだが、Windows10の標準機能で録画した動画にはChartグラフが映っていなかったのでシミュレーション実行後のキャプチャを示す。
横軸が各Station、縦軸が時間あたりのStationの状態占有率(%)だ。
緑が加工をしていた時間、黄色が後工程が詰まっていて自工程は完了したが次に遅れずブロックされた時間、灰色が前工程からパーツが供給されるのを待っていた時間だ。
まず、Cycleが有効化されているグラフの左側S01~S09は各Stationの状態が均一だ。加工時間とブロック時間が同じ比率になっている。
一方、Cycleが設定されずStationオブジェクトを9個直列に接続したパターンのS11~S19では、Stationによってまちまちだ。傾向としては前半のStationはブロック時間の比率が高く、後半のStationは待ち時間の比率が高い。
CycleオブジェクトはPlant Simulationヘルプで以下のように説明されている。
Cycle オブジェクトは、ステーションからステーションへのMU のトランスファーを同期します。全てのステーションがパーツの処理を終えたとき、およびどのステーションも故障状態、ポーズ、または未計画でないときのみ、このオブジェクトを使用してバランスライン内の次のステーションにパートを移動することができます。更に、バランスラインの下流はパートを受入れる準備ができている必要があります。
バランスラインを定義するには、最初のステーションと最後のステーションの名前をテキストボックスに入力する必要があります。Connector で接続されている、最初と最後のステーション間のすべてのステーションがバランスラインを形成します。各ステーションは、上流と下流をそれぞれ1つだけ持つ必要があります。
Cycleが設定された上段のS01~S09は各Stationがすべて処理が完了してから次に搬送される。個別に動かない分、どこか1箇所のボトルネックで全体が足を引っ張られる形になるということだ。
STEP2:オブジェクトの設定項目を確認
サンプルモデルの動きの概要は理解できたので、次は各オブジェクトの設定項目を確認していく。まずは、今回のメインである「Cycle」オブジェクトから。
属性タブで「有効化」にチェックが付いているので、Cycleが定義されている。どこからどこまでという範囲は、最初のステーションと最後のステーションで設定されている。
今回の例ではS01~S09、つまりSourceから出てDrainまで到達する間にあるStationがすべてCycleの範囲である。
ここで”パーツはサイクルにのみ入ることができる”にチェックが付いているが、これはCycleで定義された最初のStationにパーツが供給されるタイミングをCycleの搬送と連動させることを意味する。パーツがいつでもCycleに入るようにしたい場合はチェックをクリアする。
次に「Source0」オブジェクトを確認する。
属性タブを確認すると次のようになっている。
パーツ作成の時間は「間隔時間による調整」で、個数に「-1」と入力されているので、これは後工程が受け入れ可能な状態であれば即座にパーツを供給することを意味する。
作成するパーツは固定で、クラスライブラリのModels→Cycleにある「Entity」というパーツを作成する。その他タブ(故障、コントロール、出口ストラテジ等)はデフォルトのままのようだ。
次にSource0の隣に接続された「S01」オブジェクトを確認する。
属性タブのプロセス時間に正規分布が指定されている。[ 1:00, 0:10 ]と入力されているが、正規分布の平均値が1:00、標準偏差が0:10であることを意味する。エクセルのグラフでこの正規分布を書いてみると次のようになる。(1:00→60秒に変換している)
正規分布をエクセルで描いたり確率を計算するのは、以前アップした下記の記事がわかりやすい。
グラフからも標準偏差10というのは案外大きいことがわかる。例えば、Station「S01」で加工に80秒以上かかる確率は正規分布から2.28%である。このようにS01は加工時間が60秒を平均としてばらつく。
次のStation「S02」を確認する。オブジェクトの大まかな設定はS01と同じだが、プロセス(加工)時間の標準偏差の値だけが違っていた。S01は10秒であったのに対し、S02は5秒とより小さい。
ばらつきの話に深入りすれば主題が外れて行ってしまうので、これ以上触れないが、S01~S09のStationオブジェクトはすべてプロセス時間が60秒で、標準偏差の値がそれぞれ違っているようだ。
そして、プロセス時間の定義の仕方について、各Stationオブジェクト、時間設定タブのプロセス時間で「1:00, 0:10」と逐一記入することでも問題ないが、本サンプルモデルはStationの数が多いので一括で定義しているようだ。
それがモデル右上にある「AttributeExploer」だ。
AttributeExplorerオブジェクトは、Plant Simulationヘルプで以下のように説明されている。
AttributeExplorer オブジェクトは、1つの場所にあるシミュレーションモデルの個々のステーションの設定を定義する属性を管理します。
モデルの各マテリアルフローオブジェクトのダイアログを開いてテキストボックスに属性値を入力する代わりに、エクスプローラの表示のクリック時にAttributeExplorer でどのオブジェクトのどの属性を取得してリストウィンドウに表示するかを定義することができます。
その後、容量や時間などの各値を入力することができ、その値をPlant Simulation がオブジェクトに書戻し、モデル内で使用します。
AttributeExplorerオブジェクトを開くと、以下の設定画面が確認できる。データタブの「エクスプローラの表示」を選択する。
次のような表が表示される。ここでS01~S19の18個のStationオブジェクトに対してプロセス時間の定義を一括で管理している。
1列目:定義するStationオブジェクトを示す。
2列目:「processtime.mu」はプロセス時間の平均値を意味する。("mu"はエムユーではなく、μミューのこと)
3列目:「processtime.sigma」はプロセス時間の標準偏差σを意味する。
4列目:「RandomSeed」はイベントコントローラの乱数変数に関連した値。ここの設定を変えるとシミュレーション実行時の乱数が変わる。
AttributeExplorerの表からS01~S19はプロセス時間がすべて60秒、標準偏差が10秒と5秒で交互に設定されているようだ。そして、上段と下段のStation設定は対称のようだ。(例えばS01とS11)
Drainオブジェクトについてはデフォルト設定のままだったので割愛する。
続いてはユーザインターフェイス系オブジェクトの「Chart」を確認していく。
Chartは、シミュレーション実行中のオブジェクトの状況を記録するツールである。データタブは以下のような設定になっている。
まず、データソースとして「入力チャネル」が選択されている。(もうひとつの選択肢は「データテーブル」)また、サンプリング周期は1分で設定されている。
『入力チャンネル 』のボタンを選択すると、チャートに表示させるものとしての設定一覧が表で確認できる。
「S01」Stationを例にすると、行方向はそれぞれ以下のようになっている。
Working S01.statWorkingPortion
Waiting S01.statWaitingPortion
Blocked S01.statBlockingPortion
Failed S01.statFailPortion
Paused S01.statPausingPortion
Unplanned S01.statUnplannedPortion
上記で共通して出てくる"Portion"とは、直訳して部分、つまり時間割合を意味する。
Chartオブジェクトの「表示」タブを確認する。
カテゴリは「チャート」でタイプは「比率累積棒グラフ」が選択されている。
カテゴリは3種類でチャートの他にはヒストグラム、プロッターがある。
次に「軸」タブを見る。Y軸の範囲として0~1.02が設定されているようだ。(これは今回、比率累積棒グラフで100%換算するため)
「ラベル表示」タブでは、Chartのグラフタイトルや凡例をどこに表示させるかといった細かな設定ができる。この辺はエクセルで作るグラフと同じようなイメージなので馴染みやすい。
ここまででChartオブジェクトについても設定項目を確認できた。本記事の序盤で掲載したシミュレーション実行後のChart表示結果を再度見る。
改めて気付いたが、今回のサンプルモデルはS01~S09とS11~S19の比較なので、Chartが見やすいよう両者間に"X"というブランク設定を入れていたようだ。
以上で『Cycle object Demo』の設定項目は完了だ。
STEP3:一部を変更してシミュレーション結果の確認
Cycleで縛ることの効果をより確認するために各Stationに故障設定を追加してみる。
上段と下段のStation群の真ん中にあるS05とS15にだけ下記のような故障率を設定した。
シミュレーション実行後1時間経過後に30分停止。以降も1時間おきに30分停止するという故障設定。この時にCycleが有効化された上段と、そうでない下段でどのような動きの違いになるかを確認する。
シミュレーション実行後1時間がちょうど経過した時点のモデル状況。S05とS15の状態アイコンが赤色になり、故障(設備異常)が発生したことを示している。
故障発生後、7分経過後のモデル状況。Cycle設定を有効にした上段では、故障したStationよりも後工程のS06~S09も停止しており加工完了したパーツが残っている。
一方、下段ではS16~S19は後工程へと排出されパーツの供給待ち状態になっている。Cycleの定義有無によってここで差が出る。
シミュレーション完了後(24時間経過)のChart結果。Cycleの有無はWorking時間には影響が出ず、待ちとブロックの割合として差が出ることがわかる。
サンプルモデル『Cycle object Demo』の確認は以上だ。