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 |
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.
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.
ResponderEliminarMuchas gracias por la corrección.
ResponderEliminartienes algunadireccion de mailo facebook? lamia es rangelangel@starmedia.com
EliminarPuedes escribirme a notasdeautomatizacion@gmail.com
EliminarUn saludo.
Como siempre Mr.GR muy buena explicacion y muy buen aporte
ResponderEliminarMuchas Gracias por compartirlo.
Saludos
J.Manuel
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?
ResponderEliminarGracias por compartir.
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.....
ResponderEliminarQue tal oye una pregunta si pudiste solucionar el problema???
EliminarExcelente aporte amigo, muchas gracias. Tengo una duda y te he mandado un correo a notasdeautomatizacion@gmail.com, espero me puedas responder.
ResponderEliminarSaludos.
Tienes algun ejemplo para enviar datos a una impresora?
ResponderEliminarSALUDO ESTO SE PUEDE APLICAR A UN 1769 ASCII/A O ES DIFERENTE
ResponderEliminar