お問い合わせ

 

技術担当:服部

 

製品及び開発品に関わるお問い合わせはお問い合わせフォームか次のメールアドレスにご連絡ください。

rfedge.sam@gmail.com

 

新着情報

(平成30年3月28日時点)

PDAT2型最新版ソフトウエア

 最新版V1.4のインストーラと概要説明書をアップしました。

 

PDATシリーズ情報を更新

 製造データ自動転送無線ネットワークシステムPDAT1型の詳細をアップデートしました。

 

PDMSシリーズ情報の更新

 マイコン搭載型測定子機の試作品情報を掲載致しました。

 

製品販売に付いて

販売方法と製品セットを見る

 

 最新のソフトウエア

 最新版をダウンロードする

 

最新の技術資料

最新版をダウンロードする

 

品質保証と製造物責任

内容を確認する

通信プロトコルと通信ファームウエアの基礎

 この章では通信ソフトウエアを構築する上で必要な通信プロトコルと通信ファームウエアの基礎に付いてご紹介致します。旧RFM社のユーザマニアルには全てのプロトコルに付いての説明が載っていますが、この章ではよく使うプロトコルと使い勝手について説明します。無線ネットワークの形状は親機を中心とした星型ネットワーク(子機が親機とのみ通信して、子機同士では通信を行わない)を想定して話を進めます。

通信プロトコルの基本

 通信プロトコルは次の3つのケースを想定して作られています。

①コンピュータと親機間の通信

②コンピュータが親機を介して子機と行う通信

③子機が自発的に情報を発信し、コンピュータは親機を介してその情報を受ける割込み通信

親機はプロトコル形式の違いから上記3つのケースを自動的に判断して、受け取った情報を転送します。

上記3つの場合に共通する事は親機とコンピュータの有線通信が樹立されているのが条件ですが、コンピュータは何かしらのメッセージを親機から受けます。受領内容は

上記①の場合:送信した命令で指定した親機の情報

上記②の場合:送信した命令で指定した特定子機の情報又はタイムアウト情報

上記③の場合:子機が発信した情報

 

通信プロトコルの基本形式

[SOP][長さ][通信番号][命令][付属情報]

[SOP]=Start of Packet(パケットの識別符号:0XFB)

[長さ]=通信番号以降のパケット内文字数 例:10文字の場合は0X0A)

[通信番号]=パケットの識別番号:コンピュータ発信の場合は0X00~0X7Fをコンピュタが設定、子機の割込み送信の場合は0X80~0XFFで子機が自動的に設定

[命令]=Packet Type(命令の種類:命令によって異なる)

[付属情報]=命令毎に構文が指定されているので、その構文に合わせて作成

 通信番号の必要性

通信状態が悪く、子機が発信又は返信したメッセージを親機が1回で受信できない場合は子機がリトライを行う。その際に親機が他の子機と通信した内容が先に受信される場合がある為、照合の目的で通信番号で確認する方法が有効

ネットワークアドレス

ネットワーク内の無線モジュールは親機がネットワークアドレスを持っています。このアドレスは親機が認識した順番にアドレスが割り振られます。親機のネットワークアドレスは0X00で、最大255台の子機を登録できるので子機のネットワークアドレスは0X01~0XFFになります。このアドレス設定は親機が全初期化されるか、アドレステーブルが破棄されるまで継続されます。このアドレステーブルはコンピュタからアクセスする方法が無く、どの子機にどのネットワークアドレスが割り振られたかを知る手立てはそのネットワークアドレスに子機の名称又は製造番号を取得する命令を送って、返信の内容から判断するしか方法がありません。

命令セット

 通信パケットの4バイト目は「命令」ですが、命令には次の命令が含まれます。

親機様の命令

0X00 EnterProtocolMode 親機をプロトコルモードに設定する

0X01 ExitProtocolMode    親機がプロトコルモードから抜け出す

0X02 SoftwareReset        親機のファームウエアを再始動する

0X03 GetRegister            親機の持つレジスター内容を取得する

0X04 SetRegister            親機の持つレジスター内容に書き込む

これに対して親機は命令に0X10を加えた値で返信してきます。

0X10 EnterProtocolModeReply 親機のプロトコルモード設定命令実施の結果

0X11 ExitProtocolModeReply    親機のプロトコルモード逸脱命令実施の結果

0X12 SoftwareResetReply        親機のファームウエア再始動完了

0X13 GetRegisterReply            親機のレジスター内容の返信

0X14 SetRegisterReply            親機のレジスター書き込み結果の返信

子機への命令

0X05 TXData                   文字列を子機に送信する

0X0A GetRemoteRegister  子機の持つレジスター内容を取得する

0X0B SetRemoteRegister  子機の持つレシスター内容に書き込む

これに対して子機は親機に対して返信し、親機はコンピュタに対して同じ内容を返信します。

0X15 TXDataReply                  子機に文字列を送信した時の結果返信

0X1A GetRemoteRegisterReply 子機の持つレジスター内容の返信

0X1B SetRemoteRegisterReply 子機の持つレジスター内容設定結果に返信

しかし、一定時間内に子機から返信が無かった場合は親機がタイムアウト情報をコンピュタに返信します。

イベント(子機からの割込み通信)

子機が自発的に情報を発信する場合はパケットの4バイト目に次の文字が使われます。

0X26 RXData     子機のUARTに文字列が贈られた時の情報を流す場合に用いられます

0X27 Announce 親機又はネットワーク全体に情報を流す場合に用います

0X28 RXEvent   子機のイベント発生処理で発生したデータを流す場合に用います

例外的な例として

こきが起動又は再起動した時にネットワーク参加許可を親機に求めます。

0X2C JoinReguest  子機が親機にネットワーク参加の可否を問う時に送ります

