Sei sulla pagina 1di 26

Gua bsica para el uso del Protocolo Modbus

Primera Versin. Versin Preliminar.

Julio de 2012 Ral Mista Entre Ros Argentina


Sujeta a revisin de dialctica. Los contenidos estn completos para esta versin.

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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Modbus ASCII y RTU Versin Preliminar 07-2012

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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Modbus ASCII RS232

Controlador

Entradas /Salidas

Modbus RTU RS485

Medidor

Actuador

Vlvula

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Direccion del dispocitivo

Direccion del dispocitivo

Codigo de funcion

Codigo de funcion

Datos Control de errores

Datos Control de errores

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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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.

3 Modos de trasmisin serial


La comunicacin Modbus serial libre tiene dos alternativas: ASCII o RTU. Los usuarios pueden seleccionar el modo deseado, junto con los parmetros de comunicacin del puerto serie (velocidad de transmisin, el modo de paridad, etc), durante la configuracin de cada IED. El modo serie debe ser el mismo para todos los dispositivos en una red Modbus (no es compatible Modbus RTU con ASCII) 3.1 El modo ASCII: Cuando los IED estn configurados para comunicarse en una red Modbus en modo ASCII (Cdigo Estndar Americano para Intercambio de Informacin), cada byte de 8 bits en un mensaje se enva como dos caracteres ASCII. La principal ventaja de este modo es que permite intervalos de tiempo de hasta un segundo entre los caracteres sin causar un error. El formato de cada byte en modo ASCII es:

Codificacin del sistema

Los caracteres hexadecimales, ASCII 0-9, A-F Un carcter hexadecimal contenido en cada trama ASCII

Bits por byte:

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

Campo de chequeo de error

Chequeo de redundancia longitudinal (LRC)

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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Bits por byte:

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

Campo de chequeo de error

Chequeo de redundancia cclica (CRC)

Figura 4

4 La estructuracin del mensaje Modbus


En cualquiera de los dos modos de transmisin serie (ASCII o RTU), un mensaje Modbus se coloca por dispositivo de transmisin en un marco que tiene un principio conocido y en punto final. Esto le permite a los dispositivos receptores reconocer el inicio del mensaje, leer la porcin de direccin y determinar a qu dispositivo se dirige (o ah todos los dispositivos, si es un mensaje broadcast), y para saber cuando el mensaje se ha completado. Mensajes parciales se pueden detectar. 4.1 Estructura ASCII En el modo ASCII, los mensajes comienzan con un 'dos puntos' (:) de caracteres (ASCII hexadecimal 3A), y terminan con un "retorno de carro - avance de lnea" (CRLF) par (ASCII hexadecimal 0D 0A). Los caracteres permitidos de transmisin para todos los otros campos son hexadecimales 0-9, A-F. Dispositivos monitorean la red en la espera del carcter 'dos puntos'. Cuando se recibe, cada dispositivo decodifica el campo prximo (el campo de direccin) para averiguar si es el dispositivo direccionado. Intervalos de hasta un segundo puede transcurrir entre caracteres en el mensaje. Si se produce un intervalo mayor, el dispositivo receptor asume que se ha producido un error.

Modbus ASCII y RTU Versin Preliminar 07-2012

Introduccin a Modbus Una estructura tpica se muestra a continuacin.

Inicio 1 caract. :

Direccion 2 caract.

Funcion 2 caract.

Datos n caract.

Check error 2 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

Check error 16 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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Con Control de paridad

inicio

fin

fin

Sin control de paridad

El modo RTU sigue la secuencia de bits

inicio

paridad

fin

Con Control de paridad

inicio

fin

fin

Sin control de paridad

Figura 7

5 Mtodos de chequeos de error


Modbus utiliza dos tipos de comprobacin de errores. Comprobacin de la paridad (par o impar) puede estar opcionalmente aplicada a cada carcter. Chequeo de trama (LRC o CRC) se Modbus ASCII y RTU Versin Preliminar 07-2012

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.

6 Formatos de funcin se control y datos


