MODBUS
Modbus es una serie protocolo de comunicaciones publicado originalmente por Modicon (ahora Schneider Electric ) en 1979 para su uso con sus controladores lógicos programables (PLCs). Simple y robusto, desde entonces se ha convertido en una de facto estándar de protocolo de comunicación, y ahora es un medio comúnmente disponibles de conectar industriales electrónicos dispositivos . Las principales razones para el uso de Modbus en el entorno industrial son: Modbus permite la comunicación entre los dispositivos conectados a la misma red, por ejemplo un sistema que mide la temperatura y la humedad y comunica los resultados a un ordenador . Modbus se utiliza a menudo para conectar un ordenador de supervisión con una unidad terminal remota (RTU) en el control de supervisión y adquisición de datos ( SCADA ) sistemas. Muchos de los tipos de datos se nombran de su uso en los relés de accionamiento: una salida física de un solo bit se llama una bobina , y una entrada física de un solo bit se llama una entrada discreta o un contacto .
El desarrollo y la actualización de los protocolos Modbus ha sido gestionado por la organización Modbus desde abril de 2004, cuando Schneider Electric transfiere los derechos a esa organización. La Organización Modbus es una asociación de usuarios y proveedores de dispositivos compatibles con Modbus que pretende impulsar la adopción y evolución de Modbus
AS VERSIONES DEL PROTOCOLO MODBUS RTU
Existen versiones del protocolo Modbus para puerto serie y de Ethernet y otros protocolos que soportan el conjunto de protocolos de Internet . Hay muchas variantes de los protocolos Modbus:
- Modbus RTU – Esto se utiliza en la comunicación serie y hace uso de una representación compacta, binario de los datos para la comunicación de protocolo. El formato RTU sigue los comandos / datos con un control de redundancia cíclica de suma de control como un mecanismo de comprobación de error para garantizar la fiabilidad de los datos. Modbus RTU es la aplicación más común disponible para Modbus. Un mensaje Modbus RTU debe ser transmitida de forma continua y sin vacilaciones entre caracteres. Mensajes Modbus se enmarcan (separados) por períodos de inactividad (silenciosas).
- Modbus ASCII – Esto se utiliza en la comunicación serie y hace uso de caracteres ASCII para la comunicación de protocolo. El formato ASCII utiliza una comprobación de redundancia longitudinal mensajes ASCII Modbus están enmarcadas por dos puntos de ataque ( ‘:’) y posterior salto de línea (CR / LF).
- Modbus TCP / IP o Modbus TCP – Esta es una variante de Modbus utilizada para las comunicaciones a través de redes TCP / IP, que conecta a través del puerto 502. ] No se requiere un cálculo de suma de comprobación como capas inferiores ya proporcionan protección suma de comprobación.
- Modbus a través de TCP / IP o Modbus a través de TCP o Modbus RTU / IP – Esta es una variante que difiere de Modbus Modbus TCP en que una suma de control está incluido en la carga útil como con Modbus RTU
- Modbus Plus (Modbus +, MB + o MBP) Modbus a través de bus de campo (Modbus + o + Mo), también existe, pero sigue siendo propiedad de Schneider Electric . requiere un dedicado co-procesador para manejar rápido HDLC de rotación del testigo -como. Se utiliza de par trenzado en 1 Mbit / s, e incluye transformador de aislamiento en cada nodo, lo que hace transición / EDGE activa en lugar de tensión / nivel activa. Interfaces especiales se requieren para conectar Modbus Plus a un ordenador, normalmente una tarjeta hecha por la ISA (SA85), PCI o PCMCIA bus.
- Enron Modbus – Esta variante es una extensión del estándar Modbus con soporte para 32 bits de enteros y flotantes variables de punto, y los datos históricos y de flujo. Los tipos de datos se asignan mediante direcciones estándar. [9] Los datos históricos se utiliza para cumplir con un Instituto Americano del Petróleo (API) estándar de la industria para los datos ¿Cómo deben almacenarse [10]
modelo de datos y llamadas a funciones son idénticas para las 4 primeras variantes de protocolos; solamente la encapsulación es diferente. Sin embargo, las variantes no son interoperables como los formatos de trama son diferentes.
Comunicación y dispositivos
Cada dispositivo destinado a comunicarse mediante Modbus se le da una dirección única. En las redes de serie y MB +, sólo el nodo asignado como el maestro puede iniciar un comando. En Ethernet, cualquier dispositivo puede enviar un comando Modbus, aunque por lo general sólo un dispositivo maestro lo hace. Un comando Modbus contiene la dirección Modbus del dispositivo está destinado a ser (1 a 247). Sólo el dispositivo destinado actuará en el comando, a pesar de que otros dispositivos puedan recibirla (una excepción es broadcastable comandos específicos enviados al nodo 0, que se actúe en función, pero no reconoció). Todos los comandos Modbus contienen información de suma de comprobación, para que el destinatario para detectar los errores de transmisión. Los comandos básicos Modbus pueden encargar a un RTU para cambiar el valor en una de sus registros, el control o leer un puerto de E / S, y el mando del dispositivo para enviar de vuelta uno o más valores que figuran en sus registros.
Hay muchos módems y gateways que apoyan Modbus, ya que es un protocolo muy sencillo y a menudo copiada. Algunos de ellos fueron diseñados específicamente para este protocolo.Diferentes implementaciones utilizan cable, comunicación inalámbrica, tal como en la banda ISM , e incluso servicio de mensajes cortos (SMS) o General Packet Radio Service (GPRS).Uno de los diseños más comunes de las redes inalámbricas hace uso de redes de malla . Los problemas típicos que los diseñadores tienen que superar son los altos problemas de latencia y de calendario.
formato de trama
Un marco de Modbus se compone de una unidad de aplicación de datos (ADU) que encierra una unidad de datos de protocolo (PDU)
- ADU = + cheque PDU + error de dirección
- PDU = código de función + Datos
Todo Modbus variantes de elegir uno de los siguientes formatos de trama.
Modbus RTU formato de trama (utilizado principalmente en las líneas asíncronas de 8 bits como EIA-485 ) | ||
Nombre | Longitud (bits) | Función |
comienzo | 28 | Al menos 3 1 / 2 veces el carácter de silencio (condición de la marca) |
Dirección | 8 | dirección de estación |
Función | 8 | Indica el código de función; por ejemplo, leer bobinas / registros de las explotaciones |
Datos | n × 8 | Longitud de datos + se llenará en función del tipo de mensaje |
CRC | 16 bits | Verificación de redundancia cíclica |
Fin | 28 | Al menos 3 1 / 2 veces el carácter de silencio entre bastidores |
Nota acerca de la CDN :
- Polinomio: x 16 + x 15 + x 2 + 1 (CRC-16-ANSI también conocido como CRC-16-IBM, lo normal polinomio hexadecimal 8005 y siendo invertido A001)
- Valor inicial: 65.535
- Ejemplo de marco en hexadecimal: 01 04 02 80 FF FF B8 (CRC-16-ANSI cálculo de 01 a FF da 80B8 que se transmite menos byte de primera )
formato de trama Modbus ASCII (se utiliza principalmente en líneas serie asíncronas de 7 u 8 bits) | ||
Nombre | Longitud ( bytes ) | Función |
comienzo | 1 | Empieza por dos puntos: (valor hexadecimal ASCII es 0x3a) |
Dirección | 2 | dirección de estación |
Función | 2 | Indica los códigos de función de lectura como bobinas / insumos |
Datos | n x 2 | Longitud de datos + se llenará en función del tipo de mensaje |
LRC | 2 | Suma de comprobación ( comprobación de redundancia longitudinal ) |
Fin | 2 | Retorno de carro – avance de línea (CR / LF) par ( ASCII valores de 0x0D y 0x0A) |
Dirección, función, datos y LRC son legibles por todos los pares hexadecimales de capital de caracteres que representan valores de 8 bits (0-255). Por ejemplo, 122 (7 × 16 + 10) se puede representar como 7A.
LRC se calcula como la suma de los valores de 8 bits, negada ( complemento de dos ) y se codifica como un valor de 8 bits. Ejemplo: si la codificación de direcciones, la función y los datos como 247, 3, 19, 137, 0 y 10, su suma es 416. Complemento a dos (-416) recorta a 8 bits es 96 (por ejemplo, 256 × 2-416) que se representa como 60 en hexadecimal. Por lo tanto el siguiente cuadro: F7031389000A60
|
|||||
Nombre |
Longitud (bytes) | Función | |||
identificador de transacción | 2 | Para la sincronización entre los mensajes de servidor y cliente | |||
identificador de protocolo | 2 | Cero para Modbus / TCP | |||
campo de longitud | 2 | Número de bytes restantes en este marco | |||
identificador de la unidad | 1 | Dirección del esclavo (255 si no se utiliza) | |||
código de función | 1 | Los códigos de función, como en otras variantes | |||
bytes de datos | n |
|
identificador de la unidad se utiliza con dispositivos Modbus / TCP que son compuestos de varios dispositivos Modbus, por ejemplo, en Modbus / TCP para puertas de enlace Modbus RTU. En tal caso, el identificador de la unidad indica la dirección del esclavo del dispositivo detrás de la puerta de enlace. De forma nativa Modbus / TCP dispositivos con capacidad por lo general ignoran el identificador de unidad.
El orden de bytes de valores en tramas de datos Modbus es Big-Endian (MSB, byte más significativo de un valor recibido en primer lugar).
Códigos de función soportados [ editar ]
Los diversos lectura, escritura y otras operaciones se clasifican de la siguiente manera. [12] La más primitiva lecturas y escrituras se visualizan en negrita. Un número de fuentes usar terminología alternativa, por ejemplo Force Single Coil donde el estándar utiliza Write Single Coil . [13]
entidades prominentes dentro de un esclavo Modbus son:
- Bobinas: lectura y escritura, 1 bit (encendido / apagado)
- Entradas discretas: legible, 1 bit (encendido / apagado)
- Registros de entrada: legibles, 16 bits (0 a 65.535), esencialmente mediciones y estados
- Registros de retención: lectura y escritura, de 16 bits (0 a 65.535), esencialmente los valores de configuración
códigos de función Modbus | ||||
tipo de función | nombre de la función | código de función | ||
Acceso a los datos | acceso bits | Entradas discretas físicas | Leer Entradas discretas | 2 |
Los bits internos o bobinas Físicas | leer bobinas | 1 | ||
Write Single Coil | 5 | |||
Escribe varias bobinas | 15 | |||
acceso 16 bits | Registros de entrada físicos | Leer registros de entrada | 4 | |
Registros internos o registros de salida físicos | Leer múltiples registros de las explotaciones | 3 | ||
Escribe único registro de retención | 6 | |||
Varios registros de escritura de la explotación agrícola | 16 | |||
Lectura / Escritura múltiples registros | 23 | |||
Máscara de escritura Registro | 22 | |||
Leer FIFO cola | 24 | |||
Acceso a archivos de registro | Leer registro del archivo | 20 | ||
Escribir archivo de registro | 21 | |||
Diagnóstico | Leer estado de excepción | 7 | ||
Diagnóstico | 8 | |||
Obtener Com contador de eventos | 11 | |||
Obtener Com Registro de eventos | 12 | |||
Informe Esclavo ID | 17 | |||
Leer identificación de dispositivo | 43 | |||
Otro | Interfaz de transporte encapsulado | 43 |
Formato de los datos de las solicitudes y respuestas para los códigos de función principales
Las solicitudes y las respuestas siguen formatos de trama descritos anteriormente. Esta sección da detalles de los formatos de datos de la mayoría de los códigos de función usados.
Código de función 1 (leer bobinas) y la función de código 2 (leer entradas discretas)
solicitud :
- Dirección del primer rollo de la entrada / discreta para leer (16 bits)
- Número de bobinas / entradas discretas para leer (16 bits)
Respuesta normal :
- Número de bytes de valores de entrada de la bobina / discretas a seguir (8 bits)
- / valores discretos de entrada de la bobina (8 bobinas / entradas discretas por byte)
Valor de cada bobina de entrada / discreto es binaria (0 para apagado, 1 de encendido). En primer lugar pidió bobina / entrada discreta se almacena como el bit menos significativo del primer byte de la respuesta.
Si el número de bobinas / entradas discretas no es un múltiplo de 8, bit más significativo (s) del último byte se rellena con ceros.
Por ejemplo, si se solicitan once bobinas, se necesitan dos bytes de valores. Supongamos que los estados de esas bobinas sucesivas son encendido, apagado, encendido, apagado, apagado, encendido, encendido, encendido, apagado, encendido, en , a continuación, parte de datos de la respuesta será 02E506 en hexadecimal.
Código de función 5 (fuerza / escribir una sola bobina)
solicitud :
- Dirección de la bobina (16-bit)
- Valor para forzar / escritura: 0 para apagado y 65.280 (FF00 en hexadecimal) para el
Respuesta normal : lo mismo que la solicitud.
Código de función 15 (fuerza / escribir varias bobinas)
solicitud :
- Dirección de la primera bobina para forzar / escritura (16 bits)
- Número de bobinas a la fuerza / escritura (16-bit)
- Número de bytes de valores de la bobina a seguir (8 bits)
- Los valores de la bobina (8 valores de bobina por byte)
Valor de cada bobina es binario (0 para apagado, 1 de encendido). Primera bobina solicitado se almacena como el bit menos significativo de primer byte en la solicitud.
Si el número de bobinas no es un múltiplo de 8, bit más significativo (s) de último byte debe ser rellenado con ceros. Ver el ejemplo códigos de función 1 y 2.
Respuesta normal :
- Dirección de primera bobina (16-bit)
- número de bobinas (16-bit)
Código de función 4 (leer registros de entrada) y la función de código 3 (leer registros de las explotaciones)
solicitud :
- Dirección del primer registro para leer (16 bits)
- Número de registros a leer (16 bits)
Respuesta normal :
- Número de bytes de valores de registro a seguir (8 bits)
- valores de registro (16 bits por registro)
Debido a que el número de bytes de valores de registro es de 8 bits de ancho, sólo 128 registros se pueden leer a la vez.
Código de función 6 (preestablecido / escritura única registro de retención)
solicitud :
- Dirección del registro de retención para preestablecer / escritura (16 bits)
- Nuevo valor de registro de explotación (16 bits)
Respuesta normal : lo mismo que la solicitud.
Código de función 16 (preset / escribir varios registros de retención)
solicitud :
- Dirección del primer registro de retención para preestablecer / escritura (16 bits)
- Número de registros de retención para preestablecer / escritura (16 bits)
- Número de bytes de valores de registro a seguir (8 bits)
- Los nuevos valores de registros de retención (16 bits por registro)
Debido a que el número de bytes de valores de registro es de 8 bits de ancho, sólo 128 registros de retención pueden estar predefinidos / escrito a la vez.
Respuesta normal :
- Dirección del primer preset / registro de retención por escrito (16 bits)
- número de preset / registros de mantenimiento escritas (16 bits)
respuestas de excepción
Para una respuesta normal, esclavo repite el código de función. En caso de que un esclavo que desee informar de un error, que responderá con el código de función solicitada plus 128 (3 se convierte en 131 o 83 en hexadecimal), y sólo incluirá un byte de datos, conocido como el código de excepción .
Los códigos de excepción principal Modbus
Código | Texto | detalles | |
1 | Función ilegal | Código de función recibido en la consulta no se reconoce o permitido por esclavo | |
2 | Dirección de datos ilegal | Dirección de datos de algunas o todas las entidades requeridas no pueden o no existen en esclavo | |
3 | Valor de datos ilegal | El valor no es aceptada por esclavo | |
4 | Fallo en el dispositivo esclavo | Se produjo un error irrecuperable mientras esclavo intentaba realizar la acción solicitada | |
5 |
|
Esclavo ha aceptado la petición y está procesando, pero se requiere un largo período de tiempo. Esta respuesta se envía para evitar un error de tiempo de espera que se produzcan en el maestro. Maestro puede emitir, a continuación un completo Programa de sondeo mensaje para determinar si se ha completado el procesamiento | |
6 | Dispositivo esclavo Ocupado | Esclavo se dedica a procesar un mandato de larga duración. Maestro debe intentarlo más tarde | |
7 |
|
Esclavo no puede realizar las funciones de programación. Maestro debe solicitar información de diagnóstico o error del esclavo | |
8 | Error de paridad de memoria | Esclavo detecta un error de paridad en la memoria. Maestro puede volver a intentar la petición, pero el servicio puede ser requerido en el dispositivo esclavo | |
10 | Camino de puerta de enlace no disponible | Especializado para puertas de enlace Modbus. Indica una puerta de enlace mal configurado | |
11 | Dispositivo de puerta de enlace de destino no respondió | Especializado para puertas de enlace Modbus. Se envía cuando esclavo no responde |
Bobina, entrada discreta, registro de entrada, la celebración de los números de registro y direcciones
Algunas convenciones gobiernan cómo se referencian acceso a Modbus entidades (bobinas, entradas discretas, registros de entrada, llevando a cabo registros).
Es importante hacer una distinción entre la entidad número y la entidad de dirección :
- Entidad números combinan tipo de entidad y la ubicación entidad dentro de su tabla de descripción
- Entidad dirección es la dirección de inicio, un valor de 16 bits en la parte de datos de la trama Modbus. Como tal, su rango va de 0 a 65.535
En el estándar tradicional, los números de las entidades comienzan con un dígito, seguido de un número de cuatro dígitos en el rango de 1 – 9999:
- bobinas números comienzan con un cero y luego van desde 0 0 001 a 0 9,999
- de entrada discretos números comienzan con un uno y luego van desde 1 0001 a la 1 9999
- Registro de entrada números comienzan con un tres y luego van desde 3 0001 a la 3 de 9999
- Registro de retención números comienzan con un cuatro y luego van desde 4 0001 a la 4 9999
Esto se traduce en direcciones entre 0 y 9998 en tramas de datos.
Por ejemplo, con el fin de leer registros de retención a partir de número 40.001, correspondiente dirección en la trama de datos será 0 con un código de función de 3 (como se ve arriba). Para registros de las explotaciones que comienzan en el número 40100, la dirección será 99. Etc.
Esto limita el número de direcciones a 9,999 para cada entidad. Una de facto de referencia se extiende esto a la máxima de 65.536. [14]
Es simplemente consiste en la adición de un dígito a la lista anterior:
- bobina números van desde 0 00,001 mil a 0 65536
- de entrada discretos números van desde 1 00001 a la 1 65536
- Registro de entrada números van desde 3 00001 a la 3 65536
- Registro de retención números van desde 4 00001 a la 4 65536
Cuando se utiliza la referenciación extendida, todos los números de referencias deben ser exactamente seis dígitos. Esto evita la confusión entre las bobinas y otras entidades. Por ejemplo, para saber la diferencia entre el registro de retención # 40001 y # 40001 bobina, si la bobina # 40001 es el objetivo, debe aparecer como # 040001.
mapeo JBUS
Otra de facto protocolo Modbus fuertemente relacionada con [15] apareció después de él y se definió por PLC Marca de abril Automatiza, lo que resulta de un esfuerzo de colaboración de las empresas francesas Renault Automation y Merlin Gerin et Cie en 1985: [16] JBUS . Las diferencias entre Modbus y JBUS en ese momento (número de entidades, estaciones esclavas) son ahora irrelevante, ya que este protocolo prácticamente desapareció con la serie abril PLC, que AEG Schneider Automation compró en 1994 y luego se hizo obsoleto. Sin embargo, el nombre JBUS sobrevivió hasta cierto punto.
JBUS soporta códigos de función 1, 2, 3, 4, 5, 6, 15, y 16 y por lo tanto todas las entidades descritas anteriormente. Sin embargo numeración es diferente con JBUS: [17]
- coinciden número y dirección: #x entidad tiene la dirección x en la trama de datos
- En consecuencia, el número de entidad no incluye el tipo de entidad. Por ejemplo, la celebración de registro # 40010 en Modbus será la celebración de una cuenta # 9, ubicado en la dirección 9 en JBUS
- Número 0 (y por lo tanto la dirección 0) no es compatible. Esclavo no debe aplicar ningún dato real en este número y dirección y se puede devolver un valor nulo o lanzar un error cuando se le solicite
implementaciones
Casi todas las implementaciones tienen desviaciones de la norma oficial. Las diferentes variedades podrían no comunicarse correctamente entre equipos de diferentes proveedores. Algunas de las variaciones más comunes son:
- Tipos de datos
- Punto flotante IEEE
- entero de 32 bits
- datos de 8 bits
- tipos de datos mixtos
- Los campos de bits en números enteros
- Multiplicadores para cambiar datos a / desde un entero. 10, 100, 1000, 256 …
- extensiones de protocolo
- direcciones de esclavo de 16 bits
- tamaño de los datos de 32 bits (1 address = 32 bits de datos devuelto)
- intercambiado datos de palabras
limitaciones
- Desde Modbus fue diseñado a finales de 1970 para comunicar a los controladores lógicos programables , el número de tipos de datos está limitado a aquellos entendidos por los PLC en el momento. Objetos binarios grandes no son compatibles.
- No existe manera estándar para un nodo para encontrar la descripción de un objeto de datos, por ejemplo, para determinar si un valor de registro representa una temperatura entre 30 y 175 grados.
- Desde Modbus es un protocolo maestro / esclavo, no hay forma de que un dispositivo de campo de “informe de excepción” (excepto a través de Ethernet TCP / IP, denominada mbus abierta) – el nodo maestro debe sondear rutinariamente cada dispositivo de campo, y buscar cambios en los datos. Esto consume tiempo y ancho de banda de la red en aplicaciones en las que el ancho de banda puede ser costoso, como sobre un enlace de radio de baja tasa de bits.
- Modbus se limita a abordar 254 dispositivos en un enlace de datos, lo que limita el número de dispositivos de campo que pueden conectarse a una estación maestra (una vez más, Ethernet TCP / IP es una excepción).
- Modbus transmisiones deben ser contiguos que limita los tipos de dispositivos de comunicaciones remotas a las que pueden amortiguar los datos para evitar vacíos en la transmisión.
- protocolo Modbus en sí no proporciona seguridad contra los comandos o interceptación de datos no autorizados.
Esto fue inspirado por Wikipedia.