Persistencia (Persistent)

Que es Persistencia y como se puede establecer en CODESYS?

Llamamos datos persistentes a los que mantienen sus valores incluso tras la descarga de una nueva aplicación o tras un reset frió (cold reset) del controlador.

CODESYS provee los siguientes tres mecanismos para conseguir la persistencia:

– Declaración de las variables VAR PERSISTENT en los POUs

– Declaración de las variables persistentes utilizando el Persistence Manager

Recetas

Hay otra posibilidad para mantener los datos de modo permanente: Utilizando las variables RETAIN. Estas al igual que las variables PERSISTENT mantienen sus valores tras un «Reset Caliente» (Warm Reset o fallo de alimentación), pero no al realizar una nueva transferencia de la aplicación, que únicamente pueden mantener su valor si son de tipo PERSISTENT. Realizando una declaración RETAIN + PERSISTENT las propiedades de remanencia se pueden combinar, aunque las variables declaradas con «VAR PERSISTENT» siempre se tratan como «VAR RETAIN PERSISTENT» o «VAR PERSISTENT RETAIN». De este modo obtenemos unos datos que únicamente se pueden reinicializar cuando el controlador se resetea a su estado de origen «Reset Origin».

En el siguiente fichero se muestra el proceso de declaracion de las variables Persistent ▶ Fichero de ampliacion

Leer másPersistencia (Persistent)

Comunicación FINS con un PLC Omron®

Hemos implementado la comunicación entre un equipo EC2250 de BergHof y un CJM2-CPU31 utilizando el protocolo FINS. Nuestras necesidades son leer el contenido de una área de memoria del PLC.

Los servicios de comunicación FINS habilitan el acceso como cliente al PLC, para realizar operaciones de lectura y escritura de las áreas de memoria del PLC servidor sin necesidad de realizar ninguna programación especifica, en el. Las unidades Ethernet utilizan un puerto UDP/IP dedicado para los servicios de las comunicaciones FINS.

Los datos se envian y reciben como paquetes UDP sobre la red Ethernet. Y el puerto utilizado para la comunicación es el 9600, por defecto.

Existe una descripción detallada del protocolo FINS en la documentación del fabricante.

En este protocolo deberemos de enviar una trama de petición de datos al PLC servidor, en este caso el CJM2, y el nos contestara con los datos solicitados.

En el programa simplemente hemos abierto la comunicación con el PLC, utilizando la función «UDP_Peer«. Y posteriormente se habilita la función de recepción en modo continuo «UDP_Receive«, para cuando llegan tramas de datos decodificar el contenido. Y activamos la función de transferencia cuando queremos solicitar una lectura del área de memoria.

El ejemplo se ha programado de modo que tras recibir la contestación se ejecuta una nueva consulta. También se observa en el ejemplo que se ha implementado el protocolo FINS como un FB de modo que en el programa principal únicamente deberemos de personalizar la petición a nuestras necesidades.

Leer másComunicación FINS con un PLC Omron®

Comunicacion abierta Ethernet

Utilizando la librería «CAANet Base Services» podemos implementar comunicaciones UDP y TCP de modo fácil y sencillo. La secuencia a realizar en ambos casos es la siguiente:

  1. Abrir la comunicación. Para ello deberemos de conocer la dirección IP del equipo remoto y el puerto. Para la comunicación TCP utilizaremos la función TCP_Client y para la comunicación UDP la función UDP_Peer.
  2.  Activamos la recepción de los datos mediante las funciones TCP_Read para la comunicación TCP y UDP_Receive para la comunicación UDP. En el momento que lleguen los datos la función nos retornara un array con ellos y nos indicara la cantidad recibida.
  3. Podremos realiza la transferencia de datos mediante las funciones TCP_Write y UPD_Send. Realizara la transferencia de los datos contenidos en un buffer.

Las pruebas de la comunicación TCP se han realizado utilizando el programa TCPClientServer.

Comparativa entre UDP y TCP

UDP : proporciona un nivel de transporte no fiable de datagramas, ya que apenas añade la información necesaria para la comunicación extremo a extremo al paquete que envía al nivel inferior. Lo utilizan aplicaciones como NFS (Network File System) y RCP (comando para copiar ficheros entre ordenadores remotos), pero sobre todo se emplea en tareas de control y en la transmisión de audio y vídeo a través de una red. No introduce retardos para establecer una conexión, no mantiene estado de conexión alguno y no realiza seguimiento de estos parámetros. Así, un servidor dedicado a una aplicación particular puede soportar más clientes activos cuando la aplicación corre sobre UDP en lugar de sobre TCP.

TCP: es el protocolo que proporciona un transporte fiable de flujo de bits entre aplicaciones. Está pensado para poder enviar grandes cantidades de información de forma fiable, liberando al programador de la dificultad de gestionar la fiabilidad de la conexión (retransmisiones, pérdida de paquetes, orden en el que llegan los paquetes, duplicados de paquetes…) que gestiona el propio protocolo. Pero la complejidad de la gestión de la fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que añadir bastante información a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tamaño máximo, cuanta más información añada el protocolo para su gestión, menos información que proviene de la aplicación podrá contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada segmento, mientras que UDP solo añade 8 bytes). Por eso, cuando es más importante la velocidad que la fiabilidad, se utiliza UDP. En cambio, TCP asegura la recepción en destino de la información para transmitir.

Fuente Wikipedia. http://es.wikipedia.org/wiki/User_Datagram_Protocol

