Bloques funcionales para la programación de controladores

4 November 2020 11:31 PM por Johautt Hernández

Ciudad inteligente

En el mundo de la programación de controladores existen diferentes estrategias de programación, cuya finalidad es crear instrucciones secuenciales que permiten al controlador interpretar entradas de una determinada manera, procesar las mismas, y traducirlas en salidas que energizan y regulan el funcionamiento de máquinas específicas o procesos complejos.

La programación en este campo no ha evolucionado mucho, posiblemente debido a que no es una actividad muy común el programar controladores, por lo que no es muy popular. Y por lo tanto no se ha presentado poca innovación en este sector. Pienso que algunas de las cosas que lo hace poco popular son los costos de los equipos y las especificaciones técnicas y de seguridad de este sector, lo cual hacen de este un tema muy excluyente, al cuál sólo tiene acceso personal técnico muy especializado y algunas veces con amplia experiencia.

Estas estrategias de programación nos lleva a describir dos tipos principales de lenguaje:

Los lenguajes de texto, los cuales, lamentablemente, no han avanzado mucho en el campo de la programación de controladores, muy al contrario de lo que han avanzado en la programación de las computadoras y servidores. Por lo cuál, en la programación de controladores, estos suelen ser considerados como lenguajes de bajo nivel, aún cuando en otros campos se suelen encontrar lenguajes de texto de muy alto nivel y que facilitan enormemente el trabajo al programador, incluso más que los lenguajes gráficos con los que se trabaja en la programación de controladores. Por ello, se sigue viendo en este sector lenguajes de programación tales que parecen secuencias de programación parecidas al lenguaje ensamblador, por lo que son lenguajes más complejos, y actualmente de poco uso en el sector. Algunos de los subtipos de lenguajes que podemos encontrar en esta categoría son:

  • Lista de instrucciones, muy parecidas al lenguaje ensamblador, actualmente es poco usado, y solo para aplicaciones pequeñas, debido a su alto nivel de complejidad.

  • Texto estructurado, el cual es muy parecido al lenguaje PASCAL. Dispone de toda la funcionalidad necesaria para realizar operaciones más complejas. Pero aún así, no llega a cubrir las expectativas de eficiencia de programación que sí se cubren actualmente en la industria del software informático.

Los lenguajes gráficos, considerados en la industria como “lenguajes de alto nivel”. Los mismos tienen una interfaz gráfica, la cual facilita su programación, al interconectar unos elementos con otros de una manera establecida por las reglas del propio lenguaje. Estos lenguajes padecen de mucha limitación en cuanto a la configuración de parámetros, pues aunque hay algunos que son reconfigurables desde el mismo proceso o mediante una interfaz de parámetros de la máquina, otros solamente son configurables desde la misma interfaz de programación, lo que afecta el dinamismo del proceso. Incluso puede encontrarse veces en las que estos parámetros son fijos, y por lo tanto no pueden cambiarse. Incluso otras en los que los parámetros deseados para realizar una tarea simplemente no existen. Todo esto lleva a los programadores a tener que realizar la programación del proceso de una manera más compleja y que disminuye sensiblemente el rendimiento del controlador, que de otra manera no habría sido necesario hacer. Algunos de los subtipos de lenguajes que podemos encontrar en esta categoría son:

  • Diagrama de escaleras, es un lenguaje muy parecido a la manera en cómo se configuraban antiguamente los controladores de relés. Presentan un flujo de energía que va de izquierda a derecha en cada uno de los escalones, el cuál debe sortear una serie de interrupciones de dicho flujo, representados por contactos de relés, e interruptores accionados manualmente o por variaciones en procesos físicos relacionados con el sistema a controlar. Dicho flujo pasa por bobinas que accionan contactos de relés en este u otro escalón de este diagrama, de manera tal que se realiza la lógica requerida para controlar al proceso. Aunque este lenguaje es muy común en PLCs, tiene limitaciones en cuanto a su uso con procesos que manejan variaciones analógicas y que requieren regulaciones del mismo tipo para sus salidas. Además, necesitan de la asistencia de herramientas extra la comunicación con otros controladores o con una interfaz de usuario.

  • Diagramas de funciones secuenciales, que permite especificar procesos de automatización mediante flujos lógicos de una forma secuencial. El flujo de las subrutinas que contienen van afectando el valor de las salidas de los controladores y también el funcionamiento de las siguientes subrutinas, en función del estado y de las entradas de las subrutinas actuales, vengan estas de entradas físicas del controlador o de entradas anteriores. Estos flujos cambian de dirección, en función de la salida de la subrutina actual, lo que permite activar una u otra subrutina, dada la dirección que tome el flujo. Es un tipo de lenguaje que proviene del modelo GRAFCET.

  • Diagramas de bloques, que como su nombre lo indica, utiliza bloques de símbolo lógicos para el funcionamiento del controlador y su interacción con el proceso. Las señales de salida son el resultado de la señales de entrada y la lógica interna del bloque, que puede ser combinatoria o secuencial o una mezcla de las dos, y puede o no estar afectada por parámetros de configuración ajustables en la programación, una interfaz de usuario o la interacción con otros controladores. Estos diagramas en su mayoría son preferidos por personas acostumbrados a trabajar con circuitos de compuertas lógicas, ya que la simbología utilizada es equivalente. Es ideal para usuarios que no tengan habilidades avanzadas en programación y para aquellos procesos de baja complejidad.

