Menghubungkan PLC berikutnya PLC ke RS232/RS485 jarak jauh melalui TTY semu
Dalam artikel Blog Pembuat ini, kami membahas kemungkinan dan keuntungan yang disediakan Server Com untuk platform PLCnext.
Pengantar
Modul ekstensi yang ditawarkan Phoenix Contact untuk PLC-nya, misalnya, dapat berupa adaptor serial seperti:
- AXL F RS UNI
- IB IL RS 232-PRO
- IB IL RS 485
- IB IL RS UNI
- …
Semua modul ekstensi memiliki kesamaan:mereka dapat diakses secara siklis melalui processdata. Ini memberikan kemungkinan untuk berinteraksi langsung dengan perangkat serial dari aplikasi waktu nyata kami.
Dalam beberapa kasus, ini bukan yang kita inginkan. Sebagai gantinya, kami ingin menggunakan kembali pustaka (C/C++) yang ada dan tidak memerlukan konteks waktu nyata. Namun, kita akan menemukan bahwa perpustakaan ini biasanya diprogram untuk memiliki akses langsung ke antarmuka COM atau TTY.
Ada dua opsi untuk membuat antarmuka TTY untuk PLCnext Control
:
- Menerapkan beberapa fungsi (C++ / C#) yang membuat antarmuka TTY untuk adaptor serial AXL atau IL dari dalam
PLCnext Runtime
.
- Penggunaan perangkat COM-Server seperti Server Perangkat GW
GW Device Server
memberikan TCP to Serial
transparent transparan antarmuka. Dengan bantuan alat seperti Socat
kita dapat meneruskan lalu lintas Serial/TCP langsung ke antarmuka TTY semu. Menggunakan GW Device Server
juga menyediakan kemungkinan untuk berkomunikasi dengan perangkat serial di lokasi terpencil melalui saluran terenkripsi TLS.
CATATAN
Dalam tutorial ini, PLC berfungsi sebagai klien dan membuat koneksi ke GW Device Server
.
(Namun, juga dimungkinkan untuk mengganti Socat
PLC ke opsi mendengarkan dan membuat GW sebagai klien terhubung secara aktif ke PLC.)
Penyiapan
Menyiapkan Server Perangkat GW
Kami terhubung ke GW Device Server
melalui Manajemen Berbasis Web. Alamat IP default dari GW Device Server
adalah 192.168.254.254.
Kami menggunakan pengaturan berikut:
Setelan LAN – Keamanan
- Aktifkan Server SSH
- Aktifkan Server Telnet
- Nonaktifkan Mode Data Aman
- Nonaktifkan Server TFTP
Setelan Serial
- Konfigurasi Port 1 (COM1):Aktifkan Koneksi TCP pada Port 8000
- Konfigurasi Port 2 (COM2):Aktifkan Koneksi TCP pada Port 8001
Menguji Server Perangkat GW
Untuk menguji apakah kita telah menyiapkan GW Device Server
benar, pertama kita hubungkan PLC kita ke GW Device Server
melalui Ethernet. Kemudian kami menghubungkan dua adaptor DSUB dari GW Device Server
satu sama lain.
Kami dapat dengan cepat menguji penyiapan menggunakan alat Telnet
. Dengan alat ini, kita dapat mengirim data dari PLC ke GW Device Server
di Port8000/COM1 melalui kabel serial ke Port8001/COM2 dan akhirnya menerimanya kembali di PLC.
Kami menggunakan perintah berikut:
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
Membangun Socat
Untuk membangun Socat
dengan mudah di OS Linux, kami menggunakan perintah berikut:
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
Menyebarkan dan menginstal Socat
Untuk menerapkan Socat
instalasi, kita jalankan script berikut:
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"
Setelah di-deploy, sekarang kita bisa ssh ke PLC kita. Oleh karena itu, pertama-tama kita siapkan PLC dengan mengatur direktori dan file konfigurasi dengan menjalankan perintah berikut:
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
Sekarang, kita memodifikasi socat.conf
file untuk mengonfigurasi parameter antarmuka serial sesuai kebutuhan kita.
nano /etc/default/socat/socat.conf
Isi file terlihat seperti ini.
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=""
Jika kita perlu memodifikasi parameter lebih lanjut, kita juga perlu memodifikasi SocatDaemon
mengajukan. Informasi lebih lanjut tentang parameter TTY dapat ditemukan di halaman manual stty.
Sekarang kita membuat SocatDaemon
file untuk terhubung secara otomatis ke GW Device Server
menggunakan Socat
daemon.
CATATAN:
File SocatDaemon ini adalah contoh tanpa manajemen error/disconnection dll.
nano /etc/init.d/SocatDaemon
File memiliki konten berikut. (klik untuk melihat/menyembunyikan kode)
Sekarang semua file konfigurasi sudah ada, kita dapat melanjutkan dengan mengatur Socat
binari dan mendaftarkan 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
Jika semuanya sudah diatur dengan benar, kita dapat melihat daemon yang sedang berjalan menggunakan perintah seperti ps -e | grep socat
. Kami juga dapat memeriksa Socat
log terletak di cat /var/log/socat.log
.
Mengakses antarmuka TTY dari terminal
Sekarang kami dapat mengirim pesan melalui antarmuka TTY.
sudo echo "PLC to GW $var" > /dev/GWDeviceServer
Untuk terus menguji pseudo TTY, kita dapat menggunakan perintah seperti
while true; do sleep 5 && sudo echo "PLC to GW $var" >/dev/ttyUSB0 && var=$((var+1)); done
Lalu lintas masuk dapat ditampilkan dengan menjalankan cat /dev/GWDeviceServer
. Sekarang aplikasi apa pun dapat mengakses perangkat Serial yang terhubung ke Server Perangkat GW seolah-olah terhubung langsung ke PLC.