Lenguaje de contactos (ladder) #
El lenguaje Ladder es una adaptación de los esquemas eléctricos a programación. Como se inventó en Estados Unidos, la notación que se tradujo fue la de la norma utilizada en ese momento (NEMA), que además va de izquierda a derecha, en lugar de arriba abajo como trabajamos en España.
Bloque segmento #
En microLSB se facilita el uso del bloque Segmento, que igual que ocurre en el lenguaje de contacto, se basa en colocar condiciones en serie, que si se cumplen, hacen que se activen los elementos que se hayan incluido al final de la «línea» (salidas digitales, variables, etc.). Es la forma mas parecida a programar de forma similar a como se cablea un circuito eléctrico. Para contextualizar esto, véase el siguiente ejemplo en el que se muestra la evolución desde un sistema cableado, posteriormente un sistema programado en Ladder en el editor Codesys, y finalmente, su programación en microLSB.
Mientras no esté accionado el primer pulsador (DI2) y si esté accionado el segundo pulsador (DI12), permanecerá encendida la lámpara (DO15). En caso contrario, permanecerá apagada.
En la versión de Arduino de C++ podría hacerse lo anterior, de la siguiente manera:
void setup()
{
pinMode(15, OUTPUT);
pinMode(12, INPUT);
pinMode(2, INPUT);
}
void loop()
{
if(!digitalRead(2) && digitalRead(12)){
digitalWrite(15,HIGH);
}else{
digitalWrite(15,LOW);
}
}
.
El bloque segmento se encuentra en el apartado Elementos Ladder / Estructuras:
Su uso básico es el siguiente:
Se mostrará su uso en la práctica constantemente en las sucesivas lecciones, ya que es una estructura de trabajo fundamenta.
Sin embargo, también se pueden realizar programas utilizando bloques If-Else, que sigue la misma dinámica que los mencionados bucles cuando se usan en ST, C++, Python, Javascript, etc.:
En la imagen anterior, además de mostrar la comparación con el bloque If-Else, se muestra cómo se realizaría el programa en lenguaje de contactos (Ladder) en el editor de Codesys. A continuación, en el IDE de Arduino:
void setup()
{
pinMode(15, OUTPUT);
pinMode(12, INPUT);
}
void loop()
{
if(digitalRead(12)){
digitalWrite(15,HIGH);
}else{
digitalWrite(15,LOW);
}
}