装置・制御・ソフトウェアを統合すると問題が起きる
電気設計、制御設計、ソフトウェア開発など、複数の担当者がそれぞれの領域を分担して開発を進めます。
それぞれが仕様に従って設計し、単体試験でも問題なく動作している。それにもかかわらず、装置全体を組み上げると、思ったように動かないことがあります。
なぜ、個別には正しく動いているのに、統合すると問題が起きるのでしょうか。
問題は、要素と要素の間で起きます
装置全体の問題は、必ずしも特定の担当者の設計ミスとは限りません。
機械、センサ、モータ、制御装置、ソフトウェアなど、一つひとつが仕様どおりでも、接続したときの前提条件が合っていないことがあります。
例えば、次のような問題です。
- センサの更新周期が、制御側の想定より遅い
- モータや機械の応答が、想定した時間に間に合わない
- 通信の遅れによって、制御指令の反映が遅れる
- 起動や停止の順序が、機器ごとに合っていない
- 入出力信号の単位や範囲が一致していない
- 異常時に、どのシステムが停止を判断するか決まっていない
それぞれの担当範囲では問題がなくても、担当部署や機器の境界部分で認識の違いが生まれることがあります。
単体試験に合格しても、装置全体が動くとは限りません
制御ソフトウェアが正しい指令を出していても、実際の機械が想定より遅く動けば、次の処理に間に合わないことがあります。
センサが正しい値を出していても、通信や信号処理に遅れがあれば、制御性能が低下する可能性があります。
装置全体の動作は、それぞれの要素が相互に影響した結果として決まります。
そのため、個別の単体試験だけでは、システム全体として成立するかを十分に確認できないことがあります。
問題が見つかるのは、開発後半になりがち
システム全体の問題は、装置の組み立てやソフトウェアの統合が進んだ後に見つかることが多くあります。
例えば、
- 目標とする処理速度を達成できない
- 装置間のタイミングが合わない
- 複数の機能を同時に動かすと競合する
- 異常停止後に正常復帰できない
- 一つの機能を修正すると、別の機能が動かなくなる
といった問題です。
開発後半で問題が見つかると、機械、制御、ソフトウェアのどこに原因があるのかを切り分けるだけでも、多くの時間がかかります。
実機が完成する前に、全体の動きを確認する
こうした問題を減らす方法の一つが、システムシミュレーションです。
システムシミュレーションでは、装置を構成する要素をモデルとして表現し、それらを接続して全体の振る舞いを確認します。
例えば、
- 制御ロジック
- センサ
- モータやアクチュエータ
- 機械や搬送機構
- 通信
- 上位システム
などを、必要な範囲でモデル化します。
実機が完成する前に各要素をつなぐことで、処理時間、応答性、通信周期、異常時の動作などを事前に確認できます。
すべてを精密にモデル化する必要はありません
システムシミュレーションというと、装置全体を詳細に再現する大規模な取り組みに見えるかもしれません。
しかし、確認したい目的に応じて、必要な部分だけをモデル化すればよい場合もあります。
例えば、装置間のタイミングを確認するのであれば、各工程の所要時間や待ち条件を表現できれば、詳細な機械モデルまでは必要ありません。
制御性能を確認する場合には、機械の質量、摩擦、応答遅れなどを簡略化して表現することもできます。
モデルは、部署間の共通言語にもなります
システムシミュレーションの価値は、計算結果を得ることだけではありません。
モデルを見ながら、
- どの信号を受け渡すのか
- どのタイミングで動くのか
- どの条件で停止するのか
- 異常をどのシステムが判断するのか
- どこまでを誰が担当するのか
を関係者で確認できます。
文章だけの仕様書では、担当者によって異なる解釈が生まれることがあります。動作するモデルがあれば、具体的な条件を与えながら、システムの振る舞いを共有できます。
モデルベース開発も選択肢の一つです
装置全体の振る舞いをモデルで表現し、設計や検証に活用する方法の一つがモデルベース開発です。
ただし、すべてのソフトウェアをモデルで作り直す必要はありません。
既存のC言語プログラムやPLCプログラムを残しながら、問題が起きやすい部分、新しく開発する部分、機器間の接続部分だけをモデル化する方法もあります。
システムシミュレーションの目的は、モデルを作ることでも、実機試験をなくすことでもありません。
実機が完成する前に確認できることを増やし、開発後半の手戻りを減らすことが目的です。
各担当者が個別に正しく開発するだけでなく、早い段階から装置・制御・ソフトウェアをつなぎ、システム全体の振る舞いを確認することが重要です。
Spark Engineeringでは、制御モデル、装置モデル、既存のCコードなどを組み合わせた小規模なシステムシミュレーションや、検証環境の構築をご支援しています。


