Conexión de PLCnext a RS232/RS485 remoto a través de pseudo TTY
En este artículo del Makers Blog, discutimos las posibilidades y ventajas que proporciona un servidor Com a la plataforma PLCnext.
Introducción
Los módulos de ampliación que ofrece Phoenix Contact para sus PLC pueden ser, por ejemplo, adaptadores serie como:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- BI IL RS UNI
- …
Todos los módulos de extensiones tienen algo en común:se puede acceder a ellos cíclicamente a través de datos de proceso. Esto brinda la posibilidad de interactuar directamente con el dispositivo serie desde nuestra aplicación en tiempo real.
En algunos casos esto no es lo que queremos. En su lugar, queremos reutilizar las bibliotecas existentes (C/C++) y no necesitamos el contexto en tiempo real. Sin embargo, encontraremos que estas bibliotecas generalmente 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
:
- Implemente algunas funciones (C++/C#) que crean una interfaz TTY para los adaptadores seriales AXL o IL desde dentro del
PLCnext Runtime
. - Uso de dispositivos COM-Server como GW Device Server
El GW Device Server
proporciona un TCP to Serial
transparente interfaz. Con la ayuda de una herramienta como Socat
podemos reenviar el tráfico Serial/TCP directamente a una interfaz pseudo TTY. Usando GW Device Server
también brinda la posibilidad de comunicarse con el dispositivo serial en ubicaciones remotas a través de 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 PLC Socat
a una opción de escucha y hacer que el GW como cliente se conecte activamente al PLC).
Configuración

Configuración del servidor de dispositivos GW
Nos conectamos al GW Device Server
a través de la 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 de LAN - Seguridad
- Habilitar servidor SSH
- Habilitar servidor Telnet
- Deshabilitar el modo de datos seguros
- Desactivar servidor TFTP
Configuración de serie
- Configuración del puerto 1 (COM1):habilite la conexión TCP en el puerto 8000
- Configuración del puerto 2 (COM2):habilite la conexión TCP en el puerto 8001
Prueba del servidor de dispositivos GW
Para probar si hemos configurado el GW Device Server
correctamente, primero conectamos nuestro PLC al GW Device Server
a través de 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 desde el PLC al GW Device Server
en Port8000/COM1 a través del cable serial a Port8001/COM2 y finalmente recíbalo en el PLC.
Usamos los siguientes comandos:
ssh [email protected]
sudo passwd root
su root
ip addr add 192.168.254.10 dev eth0
telnet 192.168.254.254 8000
## open another shell session
telnet 192.168.254.254 8001
# Type some messages

Edificio Socat
Para construir Socat
fácilmente en un sistema operativo Linux, usamos los siguientes comandos:
mkdir tmp
cd tmp
git clone git://repo.or.cz/socat.git
cd socat
## TODO: Modify to your SDK location
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
Implementación e instalación de Socat
Para implementar el Socat
instalación, ejecutamos el siguiente script:
cd tmp
mkdir -p deploy
cd deploy
mkdir -p usr
cp -r ../../Daemon/* .
cp -r ../socat/install/* usr/
# Create package
tar -cf ../socat-binaries.tar .
cd ..
scp socat-binaries.tar [email protected]:~/
ssh -ttt [email protected] \
"mkdir -p /opt/plcnext/socat-binaries && \
tar -xf /opt/plcnext/socat-binaries.tar -C /opt/plcnext/socat-binaries"
Después de la implementación, ahora podemos 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 [email protected]
[email protected]:~$ su root
[email protected]$ mkdir -p /etc/default/socat
[email protected]$ touch /etc/default/socat/socat.conf
[email protected]$ touch /etc/init.d/SocatDaemon
Ahora, modificamos el socat.conf
archivo 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="csN 8"
STOPBITS="-cstopb"
FLOWCONTROLL=""
Si necesitamos modificar más parámetros, tendremos que modificar también el SocatDaemon
expediente. Puede encontrar más información sobre los parámetros de TTY en las páginas del manual de stty.
Ahora creamos un SocatDaemon
archivo para conectarse automáticamente al GW Device Server
usando un Socat
demonio.
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 continuar configurando el Socat
binarios y registrando el Socat
demonio.
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 comprobar el Socat
registros ubicados en cat /var/log/socat.log
.
Acceso a la interfaz TTY desde un terminal
Ahora podemos enviar mensajes a través de 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 se puede mostrar ejecutando cat /dev/GWDeviceServer
. Ahora cualquier aplicación puede acceder al dispositivo serie conectado al servidor de dispositivos GW como si estuviera conectado directamente al PLC.
Tecnología Industrial
- PLC para accionamientos en la industria
- ¿Qué es PCB a través de tiendas de campaña?
- Monitoreo en la nube, un sistema de control remoto
- 5 ventajas del control remoto de la producción
- gRPC remoto usando grpcurl
- Gestión de un dispositivo PLCnext Control a través de SNMP
- ¿Gestión de clústeres en PLCnext?
- Tablero PLCnext de Tableau
- Informes de PLCnext Power BI
- Paneles de PLCnext Grafana
- Aplicación Java en PLCnext Control