====== Modbus TCP 測試 ======
===== Master / Slave 模擬測試 =====
- Slave 模擬設備環境 Exp. 192.168.11.247 : CentOS8 (PVE6 CT template)
yum install wget tar
wget https://www.modbusdriver.com/downloads/diagslave.tgz
tar -xvf diagslave.tgz
cd diagslave/linux_x86-64
./diagslave -m tcp
++看執行畫面|{{:tech:2020062203.png}}++
- Master 模擬控制環境 : CentOS8 (PVE6 CT template)
yum install wget tar
wget https://www.modbusdriver.com/downloads/modpoll.tgz
tar -xvf modpoll.tgz
cd modpoll/linux_x86-64
./modpoll -m tcp 192.168.11.247
++看執行畫面|{{:tech:2020062202.png}}++
- [[http://www.icdt.com.tw/main/index.php/2013-07-09-05-16-50/modbus-free-software/file/15-modbus-tcp-client-exe| Master Windows 模擬控制環境 : Win10 (IoT 元米科技 MODBUS TCP Client 測試程式)]] ++看執行畫面|{{:tech:2020062201.png}}++
* 設定開機可以直接啟動
crontab -e
編輯內容如下:
@reboot /root/diagslave/linux_x86-64/diagslave -m tcp > /tmp/t.log
* 重開機後可以看到 /tmp/t.log 出現執行的紀錄訊息
* 參考網址 - https://unix.stackexchange.com/questions/148754/how-to-start-application-after-login-on-centos/235109
===== 使用 Perl 開發 Client(Master) 程式 =====
- 安裝環境 CentOS8 (PVE6 CT Template)
- 安裝相關模組套件
yum install perl gcc
perl -MCPAN -e shell
upgrade
force install Net::Server::MultiType
install Device::Modbus::TCP
exit
- 撰寫簡單讀取測試程式 t.pl
#! /usr/bin/perl
use Device::Modbus::TCP::Client;
use Data::Dumper;
use strict;
use warnings;
use v5.10;
my $client = Device::Modbus::TCP::Client->new(
host => '192.168.1.34',
);
my $req = $client->read_holding_registers(
unit => 3,
address => 2,
quantity => 1
);
say Dumper $req;
$client->send_request($req) || die "Send error: $!";
my $response = $client->receive_response;
say Dumper $response;
$client->disconnect;
perl t.pl
++看執行結果|{{:tech:2020062204.png}}++
- 撰寫簡單寫入測試程式 t1.pl
#! /usr/bin/perl
use Device::Modbus::TCP::Client;
use Data::Dumper;
use strict;
use warnings;
use v5.10;
my $client = Device::Modbus::TCP::Client->new(
host => '192.168.11.247',
);
# Write reg0 -> 12345
my $req = $client->write_single_register(
unit => 1,
address => 1,
value => 15
);
say Dumper $req;
$client->send_request($req) || die "Send error: $!";
my $response = $client->receive_response;
say Dumper $response;
$client->disconnect;
* 讀寫入的方式有以下幾種 : 參考網址 - https://metacpan.org/pod/Device::Modbus::Client
* $req = $client->read_coils(unit,address,quantity);
* $req = $client->read_discrete_inputs(unit,address,quantity);
* $req = $client->read_holding_registers(unit,address,quantity);
* $req = $client->read_input_registers(unit,address,quantity);
* $req = $client->write_single_coil(unit,address,value);
* $req = $client->write_single_register(unit,address,value);
* $req = $client->write_multiple_coils(unit,address,value); ++Example|
my $req = $client->write_multiple_coils(
unit => 1,
address => 3,
values => [1, 1, 0, 1]
);
++
* $req = $client->write_multiple_registers(unit,address,value); ++Example|
my $req = $client->write_multiple_registers(
unit => 1,
address => 5,
values => [345, 65, 67, 243]
);
++
* $req = $client->read_write_registers(unit,read_address,read_quantity,write_address,values); ++Example|
my $req = $client->read_write_registers(
unit => 1,
read_address => 10,
read_quantity => 5,
write_address => 9,
values => [ 45, 87, 1, 298, 0, 0]
);
++
===== 使用 PHP 開發 Client(Master) 程式 =====
- 安裝環境 CentOS8 (PVE6 CT Template)
- 安裝相關模組套件
yum install php php-json
mkdir -p /root/php-modbus
cd /root/php-modbus
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '572cb359b56ad9ae52f9c23d29d4b19a040af10d6635642e646a7caa7b96de717ce683bd797a92ce99e5929cc51e7d5f') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
./composer.phar require aldas/modbus-tcp-client
./composer.phar require react/socket:^0.8.11
- 撰寫簡單讀取測試程式 t.php
mkdir -p /root/php-modbus/example
cd /root/php-modbus/example
vi t.php
===== 參考網址 =====
* https://www.modbusdriver.com/modpoll.html
* http://www.icdt.com.tw/main/index.php/2013-07-09-05-16-50/2013-07-18-14-43-35/file/15-modbus-tcp-client-exe
* https://metacpan.org/pod/Device::Modbus::TCP
* https://metacpan.org/pod/Device::Modbus::TCP::Client
* https://github.com/aldas/modbus-tcp-client
* https://github.com/aldas/modbus-tcp-client/tree/master/examples
* http://blog.ittraining.com.tw/2016/06/rs485-pin.html
{{tag>modbus IoT}}