アスキー形式
アスキー文字列を使った形式
書式モードはTWELITE-トワイライトのUART(シリアル通信ポート)に所定の書式により入力するモードです。以下の特徴があります。
書式モードはインタラクティブモード にてUARTモード(m)をアスキー形式(A)またはバイナリ形式(B)に設定します。
送信したいバイナリデータ列をアスキー文字列(0-9,A-F)に変換して無線モジュールに入力します。
Modbus ASCII 形式の書式に倣っています。(例: バイナリ系列 0x00 0x11 0x22 0x33 0xAA 0xBB 0xCC は “:00112233AABBCC69” という文字列で表現されます。)
送信したいバイナリデータ列にヘッダとチェックサムを付加し直接無線モジュールに入力します。
人手による検証は困難になりますが、マイコン間通信では最も効率が良い形式です。
書式モードは、送信コマンドを使用してデータを送信するモードです。このコマンドを送る際にデータ形式をアスキー形式とバイナリ形式の2種類から選択できます。送信コマンドとデータ形式の関係は以下の図の通りです。
本ページでは下図に示す送信コマンドについて解説します。
A: [送受信したいデータ]
↓↑
B: [送信コマンド[A: ] ]
↓↑
C: 系列Bをアスキー形式またはバイナリ形式に変換
[形式ヘッダ [B: [A: ] ] 終端]
↓↑
マイコンのUART入出力
送信コマンドには論理IDのみを使用した簡易形式と、32bitアドレス指定や様々な送信オプションを設定可能な拡張形式が有ります。それぞれの形式を以下で説明します。
データ形式 | バイト数 | 解説 |
---|---|---|
バイト | 1 | 送信先の論理ID。 |
バイト | 1 | コマンド種別(0x80未満任意) |
バイト列 | N | 送受信したいバイト列。 |
TWELITE-トワイライトから出力される形式は、入力時と同形式です。
データ形式 | バイト数 | 解説 |
---|---|---|
バイト | 1 | 送信元の論理ID。 |
バイト | 1 | コマンド種別(0x80未満任意) |
バイト列 | N | 送受信したいバイト列。 |
以下のコマンドを親機に入力した場合、全子機に対し 0x11 0x22 0x33 0xAA 0xBB 0xCC というバイト列を送信します。
0x78 0x01 0x11 0x22 0x33 0xAA 0xBB 0xCC
受信側は、以下のように親機の論理ID (0x00)から以下の バイト列を得ます。
0x00 0x01 0x11 0x22 0x33 0xAA 0xBB 0xCC
上記バイト列はTWELITEに直接入力するわけではあり ません。アスキー形式またはバイナリ形式で表現した上、 UARTの入出力を行います。
例えば上記の出力形式の場合、アスキー形式では以下のよう に表現されます。
:0001112233AABBCC68[CR][LF]
末尾の68はチェックサムです。
データ形式 | バイト数 | 解説 |
---|---|---|
バイト | 1 | 送信先の論理ID。 |
バイト | 1 | 0xA0 |
バイト | 1 | 応答ID。 |
ビッグエンディアン4バイト | 4 | 先頭バイトが拡張アドレス(0x80)指定の場合、アドレス指定を行います。拡張アドレス指定でない場合は、本領域は0バイトとなります。 |
バイト列 | N | オプション列。 |
バイト列 | N | 送受信したいバイト列。 |
TWELITE-トワイライトから出力される形式は、宛先の論理IDの次に0xA0バイトが続きます。
データ形式 | バイト数 | 解説 |
---|---|---|
バイト | 1 | 送信元の論理ID。 |
バイト | 1 | 0xA0 |
バイト | 1 | 送信元で指定した応答ID。 |
ビッグエンディアン4バイト | 4 | 送信元拡張アドレス。 |
ビッグエンディアン4バイト | 4 | 送信先拡張アドレス。 |
バイト | 1 | 通信品質 LQI 値。 |
ビッグエンディアン2バイト | 2 | 続くデータ領域のバイト数。 |
バイト列 | N | 送受信したいバイト列。 |
各種送信時のオプションが指定できます。アプリケーション再送や遅延のためのオプションは、1パケットで送信できるデータ量(送受信したいデータが78バイト以内)で使用してください。
※ 本オプションはネットワーク層を利用した送信では使用しないでください。
オプションバイト | パラメータバイト数 | 規定値v1.2.13以降 | 解説 |
---|---|---|---|
0x1 | 0 | 無効 | MAC ACK を設定します。 |
0x2 | 1 | 0x00 | アプリケーション再送を行います。 |
0x3 | 2 | 0x0000 | 初回の送信までの遅延を設定し、その最小値を与えます。 |
0x4 | 2 | 0x0000 | 初回の送信までの遅延を設定し、その最大値を与えます。 |
0x5 | 2 | パケット数 x 10 [ms] | アプリケーション再送の再送間隔を指定します。 |
0x6 | 0 | 無効 | 併行要求処理を行う。 |
0x07 | 0 | 無効 | 送信後、応答メッセージを表示しません。 |
0x08 | 0 | 無効 | 送信後、速やかにスリープします。 |
※ 遅延や再送回数などによりコマンド入力から1秒を経過すると、コマンド処理がタイムアウトし、処理待ちのコマンドが処理されます。
※ 遅延処理やアプリケーション再送が行われている間は、内部のパケットバッファー(10ヶ)が処理待ちで埋まっていて新しい処理要求が実行されない場合が有ります。また同時に平行処理できるパケットは5ヶとなります。
※ パケットの重複確認は、内部で割り振っている連番で新しいものを優先し旧いものは採用しません。新しい要求受け付けのパケットが先に届き、旧い要求受け付けのパケットが後に届くような場合、古いパケットは受信されません。(特に 0x06 オプションを付加した時に、このような現象が発生しやすくなります)
※ パケット分割されるデータサイズの場合に遅延処理やアプリケーション再送処理を行うと、後半のパケットが前半のパケットの処理完了後に処理されるため、大きな時間差が発生し受信側でタイムアウトを起こし受信が失敗します。原則として遅延が発生するオプションはパケット分割しない範囲で使用してください。
応答メッセージはコマンドの入力に対し、処理結果を通知します。
データ形式 | バイト数 | 解説 |
---|---|---|
バイト | 1 | 0xDB |
バイト | 1 | 0xA1 |
バイト | 1 | 応答ID。 |
バイト | 1 | 0:失敗 1:成功 |
以下の例では、バイトまたはバイト列を 0x を省略して表記します。
0x01 0x02 0x0A 0x0B ⇒ 01020A0B
※ 以下の例をそのままTWELITEに入力できるわけではなく、アスキーまたはバイナリ形式で表現します。
子機から親機へ( 0203 の2バイトを送信、コマンドバイトは 01)
・送信コマンド
00010203
^1^2
*1 00:親機宛
*2 データ
・応答メッセージ
DBA18001
^1
*1 01:成功, 00:失敗
・受信
78010203
^1
*1 78:子機(論理ID設定なし)から来た
親機から全子機へ(長い系列)
78020304DB32807005D70101100001000080A005D718DB32807005D7010110
0001000080A005D718DB32807005D70101100001000080A005D718DB328070
05D70101100001000080A005D718DB32807005D70101100001000080A005D7
子機→親機(単純な送信)
・送信コマンド
00A012FF123456
^1^2^3
*1 応答番号 12
*2 オプション無し
*3 データ
・応答メッセージ
DBA11201
^1^2
*1 応答番号 12
*2 01:成功
・受信データ
78A01286300001FFFFFFFFD80003123456
^1^2 ^3 ^4^5 ^6
*1 応答番号 12
*2 送信元アドレス(86300001)
*3 送信先アドレス(FFFFFFFF 情報なし)
*4 通信品質(LQI)
*5 データ部バイト数 (0003=3バイト)
*6 データ (3バイトのデータ)
子機→親機(Ack付きの送信)
・送信コマンド
00A01301FF123456
^1
*1 ACK 指定
子機→親機(0.768秒後に送信)
・送信コマンド
00A01001030300FF123456
^1^2 ^3
*1 送信遅延最小の設定
*2 0300(=768ms)後
*3 オプション終端
ファームウェアバイナリに設定情報を付記した設定済みファームウェアバイナリが利用できます。例えば、ボーレートを最初から設定したファームウェアを作成しておけば、毎回インタラクティブモードなどで設定する必要がなくなります。
インタラクティブモードでの設定を行う替わりに、書式モード(バイナリモード・アスキーモード)では、コマンドによりモジュールの動作(リセット・サイレント解除)や設定を行えます。
サイレントモードでは、受信回路を動作させず稼働中にパケット受信を行いません。起動後にマイコン経由で毎回特定の設定を反映させてから、通信を始めるような場合に利用します。