JTEKT#JX-BASIC Tutorial Part5_Modbus RTU通信してみよう

今回はJX-BASIC Part5になり、RS485通信のためにあるSend/Receive命令について説明します。JX-BASICはJTEKTが2022年12月から発売した、20命令語のみの薄型・省スペースの基板型シンプルコントローラになります。特徴としては20の命令語に絞り、シンプル機能(電源、通信、I/O)を実現できます。ちなみに、この基板型シンプルコントローラを使用するJXプログラミングソフトウエアは無料です。

詳しい仕様はこちらのLinkから確認してください。

https://www.electronics.jtekt.co.jp/jp/product/plc/jx-basic/

Reference Link

JTEKT#JX-BASIC Tutorial Part1_基板PLCを始めよう!
JTEKT#JX-BASIC Tutorial Part2_Timerを使ってみよう
JTEKT#JX-BASIC Tutorial Part3_Counterを使ってみよう
JTEKT#JX-BASIC Tutorial Part4_Drum命令を使ってみよう

Implementation

こちらが今回の構成になります。Modbus RTU ServerはSchneider社のM221で、Modbus RTU ClientはJTEKTのJX-Basicです。

Hardware

JXBASIC基板にはRS485の端子台があり、Modbus RTUもしくはASCII通信に対応しています。

Wiring

こちらは配線図になります。

Program

こちらは今回JXBASIC側で組んだプログラムで、これからStep By Stepで説明します。

Rung1

最初にStep制御用のレジスタを初期化する必要があるため、アドバンスからMath機能をRung1に追加してください。 

このようなMath機能の設定画面が表示されます。

JX-BASICはADD/SUBみたいに計算によって関数を分けるのではなくMath関数で一括管理します。今回はDS1=1に設定するだけなので、結果はDS1に設定し、計算式は1にすればOKです。

Done!

Rung2

Rung2はDS1は10なのかを比較する操作になります。Step=10かどうかは接点からCompare関数を使用します。

Compare(A-B)の設定が画面に出てました。

JXBASICでは比較の種類によって関数が別々ではなく、Compare関数で一括管理しています。今回はDS1が10なのかを比較したいだけなので、データA(Address)をDS1に入力、データB(Value)を10に入力すればOkです。

Done!

今度はまた加算するためMath関数を追加します。

DS200;=DS200+1のような計算式だけなので、オプションのワンショットもCheck入れます。

Done!いまDS=10になるたび、DS200は一回1を加算するようになります。

下図のようにDS201からDS204も同じ計算を行います。DS200からDS204まではSchneider PLCに送信するデータになります。

Rung3

今度はSchneider PLCにModbus RTU経由でデータを送信するため、通信からSend Blockを追加します。

Send Blockの設定画面が表示されます。

ComPort

最初にSend Portを実行するときに使用するComPortを指定します。

下図のようにDrop-Listから使用するPort を設定してください。

今回の記事ではModbus RTUを使用しますので、Port3を設定してください。

Com Port設定

次はPort3の詳しい設定を行うためCom Port設定をクリックします。

各ポートの設定詳細を変更できます。

プロトコル

今回の記事ではSchneider PLCとModbus 通信するのでプロトコルをModbusに指定します。

基本設定

こちらの設定は受信側に合わせて設定しましょう。

送信データ設定

今度は送信データの設定を行います。

シリアルデバイスのスレーブID

こちらはModbus RTU ServerのSlave IDになります。

Schneider PLC側では1を設定しましたので、こちらも同じように設定しましょう。

Modbus ファンクションコード

次はSchneiderと通信するときのFunction Blockを設定します。

JX-BASICでは05・06・15・16に対応しています。

今回の記事ではFunction Code16を使用します。

アドレス指定タイプ

こちらはModbus のアドレスタイプを設定できます。今回の記事ではSchneiderのPLCと接続しますので、Modbus 984 Addressingにしてください。

開始スレーブアドレス