Leer másComunicacion abierta Ethernet

Formatear cadenas de números

En muchas ocasiones necesitaremos formatear una cadena numérica, creando la cadena con un numero de cifras establecido. Un claro ejemplo lo encontraremos en el programa que mostramos anteriormente de almacenamiento de datos sobre la SD. El fichero de almacenamiento se crea con las cifras de la fecha actual. Para crear unos nombres con el mismo formato, los días y meses inferiores a 10 deberán de insertarse en la cadena con un 0 inicial. Por ejemplo en lugar de ‘1_1_2014‘ crearemos ‘01_01_2014‘.
Podremos utilizar la función DWORD_TO_STRF de la librería OSCAT BASIC.
Para realizar el formateado de la cadena, llamamos a la función con el numero a convertir en cadena y el tamaño de la cadena a crear.

Por ejemplo: DWORD_TO_STRF(dia_actual, 2) = ’05’

Nota: Tened en cuenta que la misma función nos permite recortar, limitar, la cadena a generar.

Leer másFormatear cadenas de números

Detección de SD insertada en slot (PLCs EC2xxx)

Si utilizamos la memoria SD como sistema de almacenamiento externo deberemos de poder conocer cuando esta insertada en el slot y cuando no. Para ello podemos utilizar la función «FS_DiskFree» con el directorio ‘/media/sd’ como parámetro. Esta función nos retorna el tamaño del disco, por lo que retornara 0 cuando la SD no esta insertada o cuando esta llena.
Adjunto una exportación de un FB realizado para tal función.
Para la gestión de almacenamiento sobre la unidad de USB existen funciones dedicas que trataremos posteriormente.

Fichero exportado FUN_EspacioSD

Leer másDetección de SD insertada en slot (PLCs EC2xxx)

CoDeSys V3: Lectura por el puerto serie

En este caso comparto un programa de ejemplo de lectura de datos por el puerto serie. Esperamos la llegada de datos ASCII por uno de los puertos serie del equipo, para posteriormente procesarlos y extraer los datos que necesitamos.

Utilizando este sistema algunos de nuestros clientes han realizado programas de aplicación para leer datos de un lector de códigos de barras, de una bascula de pesaje, e incluso para recibir los datos de una clasificación de azulejos que utilizaba un protocolo HOSTLINK® de OMRON®.

PROYECTO DE EJEMPLO 1Comunicacion ASCII Target_EC1000 V1_3

Leer másCoDeSys V3: Lectura por el puerto serie

CoDeSys V3: Escritura de ficheros de texto

Mediante tres programas ejemplos se muestran unas funciones básicas para escribir en ficheros de texto. El primero de los ejemplos simplemente escribe una cadena de texto, en el segundo se añade una variable de programa en los datos almacenados y por ultimo extraemos la fecha y hora del sistema y la insertamos al inicio del fichero junto a los datos de un contador, utilizando una separación de datos mediante el carácter «;». Esto genera un fichero de tipo .CSV, que podremos abrir desde diversos programas de análisis de datos, por ejemplo MS® EXCEL. Se puede decir que esta seria la base para crear un sistema de control de producción, de registro de eventos, de alarmas, etc…

En el ejemplo el fichero se crea en el disco duro del equipo, pero según el equipo HW utilizado podremos crear el fichero sobre una memoria externa de tipo USB, SD, uSD, etc..

PROYECTO DE EJEMPLO 1Lectura Escritura Fichero

PROYECTO DE EJEMPLO 2Lectura Escritura Fichero V2

PROYECTO DE EJEMPLO 3Lectura Escritura Fichero V3

Leer másCoDeSys V3: Escritura de ficheros de texto

CoDeSys V3: Funciones PWM

Las dos funciones que vamos a comentar podemos encontrarlas en la liberia Oscat, de libre distribución.

Se trata de dos funciones que generan pulsos de amplitud modulada a una frecuencia establecida. Ambas funciones realizan la misma función pero en cada una de ellas se define la amplitud de los pulsos con un parámetro distinto.

La función PWM_PW define la amplitud del puso mediante el parametro PW, que define el tiempo que dura el pulso desde el inicio del mismo, en estado activo.

La función PWM_DC define la amplitud del pulso mediante un parametro DC que establece el ratio o la relación entre el tiempo activo y el tiempo no activo de la señal. Que podemos calcular como TON/TOFF.

PROYECTO DE EJEMPLO : Test PWM_V2_3.5SP4P3

Leer másCoDeSys V3: Funciones PWM

CoDeSys V3: Función «Trace» (osciloscopio digital)

En el documento adjunto se describen los pasos para crear un objeto traza. Este objeto permite capturar los valores de una variable del PLC en un intervalo de tiempo, un funcionamiento similar al de un osciloscopio. En este ejemplo básico se muestra como crear el objeto y añadir un par de variables para visualizarlas desde el entorno de CodeSys.
En posteriores entradas mostrare como utilizar este objeto para crear una visualización y algunas funciones avanzadas que podemos realizar con el.
Adjunto un link al proyecto exportado por si queréis echarle un vistazo.
En la siguiente entrada del blog explicare las funciones PWM y PWM_DC (moduladores PWM de señal) utilizadas en el ejemplo.

DOCUMENTO ADJUNTO: Osciloscopio en codesys

PROYECTO DE EJEMPLO : Test PWM_V2_3.5SP4P3

Leer másCoDeSys V3: Función «Trace» (osciloscopio digital)