En un artículo anterior, analizamos qué es un bloque de funciones FB, cómo funciona en un programa de PLC y cómo crear y utilizar uno. En este artículo, hablaremos sobre las instancias de bloques de datos de diferentes tipos de bloques de funciones en Siemens Tia Portal y cuándo utilizar cada tipo.
Contenido:
- ¿Qué es un bloque de funciones FB?
- Diferentes opciones de instancias de datos.
- Instancia única.
- Instancia de parámetro.
- Instancia múltiple.
¿Qué es un bloque de funciones?
Un bloque de funciones o FB es simplemente un bloque que contiene lógica de código. Utiliza este FB para lograr una funcionalidad específica a través de los fragmentos de código escritos en su interior.
Al llamar a un bloque de funciones en su código, se le solicitará que asigne un bloque de datos también llamado instancia de datos para asociarlo con este FB, para guardar los valores de los parámetros del FB. No todos los parámetros dentro de un FB se guardan en la instancia de datos, pero llegaremos a eso más adelante.
Al llamar a un bloque de función, tiene 3 opciones diferentes para asociar una instancia de bloque de datos con esta llamada de función. Estas diferentes opciones dependerán de dónde esté llamando a su FB.
En pocas palabras, un FB de bloque de función es básicamente un FC de función con una base de datos de bloque de datos dedicada, este bloque de datos se utiliza para almacenar los valores de los parámetros del bloque de función.
Diferentes opciones para instancias de datos
Tenemos 3 opciones diferentes para una instancia de datos de un bloque de función, estas opciones son:
- Instancia única.
- Instancia de parámetro.
- Instancia múltiple.
Las tres instancias de datos de llamada diferentes provienen de los 3 métodos de llamada diferentes:
- Puede llamar a un FB de bloque de función dentro del OB1 principal, lo que le dará la opción de:
- Instancia única.
- Puede llamar al bloque de función FB dentro de una función FC, lo que le dará dos opciones:
- Instancia única
- Instancia de parámetro
- Puede llamar al bloque de función dentro de otro bloque de función, lo que le dará las tres opciones disponibles para crear una instancia de datos
- Instancia única
- Instancia de parámetro
- Varias instancias
Instancia de datos única
Primero, comencemos por crear un bloque de función FB, como mencionamos antes, creamos un bloque de función haciendo clic en agregar un nuevo bloque y eligiendo el tipo de bloque que queremos. Vea la imagen 1.
Imagen 1: creación de un bloque de función FB
Ahora, llamemos al FB reutilizable que creamos dentro de nuestro OB1 principal. Vea la imagen 2.
Imagen 2: llamada al FB dentro del OB1 principal
Como puede ver en la imagen anterior, al llamar a un FB dentro del OB1 principal, se le solicitará que asigne una instancia de datos para asociarla con esta llamada de FB. En este caso, habrá solo una opción, que es la instancia única.
Después de elegir una opción de instancia única, se creará un bloque de datos y se asociará con la llamada FB. Ver imagen 3.
Imagen 3: instancia única creada
La instancia única creada se utilizará para almacenar los valores de algunos de los parámetros FB. Como las entradas, salidas, In Out y parámetros estáticos.
No se almacenarán otros parámetros del FB, como la temperatura y las constantes. Ver imágenes 4 y 5.
Imagen 4: los datos se guardan dentro de la instancia de datos
Imagen 5: los datos se guardan desde el FB a la instancia de datos.
Ahora, creemos una lógica simple dentro del FB para ayudarnos a comprender mejor las instancias de datos. Esta lógica agregará un valor constante de 15 a una variable estática y luego moverá el resultado a la salida. Consulte la imagen 6.
Imagen 6: Cree una lógica simple
Ahora, vuelva al OB1 principal y observe cómo está ahora su llamada FB. Consulte la imagen 7.
Imagen 7: Actualice la llamada FB después de cada cambio
Cualquier cambio que realice en la lógica dentro del FB, dará como resultado la necesidad de actualizar la llamada del bloque de función, de modo que se puedan aplicar los cambios que realizó.
Puede actualizar la llamada del bloque haciendo clic derecho en la llamada FB y presionando la opción de actualización de llamada del bloque o recompilando su código PLC. Consulte la imagen 8.
Imagen 8: Actualización de la llamada FB
Después de actualizar la llamada del bloque, los cambios que realizó en el código FB se aplicarán y emplearán en la llamada del bloque. Como puede ver en la imagen 9.
El FB ahora espera que se proporcione una señal de entrada de tipo bool y el FB dará una salida de tipo int.
Imagen 9: las entradas y salidas ahora están asociadas con la llamada del FB
Simulemos nuestro código y veamos cómo se comportará el PLC. Vea la siguiente animación que muestra una simulación simple de la lógica del PLC hasta ahora.
Como puede ver en la animación, siempre que la señal de inicio sea VERDADERA, la función se ejecutará y la salida seguirá cambiando. Y una vez que la señal de inicio ya no esté disponible, la salida permanecerá en el último valor registrado.
El uso de la instancia de datos aquí es que los valores de la variable estática y la variable de salida se guardan dentro de la instancia única, por lo que cuando la señal de inicio regrese nuevamente, la función continuará desde los últimos valores registrados.
Nota muy importante
Nunca debe utilizar la misma instancia única para dos llamadas diferentes de un FB. Vea la siguiente animación.
Como puede ver en la animación, tenemos dos llamadas FB diferentes, pero ambas llamadas están asociadas con la misma instancia única, por lo que incluso cuando la señal start2 era FALSE, el valor Output2 estaba cambiando con Output1.
Como esperaría, el cambio en la instancia de datos de la primera llamada también se verá afectado en la segunda llamada porque tienen el mismo bloque de memoria. Vea la imagen 10.
Imagen 10: Nunca utilice la misma instancia de datos con diferentes llamadas FB
Si utilizó la misma instancia de datos con diferentes llamadas FB, entonces su bloque de función ya no es reutilizable. Incluso si los parámetros de entrada/salida son diferentes para cada llamada FB diferente. Como viste en el último video (animación), ambas llamadas tuvieron los mismos resultados, aunque la segunda llamada ni siquiera tiene una señal de entrada de habilitación.
Otra nota muy importante
Dijimos antes que si llamas a tu FB desde un FC de nivel superior, tendrás dos opciones para la instancia de datos asociada; estas opciones son la instancia única y la instancia de parámetro. Consulta la imagen 11.
Imagen 11: uso de una sola instancia con un FB llamado desde un FC
Si eso sucediera y llamas a un FB dentro de un FC, nunca deberías usar una sola instancia para tus FB. Para saber por qué, consulta la imagen 12
Imagen 12: llamar al FC de nivel superior más de una vez
Como ves en la imagen 12, cuando llamas al FC de nivel superior en tu lógica más de una vez, no se te pedirá que asignes un bloque de datos, porque los FC no necesitan uno.
Pero sabes que hay un FB llamado dentro del FC, este FB tiene una única instancia asociada a él. Entonces, ahora las 3 llamadas FC tienen la misma instancia de datos para la llamada FB. Entonces, tu función FC ya no es reutilizable.
¿Qué hacer? La mejor opción para cuando necesitas llamar a un FB dentro de un FC es usar la instancia de parámetro.
Instancia de parámetro
Como dijimos antes, si llamaste a un FB dentro de un FC, no deberías elegir la única instancia, sino que la instancia de parámetro es mejor para tus propósitos de reutilización.
Una instancia de parámetro guardará la instancia de datos del FB llamado en el área In Out de la interfaz del bloque FC. Permitiéndote ingresar una nueva instancia de datos para cada llamada FC. Vea las imágenes 13 y 14.
Imagen 13: Asignar una instancia de parámetro al llamar a un FB dentro de un FC
Imagen 14: Cada llamada a un FC necesitará una nueva instancia de datos
Como puede ver en la imagen anterior, siempre que llame al FC dentro de su programa, solicitará una instancia de datos para el FB reutilizable dentro del FC.
Pero, al usar este método, tendrá que crear la instancia de datos usted mismo. Vea la imagen 15.
Imagen 15: Crear una nueva instancia de datos
Para crear una nueva instancia de datos, haga lo mismo que para crear un FC o un FB, pero esta vez elija la opción DB. Y asegúrese de seleccionar el tipo de DB para que sea el mismo que el FB llamado.
Ahora, su FC se puede reutilizar tantas veces como desee, solo tiene que crear una instancia para cada llamada. Consulte la imagen 16.
Imagen 16: Asignar la base de datos a la llamada FC
Base de datos de instancias múltiples
Una base de datos de instancias múltiples simplemente significa que la base de datos del FB llamado se almacenará dentro de la base de datos del FB de llamada de nivel superior. Esta opción solo está disponible si llama a un FB desde otro FB.
Vamos a crear otro FB para usarlo como un FB de nivel superior.
Después de crear este HigherLevelFB, llámelo desde el OB1 principal y, por supuesto, la única opción de llamada será una sola instancia como se mostró antes. Consulte la imagen 17.
Imagen 17: Llame al HigherLevelFB desde el OB1 principal
Ahora, llame al ReutilizableFB desde el HigherLevelFB y elija la opción Multiinstancia. Consulte la imagen 18.
Imagen 18: Asignar una base de datos de múltiples instancias
Cuando elija la opción de múltiples instancias, la base de datos creada se almacenará dentro de los parámetros estáticos del FB que realiza la llamada. Consulte la imagen 19.
Imagen 19: Las instancias se guardan dentro de los parámetros estáticos
Puede llamar al FB reutilizable muchas veces; cada vez que lo llame, la instancia múltiple se almacenará dentro del parámetro estático. Consulte la imagen 20.
Imagen 20: Llamar al FB reutilizable muchas veces
Como puede ver, la instancia de datos del FB de nivel inferior se guardará dentro de la instancia de datos del FB de nivel superior. Es mejor para una mejor estructura del programa y una lógica fácil de leer.
Conclusión
La creación de bloques de funciones dentro de su código requerirá asociar un bloque de datos con cada llamada al FB que realice en su lógica. Este bloque de datos o también llamado instancia de datos tiene diferentes opciones según el tipo de bloque que esté llamando a tu FB.
Ten cuidado al elegir el tipo de instancia de datos, ya que algunas opciones pueden no ser adecuadas para tu caso como mostramos anteriormente. Y a veces esto puede generar problemas en tu lógica y tu función ya no podrá reutilizarse.
El uso de múltiples instancias puede ayudar a organizar mejor la estructura de su programa, ya que todos los FB llamados almacenarán sus bases de datos dentro del FB llamador principal.
Recommended Comments
There are no comments to display.
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now