La primera especificación del protocolo Modbus se publicó en 1979. El protocolo está diseñado para sondear dispositivos esclavos sobre una base de solicitud-respuesta. Modbus RTU (unidad terminal remota) funciona a través de una interfaz de datos en serie (RS-232, RS-485, RS-422). Hoy nos centraremos en un protocolo ligeramente modificado, Modbus TCP, que opera en la capa de aplicación de la pila de protocolos TCP / IP.
Primero, veamos cómo está configurada la parte del servidor (programada, para ser más precisos). El servidor Modbus TCP es análogo al esclavo Modbus RTU, es decir, es un dispositivo esclavo. Esto es importante, no se confunda. El servidor solo responde a las solicitudes, pero no las genera.
Este ejemplo utiliza una CPU S7-1516 con la versión de firmware 2.6. La serie S7-1200 se programa de la misma forma.
Primero, coloquemos una instancia del bloque de función MB_SERVER en OB1 (Instrucciones → Comunicaciones → Otros → MODBUS TCP).
A continuación, debe hacer tres cosas. Primero, ponga algo en la entrada MB_ HOLD_ REG. Este pin de entrada de la instancia de FB debe contener un área de memoria que se asigne a los registros de retención.
. 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, «» . , , .
Experimento 3. Región Merker. Funciona, los valores fueron ingresados desde el cliente, sin errores.
Desde mi punto de vista, la documentación no es lo suficientemente clara. Debería decir "utilizar bloque de datos de acceso estándar o memoria de bits (token)", no "acceso optimizado". En el caso del acceso optimizado, las matrices de palabras están bien. Y desde mi punto de vista, la forma más conveniente es la descrita en el ejemplo original. El experimento 2, en principio, también es viable (y hay una explicación para eso), pero desde mi punto de vista es inconveniente para el trabajo.
La próxima vez abordaremos el cliente Modbus TCP.