¿Tienes un montón de fallas que te gustaría administrar y desplegar en una HMI?, esto es sencillo de hacer con la Instrucción FBC o File Bit Comparison, sigue leyendo y te enseñaré como configurar esta útil instrucción.

La instrucción FBC o File Bit Comparison o Comparación de bits de archivos, es utilizada en programación de PLC para detectar y administrar determinados bits en una serie de palabras que normalmente son de tipo DINT.

La idea detrás de la instrucción FBC es encontrar el cambio de un bit y transformarlo a un número, de tal manera que mediante una HMI se pueda seleccionar entre una serie de mensajes y así desplegar el mensaje correcto en la pantalla.

A continuación te explicaré detalladamente cada parte de esta instrucción y como ya es costumbre, te pondré un ejemplo práctico para que sea más fácil de comprender.

Partes de una Instrucción FBC

Para entender como se configura una Instrucción FBC es necesario conocer sus 3 partes principales; Configuración del Bloque, Estructura de comparación y Estructura del Resultado.

A continuación se muestran las partes de la Instrucción FBC:

partes de la instrucción FBC

Configuración del Bloque

La configuración del bloque, que en este caso sería la Instrucción FBC, consta de 9 parametros, mismos que se describen a continuación:

Source

El parámetro Source o fuente, es un arreglo con N número de palabras, las cuales deben ser doble entero (DINT).

En esta sección se coloca la información de donde se desea substraer el cambio de bits que usualmente son fallas o mensajes.

Reference

Para el parámetro Reference o Referencia se utiliza el mismo arreglo que en Source, ya que se busca comparar ambos arreglos para llegar a un resultado.

Por lo general en Reference se suele llenar con ceros y de esta manera, cualquier 1 mostrado en el Source se considerará una falla o un mensaje, más sin embargo no es una regla.

Result

Una vez más, el parámetro Result o Resultado utiliza el mismo arreglo de tipo DINT[] que en Reference y Source.

En este parametro se almacenan los números correspondientes a las diferencias entre Source y Reference.

Compare Control

En el parámetro Compare Control o Control de la Comparación, se agrega una tag de tipo CONTROL, la cual tiene la función de administrar los cambios que se realizan durante la comparación entre Source y Reference.

Lenght

El Lenght o Tamaño indica la cantidad de bits que deseas comparar entre el arreglo Source y Reference.

Position

En esta sección se indica la posición actual de la comparación de la instrucción FBC.

Result Control

Para el parámetro Result Control o Control de Resultado, al igual que en Compare Control, se utiliza una tag de tipo CONTROL, la cual tiene como objetivo gestionar el arreglo de resultados (Result).

Lenght

El Lenght o Tamaño de Result Control indica la cantidad de palabras de tipo DINT que se utilizarán para almacenar los resultados.

Position

En el parámetro Position de Result Control se muestra la palabra DINT actual del arreglo Result.

Estructura de Comparación

La instrucción FBC utiliza la estructura de comparación para gestionar el proceso de comparación. El tipo de dato de esta estructura de CONTROL y a su vez utiliza ciertos parámetros como se muestra en la siguiente imagen:

Estructura del control de comparación de una instrucción FBC

A continuación se describen los parámetros del tipo de dato CONTROL utilizados para la Estructura de Comparación de la Instrucción FBC.

Enable (.EN)

El Enable es de tipo BOOL y cuando su valor es 1 indica que la instrucción FBC esta habilitada.

Done (.DN)

El tipo de dato del parámetro Done es BOOL y cuando es activado indica que la instrucción FBC ha comparado el último bit entre los arreglos Source y Reference.

Found (.FD)

Para el parámetro Found se utiliza el tipo de dato BOOL y este es activado cada vez que la instrucción FBC almacena una diferencia entre el arreglo Source y Reference (operación uno a la vez) o después de haber almacenado todas las diferencias (operación todos por cada escaneo).

Inhibit (.IN)

En este parámetro el tipo de dato a utilizar es el BOOL e indica el tipo de operación que realizará la instrucción FBC:

Inhibit = 0 or All Mode

Al seleccionar la operación All Mode la instrucción FBC buscará todas las diferencias y las almacenará en el arreglo Result con solo un escaneo.

Inhibit = 1 or One Mismatch At A Time Mode

Para este tipo de operación la instrucción FBC buscará solo una diferencia y se detendrá, una vez que el Enable se desactive y active de nuevo buscará la siguiente diferencia.

Error (.ER)

El parámetro Error, el cual es de tipo BOOL, se activa cuando ya sea que el parámetro Position o Length son invalidos, en otras palabras superan el número máximo de bits que los arreglos Source y Reference pueden contar.

Length (.LEN)

Este parámetro es de tipo DINT e indica el número máximo de bits que se desea comparar, el cual no debe ser menor a 1 ni mayor al número máximo que pueden contar los arreglos Source y Reference.

Position (.POS)

En el parámetro Position, el cual es de tipo DINT, se muestra la posición actual de la comparación de la instrucción FBC.

Estructura del Resultado

En esta estructura se busca gestionar el proceso de almacenamiento de las diferencias entre el arreglo Source y Reference en el arreglo Result.

La estructura del Resultado es de tipo CONTROL y utiliza solo 3 parámetros, los cuales se muestran a continuación.

Done (.DN)

Para este parámetro se utiliza una tag de tipo BOOL, la cual es activada cuando el arreglo Result esta lleno.

Length (.LEN)

El parámetro Length, mismo que es de tipo DINT, identifica el número de posiciones a almacenar en el arreglo Result.

Position (.POS)

En el parámetro Position se utiliza una tag de tipo DINT, el cual identifica la posición actual en el arreglo Result.

