Comunicación con dispositivos PLC con Snap7 en Python

Comunicación con dispositivos PLC con Snap7 en Python

Snap7 es un software multiplataforma para comunicarse de igual manera que lo harían de forma nativa PLCs del fabricante SIEMENS empleando tecnología Ethernet y protocolo S7. Entre sus características principales destacan:

  • Arquitectura diseñada para 32 y 64 bits.
  • Software Open Source.

En este tutorial aprenderemos a utilizar Snap7 para comunicarnos con dispositivos PLC en Python.

Requisitos

Para seguir este tutorial, necesitarás tener instalado Python 3.6 o superior. Además, deberás tener instalado Snap7. Puedes descargarlo desde el sitio web oficial: https://snap7.sourceforge.io/

Instalación de Snap7

Para instalar Snap7 en Windows, sigue estos pasos:

  1. Descarga el archivo de instalación desde el sitio web oficial.
  2. Ejecuta el archivo de instalación.
  3. Sigue las instrucciones del asistente de instalación.

Para instalar Snap7 en Linux, sigue estos pasos:

  1. Abre una terminal.
  2. Ejecuta el siguiente comando para descargar el paquete Snap7:
sudo apt-get install snap7

Iniciar sesión en Snap7

Para iniciar sesión en Snap7, abre una terminal y ejecuta el siguiente comando:

s7-client

Te aparecerá una pantalla como la siguiente:

[S7-Client]

IP: 192.168.0.100
Port: 102

[S7-Client]

Logon to PLC

Enter password:

Introduce la contraseña del PLC y pulsa Enter.

Importar la librería Snap7 en Python

Para importar la librería Snap7 en Python, ejecuta el siguiente comando:

Python
import snap7

Crear un cliente Snap7

Para crear un cliente Snap7, utiliza el siguiente código:

Python
client = snap7.client.Client()

Este código crea un cliente Snap7 que se conectará al PLC especificado en la variable ip y el puerto especificado en la variable port.

Conectarse al PLC

Para conectarse al PLC, utiliza el siguiente código:

Python
client.connect(ip, port)

Este código intenta conectarse al PLC. Si la conexión es exitosa, devolverá True.

Leer datos del PLC

Para leer datos del PLC, utiliza el siguiente código:

Python
data = client.read_area(area, start_address, quantity)

Este código lee quantity bytes de datos del área area desde la dirección start_address.

Escribir datos en el PLC

Para escribir datos en el PLC, utiliza el siguiente código:

Python
client.write_area(area, start_address, data)

Este código escribe data bytes de datos en el área area desde la dirección start_address.

Desconectarse del PLC

Para desconectarse del PLC, utiliza el siguiente código:

Python
client.disconnect()

Este código desconecta al cliente del PLC.

Ejemplo

En el siguiente ejemplo, leeremos el valor de una variable BOOL del PLC:

Python
import snap7

# Conectarse al PLC
client = snap7.client.Client()
client.connect("192.168.0.100", 102)

# Leer la variable BOOL
data = client.read_area(snap7.S7Area.DB, 0, 1)

# Imprimir el valor de la variable
print(data)

# Desconectarse del PLC
client.disconnect()

Este código imprimirá el siguiente valor:

True

Ejercicios

  • Escribe un código que lea el valor de una variable INT del PLC.
  • Escribe un código que escriba el valor de una variable BOOL en el PLC.
  • Escribe un código que lea el valor de una variable STRING del PLC.

Conclusión

En este tutorial hemos aprendido a utilizar Snap7 para comunicarnos con dispositivos PLC en Python.