Tutorial Arduino Ladder

En este tutorial Arduino Ladder quiero destacar que Arduino ha sido un elemento básico en la comunidad de creadores, estudiantes e innovadores de proyectos durante muchos años. Para muchos usuarios del IDE de Arduino, puede haber dificultades para traducir entre las líneas de escalera del PLC y la programación de texto.

Recreación de la lógica de escalera de PLC  en este tutorial Arduino Ladder.

Los proyectos Arduino están en todas partes. Desde los proyectos de hobby más simples en el hogar hasta los sistemas de control profesionales con múltiples interfaces de red, la variedad de aplicaciones de Arduino es infinita. Una de las preguntas más comunes sobre Arduino que escucho en el mundo de los sistemas de control es «¿Cómo programo mi Arduino usando lógica de escalera?».

Si desean y antes de continuar con este tutorial pueden echar un vistazo a este editor ladder para arduino muy potente y gratis.

Esa pregunta tiene dos respuestas diferentes. Los programas de diseño de lógica de escalera son una alternativa, pero también puede ser bastante simple construir líneas de código basadas en texto que sigan las mismas secuencias que un renglón lógico de PLC.

editor-ladder-makker-free-Plc-Arduino-NANO

Programación en lógica de escalera compatible con Arduino

El IDE, o entorno de desarrollo integrado, es el software en el que realmente se lleva a cabo la programación en la PC antes de descargarse en el microcontrolador. Para discutir brevemente esta primera opción, existen varios programas que permiten el diseño de programas de lógica de escalera, utilizando los símbolos familiares de contacto y bobina de la lógica de PLC. Estos lenguajes gráficos son compatibles con IEC61131 , pero deben descargarse e instalarse externamente; no son nativos del entorno Arduino, que es familiar para muchos usuarios.

Los ejemplos y tutoriales para diseñar programas de lógica de escalera que se ejecutan de forma nativa dentro de un Arduino serán el tema principal de este tutorial, útiles para el aprendizaje en el hogar y recursos económicos para el aula para enseñar lógica de escalera a principiantes. Y para la industria teniendo precauciones de seguridad.

Este artículo explicará cómo escribir el código equivalente en el típico IDE de Arduino de una manera que copie y recree escalones lógicos de escalera simples.

Además de todo lo anterior también les traigo para probar un editor y simulador nuevo en el mundo del Arduino, sencillo, muy intuitivo y práctico. Se llama NSLadder, es totalmente funcional y gratuito (de momento). En breve lo publicaré, primero he de ensayarlo y ver los resultados a nivel práctico con Arduino NANO, lo teórico ya he comprobado que funciona muy bien.

En un proximo artículo les comentaré acerca de este novedoso editor NSLadder en su fase beta.

Escritura de comandos de contacto y bobina en el IDE de Arduino

La lógica de escalera es un diseño sistemático de declaraciones if-this-then-that (IFTT), con cada línea comparando por separado un conjunto de condiciones de entrada y activando una bobina de salida si se cumplen las condiciones.

Para obtener la mejor experiencia de ejemplo paso a paso, comience conectando dos o más entradas de botón y una o más salidas de LED. Se puede usar cualquier interruptor o carga de entrada o salida, y miles de tutoriales en línea pueden guiarlo a través de conexiones simples de placa de prueba.

Mi suposición para este ejemplo es que está familiarizado con los comandos digitales fundamentales de lectura y escritura, y sabe cómo configurar los pines como entradas y salidas en la rutina de configuración.

Con estos dos contactos de entrada y una bobina de salida establecidos, examinemos una línea simple de lógica de escalera:

Contacto normalmente abierto y bobina de salida

La línea de lógica de escalera más fácil es un solo contacto normalmente abierto (a menudo llamado XIC) que opera una bobina de salida momentánea, como se muestra en la imagen a continuación.

En lenguaje sencillo, esta lógica diría: ‘Si el botón está pulsado, entonces activa el Led, pero si el botón NO está energizado, el Led también debe estar desactivado’.