FOTO

En el mundo de la automatización hay muchas maneras de representar los diagramas de bloques, de acuerdo con el fabricante del software de automatización y/o del equipo de control a utilizar. Pero por lo general hay bloques básicos que son comúnmente usados. Estos bloques permiten generar operaciones aritmético/lógicas, y se permite agruparlos dentro de bloques para realizar secuencias de control más complejas. Algunos de estos son:

  • Aritméticos: bloques cuyas entradas y salidas son numéricas, ya sea en formato entero o en punto flotante, dependiendo del fabricante del controlador.

    • Suma: cuya señal de salida es la suma aritmética de dos o más señales de entrada.

    • Resta: cuya señal de salida es la resta aritmética de primera señal de entrada menos una o más de las siguientes señales de entrada.

    • Multiplicación: cuya señal de salida es el resultado de la multiplicación aritmética de dos o más señales de entrada.

    • División: cuya señal de salida es la división aritmética de primera señal de entrada entre una o más de las siguientes señales de entrada.

    • Ganancia o factor: similar a la multiplicación, pero con una sola variable de entrada y un parámetro de configuración que generalmente es constante. Suele usarse en agrupamiento con otros bloques para la composición de funciones de transferencia (necesarias para regular las variables de salida de un proceso en función de sus variables de entrada y sus parámetros de regulación).

  • Lógicos: bloques cuyas entradas y salidas son lógicas (booleanas). Haciendo analogía con el funcionamiento de un bombillo, un 0 lógico o “false” equivale al bombillo apagado, y un 1 lógico o “true” equivale al bombillo encendido.

    • Or: cuya salida es 1 si alguna de sus entradas es 1. Su complemento, la Nor, invierte la salida con respecto al funcionamiento explicado para la Or.

    • And: cuya salida es 1 sólo si todas sus entradas son 1. Su complemento, la Nand, invierte la salida con respecto al funcionamiento explicado para la And.

    • Not: de una sola entradas, cuya salida es 1 su entrada es 0, y es 0 su entrada es 1.

    • Xor: para dos entradas, su salida es 1 si y sólo si una de sus dos entradas es 1. Para más de dos entradas el resultado puede variar en función del fabricante, así que primero se debe leer el manual de bloques funcionales del fabricante para este bloque, antes de ser utilizado.

    • Latch: usado para la lógica set-reset. Tiene una entrada “set” y una entrada “reset”. Si set es 1 mientras reset es 0, la salida es 1. Si set es 0 mientras reset es 1, la salida es 0. Si set y reset son 0 al mismo tiempo, la salida no cambia de estado. El funcionamiento cuando set y reset son 1 al mismo tiempo debe ser consultado en el manual de bloques funcionales del fabricante, y si es indefinido, debe evitarse llegar a ese estado. Debe consultarse el manual del fabricante para evaluar el estado inicial (0 o 1) de su entrada, cuando el controlador enciende.

    • Toggle: muy usado para la lógica de encender/apagar con un solo pulsador, su salida cambia de estado (pasa de 0 a 1, o de 1 a 0) solamente en la transición de 0 a 1 o de 1 a 0 de su entrada, dependiendo del fabricante. De lo contrario, se conserva el estado anterior. Al igual que con el Latch, debe consultarse el manual del fabricante para evaluar el estado inicial de su entrada.

  • Temporización: son parecidos a los lógicos, pero permite la conmutación de una salida en función de los parámetros de entrada y de una variable de configuración numérica, que es el tiempo para el cambio de estado. La siguiente es una descripción genérica, la funcionalidad detallada depende del fabricante.

    • Retardo para inicio/conexión: cuya salida pasa de 0 a 1 un tiempo T después de que su entrada pasa de 0 a 1, si dicha entrada permanece en 1 durante al menos ese tiempo. Si la salida ha logrado alcanzar el estado 1, apenas la entrada pase a ser 0, la salida también será 0.

    • Retardo de parada/desconexión: cuya salida pasa de 1 a 0 un tiempo T después de que su entrada pasa de 1 a 0, si dicha entrada permanece en 0 durante al menos ese tiempo. Si la salida ha logrado alcanzar el estado 0, apenas la entrada pase a ser 1, la salida también será 1.

    • Tiempo mínimo encendido: la salida se mantiene en 1 por un tiempo mínimo T, después que la entrada ha pasado de 0 a 1, independientemente de que luego dicha entrada haya pasado de 1 a 0. Si pasado el tiempo mencionado, la entrada se encuentra en 0, o ha pasado de 1 a 0, la salida pasa también de 1 a 0.

    • Tiempo mínimo apagado: la salida se mantiene en 0 por un tiempo mínimo T, después que la entrada ha pasado de 1 a 0, independientemente de que luego dicha entrada haya pasado de 0 a 1. Si pasado el tiempo mencionado, la entrada se encuentra en 1, o ha pasado de 0 a 1, la salida pasa también de 0 a 1.

