Ir al contenido

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


¿Quieres aprender a programar las interrupciones de entrada en un PLC industrial Raspberry usando C? ¡Únete a nosotros mientras te guiamos paso a paso! 


Este tutorial te enseña lo básico para usar las capacidades de interrupción en los PLCs Raspberry. Desde la configuración hasta la programación avanzada, 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, tu PLC debe ejecutar 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, usaremos la librería  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, en el PLC puede haber entre 2 y 6 pines. Usa las siguientes tablas para identificar los pines en tu 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 tienes el PLC correctamente configurado, puede empezar a programarlo. Como mencionamos anteriormente en este post, 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! 

Si quieres saber más

¡consulta el siguiente enlace y no olvides leer las demás entradas de este 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 esta publicación
Etiquetas

¿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.

Comparativa de PLCs