Podemos construir esta misma declaración en el IDE de Arduino usando una construcción similar.

if (digitalRead(Button)==HIGH) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Aquí está el mismo programa que se muestra en el IDE de Arduino para verificar su progreso dentro de la función void loop().

Contacto normalmente cerrado y bobina de salida

Si el botón del mundo real normalmente está cerrado, o si la lógica dicta que el contacto debe usarse para apagar el dispositivo de carga, puede haber un contacto normalmente cerrado (o XIO) usado en lugar del XIC. La lógica y el siguiente programa Arduino se verán muy similares.

La única diferencia entre XIC y XIO es que la comparación será verdadera si la corriente fluye, en el caso del primer comando, y si la corriente deja de fluir, en el caso del último comando, por lo que simplemente comparamos con un estado bajo. en lugar de un estado alto.

if (digitalRead(Button)==LOW) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Contactos en serie con una bobina de salida

En el IDE de Arduino, dos símbolos de ampersand (&&) indican la comparación ‘Y’. Si dos contactos de entrada están dispuestos en serie, decimos ‘la señal 1 Y la señal 2 deben estar energizadas para que la carga se energice’.

Para crear esta lógica en la estructura Arduino IF, comparamos ambos contactos de forma independiente.

if (digitalRead(Button1)==HIGH && digitalRead(Button2)==HIGH ) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Contactos paralelos con una bobina de salida

La siguiente estructura de lógica de escalera más simple son los contactos de entrada paralelos, donde una señal O la otra debe activarse para que la carga se active.

En la estructura de Arduino, dos líneas verticales (llamadas tuberías, || ) completan la comparación OR.

if (digitalRead(Button1)==HIGH || digitalRead(Button2)==HIGH ) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Lógica combinacional: el circuito de set/reset

Quizás uno de los ejemplos más comunes de circuito lógico combinacional en serie-paralelo es el circuito de ‘latch’ o sellado, que es muy común para los controles de motor que usan contactos auxiliares en un contactor o arrancador de motor.

El mayor punto de confusión de esta lógica es el uso de la salida (luz verde en nuestro caso) como condición de ENTRADA. En otras palabras, debe energizar la carga, pero luego también verificar la carga para ver si está encendida o apagada.

Esta retroalimentación es la razón por la que se usa un contacto auxiliar en una versión real de este circuito de control común. Para obtener más información sobre este circuito, consulte nuestro artículo sobre circuitos de control de motores .

La lógica de escalera aparece como se muestra a continuación.

Siempre que tengamos cuidado de construir la declaración IF en el orden correcto, no hay límite para la complejidad de una línea de escalera que se puede construir. DigitalRead puede medir el valor de un terminal de entrada o salida con facilidad.

if (( digitalRead(VerdeButton)==HIGH || digitalRead(Led)==HIGH ) && digitalRead(RojoButton) == LOW) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

¿Qué pasa con las bobinas de Set Reset?

En todos los ejemplos anteriores, la declaración IF ha activado y desactivado la bobina, según el estado de las entradas. Muchas veces, preferimos bloquear (establecer un Set) la salida o desbloquear (restablecer un Reset) la salida. Esto se revisa proporcionando solo un comando de bobina y eliminando la condición ‘else’, como se muestra a continuación.

Latch, Set

if (digitalRead(Button)==HIGH) {

digitalWrite(Led, HIGH);

}

Desbloquear, restablecer o Reset

if (digitalRead(Button)==HIGH) {

digitalWrite(Led, LOW);

}

¿Qué pasa con los valores analógicos y las desigualdades?

En todos los ejemplos anteriores, los valores digitales se comparan con ALTO o BAJO, ya que esos son los únicos dos estados posibles.

Si, en cambio, tiene un potenciómetro o sensor con un valor analógico, las líneas se pueden modificar fácilmente para permitir comparaciones de desigualdad, como la siguiente.

