Conectividad RS232/RS485 remota sin esfuerzo para PLCs PLCnext usando Pseudo TTY
En este artículo del Makers Blog discutimos las posibilidades y ventajas que un Com Server proporciona a la plataforma PLCnext.
Introducción
Los módulos de extensión que Phoenix Contact ofrece para sus PLCs pueden ser, por ejemplo, adaptadores seriales como:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- ...
Todos los módulos de extensión tienen una cosa en común: se pueden acceder cíclicamente vía datos de proceso. Esto proporciona la posibilidad de interactuar directamente con el dispositivo serial desde nuestra aplicación en tiempo real.
En algunos casos esto no es lo que queremos. En su lugar, queremos reutilizar bibliotecas existentes (C/C++) y no necesitamos el contexto de tiempo real. Sin embargo, encontraremos que estas bibliotecas usualmente están programadas para tener acceso directo a una interfaz COM o TTY.
Hay dos opciones para crear una interfaz TTY para un PLCnext Control:
- Implementar algunas funciones (C++ / C#) que creen una interfaz TTY para los adaptadores seriales AXL o IL desde dentro del
PLCnext Runtime. - Uso de dispositivos Com Server como el GW Device Server
El GW Device Server proporciona una interfaz transparente TCP a Serial. Con la ayuda de una herramienta como Socat podemos reenviar el tráfico Serial/TCP directamente a una interfaz pseudo TTY. Usar GW Device Server también proporciona la posibilidad de comunicarse con el dispositivo serial en ubicaciones remotas vía un canal encriptado TLS.
NOTA
En este tutorial, el PLC actúa como cliente y establece conexión a un GW Device Server.
(Sin embargo, también es posible cambiar el Socat del PLC a una opción de escucha y tener el GW como cliente que se conecta activamente al PLC.)
Configuración
Configurar el GW Device Server
Nos conectamos al GW Device Server vía Gestión Basada en Web. La dirección IP predeterminada del GW Device Server es 192.168.254.254.
Usamos la siguiente configuración:
Configuración LAN - Seguridad
- Habilitar Servidor SSH
- Habilitar Servidor Telnet
- Deshabilitar Modo de Datos Seguro
- Deshabilitar Servidor TFTP
Configuración Serial
- Configuración Puerto 1 (COM1): Habilitar Conexión TCP en Puerto 8000
- Configuración Puerto 2 (COM2): Habilitar Conexión TCP en Puerto 8001
Probar el GW Device Server
Para probar si hemos configurado el GW Device Server correctamente, primero conectamos nuestro PLC al GW Device Server vía Ethernet. Luego conectamos los dos adaptadores DSUB del GW Device Server entre sí.
Podemos probar rápidamente la configuración usando la herramienta Telnet. Con esta herramienta, podemos enviar datos del PLC al GW Device Server en Puerto 8000/COM1 a través del cable serial al Puerto 8001/COM2 y finalmente recibirlo de vuelta en el PLC.
Usamos los siguientes comandos:
ssh admin@192.168.1.10
sudo passwd root
su root
ip addr add 192.168.254.10 dev eth0
telnet 192.168.254.254 8000
## abrir otra sesión shell
telnet 192.168.254.254 8001
# Escribir algunos mensajes
Compilar Socat
Para compilar Socat fácilmente en un SO Linux, usamos los siguientes comandos:
mkdir tmp
cd tmp
git clone git://repo.or.cz/socat.git
cd socat
## TODO: Modificar a su ubicación de SDK
source /opt/pxc/release/axcf2152/2020/0/environment-setup-cortexa9t2hf-neon-pxc-linux-gnueabi
. /opt/pxc/release/axcf2152/2020/0/site-config-cortexa9t2hf-neon-pxc-linux-gnueabi
mkdir install
autoconf
./configure $CONFIGURE_FLAGS --prefix=$(pwd)/install --enable-openssl-method
make -j2
make install
Desplegar e instalar Socat
Para desplegar la instalación de Socat, ejecutamos el siguiente script:
cd tmp
mkdir -p deploy
cd deploy
mkdir -p usr
cp -r ../../Daemon/* .
cp -r ../socat/install/* usr/
# Crear paquete
tar -cf ../socat-binaries.tar .
cd ..
scp socat-binaries.tar admin@192.168.188.41:~
ssh -ttt admin@192.168.188.41 \
"mkdir -p /opt/plcnext/socat-binaries && \
tar -xf /opt/plcnext/socat-binaries.tar -C /opt/plcnext/socat-binaries"
Después de desplegar, ahora podemos hacer ssh a nuestro PLC. Por lo tanto, primero preparamos el PLC configurando los directorios y archivos de configuración ejecutando los siguientes comandos:
deploy$ ssh admin@192.168.1.10
admin@192.168.1.10:~$ su root
root@192.168.1.10$ mkdir -p /etc/default/socat
root@192.168.1.10$ touch /etc/default/socat/socat.conf
root@192.168.1.10$ touch /etc/init.d/SocatDaemon
Ahora, modificamos el archivo socat.conf para configurar los parámetros de la interfaz serial a nuestras necesidades.
nano /etc/default/socat/socat.conf
El contenido del archivo se ve así.
TARGETIP="192.168.254.254"
TARGETPORT="8000"
TTYNAME="/dev/ttyGWDeviceServer"
OPTIONS="pty,link=$TTYNAME tcp-connect:$TARGETIP:$TARGETPORT,forever,interval=15"
BAUD="9600"
PARITY=""
DATABITS="cs8"
STOPBITS="-cstopb"
FLOWCONTROL=""
Si necesitamos modificar más parámetros, también necesitaremos modificar el archivo SocatDaemon. Más información sobre parámetros TTY se puede encontrar en las páginas del manual de stty.
Ahora creamos un archivo SocatDaemon para conectar automáticamente al GW Device Server usando un demonio Socat.
NOTA:
Este archivo SocatDaemon es un ejemplo sin gestión de errores/desconexión, etc. por favor.
nano /etc/init.d/SocatDaemon
El archivo tiene el siguiente contenido. (haga clic para ver/ocultar código)
Ahora que todos los archivos de configuración están en su lugar, podemos proceder configurando los binarios de Socat y registrando el demonio Socat.
chmod +x /etc/init.d/SocatDaemon
cd /opt/plcnext/socat-binaries
chmod +x usr/bin/*
cp -r usr /
update-rc.d -s -v SocatDaemon 99
/etc/init.d/SocatDaemon start
Si todo está configurado correctamente, podemos ver el demonio en ejecución usando un comando como ps -e | grep socat. También podemos revisar los logs de Socat ubicados en cat /var/log/socat.log.
Acceder a la interfaz TTY desde una terminal
Ahora podemos enviar mensajes sobre la interfaz TTY.
sudo echo "PLC to GW $var" > /dev/GWDeviceServer
Para probar continuamente el pseudo TTY, podemos usar un comando como
while true; do sleep 5 && sudo echo "PLC to GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
El tráfico entrante puede mostrarse ejecutando cat /dev/GWDeviceServer. Ahora cualquier aplicación puede acceder al dispositivo serial conectado al GW Device Server como si estuviera conectado directamente al PLC.
Tecnología Industrial
- Los PLC industriales impulsan variadores de velocidad
- Carpa de Vias en PCB Explicada: Beneficios, Proceso y Mejores Prácticas
- Monitorización en la nube: Sistema de control remoto para gestión de activos en tiempo real
- 5 Beneficios clave del control remoto de producción para la industria moderna
- Acceso Remoto Seguro gRPC con grpcurl en Dispositivos PLCnext
- Optimizar dispositivos PLCnext Control con SNMP: Guía práctica
- Gestión de clústeres en PLCnext: Aprovechando Kubernetes para automatización industrial
- Monitorización en tiempo real de PLCnext con dashboards Tableau
- Crea dashboards Power BI desde datos PLCnext en la nube
- Crea dashboards Grafana en tiempo real para PLCnext Control en Azure IoT Hub
- Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink