Está en la página 1de 17

Varias de las tarjetas desarrolladas en Sistemas Digitales, usan el protocolo de comunicacin

llamado MODBUS, pero qu es y cmo funciona el MODBUS? antes de comenzar con el MODBUS,
necesitamos conocer algunos detalles bsicos, como los siguientes:

Qu es la comunicacin serial.
Que es el RS-485.
Como se implementa una red RS-485.

Qu es la comunicacin serial?
La comunicacin serial consiste en el envi secuencial de un bit a la vez de informacin entre dos o
ms dispositivos, por eso se le llama serial, porque cada bit va uno seguido de otro o dicho de otra
manera cada bit va en serie, ahora esto implica que para la transmisin de datos es necesario un
solo cable entre los dispositivos y una referencia o tierra, tal y como se observa en la siguiente figura.

Como se observa, la seal es por un solo cable, lo que implica que solo halla dos valores, denotados
en electrnica digital por un 1 o un 0, esto es si llega voltaje al cable (1) o si no le llega (0).
En la figura anterior el dispositivo 1 transmite la informacin y el dispositivo 2 la recibe, as no se
utiliza mucho, pues no hay forma que el dispositivo 2 regrese informacin al dispositivo 1,
obviamente es mejor la transmisin con dos cables como la mostrada en la figura siguiente:

Ahora si es posible transmitir de forma serial los datos del dispositivo 1 al dispositivo 2 y viceversa.
Cada dispositivo tiene dos cables, uno es el transmisor que es el cable que enva los datos a otro
dispositivo, generalmente se le representa como Tx, y el otro cable es el receptor que se le
representa con Rx, y es el encargado de recibir la informacin, observe la imagen siguiente:

Observe como el transmisor (Tx) de un dispositivo se conecta al receptor (Rx) del otro, los datos que
se envan de un dispositivo a otro, como ya se mencion arriba es un bit a la vez, juntos esos bits
forman datos, recuerde que para cada lnea de datos solo hay dos posibles valores o el dato enviado
es un 0 o es 1, por ejemplo observe la imagen siguiente, ah se puede observar cuales son 0s y
cuales son 1s de una tpica seal serial enviada por el Tx:

Por supuesto que para que funcione correctamente la transmisin de unos y ceros los dos
dispositivos deben estar enviando y recibiendo la informacin a la misma velocidad, de esto
hablamos ms adelante.

Como se enva la informacin de forma serial


Serialmente podemos enviar cualquier dato, por ejemplo, vamos a pensar que yo deseo enviar la
letra A de un dispositivo a otro, cuando son letras las que se envan generalmente se usa el cdigo
ASCII de la letra, as pues, para la letra A le corresponde el cdigo ASCII 65, que convertido a unos
y ceros (cdigo binario) nos da como resultado el 1000001, entonces para enviar la letra A
simplemente se enva una trama de bits como se muestra en la figura siguiente.

Notas:
1. Se enva siempre, del bit menos significativo al bit ms significativo.
2. Generalmente se enva los datos de forma serial en bloques de 8 bits, el cdigo ASCIII de la
letra es de 7 bits, por lo que se agrega un 0 al final, en el bit ms significativo.
3. El envi de datos es a una velocidad previamente establecida por los dispositivos, por eso
es posible saber cundo es 0 y cuando es 1.
De esta forma se pueden enviar informacin, cualquier tipo de informacin, letras, nmeros y
caracteres. Se puede enviar el cdigo ASCII de una letra seguida de otra y as sucesivamente para
formar palabras, y as enviar la informacin que nosotros queremos, as de simple es la
comunicacin serial.

Bit de Start y bit de Stop


A la trama de 8 bits que enva la letra A y que se mostro en la imagen anterior, siempre se le agregan
dos bits mas, uno al inicio y otro al final, esto con la finalidad de indicarle al receptor cuando inicia
el dato (bit de start) y cuando termina (bit de stop), es de suponer que ambos bits van al inicio y al
final de la trama de bits, esto se puede ver en la figura siguiente.

