C贸mo programar en Python las entradas de interrupci贸n del PLC industrial Raspberry
Programaci贸n en Python
25 enero, 2021 por
C贸mo programar en Python las entradas de interrupci贸n del PLC industrial Raspberry
Boot & Work Corp. S.L., Quesada Dani Salvans

Introducci贸n

Python es un lenguaje de programaci贸n de alto nivel que te permite hacer cosas complejas con pocas l铆neas de c贸digo. Un ejemplo de esto es el prop贸sito de este tutorial. Por lo tanto, en este post vamos a ver un ejemplo de como programar las entradas de interrupci贸n del Raspberry PLC con Python.聽聽


Requisitos

Los puntos clave que debes tener en cuenta son los siguientes:聽

  • Familia PLC Raspberry

  • Acceso al PLC: shh.聽 Puedes encontrar nn tutorial sobre c贸mo acceder al dispositivo a trav茅s de Linux o Windows en la Gu铆a del usuario del PLC Raspberry.

  • Python instalado


Enlaces relacionados

Conceptos b谩sicos sobre salidas digitales del PLC industrial Raspberry
Leer >>

C贸mo encontrar tu PLC industrial ideal
Leer >>

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

Leer >>

Productos dela familia PLC Raspberry
Leer >>


Ejemplo de c贸digo

Para este ejemplo, necesitas importar las librer铆as que puedes ver al principio del c贸digo, teniendo en cuenta que "signal", "sys" y "RPi.gpio" son imprescindibles para trabajar con entradas de interrupci贸n en Python con un PLC Raspberry. El INT_GPIO debe ser el GPIO de la Raspberry que vas a configurar como entrada de interrupci贸n, en este caso el 13, que es el INT. Si no conoces el mapeo entre los GPIOs de la Raspberry y las E/S de tu PLC, puedes echar un vistazo a estas tablas, incluidas tambi茅n en el Ficha t茅cnica y la Gu铆a de Usuario.聽




Para continuar con la explicaci贸n, debes saber que una se帽al es una interrupci贸n de software entregada a un proceso. El sistema operativo utiliza las se帽ales para informar de situaciones excepcionales a un programa en ejecuci贸n.聽

La primera funci贸n es signal_handler, una funci贸n que tiene que ser llamada si se anticipa un evento que desencadena una se帽al, y se le puede decir al sistema operativo que la ejecute cuando llegue ese tipo de se帽al en particular.聽 En este caso, este handler hace un GPIO.cleanup() y un sys.exit(0) cuando detecta un CTRL+C (comando que env铆a un SIGINT).聽

La segunda funci贸n se llama int_activated_callback y, dentro de ella, puedes poner el c贸digo que quieres que se ejecute cuando se active la interrupci贸n..

Por 煤ltimo, est谩 el GPIO.setmode, configur谩ndolo siguiendo la disposici贸n de los GPIOs del BCM, el GPIO.setup, configur谩ndolo con el n煤mero de las entradas de interrupci贸n del GPIO, si el flanco de activaci贸n va a ser el FALLING o el RISING, el callback de activaci贸n y el bouncing time (que es el periodo que no se va a activar ninguna interrupci贸n para evitar el rebote de la se帽al). El signal.signal es la funci贸n para activar el signal_handler, explicado anteriormente. El 煤ltimo bucle infinito es simplemente para probar que puedes estar ejecutando otros procesos en tu c贸digo mientras la interrupci贸n est谩 lista para ser activada.聽

As铆, si ejecutas este c贸digo, realizar谩 impresiones de "Trabajo" indefinidas hasta que se active la interrupci贸n. Cuando detecte un flanco descendente en la se帽al, las impresiones anteriores se detendr谩n, la interrupci贸n se activar谩 y ver谩s la impresi贸n "INT activada" una vez, luego las impresiones de "Trabajo" continuar谩n hasta que se active otra interrupci贸n (siempre respetando el tiempo de rebote de 1000 ms).

/*
   Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
import signal import sys import time import RPi.gpio as gpio import BUTTON.GPIO as gpio INT_GPIO = 13 def signal_handler(sif, frame): GPIO.cleanup() sys.exit(0) def int_activated_callback(channel): print("INT activated") if __name__ == '__main__': GPIO.setmode(GPIO.BCM) GPIO.setup(INT_GPIO, GPIO.FALLING, callback=int_activated_callback, bouncetime=1000) signal.signal(signal.SIGINT, signal_handler) while 1: print ("Work") time.sleep(0.1)


La interrupci贸n tiene que ser provocada por una activaci贸n de la se帽al de entrada, ya sea por un flanco ascendente o un flanco descendente. Para probarlo, puedes conectar el GND del sensor al GND optoaislado de la entrada que vas a utilizar ((-)IX.5) y la salida del sensor a la se帽al de entrada de interrupci贸n(IX.5/INT). Cuando el sensor digital se active, ver谩s la activaci贸n de la interrupci贸n tambi茅n.聽 Aqu铆 tienes un ejemplo de una de las entradas de interrupci贸n del PLC, con el pin GND y el pin SIGNAL::


驴Quieres m谩s informaci贸n sobre temas t茅cnicos y funcionalidad de nuestros equipos?

Suscr铆bete a nuestro blog para estar al d铆a de todas las novedades sobre programaci贸n y nuevas tecnolog铆as.


Encuentra lo que buscas. 隆Busca en nuestro Blog!

C贸mo programar en Python las entradas de interrupci贸n del PLC industrial Raspberry
Boot & Work Corp. S.L., Quesada Dani Salvans
25 enero, 2021
Compartir
Archivar

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


Comparaci贸n PLC industrial >>>

驴Quieres m谩s informaci贸n?

隆Rellena el formulario!

隆Cu茅ntame m谩s!