Modbus Arduino Rs485

Embed Size (px)

Citation preview

  • 5/23/2018 Modbus Arduino Rs485

    1/19

    1

    TECNOLOGICO DE MONTERREYREDES INSDUSTRIALES

    DISEO E IMPLEMENTACIN DE UNA RED DE CAMPO CON LA CAPA FSICA EIA 485

    UTILIZANDO EL PROTOCOLO MODBUS.

    IntegrantesAna Pamela Castro Martin A01298181

    Daro Guamn Lozada A01298193

    Fecha de entrega28 de Octubre del 2013

    ObjetivoIntegrar una red de campo entre un maestro y dos esclavos utilizando la capa fsica EIA-

    485 para establecer la comunicacin utilizando el protocolo Modbus.

    Especificaciones Conversor USB- RS 485 Conversor TTL RS 485 Conversor TTL RS485 RS232 Plataforma Raspberry pi 2 Plataforma Arduinos Decimal

    DescripcinLa red de campo que se logr implementar en el presente Proyecto utilizando el

    protocolo Modbus RTU cuenta con una plataforma Rasperry y dos Arduino que funciona

    como master y esclavos respectivamente, usan como medio de comunicacin la Interfaz

    RS-485 utilizando diferentes tipos de convertidores.

    Monterrey, 28 de octubre del 2013

  • 5/23/2018 Modbus Arduino Rs485

    2/19

    2

    INDICE

    1. Resumen: .............................................................................................................................................................................................. 3

    2. Identificacin del problema y justificacin: ....................................................................................................................... 3

    3. Objetivos: ............................................................................................................................................................................................. 3

    4. Metodologa ........................................................................................................................................................................................ 3

    5. Resultados ........................................................................................................................................................................................ 16

    6. Conclusiones .................................................................................................................................................................................... 16

    7. Referencias Bibliogrficas ........................................................................................................................................................ 16

    8. Anexos ................................................................................................................................................................................................ 17

  • 5/23/2018 Modbus Arduino Rs485

    3/19

    3

    1. Resumen:En el presente trabajo se muestra los objetivos, procedimiento, metodologa, resultados yconclusiones que se obtuvieron al disear e implementar una red de campo con unmaestro y dos esclavos utilizando el protocolo Modbus RTU con comunicacin punto a

    punto, y la capa fsica RS 485. Como maestro se utiliza una plataforma Raspberry conprogramacin en Python aprovechado la librera MinimalModbus y dos Arduinos comoesclavos utilizando la librera SimpleModbus. Para que la comunicacin sea posible en lared se deber tomar en cuenta muchos aspectos importantes como los parmetros deservicio, las funciones implementadas en cada disposicin y el hardware. Tambin semostrar el diseo e implementacin de tres conversores con la finalidad de poder obtenercompatibilidad entre seales digitales de diferente categora y para que sea posible queinteracten las entidades de la red.

    2.

    Identificacin del problema y justificacin:

    Como parte del curso de redes industriales es necesaria la integracin de los conocimientostericos con la prctica. Este proyecto nos sirve como base para entender elfuncionamiento y configuracin de una red industrial.El protocolo Modbus es utilizado en las redes de campo de gran cantidad de industrias, pararealizar el control procesos y monitoreo de variables por ser fcil de utilizar y acceso libreal mismo. En el mundo de las redes industriales se han desarrollado varios tipos deprotocolos y cada uno de estos con interfaces especficas. No todos los dispositivos comosensores y transmisores poseen la comunicacin que el protocolo requiere por lo que esnecesario la utilizacin de conversores adecuados.

    3. Objetivos: General

    Integrar una red de campo entre un maestro y dos esclavos utilizando la capafsica EIA-485 para establecer la comunicacin utilizando el protocolo Modbus.

    Especficos Disear e implementar 3 convertidores RS 485- TTl, RS 485 Rs232, RS 485

    USB. Investigar y recopilar informacin de las libreras que permiten implementar el

    protocolo Modbus sobre diferentes plataformas. Configurar la red de campo con los parmetros necesarios que requiere el

    protocolo Modbus RTU.

    4. Metodologa

  • 5/23/2018 Modbus Arduino Rs485

    4/19

    4

    El presente proyecto fue realizado diferentes etapas y pasos que se describen acontinuacin.

    DISEO E IMPLEMENTACIN DE LOS CONVERTIDORES RS485 RS 232, RS485 TTL Y RS 485 USB.

    1. En internet nos podemos encontrar diagramas muy tiles que nos pueden ayudar en eldiseo de convertidores. Los convertidores a usar en este proyecto tendrn control deflujo automtico de datos. La Figura 1nos muestra el circuito para esto:

    Figura 1.-Esquema de control de flujo automtico.

    Como se pude observar la idea de este circuito es que ponga a masa el pin enable detransmisin cuando en la lnea de datos tengamos 5 V, y que lo deje a 5V, habilitndolocuando caiga a cero.

    2. El circuito del paso anterior es el mismo que se debe implementar para obtener elconversor RS-485 - TTL. La figura 2 muestra el esquema de conexin y la tabla 1 la lista

    DISEO EIMPLEMENTACIN DELOS CONVERTIDORES

    PRUEBA DE LOSCONVERTIDORES

    DESCARGA DELIBRERIAS EN LAS

    PLATAFORMAS.

    PROGRAMACIN YCONFIGURACIN DE LA

    RED.

  • 5/23/2018 Modbus Arduino Rs485

    5/19

    5

    de elementos que se necesita para la implementacin. En el Anexo 1 y 2 se muestran ladistribucin de pines del MAX485 y del NE 555 respectivamente con informacinadicional que ser de mucha ayuda al armar el circuito.

    Figura 2.-Conversor TTL-RS485.

    Tabla 1.-Materiales para conversor RS485-TTL.CONVERSOR RS485 TTL

    Cant. Descripcin

    1 Max 4851 CI 5551 Diodo 1N40072 Capacitores cermicos 0.01 Uf1 Resistencia 3.9 K 1 Resistencia 120

    2 Resistencias 560 1 Terminal 21 Tira de espadines hembra2 Zcalos de 8 pines- 10 cm de cable UTP1 Placa tipo proto board de 3 x 3 cm.

    3. La figura 3 muestra el esquema de conexin para la implementacin del conversor RS485 RS 232 y la tabla 2 la lista de elementos que se necesita para la implementacin. Elanexo 1, 2 y 5 muestran la distribucin de pines del max 485, NE 555, max 232 coninformacin adicional til para la implementacin.

  • 5/23/2018 Modbus Arduino Rs485

    6/19

    6

    Figura 3.-Conversor RS232-RS485.

    Tabla 2.-Materiales para conversor RS485-RS232.CONVERSOR RS485 RS 232

    Cant. Descripcin

    1 Max 4851 CI 5551 Max 2321 Diodo 1N40072 Capacitores cermicos 0.01 uF4 Capacitores electroltico de 10 uF1 Resistencia 3.9 K 1 Resistencia 120 2 Resistencias 560 1 Interface RS 232 hembra a 90 grados1 Terminal 21 Tira de espadines hembra2 Zcalos de 8 pines- 10 cm de cable UTP1 Placa tipo proto board de 3 x 5 cm.

    4. A continuacin se muestra figura 4 donde se puede observar el esquema de conexinpara la implementacin del conversor RS 485 RS 232 y la tabla 3 la lista de elementosnecesarios. Desde el anexo 1 hasta el 3 se muestran una parte de la hoja deespecificaciones tcnicas del max 485, NE 555, FT232L con informacin adicional queser de mucha ayuda al armar el circuito. Tomar especial atencin en el anexo 4 dondeel fabricante del componente FT 232L muestra la aplicacin de este circuito integradopara la conexin con el shield del USB.

  • 5/23/2018 Modbus Arduino Rs485

    7/19

    7

    Figura 4.-Conversor USB-RS485.

    Tabla 3.-Materiales para conversor RS485-USB.CONVERSOR RS485 USB

    Cant. Descripcin

    1 Max 4851 Circuito Integrado NE555

    1 Circuito Integrado FT 232 L1 Diodo 1N40072 Capacitores cermicos 0.01 uF1 Resistencia 3.9 K 1 Resistencia 120 2 Resistencias 560 1 Interface USB hembra1 Terminal 21 Tira de espadines hembra2 Zcalos de 8 pines- 10 cm de cable UTP

    1 Placa tipo proto board de 3 x 6 cm.

    5. El circuito integrado FT 232 L es un componente de montaje superficial no ser posiblecolocarlo en un protoboard por lo que tendremos que adecuarlo. Para lo cual usaremoscable muy fino llamado wire - wrap, espadines machos y una placa tipo proto board. Esnecesario ser muy pacientes y precisos al soldar y no daar el componente con el calor.Siguiendo estos consejos finalmente el CI FT232RL quedar como se muestra la figura 5.

  • 5/23/2018 Modbus Arduino Rs485

    8/19

    8

    Figura 5.-CI FT232RL.

    6. Una vez que hemos comprado todos los elementos necesarios para los convertidores eshora de armarlos primeramente en el protoboard para poder asegurar elfuncionamiento de cada uno.

    PRUEBA DE LOS CONVERTIDORES.

    7. Usando un terminal serial del software Microcode Studio (figura 7) y un cable USB a RS232 (figura 6). Se prueba cada convertidor de la siguiente manera:

    Figura 6.-Conversor RS232-USB.

    Figura 7.-Terminal Serial de Microcode.

    Para comprobar el correcto funcionamiento de los convertidores conectamos en cascada elconversor USB-R485 con RS485-RS232, seguidamente conectamos la interfaz serial con el

  • 5/23/2018 Modbus Arduino Rs485

    9/19

    9

    conversor RS232-USB para poder conectarlo a la computadora, seguidamente enviamoscaracteres por la terminal serial de microcode y tenemos que obtener los mismoscaracteres del otro lado, si es as los convertidores funcionan correctamente; Repetir elmismo procedimiento con el conversor TTL-RS485.

    8. Tambin es posible probar el funcionamiento de los convertidores implementando elprotocolo Modbus.

    Descargar un simulador de maestro: Modbus Tester (figura 8) en el siguientelink.http://www.modbus.pl/node/10

    Descargar en otra PC un simulador de esclavos: Modbus Slave (figura 9) en elsiguiente link.http://www.modbustools.com/modbus_slave.asp

    Figura 8.-Interfaz Grfica Modbus Tester.

    Figura 9.-Interfaz Grfica Modbus Slave.

    http://www.modbus.pl/node/10http://www.modbus.pl/node/10http://www.modbus.pl/node/10http://www.modbustools.com/modbus_slave.asphttp://www.modbustools.com/modbus_slave.asphttp://www.modbustools.com/modbus_slave.asphttp://www.modbustools.com/modbus_slave.asphttp://www.modbus.pl/node/10
  • 5/23/2018 Modbus Arduino Rs485

    10/19

    10

    9. Una vez que hemos comprobado el funcionamiento de cada convertidor, es momentode soldar, para esto necesitamos algunas herramientas y equipos especiales como losque se encuentran en la figura 10 (cautn, estao, pinzas de corte, pasta para soldar yuna esponja) para que sea un trabajo sencillo y no tedioso.

    Figura 10.-Materiales y herramientas para soldar.

    10.

    Ser ordenados y cuidadosos al soldar los elementos siguiendo el esquema de cadaconvertidor. Las figuras 11, 12 y 13 muestran los convertidores ya implementados:

    Figura 11.-Conversor TTL-RS485.

    Figura 12.-Conversor RS232-RS485.

    Figura 13.-Conversor USB-RS485.

  • 5/23/2018 Modbus Arduino Rs485

    11/19

    11

    DESCARGA DE LIBRERIAS EN LAS PLATAFORMAS.

    11. Para la plataforma Rapberry que ser el maestro de la red se usar el lenguaje deprogramacin de Python. Para descargar esta librera la Raspberry debe tener acceso ainternet. Escribir los siguientes comandos en la consola y esperar que se complete la

    instalacin:

    sudo pip install -U pyserial

    sudo pip install -U minimalmodbus

    12. Dos Arduinos diecimal sern los esclavos de la red. Se descarga la librera deSimpleModbusSlave de la siguiente manera :

    Ingresar al siguiente linkhttps://code.google.com/p/simple-modbus/ En la pestaa Dowland descargamos el archivoSimpleModbusSlaveV7.zip Lo descomprimimos y copiamos su contenido en la carpeta de las libreras del

    Software Arduino.(Simple-modbus)

    PROGRAMACIN Y CONFIGURACIN DE LA RED.

    13. A continuacin se presenta la programacin realizada en un script de python en laraspberry.

    #!/usr/bin/env python

    # Librerias utilizadas

    import minimalmodbus

    import time

    print " PROYECTO DE REDES INDUSTRIALES"

    print "Por: Pame y Dario"

    while 1:

    print "INGRESE LA DIRECCION DEL ESCLAVO 1 o 2"

    # Direccion del Esclavo

    a=input()

    if a==1 or a==2:

    # Configuracion de los Parametros de servicio con la direccin del esclavo

    esclavo=minimalmodbus.Instrument('/dev/ttyUSB0',a)

    esclavo.serial.baudrate =9600

    esclavo.serial.bytesize =8

    esclavo.serial.stopbits =2

    esclavo.serial.timeout =1

    print "Para escribir: E Para leer: L"

    c=raw_input()

    if c=="L":print " INGRESE LA DIRECCION DE REGISTRO 0-9"

    https://code.google.com/p/simple-modbus/https://code.google.com/p/simple-modbus/https://code.google.com/p/simple-modbus/https://code.google.com/p/simple-modbus/downloads/detail?name=SimpleModbusSlaveV7.ziphttps://code.google.com/p/simple-modbus/downloads/detail?name=SimpleModbusSlaveV7.ziphttps://code.google.com/p/simple-modbus/
  • 5/23/2018 Modbus Arduino Rs485

    12/19

    12

    b=input()

    e=input("Cuantos registros desea leer?")

    # Lectura de los registros del esclavo y direccin seleccionada

    valorobtenido=esclavo.read_registers(b,e,3)

    print " El valor obtenido del esclavo"

    print a

    print "de la direccion:"

    print b

    print " Es:"

    print valorobtenido

    if c=="E":

    print " INGRESE LA DIRECCION DE REGISTRO 0-9"

    b=input()

    print " INGRESE EL VALOR A ESCRIBIR"

    d=input()

    # Escritura sobre la direccin de los registros en el esclavo

    esclavo.write_register(b, d,0)

    if c!= "E" and c!="L":

    print ".........ERROR......"

    if a!=1 and a!=2:

    print "......ERROR......!!!"

    print "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    print "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    14. La programacin de los esclavos se presenta a continuacin.

    #include

    enum

    {

    // Aade o elimina registros sobre los que puedes leer o escribir.

    REG0,

    REG1,

    REG2,

    REG3,

    REG4,

    REG5,

    REG6,

    REG7,

    REG8,

    HOLDING_REGS_SIZE

    };

  • 5/23/2018 Modbus Arduino Rs485

    13/19

    13

    // Tipo de los registros (enteros).

    unsigned int holdingRegs[HOLDING_REGS_SIZE];

    void setup()

    {

    // Pin 3 como salida

    pinMode(3, OUTPUT);

    /* modbus_configure(&Serial, baudrate, byteFormat, ID, transmit enable pin, registers

    size, holding register array)

    */

    /*

    SERIAL_8N2: 1 start bit, 8 data bits, 2 stop bits

    SERIAL_8E1: 1 start bit, 8 data bits, 1 Even parity bit, 1 stop bit

    SERIAL_8O1: 1 start bit, 8 data bits, 1 Odd parity bit, 1 stop bit

    */

    modbus_configure(&Serial, 9600, SERIAL_8N2, 2, 2, 9, holdingRegs);

    // Asignacin de valores a los registros.

    holdingRegs[0] = 1;

    holdingRegs[1] = 2;

    holdingRegs[2] = 3;

    holdingRegs[3] = 4;

    holdingRegs[4] = 5;

    holdingRegs[5] = 6;

    holdingRegs[6] = 111;

    holdingRegs[7] = 111;

    holdingRegs[8] = 111;

    }

    void loop()

    {

    if (holdingRegs[1] == 1)

    {

    digitalWrite(3, HIGH);

    }

    else

    {

    digitalWrite(3, LOW);

    }

    // Lnea de cdigo encargada de actualizar los valores e implementar las funciones.

    modbus_update();

    }

    15. Como se pudo ver en el cdigo tanto el maestro como los esclavos deben serconfigurados con los mismos parmetros de servicio:

    Velocidad en baudios: 9600

  • 5/23/2018 Modbus Arduino Rs485

    14/19

    14

    1 start bit, 8 data bits, 2 stop bits16. Cambiar la direccin del esclavo antes de cargar la programacin en el segundo

    esclavo.17. En la figura 14 se puede ver la conexin fsica de la red. No olvidar que la tierra en

    todos los circuitos y plataformas debe estar cableada.

    Figura 14.-Esquema de conexin de la red.

    18. Compilamos y ejecutamos el programa en el maestro con los siguientes comandos:sudo python MAESTRO.py

    A continuacin se puede observar la ejecucin del programa cuando el maestro lee losregistros del esclavo. El programa es interactivo con el usuario (figura 15):

  • 5/23/2018 Modbus Arduino Rs485

    15/19

    15

    Figura 15.-Lectura de registros a travs del maestro.

    En la figura 16 se puede observar la ejecucin del programa cuando el usuario selecciona laopcin de escritura y se comprueba la funcin leyendo el valor del registro en el que seescribi.

    Figura 16.-Escritura de valores sobre los esclavos.

  • 5/23/2018 Modbus Arduino Rs485

    16/19

    16

    5. ResultadosLos valores que se lograron obtener al realizar pruebas ejecutando diferentes comandos enlas lneas de programacin del master se puede ver en la tabla 2.

    Tabla 2.-Valores obtenidos al leer y escribir.

    Funcin Empleada Valor Ledo(Master)

    Valor Escrito(Esclavo)

    Errores

    read_register(2,1) 0.1 -read_register(2,0) 10 -read_registers(2,5,3) [1,2,3,4] -write_register(7,35,0) 35 -read_register(7,0) 35 -

    Los resultados que se adquirieron desde el master como se ve en la tabla 1 carecen deerrores tanto en la escritura y lectura de los datos, debemos mencionar que lasfunciones efectuadas solo corresponden a holding register, puesto que la librera que seutiliz sobre la plataforma arduino implementa solo esta funcin.

    Los leds que se utiliz para verificar la escritura de los valores sobre las plataformasarduino se encendieron y apagaron de acuerdo a lo preestablecido ( Encendido:Valorde 1 en el registro 1; Apagado: Valores diferentes de 1 en el registro 1) lograndocomprobar el funcionamiento adecuado del protocolo sobre el esclavo 1 al igual que elesclavo 2.

    6. Conclusiones Gracias a los conceptos vistos en clase y la informacin investigada fue posible

    integrar una red de campo utilizando el protocolo modbus RTU.

    Implementar el protocolo utilizando libreras, es ms fcil que programar desdecero el protocolo sobre cualquier plataforma.

    Como trabajos futuros, las plataformas que trabajan como esclavos puedenestablecer comunicacin con cualquier aplicacin que implemente el protocolo

    modbus y funcione como master o con un servidor OPC.

    7. Referencias BibliogrficasBartolom, J. (2011). El protocolo MODBUS. Recuperado el 18 de Octubre de 2013, dehttp://www.tolaemon.com/docs/modbus.htm

    FTDI Chip. (2010). FT 232 R. Recuperado el 24 de Octubre de 2013, dehttp://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdf

  • 5/23/2018 Modbus Arduino Rs485

    17/19

    17

    Instruments, T. (Marzo de 2004). Max 232. Recuperado el 24 de Octubre de 2013, dehttp://www.ti.com/lit/ds/symlink/max232.pdf

    LVR. (s.f.). Rs 485. Recuperado el 18 de Octubre de 2013, dehttp://www.lvr.com/images/rs-485_circuits_f1.gif

    MAXIM. (1996). Max 485. Recuperado el 24 de Octubre de 2013, dehttp://ecee.colorado.edu/~mcclurel/max485ds.pdf

    Modbus-IDA.ORG. (Diciembre de 2006). MODBUS over Serial Line. Recuperado el 18 deOctubre de 2013, dehttp://www.modbus.com/docs/Modbus_over_serial_line_V1_02.pdf

    Simple-modbus. (s.f.). Recuperado el 18 de Octubre de 2013, de Modbus RTU librariesfor Arduino: https://code.google.com/p/simple-modbus/

    Texas Instruments. (Marzo de 2013). LM555. Recuperado el 24 de Octubre de 2013, dehttp://www.ti.com/lit/ds/symlink/lm555.pdf

    Wikipedia. (Mayo de 2013). RS-485. Recuperado el 18 de Octubre de 2013, dehttp://es.wikipedia.org/wiki/RS-485

    8.Anexos

    Anexo 1.-Parte Superior MAX485

  • 5/23/2018 Modbus Arduino Rs485

    18/19

    18

    Anexo 2.-Parte Superior Timer 555

    Anexo 3.-Distribucin de Pines y Esquema del CI FT232RL

    Anexo 4.-Esquema de conexin del CI FT232RL

  • 5/23/2018 Modbus Arduino Rs485

    19/19

    19

    Anexo 5.-Distribucin de Pines MAX232