El bit de inicio es un 0 y el bit de paro es un 1, siempre que se enven datos seriales generalmente
llevan este formato, por ejemplo si se enva la palabra HOLA serialmente, se vera como la figura
siguiente la trama de bits, donde ahora no se muestran los unos y ceros, por simplicidad se usaran
bloques representando datos y bits de inicio y paro.

Bit de paridad
Existe otro bit que se agrega a la trama, es el llamado bit de paridad, que sirve para detectar errores
en las tramas enviadas, no entraremos en detalle de este bit, pues es opcional su uso.
Velocidad de transmisin
Finalmente debemos tener en cuenta la velocidad a la que se envan lo bits serialmente, es de suma
importancia pues como se menciono arriba, ambos dispositivos deben estar a la misma velocidad
para transmitir y recibir bits, si no lo estn, simplemente la transmisin serial no sera correcta.
La velocidad de transferencia de informacin indica el nmero de bits que se transmiten en un
segundo, se mide en bauds (baudios) algunas velocidades de transmisin que son muy usadas son
las siguientes: 1200, 2400, 4800, 9600, 19200. Por ejemplo la tarjeta de relevadores usa una
velocidad de 9600 bauds para enviar la informacin.

Qu es el protocolo RS-485?
Es un protocolo de comunicacin serial, qu a la fecha es un estndar, es usado como sistema de
interconexin entre dispositivos a grandes distancias y funciona en ambientes elctricamente
ruidosos sin problema alguno. Existen dos opciones para crear una red RS-485:

Usando 4 cables, llamada en ingles full-duplex.


Usando 2 cables, llamada half-duplex.

Enseguida se detallan cada una de estas opciones.

Comunicacin RS-485 a cuatro hilos (full-duplex)


En el artculo anterior se vio que dos dispositivos pueden comunicarse serialmente usando dos
cables, uno llamado receptor (Rx) y otro llamado trasmisor (Tx), pues basta con agregar un
dispositivo electrnico llamado transceptor (transceiver) para protocolo RS-485. Este chip es capaz
de manejar la recepcin y transmisin de datos con los niveles de voltaje requeridos en la
especificacin que se defini para el protocolo RS-485.
Observe la figura, el transceptor se conecta a las terminales Tx y Rx de un dispositivo serial, para as
tener lista la conexin RS-485 a 4 hilos, as de simple.

Ahora observe en la siguiente figura, la conexin para formar la red RS-485, con nicamente dos
dispositivos seriales.

Ese es el hardware necesario para la comunicacin RS485 a 4 hilos, el transmisor y receptor son
totalmente independientes, en un instante ambos pueden estar transmitiendo y recibiendo
informacin, por eso es llamado full-duplex pues es ms rpida este tipo de conexin que su
contraparte, la conexin RS-485 a 2 hilos.

Comunicacin RS-485 a dos hilos (half-duplex)


La otra conexin posible es la de dos hilos, en este caso se usa igual un transceptor para RS-485,
pero que sea para dos hilos, la diferencia, es que a dos hilos, el transmisor y el receptor nunca estn
funcionando en el mismo instante, o el dispositivo transmite informacin o la recibe, pero nunca al
mismo tiempo. Este tipo de conexin, es ms lenta que usando la conexin RS-485 a 4 hilos, pero
solo requerimos de dos simples cables, esa es una ventaja que hay que tener en cuenta, a la hora
de disear el hardware. La figura siguiente muestra dos dispositivos conectados para funcionar con
la especificacin RS-485 a dos hilos, observe como es necesaria una lnea ms de control.

Como se mencion arriba, la ventaja en modo half dplex es evidente, requiere solamente dos
cables para su conexin, lo que ahorra en cableado, sobre todo si son largas las distancias entre los
dispositivos.

