Introducción
PROFINET es una solución de Ethernet industrial abierta basada en estándares internacionales. Es un protocolo de comunicación diseñado para intercambiar datos entre controladores y dispositivos en un entorno de automatización para el control industrial.
En este post, ejecutaremos la pila de dispositivos PROFINET de p-net y su aplicación de ejemplo en la industria PLC Raspberry como dispositivo IO, y configuraremos un segundo PLC industrial Raspberry Pi como controlador IO con Codesys.
Enlaces relacionados
PROFINET
PROFINET is an industry technical standard for data communication over industrial Ethernet, designed for collecting data from, and controlling equipment in industrial systems, with particular strength in delivering data under tight time constraints. PROFINET supports you in creating integrated processes with real-time communication and connecting them up to the cloud via OPC UA.
The openness and flexibility of PROFINET mean you enjoy maximum freedom when designing your machine and system structure. Its efficiency allows you to use available resources optimally, while significantly increasing plant availability. PROFINET's performance sustainably increases productivity.
Para garantizar un rendimiento adecuado, PROFINET suministra datos a través de los siguientes canales de comunicación:
- TCP/IP (o UDP/IP)
- PROFINET en tiempo real (RT)
- PROFINET en tiempo real isócrono (IRT)
- Redes sensibles al tiempo (Time Sensitive Networking (TSN))
Fíjate en el modelo ISO/OSI, un modelo de siete capas que describe genéricamente las capas de abstracción de un sistema de comunicación. Cualquier comunicación de red puede dividirse en una serie de capas.
Ethernet se sitúa en la capa 1 (capa física) y en la capa 2 (capa de enlace de datos) del modelo ISO/OSI. Las tramas de Ethernet incluyen información como las direcciones MAC del emisor y el receptor, el etiquetado de LAN virtual (VLAN) y la calidad del servicio (QoS).
PROFINET sits on Layer 7 of the ISO/OSI model since it is an application. It defines cyclic and acyclic communication between components, including diagnostics, functional safety, alarms, and other related information. Also, PROFINET is based on standard Ethernet for its communication medium.
High bandwidth, large message size, and versatility are just some of the benefits of having Ethernet in the industrial environment.
Tutorial
En este post, vamos a ejecutar la pila de dispositivos PROFINET p-net y su aplicación de ejemplo de rt-labs para la automatización industrial. Vamos a implementar un dispositivo PROFINET IO, teniendo un módulo IO con 8 entradas y 8 salidas digitales, y un PLC basado en Raspberry Pi como controlador IO ejecutando el runtime Codesys para la automatización de Raspberry Pi. Una vez que consigamos que la aplicación de ejemplo se ejecute en nuestros PLCs Raspberry, seremos capaces de comunicar ambos PLCs Raspberry con PROFINET.
Requisitos
- 2x PLCs Raspberry
- Hub Ethernet USB
- 1x Suministro de energía
- 2x Cables Ethernet
- Ordenador portátil Windows (o máquina virtual Windows) con CODESYS
- Ordenador portátil Linux o una pantalla con cable HDMI para conectarse a su controlador lógico programable Raspberry a través de SSH
Configuración del controlador IO
1. En primer lugar, establece una dirección IP estática para Ethernet desde tu ordenador portátil con Windows: 192.168.0.60. Conecta un cable Ethernet desde tu portátil Windows a tu PLC industrial Raspberry Pi y conéctate a través de SSH:
Como alternativa, puedes conectar un cable micro HDMI desde el PLC Raspberry a un monitor.
Establece una dirección IP estática para la interfaz eth0 de tu PLC Raspberry IO-Controller: 192.168.0.100.
2. Ves a tu ordenador portátil con Windows, y descarga e instala el Sistema de desarrollo CODESYS V3 y el CODESYS Control para Raspberry Pi SL. Existe una versión de prueba gratuita. Es necesario registrarse. Y con la versión de prueba, tendrás que reiniciar el tiempo de ejecución de Codesys en el PLC Raspberry cada dos horas.
3. Una vez instalado, abre Codesys y crea un nuevo proyecto estándar. En la siguiente ventana que aparece, selecciona el dispositivo "Codesys Control for Raspberry Pi SL" y selecciona programar en "Texto estructurado (ST)".
Nota: Si no puedes ver el dispositivo "Codesys Control for Raspberry Pi SL" significa que la instalación no se ha realizado correctamente. Inténtalo de nuevo y comprueba que tu dispositivo en el menú de la izquierda aparece como "Codesys Control for Raspberry Pi SL".
4. En el menú superior, utiliza Tools > Update Raspberry Pi > Type Username and Password > Scan your "IP address". 5. Selecciona la IP estática de la Raspberry Pi (Por ejemplo, para este tutorial, 192.168.0.100).
5. Haz doble clic en el "Dispositivo (CODESYS Control for Raspberry Pi SL)" > Haz clic en la pestaña "Scan Network" y selecciona tu Raspberry PLC. El marcador de la imagen debería volverse verde. Para verificar la comunicación, ve a la pestaña "Device" y "Send Echo Service".
Nota: Si tienes algún problema, haz clic con el botón derecho del ratón en "Device (CODESYS Control for Raspberry Pi SL)" > Actualizar dispositivo... > Mostrar todas las versiones (sólo para expertos) > Y selecciona la misma versión que elegiste al crear el nuevo proyecto, en este caso: CODESYS Control for Raspberry Pi SL - Versión 4.0.1.0. Y vuelve a intentar el paso 5.
6. Go to the rt-labs Github and save this file on your Windows laptop.
7. Vuelve a Codesys, en el menú superior "Tools" ("Herramientas"), selecciona "Device Repository" ("Repositorio de dispositivos") > Instalar > selecciona el archivo GSDML que acabas de guardar.
8. En el "Device (CODESYS Control for Raspberry Pi SL)" del panel de dispositivos, haga clic con el botón derecho y seleccione "Add Device..." > Adaptador Ethernet > Ethernet.
9. Haz clic con el botón derecho del ratón en Ethernet > select "Add Device..." > "Profinet IO" > "Profinet IO Master" > "PN_Controller".
10. Haz clic con el botón derecho del ratón en "PN_Controller (PN-Controller)" > Selecciona "Añadir dispositivo... " > "P-Net Sample App".
11. Haz clic con el botón derecho del ratón en la "P_Net_Sample_App (P-Net Sample App)" > Seleccione "Añadir dispositivo..." > "Fieldbuses" > "Profinet IO" > "Profinet IO Module" > "DIO 8xLogicLevel".
12. Ve a la Ethernet del paso 8 y haz doble clic > Selecciona la interfaz "eth0". La dirección IP se actualizará después.
13. Ve a "PN_Controller" en el menú de la izquierda y modifica la Primera dirección IP 192.168.0.50 y la Última dirección IP 192.168.0.60 .
14. Ve al nodo "P_Net_Sample_App" en el menú de la izquierda > Parámetro IP > Ajusta la dirección IP a la dirección existente de tu IO-Device: 192.168.0.50.
15. Ve a tu proyecto en el panel izquierdo > Device (CODESYS Control for Raspberry Pi SL) > PLC Logic > Application > PLC_PRG (PRG).
16. Hay dos secciones, la de las variables en la parte superior y la del programa en la inferior.
Sección de las variables
PROGRAM PLC_PRG VAR in_pin_button_LED: BOOL; out_pin_LED: BOOL; in_pin_button_LED_previous: BOOL; flashing: BOOL; oscillator_state: BOOL := FALSE; oscillator_cycles: UINT := 0; END_VAR
Sección del programa
oscillator_cycles := oscillator_cycles + 1;
IF oscillator_cycles > 200 THEN
oscillator_cycles := 0;
oscillator_state := NOT oscillator_state;
END_IF
IF in_pin_button_LED = TRUE THEN IF in_pin_button_LED_previous = FALSE THEN flashing := NOT flashing; END_IF out_pin_LED := TRUE; ELSIF flashing = TRUE THEN out_pin_LED := oscillator_state; ELSE out_pin_LED := FALSE; END_IF in_pin_button_LED_previous := in_pin_button_LED;
17. Haz clic con el botón derecho del ratón en "DIO_8xLogicLevel" > "Edit IO mapping..." > Haz doble clic en el icono del "Bit de entrada 7" > Haz clic en el botón [...] > Ve a Aplicación > PLC_PRG > "in_pin_button_LED".
18. Haz clic con el botón derecho del ratón en "DIO_8xLogicLevel" > "Edit IO mapping..." > Haz doble clic en el icono del "Bit de salida 7" > Haz clic en el botón [...] > Ve a Aplicación > PLC_PRG > "out_pin_LED".
19. Haz doble clic en la Aplicación > "Configuración de tareas" > Tarea principal > Selecciona "Cíclico" > 4 ms.
20. Haz doble clic en la aplicación > "Profinet_CommunicationTask" > Selecciona "Cyclic" > 10 ms. Utiliza la prioridad 30.
21. En el menú superior, ve a Build > Generate Code.
22. En el menú superior, ve a Online > Login, para transferir la aplicación a la Raspberry Pi. Selecciona "Sí" en la ventana emergente.
23. Ve al menú superior Herramientas > "Actualizar Raspberry Pi" > Información del sistema, y mira en el cuadro de texto "Información de tiempo de ejecución" para seguir los registros del controlador.
24. Una vez configurado el IO-Controller, puedes apagar la máquina Windows que ejecuta la aplicación Codesys.
Recuerda que debes apagar y encender el controlador IO del PLC Raspberry cada dos horas si utilizas la versión de prueba.
25. Instala Wireshark. Comprueba que tu PLC Raspberry IO-Controller envía paquetes LLDP cada 5 segundos.
Configuración del dispositivo IO
25. Ahora, vamos a configurar el IO-Device para ejecutar la aplicación PROFINET desde rt-labs.
26. Enciende el IO-Device Raspberry PLC, cambia su dirección IP a 192.168.0.50 y conéctalo al IO-Controller Raspberry PLC.
27. Conecta tu PLC de código abierto Raspberry Pi a Internet vía LAN o WiFi para poder descargar el software.
28. Para compilar p-net en Raspberry, es necesario descargar primero algunos paquetes:
sudo apt update
sudo apt install snapd
sudo reboot
sudo snap install cmake --classic
29. Verifica la versión instalada:
cmake --version
30. Instala git:
sudo apt install git
31. Crea un directorio llamado profinet:
mkdir /home/pi/profinet cd /home/pi/profinet
32. Clona la fuente:
git clone --recurse-submodules https://github.com/rtlabs-com/p-net.git
33. Configura y crea la compilación:
cmake -B build -S p-net
34. Compila el código:
cmake --build build --target install
35. Configura y crea la complicación:
cmake -B build -S p-net
36. Ejecuta este comando desde el directorio de profinet:
snap run cmake -B build -S p-net -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DUSE_SCHED_FIFO=ON
37. Ve al directorio de compilación:
cd build
38. We are going to test this application with plain files. So, make two files to simulate buttons:
touch /home/pi/profinet/build/button1.txt touch /home/pi/profinet/build/button2.txt
40. Ejecuta la aplicación con los dos botones de archivos planos:
sudo ./pn_dev -vvvv -b /home/pi/profinet/build/button1.txt -d /home/pi/profinet/build/button2.txt
41. Si sólo tienes una terminal, necesitas ejecutar la aplicación en segundo plano para escribir manualmente 1 o 0 en el archivo /home/pi/profinet/build/buttonX.txt para cambiar sus valores así:
echo 1 > /home/pi/profinet/build/button1.txt echo 0 > /home/pi/profinet/build/button1.txt
Para más información sobre el tutorial, por favor visita este enlace .
¡Ahora es tu turno!
Ahora es el momento de que empieces a desarrollar tus propias aplicaciones. Puedes utilizar la aplicación de ejemplo como plantilla de partida. Experimenta modificando los módulos disponibles y los tipos de datos que envían y reciben. ¡Modifica tu archivo GSDML en consecuencia para explicar el comportamiento de los dispositivos IO a la herramienta de configuración del PLC!
Tutorial de PROFINET & Raspberry PLC: Cómo activar alarmas con CODESYS