Die erste Spezifikation für das Modbus-Protokoll wurde 1979 veröffentlicht. Das Protokoll dient zum Abfragen von Slave-Geräten auf Anfrage-Antwort-Basis. Modbus RTU (Remote Terminal Unit) arbeitet über eine serielle Datenschnittstelle (RS-232, RS-485, RS-422). Heute konzentrieren wir uns auf ein leicht modifiziertes Protokoll, Modbus TCP, das auf der Anwendungsschicht des TCP / IP-Protokollstapels ausgeführt wird.
Lassen Sie uns zunächst sehen, wie der Serverteil konfiguriert ist (genauer gesagt programmiert). Modbus TCP Server ist analog zu Modbus RTU Slave, dh es ist ein Slave-Gerät. Das ist wichtig, sei nicht verwirrt. Der Server antwortet nur auf Anfragen, generiert diese jedoch nicht.
In diesem Beispiel wird eine S7-1516-CPU mit Firmware-Version 2.6 verwendet. Die S7-1200-Serie ist auf die gleiche Weise programmiert.
Lassen Sie uns zunächst eine Instanz des Funktionsblocks MB_SERVER in OB1 platzieren (Anweisungen → Kommunikation → Andere → MODBUS TCP).
Als nächstes müssen Sie drei Dinge tun. Legen Sie zuerst etwas an den Eingang MB_ HOLD_ REG. Dieser Eingangspin der FB-Instanz sollte einen Speicherbereich enthalten, der Halteregistern zugeordnet ist.
. Modbus TCP 5.0 « » (Discrete inputs), .. , — BOOL' %I. Coils, «» — , , , %Q. Input Registers, « » — %I, %IW. , Modbus I Q. , . - , , , «» . , Modbus TCP , .
, IB QB. QB_Count, QB_Read_Count IB_Count , 65535, / / .
/ , , . , — , ( ) . , « », « » , , .
, 5.0 ( 2.5 S7-1500 4.2 S7-1200) , . — . , «Access to data areas in DBs instead of direct access to MODBUS addresses as of version V5.0» .
, «» .
Add new block
«Data block» ,
« », ,
. () . .
MB_HOLD_REG
-, TCON_IP_v4 TCON_Configured. . , , — Hardware, . , «» Modbus, (, , ).
TCON_IP_v4
InterfaceID , .
ID — . 1 4096. ( MBSERVER, ). . 1.
ConnectionType — . 11 (0B ): TCP. .
ActiveEstablished — false, , .
RemoteAddress — , . IP- , . .
RemotePort — ,
LocalPort — TCP , . - ( RFC) Modbus TCP 502 ( Doom — 666, ). 502 .
:
ID . , network (MOVE) Modbus. Step 7 , . Modbus X1. , .
, , System Constants . , , .
64 "ModbusData".CONNECT_Struct.InterfaceId
CONNECT :
, , , MB_SERVER_DB. , . , , , , «» «» «».
, Online:
7002 , , . STATUS, . , / Modbus-, (, — « » « »).
Modbus- . — . 5 , 10, Modbus , . — : little endian , big endian, , . 5 , , float, «» :
, (, %Q) — «» Modbus, , . . , :
. 64, (8 * 8 + 0 = 64). «» Modbus-:
«» ( 64). «» modbus:
, , Step 7, , ( ):
, . , , . «» ( , ):
( online, ) modbus «» «Illegal data address», . : Restriction of read access to process images as of version V5.0.
, . Step 7 :
. . «MBHOLDREG parameter» :
. , .
№1. — (, ). 8187 : The MBHOLD_REG parameter has an invalid pointer. Data area is too small.
№2. WORD, «» . , , .
Experiment Nr. 3. Merker Region. Funktioniert, wurden die Werte vom Client eingegeben, keine Fehler.
Aus meiner Sicht ist die Dokumentation nicht klar genug. Es sollte "Standardzugriffsdatenblock oder Bit- (Token-) Speicher verwenden" und nicht "optimierter Zugriff" stehen. Im Falle eines optimierten Zugriffs sind Arrays von Wörtern in Ordnung. Und aus meiner Sicht ist der bequemste Weg der im ursprünglichen Beispiel beschriebene. Experiment 2 ist im Prinzip auch praktikabel (und es gibt eine Erklärung dafür), aber aus meiner Sicht ist es für die Arbeit unpraktisch.
Nächstes Mal werden wir uns mit dem Modbus TCP-Client befassen.