Lenguaje ladder

El lenguaje ladder, diagrama ladder, diagrama/lógica de contactos,  o diagrama en escalera, es un lenguaje de programación gráfico muy popular dentro de los autómatas programables debido a que está basado en los esquemas eléctricos de control clásicos. De este modo, con los conocimientos que todo técnico o ingeniero eléctrico posee, es muy fácil adaptarse a la programación en este tipo de lenguaje.

Ladder es uno de los varios lenguajes de programación para los controladores lógicos programables (PLCs) estandarizados con IEC 61131-3.

Elementos de programación 
Para programar un autómata con Ladder, además de estar familiarizado con las reglas de los circuitos de conmutación, (también denominada Lógica de Contactos), es necesario conocer cada uno de los elementos de que consta este lenguaje. A continuación se describen de modo general los más comunes.

Se suele indicar mediante los caracteres B o M y tienen tanto bobinas como contactos asociados a las mismas de los tipos vistos en el punto anterior. Su número de identificación suele oscilar, en general, entre 0 y 255. Su utilidad fundamental es la de almacenar información intermedia para simplificar esquemas y programación. 

Los bits de sistema son contactos que el propio autómata activa cuando conviene o cuando se dan unas circunstancias determinadas. Existe una gran variedad, siendo los más importantes los de arranque y los de reloj, que permiten que empiece la ejecución desde un sitio en concreto y formar una base de tiempos respectivamente. Su nomenclatura es muy diversa, dependiendo siempre del tipo de autómata y fabricante.

En forma práctica, los contactos pueden representar, de acuerdo a la programación que se realice, la entrada de información, por ejemplo el activamiento de un sensor, o el activamiento de una memoria interna, comúnmente denominada M. 

Las Bobinas, representan a esas memorias M así como las salidas al exterior, activan o desactivan elementos como puede ser una luz, un motor eléctrico, un solenoide de una válvula neumática, etc.

En algunas versiones de Ladder, como el relé inteligente ZELIO, las bobinas representan también funciones, como temporizadores, contadores y comparadores.

Temporizadores 
El temporizador es un elemento que permite hacer activaciones retardadas o con duración preestablecida, con un control preciso del tiempo de activación. El esquema básico de un temporizador varía de un autómata a otro, pero podemos encontrar una serie de señales fundamentales, aunque, eso sí, con nomenclaturas distintas. 

Podemos observar, en la figura de la derecha, el esquema de un temporizador, Tii, con dos entradas (E y C a la izquierda) y dos salidas (D y R a la derecha) con las siguientes características:

 Entrada Enable (E): Es la que activa el proceso de conteo de tiempo. Responde tanto a flanco como a nivel lógico (sólo se mantiene contando mientras E es un "1" lógico, y al detectar flanco de bajada resetea el contador). 
 Entrada Count (C): Indica el valor de temporización Tiene que estar activa (a 1 lógico) en todo momento durante el intervalo de tiempo, ya que si se desactiva (puesta a cero lógico) se interrumpe el conteo (puesta a cero temporal).
 Salida Delayed/TON (D): Salida a "0" por defecto. Se pone a uno cuando el contador lleva activado (enabled) un valor de tiempo equivalente al valor de temporización o retardo (C), y se mantiene encendido mientras la entrada E esté a "1".
 Salida TOFF (R): Salida a "0" por defecto. Se pone a "1" cuando se detecta un flanco de bajada en la entrada Enable, y se mantiene a "1" durante el tiempo especificado por C.

En la mayor parte de implementaciones de Lenguaje Ladder, los contadores On-delay y Off-delay son entidades independientes, por lo que se tendría sólo una salida TON o una TOF, según el caso. El valor de conteo suele especificarse por programa (valor preset) y no por entradas, por lo que el temporizador es finalmente un elemento con una única entrada (Enable) y una única salida (TON/TOF).

Ejemplo de un temporizador de retardo a la conexión.

Contadores 
El contador es un elemento capaz de llevar el cómputo de las activaciones de sus entradas, por lo que resulta adecuado para memorizar sucesos que no tengan que ver con el tiempo pero que se necesiten realizar un determinado número de veces. 

En la figura de la derecha puede verse el esquema de un contador, Ci, bastante usual, donde pueden distinguirse las siguientes entradas y salidas:

 Entrada RESET (R): Permite poner a cero el contador cada vez que se activa. Se suele utilizar al principio de la ejecución asignándole los bits de arranque, de modo que quede a cero cada vez que se arranca el sistema. 

 Entrada PRESET (P). Permite poner la cuenta del contador a un valor determinado distinto de cero, que previamente se ha programado en Cip. 

 Entrada UP (U): Cada vez que se activa produce un incremento en una unidad de la cuenta que posea en ese momento el contador. 

 Entrada DOWN (D): Cada vez que se activa produce un decremento en una unidad de la cuenta que posea en ese momento el contador.

 Salida FULL (F): Se activa al producirse un desbordamiento del valor del contador contando en sentido ascendente.

 Salida DONE (D): Se activa cuando el valor del contador se iguala al valor preestablecido Cip.

 Salida EMPTY (E): Se activa al producirse un desbordamiento del valor del contador contando en sentido descendente.

