Connectivité RS232/RS485 distante sans effort pour PLCnext via Pseudo TTY
Dans cet article Makers Blog, nous discutons des possibilités et avantages qu'un Com Server apporte à la plateforme PLCnext.
Introduction
Les modules d'extension Phoenix Contact pour ses PLC peuvent être des adaptateurs série comme :
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- …
Tous ces modules ont un point commun : ils sont accessibles cycliquement via les données de process. Cela permet d'interagir directement avec le périphérique série depuis notre application temps réel.
Dans certains cas, ce n'est pas ce qu'on veut. On veut réutiliser des bibliothèques C/C++ existantes sans avoir besoin du contexte temps réel. Or ces bibliothèques sont généralement programmées pour avoir un accès direct à une interface COM ou TTY.
Deux options pour créer une interface TTY sur un PLCnext Control :
- Implémenter des fonctions (C++ / C#) créant une interface TTY pour les adaptateurs série AXL ou IL depuis le
PLCnext Runtime. - Utiliser un périphérique COM-Server tel que le GW Device Server.
Le GW Device Server fournit une interface transparente TCP vers Série. Avec un outil comme Socat, on peut rediriger le trafic Série/TCP directement vers une interface pseudo TTY. L'utilisation du GW Device Server permet aussi de communiquer avec le périphérique série sur des sites distants via un canal chiffré TLS.
NOTE
Dans ce tutoriel, le PLC agit en client et établit la connexion vers un GW Device Server.
(Il est aussi possible d'inverser : PLC Socat en écoute et GW en client actif.)
Configuration
Configuration du GW Device Server
Connectez-vous au GW Device Server via la gestion Web. IP par défaut : 192.168.254.254.
Réglages utilisés :
LAN Settings – Security
- Enable SSH Server
- Enable Telnet Server
- Disable Secure Data Mode
- Disable TFTP Server
Serial Settings
- Port 1 Configuration (COM1) : Enable TCP Connection on Port 8000
- Port 2 Configuration (COM2) : Enable TCP Connection on Port 8001
Tester le GW Device Server
Pour tester la configuration : connectez le PLC au GW Device Server via Ethernet. Reliez les deux adaptateurs DSUB du GW Device Server entre eux.
Test rapide avec Telnet : envoyer des données du PLC vers GW Device Server port 8000/COM1, par le câble série vers port 8001/COM2, et les recevoir de retour au PLC.
Commandes :
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
## ouvrir une autre session shell
telnet 192.168.254.254 8001
# Taper des messages
Compiler Socat
Pour compiler Socat facilement sur Linux :
mkdir tmp
cd tmp
git clone git://repo.or.cz/socat.git
cd socat
## TODO: Adapter à votre emplacement 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
Déployer et installer Socat
Script de déploiement :
cd tmp
mkdir -p deploy
cd deploy
mkdir -p usr
cp -r ../../Daemon/* .
cp -r ../socat/install/* usr/
# Créer package
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"
Après déploiement, préparez le PLC en créant les dossiers et fichiers de config :
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
Modifiez socat.conf pour configurer les paramètres de l'interface série :
nano /etc/default/socat/socat.conf
Contenu du fichier :
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"
FLOWCONTROLL=""
Pour modifier d'autres paramètres, il faudra aussi modifier SocatDaemon. Plus d'infos sur les paramètres TTY dans les pages man de stty.
Créez maintenant un fichier SocatDaemon pour connecter automatiquement au GW Device Server via un démon Socat.
NOTE :
Ce fichier SocatDaemon est un exemple sans gestion d'erreurs/déconnexion etc.
nano /etc/init.d/SocatDaemon
Le fichier contient : (cliquer pour afficher/masquer le code)
Maintenant que tous les fichiers de config sont en place, installez les binaires Socat et enregistrez le démon :
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 tout est correct, on voit le démon tourner avec ps -e | grep socat. On peut aussi consulter les logs : cat /var/log/socat.log.
Accéder à l'interface TTY depuis un terminal
On peut maintenant envoyer des messages via l'interface TTY :
sudo echo "PLC to GW $var" > /dev/GWDeviceServer
Pour tester en continu le pseudo TTY :
while true; do sleep 5 && sudo echo "PLC to GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
Le trafic entrant s'affiche avec cat /dev/GWDeviceServer. Maintenant toute application peut accéder au périphérique série connecté au GW Device Server comme s'il était directement connecté au PLC.
Technologie industrielle
- Les API industriels alimentent les variateurs de vitesse
- Le tentage de via PCB expliqué : Avantages, processus et meilleures pratiques
- Surveillance Cloud : système de contrôle à distance pour la gestion d'actifs en temps réel
- 5 avantages clés du contrôle de production à distance pour l'industrie moderne
- Accès distant gRPC sécurisé avec grpcurl sur appareils PLCnext
- Optimiser les contrôleurs PLCnext Control avec SNMP : guide pratique
- Gestion de cluster sur PLCnext : exploiter Kubernetes pour l'automatisation industrielle
- Surveillance temps réel PLCnext avec tableaux de bord Tableau
- Créer des tableaux de bord Power BI à partir des données cloud PLCnext