Cómo programar las entradas de interrupción del PLC industrial Raspberry con C

Programación en C de las entradas de interrupción del PLC Raspberry
3 de mayo de 2024 por
Cómo programar las entradas de interrupción del PLC industrial Raspberry con C
Boot & Work Corp. S.L., Ricard Franch Argullol

Introducción


¿Estás interesado en programar las entradas de interrupción del PLC industrial Raspberry usando C? Únete a nosotros mientras nos sumergimos en esta guía paso a paso. 


Este tutorial te proporciona los conocimientos esenciales para aprovechar las capacidades de interrupción en los PLCs Raspberry. Desde los requisitos de configuración hasta las complejidades de programación, esta guía te permite utilizar eficazmente las entradas de interrupción, mejorando la funcionalidad de sus PLCs Raspberry sin esfuerzo.

Requisitos

Configuración


Software


En primer lugar, su PLC debe estar ejecutando la imagen Raspberry Pi OS proporcionada por Industrial Shields. Si necesitas instalar una nueva, consulta este post: 


Instalación de un sistema operativo en el PLC Raspberry >>

En este tutorial utilizaremos esta librería para interactuar con las entradas de interrupción: WiringPi. WiringPi es una librería en C diseñada para interactuar con los pines GPIO de la Raspberry Pi, con muchas funciones incluyendo la gestión de interrupciones, que utilizaremos en esta ocasión. Para poder seguir este tutorial, necesitarás instalarlo en tu PLC Raspberry. Puedes descargarlo e instalarlo siguiendo los pasos descritos en su Repositorio de GitHub.


Hardware


Echemos un vistazo a los pines de interrupción del PLC Raspberry. Dependiendo del modelo, puede haber entre 2 y 6 pines en el PLC. Use las siguientes tablas para identificar los pines en su modelo y el GPIO asociado con cada entrada. Adicionalmente, WiringPi utiliza su propia nomenclatura de pines, la cual también esta incluida en la siguiente tabla:



Entrada PLC Raspberry (Analógica/Relé)

Pin GPIO

Pin WiringPi

I0.5 / I0.1

GPIO 13

23

I0.6 / I0.2

GPIO 12

26

I1.5 / I1.1

GPIO 27

2

I1.6 / I1.2

GPIO 5

21

I2.5 / I2.1

GPIO 26

25

I2.6 / I2.2

GPIO 4

7


Una vez identificados los pines de interrupción, puedes conectarlos correctamente. Los pines de interrupción están optoaislados para proteger el dispositivo de sobretensiones, por lo que hay 2 pines que debes conectar: la señal que estás monitorizando y su referencia de tierra. Comprueba el siguiente diagrama para ver cómo cablear correctamente su PLC. 

Recuerda! El PLC Raspberry debe ser alimentado por una fuente de alimentación de 12-24Vdc.


Programación


Ahora que tiene nuestro PLC correctamente configurado, puede empezar a programarlo. Como mencionamos anteriormente en este artículo, la librería WiringPi es usada para interactuar con las entradas de interrupción. En este simple ejemplo verás como disparar una interrupción desde un pin.


Lo primero que hay que hacer es incluir e inicializar la biblioteca:


#include <wiringPi.h>

...

int main (void) {
	​wiringPiSetup ();
	​...
}

Para que la interrupción funcione, necesitas definir una función que será llamada cuando se detecte una interrupción. A continuación, adjunta esta función a la interrupción de un pin específico utilizando la siguiente función, que toma 3 argumentos:


  • El pin al que queremos conectar la interrupción (según la nomenclatura WiringPi, ver la tabla al principio de este artículo).
  • El modo de interrupción: cuándo debe activarse (flanco descendente o ascendente).
  • El callback de la función que queremos ejecutar cuando se dispare la interrupción.
wiringPiISR (2, INT_EDGE_FALLING, &myInterrupt); // Arguments are: Pin, Interrupt type, Function callback

Ahora tienes todas las piezas necesarias para completar un programa que utilice las entradas de interrupción.


Por ejemplo, mira el siguiente código, que implementa un simple contador de las interrupciones en la entrada I0.5 de un PLC Raspberry. Si quieres probarlo en tu dispositivo, puedes compilarlo con este comando: gcc -o file file.c -l wiringPi . Mira como enlazar la libreria WiringPi!

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>

static volatile int globalCounter = 0;

void myInterrupt (void) { ++globalCounter; }

int main (void) {
  
  int gotOne;
  int myCounter = 0;

  wiringPiSetup ();
  wiringPiISR (23, INT_EDGE_FALLING, &myInterrupt);

  for (;;) {
    
    gotOne = 0;
    printf ("Waiting ... "); fflush (stdout);

    for (;;) {
    
      if (globalCounter != myCounter) {
	printf (" Interrupt detected. Counter: %5d\n", globalCounter);
	myCounter = globalCounter;
	++gotOne;
      }
      if (gotOne != 0)
	break;
      
    }
    
  }

  return 0;
}

Por último, puedes ejecutar el programa, lo que puede hacerse simplemente ejecutando el ejecutable generado. La siguiente captura de pantalla muestra el uso del programa: cada vez que se dispara una nueva interrupción, el contador se actualiza y su valor se imprime en stdout.

Usage of programme


Eso es todo por este post, ahora ya sabes cómo utilizar las entradas de interrupción del PLC Raspberry en C! 

If you want to know more

check out the following link and do not forget to read the other posts in this blog!



Buscar en nuestro blog

Cómo programar las entradas de interrupción del PLC industrial Raspberry con C
Boot & Work Corp. S.L., Ricard Franch Argullol 3 de mayo de 2024
Compartir

¿Estás buscando 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.


Industrial PLC comparison >>>