SimaticS7-1500コントローラーでModbusTCPプロトコルをプログラミングするトピックを続けます。前回サーバー側についてお話しましたが、本日はクライアント側について説明します。Modbus TCPクライアントは、サーバーへの要求を生成するノードです。データを要求し、設定値/コマンドを送信します。Modbus RTUの用語では、これは「マスター」、つまりマスターデバイスです。RTUとは異なり、TCPには複数の「マスター」(正しくはクライアント)を含めることができます。
クライアント側のプログラミングはより困難です。サーバーには1つの関数ブロック呼び出しと1つのデータブロックで十分ですが、クライアントではそれほど単純ではありません。まず、クライアントは複数のサーバーと通信できます。これは実際に行われていることです。次に、1つのサーバーに対して複数の要求があります(入力レジスタの読み取り、ストレージレジスタの読み取り、「コイル」を出力するコマンドの書き込みなど)。これらすべてを1つの「サブスクライバーデバイス」で実行できます。第三に、異なるハードウェアプラットフォームの言葉で「尖った」および「鈍い」バイト順序を忘れないでください。不一致がある場合は、バイトを個別に反転する必要があります。
このため、クライアントをSCL(IEC 61131-3用語のST)でプログラムし、すべての処理を機能ブロックでラップすることは理にかなっています。より現実的には、この例では、コントローラーは2つのModbus TCPサーバーと通信し、それぞれに複数の要求を送信します。
まず、SCL言語でModbusClient関数ブロックを作成し、OB1のインスタンスに呼び出しを追加しましょう。
さらに、機能ブロックの変数のSTAT領域に、2つの構造TCON_IP_v4を書き込む必要があります。なぜ2つ?2つの異なるサーバーへの2つの接続があるためです。実際、2つの異なる接続があり、それぞれを説明する必要があります。前に述べたように、構成可能な接続を使用することは可能ですが、この例では使用されていません。
2つの構造が2つのサーバーと通信するように宣言されています
. , . .
, InterfaceId. ( « ») . Modbus №1 , ID .
ID 64. , , .
, ID. . . «» -. « » , 1 4096. «» . . ID = 1 .
, ConnectionType — TCP UDP. 0x0B hex 11 dec. , TCP.
ActiveEstablished. «». .
RemoteAddress. IP- . 192.168.43.100.
RemotePort. , Modbus TCP . «» 502.
LocalPort. .
, .
. , ID IP . .
. MB_CLIENT .
. - .
« »
. — 0 , , -, .
REQ . REQ = TRUE, .
DISCONNECT —
MB_MODE — «» . MB_DATA_ADDR Modbus TCP. . MODE 0.
MB_DATA_ADDR Modbus TCP. 40001 — « »
MB_DATA_LEN — . — . « 40001»
MB_DATA_PTR — , . , SingleHR INT, 2 Modbus. «» .
CONNECT — TCON_IP_V4
Modbus, , … . . . . . — , , … ( « » ). , , .
, (DONE) (ERROR) «» . , . . — .
, «» .
, . 80C6. MB_CLIENT , TCON ( TSEND, TRECEIVE ). : The connection partner cannot be reached (network error). . , - Modbus Windows Firewall. , , . , , . .
, . (REAL) — 4 . 2 . , 2, «» . — REAL ( ).
. , ModbusClient , Modbus, , 80A3. , , (- ). /. ( ), :
/ «» Srv1Req . «» ( , ) «» Srv1Disconnect, ( , .. , ), , . , REQ DISCONNECT , , , .
, «» (little-endian big-endian) . modbus 0.666. Modbus 1.663175E+38, (, , ). , , . . .
SWAP ( — ). , ( Data.Test) . , , «» , «», «». , 4 — .
, . 4 4 , .
Deserialize «» - , — . , Modbus.
, , , Modbus TCP, — () (). Modbus RTU «» . , , , . Unit ID, Device ID, — , , . Modbus TCP « » IP-. , Device ID . , . , «» Modbus TCP ID . Unit ID , Modbus RTU Modbus TCP (, , ). Modbus Unit ID. «» , , . , Modbus MB_Unit_ID. «» , .. Modbus. 0xFF 255. «» , TCP/IP. «», Unit ID . .
, , , , .. .
, . 3 (6 ), 40001, ( 40011). , «». ( «» ) . , , « » , ( Deserialize, ), . «» . Data , REAL.
, Data «» «», , — 818B.
, , «» .
, .
0.5, 0.7, 0.33 () « »
— ( ). , . , — . — , . « » ( « », ).
.
, , Server1Query ( Server2Query). CASE. « » .
, , . , , ( MODBUS_CLIENT) / .
2番目のサーバーでは、個別の接続が構成されており、modbus機能ブロックの個別のインスタンスがあります。最初のサーバーの通信と同時に「同時に」呼び出すことができるため、共通プログラムには、互いに独立して機能する2つのCASEステートメントがあります。
原則として、特定の要求に対する応答の分析とデータの信頼性の兆候の形成を追加し、その他の改善を行うことは論理的です。たとえば、コマンドと設定の送信は必須ではなく、変更することによってのみ可能です。
それでも、ここでModbusTCPプロトコルの操作について説明します。次回は、ModbusRTUプロトコルのプログラミングを見てみましょう。