+1 500 000 productos en oferta
7000 paquetes cada día
+300 000 clientes de 150 países
Fecha de publicación: 14-03-2025 🕒 6 lectura min
Los controladores PLC se utilizan comúnmente en la industria en todos los lugares donde es necesario el control de parámetros y la gestión de procesos. El desarrollo de la electrónica integrada ha hecho que estos dispositivos tengan parámetros exigentes, sean resistentes a las perturbaciones EMI y a las condiciones ambientales, y al mismo tiempo sean amigables para el usuario. A diferencia de antes, los entornos para crear programas son muy similares entre sí y en la mayoría de ellos se puede encontrar una forma de ejecutar el programa que nos convenga. Entonces, ¿cómo se programa un controlador PLC?
Los lenguajes de programación de controladores PLC se convirtieron en objeto de la norma IEC 61131 publicada en 2013. En la parte 3 de esta norma se incluyen recomendaciones sobre los lenguajes y métodos de programación de controladores PLC. Además de los tipos de datos, variables, configuración y su descripción, unidades de organización del programa y principios de programación orientada a objetos, se enumeran 5 lenguajes de programación básicos para controladores PLC y se definen los requisitos para su funcionalidad. Debido a esta norma, los lenguajes de programación básicos que utilizan los programadores de PLC se han convertido en:
El lenguaje de escalera LD (o LAD) es el más popular y accesible en todos los entornos para crear programas para PLC. Es un lenguaje gráfico, pero utiliza símbolos simples, por lo que en soluciones más antiguas se utilizaba semigráfica creada con caracteres ASCII estándar. Estos caracteres eran fáciles de presentar también en la pantalla del PLC, lo que permitía crear programas más simples ad hoc, sin usar una computadora PC. En este lenguaje se crea un esquema del programa utilizando símbolos similares a los utilizados en esquemas eléctricos: bobinas y contactos. Los contactos pueden ser normalmente abiertos (NO) o normalmente cerrados (NC), y las bobinas pueden tener diferentes funcionalidades, como establecer, restablecer o negar. También se pueden incluir funciones y bloques funcionales completos, como temporizadores, contadores o biestables. El lenguaje de escalera es comprensible incluso para un programador inexperto.
Figura 1. Fragmento de un programa en lenguaje de escalera LD (LAD)
Otra forma muy intuitiva de programación, especialmente para personas familiarizadas con la técnica digital, es el diagrama de bloques funcionales FBD. Un fragmento de "código" de ejemplo realizado con FBD se muestra en la figura 2. Las entradas, salidas y operaciones individuales están representadas por bloques funcionales y puertas, que no solo realizan funciones lógicas, sino que también pueden procesar señales de acuerdo con un algoritmo dado. Entre los bloques funcionales se encuentran controladores PID, una amplia gama de generadores de formas de onda, contadores y otros. Algunos entornos de programación también permiten definir bloques propios con la funcionalidad requerida. FBD es un lenguaje gráfico. Los bloques individuales se colocan en el esquema y se conectan entre sí, lo que recuerda al dibujo de circuitos lógicos. Algunos entornos de programación permiten no solo conectar entradas/salidas, sino también crear buses y referencias que transmiten una serie de parámetros (en la figura 2, los buses están representados por líneas gruesas, aquí transmiten constantes y variables multibit).
Figura 2. Fragmento de ejemplo de un programa realizado con FBD
El lenguaje de texto estructurado ST es un lenguaje de alto nivel que recuerda al lenguaje Pascal, que fue muy popular en su momento. Permite operaciones más complejas, cuya escritura no está limitada por el enredo de líneas en la pantalla y su ejecución como en el caso de FBD, lo que a menudo requiere un monitor grande con buena resolución. Programar en ST es similar a crear código en lenguajes de programación tradicionales para computadoras PC. Se admiten instrucciones complejas, como bucles repeat…until, do…while, instrucciones condicionales if…then…else, case y funciones matemáticas sqrt(), sin(). Lo importante es que, independientemente del fabricante del hardware o del entorno, las funciones del lenguaje ST son comunes para ellos y han sido definidas en la norma IEC 61131. Dado que la norma mencionada permite la combinación de los lenguajes enumerados en ella, el lenguaje ST también se puede utilizar para crear "inserciones" o bloques FBD no estándar.
Listing 1. Función de ejemplo realizada en lenguaje ST
//=======================================================================
// Function Block Timed Counter : Incremental count of the timed interval
//=======================================================================
FUNCTION_BLOCK FB_Timed_Counter
VAR_INPUT
//Trigger signal to begin Timed Counting
Execute : BOOL := FALSE;
//Enter Cycle Time (Seconds) between counts
Time_Increment : REAL := 1.25;
//Number of Desired Count Cycles
Count_Cycles : INT := 20;
END_VAR
VAR_OUTPUT
//One Shot Bit indicating Timer Cycle Done
Timer_Done_Bit : BOOL := FALSE;
//Output Bit indicating the Count is complete
Count_Complete : BOOL := FALSE;
//Accumulating Value of Counter
Current_Count : INT := 0;
END_VAR
VAR
//Timer FB from Command Library
CycleTimer : TON;
//Counter FB from Command Library
CycleCounter : CTU;
//Converted Time_Increment in Seconds to MS
TimerPreset : TIME;
END_VAR
// Start of Function Block programming
TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000;
CycleTimer(
in := Execute AND NOT CycleTimer.Q,
pt := TimerPreset);
Timer_Done_Bit := CycleTimer.Q;
CycleCounter(
cu := CycleTimer.Q,
r := NOT Execute,
pv := Count_Cycles);
Current_Count := CycleCounter.cv;
Count_Complete := CycleCounter.q;
END_FUNCTION_BLOCK
El esquema de funciones secuenciales es otro de los lenguajes de programación gráficos. Su precursor fue el lenguaje GRAFCET, basado en redes de Petri binarias. Permite describir una secuencia de pasos (acciones) que deben realizarse en un orden estrictamente definido. Es especialmente útil para crear programas para gestionar procesos que requieren sincronización o procesos que pueden dividirse en etapas. Los componentes principales del programa en SFC son: pasos (etapas) asociados con acciones, transiciones asociadas con condiciones lógicas, conexiones directas entre pasos y transiciones.
A menudo, el lenguaje SFC se combina con otro método de programación, como la escalera LD. SFC es, por naturaleza, un lenguaje de programación concurrente, en el que pueden estar activas simultáneamente muchas POU (Unidades de Organización del Programa), es decir, unidades que controlan el flujo. Algunos entornos también permiten crear macroacciones, es decir, acciones dentro de POU que afectan el estado de otro POU. De esta manera, un POU puede decidir sobre los pasos activos tomados por otro POU.
Figura 3. Fragmento de ejemplo de un programa en el lenguaje SFCC
La lista de instrucciones ya se considera un método de programación obsoleto. Este lenguaje se asemeja un poco al ensamblador, pero a pesar de implementarse para diferentes controladores PLC equipados con diferentes procesadores, el lenguaje IL es independiente del tipo de procesador utilizado. Al igual que el ensamblador, consta de instrucciones muy simples, y las operaciones más complejas requieren el uso de muchas de ellas. El control de la ejecución del programa se realiza mediante instrucciones de salto y llamadas a subprogramas.
Muchos fabricantes de controladores, a pesar de la plena conformidad del hardware y software ofrecido con la norma IEC 61131-3, ofrecen llamadas/bloques funcionales adicionales, específicos para un proveedor determinado y adaptados al hardware que ofrece, como lectura o escritura en entradas/salidas. Por ejemplo, el lenguaje IL destinado a controladores PLC de Siemens se denominó "Statement List" o "STL" en inglés y "Anweisungs-Liste" o "AWL" en alemán. El nombre alemán también se trasladó a las versiones nacionales del entorno de ejecución en italiano y español. El usuario del paquete Simatic puede elegir entre mnemónicos alemanes e internacionales para representar instrucciones. Por ejemplo, "A" significa "AND" o "U" significa "UND", "I" significa "Entrada" o "E" significa "Eingang", etc.
Listing 2. Fragmento de ejemplo de un programa en lenguaje IL
LD Speed
GT 2000
JMPCN VOLTS_OK
LD Volts
VOLTS_OK LD 1
ST %Q75
El objetivo de este texto no es enseñar a programar controladores PLC, sino señalar ciertas posibilidades y opciones para elegir. Cada programador de PLC debe elegir el método que sea más adecuado para sus necesidades, o combinarlos según la aplicación. Por ejemplo, el diagrama FBD probablemente gustará a los usuarios que conocen y entienden los circuitos lógicos, mientras que la escalera LD será útil para programar secuencias de control más simples. Por otro lado, ST y SFC son adecuados para programar procesos complejos, aunque, por ejemplo, el lenguaje ST se ha implementado en el microcontrolador PLC Easy de Eaton, y este probablemente será útil para realizar funciones de control y supervisión más simples y menos exigentes. Por otro lado, no hay recomendaciones que indiquen qué lenguaje se puede usar para qué, cuál es adecuado para qué. Con mayor o menor esfuerzo, utilizando cualquiera de los métodos discutidos, se puede crear el software adecuado. La mejor opción parece ser combinar lenguajes según las necesidades y para lograr la mayor claridad posible en la aplicación.
Transfer Multisort Elektronik (TME) es uno de los mayores distribuidores mundiales de componentes electrónicos, partes electrotécnicas, equipos de taller y automatización industrial. El catálogo incluye más de 1.500.000 de productos de 1.300 fabricantes líderes. Los modernos centros logísticos de TME en Łódź y Rzgów (Polonia), con una superficie total de más de 40.000 m², envían casi 6.000 paquetes diarios a clientes en más de 150 países.
TME también invierte en el desarrollo de los conocimientos y habilidades de jóvenes ingenieros y entusiastas de la electrónica a través del proyecto TME Education, y apoya a la comunidad tecnológica organizando la serie de eventos TechMasterEvent, que promueve la innovación y el intercambio de experiencias.