0X1C JoinReply      ネットワークへの参加可能かを親機から子機に送ります

ご覧の様にパケットの第4番目バイトが役割は非常に大きく、送信時にはこのバイトの内容で後に続く構文が決まり、受信時にはこのバイトを読んでから処理方法を決めます。

RFEM2400/LPR2430ERAのレジスター構造

 RFEM2400/LPR2430ERAは7種のバンク(レジスター群)と1種の特殊バンクを具備しています。各バンクにはレジスターと呼ばれるメモリー群があり、条件をセットしたり、内容を読み出したりできます。レジスターの内容には読み書き(R/W)できるものと読み(R)だけできるものとがあります。詳しくは旧RFM社製ユーザーマニュアルをご参照ください。

第0バンク 無線機の設定 主に無線機係わる情報を集約しています。

第1バンク システムの設定 無線システムに係わる変数を集約しています。

第2バンク 状態設定値 個々の無線モジュールに係わるデータを集約しています。

第3バンク 通信設定 搭載されているUARTに係わる設定を集約しています。

第4バンク 通信プロトコル設定 無線通信に用いるプロトコルの設定を集約しています。

第5バンク 周辺機器の変数 無線機が持つ周辺機器の値を保存しています。

第6バンク 周辺機器の設定 無線機が持つ周辺機器の条件設定を集約しています。

第FFバンク 特殊機能 無線機の初期化を含め、特殊な機能を集約しています。

通常は第0バンクから第6バンク迄のレジスター値を読み書きすることで無線機を制御します。その制御構文は

読み出しの時:[レジスタ番号][バンク番号][データの長さ]

書き込みの時:[レジスタ番号][バンク番号][データの長さ]書き込む内容

となります。子機又は親機からの返信時は

書き込みの時:[レジスタ番号][バンク番号][データの長さ]

読み出しの時:[レジスタ番号][バンク番号][データの長さ]レジスターの内容

となります。バンク番号とレジスタ番号の送信順番が変わっていることにご注意ください。

データを並べる順番

 パケットで送るデータやレジスタの値はリトル・エンディアン(Little Endien)方式を使用します。この方式ではLSBのデータを先に、MSBのデータを後に並べます。アレイ変数を用いた例では

アレイ変数を byte[] A = byte[]{0X00, 0X01, 0X02, 0X03} と定義します。アレイ変数Aを送る場合は

[A[0]][A[1]][A[2]][A[3]] つまり[0X00][0X01][0X02][0X03] となります。

この方法では送られて来た順番でデータをアレイ変数に格納できるので受信ソフトウエア作成時には便利ですが、送信ソフトウエアを作成する時に迷うことがありますので、注意が必要です。

別の例として製造番号の場合は8バイトで表されますが、次の様になります。

byte[] MAC = byte[]{0X33, 0X00, 0X00, 0X00, 0X00, 0X00, 0XA1,0X15}と定義します。

並び順は[0X33][0X00][0X00][0X00][0X00][0X00][0XA1][0X15]の順番になります。

無線機のモード

 RFEM2400/LPR2430ERAの特徴は通信プロトコルと通信ファームウエアが標準装備な点です。これはProtocolMode(Bank=4,Register=0)が0X00(Protocol Mode)に設定されていた場合に内蔵通信ファームウエアの制御が行われるからです。

しかし、この通信制御を外して使いたい場合も出てくると思います。その時には透過モード(Transparent Mode)を用います。このモードではRFEM2400/LPR2430ERAは単なる無線機となります。透過モードには次の2つのモードがあります。

①2点間透過モード:(ProtocolMode=0X00) 2点間の無線通信の場合に用います。

②星型透過モード:(ProtocolMode=0X01) 星型ネットワークを形成する場合に用います。

上記の2モードで通信モード設定した場合、内蔵の通信ファームウエアは作動しませんので外部マイコンでの通信制御が行えます。しかし、同時に受信バッファーからデータを取り出す作業も行いませんのでデータを取り逃がすリスクもありますのでご注意ください。

状態メッセージとエラーメッセージ

 親機から子機に対して通信を行った場合、その通信の状態がどうであったかを示す状態がTxStatusに含まれています。TxStatusはGetRemoteRegister又はSetRemoteRegister命令を使用した時の返信(つまりGetRemoteRegisterReplyとSetRemoteRegisterReply)に付加されます。

TxStatus = 0X00の時 通信が正常に行われ、子機からACKが返信された。

TxStatus = 0X01の時 通信が正常に行われず、子機からACKが返信されなかった

TxStatus = 0X02の時 子機がリンクしていない。つまりネットワークメンバーに入っていない。

これのコードを読むことでコンピュタは通信状態がどうであったか、知ることができます。

また、補助コードとしてLQIがあります。LQIは下の2ケースを除いて受信強度を表します。

LQI = 0X00 子機からACKが受信できなかったので受信強度が測定できなかった

LQI = 0XFF 通信がワンホップ転送で到着したので受信強度を測定しなかった

この他に通信にエラーがあり、子機からACKが貰えなかった場合、子機が自発メッセージを発信します。その時に含まれるコードがAnnStatusです。AnnStatusには2種類あります。A0(0XA0)~A7(0XA7)とE0(0XE0)~EA(0XEA)です。A0~A7の場合はネットワークの変化や状態を示す内容が含まれ、E0~EAはエラーメッセージです。Aで始まるAnnStatusにはそのコードによって更なる付加情報が付きます。例えば、TxStatus=0X02の場合は0X02の後に製造番号が8バイト、ネットワークアドレスが2バイト付属します。従って次の様になります。

[0X02][MAC[0]][MAC[1]][MAC[2]][MAC[3]][MAC[4]][MAC[5]][MAC[6]][MAC[7]][NetAdd[0]][NetAdd[1]]