Otra ventaja del RS-485


Adems de las ventajas mostradas en este artculo, existe otra caracterstica de la conexin RS-485,
la posibilidad de conectar ms dispositivos a la misma red, es decir, que puedo conectar a los dos
hilos del RS-485 una gran cantidad de dispositivos electrnicos, anteriormente los transceptores,
soportaban solamente 32 dispositivos en la misma red, ahora hay chips que soportan muchos ms.
Generalmente, cuando se conectan en la red varios dispositivos uno de ellos es llamado maestro y
los otros esclavos, observe la figura siguiente, muestra la conexin RS-485 de dos hilos con varios
esclavos, en la figura por simplicidad no se muestra el transceptor.

MODBUS
El MODBUS es un protocolo de comunicacin serial basado en el modelo maestro/esclavo, a la fecha
es un estndar de facto, es pblico, muy seguro, no requiere licencias y su implementacin es
relativamente fcil en dispositivos electrnicos, por ejemplo nuestros ingenieros, usan el
microcontrolador PIC16F648A programado para responder comandos MODBUS, esas son algunas
de las razones por las que goza de muchsima aceptacin, adems de que tiene ms de 30 aos en
la industria.

MODBUS sobre conexin RS-485


El protocolo MODBUS es un protocolo que usa lneas seriales, por lo que comnmente se
implementa sobre redes de comunicacin RS-485, pero tambin sobre redes que usan la
comunicacin serial RS-232, incluso se puede implementar va TCP/IP sobre una red Ethernet.
Modos de Transmisin del MODBUS
Los modos de transmisin definen como se envan los paquetes de datos entre maestros y esclavos,
el protocolo MODBUS define dos principales modos de transmisin:

MODBUS RTU(Remote Terminl Unit). La comunicacin entre dispositivos se realiza por


medio de datos binarios. Esta es la opcin ms usada del protocolo y es la que se
implemento en nuestras tarjetas.
MODBUS ASCII (American Standard Code for Information Interchange). La comunicacin
entre dispositivos se hace por medio de caracteres ASCII.

Comunicacin Maestro-Esclavo en MODBUS


El MODBUS siempre funciona con un maestro y uno o ms esclavos, siendo el maestro quin
controla en todo momento el inicio de la comunicacin con los esclavos, que segn la especificacin
pueden ser hasta 247 en una misma red. El esclavo por otro lado se limita a retornar los datos
solicitados por el maestro, as de simple es la comunicacin usando el MODBUS, el maestro enva
los mensajes y el respectivo esclavo los responde.
Cada esclavo debe tener una nica direccin, as el maestro sabe con quin se debe comunicar. Vea
la animacin siguiente, observe cmo funciona el envi de mensajes entre el maestro y el esclavo
tome en cuenta lo siguiente:

Cada esclavo tiene su propia direccin, que puede ir desde 1 hasta 247.
El maestro siempre inicia la comunicacin enviando un paquete de informacin bien
estructurado a todos los esclavos, entre otras muchas cosas en la informacin se incluye el
nmero del esclavo.
El esclavo elegido responde, enviando lo que se le pide por medio tambin de un paquete
de informacin bien estructurado.

Envio de seal de maestro

Respuesta de esclavo

Representacin de datos en MODBUS


El protocolo MODBUS usa el concepto de tablas de datos para almacenar la informacin en un
esclavo, una tabla de datos no es ms que un bloque de memoria usado para almacenar datos en el
esclavo, las tablas de datos que usa en MODUS son cuatro y se muestran en la siguiente tabla:
Direccin MODBUS

Direccin Usada en Nombre de la Tabla de Datos


el protocolo

0000 9998

Output Coils (Lectura/escritura)

10001 - 19999

0000 9998

Inputs Contact (Lectura)

30000 - 39999

0000 9998

Inputs Registers (Lectura)

40001 - 49999

0000 9998

Holding Registers (Lectura/Escritura)

