17 de febrero de 2010

Comunicación serie en un PLC Beckhoff CX9010 (interfaz CX9010-N030)

Si necesitamos implementar comunicación serie RS-232 en un PLC CX90x0 de Beckhoff tenemos dos opciones: añadir una interfaz CX90x0-N030, que trae dos puertos RS232 con conector SUB-D, o la opción de una tarjeta EL6001 de terminales enchufables. En mi caso he optado por la primera opción; estas notas describen como configurar y programar una comunicación serie con una interfaz CX9010-N030.

El primer paso será incluir el puerto serie en la configuración, así que abrimos el TwinCAT System Manager y vamos en nuestro proyecto a 'Configuración E/S -> Dispositivos de E/S' con el botón derecho del ratón y seleccionamos 'Agregar dispositivo...'


En la ventana de 'Insertar dispositivo de E/S' seleccionamos 'Micelánea -> Puerto de comunicación serie' y pulsamos OK.


En el árbol de dispositivos aparece un puerto serie que será el COM1. Si necesitamos también el puerto COM2 repetiremos la operación.


Vamos a la pestaña 'Serial Port' y marcamos el puerto serie que nos interese, en mi caso 'COM 1 (Puerto 3F8)'.


En la pestaña 'Propiedad comunicación' debemos marcar 'Modo de puerto COM' y 'Modo KL6xx1 (Emulación)'. Es importante dejar los bytes de datos en 64 y el 'Tamaño del búfer int.' en 4096 (que son los parámetros por defecto). Debajo configuraremos los parámetros típicos de una comunicación serie: velocidad, paridad, bit de parada, bits de datos, etc.


Ahora tenemos que ir al TwinCAT PLC Control. Aquí lo primero que hay que hacer es incluir la biblioteca COMlibV2.lib, que previamente hemos instalado en nuestro sistema. Se puede bajar de aquí, pero nos pedirá un número de serie que nuestro distribuidor Beckhoff amablemente nos proporcionará (previo pago, claro está).

En la pestaña 'Resources' seleccionamos 'Library Manager' para ver las bibliotecas que tenemos instaladas (por defecto sólo aparece la 'Standard library'). Vamos al menú 'Insert' y seleccionamos 'Additional library...'


Buscamos el fichero 'COMlibV2.lib' y aceptamos.


Ya tenemos nuestra biblioteca insertada y podemos ver todas las funciones que trae.


A continuación hay que declarar las variables de entrada y salida para acceder al puerto serie, yo las he declarado como variables globales:

VAR_GLOBAL

KL6DatosIN AT %I*: PCCOMINDATA;
Kl6DatosOUT AT %Q*: PCCOMOUTDATA;

END_VAR

Compilamos el programa para que acepte las variables recién declaradas y vamos al TwinCAT System Manager, y dentro del puerto serie vinculamos sus entradas y salidas con nuestras variables globales:


Para vincular todos los elementos de una tabla asegúrate de marcar dentro del recuadro 'Offsets' la casilla 'Continua'.


Repetimos la misma operación para las salidas y ya habremos finalizado la configuración de nuestro puerto serie, ahora queda ver la programación.

Necesitamos un par de variables más que harán la función de buffer de comunicación, una para el envío y otra para la recepción:

VAR

MiBufferTX: ComBuffer;
MiBufferRX: ComBuffer;

END_VAR

En cada ciclo debemos hacer una llamada al FB de comunicación SerialLineControl:


Para enviar o recibir una cadena de caracteres usaremos las funciones SendString y ReceiveString:



Si necesitamos resetear el puerto serie tenemos la función ComReset:


Básicamente, con estas funciones he logrado implementar mi comunicación serie RS-232. Si el puerto serie no funciona revisa los parámetros de comunicación serie y también los vínculos entre variables en el System Manager, me ocurrió que no los tenía bien asignados y me dio algo de guerra.

Como siempre cualquier comentario será bien recibido.

1 comentario:

  1. Exelente articulo en caso de que lo llegue a Utilizar una Duda si tengo la Comunicaccion con VB.net no puedo acceder al puerto desde vb.net

    ResponderEliminar

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