今回の記事ではEXORのDirect Serial使用しRS485通信をPCと確立する手順を0から説明します。
さ、FAを楽しもう。
Reference Link
http://soup01.com/ja/category/exor-ja/
Direct Serial communication?
EXOR社が提供するDirect Serial communicationは、シリアル機能への低レベルアクセスを可能にする汎用プロトコルです。このプロトコルを使用すれば、専用プロトコルを開発することなく、アプリケーション自体がシリアルベースのプロトコル(RS-232/485/422)を実現することができます。
Direct Serial はASCIIとバイナリの両方のモードが利用可能です。
Token Queue Sizeパラメータは、キューに保存されるトークンは設定で変更できます。また、キューが一杯になると、最も古いトークンは破棄されます。
Rules
そして、Direct Serialには4つの組み合わせがあります。
- rx-prefixおよびrx-suffixなし:受信ストリームはGAPパラメータ検出に従ってTokenに分割される。
- Rx-prefixが指定され、suffixが指定されていない: prefixより前の受信文字はすべて無視される。接頭辞以降の文字は、GAPパラメータが検出されるまでTokenに格納される。
- Rx-prefixとRx-suffixの指定:suffixとprefixの間のすべての文字がTokenに格納される。prefixの前、またはsuffixの後に、Gapが検出されるまで、または新しい。prefixが生成されるまで、受信したすべての文字は無視されます。
- RX-suffixが指定され、RX-prefixが指定されていない場合: suffixまでに受信したすべての文字がTokenに格納され、suffix以降、Gap検出までに受信したすべての文字は無視されます。
注意するのはrx-prefixとrx-suffixパラメータは16進文字列として指定されるため、任意の文字を指定することができます(DLE STX CR LFなど)。すなわち、文字列 “STR “を接頭辞として定義するには、文字列 “535452 “を定義することになります。
そして、文字列を受信キューに入れる前に、prefixとsuffixが取り除かれる(’payload’だけが保存される)。
Direct Serial を使用しデータを送信するには、その2つの条件を揃えてください。
- 送信される文字列は、定義されています。
- 先頭に「Tx-prefix」、末尾に「Tx-suffix」を設定した。
そうすると、文字列全体が直ちに送信される。
Working Flow..
- Token受信として定義されたタグを読むと、キューから前の文字列を取得する。新しいTokenがない場合は、空の文字列が返される。
- 受信したトークンの長さ(Length of Token Received)として定義されたタグを読み取ると、Tokenのバイト長を取得します。
- Tokens Availableとして定義されたタグを読み取ると、現在キューに格納されているTokenの数が取得されます。
- Token Acknowledgeとして定義されたタグに書き込むと、Tokenがキューから削除され、次のTokenがあれば利用可能になります。
- Token To Sendとして定義されたタグへの書き込みは、キューを使用せずに即座に送信できます。
Implementation
PC Side
最初にPC側を設定しましょう。
Driver
こちらは今回記事で使用したUSB→RS485の変換機です。アマゾンで1000円以内で購入できます。
Testtools
PCとEXORハードウェア間の通信テストを行うにはSerialTestツールを使用します。
サイドからDownloadしたZIP Fileを解凍し、SerialTool.exeを起動します。
USB→RS485変換器を選び>Port設定などを設定>OpenでPortを開始します。
Done!
次はData Tabを開きEXOR Hardwareにデータ送受信しましょう。
Device Manager
また、USB→RS485の変換器をPCに差し込んだあと、COMが認識されたかを確認してください。
EXOR Side
次はEXOR側を設定していきます。
Wiring
こちらはEXOR ex707Mのシリアル通信端子台です。
下図のように正確に配線しましょう。
Add Protocol
JMobileにProtocolを追加するため、Configuration>Protocl>+ボタンをクリックしてください。
Drop-ListからDirect Serialを設定しましょう。
JMobileからDirect Serialの設定画面が表示されます。これらのパラメータは、RX および TX 動作中のドライバの動作を決めます。また、すべてのプロトコル・パラメーターは、適切なメモリー・タイプを使用して実行時に上書きすることができるため、タグを使用して実行時に完全なセットアップを行うことができます。その場合、メモリー・タイプを使用した設定により、永久記憶装置に保存されます。
RX Token Prefix/Suffix
Read Tokenの接頭・接尾を16進文字列で指定します。
Token Gap
Token間の期間をミリ秒単位で設定できます。
TX Token Prefix/Suffix
Write Tokenの接頭・接尾を16進文字列で指定します。
Hexadecimal Tokens
checked = Tokenが16進数になります。
Token Queue Size
キュー内のToken数を 1 から 10000 までの整数値で設定できます。
Comm
次は通信ポートの設定を行います。
Baudrate・Parity・Data Bits・Stop Bitsをアプリケーションに合わせてください。
また、今回の記事ではRS485を使用しますので、ModeをRS-485に設定しましょう。
Port項目に関しては、実際EXORハードウェアに使用するPortによって変わります。
- EXORハードウェア内蔵のシリアル通信ポートはCOM1になります。
- PLCM03 および PLCM04(追加のシリアルポート)を使用する場合:
- スロット#1またはスロット#2に接続されたモジュールはCOM2になります。
- PLCM01(CAN インターフェース)を 2 つ使用する場合:
- Slot#1またはSlot#2に接続されたモジュールはCanPort 0になります。
- Slot#3またはSlot#4に差し込まれたモジュールはCanPort 1となります。
今回の記事ではEXORハードウェア内蔵のシリアル通信ポートを使用しますので、PortをCom1に設定してください。
Result
Done!これでOKです。
- Tx Token Prefix=STRです。
- Tx Token Suffix=LRです。
Tags
次はDirect Serialを使用するには必要なTagを追加します。
Screen
次は通信確認の画面を作成します。
Screen-1
こちらはDirect Serialの操作画面です。
- Token to Sendに新しい文字列を入力すれば、直ちにデータを送信します。
- Token to Received は受信したデータを表示します。
- Connect=Trueの場合はポートが稼働中の意味です。
- Token Available>0の場合はデータが受信されます。
- Token Acknowledgeを1にセットすると、Queueから1つのTokenが削除されます。
- Token 、Queue Sizeはプロジェクトに設定したQueueサイズを表示します。
- Length of Token Receivedは現在Queueに溜まってるデータサイズを示しています。
Screen-2
こちらには3つのボタンが追加され、Javascriptからデータの受信・送信を行います。
SEND DATA
SEND DATAボタンは動作する度、TokenToSendのTagに文字列を書き込み、データを送信するJavascriptが組み込まれています。
function BtnStd2_btn_onMouseClick(me, eventInfo) { var step=0; project.setTag(“StepCheck”,1); var sendData=’ABCD’; project.setTag(“StepCheck”,2); project.setTag(“TokenToSend”,sendData,-1,false); project.setTag(“StepCheck”,3); } |
ACK
ACKボタンは動作する度、現在の受信BufferをクリアするJavascriptが組み込まれています。
function BtnStd3_btn_onMouseClick(me, eventInfo) { project.setTag(“TokenAcknowledge”,true); project.setTag(“StepCheck”,1); var state = new State(); project.setTag(“StepCheck”,2); } |
GET DATA
GET DATAボタンは動作する度、受信Bufferのデータを画面に表示するJavascriptが組み込まれています。
function BtnStd4_btn_onMouseClick(me, eventInfo) { var state = new State(); project.setTag(“StepCheck”,1); var data=project.getTag(“TokenReceived”,state,-1,””); project.setTag(“StepCheck”,2); project.setTag(“DataReceived”,data,-1,false); project.setTag(“StepCheck”,3); } |
Result
こちらの動画からScreen-1の動作を確認できます。
EXOR.Direct RS485 communication-Demo1
こちらの動画からScreen-2の動作を確認できます。