Este símbolo indica que «si el valor del sensor supera o es igual a 500, la salida debe activarse».

if (analogRead(SensorVal)>=500) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Múltiples peldaños de escalera

En cualquier lenguaje de programación, las declaraciones IF siempre se verifican independientemente unas de otras. Para cualquier programa de varios renglones, cada línea se puede escribir como una nueva instrucción IF.

Ir un paso más allá con las subrutinas

Prefiero los programas simples, y si planeo usar una función muchas veces, prefiero escribirla como una subrutina.

Dado que una instrucción normalmente abierta debe devolver un valor VERDADERO o FALSO cuando se compara, entonces podría escribir una función y llamarla ONE, luego dentro de esa función, elegir devolver el valor VERDADERO (1) si está energizado , y un valor FALSO (0) si no está energizado.

Coloque esto fuera de la función principal void loop():

int ONE(int PinNumber) {

if (digitalRead(PinNumber)==HIGH) {

return 1;

} else {

return 0;

}

Ahora, cuando necesitamos usar una instrucción normalmente abierta o ONE, simplemente necesitamos escribir ONE y proporcionar el nombre del pin (o ‘etiqueta’) que deseamos usar. Dado que la comparación ya se realizó en la subrutina, solo necesitamos llamar a la subrutina ONE para devolver el valor de comparación VERDADERO o FALSO, por lo que ya no necesitamos usar el comparador ‘==’.

¡Simplificación inmediata!

if (ONE(Button)) {

digitalWrite(Led, HIGH);

} else {

digitalWrite(Led, LOW);

}

Podemos hacer lo mismo para todo nuestro conjunto restante de ONE, XIO y para la salida OTE, OTL y OTU de la siguiente manera:

Con estas subrutinas proporcionadas, algunos de los códigos de muestra anteriores se pueden reescribir para que se vean como los siguientes.

if (ONE(Button)) {

OTE(Led, HIGH);

} else {

OTE(Led, LOW);

}

if (ONE(Button1) && ONE(Button2)) {

OTL(Led);

}

if (ONE(Button1) && ONE(Button2)) {

OTU(Led);

}

Finalmente, el circuito de enganche combinacional se puede construir fácilmente, con la captura de pantalla real del código que se muestra a continuación para ilustrar cómo deberían aparecer los colores en la versión IDE actual.

PLC a Arduino

Las dos plataformas son muy diferentes, diseñadas para diferentes entornos y usos. Sin embargo, la simplicidad de los programas de PLC puede facilitar la adaptación de esos códigos de lógica de escalera a las estructuras IF simples de un lenguaje basado en texto.

Explore lo que puede lograr con estos peldaños y, si diseña nuevos comandos y subrutinas, agréguelos a los comentarios a continuación para compartir su experiencia con otras personas que deseen aprender esta nueva habilidad.

¿Quiere poner a prueba sus conocimientos de PLC? ¿Crees que NO sabes mucho sobre la lógica de escalera? ¿Eres un joven de mente normalmente abierta o normalmente cerrada?

Este Tutorial Arduino Ladder ha sido elaborado para todas aquellas personas interesadas en la programación de PLC en lenguaje en escalera, más conocido como Ladder y perdonen la redundancia.

2 comentarios en “Tutorial Arduino Ladder”

  1. Hola Joan
    Me gustaría saber si el editor NS LADDER continuará el desarrollo y lo ampliaran con funciones como flanco de subida bajada y temporizadores ON y OFF
    un arazo me gusta mucho esta web

    1. Hola, perdona no haber respondido antes por problemas de tiempo. El editor ya tiene lo que comentas, descárgate la última versión y si crees que necesita alguna función comenta por favor.
      El editor cada vez que lo inicias conecta con la web del desarrollador y comprueba si existen nuevas versiones, esto te ayuda a estar al día en nuevas versiones.
      Gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos
Responsable Joan Mengual +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios Automattic Inc., EEUU para filtrar el spam. +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.

Salir de la versión móvil