- 9999

Observe que hay dos direcciones, una es usada para diferenciar entre las tablas de datos, la
llamamos direccin MODBUS y la otra es la direccin usada en la comunicacin entre el maestro y
el esclavo, est es la direccin usada en la trama o paquetes de datos enviados entre maestros y
esclavos, en otras lecciones se hablar ms de estas direcciones para que queden ms claros estos
conceptos. Por lo pronto solo entreramos en detalle sobre dos elementos del MODBUS, los coils y
los regstros Holding.
Output Coils
En MODBUS un coil representa un valor booleano tpicamente usado para representar una salida,
solo hay dos estados para el coil el ON y el OFF. Por ejemplo la tarjeta de relevadores usa dos coils,
para activar o desactivar precisamente dos relevadores.
El coil entonces, puede verse como una celda o un bloquecito de memoria que me permite
almacenar el estado de un bit, que puede tener solo dos valores como se vio arriba, el ON o el OFF,
o en lgica binaria, un 1 o un 0, o ms cerca de la realidad fsica, tierra (0 Volts) y voltaje (5 Volts),
como el lector quiera verlo, eso s debe quedar claro que son solo dos valores por cada coil.
Hablemos de las direcciones, el coil segn la tabla de datos puede tener una direccin MODBUS, la
cual yo elijo y segn la tabla anterior, puede ser entre 1 y 9999 valores, por simplicidad, se puede
elegir el coil 1 y el coil 2 para, activar o desactivar, en nuestro caso, los relevadores de la tarjeta,
pero por supuesto que yo puedo elegir el coil 9998 y coil 9999, si yo as lo quisiera, cualquier
direccin en ese rango se puede usar sin ningn problema.

Envio de mensaje de maestro al esclavo 240 para activar las bobinas 1 y 2.

Envio de mensaje de confirmacin de encendido de bobina 1 y 2 de esclavo 240

Holding Registers
Los registros Holding, representan cantidades de 16 bits, se puede ver cada registro como un bloque
o celda de memoria, que es capaz de almacenar nmeros entre 0 y 65535.

Las direcciones usadas para los registros holding inician en la direccin 40001, pero puede usarse
cualquiera de las mencionadas en la tabla para los registros holding.
Estos registros son de lectura/escritura, es decir que el maestro puede hacer peticiones de
informacin para leer el dato que est almacenado, o puede enviar peticiones para escribirle un
valor al registro holding en el momento que se requiera.
En nuestras tarjetas usamos los registros Holding para almacenar el nmero de vueltas que va dando
un encoder debido al paso de gas LP, cuando se inicia un servicio a un cliente, el encoder gira al
pasar el gas, cada vuelta del encoder, hace que el registro holding 40006 aumenten en una unidad,
en el momento deseado el registro electrnico puede hacer peticiones de informacin para saber
exactamente, el valor de cada registro. Como se vio anteriormente, el maestro siempre inicia las
peticiones de informacin, el maestro puede pedir el valor de los registros holding y el esclavo
entonces responde justo con el valor almacenado en el instante de la peticin.

Cdigos de operacin o de funcin en MODBUS


Exactamente el cdigo de operacin que usa MODBUS para diferenciar entre una operacin y otra
es un nmero de un solo byte, recuerde, este nmero indica al esclavo qu funcin o que operacin
tiene que hacer, enseguida se muestran los cdigos de operacin para cada una de las tablas de
datos que maneja MODBUS y una pequea descripcin de lo que hace cada funcin.

Output Coils

Cdigo de operacin

Accin

Descripcin

01 (01 Hexadecimal)

Lectura de uno o ms coils

Sirve para leer que valor tiene el


coil (un 1 o un 0)

05 (05 Hexadecimal)

Escritura de un solo coil

Sirve para enviar un uno o un cero


al coil elegido

15 (0F Hexadecimal)

Escritura de mltiples coils

Envia unos o ceros a varios coil.

