Простая удаленная RS232/RS485 связь для PLCnext через Pseudo TTY
В этой статье Makers Blog мы обсуждаем возможности и преимущества, которые Com Server предоставляет платформе PLCnext.
Введение
Модули расширения, которые Phoenix Contact предлагает для своих ПЛК, могут быть, например, последовательными адаптерами, такими как:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- …
У всех модулей расширения есть одна общая черта: к ним можно обращаться циклически через процессные данные. Это дает возможность напрямую взаимодействовать с последовательным устройством из нашего реального времени приложения.
В некоторых случаях это не то, что мы хотим. Вместо этого мы хотим переиспользовать существующие (C/C++) библиотеки и не нуждаемся в контексте реального времени. Однако мы обнаружим, что эти библиотеки обычно запрограммированы для прямого доступа к COM или TTY интерфейсу.
Есть два варианта создания TTY-интерфейса для PLCnext Control:
- Реализовать некоторые функции (C++ / C#), которые создают TTY-интерфейс для AXL или IL последовательных адаптеров изнутри
PLCnext Runtime. - Использование устройств COM-сервера, таких как GW Device Server.
GW Device Server предоставляет прозрачный TCP to Serial интерфейс. С помощью инструмента вроде Socat мы можем пробросить Serial/TCP трафик напрямую в pseudo TTY интерфейс. Использование GW Device Server также дает возможность коммуницировать с последовательным устройством в удаленных локациях через TLS-зашифрованный канал.
ПРИМЕЧАНИЕ
В этом туториале ПЛК выступает в роли клиента и устанавливает соединение с GW Device Server.
(Однако также возможно переключить PLC Socat в режим прослушивания и иметь GW как клиента, активно подключающегося к ПЛК.)
Настройка

Настройка GW Device Server
Мы подключаемся к GW Device Server через веб-интерфейс управления. IP-адрес по умолчанию GW Device Server — 192.168.254.254.
Мы используем следующие настройки:
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

Тестирование GW Device Server
Чтобы проверить, правильно ли мы настроили GW Device Server, сначала подключим наш ПЛК к GW Device Server через Ethernet. Затем соединим два DSUB-адаптера GW Device Server друг с другом.
Мы можем быстро протестировать настройку с помощью инструмента Telnet. С этим инструментом мы можем отправить данные с ПЛК на GW Device Server на Port 8000/COM1 через последовательный кабель к Port 8001/COM2 и наконец получить их обратно на ПЛК.
Мы используем следующие команды:
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 another shell session
telnet 192.168.254.254 8001
# Type some messages

Сборка Socat
Для легкой сборки Socat на Linux OS мы используем следующие команды:
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
Развертывание и установка Socat
Для развертывания установки Socat мы выполняем следующий скрипт:
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 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"
После развертывания мы теперь можем ssh к нашему ПЛК. Поэтому мы сначала подготовим ПЛК, настроив директории и конфиг-файлы, выполнив следующие команды:
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
Теперь мы модифицируем файл socat.conf для настройки параметров последовательного интерфейса под наши нужды.
nano /etc/default/socat/socat.conf
Содержимое файла выглядит так.
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=""
Если нам нужно изменить дополнительные параметры, нам также придется модифицировать файл SocatDaemon. Больше информации о TTY параметрах можно найти в страницах руководства stty.
Теперь создадим файл SocatDaemon для автоматического подключения к GW Device Server с использованием Socat демона.
ПРИМЕЧАНИЕ:
Этот файл SocatDaemon — пример без управления ошибками/разрывами и т.д. пожалуйста.
nano /etc/init.d/SocatDaemon
Файл имеет следующее содержимое. (нажмите, чтобы увидеть/скрыть код)
Теперь, когда все конфиг-файлы на месте, мы можем продолжить настройкой бинарников Socat и регистрацией 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
Если все настроено правильно, мы можем увидеть запущенный демон командой вроде ps -e | grep socat. Мы также можем проверить логи Socat в cat /var/log/socat.log.
Доступ к TTY интерфейсу из терминала
Теперь мы можем отправлять сообщения через TTY интерфейс.
sudo echo "PLC to GW $var" > /dev/GWDeviceServer
Для непрерывного тестирования pseudo TTY можно использовать команду вроде
while true; do sleep 5 && sudo echo "PLC to GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
Входящий трафик можно отобразить, выполнив cat /dev/GWDeviceServer. Теперь любое приложение может обращаться к последовательному устройству, подключенному к GW Device Server, как если бы оно было напрямую подключено к ПЛК.
Промышленные технологии
- Промышленные ПЛК управляют приводами переменной скорости
- Тентирование вьез печатных плат: Преимущества, процесс и лучшие практики
- Облачный мониторинг: система удаленного контроля для управления активами в реальном времени
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности
- Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
- Оптимизация PLCnext Control с SNMP: Практическое руководство
- Управление кластерами на PLCnext: Использование Kubernetes для промышленной автоматизации
- Мониторинг PLCnext в реальном времени с дашбордами Tableau
- Создание дашбордов Power BI из облачных данных PLCnext
- Создание дашбордов Grafana для PLCnext Control в Azure IoT Hub