Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Modbus
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
[[Archivo:Modbus.png|miniaturadeimagen|Modbus.]] '''Modbus''' es un [[protocolo de comunicaciones]] situado en los niveles 1, 2 y 7 del [[Modelo OSI]], basado en la arquitectura maestro/esclavo (RTU) o cliente/servidor (TCP/IP), diseñado en 1979 por [[Modicon]] para su gama de [[Controlador lógico programable|controladores lógicos programables]] (PLCs). Convertido en un protocolo de comunicaciones [[estándar de facto]] en la [[industria]], es el que goza de mayor disponibilidad para la conexión de dispositivos [[Electrónica|electrónicos]] industriales.<ref name=Drury2009>{{cita libro |nombre=Bill |apellido=Drury |título=Control Techniques Drives and Controls Handbook |edición=2nd |fecha=2009 |editorial=[[Institution of Engineering and Technology]] |url=http://knovel.com/web/portal/browse/display?_EXT_KNOVEL_DISPLAY_bookid=2995&VerticalID=0 |formato=PDF |páginas=508– |subscription=yes}}</ref> Las principales razones por las cuales el uso de Modbus en el entorno industrial se ha impuesto por encima de otros protocolos de comunicaciones son: * Se diseñó teniendo en cuenta su uso para aplicaciones industriales * Es público y gratuito * Es fácil de implementar y requiere poco desarrollo * Maneja bloques de datos sin suponer restricciones Modbus permite el control de una red de dispositivos, por ejemplo un sistema de medida de temperatura y humedad, y comunicar los resultados a un [[ordenador]]. Modbus también se usa para la conexión de un ordenador de supervisión con una unidad remota ([[Unidad Terminal Remota|RTU]]) en sistemas de supervisión adquisición de datos ([[SCADA]]). Existen versiones del protocolo Modbus para [[puerto serie]] y [[Ethernet]] (Modbus/TCP). Cada dispositivo de la red Modbus posee una dirección única. Cualquier dispositivo puede enviar órdenes Modbus, aunque lo habitual es permitirlo sólo a un dispositivo maestro. Cada comando Modbus contiene la dirección del dispositivo destinatario de la orden. Todos los dispositivos reciben la trama pero solo el destinatario la ejecuta (salvo un modo especial denominado "Broadcast"). Cada uno de los mensajes incluye información redundante que asegura su integridad en la recepción. Los comandos básicos Modbus permiten controlar un dispositivo RTU para modificar el valor de alguno de sus registros o bien solicitar el contenido de dichos registros. Existe gran cantidad de [[modem]]s que aceptan el protocolo Modbus. Algunos están específicamente diseñados para funcionar con este protocolo. Existen implementaciones para conexión por cable, [[wireless]], [[Servicio de mensajes cortos|SMS]] o [[GPRS]]. La mayoría de problemas presentados hacen referencia a la [[latencia]] y a la sincronización. == Versiones del protocolo == Hay muchas variantes de protocolos Modbus, existen versiones del protocolo Modbus para el [[puerto serie]], para [[Ethernet]], y otros protocolos que soportan el [[Familia de protocolos de Internet|conjunto de protocolos TCP/IP]] de [[Internet]]: * ''Modbus RTU'' — Es la implementación más común disponible para Modbus. Se utiliza en la comunicación serie y hace uso de una representación binaria compacta de los datos para el [[Protocolo de comunicaciones|protocolo de comunicación]]. El formato RTU sigue a los comandos/datos con una suma de [[Verificación de redundancia cíclica|comprobación de redundancia cíclica]] (CRC) como un mecanismo de comprobación de errores para garantizar la fiabilidad de los datos. Un mensaje Modbus RTU debe transmitirse continuamente sin vacilaciones entre caracteres. Los mensajes Modbus son entramados (separados) por períodos inactivos (silenciosos). * ''Modbus ASCII'' — Se utiliza en la comunicación serie y hace uso de caracteres [[ASCII]] para el [[Protocolo de comunicaciones|protocolo de comunicación]]. El formato ASCII utiliza un checksum de [[Verificación de redundancia longitudinal|control de redundancia longitudinal]] (LRC). Los mensajes Modbus ASCII están entramados por los dos puntos principales (":") y la nueva línea (CR/LF). * ''Modbus TCP/IP o Modbus TCP'' — Se trata de una variante Modbus utilizada para comunicaciones a través de redes [[TCP/IP]], conectándose a través del puerto 502.<ref name=modbustcp>{{citation| title=Modbus Messaging on TCP/IP Implementation Guide V1.0b| url=http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf| publisher=Modbus Organization, Inc.| date=24 de octubre de 2006| access-date=7 de enero de 2017}}</ref> No requiere un cálculo de [[suma de verificación]] (checksum), ya que las capas inferiores ya proporcionan protección de checksum. * ''Modbus sobre TCP/IP o Modbus sobre TCP o Modbus RTU/IP'' — Esta es una variante de Modbus que difiere del Modbus TCP en que se incluye una suma de comprobación en la carga útil como en Modbus RTU. * ''Modbus sobre UDP'' — Algunos han experimentado con el uso de Modbus sobre [[User Datagram Protocol|UDP]] en redes IP, lo que elimina los gastos generales necesarios para [[Transmission Control Protocol|TCP]].<ref>{{cita web| url=http://jamod.sourceforge.net| título=Java Modbus Library - About| año=2010| access-date=7 de febrero de 2017}}</ref> * ''Modbus Plus (Modbus+, MB+ o MBP)'' — Es una versión extendida del protocolo y privativa de [[Schneider Electric]] y a diferencia de las otras variantes, soporta comunicaciones [[peer-to-peer]] entre múltiples masters.<ref>{{cita web| url=http://www.schneider-electric.ca/en/faqs/FA198221/| título=What is the difference between Modbus and Modbus Plus?| editorial=Schneider Electric| access-date=7 de febrero de 2017}}</ref> Requiere un co-procesador dedicado para manejar [[HDLC]]. Utiliza par trenzado a 1 Mbit/s y sus especificaciones son muy semejantes al estándar EIA/[[RS-485]] aunque no guarda compatibilidad con este, e incluye transformador de aislamiento en cada nodo. Se requiere hardware especial para conectar Modbus Plus a un ordenador, normalmente una tarjeta diseñada para bus [[Industry Standard Architecture|ISA]], [[Peripheral Component Interconnect|PCI]] o [[PCMCIA]]. * ''Pemex Modbus'' — Esta es una extensión de Modbus estándar con soporte para datos históricos y de flujo. Fue diseñado para la compañía petrolera [[Pemex]] para su uso en el control de procesos y nunca alcanzó un uso generalizado. * ''Enron Modbus'' — Esta es otra extensión del estándar Modbus desarrollada por [[Enron Corporation]] con soporte para variables enteras de 32 bits y de punto flotante y datos históricos y de flujo. Los tipos de datos se asignan utilizando direcciones estándar.<ref>{{cita web| url=http://www.simplymodbus.ca/Enron.htm| título=Simply Modbus - About Enron Modbus| editorial=Simply Modbus |access-date=7 de febrero de 2017}}</ref> Los datos históricos cumplen con un estándar de la industria del [[American Petroleum Institute]] (API, por sus siglas en inglés) según la forma en que deben almacenarse los datos. El modelo de datos y las llamadas de función son idénticas para las primeras 4 variantes de protocolos; Sólo la encapsulación es diferente. Sin embargo, las variantes no son interoperables, ni sus formatos de trama tampoco. == Modelo de datos Modbus == El modelo de datos en Modbus distingue entre entradas digitales (discrete input), salidas digitales (coils), registros de entrada (input register) y registros de retención (holding registers). Las entradas y salidas digitales ocupan, evidentemente, un bit; mientras que los registros, tanto de entrada como de retención, ocupan dos Bytes La siguiente es una tabla de tipos de objetos proporcionados por un dispositivo esclavo Modbus a un dispositivo maestro Modbus: {| class="wikitable" ! Tipo de objeto ! Acceso ! Tamaño |- | Discrete input | Solo leer | 1 bit |- | Coil | Leer/escribir | 1 bit |- | Input register | Solo leer | 16 bits |- | Holding register | Leer/escribir | 16 bits |} == Formato de la trama == Una trama Modbus está compuesta por una Unidad de Datos de Aplicación (ADU), que incluye una Unidad de Datos de Protocolo (PDU):<ref>{{cite web|title=Modbus Messaging On TCP/IP Implementation Guide|url=http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf|website=Modbus Organization|publisher=Modbus-IDA|ref=MobusTCPSpec}}</ref> * ADU = Dirección + PDU + Comprobación de errores, * PDU = Código de función + Datos. Todas las variantes de Modbus usan uno de los siguientes formatos de trama.<ref name=Drury2009 /> {| class="wikitable" style="float:middle; margin:0 0 1em 1em;" |+ Formato de trama Modbus [[Unidad Terminal Remota|RTU]] (utilizado principalmente en líneas asíncronas de 8 [[bit]]s como [[RS-485]]) |- ! Nombre ! Longitud (bits) ! Función |- ! Inicio | 28 | Al menos {{frac|3|1|2}} Tiempos de silencio |- ! Dirección | 8 | Station address |- ! Función | 8 | Indica el código de función; Por ejemplo, leer los registros de bobinas/retención |- ! Datos | ''n'' × 8 | Datos + La longitud se rellenará dependiendo del tipo de mensaje |- ! CRC | 16 | [[Verificación de redundancia cíclica]] (CRC) |- ! Fin | 28 | Al menos {{frac|3|1|2}} Tiempos de silencio entre tramas |} Nota sobre el [[Verificación de redundancia cíclica|CRC]]: * Polinomial: ''x''<sup>16</sup> + ''x''<sup>15</sup> + ''x''<sup>2</sup> + 1 (CRC-16-ANSI también conocido como CRC-16-IBM, Polinomio algebraico hexadecimal normal siendo <code>8005</code> e inverso <code>A001</code>). * Valor inicial: 65.535 * Ejemplo de trama en hexadecimal: <code>01 04 02 FF FF B8 80</code> (Cálculo CRC-16-ANSI desde <code>01</code> a <code>FF</code> da <code>80B8</code>, que se transmite el byte ''menos'' significativo ''primero''). {| class="wikitable" style="float:middle; margin:0 0 1em 1em;" |+ Formato de trama Modbus [[ASCII]] (utilizado principalmente en líneas serie asíncronas de 7 u 8 bits) |- ! Nombre ! Longitud ([[Byte]]s) ! Función |- ! Inicio | 1 | Comienza con dos puntos <code>:</code> (El valor hex ASCII es <code>3A</code>) |- ! Dirección | 2 | Dirección de la estación |- ! Función | 2 | Indica los códigos de función como leer bobinas / entradas |- ! Datos | ''n'' × 2 | Datos + La longitud se rellenará dependiendo del tipo de mensaje |- ! LRC | 2 | [[Verificación de redundancia longitudinal]] (LCR) |- ! Fin | 2 | Par retorno de carro/avance de línea (CR/LF) (Valores [[ASCII]] de <code>0D</code>, <code>0A</code>) |} Dirección, función, datos y LRC son todos pares legibles de caracteres hexadecimales que representan valores de 8 bits (0-255). Por ejemplo, 122 (7 x 16 + 10) se representará como <code>7A</code>. LRC se calcula como la suma de valores de 8 bits, negados (complemento de dos) y codificado como un valor de 8 bits. Ejemplo: si la dirección, la función y los datos codifican como 247, 3, 19, 137, 0 y 10, su suma es 416. El complemento de dos (-416) recortado a 8 bits es 96 (por ejemplo 256 × 2 - 416) Que se representará como 60 en hexadecimal. Por lo tanto el siguiente trama: <code>:F7031389000A60<CR><LF></code>. {| class="wikitable" style="float:middle; margin:0 0 1em 1em;" |+ Formato de trama Modbus [[TCP/IP|TCP]] (utilizado principalmente en redes [[Ethernet]]) |- ! Nombre ! Longitud ([[Byte]]s) ! Función |- ! Identificador de la transacción | 2 | Para la sincronización entre mensajes de servidor y cliente |- ! Identificador del protocolo | 2 | 0 para Modbus/TCP |- ! Campo de longitud | 2 | Número de bytes en esta trama |- ! Identificador de unidad | 1 | Dirección del esclavo (255 si no se usa) |- ! Código de función | 1 | Códigos de función como en otras variantes |- ! Bytes de datos | ''n'' | Datos como respuesta o comandos |} El identificador de unidad se utiliza con dispositivos Modbus/TCP que son compuestos de varios dispositivos Modbus en las pasarelas Modbus/TCP a Modbus RTU. En tal caso, el identificador de unidad indica la dirección de esclavo del dispositivo detrás de la pasarela. Normalmente, los dispositivos compatibles con Modbus/TCP ignoran el identificador de unidad. El orden de bytes para valores en tramas de datos Modbus es [[Endianness|big-endian]] (MSB, byte más significativo de un valor recibido primero). == Implementaciones == Todas las implementaciones presentan variaciones respecto al estándar oficial. Algunas de las variaciones más habituales son: * Tipos de Datos ** Coma Flotante IEEE ** Entero 32 bits ** Datos 8 bits ** Tipos de datos mixtos ** Campos de bits en enteros ** Multiplicadores para cambio de datos a/de entero. 10, 100, 1000, 256... * Extensiones del Protocolo ** Direcciones de esclavo de 16 bits ** Tamaño de datos de 32 bits (1 dirección = 32 bits de datos devueltos.) == Limitaciones == * Dado que Modbus fue diseñado a finales de los setenta para comunicarse con [[Controlador lógico programable|controladores lógicos programables]], el número de tipos de datos se limita a aquellos entendidos por los PLC en ese momento. Los objetos binarios grandes no son compatibles * No existe una forma estándar para que un nodo encuentre 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. * Dado que Modbus es un protocolo maestro / esclavo, no es posible que un dispositivo de campo "informe por excepción" (excepto a través de Ethernet TCP / IP, llamado open-mbus) - el nodo maestro debe rutinariamente encuestar cada dispositivo de campo y buscar cambios en los datos. Esto consume ancho de banda y tiempo de red en aplicaciones en las que el ancho de banda puede ser costoso, como por ejemplo un enlace de radio de baja velocidad binaria. * Modbus está restringido al direccionamiento de 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). * Las transmisiones Modbus deben ser contiguas, lo que limita los tipos de dispositivos de comunicaciones remotas a aquellos que pueden almacenar datos para evitar lagunas en la transmisión. * El protocolo Modbus no ofrece seguridad contra órdenes no autorizadas o interceptación de datos.<ref>{{cite conference |url= |title=Critical Infrastructure Protection III |first= |last= |date=23–25 March 2009 |conference=Third IFIP WG 11. 10 International Conference |editor-last=Palmer |editor2-first=Sujeet |editor2-last=Shenoi |publisher=Springer |location=Hanover, New Hampshire |isbn=3-642-04797-1 |page=87}}</ref> == Enlaces externos == * [http://www.modbus.org Modbus-IDA] * [http://www.modbus.org/specs.php Descripción detallada del protocolo Modbus] * [https://web.archive.org/web/20170920185613/http://www.iana.org/ IANA (Internet Assigned Numbers Authority)] * [https://www.rtautomation.com/technologies/modbus-rtu/ Resumen del Protocolo] * [http://www.simplymodbus.ca/FAQ.htm Preguntas básicas sobre el funcionamiento de Modbus] == Referencias == {{listaref}} {{Control de autoridades}} [[Categoría:Buses]] [[Categoría:Modelo OSI| ]] [[Categoría:Ethernet]] [[Categoría:Automatización]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Modbus
»
Añadir idiomas
Añadir tema