Cdigo de operacin

Accin

Descripcin

02 (02 Hex)

Lectura de los Input Contact

Lee los valores que tiene


almacenado el o los input
contact

Input Contact

Input Register

Cdigo de operacin

Accin

Descripcin

04 (04 Hex)

Lectura de los Input Registers

Lee los valores que tiene


almacenado el o los input
register

Cdigo de operacin

Accin

Descripcin

03 (03 Hex)

Lectura de los holding

Lee qu valor tiene almacenado


uno o varios Holding Registers

06 (06 Hex)

Escritura de un holding

Escribe un valor entre 0 65535 en


un solo holding

16 (10 Hex)

Escritura de mltiples holding

Escribe un valor entre 0 65535 en


varios holdings

Holding Registers

Descripcin de la trama de informacin enviada por el Maestro


A continuacin se detalla exactamente la trama de informacin o paquete de datos que enva el
maestro para que el esclavo realice alguna operacin, se muestra incluso un ejemplo especfico para
que el lector vea con gran detalle la informacin que se enva entre maestros y esclavos.

Ejemplo #1. Lectura de un solo coil del esclavo.


Supongamos que deseamos saber que trama de informacin tiene que enviar el maestro, para saber
el valor que tiene, especficamente, el coil #5 en un esclavo cuya direccin es la #240.
Primer Dato de la Trama: Numero de esclavo
El primer dato enviado en la trama de informacin MODBUS es la direccin o nmero del esclavo
como se vio en otros artculos, la informacin se enva a todos los esclavos, pero solo uno de ellos
responde, justo al nmero de esclavo indicado en la trama, el nmero de esclavo es entonces un
nmero entre 1 y 247, por lo que se requiere solo de un byte para almacenar ese dato.
Para nuestro ejemplo si se desea enviar un dato al esclavo nmero 240, la trama de informacin
inicia a formarse precisamente con el nmero de esclavo, que para nuestro caso es el nmero 240
(igual a F0 Hexadecimal).
Segundo Dato de la Trama: Cdigo de operacin o funcin MODBUS
El segundo dato, es el cdigo de operacin visto arriba, por supuesto que tambin es un nmero de
un solo byte, que como recordaremos, le indica al esclavo qu funcin o que operacin tiene que
hacer.

Para nuestro ejemplo, se pide conocer el valor del coil #5, esto es entonces una lectura de un solo
coil, por tanto el cdigo de operacin es obviamente el 01 (Hex), como se vio en las tablas de arriba.
As pues la trama de informacin o paquete de datos MODBUS va formndose como se observa en
la figura siguiente:

Tercer Dato: Direccin del primer coil que se desea leer


El tercer dato para el cdigo de funcin 01, es la direccin del coil que se desea leer, debe ser un
nmero de 2 bytes, pues la direccin es un nmero entre 0 y 9998, para nuestro ejemplo, se desea
leer el coil #5, pero, las direcciones de los coil inician en 0, recordemos esto reproduciendo una vez
ms la tabla de datos en la siguiente imagen, donde se marcan las direcciones usadas para la tabla
de datos de los Output Coil.

La direccin MODBUS es el coil que se elige por el usuario, para nuestro ejemplo es el coil #5, pero
la verdadera direccin que se usa en la trama est en la siguiente columna, que como se mencion
arriba es un nmero entre 0 y 9998, el lector debe observar que para el coil #1, le corresponde la
direccin 0, esto implica que se debe restar una unidad para conocer la direccin absoluta que debe
ir en la trama de informacin, as pues para nuestro ejemplo, el coil es el #5, entonces le corresponde
la direccin 4, que en hexadecimal y para dos bytes es: 0004, siendo este nmero el que se debe
enviar en la trama de informacin.

Cuarto Dato: Nmero de coils a leer


