/

超簡単!標準アプリからの出力(親機・中継機アプリ)

超簡単!標準アプリからデータを受信した際の出力書式

0x81:相手端末からの状態通知

受信した入力信号の状態を出力します。

データ形式

#データ内容備考
charヘッダ:のみ
0uint8送信元の論理デバイスID
1uint8コマンド番号0x81のみ
2uint8パケット識別子アプリケーションIDより生成
3uint8プロトコルバージョン0x01のみ
4uint8LQI0-255
5uint32送信元のシリアルID0x8???????
9uint8送信先の論理デバイスID
10uint16タイムスタンプ1秒で64カウント
12uint8中継回数
13uint16電源電圧単位はmV
15int8-(未使用)
16uint8デジタル信号LSBから順にDIxへ対応、0がHigh
MSBが1なら定期送信
17uint8デジタル信号マスクLSBから順にDIxへ対応、1が有効
18uint8AI1の変換値アナログ信号の計算を参照、0xFFで未使用
19uint8AI2の変換値アナログ信号の計算を参照、0xFFで未使用
20uint8AI3の変換値アナログ信号の計算を参照、0xFFで未使用
21uint8AI4の変換値アナログ信号の計算を参照、0xFFで未使用
22uint8AIxの補正値LSBから2ビットずつ順にAIxへ対応
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

アナログ信号の計算

AIxの入力電圧 \(V\)は、受信した変換値\(e_{r}\)および補正値\(e_{fr}\)を使って次のように表すことができます。

$$\begin{align*} V &= e+e_f \\ \text{where} \\ e &= 16e_r \\ e_f &= 4e_{fr} \\ \end{align*}$$

単位は mV

出力データの例

:78811501C98201015A000391000C2E00810301FFFFFFFFFB
#データ内容
:charヘッダ:
780uint8送信元の論理デバイスID0x78
811uint8コマンド番号0x81
152uint8パケット識別子0x15
013uint8プロトコルバージョン0x01
C94uint8LQI201/255
8201015A5uint32送信元のシリアルID0x201015A
009uint8送信先の論理デバイスID0x00
039110uint16タイムスタンプ14.27
0012uint8中継回数0
0C2E13uint16電源電圧3118mV
0015int8-
8116uint8デジタル信号DI1 L DI2 H
DI3 H DI4 H
(定期送信)
0317uint8デジタル信号マスクDI1 DI2
0118uint8AI1の変換値16mV
FF19uint8AI2の変換値未使用
FF20uint8AI3の変換値未使用
FF21uint8AI4の変換値未使用
FF22uint8AIxの補正値AI1 0x03
FBuint8チェックサム0xFB
charフッタ\r
charフッタ\n

データの判別条件

親機・中継機アプリは、さまざまな種類の子機からデータを受信することができます。

出力されたデータが超簡単!標準アプリのものであるかを確認するには、次の箇所を参照してください。

#データ項目条件
1uint8コマンド番号0x81であること
3uint8プロトコルバージョン0x01であること
5uint32送信元のシリアルIDMSBが1であること(0x8???????
--ペイロードのサイズ23バイトであること(:とチェックサムの間)

パーサの実装例

0x01:任意のデータの受信

データ形式

#データ内容備考
charヘッダ:のみ
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号0x01のみ
2[uint8]任意のデータ長さ\(N\)のバイト列
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')