相手端末からの状態通知:ステータス 0x81

相手端末の状態通知を受けた時にUARTにもその情報が常に出力されます。

データは約1秒周期とポート入力値の変化時に送受信され、TWELITEの外部に接続したマイコン等でデータを解釈することができます。

:7881150175810000380026C9000C04220000FFFFFFFFFFA7 
:7881150175810000380026FF000C02220000FFFFFFFFFF73 <約1秒毎に受信される
:788115017581000038002743000C03220000FFFFFFFFFF2D
:788115017581000038002785000C05220000FFFFFFFFFFE9
:7881150178810000380027D3000C05230000FFFFFFFFFF97
:788115017881000038002813000C02230000FFFFFFFFFF59
:78811501758100003800284F000C02230000FFFFFFFFFF20
:788115017581000038002899000C04230000FFFFFFFFFFD4
 ^1^2^3^4^5^^^^^^^6^7^^^8^9^^^a^b^c^de1e2e3e4ef^g

データフォーマット

1: 1バイト:送信元の論理デバイスID (0x78 は子機からの通知)
2: 1バイト:コマンド(0x81: IO状態の通知)
3: 1バイト:パケット識別子 (アプリケーションIDより生成される)
4: 1バイト:プロトコルバージョン (0x01 固定)
5: 1バイト:LQI値、電波強度に応じた値で 0xFF が最大、0x00 が最小
6: 4バイト:送信元の個体識別番号
7: 1バイト:宛先の論理デバイスID
8: 2バイト:タイムスタンプ (秒64カウント)
9: 1バイト:中継フラグ(中継回数0~3)
a: 2バイト:電源電圧[mV]
b: 1バイト:未使用
c: 1バイト:DI の状態ビット。DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)。1がOn(Lowレベル)。
d: 1バイト:DI の変更状態ビット。DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)。1が変更対象。
e1~e4: AD1~AD4の変換値。0~2000[mV]のAD値を16で割った値を格納。
ef: AD1~AD4の補正値 (LSBから順に2ビットずつ補正値、LSB側が AD1, MSB側が AD4)
g: 1バイト:チェックサム

データの説明

以下にデータの中身を解説します。以下のデータ列を例にして解説します。

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

相手端末の論理デバイスID(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

相手端末の論理デバイスIDが78であることを表します。

データの種別(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

81はデータが相手端末の状態であることを表します。

パケット識別子(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

システムが使用する値です。

プロトコルバージョン(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

プロトコルバージョンが01であることを表します。

受信電波品質(1バイト)

signal-icon

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

受信電波品質が0x75であることを表します。(値は0~0xFF)

受信電波品質(LQI)は0から255までの数値で表されます。

あくまでも目安としてですが、以下の計算式でdBmに変換できます。

PdBm=(7*LQI-1970)/20
例:LQI((0-255)が125の時、約-54.75dBm

50未満(悪い -80dbm 未満)、50~100(やや悪い)、100~150(良好)、150以上(アンテナの近傍)といった区分けが品質の目安になります。あくまでも目安ですので、実地での検証をしてください。

相手端末の個体識別番号(4バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

相手端末の個体識別番号が0x81000038であることを表します。

製造時に一意に割り当てられる値です。変更することは出来ません。

宛先端末の論理デバイスID(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

宛先端末の論理デバイスIDが00であることを表します。

タイムスタンプ(2バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

タイムスタンプです。1/64秒でカウントアップします。0xFFFFで0に戻ります。

中継フラグ(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

中継フラグは中継された回数を示します。00は中継されていないことを表します。中継が一回入った場合は01になります。中継回数は最大で3回です。中継回数の初期値は1です。中継回数はインタラクティブモードのオプションビットで最大3まで変更できます。

電源電圧(2バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

電源電圧が0x0C04(3.076V)であることを表します。

値はmVです。

未使用(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

未使用です。

デジタル入力(DI)の値(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

デジタル入力(DI)の値を表します。値はDI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)に対応しています。例えばDI1に接続されたスイッチが押されている場合、値は01となります。DI4のスイッチが押されている場合、値は08となります。全てのスイッチが押されている場合、値はFFとなります。

デジタル入力(DI)の変更状態値(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

デジタル入力(DI)の変更状態値を表します。

アナログ入力(AI)の値(4バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

アナログ入力(AI)のAI4、AI3、AI2、AI1(各1バイト)の変換値を表します。

入力電圧0~2000[mV]のAI値を16で割った値です。(入力電圧が2000mV以上の場合は無効になります。)

アナログ入力(AI)の補正値(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

アナログ入力(AI)の補正値を表します。

アナログ値の復元には以下のように計算してください。

AI[mV] = (アナログ入力の値 * 4 + 補正値) * 4

チェックサム(1バイト)

:7881150175810000380026C9000C04220000FFFFFFFFFFA7

チェックサムが0xA7であることを表します。

チェックサムの計算

チェックサムとは受け取ったデータが正しいかどうかを確認するための付加データです。

データ部の各バイトの和を8ビット幅で計算し2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。
チェックサムバイトをアスキー文字列2文字で表現します。
例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この二の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)

受信データの表示

生データを表示

  1. TWELITE STAGEを起動してください。
  2. メニューから「ビューア」>[ターミナル]を選択してください。

グラフィカルに表示

  1. TWELITE STAGEを起動してください。
  2. メニューから「ビューア」>[標準アプリビューア]を選択してください。

利用例

チェックサムの計算方法

データ部の各バイトの和を8ビット幅で計算し、2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。チェックサムバイトをアスキー文字列2文字で表現します。

例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この2の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)