差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

兩邊的前次修訂版 前次修改
tech:modbus [2020/08/19 16:41] – [參考網址] jonathan_tsaitech:modbus [2020/08/29 08:42] (目前版本) jonathan_tsai
行 1: 行 1:
 +====== Modbus TCP 測試 ======
 +
 +===== Master / Slave 模擬測試 =====
 +  - Slave 模擬設備環境 Exp. 192.168.11.247 : CentOS8 (PVE6 CT template) <code sh>
 +yum install wget tar
 +wget https://www.modbusdriver.com/downloads/diagslave.tgz
 +tar -xvf diagslave.tgz
 +cd diagslave/linux_x86-64
 +./diagslave -m tcp
 +</code>++看執行畫面|{{:tech:2020062203.png}}++
 +  - Master 模擬控制環境 : CentOS8 (PVE6 CT template) <code sh>
 +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
 +</code>++看執行畫面|{{: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}}++
 +
 +<note>
 +  * 設定開機可以直接啟動 <code sh>
 +crontab -e
 +</code>編輯內容如下:<file>
 +@reboot /root/diagslave/linux_x86-64/diagslave -m tcp > /tmp/t.log
 +</file>
 +  * 重開機後可以看到 /tmp/t.log 出現執行的紀錄訊息
 +
 +  * 參考網址 - https://unix.stackexchange.com/questions/148754/how-to-start-application-after-login-on-centos/235109
 +</note>
 +
 +===== 使用 Perl 開發 Client(Master) 程式 =====
 +  - 安裝環境 CentOS8 (PVE6 CT Template)
 +  - 安裝相關模組套件 <code sh>
 +yum install perl gcc
 +perl -MCPAN -e shell
 +upgrade
 +force install Net::Server::MultiType
 +install Device::Modbus::TCP
 +exit
 +</code>
 +  - 撰寫簡單讀取測試程式 t.pl <file>
 +#! /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;
 +</file><code sh>
 +perl t.pl</code>++看執行結果|{{:tech:2020062204.png}}++
 +  - 撰寫簡單寫入測試程式 t1.pl <file>
 +#! /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;
 +</file>
 +  * 讀寫入的方式有以下幾種 : 參考網址 - 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|<code>
 +my $req = $client->write_multiple_coils(
 +    unit     => 1,
 +    address  => 3,
 +    values   => [1, 1, 0, 1] 
 +);
 +</code>++
 +    * $req = $client->write_multiple_registers(unit,address,value); ++Example|<code>
 +my $req = $client->write_multiple_registers(
 +    unit     => 1,
 +    address  => 5,
 +    values   => [345, 65, 67, 243] 
 +);
 +</code>++
 +    * $req = $client->read_write_registers(unit,read_address,read_quantity,write_address,values); ++Example|<code>
 +my $req = $client->read_write_registers(
 +    unit     => 1,
 +    read_address  => 10,
 +    read_quantity =>  5,
 +    write_address => 9,
 +    values        => [ 45, 87, 1, 298, 0, 0] 
 +);
 +</code>++
 +
 +===== 使用 PHP 開發 Client(Master) 程式 =====
 +  - 安裝環境 CentOS8 (PVE6 CT Template)
 +  - 安裝相關模組套件 <code sh>
 +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
 +</code>
 +  - 撰寫簡單讀取測試程式 t.php <code>
 +mkdir -p /root/php-modbus/example
 +cd /root/php-modbus/example
 +vi t.php
 +</code><file>
 +
 +</file>
 +  
 +
 +
 +===== 參考網址 =====
 +  * 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}}
  
  • tech/modbus.txt
  • 上一次變更: 2020/08/29 08:42
  • jonathan_tsai