13 de febrero de 2012

Probando el puerto serie integrado en los PLC Logix5000

Recientemente he estado probando la comunicación entre un PLC Rockwell CompactLogix L35E y un lector de códigos de barras por puerto serie RS-232 en modo ASCII. En esta entrada voy resumir la configuración del puerto serie y la programación necesaria.

Todos los PLC de la gama CompactLogix vienen con un puerto serie incorporado. Para controlarlo existen instrucciones específicas Logix5000 que simplifican mucho el trabajo y que vienen detalladas en el documento de Rockwell "Instrucciones generales de los controladores Logix5000" (en español, en formato PDF), en el capítulo 17. Para hacer la configuración del puerto, el documento de referencia es "Cadenas ASCII de controladores Logix5000" (también en español y en PDF).

Controlador CompactLogix L35E con puerto serie incorporado
El lector del código de barras determina que voy a leer cadenas con el carácter de terminación CR (Carry Return), representado como '$r' o también como el código ASCII 13; la longitud de la trama a recibir o enviar no será superior a 256 caracteres y los parámetros de comunicación serie serán 9600 baudios, 8 bits, sin paridad y un bit de parada.

Mis pruebas las he realizado con un CompactLogix L35E y también con un SoftLogix en una máquina virtual asignándole el puerto serie de mi portátil.

Para configurar el puerto serie del PLC vamos a las propiedades del controlador en mi proyecto de Logix5000, a la pestaña Serial Port:


En Mode selecciono User, e introduzco los valores de velocidad (Baud Rate), número de bits (Data Bits), Paridad y bits de parada. Ahora vamos a la pestaña User Protocol:


Especifico el protocolo ASCII, fijo el tamaño del buffer de lectura / escritura en 256 caracteres (bytes) y especifico como carácter de terminación '$r'.

Aplicamos y aceptamos, y con esto ya está toda la configuración necesaria para el puerto serie terminada. 

Por comodidad a la hora de manejar los datos recibidos por el puerto serie voy a declarar un tipo de datos STRING de 256 caracteres. Para ello voy al árbol de proyecto, en Data Types -> Strings, y creo el nuevo formato STRING256:


También voy a crear dos tipos de datos en Data Types -> User-Defined para agrupar las variables necesarias para acceder al puerto serie, para escritura y lectura respectivamente:



Y finalmente declaro dos tags con estos tipos de dato:


Ahora voy a la programación. Para el envío de datos por el puerto serie voy a usar la instrucción AWA, que  es la adecuada para enviar mensajes que siempre tienen el mismo carácter de terminación, en mi caso '$r'. La rutina Serie_RECEPCION se compone de dos renglones:


Para recibir datos voy a usar dos instrucciones, ABL para comprobar si en el buffer de recepción hay datos que contengan el carácter de terminación y ARL, que es adecuada para leer datos desde un dispositivo que envía una trama de longitud indeterminada. La rutina Serie_ENVIO se compone de cuatro renglones:



Transfiero el proyecto a mi PLC y lo paso modo Run, me aseguro que el lector de código de barras está encendido y conectado, y ya estoy listo para hacer pruebas. Para ello me pongo on-line y monitorizo los tags que he creado:


Para probar el envío de datos introduzco un comando que reconozca el lector de código de barras en la cadena SERIE_E.ESCRITURA (con su correspondiente carácter de terminación) y pongo a uno el bit SERIE_E.ORDEN_ESCRITURA. En cuanto la transmisión finalice este bit se pondrá a cero.

Para realizar una recepción simplemente tengo que activar el bit SERIE_L.ORDEN_LECTURA y en cuanto se ponga a cero sabré que en la cadena SERIE_L_LECTURA tendré una trama recibida por el puerto serie.

Si hubiese algún error de configuración o comunicación, en los datos de control del tipo SERIAL_PORT_CONTROL, en la variable ERROR tenemos un código que nos será muy útil para depurar por qué falla nuestra comunicación. El significado de los códigos de error se pueden consultar en la página 568 del documento Instrucciones generales de los controladores Logix5000.

El código de este proyecto para RSLogix5000 lo tienes aquí.

Hasta aquí este sencillo programa de prueba. Como conclusión puedo decir que trabajar con el puerto serie de los controladores CompactLogix es muy sencillo, con un funcionamiento impecable y siguiendo los manuales disponibles en la web de Rockwell no he tenido la más mínima complicación.

Como siempre, cualquier comentario será bienvenido.

11 comentarios:

  1. Hola, me encanta tu blog, muy útil. Solo comentarte una cosa: cuando muestras el código de SERIE_RECEPCIÓN, en el texto has escrito serie_envío. Si lo corriges quedará niquelado.

    ResponderEliminar
  2. Muchas gracias por la corrección.

    ResponderEliminar
    Respuestas
    1. tienes algunadireccion de mailo facebook? lamia es rangelangel@starmedia.com

      Eliminar
    2. Puedes escribirme a notasdeautomatizacion@gmail.com

      Un saludo.

      Eliminar
  3. Como siempre Mr.GR muy buena explicacion y muy buen aporte
    Muchas Gracias por compartirlo.
    Saludos
    J.Manuel

    ResponderEliminar
  4. Estupenda explicación, una cosa, creia que los Compact L35 y demás, se programaban desde RSLogix 500 ¿o es que con el 5000 tienes acceso a toda la gama?
    Gracias por compartir.

    ResponderEliminar
  5. Gran aporte... pero tengo una duda????? me encuentro incorporando un scaner en un compact logix L32E por el puerto rs232... anteriormente lo he hecho añadiendole un modulo pero nunca por este puerto y estoy teniendo problemas... descargue tu programa de prueba y le combie el contolador y se lo descargue y sigo sin optener lecturas.... tal ves me puedas ayudar.....

    ResponderEliminar
    Respuestas
    1. Que tal oye una pregunta si pudiste solucionar el problema???

      Eliminar
  6. Excelente aporte amigo, muchas gracias. Tengo una duda y te he mandado un correo a notasdeautomatizacion@gmail.com, espero me puedas responder.

    Saludos.

    ResponderEliminar
  7. Tienes algun ejemplo para enviar datos a una impresora?

    ResponderEliminar
  8. SALUDO ESTO SE PUEDE APLICAR A UN 1769 ASCII/A O ES DIFERENTE

    ResponderEliminar

Por favor, no pidas copias de programas comerciales, licencias o números de serie.