こちらはJX-BASICがModbus RTU Serverで書き込む際のレジスタ番号先番になります。今回の記事ではレジスタ40001から読み始めます。

開始マスタアドレス

こちらはModbus  RTUに書き込むデータをJX-BASICの先頭アドレスになります。

下記の例だとSend Blockから送信するデータはDS200からになります。

マスターアドレスの数

こちらはJX-BASICがModbus RTU Serverに書き込む合計のレジスタ数です。

下図の設定になると、Schneider PLCの400001から1個を書き込み、DS200から転送する設定になります。

ステータス

こちらはSend Blockの状態を示すフラグやエラーコードを設定する場所です。

結果

Done!Send Blockが追加されました。

Rung4

回路4ではC100が1秒のTimer Delayプログラムで、C100=Send Blockが実行中のフラクです。

Rung5

回路5ではC100(Send Block実行中)が1秒経ったらStep20に移します。

Rung6

回路6ではC101=True(つまりSend Block実行成功)したらStepを40に遷移します。

Rung7

もしSend Blockにエラーが発生した場合、Step=900になります。

Rung8

回路8ではModbus RTU受信用のReceive Blockを追加します。

Receive Blockの設定画面が表示されます。

COMポート

JX-BASICではRS485を使用する場合CPU Port3を選択してください。

COMポート設定

次はCOMポート設定を行います。

こちらはCOMポートの通信速度やノードアドレスなど詳細設定画面です。

基本設定

基本的にはModbus RTU Server側の通信設定に合わせてください。

Modbus ファンクションコード

次はModbusのFunction Codeを設定します。今回の記事では04‐ Read Input Registerに指定します。

アドレス指定タイプ

こちらはModbus のアドレスタイプを設定できます。今回の記事ではSchneiderのPLCと接続しますので、Modbus 984 Addressingにしてください。

スレーブ・アドレスの開始

こちらはJX-BASICがModbus RTU Serverで読み始めるアドレス先番になります。今回の記事ではレジスタ40011から読み始めます。

マスターアドレスの開始

こちらはModbus RTUで読み取ったデータをJX-BASICの保存先になります。

下記の例だとReceive Blockから読み取ったデータはDS250から転送します。

マスターアドレス数

こちらはJX-BASICがModbus RTU Serverに読み取る合計のレジスタ数です。

下図の設定になると、Schneider PLCの400011から1個を読み、DS250に転送する設定になります。

ワードスワップ

場合によってMSBとLSBが逆になることもあり、このとき下図のオプションをONにしてください。

ステータス

こちらはReceive Blockの状態を示すフラグやエラーコードを設定する場所です。

Done!

これでReceive Blockが追加されました。

Rung9 

回路9ではC110が1秒のTimer Delayプログラムで、C110=Receive Blockが実行中のフラクです。

Rung10

回路5ではC110(Receive Block実行中)が1秒経ったらStep40に移ります。

Rung11

Receive Blockが実行に成功した場合、Step=50になります。

Rung12

Receive Blockが実行に失敗した場合、Step=991になります。

Rung13 Copy

次はModbus RTU Serverから読み取ったデータを別にMemory 領域に転送するため、Copy関数を使用します。

Copy関数の設定画面が表示されます。

今回は複数のメモリを一括転送するので、タイプをブロックに設定し、コピー元とコピー先を設定してください。下図の例ではDS250からDS254まで5つのメモリをDS350からDS354までに転送します(三菱のFMOVに似てる関数です)。

最後はワンショットオプションも入れておきます。

Done!

Rung14

最後はStep10に戻り、またSend Blockを実行するようにします。

Result

Done!JXBASICはSchneiderと通信できます。

このようにSchneider PLCにデータを送信し、Schneider PLCも受信したデータをそのままLoop Backします。

こちらはJXBASICとSchneider側が同時Monitorする様子です。

Schneider PLCの本体にあるSL LEDも点灯します。

Download

https://github.com/soup01Threes/JTEKT/blob/main/Project_ModbusRTU.jkp

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする