概要
設備ラインの制御機(親)と配下 3 機器(コンベア・ロボットアーム・検査カメラ)を、それぞれ独立したスタブとして 1 プロジェクト 4 セッションで同時に立ち上げます。
独自バイナリプロトコル LCP(Line Control Protocol)を題材に、ビッグエンディアン・長さ前置フレーミング・CRC16(Modbus) の組み合わせ、コマンド判別やフィールド条件による応答分岐、接続時の状態通知と 5 秒周期の定期通知を試せます。
機器構成
4 つのポートが同時に待ち受け、それぞれ独立して動作します。相手役は専用の制御クライアント(CommSim.LineControlClient)や ncat 等。
ライン制御機
TCP 7000 / Unit=01
接続時あいさつ・5 秒周期通知あり
コンベア
TCP 7001 / Unit=11
RUN・SET_SPEED
ロボットアーム
TCP 7002 / Unit=21
HOME・PICK
検査カメラ
TCP 7003 / Unit=31
INSPECT(recipe で OK/NG)
通信フロー
ライン制御機(7000・Unit=01)の例。接続時と 5 秒周期は CommSim 側から自動送信、各コマンドには要求に応じて応答します。
- 接続時 ←状態通知
A5 5A 01 81 00 0D 01 01 01 01 01 C6 5Eあいさつ(自動) - App →STATUS 要求
A5 5A 01 01 00 08 19 11 - ← CommSimライン状態(稼働・Auto・全機 OK)
- App →SET_MODE Auto
A5 5A 01 10 00 09 01 60 1C - ← CommSim現在 Auto(応答末尾
01) - 5秒毎 ←稼働通知
A5 5A 01 8F 00 09 01 74 32周期(自動)
Recipe で分岐します。Recipe=2 → 判定 NG、それ以外 → OK。フィールド条件ルールの実例です。想定プロトコル(LCP フレーム)
全メッセージ共通のフレーム構造。Unit で宛先機器、Command で操作を表し、末尾に CRC16(Modbus) を持ちます。
| コマンド | 要求 HEX(制御機) | 応答の意味 |
|---|---|---|
| STATUS (0x01) | A5 5A 01 01 00 08 19 11 | ライン状態(稼働・Auto・全機 OK) |
| START (0x02) | A5 5A 01 02 00 08 19 E1 | 受理(00) |
| STOP (0x03) | A5 5A 01 03 00 08 D9 B0 | 受理(00) |
| SET_MODE Auto (0x10) | A5 5A 01 10 00 09 01 60 1C | 現在 Auto(01) |
| SET_MODE Manual (0x10) | A5 5A 01 10 00 09 00 A0 DD | 現在 Manual(00) |
使用する機能
設定内容
プロジェクト設定
| 既定データ形式 | RawHex(バイナリ) |
| エンディアン | ビッグエンディアン |
| フレーミング方式 | LengthPrefixed(長さ前置) |
| 共通ヘッダ長 / 長さ ofs / size | 6B / 4 / 2 |
| 長さ基準 | 全体長(WholeMessage) |
構造体定義(抜粋)
判別フィールドは Command、チェックサムは Crc16Modbus(先頭から)。コマンドごとに定義を分け、Payload 構成(Mode・Speed・Station・Recipe)を切り替えます。
| 定義 | 判別値 | 特徴フィールド |
|---|---|---|
| STATUS 要求 | Command=1 | — |
| SET_MODE 要求 | Command=16 | Mode(0=Manual/1=Auto) |
| SET_SPEED 要求 | Command=34 | Speed(U16) |
| PICK 要求 | Command=49 | Station(U8) |
| INSPECT 要求 | Command=64 | Recipe(U8) |
バイナリ構造応答(制御機 7000)
応答テンプレートの {field:Unit} は受信 Unit をエコー、{len:2} は全体長を自動計算、{crc:Crc16Modbus} は CRC を自動付与します。
| ルール | 条件 | 応答テンプレート |
|---|---|---|
| STATUS → ライン状態 | なし | A5 5A {field:Unit} 81 {len:2} 01 01 01 01 01 {crc:Crc16Modbus} |
| SET_MODE Auto → Auto(01) | Mode = 1 | A5 5A {field:Unit} 90 {len:2} 01 {crc:Crc16Modbus} |
| SET_MODE その他 → Manual(00) | なし(受け皿) | A5 5A {field:Unit} 90 {len:2} 00 {crc:Crc16Modbus} |
オートメーション(制御機 7000 のみ)
| 名前 | トリガー | 送信内容(HEX) | 繰り返し |
|---|---|---|---|
| 接続時あいさつ | 接続時 | A5 5A 01 81 00 0D 01 01 01 01 01 C6 5E | なし |
| 定期状態通知 | 周期 5000ms | A5 5A 01 8F 00 09 01 74 32 | 無限 |
samples/line-controller/line-controller.commsim を「ファイル」→「開く」(Ctrl+O)。4 セッションすべてを起動し、制御クライアントまたは ncat 127.0.0.1 7000 で接続します。他のサンプルも構成・フロー付きで解説しています。
サンプル集へ戻る