概要
固定スタートバイト+種別+長さ+可変ペイロード+チェックサム、という典型的な独自バイナリセンサを再現します。
可変長 Payload を「長さ元」フィールドで扱う方法、チェックサムを応答テンプレートに自動埋め込みする {crc:Crc16Ccitt} 記法、そして長さフィールドと実バイト数のずれを吸収する「長さ補正」の設定を学べます。
{crc:Crc16Ccitt} で CRC を自動付与する 1 ルール機器構成
単一の TCP サーバセッション。センサクライアント(CommSim.Sample のシナリオ「センサ」等)が接続して Read 要求を送ります。
センサクライアントテスト対象アプリ
⇄
CommSimセンサスタブ(9500)
通信フロー
Read 要求(Type=0x01)に対し、値 100 を載せた Read 応答(Type=0x81)を返します。
- Client →Read 要求
AA 55 01 01 00 B0 B9Type=01 / ch0 - ← CommSimRead 応答
AA 55 81 02 00 64 B6 91値 100 + CRC 自動
想定プロトコル
先頭 STX に続き、Type・Length・可変 Payload・末尾 CRC。Length は Payload のバイト数を示します。
AA 55STX 2B
Type1B 判別
Length1B
Payload可変
CRC162B CCITT
| フィールド | 型 / 役割 | 備考 |
|---|---|---|
| Stx | u16 | 固定 0xAA55 |
| Type | u8 / 判別 | 1=Read / 129(0x81)=ReadResponse |
| Length | u8 / 長さ | Payload のバイト数 |
| Payload | hex | Length の値だけ読む(可変長) |
| Crc | u16 / チェックサム | CRC-16/CCITT(先頭から) |
使用する機能
設定内容
プロジェクト設定
| 既定データ形式 | RawHex(バイナリ HEX) |
| エンディアン | Big |
| フレーミング方式 | 長さ前置(LengthPrefixed) |
| 共通ヘッダ長 / 長さ ofs / size | 4B / 3 / 1 |
| 長さ基準 / 補正 | ボディ長 / +2(末尾 CRC 2 バイト分) |
長さ補正 +2 は、Length が「Payload のバイト数」を示すのに対し、フレーム末尾に CRC(2 バイト)が付くため、実受信バイト数が
Length + 2 になるのを補正しています。ヘッダ/トレーラを持つ独自プロトコルでも、この補正で正しく切り出せます。バイナリ構造応答
| ルール | 条件 | 応答テンプレート |
|---|---|---|
| Read(0x01) → 値100 応答(0x81) | なし(1 種類) | AA 55 81 02 00 64 {crc:Crc16Ccitt} |
応答の値(ここでは 100)を変えても、{crc:Crc16Ccitt} が先頭から直前までを自動計算して末尾に付与するため、CRC を手計算する必要はありません。
開き方:
samples/sensor-proto/sensor-proto.commsim を「ファイル」→「開く」(Ctrl+O)。起動後、Read 要求 AA 55 01 01 00 B0 B9 を送ると応答が返ります。他のサンプルも構成・フロー付きで解説しています。
サンプル集へ戻る