相手端末からの状態通知:ステータス 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バイト:チェックサム
- AD値の復元には以下のように計算します。
AD1[mV] = (e1 * 4 + ef1) * 4 - AD ポートは未使用(VCC接続) の場合、対応する e1 ~ e4 値は 0xFF です。
データの説明
以下にデータの中身を解説します。以下のデータ列を例にして解説します。
:7881150175810000380026C9000C04220000FFFFFFFFFFA7
相手端末の論理デバイスID(1バイト)
:7881150175810000380026C9000C04220000FFFFFFFFFFA7
相手端末の論理デバイスIDが78であることを表します。
データの種別(1バイト)
:7881150175810000380026C9000C04220000FFFFFFFFFFA7
81はデータが相手端末の状態であることを表します。
パケット識別子(1バイト)
:7881150175810000380026C9000C04220000FFFFFFFFFFA7
システムが使用する値です。
プロトコルバージョン(1バイト)
:7881150175810000380026C9000C04220000FFFFFFFFFFA7
プロトコルバージョンが01であることを表します。
受信電波品質(1バイト)
: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となります。全てのスイッチが押されている場合、値は0Fとなります。
デジタル入力(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)
受信データの表示
生データを表示
- TWELITE STAGEを起動してください。
- メニューから「ビューア」>[ターミナル]を選択してください。
グラフィカルに表示
- TWELITE STAGEを起動してください。
- メニューから「ビューア」>[標準アプリビューア]を選択してください。
利用例
チェックサムの計算方法
データ部の各バイトの和を8ビット幅で計算し、2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。チェックサムバイトをアスキー文字列2文字で表現します。
例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この2の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)