Cómo utilizar las entradas de interrupción con las placas Arduino industriales
Trabajar con un controlador lógico programable para automatización industrial
16 marzo, 2021 por
Cómo utilizar las entradas de interrupción con las placas Arduino industriales
Boot & Work Corp. S.L., Amil Shrivastava

Introducción


Las interrupciones, como su nombre indica, son un método para detener el proceso que está ejecutando el procesador con el fin de ejecutar una subrutina más pequeña. Este método tiene muchas aplicaciones en el mundo real y es una parte importante de la automatización. Estas interrupciones pueden ser generadas externamente con la ayuda de hardware, como un interruptor o un sensor, o pueden ser generadas por software cuando se cumple una condición particular o se ha ejecutado un conjunto de instrucciones.

En este tutorial, aprenderás cómo utilizar las interrupciones de hardware en un PLC Arduino de Industrial Shields. Se trata de una visión general con un código de ejemplo para demostrar las capacidades con respecto a la gestión de las interrupciones y la ejecución de las placas que soportan esta característica. Para facilitar la comprensión y la demostración, haremos un bucle de una cadena de texto en el monitor de serie y lo interrumpiremos con algunos botones de hardware.

Requisitos

Configurar el IDE de Arduino con las librerías de Industrial Shields y su placa específica. Puedes encontrar el enlace al tutorial   aquí

Interrupt Inputs with Arduino

Hardware


Para este tutorial, el controlador industrial a utilizar es un M-DUINO PLC Arduino Ethernet 58 IOs Analógico/Digital PLUS

Si estás utilizando una placa diferente, asegúrate de que las entradas de interrupción están habilitadas y comprueba el estado del interruptor DIP. Puedes ir a la página de detalles técnicos de tu producto específico y comprobar la sección de hardware para asegurarte de que las interrupciones están habilitadas.





 
Sintaxis

Para inicializar la entrada de interrupción en la placa, debes utilizar la función attachInterrupt() con los siguientes parámetros::

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) 

  • digitalPinToInterrupt(pin) --> Sirve para inicializar el pin dado y asignarlo como la interrupción.

  • pin --> En este caso, no se utilizará el número de pin de Arduino, sino los escritos en sus respectivas placas. Por ejemplo, "I1_5" para la placa que estás utilizando.

  • ISR --> ISR --> Esto significa Rutina de Servicio de Interrupción, es una función que es llamada cuando se dispara la interrupción. Esto no debe tomar ningún parámetro y no devuelve nada, sin embargo, puede pasar variables globales.

  • mode --> Especifica cuándo debe activarse una interrupción.

    • LOW para activar la interrupción siempre que el pin esté bajo.

    • CHANGE para activar la interrupción cuando el pin cambia de valor.

    • RISING para disparar cuando el pin pasa de bajo a alto.

    • FALLING para cuando el pin pasa de alto a bajo

Las placas Due, Zero y MKR1000 también permiten:

    • HIGH para disparar la interrupción siempre que el pin esté alto.

ATENCIÓN: La placa Leonardo NO PERMITE:

    • LOW para activar la interrupción siempre que el pin esté bajo


Código

// Interrupt Example. Industrial Shields PLCs. 
// Board used M-DUINO PLC Arduino Ethernet 58 IOs Analog/Digital PLUS
int val1,val2,val3,val4 = 0;
///////Setting up the board and the pins
void setup() {
  Serial.begin(9600L);
  
  //Initalizing interrupt I1_5
  attachInterrupt(digitalPinToInterrupt(I1_5), isrI1_5, LOW);
  
  //Initalizing interrupt I1_6
  attachInterrupt(digitalPinToInterrupt(I1_6), isrI1_6, CHANGE);
  
  //Initalizing interrupt I2_6
    attachInterrupt(digitalPinToInterrupt(I2_5), isrI2_5, RISING);
    
  //Initalizing interrupt I2_6
  attachInterrupt(digitalPinToInterrupt(I2_6), isrI2_6, FALLING);
}
/////// Printing a String every seconds in a loop continuously to interrupt
void loop() {
 Serial.println("*****/Industrial Shields PLCs // Open Source Technologies/*****");
 delay(1000);
}
///////Interrupt Service Routines
void isrI1_5(){
  Serial.println("!!!!INTERRUPT 1_5!!!!!"); //ISR for I1_5
  }  
void isrI1_6 (){    
  Serial.println("!!!!INTERRUPT 1_6!!!!!"); //ISR for I1_6
  }
void isrI2_5(){
  Serial.println("!!!!INTERRUPT 2_5!!!!!"); //ISR for I2_5
  }
void isrI2_6 (){    
  Serial.println("!!!!INTERRUPT 2_6!!!!!"); //ISR for I2_6
  }
/////////////End//////////////

Enlaces relacionados

Cómo encontrar su PLC industrial perfecto

Leer >>

Interrupción externa mediante un sensor de etiquetas capacitivo con un PLC basado en Arduino

Leer >>

Interrupción externa mediante sensor de efecto hall con PLC basado en Arduino

Leer >>

Cómo utilizar las entradas de interrupción con las placas Arduino industriales
Boot & Work Corp. S.L., Amil Shrivastava
16 marzo, 2021
Compartir
Archivar

¿Buscas tu controlador lógico programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparación PLC industrial>>>

¿Quieres más información?

¡Rellena el formulario!

¡Cuéntame más!