A partir de la versión V4.0 de Modbus_Slave y las versiones de firmware V2.5 (CPU S7-1500) o V4.2 (CPU S7-1200) se puede acceder a áreas de datos en DB en lugar de acceder directamente a imágenes de proceso y registros Holding. Para ello, el DB debe tener el atributo "Acceso optimizado al bloque" desactivado y no debe estar exclusivamente en la memoria de carga.
Si se recibe una solicitud MODBUS y no se ha definido ninguna área de datos para el tipo de datos MODBUS del código de función correspondiente, la solicitud será tratada igual que en las anteriores versiones de la instrucción, es decir, se producirá un acceso directo a memorias imagen de proceso y fichas Holding.
En cambio, si se ha definido un área de datos para el tipo de datos MODBUS del código de función, la instrucción Modbus_Slave lee o escribe en esa área de datos. Del tipo de orden dependerá que se lea o se escriba.
Una única solicitud MODBUS solo puede leerse en un área de datos o escribirse en un área de datos. Por tanto, si se desea leer registros Holding que se extiendan por varias áreas de datos, se necesitarán varias solicitudes MODBUS.
Reglas para definir las áreas de datos
Pueden definirse como máximo ocho áreas de datos en diferentes DB; cada DB solo puede contener un área de direcciones. Una única solicitud MODBUS solo puede leerse en exactamente un área de datos o escribirse en exactamente un área de datos. Cada área de datos se corresponde con un área de direcciones MODBUS. La definición se realiza en la variable estática Data_Area_Array del DB de instancia; Data_Area_Array es un campo que consta de ocho elementos.
Si desea utilizar menos de ocho áreas de datos, las áreas de datos deseadas deben encontrarse una tras otra y sin huecos. La primera entrada vacía de las áreas de datos finaliza la búsqueda del área de datos durante la ejecución. Por tanto, si p. ej. se han definido los elementos de campo 1, 2, 4 y 5, solo se detectan los elementos de campo 1 y 2, puesto que el elemento de campo 3 está vacío.
El campo Data_Area_Array consta de 8 elementos: Data_Area_Array[1] ... Data_Area_Array[8]
Cada elemento de campo Data_Area_Array[x], 1 <= x <= 8, es un UDT del tipo MB_DataArea y tiene la estructura siguiente:
|
Parámetro |
Tipo de datos |
Significado |
|---|---|---|
|
data_type |
UInt |
Identificador del tipo de datos MODBUS que se mapea en esta área de datos:
Nota: Si se ha definido un área de datos para un tipo de datos MODBUS, la instrucción MB_SERVER ya no podrá acceder directamente a dicho tipo de datos MODBUS. Si la dirección de una solicitud MODBUS para dicho tipo de datos no se corresponde con ningún área de datos definida, en STATUS se devuelve el valor W#16#8383. |
|
db |
UInt |
Número del bloque de datos en el que se representan los registros MODBUS o los bits definidos a continuación. El número de DB debe ser unívoco en las áreas de datos. El mismo número de DB no puede estar definido en varias áreas de datos. El DB debe ser un DB con acceso estándar y no debe estar exclusivamente en la memoria de carga. Las áreas de datos empiezan siempre en la dirección de byte 0 del DB. Valores permitidos: 1 a 60999 |
|
start |
UInt |
Primera dirección MODBUS que se mapea en el bloque de datos a partir de la dirección 0.0. Valores permitidos: de 0 a 65535 |
|
length |
UInt |
Número de bits (para los valores 1 y 2 de data_type) o número de registros (para los valores 3 y 4 de data_type). Las áreas de direcciones MODBUS de un mismo tipo de datos MODBUS no pueden solaparse. Valores permitidos: de 1 a 65535 |
Ejemplos de definición de áreas de datos
-
Primer ejemplo: data_type = 3, db = 1, start = 10, length = 6
Los registros Holding (data_type = 3) se mapean en el bloque de datos 1 (db = 1). La dirección Modbus 10 (start = 10) se encuentra en la palabra de datos 0. La última dirección Modbus válida 15 (length = 6) se encuentra en la palabra de datos 5.
-
Segundo ejemplo: data_type = 2, db = 15, start = 1700, length = 112
Las entradas (data_type = 2) se mapean en el bloque de datos 15 (db = 15). La dirección Modbus 1700 (start = 1700) se encuentra en la palabra de datos 0. La última dirección Modbus válida 1811 (length = 112) se encuentra en la palabra de datos 111.