Modbus Maestro-Esclavo
Modbus es uno de los protocolos de comunicación más utilizados. Es muy sencillo, rápido y seguro. Cuando se usa con un puerto serie, se denomina Modbus RTU, y cuando se usa con Ethernet, se denomina Modbus TCP/IP. Recientemente, Modbus UDP también se ha popularizado. En el pasado, también existía Modbus ASCII, pero ya no se usa ampliamente.
Haga clic aquí para obtener el código maestro Modbus para los PLC Fulmatic 7.
Tablas Modbus
Primero, debemos comprender la estructura de la tabla Modbus. El protocolo Modbus tiene cuatro tablas. Dos de ellas son analógicas (de 16 bits) y las otras dos son de bits. Cada tabla contiene 65 536 variables. En otras palabras, la tabla de retención analógica contiene 65 536 palabras y la tabla de bobina de salida discreta contiene 65 536 bits.
| Rango de direcciones | Lectura y escritura | Nombre de la tabla | Tip |
| 0-65535 | Leer y escribir | Bobinas de salida discretas | Bit 1 |
| 0-65535 | Solo lectura | Contactos de entrada discretos | Bit 1 |
| 0-65535 | Solo lectura | Registros de entrada analógica | 16 bits |
| 0-65535 | Leer y escribir | Registros de retención analógicos | Bit 16 |
Si bien la tabla real es la que se muestra arriba, el uso más común se muestra en la tabla siguiente. En la tabla anterior, los usuarios deben especificar el nombre de la tabla y la dirección de la variable para un valor. Por ejemplo, debe expresarse como "Analog Holding 500. word". En la tabla siguiente, las direcciones también especifican la tabla a la que pertenece la variable. Por ejemplo, para la dirección "Analog Holding 500. word", basta con escribir "40501". Dado que el campo de dirección es Analog Holding, la dirección inicial es 40001 + dirección de palabra 500 = 40501. Si fuera "Analog Input 500. word", sería 30501.
| Rango de direcciones | Lectura y escritura | Nombre de la tabla | Tip |
| 1-9999 | Leer y escribir | Bobinas de salida discretas | Bit 1 |
| 10001-19999 | Solo lectura | Contactos de entrada discretos | Bit 1 |
| 30001-39999 | Solo lectura | Registros de entrada analógica | Bit 16 |
| 40001-49999 | Leer y escribir | Registros de retención analógicos | Bit 16 |
El segundo método permite acceder a un gran número de campos de datos, aunque restringe el acceso a algunas direcciones. Existe un tercer método que permite representar todos los campos de datos con un único número. Este método se denomina direccionamiento Modbus de 6 dígitos. El rango de direcciones consta de 6 dígitos.
| Rango de direcciones | Lectura y escritura | Nombre de la tabla | Tip |
| 1-65536 | Leer y escribir | Bobinas de salida discretas | Bit 1 |
| 100001-165536 | Solo lectura | Contactos de entrada discretos | Bit 1 |
| 300001-365536 | Solo lectura | Registros de entrada analógica | Bit 16 |
| 400001-465536 | Leer y escribir | Registros de retención analógicos | Bit 16 |
Nota: Programa SCADA WinTr, Focus HMI Este programa, y muchos otros similares, admiten direcciones de 5 y 6 dígitos. Admitir ambos estilos de direccionamiento simultáneamente genera un problema. En el direccionamiento de 6 dígitos, las bobinas de salida discretas (1-65536) entran en conflicto con las direcciones en el direccionamiento de 5 dígitos. Por lo tanto, en el direccionamiento de 6 dígitos... Bobinas de salida discretas Para ello, se debe colocar un cero al principio.
Hemos visto tres estructuras de tabla diferentes. La primera es la tabla real; las otras dos son simplemente dos métodos distintos para acceder a ella. Los fabricantes de dispositivos compatibles con Modbus pueden proporcionar esta tabla de direcciones mediante uno de estos tres métodos. En ese caso, tendrás que realizar conversiones de direcciones entre las tablas. O bien, puedes optar por no aprender esto y pedir ayuda a otros constantemente. He preparado la siguiente tabla para ilustrar estas conversiones.
| Notificación de dirección inicial | Notificación de segunda dirección | Notificación de tercera dirección |
| Analógico con soporte para 0 | 40001 | 400001 |
| Analógico con soporte para 1000 | 41001 | 401001 |
| Entrada analógica 100 | 30101 | 300101 |
| Entrada Discreto 10 | 10011 | 100011 |
Consultas Modbus
Para leer o escribir datos en las tablas descritas anteriormente, el dispositivo maestro envía una consulta. El dispositivo esclavo responde a esta consulta. Mientras la comunicación continúe, el maestro enviará consultas y el esclavo responderá. Para comprender las consultas y respuestas de Modbus, recomiendo el sitio web https://www.simplymodbus.ca/FC03.htm, que utilizo con frecuencia . Toda la comunicación está relacionada con los valores de los bytes enviados y recibidos. Continuaré la explicación a continuación con un ejemplo de consulta Modbus.
Ejemplo de consulta Modbus:
A continuación, puede ver la consulta creada para leer 3 palabras de datos a partir del Registro de Retención 107 de un dispositivo con dirección de estación 17.
11: Dirección de la estación (11 hexadecimal = 17 decimal)
03: Código de función 3 (Código de lectura para registros de retención)
006B: Primera dirección de lectura (006B hexadecimal = 107 decimal o 40001 + 107 = 40108)
0003: Número de palabras a leer (03 hexadecimal = 3 decimal)
7687: CRC16 (verificación de redundancia cíclica)
Como se observa en la consulta anterior, podemos leer un número determinado de veces desde una dirección específica. Se utilizó el código de función 3 para la operación de lectura. Esto corresponde al campo Registro de retención. Si quisiéramos leer desde el campo Registro de entrada, sería necesario el código de función 4. Esta consulta, enviada a través del puerto serie, es recibida por todos los receptores de la línea. Sin embargo, solo el dispositivo con la dirección de estación 17 responderá. Antes de responder, la estación 17 verifica la información CRC, que en nuestro ejemplo es 7687. El dispositivo esclavo sabe que los dos últimos bytes de todos los bytes que recibe son el CRC. Y calcula los bytes que no son el CRC utilizando la fórmula CRC. Compara el CRC que calcula con el CRC que recibe. Si son iguales, entiende que la consulta se recibió sin errores, y si la dirección de la estación también es la misma, responderá sin duda. Puede que no siempre dé la respuesta correcta. Por ejemplo, si se consulta un rango de direcciones que no tiene, enviará un mensaje de error. Puedes ver los mensajes de error en este enlace: https://www.simplymodbus.ca/exceptions.htm
Si todo sale según lo previsto, la respuesta será la siguiente:
11: Dirección de la estación (11 hexadecimal = 17 decimal)
03: Código de función 3 (Código de lectura para registros de retención)
06: Número de bytes leídos (3 registros x 2 bytes = 6 bytes)
AE41: Valor de lectura, dirección 40108
5652: El valor leído es la dirección 40109
4340: El valor leído es la dirección 40110
49AD: CRC16 (verificación de redundancia cíclica)
Al recibir la respuesta anterior, el dispositivo maestro realiza varias comprobaciones, entre ellas la dirección de la estación, el CRC y el número de bytes leídos. En función de estas comprobaciones, la respuesta se acepta o se rechaza.
Otra informacion
- En la comunicación por puerto serie, la transmisión de datos puede no ser siempre correcta. Esta distorsión es más pronunciada, especialmente cuando hay muchos armónicos, líneas largas o varios dispositivos. La correlación correlacional (CRC) es la única prueba de que los datos se han leído correctamente.
- Tras la verificación CRC, se comprueba la dirección de la estación. Aunque existan varios dispositivos con la misma dirección, no será posible comunicarse con ellos. Cada dispositivo debe tener una dirección única. Las direcciones pueden asignarse a los dispositivos entre 0 y 255. Muchos productos del Lejano Oriente no funcionarán aunque se les asigne una dirección de 0.
- El número máximo de registros de 16 bits que se pueden leer en una sola consulta es 127. Esto se debe a que el número máximo de bytes que se pueden leer es 254. Cuando se trata de datos discretos, el máximo es 255 x 8 = 2040 bits.
- Las tablas analógicas no siempre son de 16 bits; pueden ser de 32 o 64 bits. Toda la comunicación se realiza mediante bytes. Sin embargo, el maestro y el esclavo los combinan internamente. Por ejemplo, 40001 y 40002 pueden considerarse como una variable de 32 bits. En este caso, entra en juego el parámetro de "orden de palabras". Algunos dispositivos pueden usar la primera palabra como el valor más grande, mientras que otros pueden usar la segunda palabra como el valor más grande. El valor de 32 bits sería (40001 x 65536) + 40002 (primera palabra como el valor más grande) o 40001 + (40002 x 65536) = segunda palabra como el valor más grande.
- El dispositivo maestro envía una consulta al dispositivo esclavo y espera una respuesta. Si no recibe respuesta, el maestro debe reenviar la consulta o pasar a la siguiente. Este período de espera se denomina tiempo de espera.
- Cuando el maestro recibe una respuesta a su consulta, no envía inmediatamente la siguiente. Debe esperar un tiempo. Si no espera, la respuesta del dispositivo esclavo y la nueva consulta del maestro se combinarán y podrían no ser aceptadas por los dispositivos esclavos. Este período de espera se denomina retardo.
- Las consultas Modbus RTU y TCP/IP son diferentes. En TCP/IP, se añaden 6 bytes antes de la consulta y se omite el CRC final. Consulte aquí para obtener más información. https://www.simplymodbus.ca/TCP.htm
- Para el uso de otros códigos de función Modbus https://www.simplymodbus.ca/FC01.htm Por favor visita.

un comentario