6.1 Cmo se expresan valores numricos: A menos que se especifique lo contrario, los valores numricos (como direcciones, cdigo o de datos) se expresan como valores decimales en el texto de esta seccin. Direcciones de datos en los mensajes Modbus Todas las direcciones de datos en mensajes Modbus hacen referencia a cero. La primera posicin de memoria es cero. Modbus ASCII y RTU Versin Preliminar 07-2012

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:

Nombre del campo


Cabezera Direccion de esclavo

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

Total Figura 8 Tramas de pregunta del maestro en ASCII y RTU

17

Modbus ASCII y RTU Versin Preliminar 07-2012

Introduccin a Modbus

Nombre del campo

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

Modbus ASCII y RTU Versin Preliminar 07-2012

Introduccin a Modbus 6.4 Cdigos de funciones ms utilizados

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

6.5 Cdigos de errores(excepciones)

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

Modbus ASCII y RTU Versin Preliminar 07-2012

Introduccin a Modbus

6.6 Direcciones de variables.

Tipo variables Salidas digitales Entradas digitales

Mapa de direcciones 0x0000 a 0x9999 1x0000 a 1x9999 4x0000 a 4x9999 3x0000 a 3x9999

Variables almacenadas
Entradas analogicas

7 Ejemplos de cdigos de funciones


Funcin 01 o 02 ( 1 Read Coil Status - 2 Read Input Status ): Permite realizar la lectura del estado de las DIs ( @1XXXX el comando 02-Read input status ) o DOs ( @0XXXX el comando 01-Read Coil Status ). Para ello el maestro solicita el nmero de bits que desea leer a partir de una determinada direccin. Cada direccin se corresponde con un registro de 1 bit con el estado del la entrada digital. El esclavo responde indicando el nmero de byte que retorna y sus valores. En la trama de respuesta se aprovechan todos los bits del byte, y puede haber hasta 256 bytes. Peticin del mster (modo RTU):
Consulta del maestro Numero de esclavo Codigo 0x01 o 0x2 Registro de direccion alto Registro de direccion baja Cantidad de bits altos Cantidad de bits bajo CRC altos CRC bajos

Respuesta del esclavo


Numero de esclavo Codigo 0x01 o 0x2 Contador de byte de datos Byte de datos (max 256) CRC altos CRC bajos

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 )

Modbus ASCII y RTU Versin Preliminar 07-2012

Introduccin a Modbus

Consulta del maestro


Numero de esclavo Codigo 0x03 o 0x4 Registro de direccion alto Registro de direccion baja Cantidad de bits altos Cantidad de bits bajo CRC altos CRC bajos

Respuesta del esclavo Numero de esclavo

Codigo 0x03 o 0x4


Contador de byte de datos Byte de datos (max 128) CRC altos CRC bajos

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

Ejemplo 2: (variante con punto flotante, 32bits) Pregunta


0A 04 00 00 00 0A 71 76

0A Numero de esclavo 04 Codigo de funcion 00 00 Direccion de comienzo 00 0A Cantidad de registro 71 76 CRC

Respuesta
0A 00 04 00 10 00 00 60 00 CB 08 2E 4D 00 0A 0F A0 00 00 00 90

0A Numero de esclavo 04 Codigo de funcion 10 Contador de byte 00 00 08 4D TENSION 00 0A OF A0 CORRIENTE 00 00 00 90 POTENCIA

00 00 00 60 FACTOR DE POTENCIA
CB 2E CRC

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Respuesta del esclavo


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

Estado para el bit: 0xXX ( 0x00 : 0 , 0xFF : 1 ) Ejemplo 1: Pregunta


01 05 00 01 FF 00 DD FA

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

Modbus ASCII y RTU Versin Preliminar 07-2012

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.

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Vista de software en comunicacin

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Vista de los software en comunicacin

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Vista de los software en comunicacin

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Vista de los software en comunicacin

Modbus ASCII y RTU Versin Preliminar 07-2012

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

Pginas web es.wikipedia.org/wiki/Modbus www.modbus.org/ http://www.tolaemon.com/site/protocolo_modbus http://www.ditel.es/manuales/obsoletos/reguladores/Modbus_Akros_Cas.pdf

Modbus ASCII y RTU Versin Preliminar 07-2012

Potrebbero piacerti anche