El cuarto dato para el cdigo de funcin 01, es el total de coils que se desean leer, la funcin 01,
puede leer desde uno hasta el total de coils (9998) que puede haber, es por eso que debe ser un
nmero de dos byte, para nuestro ejemplo, solo se pide el valor del coil #5, pero es posible saber
con un solo paquete de informacin, el valor de mltiples coils, como se ver ms adelante.
Entonces para nuestro ejemplo, el nmero de coils a leer es 1, en formato a dos byte es: 00001.
Entonces la trama de informacin va quedando as:

Quinto Dato: Cdigo de Deteccin de Error: CRC


El quinto y ltimo dato es el CRC (Cyclic Redundancy Check, Comprobacin de Redundancia cclica)
es un nmero de dos bytes que se usa para detectar errores, el maestro lo enva en su trama de
informacin, y el esclavo lo calcula matemticamente con los datos seriales que supuestamente
llegaron al esclavo, si los datos llegaron correctamente el CRC calculado por el esclavo debe ser igual
al CRC enviado por el maestro, si esto no es correcto existe un error de integridad de datos, por
ende el esclavo no est recibiendo la informacin correcta. Esta es una de las ventajas del MODBUS
pues utiliza esta deteccin de errores para comprobar que los datos recibidos sean los correctos.
Finalmente la trama que tiene que enviar serialmente el maestro en la red RS485, para el ejemplo
mostrado en esta seccin es mostrada en la siguiente imagen.

Respuesta del esclavo a la funcin 01


Cuando el maestro hace peticiones como las vistas en la seccin anterior el esclavo debe responder,
justo con la funcin que se le pide, que para el caso de la funcin 01, es el valor de los coils que se
enviaron en la trama de informacin.
Para el ejemplo que se est analizando, si se enva la peticin que se muestra en la imagen anterior,
el esclavo solo tiene dos opciones de respuesta, esto por que como recordar el lector, un coil solo
tiene dos valores o es un 1 o es un 0, las imgenes siguientes nos muestran estas dos respuestas
posibles. Pero la trama del esclavo inicia, como la que enva el maestro, con un byte para denotar el
# de esclavo, otro para denotar el # de funcin y los dems bytes ahora si nos dan la respuesta
pedida y termina con el cdigo CRC tambin.
Respuesta del esclavo al maestro suponiendo que el coil es 0

Respuesta del esclavo al maestro suponiendo que el coil es 1

Ejemplo #2. Lectura de varios coil del esclavo.


La misma funcin 01, sirve para conocer el estado de uno o muchos coil, este ejemplo muestra la
trama de informacin para leer el estado de varios coils.
Supongamos ahora que deseamos saber que trama de informacin tiene que enviar el maestro,
para saber el valor que tiene, especficamente, el coil #1, el #2, el #3, el #4, el #5, el #6, y el #7 en un
esclavo cuya direccin es la #240.
Peticin del maestro
La trama que de enviar el maestro es como la mostrada en la figura siguiente

El primer coil que se desea leer es el coil 1, por eso es que la direccin es la 0000, en total los coils a
leer son 7 por es que el cuarto byte es: 0007.
Respuesta del esclavo

Uff para esta peticin puede haber muchsimas respuestas, pues los esclavos pueden tener 0 o 1s,
vamos a suponer algunos ejemplos especficos por facilidad.
Supongamos que el coil #1=0, #2=1, #3=0, #4=1, #5=0, #6=1, #7 =1, para este caso la respuesta del
esclavo es como la mostrada en la imagen siguiente:

os aspectos a destacar, el nmero de byte, sigue siendo un 1, esto debido a que con un byte puedo
representar los 7 coils, si me hubieran pedido por ejemplo el estado de 15 coils, entonces ah si el
byte de datos seria 02, puesto que solo con dos byte de datos puedo mostrar el dato de 15 coil, por
otro lado observe el byte de datos 6A, este valor es asi porque es el valor que se obtiene de la
representacin del estado de cada uno de los coils, ms claro en esta imagen: