Schneider#EXOR XA5のModbus RTU Serverと繋がってみよう

この記事ではEXOR社のXA5 IP67タッチパネルからModbus RTU Serverを立ち上げ、Schneider TM221のModbus RTU からFunction Blockを使用し各Registerにアクセスします。

さ、はじめよう!

Wiring

こちらは配線図です。

Function Block

今回使用するFunction BlockはProgramming Tabから追加できます。

%READ_VAR 

%READ_VAR Function Blockは、Modbus SLまたはModbus TCPでRemote Devicesからデータを読み取るために使用されます。注意するのは初期起動のタスクでEXECUTEをTrueにセットしても通信開始はしませんので、Function BlockのEXECUTEは最初にFalseに検知>そのあとTrueの立ち上がりエッジを検知する必要があります。

VAR_INPUT

VariableTypeDescription
Execute BOOL立ち上がりエッジを検出するとFBを実行する
Abort BOOL立ち上がりエッジを検出するとFBを停止する

VAR_OUTPUT

VariableTypeDescription
Done BOOLTRUE=FBがエラーなし実行されました
Busy BOOLTRUE=FBが実行中
Aborted BOOLTRUE=FBが実行してる間にABORT のせいで実行中断された
Error BOOLTRUE=FBエラーあり

Comm error Code

Configuration

これから%READ_VARの設定について説明します。%READ_VAR FBをクリックするとConfiguration PopUPが表示されます。

Link 

該当するFunction Blockが使用するHardware Portです。設定できるのはSL1: Serial 1・SL2: Serial 2・ETH1: Ethernetになります。(もちろんTM221のCPU Hardwareの制限もあり)

Id

Remote DevicesのIDになります。

Serial Lineの場合、設定範囲は1-247になります。

Ethernetの場合。設定範囲は1-16になります。

Timeout 

Remote Deviceから応答を受信するまでの最大待ち時間を設定できます(100ms単位、Default=10s)。

ObjType

Function BlockがRemote Devicesから読み出すObject 種類を設定します。

  • 0 for words Mbs 0x03 – Read multiple words (holding register)
  • 1 for digital inputs Mbs 0x02 – Read multiple bits (digital inputs)
  • 2 for digital outputs Mbs 0x01 – Read multiple bits (digital outputs)
  • 3 for input words Mbs 0x04 – Read multiple words (input register)

First object

Remote Devicesから読み出すObjectの最初のアドレスになります。

Quantity 

Remote Devicesから読み込むオブジェクトの数で、設定できる範囲は:

  • 1…125 for %MW
  • 1…2000 for %I
  • 1…2000 for %Q or %M
  • 1…125 for %IW

IndexData 

読み込まれた値が格納されると、TM221のLocal Devices (%MW) のアドレスになります。例えばビット(%I または %Q)を読み出す場合、読み出されたビットは指定された最初のアドレスから%MWに書き込まれます。(IndexData = 10、Quantity = 16 で 16 ビットを読み取る場合、結果は %MW10:X0 から %MW10:X15 に格納するのイメージです)

%WRITE_VAR

%WRITE_VAR Function Blockは、Modbus SLまたはModbus TCPでRemote Devicesのデータを書き込むために使用されます。注意するのは初期起動のタスクでEXECUTEをTrueにセットしても通信開始はしませんので、Function BlockのEXECUTEは最初にFalseに検知>そのあとTrueの立ち上がりエッジを検知する必要があります。

VAR_INPUT

VariableTypeDescription
Execute BOOL立ち上がりエッジを検出するとFBを実行する
Abort BOOL立ち上がりエッジを検出するとFBを停止する

VAR_OUTPUT

VariableTypeDescription
Done BOOLTRUE=FBがエラーなし実行されました
Busy BOOLTRUE=FBが実行中
Aborted BOOLTRUE=FBが実行してる間にABORT のせいで実行中断された
Error BOOLTRUE=FBエラーあり

Configuration

%WRITE_VARの設定について説明は%READ_VARとあまり変わらないので、ここで説明しません。

Implementation

EXOR Side

Add Protocols

Configuration>Protocolsを開き、+ボタンで新しい通信Protocolを追加します。

DropListからModbus RTU Serverを追加します。

Configuration

次はEXOR パネルのModbus RTU Server設定を行います。

Modbus ID

EXORパネルのModbus IDを設定します。

PLC Models

次はPLC Modelで、今回の記事では通信先がSchneiderなので、Modicon Modbus に設定しましょう。

Comm

今度はEXORパネルのCom設定を行います。

実際のアプリケーションに合わせて通信速度などを設定してください。

注意するのは今回はXA5を使用していますので、Com=1でModeはRS-485にしてください。

Add tags

Protocolが追加終わったら次はTagsを定義します。

Configuration>Tags>Modbus RTU Serverを選び>+ボタンでTagを追加します。

Coil Status

Coil Registerを追加する場合、Memory TypeをCoil Statusに設定し、Data Typeをboolean[]に設定すれば一括でBool配列を定義できます。

