PC ベース自動化装置 制御プログラムの開発手順(18 ステップ)
C ベースの装置制御ソフトウェア開発で実際に踏む 18 ステップを、装置構造の把握から量産支援・保守までステップごとに整理。
C ベースの装置制御ソフトウェアを開発する際に、ふだん私たちが踏んでいる開発手順を順を追って解説します。
下記は一般的な順番ですが、開発者が複数いる場合は一部のステップは順序に関係なく同時に、または事前に進められます。あくまで大まかな流れと考えていただき、各プロジェクトの状況・開発者のスキル・投入人数に応じて適宜アレンジしてください。
前提
- IO ライブラリ・モーターライブラリは整備済みとします。
- 共通で使う GUI 画面は開発済みとします。
1. 装置構造の把握
まずは機械設計者と一緒にレビューを行います。
このときに装置全体の動作構造を把握する必要があります。装置はいずれもアクチュエータ(モーター、シリンダ等)を使って対象となるワークを加工・搬送するため、ワークがどう流れ、各モーター/シリンダがその流れにどう関わるのかを理解しないと、制御構造を設計できません。
- モーターの軸数、各モーターの動作方向と位置。
- シリンダの位置・方向・動作構造。
- 各センサが「どんなとき検出するか」「なぜそこに置かれたか」「制御に必要なのに無いセンサはないか」。
- 装置制御 PC に搭載するボード種類、PC との通信・インタフェース種別。
ソフトウェアエンジニアは装置の組立が終わってから構造を把握するのではなく、装置受注のコンセプト段階から積極的に参加して、制御しやすいコンセプトと制御観点での問題点を先に潰していくのが望ましいです。
2. 制御構造の設計とレビュー
上で把握した装置構造に基づいて、装置をどう制御するかを高レベルで設計します。
同時並行で動く部分、ワーク情報としてどんなデータが必要か、メイン画面ではどの情報をどう表示するか — このあたりを検討し、他の開発者と一度レビューしておくと後が楽になります。
3. プロジェクト作成
制御コンセプトが固まったら新規プロジェクトを作成します。Visual Studio で新規作成するか、既存プロジェクトを掃除して新しい開発に使えるよう共通部分だけ残してそれ以外は除去します。
個別装置の制御プロジェクトには該当装置のソースだけを置き、共通で使うソースは別の DLL ライブラリとして開発するのが望ましいです。会社で制御のために共有しているライブラリ群を、まとめて フレームワーク と呼ぶこともあります。
4. 基礎データ作業
基礎データを作成します。
- IO Map
- Cylinder Data
- Motor Data
基本データは各社で開発したフレームワークが使うフォーマットで作成すれば OK です。
データなしでソースコードのみで開発することも可能ですが、設定データを保存しないと、簡単なパラメータ修正のためだけにソースを再ビルドして実行ファイルを差し替える必要が生じ、ハードウェアが少し変わると同じ実行ファイルが使い回せなくなります。基本的な制御オブジェクトはデータファイルベースで設定可能にしておきましょう。
5. IO · Cylinder · Motor チェック
装置と制御 PC に電源が入ったら、IO・シリンダ・モーターが正しく動作するか確認します。
- センサがワークを正しく検出するか。
- シリンダの動作方向と、その先のセンサが正常に入るか。
- モーターの駆動方向、センサ状態、移動距離など。
6. インターロック作業(Check 関数の開発)
本格的なシーケンス開発に入る前に、モーターやシリンダの機構物が誤って衝突しないよう、厳しめにインターロックを組みます。
最初はガッチリ厳しくしておき、状況に応じて少しずつ緩めるのが正解です。最初に緩く組んでしまうと、シーケンス開発中のバグ・操作ミス・ジョグの誤操作などで機構物が衝突しやすく、衝突時にモーター Alarm で済めば幸運、最悪は機構物の破損につながり莫大な損失になります。多くの場合、機構破損は金銭的損失よりも納期へのダメージが致命的です。さらに想定外の動作で作業者が怪我をする事故すら起こり得るため、インターロックには十分な時間を投じるべきです。
インターロックには手を抜くな。
7. ティーチングパラメータの作成
全体の動作構造が見えてくるにつれて、各モーターが移動するティーチング値を作成します。
- ティーチング値は GUI で設定し、モーターを動かして実機で調整できる画面が必要。
- GUI で設定した値をシーケンスコードが消費できるデータ構造も用意。
8. Sequence 開発
いよいよシーケンスを開発し、つなげていきます。
シーケンスは同時並行で動くモジュール単位で開発し、各モジュールはひとつ以上のスレッドで動かせるようにします。シーケンスコードはモーター・シリンダ・IO 出力などを制御してワークを搬送/加工し、ワーク情報などのデータを更新します。
通常シーケンスは if-else や switch-case 構造で開発し、エラー処理用の構造も併設します。
シーケンス制御の構造は会社ごと・開発者ごとに千差万別で、標準化しないと装置ごとに制御コードがゴチャゴチャになりがちです。社内で全員が同じ構造で書けるよう、シニアエンジニアがシーケンス制御の基本構造を確立し、共通ライブラリ化しておくことが重要です。
9. 基本 GUI 開発・メイン画面
メイン画面に表示する情報を整理して実装します。一部はシーケンス開発と並行できます。
10. ビジョンアルゴリズムとティーチング画面
ビジョン Align や Inspection 機能を含む装置では、ビジョンアルゴリズム開発とビジョンティーチング画面の開発が必要です。
ビジョン担当が別にいて、ビジョンプログラムが別 PC または別実行ファイルで動く場合、ビジョン担当が開発し、装置制御プログラムは通信で結果を受け取って制御に使います。
11. シーケンスデバッグ
基本シーケンスがある程度組めたら、IDLE RUN(DRY RUN)で回し、各モジュールのシーケンスがエラーなく動作し、モジュール間の連結条件も正しく動くかを確認します。
開発中、ミスやバグによる機構衝突がもっとも発生しやすいフェーズです。厳しめのインターロックがここで効いてきます。
12. MES 開発・テスト
開発者が複数で人員に余裕があれば、MES 開発は他の作業と並行で着手できます。
まずは MES 仕様を把握し、基本プロトコル・データ構造を理解した上で、シナリオごとに開発を進めます。各シナリオやイベントで送受信すべきデータを処理しつつ、シーケンス開発・GUI 開発と歩調を合わせます。
MES の典型的な進め方:
- 仕様分析
- 基本プロトコル開発
- 個別データの送受信テスト(イベントなど)
- シナリオ開発
- ローカルサーバでのプロトコル/シナリオテスト
- 量産サーバテスト
13. Full Auto Run テスト & デバッグ
シーケンス開発が終わったら、ワークを投入して最終動作テストを行います。
実物を投入し始めると、想定外のセンサ・タイミング・機構問題が大量に出てきます。これらを機構・ハードウェア・CS エンジニアと相談しながら片づけていきます。ソフト自体のバグ修正と、ソフトだけで補える部分も対応します。
制御問題はソフトで解決するのが一番安い。 (ただし悪用厳禁)
14. マニュアル機能・利便機能の開発
セッティングを楽にするため、マニュアル動作機能はできるだけ早く用意するのが正解です。
セットアップ過程をよく観察し(あるいは開発者自身がセットアップしてみて)、利便性を高める機能を素早く実装します。新しく開発したソフトの初回セットアップは、他人に任せず開発者本人がやるのがベストです。
ドッグフードを食え。
15. エラー・メッセージデータ追加
シーケンス開発と同時にエラーデータを整理できれば理想ですが、現実にはシーケンスを回す方に意識が集中してしまい、エラーコードは後回しになりがちです。シーケンスデバッグがある程度落ち着いた段階で、現場担当が読んで分かるようエラーコードとメッセージを整理します。多言語データも入れられる構造にしておきましょう。
XMachineStudio はシーケンスを開発しながら、同じ画面で簡単に ERROR データを作成できます。
16. 多言語対応データ作業
上記のエラー/メッセージデータの多言語対応データを作成します。GUI 画面の多言語データも合わせて作ります。
17. ソフトウェア使用マニュアルの作成
ソフトのセットアップ・操作マニュアルを作成し、必要なら顧客が要求する言語への翻訳を依頼します。
18. 量産支援 · バグ修正 · 保守
装置の検収や、納品後の量産中に発生するバグを修正し、長期にわたり保守を支援します。