Filtrado de una señal analógica mediante una Función

Fecha de publicación
Cateogría del artículo Omron
Visualizaciones del artículo Leído 20005 veces

Con el de hoy finalizamos la posible solución que le hemos dado al ejercicio, ya que lo hemos resuelto en Siemens, Rockwell ,Schenieder y hoy con Omron en el software CX-Programmer. El ejercicio decia:

Se trata de realizar un FB que filtre una señal de entrada analógica de tipo WORD de la siguiente manera:

-Se activará el byte de marcas cíclicas por hardware y se elegirá el bit de marcas que permita un muestreo de la señal analógica de 1s

-El FB deberá tener una entrada de tipo BOOL (que será el bit de ciclo mencionado en el punto anterior) y una entrada de tipo WORD
(correspondiente a la señal analógica que se pretende muestrear)

-El FB tendrá una salida (de tipo REAL) que corresponderá, en cada instante de muestreo, a la media de la muestra actual capturada de la señal analógica junto con sus tres muestras anteriores. Todas ellas deberán irse almacenando en el DB de instancia asociado al FB. Por otro lado, se utilizarán las variables
temporales necesarias.

-El resultado que proporciona el FB (la media indicada) podrá declararse como salida o como variable estática.

 

Creamos un nuevo bloque de función y como lenguaje utilizaré Texto estructurado, porque se trata de aprovechar el cógido que ya habia creado

 

Filtrado_-00

 

Le damos el nombre que nos iterese, y en caso necesario definir las opciones que tiene por defecto, proteccion, comentarios ...

 

Filtrado_-01

 

Una vez creado esta es la interfaz que muestra, por una parte tenemos la declaración de las variables y por otro lado donde escribir el código

 

Filtrado_-02

 

Para definir las variables, seleccionas el menu correspondiente, entradas, Salidas ... Y botón derecho, Insertar Variable

 

Filtrado_-03

 

A la hora de declarar un Array, tenemos que darle al boton Avanzado y se nos abre otra ventana emergente donde seleccionar el tamaño del Array, empezando desde el 0, con lo cual 4, significa 0,1,2 y 3.

 

Filtrado_-04

 

Ya tenemos definidas al igual que hemos hecho en los otros lenguajes las variables internas, solo accesibles desde la función

 

Filtrado_-05

 

A su vez declaramos las variables de Entrada y las de Salida

 

Filtrado_-06

Filtrado_-07

 

Una vez definidas ya podemos escribir nuestro código, adaptamos el que teniamos y así es como queda, para una mejor visualización pulsa en la imgen

 

Filtrado_-08

 

Ya podemos compilar y si no hay ningún error ya podemos insertar nuestra función en la seccion principal y comprobar su funcionamiento, al compilar la función tenia una serie de advertencias de una posible perdida de datos en las conversiones de DINT_TO_REAL y efectivamente redondea, el único decimal que muestra es 0,5

 

Filtrado_-10

 

Una posible solución rápida que le he dado ha sido usar fuera de mi función la función 16 bit to Float FTL (452) y cambiar dentro de mi función para operar con Reales, con lo cual la salida de esta función será la entrada de datos de la que hemos creado. Ese ha sido el único inconveniente para reulizar el cógido que habiamos hecho.

 

Filtrado_-11

 

Conclusión, despues de haber intentado resolver este ejercicio, si usamos lenguaje estructurado facílmente podemos adaptar nuestro código a otros PLC, ya que la mayoria de todos ellos incorporan este lenguaje, como otro ejemplo mas, tambien podriamos resolverlo en CODESYS , y con lo cual con los automatas de ABB, ya que se basan en este último.

Un Saludo.

Escrito por Jose Manuel Luque / Técnico en Automatización Industrial

Mi Web PLC-HMI-SCADAS

 





Últimas descargas