Ich wollte schon lange über die Feinheiten der Programmierung des Austauschs über das Modbus RTU-Protokoll sprechen, wenn der Controller (in unserem Fall S7-1214) der RTU-Master ist. Kürzlich wurde ich gebeten, beim Austausch zwischen der SPS und dem Sinamics V20-Frequenzumrichter zu helfen. Warum also nicht gleichzeitig eine Notiz schreiben und versuchen, die Lösung des Problems den Kampfbedingungen näher zu bringen?
Tatsächlich haben sich die Deutschen selbst lange mit diesem Thema befasst:
In diesem Beispiel ist es sehr sinnvoll gestaltet, mit Visualisierung, Dialogen und Quests und der Möglichkeit, das Anwendungsprogramm zu erweitern, um mehrere V20-Wechselrichter über mehrere Schnittstellen abzufragen (mit S7-1200 können Sie bis zu 4 RS-485/422-Ports in seinem Warenkorb installieren). Das Beispiel ist sehr gut und sehr pedantisch gemacht. Ich habe die Probleme der Kommunikation mit dem Modbus-TCP-Protokoll bereits früher angesprochen, sie betreffen Habré.
Daher werde ich einige der Nuancen nicht noch einmal erläutern, sondern nur sofort schreiben, wie dies aus meiner Sicht richtig und bequem zu tun ist, insbesondere im Fall der V20-Umfrage. Die Ersteinrichtung des Frequenzumrichters ist in der Dokumentation beschrieben, einschließlich der zugehörigen Dokumentation zum obigen Beispiel. Lassen Sie uns nur die Punkte herausnehmen, die für uns als einleitende Punkte wichtig sind.
Modbus-Slave-Adresse im Netzwerk: 1
Kommunikationsparameter: 9600 8-Even-1
Slave-Speicherregister lesen:
40110 ZSW "Statuswort"
40111 HIW "Aktuelle Geschwindigkeit"
Speicherregister zum Schreiben:
40100 STW "Steuerwort"
40101 HSW "Geschwindigkeitsreferenz"
«Telegram off time (ms)» P2014[0] , 2000 (2 ), 130 . Modbus , , 130 , Fault 72.
. . S7-1214 1241 RS-485/422:
Step 7 V15.1 Update 4, CPU — 4.3.
, . Simatic : Modbus_Comm_Load (, ) Modbus_Master ( / /). FB Modbus_Comm_Load , Modbus_Master — , , , , ( ). , ( ) .
, , , SCL. ModbusMasterV20 SCL. « », .. . , Modbus_Master . , , , — «» , .
Init (Bool) — ,
PORT (PORT) —
BAUD (UDINT) —
STOP_BITS (USINT) — «»
PARITY (USINT) — , 0 — , 1 — odd, , 2 — even,
Step UInt, « » « »
Modbus RTU
, .
1.
#instModbusCommLoad.MODE := 4; // RS-485 4!
#instModbusCommLoad.STOPBITS := #STOP_BITS;
Modbus_Comm_Load, «» . , , . , () . , , , , . -, :
MODE , . , RS-485 4. 0, .
STOP_BITS — .
Modbus_Comm_Load. PORT ( ) . BAUD PARITY — — «» , . MB_DB . P2P_MB_BASE, Modbus_Master. «» , :
: .
«» CASE, , , .. .
Modbus Master :
#instModbusMaster(REQ := TRUE,
MB_ADDR := 1,
MODE := 0,
DATA_ADDR := 40110,
DATA_LEN := 2,
DATA_PTR := #ZSWHIW);
REQ — . TRUE, , FALSE — . ( Modbus RTU S7-300/S7-400), TRUE
MB_ADDR — Modbus RTU. = 1.
MODE — , 0 — , 1 —
DATA_ADDR — . ( 4), 110. Modbus ( RTU, TCP) «» «». . . 2 , 40110. Modbus 3. 3 Modbus. 40110, 109. , . , . , . ( ), , . « 0 », DATA_ADDR 30001. , - , «», . 16 , , 15 . ? 17. .
DATA_LEN — , 2
DATA_PTR — , «» . , , , . — STAT . , , , ( ). , , /.
FB:
,
ZSW — ( )
HIW —
, . , :
- , ( , №1). — - .
, , . , . , , «» , . , « ». . — . , Init . - .
OB1 CPU:
FirstScan «» OB. , CPU.
Port. Step 7, :
, . , , :
- , . ZSW:
Low enabled . , №15, , , 0, 1. watch table , , — , :
, . , , , , (fault, â„–3).
, WORD , - .
, . , — . , , - . DataV20:
, Inv :
- :
, Real, . , , . , , , .
— . .
:
, , , . , . , V20Data , Real.
â„–1, â„–2.
, :
. , , , / CPU.
. , . (MODE), 1, , . , .
, , — . ( ) . . , . , , «» ( ) , Invalid data. , «» , V20 . , , , . , «Control by PLC», . RTFM, !
, ( , ). , 0 16384. . , .
DataV20 «»:
V20 , , , .. 50 . , modbus.
, №1 ( ), №2 , . «» , , .
DataV20 .
25 , Running .
, , . (), (), , .. - , :
, , , , . .
, , , . , , - «» . , , DataV20. :
(mode = 0) 40025. [0..4] of WORD. Real .
, . Modbus_Master DONE Error (, «» , — ).
, Modbus. , 10 , , , «» , 30. , , , , .
Wir gehen davon aus, dass der Frequenzumrichter Informationen stabil mit der SPS austauscht, wenn alle drei Anforderungen erfolgreich abgeschlossen wurden. Daher lautet die allerletzte Zeile unseres Funktionsblocks wie folgt (wir fĂĽgen zuerst die boolesche Variable Connected im Datenblock DataV20 hinzu):