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

Nuestra familia de PLCs Raspberry se programa a través de Bash Scripts por defecto, aunque se puede programar con otros lenguajes de programación como Python. Esto puede ser muy útil porque Python es un lenguaje de programación de alto nivel y permite hacer cosas más complejas con menos líneas de código. Te mostramos cómo hacerlo en el siguiente tutorial. En este post verás un ejemplo de cómo programar las entradas de interrupción del PLC de la Raspberry 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.


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

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