Silent Mode
サイレントモードでは、受信回路を動作させないため稼働中にパケット受信を行いません。起動後にマイコン経由で毎回特定の設定を反映させてから、通信を始めるような場合に利用します。
インタラクティブモードで以下の設定を行います。
Role に 80 を足しておく。通常の親機子機なら 80 で良い。
UART mode を書式モード(アスキー・バイナリ形式)に設定しておく。
起動直後に DB F1 メッセージが出力され、メッセージ中にサイレントモード状態かどうかの値が格納されています。
インタラクティブモードでサイレントモードおよび書式モード(バイナリ・アスキー)に設定した場合、サイレントモードを利用できます。
サイレントモードを解除するには、サイレントモード解除の DB F8 コマンド(0xDB 0xF8 0x10, アスキー形式では :DBF810X) を送信します。
サイレントモードを解除後は、サイレントモード状態に再設定する事は出来ません。
送信コマンドを投入した時の動作は未定義です。
元データのバイト数 | 表現形式におけるバイト数 | 解説 |
ヘッダ | 1 | ':' (0x3A) コロンを指定します。 |
データ部 | N | 2N | 元データの各バイトをアスキー文字列2文字(A-F は大文字)で表現します。 例えば 0x1F は '1' (0x31) 'F' (0x46) と表現します。 |
チェックサム | 2 | データ部の各バイトの和を8ビット幅で計算し2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。
チェックサムバイトをアスキー文字列2文字で表現します。
例えば |
フッタ | 2 | [CR] (0x0D) [LF] (0x0A) を指定する。 |
元データのバイト数 | 表現形式におけるバイト数 | 解説 |
ヘッダ | 2 | 0xA5 0x5A を指定します。 |
データ長 | 2 | データ長はビッグエンディアン形式の2バイトで、MSB (0x8000) を設定した上、データ部の長さを指定します。 例えばデータ部の長さが 8 バイトなら 0x8008 を指定します。 |
データ部 | N | N | 元データを指定します。 |
チェックサム | 1 | データ部の各バイトの XOR を計算します。 例えばデータ部が 00A01301FF123456 なら 0x00 xor 0xA0 xor ... 0x56 = 0x3D となります。 |
フッタ | (1) | チェックサムが事実上の終端です。無線モジュールからの出力では 0x04 (EOT) が付加されます。 |
Mode A/B
書式モードはTWELITE-トワイライトのUART(シリアル通信ポート)に所定の書式により入力するモードです。以下の特徴があります。
チェックサムによるエラーチェックを行う事で UART通信のデータ化けを検出する。
マイコンからバイナリ形式で直接送受信する。
書式モードはインタラクティブモードにてUARTモード(m)をアスキー形式(A)またはバイナリ形式(B)に設定します。
送信したいバイナリデータ列をアスキー文字列(0-9,A-F)に変換して無線モジュールに入力します。
Modbus ASCII 形式の書式に倣っています。(例: バイナリ系列 0x00 0x11 0x22 0x33 0xAA 0xBB 0xCC は ":00112233AABBCC69" という文字列で表現されます。)
送信したいバイナリデータ列にヘッダとチェックサムを付加し直接無線モジュールに入力します。
人手による検証は困難になりますが、マイコン間通信では最も効率が良い形式です。
最大送信バイト数は640バイトですが、1パケットに収めて送受信する事を推奨します。 下記【書式】のAにあたる[送受信したいデータ]
1パケットに収めるためには80バイト以下にしてください。
書式モードは、送信コマンドを使用してデータを送信するモードです。このコマンドを送る際にデータ形式をアスキー形式とバイナリ形式の2種類から選択できます。送信コマンドとデータ形式の関係は以下の図の通りです。
本ページでは下図に示す送信コマンドについて解説します。
送信コマンドには論理IDのみを使用した簡易形式と、32bitアドレス指定や様々な送信オプションを設定可能な拡張形式が有ります。それぞれの形式を以下で説明します。
TWELITE-トワイライトから出力される形式は、入力時と同形式です。
以下のコマンドを親機に入力した場合、全子機に対し 0x11 0x22 0x33 0xAA 0xBB 0xCC というバイト列を送信します。
受信側は、以下のように親機の論理ID (0x00)から以下の バイト列を得ます。
上記バイト列はTWELITEに直接入力するわけではあり ません。アスキー形式またはバイナリ形式で表現した上、 UARTの入出力を行います。
例えば上記の出力形式の場合、アスキー形式では以下のよう に表現されます。
末尾の68はチェックサムです。
TWELITE-トワイライトから出力される形式は、宛先の論理IDの次に0xA0バイトが続きます。
各種送信時のオプションが指定できます。アプリケーション再送や遅延のためのオプションは、1パケットで送信できるデータ量(送受信したいデータが78バイト以内)で使用してください。
※ 本オプションはネットワーク層を利用した送信では使用しないでください。
※ 遅延や再送回数などによりコマンド入力から1秒を経過すると、コマンド処理がタイムアウトし、処理待ちのコマンドが処理されます。
※ 遅延処理やアプリケーション再送が行われている間は、内部のパケットバッファー(10ヶ)が処理待ちで埋まっていて新しい処理要求が実行されない場合が有ります。また同時に平行処理できるパケットは5ヶとなります。
※ パケットの重複確認は、内部で割り振っている連番で新しいものを優先し旧いものは採用しません。新しい要求受け付けのパケットが先に届き、旧い要求受け付けのパケットが後に届くような場合、古いパケットは受信されません。(特に 0x06 オプションを付加した時に、このような現象が発生しやすくなります)
※ パケット分割されるデータサイズの場合に遅延処理やアプリケーション再送処理を行うと、後半のパケットが前半のパケットの処理完了後に処理されるため、大きな時間差が発生し受信側でタイムアウトを起こし受信が失敗します。原則として遅延が発生するオプションはパケット分割しない範囲で使用してください。
応答メッセージはコマンドの入力に対し、処理結果を通知します。
以下の例では、バイトまたはバイト列を 0x を省略して表記します。
※ 以下の例をそのままTWELITEに入力できるわけではなく、アスキーまたはバイナリ形式で表現します。
子機から親機へ( 0203 の2バイトを送信、コマンドバイトは 01)
親機から全子機へ(長い系列)
子機→親機(単純な送信)
子機→親機(Ack付きの送信)
子機→親機(0.768秒後に送信)
ファームウェアバイナリに設定情報を付記した設定済みファームウェアバイナリが利用できます。例えば、ボーレートを最初から設定したファームウェアを作成しておけば、毎回インタラクティブモードなどで設定する必要がなくなります。
インタラクティブモードでの設定を行う替わりに、書式モード(バイナリモード・アスキーモード)では、コマンドによりモジュールの動作(リセット・サイレント解除)や設定を行えます。
サイレントモードでは、受信回路を動作させず稼働中にパケット受信を行いません。起動後にマイコン経由で毎回特定の設定を反映させてから、通信を始めるような場合に利用します。
0xDB Command
インタラクティブモードでの設定を行う替わりに、書式モード(バイナリモード・アスキーモード)では、コマンドによりモジュールの動作(リセット・サイレント解除)や設定を行えます。
書式は先頭をDBとし、コマンド種別およびコマンドごとに決まるパラメータとなります。
例えばアプリケーションIDを 0x12345678
に設定する場合、コマンド種別が F2
で、パラメータが 00 12 34 56 78
、コマンドは DB F2 12 34 56 78
となります。
アスキー形式(チェックサム省略)では :DBF212345678X
となります。コマンド発行後には応答が戻ります。
バイナリー形式では、0xA5 0x5A ... XOR という加工が必要になります。 DB F2 00 12 34 56 78 というコマンドに対してバイナリで A5 5A 80 07 DB F2 00 12 34 56 78 21 という 12 バイトを送ります。
(インタラクティブモード中での入力はしないでください)
設定(F2)、設定取得(F3) 時のパラメータは、設定種別と設定内容を列挙します。設定内容は種別によって書式が変化します。
設定種別ごとのパラメータを解説します。 ※ 0xFF(OCTET) 0xFFFF(BE_WORD) 0xFFFFFFFF(BE_DWORD) の場合は、無効値として無視されます。
OCTET: 8bit=1バイトを示す。
BE_WORD: ビッグエンディアン 2 OCTETを示す。例えば 0x1234 は 0x12 0x34 の順に並びます。
BE_DWORD: ビッグエンディアン 4 OCTETを示す。例えば 0x12345678 は 0x12 0x34 0x56 0x78の順に並びます。
Try to use the binary format
App_Uart を書式モードのバイナリ形式で使ってみます。
バイナリ形式では、App_Uart で直接送信したいデータをバイナリ列で入出力できるため、マイコン間通信では取り扱いがしやすくなります。反面、ヘッダやチェックサムなどの計算が必要になります。
簡易的に送信する場合は「チャットモード、プロンプト無し」も利用できます。
最初に基本設定とアスキー形式による動作確認を行います。接続や設定等の問題がある場合、バイナリ形式では出力等を含め確認が難しいためです。
PC(TeraTerm) や macOS, Linux のターミナルソフト(CoolTerm など) を動作可能状態にして、インタラクティブモードによる設定が出来る事を確認しておいてください。
インタラクティブモードに入るには、+ + + と + を3回、一呼吸置きながら (0.2秒~1秒) 入力します。(参考:)
インタラクティブモードで以下の設定を済ませておきます。
親機側は Device ID を 121 (0x79) に設定します。(i を押して 121[Enter] と入力します)
UART Mode を A に設定します。(m を押して A[Enter] と入力します)
S キーを押してセーブ&リセットを実行します。
以下のようなメッセージが出力されます。:DB... は起動時のメッセージで、アプリケーションIDやアドレス情報が含まれます。
アスキー形式での動作を確認します。マイコンで利用される方も、まず Windows PC などでご確認ください。
マイコンなどプログラムからコマンド列が入力されることを想定しており、一定時間入力が無ければ(1000ms)タイムアウトが発生して入力を無効にするようになっています。
このため、コマンド列を入力する際には、ターミナルソフト等のコピー&ペースト機能(TeraTermならAlt+V)などを利用し、タイムアウトしないように入力してください。
なお、インタラクティブモードでは、タイムアウトが発生せず入力毎のエコーバック(入力した文字がターミナルに表示される)とチェックサムが間違えていた時にメッセージが表示できるようになっています。このためキーボードから直接入力しても試せます。
受信データは 0x78 からコマンド種別 0x00 でデータ 0x11 0x22 0x33 が届き、チェックサムが 0x22 です。この出力が確認できたら、今度は子機から親機に同様のメッセージを送ってみます。
親子間の簡易通信を確認しました。続いてこれと同じ送受信をバイナリ形式で行ってみます。
バイナリ形式の無線端末とアスキー形式の無線端末は互いに通信が可能です。入出力の書式が違うだけで、無線パケットは同じです。
ここでは親機だけバイナリ形式にしてみます。バイナリ形式での送受信を行うためには、バイナリ対応のターミナルソフトウェアが必要です。バイナリではターミナルソフトごとに操作や表示が異なりますので、よく習熟してください。
参考までに Linux, macOS 対応のターミナルを列挙します。
親機側のインタラクティブモードに入って UART Mode を B に設定します。
UART Mode を B に設定します。(m を押して A[Enter] と入力します)
親機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例です。
[Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
[Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
子機からアスキー形式での送信例と同じものを送信してみます。
親機からは 0xA5 0x5A ... に続くデータが表示されます。送信したいデータに簡易書式のヘッダが付加され、さらにバイナリ書式のためのヘッダ・フッタが追加される点に注意してください。
親機、子機双方をバイナリ形式に設定して送受信を試みます。
子機側でもインタラクティブモードに入って UART Mode を B に設定します。
UART Mode を B に設定します。(m を押して A[Enter] と入力します)
子機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例を示します。
RealTerm を立ち上げます。
[Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
[Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
子機から親機にデータ送信してみます。
子機側からデータ送信する方法はターミナルソフト毎に操作方法が違います。RealTerm の場合は、以下となります。
[Send]タブを開きます。
[Send Numbers] の2つある入力ボックスのいずれかに 0xA5 0x5A 0x80 0x05 0x78 0x00 0x11 0x22 0x33 0x78 を入力します。
[Send Numbers] ボタンを押します。
親機から子機へデータ送信してみます。
子機から親機にメッセージを送ります。を用いて親機 (0x00) 宛に、コマンド種別 0x00、データ 0x11, 0x22, 0x33 の3バイトを送信します。末尾の X はチェックサムを省略しています。
(Windowsのみ)
(Windows, macOS, Linux)
データ形式
バイト数
解説
バイト
1
送信先の論理ID。 0x00 ⇒ 親機宛 0x01 ~ 0x64(100) ⇒ 子機論理ID宛 0x78 ⇒ 全子機宛
バイト
1
コマンド種別(0x80未満任意) ※ データ領域として利用可能だが、0x80以上を入力してはならない。
バイト列
N
送受信したいバイト列。
データ形式
バイト数
解説
バイト
1
送信元の論理ID。 0x00 ⇒ 親機 0x01 ~ 0x64(100) ⇒ 子機論理ID 0x78 ⇒ 子機。(論理ID未設定)
バイト
1
コマンド種別(0x80未満任意) ※ 送信時に指定した値がそのまま入る。
バイト列
N
送受信したいバイト列。
データ形式
バイト数
解説
バイト
1
送信先の論理ID。 0x00 ⇒ 親機宛 0x01 ~ 0x64(100) ⇒ 子機論理ID宛 0x78 ⇒ 全子機宛 0x80 ⇒ 拡張アドレス
バイト
1
0xA0
バイト
1
応答ID。 任意に指定できる。後述の応答メッセージ(送信完了などの通知)に使用され、送信コマンドとの対応を付けるために使用する。
ビッグエンディアン4バイト
4
先頭バイトが拡張アドレス(0x80)指定の場合、アドレス指定を行います。拡張アドレス指定でない場合は、本領域は0バイトとなります。
バイト列
N
オプション列。 オプションは {オプションバイト} {オプション引数} が連続し、オプションバイトが 0xFF を指定する事で終端します。オプションを指定しない場合は 0xFF の1バイトを指定します。
バイト列
N
送受信したいバイト列。
データ形式
バイト数
解説
バイト
1
送信元の論理ID。 0x00 ⇒ 親機宛 0x01 ~ 0x64(100) ⇒ 子機論理ID宛 0x78 ⇒ 子機(論理ID未設定)
バイト
1
0xA0
バイト
1
送信元で指定した応答ID。
ビッグエンディアン4バイト
4
送信元拡張アドレス。
ビッグエンディアン4バイト
4
送信先拡張アドレス。 1バイトの論理IDの指定で送信された場合 0xFFFFFFFF が格納される。
バイト
1
通信品質 LQI 値。 0..255 の値を取り、受信時の電波強度に対応する。0が一番弱く、255が一番強い。
ビッグエンディアン2バイト
2
続くデータ領域のバイト数。
バイト列
N
送受信したいバイト列。
オプションバイト
パラメータバイト数
規定値v1.2.13以降
解説
0x1
0
無効
MAC ACK を設定します。 ※ 中継機による中継が行われなくなります。 ※ 送信先が 0x78(子機ブロードキャスト) の場合、この設定は無効になります。
0x2
1
0x00
アプリケーション再送を行います。 ・0x00 ~ 0x0F: 0 から 16 回の再送を行います。 送信成功を持って終了します。主にMAC ACK 設定時に使用します。 ・0x81 ~ 0x8F: 1 から 16 回の再送を行います。失敗成功に関わらず指定回数の送信を行います。主に MAC ACK を設定しない場合に利用します。 応答メッセージは、全ての再送処理が終わってから処理されます。
0x3
2
0x0000
初回の送信までの遅延を設定し、その最小値を与えます。 パラメータはビッグエンディアンの2バイトで、遅延[ms]を指定します。
0x4
2
0x0000
初回の送信までの遅延を設定し、その最大値を与えます。 パラメータはビッグエンディアンの2バイトで、遅延[ms]を指定します。最小値より小さい値を与えた場合は無効になります。 結果、送信要求発行からの遅延は (最小値)+(最大値-最小値)x(乱数 0...1) となります。
0x5
2
パケット数 x 10 [ms]
アプリケーション再送の再送間隔を指定します。 パラメータはビッグエンディアンの2バイトで、送信間隔[ms]を与えます。
0x6
0
無効
併行要求処理を行う。 このオプションが設定された要求は、要求完了までブロックせず、次の要求処理を受け付けます。 例えば 0.5 秒の遅延を設定した要求を 3 ヶを連続して投入した場合、本オプションを付けない場合は 0.5 秒後、1.0秒後、1.5秒ごと順次処理されますが、本オプションを付加すると 0.5秒後に3つの送信要求が処理されます。 ※ パケット分割しない送信処理に限ります。 ※ 併行動作の最大数は5ヶで、送信順は保証されません。
0x07
0
無効
送信後、応答メッセージを表示しません。
0x08
0
無効
送信後、速やかにスリープします。 ※ スリープからの復帰は RX ポート (DIO7) に Lo → Hi への割り込み信号を入力します(何か1バイト入力する)。コマンドはUART初期化が終わってから入力します。
データ形式
バイト数
解説
バイト
1
0xDB
バイト
1
0xA1
バイト
1
応答ID。 拡張形式では指定した応答ID、 簡易形式では続き番号(128~255)が振られます。 ※ 拡張形式と簡易形式を混在させて利用する場合、応答IDに128以上の値を使用すると識別できなくなります。
バイト
1
0:失敗 1:成功
番号
名前
データ形式
バイト数
解説
1
対象
OCTET
1
0xDB
2
コマンド種別
OCTET
1
下表に解説
3
パラメータ
種別による
種別による
設定データを示す。
コマンド 種別
機能
説明
パラメータ
応答
対応バージョン
F0
ACK
ACK 応答の要求を行う。
なし
OCTET 0xDB OCTET 0xF0 OCTET 0x01
v1.2以降
F1
モジュールアドレス
モジュールアドレス情報などを表示する。モジュール起動時にも出力される。
なし
OCTET 0xDB OCTET 0xF1 BE_DWORD アプリケーションID BE_DWORD バージョン番号 OCTET IDアドレス(1バイト) BE_DWORD モジュールのシリアル番号 OCTET 0:通常 1:サイレントモード中 OCTET 0:ネットワークDOWN, 1:ネットワークUP
v1.2以降
F2
設定
モジュールに設定します。設定後、設定内容は「セーブ&リセット」しない限り反映されません。応答はコマンド種別F3の設定値となります。
別表参照
成功すればコマンド種別F3 で、設定した内容が報告される。失敗すればコマンド種別 F3、パラメータ FF が報告される。
v1.2以降
F3
設定取得
モジュールに設定内容を要求します。
v1.2以降
F8
モジュール制御
■ 0x10 サイレントモードで起動したモジュールを稼働状態にする。
■ 0x10 OCTET 0x10
■ 0x10 OCTET 0xDB OCTET 0xF8 OCTET 0x11 OCTET 0:サイレント 1:解除
v1.2以降
FD
クリア&リセット
不揮発領域をクリアして無線モジュールをリセットします。
なし
応答はありません。 リセット後に始動メッセージが出力されます。
v1.2以降
FE
セーブ&リセット
データをセーブして無線モジュールをリセットします。
v1.2以降
FF
リセット
無線モジュールをリセットします。設定内容は破棄されます。
v1.2以降
番号
名前
データ形式
バイト数
解説
1
設定種別
OCTET
1
設定の種別を示す。 0xFF は無効・エラーを意味し、続く 設定内容は格納されない。
2
設定内容
種別による
種別による
設定データを示す。
設定種別
名前
設定データ形式
バイト数
解説
対応バージョン
0x00
アプリケーションID
BE_DWORD
4
アプリケーションIDを設定する。※
v1.2以降
0x01
チャネルマスク
BE_DWORD
4
利用するチャネルを指定する(ch11 なら 1UL << 11 = 0x800)
v1.2以降
0x02
出力設定
BE_WORD
2
再送回数と電波の出力を設定する。 下位の1バイトのみを使用し、再送回数を上位4ビット、電波の出力を下位4ビットで設定する。 例)再送回数を8回、電波の出力を3(最大出力)に設定する場合は 0x0083 を指定します。※
v1.2以降
0x03
ID
OCTET
1
0x00: 親機 0x01~0x64: 子機ID指定 0x78:子機ID未指定
v1.2以降
0x04
役割
OCTET
1
子機のみ有効で、以下のいずれかを指定します。通常はネットワーク層を利用しない配送方式を選択してください。 ■ ネットワーク層を利用しない配送方式: 0 -> 通常の指定(親機または子機) 1-3 -> 中継子機(id 指定で 1~100 または 120の子機指定と同時に指定します。)1~3 は最大中継段数です。この中継方式は受信したパケットを中継段数が指定回数になるまで再送を繰り返す方式ですので、中継機の配置や数によっては重複したパケットが中継されることになります。 ■ ネットワーク層を利用する配送方式: (書式モードのみ) 11 -> 親機 12 -> 中継機 13 -> 子機 ■ サイレント モード: サイレントモードでは起動時に受信回路を開きませんので、解除コマンドを実行するまでは無線パケットに応答する事はありません。 設定は上記指定に 80 を足します。 例えば 93 を指定すると「ネットワーク層利用かつサイレントモード」となります。※
v1.2以降
0x05
中継レイヤ
OCTET
1
中継レイヤ番号です。中継機は中継レイヤ数の上位(より小さい値)の中継機・親機に接続を試みます。本設定は役割がネットワーク層を利用する配送方式で中継機に設定しているときにだけ設定してください。※
v1.2以降
0x06
UARTモード
OCTET
1
0:透過モード 1:書式・アスキー 2:書式・バイナリ 3:チャット 4:プロンプト無しチャット
v1.2以降
0x07
UARTボーレート
BE_DWORD
4
ボーレートを指定します。※
v1.2以降
0x08
UARTパリティ
OCTET
1
以下の設定の組み合わせで、各設定値の総和を指定する。 Parity = 0: None, 1: Odd, 2: Even Stop = 0: STOP 1, 4: STOP 2 Bit = 0: 8Bit, 8: 7Bit 例)7E1 なら 8+2+0=10(0xA) を指定します。
v1.2以降
0x09
暗号化設定
OCTET
1
0: 暗号化なし 1: AES128bit暗号化
v1.2以降
0x0A
暗号化キー
OCTET[16]
16
16バイトの暗号化キーを指定します。インタラクティブモードでは設定できないバイナリ列を格納できます。この場合、インタラクティブモードの表示が崩れる場合があります。
v1.2以降
0x0C
区切り文字の指定
BE_WORD
2
区切り文字列の指定を行います。(0x00-0xFF)
v1.2以降
OCTET
1
最小パケットサイズを指定します。(1-80)
OCTET
1
未入力タイムアウトを指定します。(0, 10-200)
0xFF
エラー
無し
0
エラーや異常を示します。
v1.2以降
データ形式 | バイト数 | 解説 |
ヘッダ | 2 | 0xA5 0x5A |
データ長 | 2 | 0x8000 + 続くデータ長 この例では0x80 0x05 で5バイト |
データ部 | 5 | データ部で、あて先情報等のヘッダおよび送信したいデータが含まれる。 ・例は簡易形式で子機宛に 0x11 0x22 0x33 を送信します。 0x78 0x00 0x11 0x22 0x33 0x78 ⇒ 送信元アドレス(簡易) 0x00 ⇒ コマンド種別 (0x00 は特別な意味は無い) 0x11 0x22 0x33 ⇒ 送信したいデータ |
フッタ・チェックサム | 1 | データ部の前バイトのXORとなります。 ・0x78 xor 0x00 xor 0x11 xor 0x22 xor 0x33 = 0x78 |
フッタ・終端 | 1 | 0x04 出力時には 0x04 が付加されるが入力時には不要 |