Presentacion de Modbus
Presentacion de Modbus
Introduccin a Modbus
Conclusiones:
El documento es una recopilacin sobre distintas lecturas y practicas realizadas en mi incursin de aprendizaje sobre el protocolo de comunicacin en cuestin. Esta presentacin es una introduccin al uso del protocolo de comunicacin serial Modbus, los lectores obtienen herramientas que le servirn de base a la hora de implementar el protocolo. En el documento se trata de forma terica y prctica una comunicacin efectiva usando el protocolo, la idea fundamental del trabajo reside en que los lectores vern distintas configuraciones en forma prctica con su sustento terico. Se requiere un mnimo conocimiento de redes RS232, RS485, RS422 y Ethernet capa fsica, numeracin hexadecimal, conversin decimal a hexadecimal, cdigos de numeracin ASCII. Aquellos que requieran realizar comunicaciones, se recomienda leer atentamente las especificaciones de los IED involucrados en la comunicaciones, ya que el mapa de direccionamiento de las variables que sirven de intercambio, varan de acuerdo a la disposicin de cada fabricante.
En una segunda presentacin se profundizara en prcticas de configuraciones y cdigos de diagnsticos para redes MODBUS.
Introduccin a Modbus
________________________________________________________________________INDICE
1. Modbus 1.1 Historia 1.2 Caractersticas 1.3 Distintas alternativas 2 Introduccin __ 3 Modos de trasmisin 3.1 Modbus ASCII_____ 3.2 Modbus RTU _____ 4 Estructura del mensaje Modbus 4.1 Estructura ASCII___ 4.2 Estructura RTU____ 4.3 Campo de direccin 4.4 Campo de funcin_ 4.5 Campos de datos_ 4.6 Campo de deteccin de errores 4.7 Como se trasmiten los caracteres 5 Mtodos de chequeo de errores 5.1 Comprobacin de paridad 5.2 Comprobacin de paridad 5.3 Comprobacin de paridad 6 Formato de funcin Modbus 6.1 Como se expresan los valores numricos 6.2 Contenidos de los campos en los mensajes 6.3 Cdigos de funciones 6.4 Direccionamiento 6.5 Cdigos de errores 7 Practicas 8 Biografas
__
__
4 4 4 4 5 7 7 8 8 8 9 9 10 10 11 11 12 12 12 13 13 13 13 15 15 16 16 25
Introduccin a Modbus
1 Modbus
1.1 Historia: Protocolo diseado para comunicar PLC MODICON (MOdular Digital CONtroler, de la empresa Bedford Associates), este protocolo se empieza a integrar a dichos PLC en 1973, y en 1979 se libero como protocolo abierto. Esto hizo a modbus el protocolo de comunicacin serial ms ampliamente utilizado. 1.2 Caractersticas: Es pblico. Situado en capa 7 del modelo OSI. Fcil implementacin. Flexible. Bloques de datos de distintos tipos (variables digitales, analgicas, entradas salidas). La comunicacin se realiza entre un Maestro y uno o varios esclavos hasta 247 Comunicacin Punto a Punto o Punto a Multipunto. Utilizable en RS232, RS485, Ethernet (no es especificada por el protocolo). 1.3 Distintas alternativas: Existen dos alternativas libres para la implementacin de este protocolo en forma serial. Modbus fue desarrollado originalmente en su versin ASCII, esta versin es legible, pero poco eficiente, la trama tiene un encabezado (:) y el control de errores es de redundancia longitudinal LRC. Luego se desarrollo la versin RTU, esta versin es binaria y optimiza los bit trasmitidos, no tiene encabezado y el control de errores es de redundancia cclica (CRC). Tambin existe la versin Modbus/TCP, esta es semejante a la versin RTU encapsulada en una trama TCP, para el uso de esta versin se defini el puerto 502 (nombre: ASA-APPLPROTO.) Adems de estas versiones existen otras alternativas que no sern tratadas en esta presentacin, entre las que se distinguen: Modbus Plus.
Introduccin a Modbus
2 Introduccin
El lenguaje de comunicacin ms comn utilizado por los controladores, medidores, actuadores, vlvulas a los que llamaremos IED, es el protocolo Modbus. Este protocolo define una estructura de mensaje que los controladores reconocen y utilizan independientemente del tipo de redes sobre la que se comunican. Se describe el proceder de un controlador para solicitar el acceso a otro dispositivo, cmo responder a las peticiones de los otros dispositivos, y cmo los errores se detectan y se notifican. Se establece un formato comn para la disposicin y el contenido de los campos del mensaje. El protocolo Modbus establece la norma interna que los IEDs analiza el mensaje. Durante las comunicaciones en una red Modbus, el protocolo determina cmo cada IED sabr su direccin de dispositivo, reconocer un mensaje dirigido a l, determinar el tipo de medidas que deben adoptarse, y extraer cualquier datos u otra informacin contenida en el mensaje. Si la respuesta es necesaria, el controlador construir el mensaje de respuesta. La siguiente figura muestra cmo los IED pueden ser interconectados en una jerarqua de redes que emplean diferentes tcnicas de comunicacin. En trasmisiones de mensajes, el protocolo Modbus incrustado en la estructura del paquete que cada red ofrece, es el lenguaje comn mediante el cual los dispositivos pueden intercambiar datos. Trasmisin sobre redes Modbus: Scada
Modbus Ethernet
RTU
Controlador
Entradas /Salidas
Medidor
Actuador
Vlvula
Introduccin a Modbus Figura 1 Los puertos estndar Modbus se utilizan generalmente en RS-232C o en RS485. Las interfaces definen los pines del conector, el cableado, los niveles de seal, la transmisin en tasas de baudios y comprobacin de paridad. Los IEDs se comunican utilizando una tcnica maestro-esclavo, en la que slo un dispositivo (el maestro) puede iniciar transacciones (llamadas 'consultas'). Los otros dispositivos (los esclavos) responden al pedido de datos requeridos para el maestro, o mediante la adopcin de la accin solicitada por la consulta. El maestro puede dirigirse a los esclavos individuales, o puede iniciar un mensaje de difusin a todos los esclavos (Broadcast). Los esclavos responden con un mensaje (llamado respuesta) a las preguntas que son dirigidos a ellos de forma individual. Los mensajes Broadcast no requieren respuestas. El protocolo Modbus establece el formato para la consulta del maestro con los campos direccin, un cdigo de funcin que define la accin solicitada, los datos a enviar, y un campo de comprobacin de errores. El mensaje de respuesta del esclavo tambin se construye mediante el protocolo Modbus. Contiene campos que confirman la accin tomadas, los datos a ser devuelto, y un campo de comprobacin de errores. Si se produce un error en la recepcin del mensaje, o si el esclavo no es capaz de realizar la accin solicitada, el esclavo va a construir un mensaje de error y enviarlo como su respuesta. 2.1 Ciclo de preguntas y respuestas: Pregunta desde el maestro
Codigo de funcion
Codigo de funcion
Respuesta del esclavo maestro Figura 2 *Los maestros y los esclavos son IEDs, esto es el sigla de Dispositivo Electrnico Inteligente. La Consulta: El cdigo de funcin de consulta le dice al dispositivo esclavo direccionado el tipo de accin a realizar, Los bytes de datos contienen la informacin adicional que el esclavo necesita para realizar la funcin. Por ejemplo, el cdigo de funcin 03 consulta al esclavo para leer registros de valores anlogos y responder con su contenido. El campo de datos debe contener la informacin sobre la cantidad de registros y en qu posicin debe comenzar el envi. El campo de verificacin de error proporciona un mtodo con el que el esclavo validara la integridad de los contenidos del mensaje.
Introduccin a Modbus La respuesta: Si el esclavo hace una respuesta normal, el cdigo de funcin en la respuesta es un eco del cdigo de funcin en la consulta. Los bytes de datos contienen el los datos recogidos por el esclavo, como los valores de registro o de su estado. Si ocurre un error, el cdigo de funcin se ha modificado para indicar que la respuesta es una respuesta de error, y los bytes de datos contienen un cdigo que describe el error. El campo de comprobacin de errores permite que el maestro confirme la validez del contenido del mensaje.
Los caracteres hexadecimales, ASCII 0-9, A-F Un carcter hexadecimal contenido en cada trama ASCII
1 bit de inicio 7 bits de datos, el bit menos significativo enviado primero 1 bit para paridad par/impar; ningn bit sin paridad 1 bit de parada si se utiliza la paridad, 2 bits si no hay paridad
Figura 3 3.2 Modo RTU: Cuando los IED estn configurados para comunicarse en una red Modbus en modo RTU (Remote Terminal Unit), cada byte de 8 bits en un mensaje contiene dos caracteres hexadecimales 4-bit. La principal ventaja de este modo es su mayor densidad de caracteres permite una mejor transferencia de datos que el ASCII para la misma velocidad en baudios. Cada mensaje debe ser transmitido en forma secuencia continua.
Introduccin a Modbus El formato de cada byte en modo RTU es: Codificacin del sistema 8-bit binario, hexadecimal 0-9, A-F Dos caracteres hexadecimales contenidos en cada campo de mensaje 8-bits
1 bit de inicio 8 bits de datos, el bit menos significativo enviado primero 1 bit para paridad par/impar; ningn bit sin paridad 1 bit de parada si se utiliza la paridad, 2 bits si no hay paridad
Figura 4
Inicio 1 caract. :
Direccion 2 caract.
Funcion 2 caract.
Datos n caract.
Fin 2 cacact CR LF
Figura 5 4.2 Estructura RTU En el modo RTU, los mensajes comienzan con un intervalo de silencio de al menos 3,5 caractersticas de tiempos. Esto es ms fcil de implementar como un mltiplo de veces de caractersticas de la velocidad de transmisin que se utiliza en la red (se muestra como T1-T2T3-T4 en la siguiente figura). El primer campo transmitido es la direccin del dispositivo. Los caracteres permitidos de transmisin para todos los campos son hexadecimales 0-9, A-F. Los IED monitorean la red de de forma continua, durante los intervalos de 'Silencios'. Cuando el primer campo (el campo de direccin) se recibe, cada dispositivo lo decodifica para saber si es el dispositivo direccionado. Tras el ltimo carcter transmitido, un intervalo similar de al menos 3,5 veces de caracterstica de tiempo marca el final del mensaje. Un nuevo mensaje puede comenzar despus de este intervalo. Todo el mensaje debe ser transmitido como un flujo continuo. Si se produce un intervalo de silencio de por ms de 1,5 veces la caractersticas de tiempo antes de la terminacin de la trama, la recepcin IED desplaza el mensaje incompleto y asume que el prximo byte ser el campo de la direccin de un nuevo mensaje. Del mismo modo, si un nuevo mensaje comienza antes de 3,5 veces despus de un carcter de mensaje anterior, el dispositivo receptor lo considerar una continuacin del mensaje anterior. Esto establecer un error, como el valor en el ltimo campo CRC no ser un mensaje vlido. Una estructura tpica se muestra a continuacin.
Inicio
T1-T2-T3-T4
Direccion 8 bits
Funcion 8 bits
Datos n x 8 bits
Fin
T1-T2-T3-T4
Figura 6 4.3 Cmo funciona el campo de direccin: El campo de direccin de un mensaje contiene dos caracteres (ASCII) u ocho bits (RTU). Las direcciones validas de los IED esclavos estn en el intervalo desde 1 a 247 en decimal. Cuando el esclavo enva su respuesta, coloca su propia direccin en este campo para permitirle al maestro saber que esclavo est respondiendo. La direccin 0 se utiliza para el envo de mensaje broadcast, que reconocen todos los IEDs esclavos.
Introduccin a Modbus 4.4 Cmo funciona el campo de funcin: El campo de cdigo de funcin de un mensaje contiene dos caracteres (ASCII) o ocho bits (RTU). Los cdigos vlidos estn en el intervalo de 1 a 255 en decimal. No todos los cdigos son implementados por Modbus, y podemos encontrar muchas variantes dependiendo de la aplicacin o IEDs. Cuando un maestro enva un mensaje a un esclavo el campo de cdigo de funcin le dice al esclavo qu tipo de accin debe realizar. Por ejemplo para leer el estado ON / OFF, estados de un grupo de salidas discretas o entradas; para leer el contenido de datos de un grupo de registros, para leer el estado de diagnstico del esclavo, escribir en salidas o registros, o para permitir la carga, grabacin, o verificar el programa en el esclavo. Cuando el esclavo responde al maestro, utiliza el campo de cdigo de funcin para indicar ya sea respuesta normal (sin errores) o algn tipo de error (llamado una respuesta de excepcin). Para una respuesta normal, el esclavo simplemente se hace eco del cdigo de la funcin original. Para una respuesta de excepcin, el esclavo devuelve un cdigo que es equivalente al cdigo de funcin original con su bit ms significativo a un 1 lgico. Por ejemplo, un mensaje de maestro a esclavo a leer a un grupo de registros anlogos tendra el siguiente cdigo de funcin: 0000 0011 (hexadecimal 03) Si el dispositivo esclavo toma la accin solicitada, sin error, devuelve el mismo cdigo en su respuesta. Si se produce una excepcin, devuelve: 1000 0011 (hexadecimal 83) Adems de su modificacin del cdigo de funcin para una respuesta de excepcin, el esclavo pone un cdigo nico en el campo de datos del mensaje de respuesta. Esto le dice al maestro de qu tipo de error, o la razn de la excepcin. El maestro resuelve las respuestas de excepcin. 4.5 Contenido del campo de datos: El campo de datos se construye utilizando conjuntos de dos dgitos hexadecimales, en el intervalo de 00 a FF en hexadecimal. Estos se pueden hacer de un par de caracteres ASCII, o a partir de un carcter RTU, de acuerdo al modo que se utilice. El campo de datos de los mensajes enviados desde un maestro a los dispositivos esclavos contiene informacin adicional que el esclavo debe utilizar para tomar la accin definida por el cdigo de la funcin. Esto puede incluir elementos como direcciones discretas o registro, la cantidad de variables que se manejan, y el recuento de bytes de datos reales de la trama. Por ejemplo, las peticiones de un maestro a un esclavo para leer un grupo de registros holding (cdigo de funcin 03), el campo de datos especifica el registro inicial y cuntas registros son requeridos. Si el maestro escribe un grupo de registros en el esclavo (cdigo de funcin 10 hexadecimal), el campo de datos especifica el registro de inicio, cantidad de registros a escribir, y los datos a escribir en los registros. Si no hay ningn error, el campo de datos de una respuesta de un esclavo a un maestro contiene los datos solicitados. Si ocurre un error, el campo contiene un cdigo de excepcin que el maestro puede utilizar para determinar la accin a tomar. 4.6 Contenido del campo Comprobacin de errores: Hay dos tipos de mtodos de comprobacin de errores para redes Modbus. Modbus ASCII y RTU Versin Preliminar 07-2012
Introduccin a Modbus La comprobacin de errores contenidos en el campo depender del mtodo que se utiliza. ASCII Cuando se utiliza el modo ASCII, el campo de la comprobacin de errores contiene dos caracteres ASCII. Los caracteres de verificacin de error es el resultado de una comprobacin de redundancia longitudinal (LRC), clculo que se realiza con el contenido del mensaje, excluyendo los caracteres de comienzo "dos puntos" y fin CRLF. Los campo LRC se adjuntan al mensaje como el ltimo campo que precede a la CRLF caracteres. RTU Cuando se utiliza el modo RTU, el campo de la comprobacin de errores contiene un implementado de 16-bits como dos bytes de 8 bits. El valor de verificacin de error es el resultado de un clculo de comprobacin de redundancia cclica al cabo del contenido del mensaje. El campo CRC se aade al mensaje como el ltimo campo en el mensaje. Cuando se hace esto, el byte de orden bajo del campo se aade en primer lugar, seguido por el byte de orden superior. El byte CRC de orden superior es el ltimo byte que se enviar en el mensaje. 4.7 Como se transmiten los caracteres: Cuando los mensajes se transmiten en las redes Modbus, cada carcter o byte se enva en este orden (de izquierda a derecha): Bit menos significativo (LSB). . . Bit ms significativo (MSB) El modo ASCII sigue la secuencia de bits
inicio
paridad
fin
inicio
fin
fin
inicio
paridad
fin
inicio
fin
fin
Figura 7
Introduccin a Modbus aplica a todo el mensaje. Tanto el carcter de verificacin y la verificacin del mensaje de trama lo genera el IED maestro y aplica al mensaje antes de la transmisin. El IED esclavo comprueba cada carcter y la trama de todo el mensaje durante la recepcin. El maestro se configura por el usuario para esperar un intervalo de tiempo predeterminado antes de abortar la comunicacin. Este intervalo se establece lo suficientemente largo para que cualquier esclavo de responder en forma normal. Si el esclavo detecta un error de transmisin, el mensaje no ser tratado, el esclavo no va a construir la respuesta al maestro. Por lo tanto el tiempo de espera expira y permitir que el maestro maneje el error. Un mensaje dirigido a un dispositivo esclavo que no existe, tambin causar expirar el tiempo de espera. 5.1 Comprobacin de la paridad: Los usuarios pueden configurar los controladores para la comprobacin de paridad par o impar, o sin paridad. Esto va a determinar cmo el bit de paridad se establece en cada carcter. La paridad par o impar especifica la cantidad de bits 1 que se contarn en los caracteres (siete bits de datos para el modo ASCII, u ocho para RTU). El bit de paridad se establecer en 0 o 1 dependiendo si es paridad par o impar de bits 1. Por ejemplo, los ocho bits de datos estn contenidos en un trama de carcter RTU: 1100 0101 La cantidad total de bits 1 en el carcter es cuatro. Si se utiliza paridad par, el bit de paridad ser un 0, haciendo que la cantidad total de bits 1 sean en total un nmero par (cuatro). Si se utiliza paridad impar, el bit de paridad ser un 1, haciendo una cantidad impar (cinco). Cuando el mensaje se transmite, el bit de paridad se calcula y se aplica a cada carcter. El dispositivo receptor cuenta la cantidad de bits 1 y establece un error si coincide con el clculo (todos los dispositivos en la red Modbus debe estar configurado para utilizar el mismo mtodo de verificacin de paridad). Este mtodo solo detecta errores cuando los bits afectados son nmeros impares. 5.2 Comprobacin LRC: En el modo ASCII, los mensajes incluyen un campo de comprobacin de errores de chequeo de Redundancia Longitudinal (LRC). El campo LRC comprueba el contenido del mensaje, sin contar los 'dos puntos' del inicio y el CRLF del final. Se aplica independientemente del mtodo de verificacin de paridad. El campo LRC es un byte, que contiene un valor binario de 8-bits. El valor de LRC es calculado por el dispositivo que transmite, y aade la LRC en el mensaje. El dispositivo receptor calcula un LRC durante la recepcin del mensaje, y compara el valor calculado con el valor real recibido en el campo LRC. Si los dos valores no son iguales, se produce un error. El LRC se calcula sumando los sucesivos bytes de 8 bits del mensaje, descartando cualquier acarre, y luego se le realiza el complemento dos. Se realiza en el contenido del campo ASCII mensajes excluyendo el 'dos puntos y el CRLF' de comienza y final respectivamente. 5.3 Comprobacin CRC: En el modo RTU, los mensajes incluyen un campo de comprobacin de errores que se basa en una comprobacin de redundancia cclica (CRC). El campo CRC comprueba el contenido de Modbus ASCII y RTU Versin Preliminar 07-2012
Introduccin a Modbus todo el mensaje. Se aplica independientemente de cualquier mtodo de verificacin de paridad utilizada. El campo CRC es de dos bytes, que contiene un valor binario de 16-bit. El valor del CRC es calculado por el dispositivo de transmisin, y aade el CRC al mensaje. El dispositivo receptor vuelve a calcular un CRC durante la recepcin del mensaje, y compara el valor calculado con el valor recibido en el campo CRC. Si los dos valores no son iguales, se produce error. El CRC comienza cargando un registro de 16 bits con todos 1's. Luego comienza un proceso de aplicacin de los sucesivos bytes del mensaje al contenido del registro. Solo los 8 bits de datos son usados para generar el CRC. Los bits de inicio, parada y paridad no se utilizan para el CRC. Durante la generacin del CRC, se ejecuta una operacin lgica XOR entre cada byte y el contenido del registro. Luego el resultado es desplazado en la direccin del bit menos significativo (LSB), ingresando un 0 en la posicin del bit ms significativo (MSB). El bit extrado es examinado. Si es un 1 se ejecuta una XOR entre el contenido del registro y un valor fijo. Si el bit extrado es 0 no se ejecuta la XOR. Este proceso se repite hasta ejecutarse ocho desplazamientos. Despus del ltimo desplazamiento se ejecuta una XOR entre el prximo byte y el valor del registro de 16 bits, realizando el procedimiento de desplazamientos des cripta anteriormente. El contenido final del registro, despus de aplicarse todos los bytes del mensaje, es el valor del CRC. El procedimiento para generar el CRC es: 1. Cargar un registro de 16 bits con FFFFH (todos 1's). Este registro toma el nombre de registro CRC. 2. Ejecutar una XOR entre el primer byte del mensaje y el byte menos significativo del registro CRC, dejando el resultado en el registro CRC. 3. Desplazar el registro CRC un bit a la derecha (hacia el LSB), ingresando un 0 en el MSB. Extraer y examinar el LSB. 4. Si el LSB fue 0 repetir el paso 3 (otro desplazamiento). Si el MSB fue 1 realizar una XOR entre el registro CRC y el valor A001H (1010 0000 0000 0001 B). 5. Repetir los pasos 3 y 4 hasta completar ocho desplazamientos, dando como procesado un byte. 6. Repetir los pasos 2 a 5 para el prximo byte del mensaje. Continuar hasta que todos los bytes han sido procesados. 7. El contenido final del registro CRC es el valor CRC. Cuando el CRC (dos bytes) es transmitido en el mensaje, el byte menos significativo debe ser transmitido primero, seguido del byte ms significativo.
Introduccin a Modbus Por ejemplo: La bobina conocido como "bobina 1 'en un controlador programable se dirige como bobina 0000 en el campo de direccin de datos de un mensaje Modbus. Bobina de 127 decimal es tratado como la bobina 007E hexadecimal (126 decimal). El holding registro 40001 se aborda como registro 0000 en el campo de direccin de datos de mensaje. El campo de cdigo de la funcin ya especifica un "holding registro" . Por lo tanto la referencia del XXXX '4 'est implcita. El holding registro 40108 se dirige como registro 006B hex (107 decimal). 6.2 Contenido de los campo en los mensajes: La figura 8 muestra un ejemplo de un mensaje de consulta Modbus. La figura 9 es un ejemplo de una respuesta normal. Ambos ejemplos muestran el contenido del campo en hexadecimal, y se muestra cmo un mensaje puede ser enmarcado en ASCII o en modo RTU. La consulta es una lectura de holding registros al IED esclavo 10. Las solicitud de tres holding registro, desde el registro 40012 hasta el 40014. Tenga en cuenta que el mensaje especifica la direccin del registro inicial como 0011 (000B hex). La respuesta del esclavo hace eco del cdigo de funcin, esto indica una respuesta normal. El campo 'cantidad de bytes' especifica el nmero de 8 bits de datos sern contestados. Se muestra la cantidad de bytes de 8 bits trasmitidos, ya sea ASCII o RTU . En ASCII, cada valor hexadecimal de 4-bits requiere un carcter ASCII, por lo tanto dos caracteres ASCII por cada campo de funcin. Por ejemplo, el valor hexadecimal 63 se enva como un byte de 8-bits en modo RTU (01100011). El mismo valor enviado en modo ASCII requiere dos bytes, ASCII '6 '(0.110.110) y '3 '(0.110.011). Pregunta:
Ejemplo (hex)
Caracteres ASCII
:
Campo de 8 bitsRTU
Nada 0000 1010
10
10
Funcion
Direccion inicial HI Direccion inicial LO N de registros Hi
04
00 0B 00
04
00 0B 00
0000 0100
0000 0000 0000 1011 0000 0000
N de registros LO
Chequeo de error Final
03
03
LRC(2 caracteres) CR LF
0000 0011
CRC (16 bits) Nada
17
Introduccin a Modbus
Ejemplo (hex)
Caracteres ASCII
Campo de 8 bitsRTU
Nada
0000 1010 0000 0100 0000 0110 0000 0010 0000 1011 0011 0000 0000 1010 0000 0000 0110 0101 CRC (16 bits) Nada
Cabezera
Direccion de esclavo Funcion Contador Dato HI Dato LO Dato HI Dato LO Dato HI Dato LO Chequeo de error Final 10 04 06 02 0B 30 0A 00 65
:
10 04 06 02 0B 30 0A 00 65 LRC(2 caracteres) CR LF
Total Tramas de respuesta del esclavo en ASCII y RTU 6.3 Cdigos de funcin: - Funcin 1 Read Coil Status - Funcin 2 Read Input Status - Funcin 3 Read Holding Registers - Funcin 4 Read Input Registers - Funcin 5 Force Single Coil - Funcin 6 Preset Single Register - Funcin 7 Read Exception Status - Funcin 8 Diagnostics - Funcin 9 Program 484 - Funcin 10 Poll 484 - Funcin 11 Fetch Communication Event Counter - Funcin 12 Fetch Communication Event Log - Funcin 13 Program Controller - Funcin 14 Poll Controller - Funcin 15 Force Multiple Coils - Funcin 16 Preset Multiple Registers - Funcin 17 Report Slave ID - Funcin 18 Program 884/M84 - Funcin 19 Reset Comm. Link - Funcin 20 Read General Reference - Funcin 21 Write General Reference - Funcin 22 Mask Write 4X Register - Funcin 23 Read/Write 4X Registers - Funcin 24 Read FIFO Queue
23
11 Figura 9
Codigo
01 02 03 04 05 06 07 15 16
Accion
Leer Bobina (0:xxxx) Leer Entradas (1:xxxx) Leer Registros(4:xxxx) Leer Registros (3:xxxx) Escribir Bobina (0:xxxx) Escribir Registro (4:xxxx) Leer excepcin Escribir Bobinas (0:xxxx) Escribir Registros (4:xxxx)
Significado
Pregunta el estado off-on de bobinas logicas Pregunta el estado off-on de entradas logicas Pregunta el valos de registros almacenados Pregunta el valos de registros de entradas fuerza el estado de una bobina Escribe una variable de almacenamiento Pregunta el motivo del fallo fuerza el estado de varias bobinas Escribe varias variables de almacenamiento
Codigo
01 02 03 04 05 06 07
Tipo de error
Funcion ilegal Direccion ilegal Dato ilegal Fallo en el dispositivo Reconocimiento (ACK) Ocupado Reconocimiento Negativo (NAK)
Significado
la funcion recivida no es permitida por esclavo La direccion esta fuera del rango El dato contiene un valor no valido El controlador no responde o ha ocurrido un error Se ha aceptado la funcion y se esta procesando El dispocitivo esta ocupado La accion solicitada no puede procesarce en este momento
Introduccin a Modbus
Mapa de direcciones 0x0000 a 0x9999 1x0000 a 1x9999 4x0000 a 4x9999 3x0000 a 3x9999
Variables almacenadas
Entradas analogicas
Funcin 03 o 04 ( 3 Read Holding Registers 4 Read Input Registers ) : Permite realizar la lectura del valor analgicos almacenados ( @4XXXX el comando 3 Read Holding Registers ) o entradas analogas ( @3XXXX el comando 4 Read Input Registers ) . El mster indica la direccin base y nmero de registros a leer a partir de esta, mientras que el esclavo indica en la respuesta el nmero bytes retornados, seguido de estos valores. Aunque en realidad se est escribiendo en el rango de registros o valores numricos, los registros son direccionados a partir de la direccin 0 ( as el registro @40001 se direcciona 0 )
Introduccin a Modbus
Ejemplo 1: Pregunta
01 03 01 00 00 06 C4 34
Respuesta
01 03 0C 20 81 00 00 00 00 00 00 00 00 1C 01 76 F1
Respuesta
0A 00 04 00 10 00 00 60 00 CB 08 2E 4D 00 0A 0F A0 00 00 00 90
00 00 00 60 FACTOR DE POTENCIA
CB 2E CRC
Introduccin a Modbus Funcin 05 (Force Single Coil): Permite modificar el estado de una DO del esclavo ( mando o rel ) . Es decir mediante este comando podemos modificar algn bit de alguna de las variables internas del esclavo u ordenar la ejecucin o activacin de un mando. Acta sobre la zona de memoria de los DOs @0XXXX . El Maestro especifica la direccin del bit o mando que quiere modificar seguido de 0x00 para ponerlo a 0 o 0xFF para ponerlo a 1. El esclavo responde con una trama similar indicando la direccin que ha modificado y el valor que ha establecido en el bit o mando. Peticin del mster (modo RTU):
Consulta del maestro Numero de esclavo
Codigo 0x05
Registro de direccion alto Registro de direccion baja Estado para el bit altos (00) Estado para el bit bajo (00 o FF) CRC altos CRC bajos
Codigo 0x05
Registro de direccion alto Registro de direccion baja Estado para el bit altos (00) Estado para el bit bajo (00 o FF) CRC altos CRC bajos
Respuesta
01 05 00 01 FF 00 DD FA
Funcin 6 (Preset Single Register): Permite la escritura en las AOs del esclavo ( ya sea una seal o valor interno del equipo ), y por tanto acta sobre la zona de memoria de las AOs ( @4XXXX ). Deberemos indicar la direccin del valor que queremos modificar y la magnitud que queremos asignarle. Luego el esclavo debera responder con la direccin del dato que ha modificado y el valor que le ha asignado, que debera coincidir con el enviado. Aunque en realidad se est escribiendo en el rango de AOs , los registros son direccionados a partir de la direccin 0 ( as el registro @40001 se direcciona 0 )
Consulta del maestro Numero de esclavo Codigo 0x06 Registro de direccion alto Registro de direccion baja Estado para el bit altos (00) Estado para el bit bajo (00 o FF) Respuesta del esclavo Numero de esclavo Codigo 0x06 Registro de direccion alto Registro de direccion baja Estado para el bit altos (00) Estado para el bit bajo (00 o FF) CRC altos
CRC altos
CRC bajos
CRC bajos
Introduccin a Modbus
Ejemplo 1: Pregunta
01 06 01 F1 00 02 58 04
Respuesta
01 06 01 F1 00 02 58 04
La respuesta es un eco de la pregunta para cdigos 05 y 06 Funcin 7 ( Read Exception Status ) : Permite la lectura rpida de un byte fjo de un esclavo, que generalmente es el de excepcin y que informa del estado del equipo. No tiene direccin del byte debido a que siempre se lee el mismo byte (determinado por el propio dispositivo esclavo) :
Consulta del maestro Numero de esclavo Codigo 0x07 CRC altos CRC bajos Respuesta del esclavo Numero de esclavo Codigo 0x07
Valor de excepcion
CRC altos CRC bajos
Funcin 15 (Force Multiple Coils): Permite la modificacin simultanea de varios bits DOs en el esclavo, pasndolos de OFF (0) o a ON ( 1) segn convenga. Acta sobre la zona de memoria de las salidas digitales (@0XXXX). As en el comando se pasan la direccin inicial (direccin del primer bit o mando a modificar) y la cantidad y estado de cada uno de los sucesivos mandos (bits) a modificar.
Consulta del maestro Numero de esclavo Codigo 0x0F Direccion del bit alto Direccion del bit baja Cantidad de bit altos Cantidad de bit bajo Cantidad de byte Estado de los byte a modificar (x8) CRC altos CRC bajos Respuesta del esclavo Numero de esclavo Codigo 0x0F Direccion del bit alto Direccion de bit baja Cantidad de bit altos Cantidad de bit bajo CRC altos CRC bajos
Aunque el estado de las DOs se especifica bit a bit, las tramas se componen de bytes, y esto obliga a enviar los estados en grupos de 8. El esclavo no debera hacer caso a los bits sobrantes, es decir, no debera considerar los que queden por encima del ltimo bit indicado en el campo cantidad de mandos a modificar.
Introduccin a Modbus
El siguiente ejemplo muestra como forzar una serie de bits de salida comenzando desde la posicin del registro de salida 20 (direccin 19 decimal o 13hexadecimal) en el esclavo 17. La consulta contiene dos byte de datos:
CD
1100
01
1101
Hexadecimal
0000 0001
Binario Los bits modificaran las salidas de la siguiente forma Valor del bit
1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1
Posicin
27 26 25 24 23 22 21 20 29 28
El primer byte trasmitido (CD hex) a las direcciones 27-20, el bit menos significativo corresponde a la direccin mas baja de los bits de salida (20) El siguiente byte trasmitido (01 hex) a las direcciones 29-28, el bit menos significativo corresponde a la direccin mas baja de los bits de salida (28). Los bits no usados se descartan sin importar si son 1 o 0. Funcin 16 ( Preset multiple registers ): Permite realizar la escritura en un grupo de AOs, y por tanto acta sobre la zona de AOs (@4XXXX ). Se debe especificar la direccin a partir de la que queremos comenzar a actualizar valores, el nmero de valores que queremos actualizar, y la lista de valores que queremos asignar a estos registros. Aunque se est escribiendo en el rango de registros o valores numricos , los registros son direccionados a partir de la direccin 0 ( es decir el registro @40001 se direcciona 0 ) Peticin del mster (modo RTU):
Consulta del maestro Numero de esclavo Respuesta del esclavo Numero de esclavo Codigo 0x10 Direccion de inicio alto Direccion de inicio baja Cantidad del registros altos Cantidad del registros bajo CRC altos CRC bajos
Codigo 0x10
Direccion de inicio alto Direccion de inicio baja Cantidad de registros altos Cantidad de registros bajo Cantidad de byte Estado de los byte a modificar ........ CRC altos CRC bajos
Introduccin a Modbus
Practicas:
Prueba 1: Leer 16 salidas digitales desde la posicin 100, del esclavo 55, en Modbus RTU Esta prueba la realizaremos entre dos PC, con las aplicaciones Modscan y Modsim (simulador Modbus RTU maestro y esclavo respectivamente). Los datos de los puertos seriales sern 9600-8n1 para todas las pruebas Vista de las pantallas de los softwares mencionados
Introduccin a Modbus
Prueba 2: Leer 50 entradas digitales desde la posicin 65, del esclavo 155, en Modbus RTU Esta prueba la realizaremos entre dos PC, con las aplicaciones ASE2000 y Modsim (simulador Modbus RTU maestro y esclavo respectivamente). Vista de las pantallas de los softwares mencionados
Introduccin a Modbus
Prueba 3: Leer 5 variables almacenadas desde la posicin 00, del esclavo 155, en Modbus RTU Esta prueba la realizaremos entre dos PC, con las aplicaciones Lookout y Modsim (simulador Modbus RTU maestro y esclavo respectivamente). Vista de las pantallas de los softwares mencionados
Introduccin a Modbus
Prueba 4: Escribir 1 salida digital desde la posicin 15, del esclavo 132, en Modbus RTU Esta prueba la realizaremos entre dos PC, con las aplicaciones ASE2000 y Modsim (simulador Modbus RTU maestro y esclavo respectivamente). Vista de las pantallas de los softwares mencionados
Introduccin a Modbus
8 Biografas
Manuales y libros Modicon Modbus Protocol Reference Guide PIMBUS300 Rev. J Micro-motion-modbus-mapping.pdf Sistemas SCADA - Aquilino Rodrguez Penin