Ejemplo de una operación de contaje.

Monoestables 

El monoestable es un elemento capaz de mantener activada una salida durante el tiempo con el que se haya programado, desactivándola automáticamente una vez concluido dicho tiempo. Una de sus principales ventajas es su sencillez ya que sólo posee una entrada y una salida como podemos observar en la siguiente figura.

 Entrada START (S): Cuando se activa o se le proporciona un impulso comienza la cuenta que tiene programada. 

 Salida RUNNING (R): Se mantiene activada mientras dura la cuenta y se desactiva al finalizarla. Al igual que con el temporizador, para programar la cuenta hay que introducir los valores de Mip y Mib.

Programación 
En este apartado se tratarán, de modo general, los conceptos básicos de programación en Ladder.

Una vez conocidos los elementos que LADDER proporciona para su programación, resulta importante resaltar cómo se estructura un programa y cuál es el orden de ejecución. 

El siguiente esquema representa la estructura general de la distribución de todo programa Ladder, contactos a la izquierda y bobinas y otros elementos a la derecha. 

En cuanto a su equivalencia eléctrica, podemos imaginar que la línea vertical de la izquierda representa el terminal de alimentación, mientras que la línea vertical de la derecha representa el terminal de masa. 

El orden de ejecución es generalmente de arriba a bajo y de izquierda a derecha, primero los contactos y luego las bobinas, de manera que al llegar a éstas ya se conoce el valor de los contactos y se activan si procede. El orden de ejecución puede variar de un autómata a otro, pero siempre se respetará el orden de introducción del programa, de manera que se ejecuta lo que primero se introduce.

Sistemas combinacionales 
Aunque en los sistemas industriales la programación se centra en procesos secuenciales, no teniendo demasiado interés los procesos combinacionales, es necesario conocer la lógica combinacional ya que en muchas ocasiones es necesaria en la programación secuencial. 

Una vez obtenida la función lógica de un problema combinacional, el paso a Ladder o esquema de contactos es muy sencillo. De acuerdo con el álgebra de Boole aplicada a la conmutación, las sumas serán contactos en paralelo, los productos contactos en serie y las negaciones contactos normalmente cerrados. En la siguiente figura se muestra un ejemplo de esquema LADDER para una determinada ecuación.

Elementos de memoria 
La conexión tradicional para realizar una función de memoria en los circuitos con relés, es el circuito con autoalimentación. Esto se consigue mediante la conexión de un contacto NA del relé (o contactor) en paralelo con el pulsador de marcha. A continuación puede observarse las dos variantes de este circuito: con prioridad a la DESconexión (figura a) y con prioridad a la conexión (figura b).

En la siguiente figura se pueden observar los esquemas equivalentes en Ladder:

Sin embargo, con LADDER el esquema puede quedar mucho más sencillo si empleamos las bobinas de SET para la marcha y RESET para paro:

En este caso la prioridad dependerá del PLC utilizado, aunque usualmente la función RESET tiene prioridad sobre la SET.

Elementos de tiempo 
Como ya se ha comentado, los dos elementos básicos de tiempo son el temporizador y el monoestable. A continuación veremos un ejemplo de programación de un automatismo temporizado.

El esquema siguiente se corresponde con el mando de un motor con marcha temporizada: 
 

Un posible programa equivalente en Ladder podría ser el siguiente:

Elementos de cómputo 

Para aclarar la programación con elementos de cómputo, se explicará el funcionamiento del esquema de la derecha: 

Como se puede observar, el programa consta de un contador C11 que ha sido programado con el valor 10 (Cp=10). Con la entrada S0 ponemos a cero el contador y con la entrada S1 se preselecciona con el valor de Cp, esto es, 10. Cada impulso dado en S2 incrementa en una unidad el contador y cada impulso en S3 lo disminuya. 

Las bobinas KMI y KM2 se activan cuando el contador posee el valor 10 y 6 respectivamente, en cambio, la bobina KM3 está continuamente activada excepto cuando el contador se encuentra con el valor 4.

Sistemas secuenciales 
Aunque es posible programar sistemas secuenciales en Ladder, sólo se suele utilizar para el control de sistemas sencillos. En aquellos más complejos se utiliza la programación modular o el GRAFCET.

Entornos de programación 
Para programar en Ladder se necesita un entorno de desarrollo integrado (IDE, por sus siglas en inglés), que consiste en un software que normalmente
corre en una computadora y permite diseñar y transferir la lógica implementada al PLC.

Un ejemplo de software de programación Ladder es el entorno StxLadder, que permite implementar la lógica Ladder y luego transferirla al PLC.

Ladder
Automatización de diseño electrónico