Pseudo TTYを使用したPLCnext PLCへのリモートRS232/RS485接続を容易に実現
このメーカーズブログ記事では、Com ServerがPLCnextプラットフォームにもたらす可能性と利点について説明します。
導入
Phoenix ContactがPLC用に提供する拡張モジュールには、たとえば以下のようなシリアルアダプターがあります:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- …
すべての拡張モジュールには共通点があります:プロセスデータを介して巡回的にアクセスできます。これにより、リアルタイムアプリケーションからシリアルデバイスと直接やり取りすることが可能です。
しかし、場合によってはこれが望ましくありません。代わりに、既存の(C/C++)ライブラリを再利用したく、リアルタイムコンテキストは必要ありません。しかし、これらのライブラリは通常、COMまたはTTYインターフェースへの直接アクセスを前提としてプログラムされています。
PLCnext ControlでTTYインターフェースを作成するには2つのオプションがあります:
PLCnext Runtime内部から、AXLまたはILシリアルアダプター用のTTYインターフェースを作成する関数(C++/C#)を実装する。GW Device ServerのようなCOMサーバーデバイスを使用する。
GW Device Serverは、透過的なTCP to Serialインターフェースを提供します。Socatのようなツールを使用すると、シリアル/TCPトラフィックを直接疑似TTYインターフェースに転送できます。GW Device Serverを使用すると、TLS暗号化チャネル経由でリモートロケーションのシリアルデバイスと通信することも可能です。
注記
このチュートリアルでは、PLCがクライアントとして動作し、GW Device Serverへの接続を確立します。
(ただし、PLCのSocatをリスニングオプションに切り替え、GWをクライアントとしてPLCに積極的に接続させることも可能です。)
セットアップ
GW Device Serverの設定
GW Device ServerにWebベースド管理で接続します。GW Device ServerのデフォルトIPアドレスは192.168.254.254です。
以下の設定を使用します:
LAN設定 - セキュリティ
- SSHサーバーを有効化
- Telnetサーバーを有効化
- セキュアデータモードを無効化
- TFTPサーバーを無効化

シリアル設定
- ポート1設定(COM1):ポート8000でTCP接続を有効化
- ポート2設定(COM2):ポート8001でTCP接続を有効化

GW Device Serverのテスト
セットアップが正しいかテストするには、まずPLCをGW Device ServerとEthernetで接続します。次に、GW Device Serverの2つのDSUBアダプターを互いに接続します。
Telnetツールを使用してセットアップを迅速にテストできます。このツールを使用すると、PLCからGW Device Serverのポート8000/COM1にデータを送信し、シリアルケーブルを経由してポート8001/COM2に到達し、最終的にPLCで受信できます。
以下のコマンドを使用します:
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 ## 別のシェルセッションを開く
telnet 192.168.254.254 8001 # メッセージを入力
Socatのビルド
Linux OSでSocatを簡単にビルドするには、以下のコマンドを使用します:
mkdir tmp
cd tmp
git clone git://repo.or.cz/socat.git
cd socat
## TODO: 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
Socatの展開とインストール
Socatのインストールを展開するには、次のスクリプトを実行します:
cd tmp
mkdir -p deploy
cd deploy
mkdir -p usr
cp -r ../../Daemon/* .
cp -r ../socat/install/* usr/
# パッケージ作成
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"
展開後、PLCにSSH接続できます。まず、以下のコマンドを実行してPLCのディレクトリと設定ファイルを準備します:
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="cs8"
STOPBITS="-cstopb"
FLOWCONTROLL=""
さらにパラメータを変更する必要がある場合は、SocatDaemonファイルも修正する必要があります。TTYパラメータの詳細については、sttyのマニュアルページを参照してください。
次に、Socatデーモンを使用してGW Device Serverに自動的に接続するSocatDaemonファイルを作成します。
注記:
この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のようなコマンドで実行中のデーモンを確認できます。また、cat /var/log/socat.logでSocatログを確認できます。
ターミナルからTTYインターフェースにアクセス
これでTTYインターフェース経由でメッセージを送信できます。
sudo echo "PLC to GW $var" > /dev/GWDeviceServer
疑似TTYを継続的にテストするには、次のようなコマンドを使用できます:
while true; do sleep 5 && sudo echo "PLC to GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
着信トラフィックはcat /dev/GWDeviceServerを実行して表示できます。これで、GW Device Serverに接続されたシリアルデバイスに、あたかもPLCに直接接続されているかのようにアクセスできます。
産業技術
- 産業用PLCが可変速ドライブを駆動する
- PCBビアテント処理の解説:メリット、プロセス、ベストプラクティス
- クラウド監視:リアルタイム資産管理のためのリモート制御システム
- モダン産業におけるリモート生産制御の5つの主要メリット
- PLCnextデバイスでgrpcurlを用いた安全なリモートgRPCアクセス
- SNMPでPLCnext Controlデバイスを最適化:実践ガイド
- PLCnextでのクラスタ管理:産業オートメーションにおけるKubernetesの活用
- TableauダッシュボードでPLCnextをリアルタイム監視
- PLCnextクラウドデータからPower BIダッシュボードを作成
- Azure IoT HubのPLCnext ControlデータでリアルタイムGrafanaダッシュボードを作成
- JlinkでPLCnext Control上のJava 9アプリを最適化