Moeiteloze Remote RS232/RS485 Connectiviteit voor PLCnext PLC's met Pseudo TTY
In deze Makers Blog-artikel bespreken we de mogelijkheden en voordelen die een Com Server biedt aan het PLCnext-platform.
Inleiding
De uitbreidingsmodules die Phoenix Contact voor zijn PLC's aanbiedt, kunnen bijvoorbeeld seriële adapters zijn zoals:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- ...
Alle uitbreidingsmodules hebben één ding gemeen: ze kunnen cyclisch via procesdata worden benaderd. Dit biedt de mogelijkheid om direct met het seriële apparaat te interacteren vanuit onze realtime-applicatie.
In sommige gevallen is dit niet wat we willen. In plaats daarvan willen we bestaande (C/C++) bibliotheken hergebruiken en hebben we de realtime-context niet nodig. Echter, we zullen ontdekken dat deze bibliotheken meestal geprogrammeerd zijn om directe toegang te hebben tot een COM- of TTY-interface.
Er zijn twee opties om een TTY-interface voor een PLCnext Control te creëren:
- Enkele functies implementeren (C++ / C#) die een TTY-interface voor de AXL- of IL-seriële adapters van binnen de
PLCnext Runtimecreëren. - Gebruik van een COM-Server-apparaat zoals de GW Device Server
De GW Device Server biedt een transparante TCP naar Serial-interface. Met behulp van een tool zoals Socat kunnen we de Serial/TCP-verkeer direct doorsturen naar een pseudo-TTY-interface. Het gebruik van GW Device Server biedt ook de mogelijkheid om met het seriële apparaat op externe locaties te communiceren via een TLS-versleuteld kanaal.
LET OP
In deze tutorial fungeert de PLC als client en stelt de verbinding tot stand met een GW Device Server.
(Het is echter ook mogelijk om de PLC Socat te schakelen naar een luisteroptie en de GW als client actief te laten verbinden met de PLC.)
Opstelling
GW Device Server Instellen
We verbinden met de GW Device Server via het Web Based Management. Het standaard IP-adres van de GW Device Server is 192.168.254.254.
We gebruiken de volgende instellingen:
LAN-instellingen – Beveiliging
- SSH-server inschakelen
- Telnet-server inschakelen
- Secure Data Mode uitschakelen
- TFTP-server uitschakelen
Seriële Instellingen
- Poort 1 Configuratie (COM1): TCP-verbinding inschakelen op poort 8000
- Poort 2 Configuratie (COM2): TCP-verbinding inschakelen op poort 8001
GW Device Server Testen
Om te testen of we de GW Device Server correct hebben ingesteld, verbinden we eerst onze PLC met de GW Device Server via Ethernet. Vervolgens verbinden we de twee DSUB-adapters van de GW Device Server met elkaar.
We kunnen de opstelling snel testen met het hulpmiddel Telnet. Met dit hulpmiddel kunnen we gegevens van de PLC naar de GW Device Server op Poort 8000/COM1 sturen door de seriële kabel naar Poort 8001/COM2 en uiteindelijk weer op de PLC ontvangen.
We gebruiken de volgende commando's:
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 ## open een andere shell-sessie
telnet 192.168.254.254 8001 # Typ enkele berichten
Socat Bouwen
Om Socat gemakkelijk te bouwen op een Linux OS, gebruiken we de volgende commando's:
mkdir tmp
cd tmp
git clone git://repo.or.cz/socat.git
cd socat
## TODO: Aanpassen aan uw SDK-locatie
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
Socat Implementeren en Installeren
Om de Socat-installatie te implementeren, voeren we het volgende script uit:
cd tmp
mkdir -p deploy
cd deploy
mkdir -p usr
cp -r ../../Daemon/* .
cp -r ../socat/install/* usr/
# Pakket aanmaken
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"
Na het implementeren kunnen we nu ssh naar onze PLC. Daarvoor bereiden we de PLC eerst voor door de mappen en config-bestanden in te stellen door de volgende commando's uit te voeren:
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
Nu wijzigen we het socat.conf-bestand om de parameters van de seriële interface naar onze behoeften te configureren.
nano /etc/default/socat/socat.conf
De inhoud van het bestand ziet er zo uit.
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=""
Als we verdere parameters moeten wijzigen, moeten we ook het SocatDaemon-bestand wijzigen. Meer informatie over TTY-parameters vindt u in de stty-manual-pagina's.
Nu maken we een SocatDaemon-bestand om automatisch verbinding te maken met de GW Device Server met behulp van een Socat-daemon.
LET OP:
Dit SocatDaemon-bestand is een voorbeeld zonder fout-/ontkoppelingbeheer etc. alstublieft.
nano /etc/init.d/SocatDaemon
Het bestand heeft de volgende inhoud. (klik om code te tonen/verbergen)
Nu alle config-bestanden op hun plek staan, kunnen we doorgaan met het instellen van de Socat-binaries en het registreren van de Socat-daemon.
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
Als alles correct is ingesteld, kunnen we de draaiende daemon zien met een commando zoals ps -e | grep socat. We kunnen ook de Socat-logs bekijken op cat /var/log/socat.log.
Toegang tot de TTY-interface vanuit een Terminal
Nu kunnen we berichten verzenden via de TTY-interface.
sudo echo "PLC naar GW $var" > /dev/GWDeviceServer
Om de pseudo-TTY continu te testen, kunnen we een commando gebruiken zoals
while true; do sleep 5 && sudo echo "PLC naar GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
Binnenkomend verkeer kan worden weergegeven door cat /dev/GWDeviceServer uit te voeren. Nu kan elke applicatie toegang krijgen tot het seriële apparaat dat verbonden is met de GW Device Server alsof het direct met de PLC is verbonden.
Industriële technologie
- Industriële PLC's Sturen Variabele Snelheidsaandrijvingen
- PCB Via Tenting Uitgelegd: Voordelen, Proces en Best Practices
- Cloud Monitoring: Extern controlsysteem voor real-time activabeheer
- 5 Belangrijkste voordelen van externe productiecontrole voor de moderne industrie
- Veilige Remote gRPC Toegang Met grpcurl Op PLCnext Apparaten
- PLCnext Control Apparaten Optimaliseren met SNMP: Een Praktische Gids
- Clusterbeheer op PLCnext: Kubernetes Benutten voor Industriële Automatisering
- Real-time PLCnext-monitoring met Tableau-dashboards
- Power BI-dashboards maken vanuit PLCnext-clouddata
- Real-time Grafana-dashboards maken voor PLCnext Control in Azure IoT Hub
- Java 9-apps optimaliseren op PLCnext Control met Jlink