Filtado de una señal analógica mediante una FB ( Function Block )
En este artículo vamos a dar una posible solución al ejercicio planteado por un miembro del foro, ya que hemos considerado que puede ser interesante. El ejercicio consistia en lo siguiente:
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.
El primer paso será configurar una marca de ciclo, ello lo hacemos en la configuración del hardware de nuestro proyecto, propiedades, Marca de ciclo. Hemos seleccionado que será la M100.0 .. 7
Dentro de este Byte, tenemos varias posibilidades de la Frecuencia / Periodo de la señal, para ello consultamos la ayuda, ya de deberemos seleccionar 1 segundo. El bit que nos interesara es el M100.5
Agregamos un nuevo bloque, para crear nuestro FB, le damos el nombre que nos interese y el lenguaje que utilizaremos, en este ejemplo se utilizara SCL
Al crear una nueva Función, debemos especificar los datos de Entrada, Salida, Temporales, Estaticos, etc... para la resolución de esté hemos utilizado los siguientes, aunque seguro que pueden variar , ya que dentro de la programación muchos caminos llevan a la misma solución.
Una vez declarado los datos, ya podemos implementar el código, aunque según vayamos necesitando podemos ir agregando o eliminando. El código es el siguiente, para una mejor visualizacion, pulsa sobre la imagen.
Con esto ya podemos utilizar y llamar a nuestra funcion desde el Bloque de Organización o en su defecto, donde nos interese, ya que una segunda parte era implementarlo en el OB35.
En la siguiente imagen hay dos llamadas, la primera de ella para comprobar su funcionamiento en el PLCSIM, ya que como marca tiene la entrada I0.0, le ponemos un Flanco positivo para que solamente se ejecute una vez por ciclo, de lo contrario se podria ejecutar mas de una vez y no cumpliria con lo estipulado.
En la segunda llamada a la función, ya se ha implementado la marca de ciclo, con ello ciclicamente cada segundo se iran registrando los datos dados por la señal de entrada y calculando la media con los anteriores registrados.
Y si nos interesa, podemos hacer la llamada en el OB32 que se ejecuta cada segundo o en el OB35 modificando el tiempo, ya que por defecto es de 100ms.
Un Saludo y espero que os sea de utilidad...
Escrito por Jose Manuel Luque / Técnico en Automatización Industrial
Mi Web PLC-HMI-SCADAS