配列のサイズはArraysizeに入力してください。

Input Status

Input Status  Registerを追加する場合、Memory TypeをInput Statusに設定し、Data Typeをboolean[]に設定すれば一括でBool配列を定義できます。

配列のサイズはArraysizeに入力してください。

Input Register

Input Registerを追加する場合、Memory TypeをInput Registersに設定し、Data TypeをShort[]に設定すれば一括で16Bitの整数配列を定義できます。

配列のサイズはArraysizeに入力してください。

Holding Register

Holding Registerを追加する場合、Memory TypeをHolding Registersに設定し、Data TypeをShort[]に設定すれば一括で16Bitの整数配列を定義できます。

配列のサイズはArraysizeに入力してください。

Screen

次はEXORのModbus RTU Serverに定義したRegister一覧画面を作成します。

Schneider Side

Serial Line Configuration

Schneider M221 CPUのシリアルPortを設定するため、SL1を開きます。

ProtocolをModbusに設定し、通信速度などもEXOR のRTU Serverに合わせて設定してください。

下図はEXORパネルの設定画面とSchneider CPUの設定画面の比較です。

Modbus Configuration

今後はModbus RTUの設定を行います。

AddressingをMasterにします。

Program

これから通信プログラムを作成します。

Rung0,1

変数を初期化するプログラムです。ISTEPは通信の制御を行うための変数です。

Rung2,3,4

Rung2,3,4はEXORのModbus RTU Sever 000001から16Bitを読み込むプログラムです。

通信エラーが発生した場合、ISTEPを990に遷移します。

Rung5,6,7

Rung5,6,7はEXORのModbus RTU Sever 100001から16Bitを読み込むプログラムです。

通信エラーが発生した場合、ISTEPを991に遷移します。

Rung8,9,10

Rung8,9,10はEXORのModbus RTU Sever 400001から10個のRegisterを読み込むプログラムです。通信エラーが発生した場合、ISTEPを992に遷移します。

Rung11,12,13

Rung11,12,13はEXORのModbus RTU Sever 300001から10個のRegisterを読み込むプログラムです。通信エラーが発生した場合、ISTEPを993に遷移します。

Rung14,15,16

Rung14,15,16はEXORのModbus RTU Sever 400001から10個のRegisterを書き込むプログラムです。通信エラーが発生した場合、ISTEPを994に遷移します。

Rung17,18,19

Rung17,18,19はEXORのModbus RTU Sever 300001から10個のRegisterを書き込むプログラムです。通信エラーが発生した場合、ISTEPを995に遷移します。

RTU20,21

こちらのRungは今回のプログラムに使用しませんが、Rung20,21はEXORのModbus RTU Sever 400001から1個のRegisterを書き込むプログラムです。

Rung22,23

こちらのRungは今回のプログラムに使用しませんが、Rung22,23はEXORのModbus RTU Sever 000001から1個のBitを書き込むプログラムです。

Result

Rung2,Read Coil status

Rung2ではFirstObj=0,Quantity=16,Index=404に設定されましたので、EXOR パネルのCoil Status 000001から16個のRegisterを読み込み、結果をMW404に格納されます。

Rung4,Read Input Status

Rung4ではFirstObj=0,Quantity=16,Index=400に設定されましたので、EXOR パネルのInput Status 100001から16個のRegisterを読み込み、結果をMW400に格納されます。

Rung6,Read Holding Register

Rung6ではFirstObj=0,Quantity=16,Index=410に設定されましたので、EXOR パネルのHolding Register 400001から10個のRegisterを読み込み、結果をMW410からMW419までに格納されます。

Rung8,Read Input Register

Rung8ではFirstObj=0,Quantity=16,Index=420に設定されましたので、EXOR パネルのInput Register 300001から10個のRegisterを読み込み、結果をMW420からMW429までに格納されます。

Rung12,Write Coil Status

Rung12ではFirstObj=0,Quantity=16,Index=402に設定されましたので、Schneider PLCのMW402をEXOR パネルのCoil Status 000001から16個のRegisterを書き込みます。

Rung14,Write Holding Register

Rung14ではFirstObj=0,Quantity=10,Index=430に設定されましたので、Schneider PLCのMW430からMW439をEXOR パネルのHolding Register 400001から10個のRegisterを書き込みます。

Rung16,Write Single Holding Register

Rung16ではFirstObj=0,Quantity=1,Index=440に設定されましたので、Schneider PLCのMW440をEXOR パネルのHolding Register 400015VRegisterに書き込みます。

Rung18,Write Single Coil Status

Rung18ではFirstObj=0,Quantity=1,Index=441に設定されましたので、Schneider PLCのMW441 をEXOR パネルのCoil Status 000001VRegisterに書き込みます。

Download

こちらのLinkからプロジェクトをDownloadできます。

https://github.com/soup01Threes/Schneider/blob/main/Project_M221_ModbusRTU_Master.smbp

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

シェアする

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

フォローする