Ejemplo de Instrucción FBC 1, Inhibit = 0

El objetivo de este ejercicio es configurar una Instrucción FBC para monitorear el cambio de 960 diferentes fallas en una estación, además de generar una lógica que permita sostener un numero de falla a la vez por 2 segundos.

Configuración de la Instrucción FBC

Para configurar la instrucción FBC es necesario generar 5 diferentes tags y aplicarlas como se muestra a continuación:

Configuración de una instrucción FBC

Para este ejemplo se utilizo una UDT personalizada para un mejor orden y mayor estandarización, sin embargo no es necesario ya que podrías utilizar tags directas.

Si tienes dudas sobre las UDT puedes consultar el articulo Crear UDT en Studio 5000 de varios niveles en 3 pasos, ahí se explica a detalle.

En este caso las tags Messages.Source, Messages.Ref y Messages.Result son arreglos de tipo DINT[30].

Las tags Messages.CmpControl y Messages.ResControl son de tipo CONTROL.

Al hacer la multiplicación del número de posición por el número de bits de cada palabra DINT obtenemos el número de bits que podemos compara o en otras palabras, el número de fallas (NF) que podemos monitorear con esta configuración:

NF = 30 * 32 = 960

Por lo anterior el parametro Length en el control de comparación debería de ser 960.

Por otro lado, al tener un arreglo Result de 30, se debería poner este valor en el Length del control del resultado.

Inicialización del arreglo Source y desactivación del Inhibit

Como se indico al inicio, este ejemplo utiliza el All Mode, por lo que el Inhibit debería estar desactivado, en este caso lo aremos con una OTU.

Por otro lado, es importante copiar los valores de las fallas al arreglo Messages.Source para tener siempre los valores actualizados en la Instrucción FBC.

Inicialización de las fallas

Almacenamiento cíclico de los resultados

Como recordarás, cuando se utiliza el All Mode el FBC almacena todos los resultados de golpe en el arreglo Result.

Esto pareciera ser muy sencillo, solo poner la instrucción directa y que simplemente este actualizando los valores, pero no es tan sencillo.

El problema radica en que por ejemplo, si tenemos las fallas 33 y 64 activadas y después la falla 64 es solucionada, lo que queremos ver es únicamente la falla 33, pero al estar sobrescribiendo en el mismo arreglo, seguiremos viendo las dos.

Sobrescritura en una instrucción FBC

Para evitar lo anterior es necesario restablecer el arreglo cada vez que la Instrucción FBC termina su búsqueda, el problema con esto es que en el proceso de escaneo podríamos perder información, por ello también deberíamos almacenar los valores en una variable auxilicar.

Almacenamiento ciclico en una instrucción FBC

Con esta lógica puedes ver que cada escaneo todos los valores del arreglo Message.Result son copiados al arreglo Message.ResultMSG y a continuación toda la información del arreglo Message.Result es eliminada.

Con esto se evita el problema que la información se sobrescriba y la actualización del arreglo Result ahora si sería la adecuada.

Lógica para la rotación de fallas

Para solucionar este problema hay un sin fin de métodos, en esta ocasión te mostraré una que me pareció sencilla.

Lógica para rotación de fallas

En esta ocasión utilice un ciclo continuo mediante el corrimiento del arreglo Messages.ResultMSG.

En la primer línea se busca inicializar la tag Messages.Aux a 0 siempre que su valor exceda el número 29, esto con la finalidad de reiniciar el ciclo y evitar que el arreglo supere el máximo, provocando una falla en el PLC.

Para la segunda línea se busca reiniciar la tag Messages.Aux cuando la posición actual del arreglo (mensaje) sea igual a 0, lo cual significa que se termino la lista de mensajes.

A continuación hay un switcheo, donde cuando la tag Messages.TimerMSG.DN es activada, el mensaje (Messages.MSG) es actualizado.

Ademas agregue el mensaje 999 para cuando no hay mensajes que mostrar, en otras palabras cuando el valor en el arreglo Result y la posición del auxiliar tienen un valor de 0.

Ejemplo de Instrucción FBC 2, Inhibit = 1

El objetivo de este ejercicio es similar al anterior, solo que esta vez se utilizará el modo One Mismatch At A Time Mode, por lo que la instrucción FBC buscará solo un resultado a la vez.

Al haber estudiado el caso anterior creo que ya debes tener las herramientas para desarrollar este segundo ejercicio, solo es cuestión de intentarlo y hacer las pruebas correspondientes.

Así que inténtalo y una vez resuelto o consideres que necesitas ayuda, puedes revisar la explicación detallada en el siguiente vídeo:

Conclusiones

Como habrás notado, esta instrucción es de suma utilidad y esta presente en prácticamente todos los estándares de programación.

Te recomiendo comiences a practicar con la instrucción FBC y te des cuenta de las diferentes situaciones y formas de programar, esto te dará la habilidad para utilizarla sin mucho problema cuando así lo necesites.

Te recuerdo que cuando utilizas ciclos como lo hicimos en el primer ejercicio puede ser algo peligros, ya que es posible mandar al PLC a falla cuando se realiza algún cambio equivocado y las consecuencias pueden ser graves en cuanto a producción y tiempo de desarrollo.

Por lo anterior trata de hacer múltiples practicas e intenta hacer falla la instrucción, con esto ganarás confianza para futuras implementaciones

Bueno, creo que sería todo por hoy, espero te haya gustado este artículo, no olvides compartir esta información

Recuerda que en caso te interese aprender con los cursos y Webinars del Programa Premium, no dudes en suscribirte hoy mismo.

Saludos!

Deja una respuesta