FOTO

  • Otras: algunas otras son comunes en este tipo de programación. Se mencionan las siguientes:

    • Bloque PID: Se utiliza para proporcionar un control de lazo proporcional, integral y derivativo (PID). Útil en la regulación de la dinámica de un proceso. Generalmente tienen como entradas/parámetros/salidas (numéricos):

      • Consigna o set-point: valor numérico de entrada que representa el valor deseado de una variable física de un proceso.

      • Realimentación o feedback: valor numérico de entrada que representa el valor medido de una variable física de un proceso. Este valor es tomado por un instrumento sensor, que transforma la variable física del proceso a otro tipo de variable que puede ser medida por el controlador. Dicha transformación se conoce comúnmente como acondicionamiento de señal.

      • Salida / output: valor numérico de salida que es el resultado del de la ejecución del algoritmo PID. Este valor se envía como una salida analógica a un actuador que cambia a una variable física de un proceso en función del cambio de dicho valor, afectando directa o indirectamente la variable física que se desea regular.

      • Banda proporcional: parámetro o entrada numérica que representa el valor de error que es necesario para mover la salida de 0 a 100%. Su efecto es inmediato sobre la salida.

      • Tiempo integral: parámetro o entrada numérica que representa a un factor del efecto del error (desviación del punto de consigna) a lo largo del tiempo.

      • Tiempo derivativo: parámetro o entrada numérica que determina el efecto de la acción derivada en la respuesta del sistema.

    • Temporizador (timer): usado para medir el tiempo en el cuál una entrada lógica permanece en 1. Su salida es numérica, y representa dicho valor. Dicha salida va cambiando de valor cuando la entrada está en 1. Un parámetro de configuración de unidad de tiempo (generalmente con opción de milisegundos, segundos, minutos y horas) determina cada cuánto debe cambiar dicha salida.

REALIZADO POR:

Johautt Hernández
Líder de Integración
jhernandez@innotica.net
https://www.linkedin.com/in/johautt-hernández-341202125/

REFERENCIAS BIBLIOGRÁFICAS

Escrito por:


Johautt Hernández

Edificios inteligentes

Sistemas HVAC

Construcción sostenible

Ciudades inteligentes