通信アーキテクチャでは、Modbus TCPは通常、マスターによって開始され、奴隷による指揮に応答しました。この構造により、マスターステーションは複数の産業機器の制御を効率的に集中化できるため、集中データ収集とリモート制御が実現できます。
<?php
class ModbusTCP {
private $socket;
public function __construct($ip, $port) {
$this-> socket = socket_create(af_inet、sock_stream、sol_tcp);
socket_connect($ this-> socket、$ ip、$ port);
}
public function readregisters($ Slaveid、$ RegisterAddress、$ RegisterCount){
$ buffer = pack( "nnnn"、$ slaveid、0x03、$ regoltAddress、$ registerCount);
socket_send($ this-> socket、$ buffer、strlen($ buffer)、0);
$ response = '';
$ bytes = socket_recv($ this-> socket、$ response、2048、msg_waitall);
$ registers = unpack( "n*"、subst($ response、9));
$ registersを戻るします。
}
public function writeregister($ Slaveid、$ RegisterAddress、$ RegisterValue){
$ buffer = pack( "nnn"、$ slaveid、0x06、$ RegisterAddress、$ RegisterValue);
socket_send($ this-> socket、$ buffer、strlen($ buffer)、0);
}
パブリック関数__destruct(){
socket_close($ this-> socket);
}
}
//例$ $ modbus = new modbustcp( '192.168.0.1'、502);
$ registers = $ modbus-> readregisters(1、0、10);
foreach($ registers as $ address => $ value){
echo "登録$アドレス:$ value \ n";
}
$ modbus-> writeregister(1、0、100);
このコードは、奴隷との接続を実装し、PHPソケット関数を介してレジスタを読み取り、書き込みする基本的なmodbustCPクラスを示しています。実際には、開発者はクラスインスタンスを初期化し、デバイスのIPとポートを渡すだけで、産業機器のデータ相互作用を実現する必要があります。
参考文献:
[1] modbusアプリケーションプロトコル仕様v1.1b3 - https://modbus.org/docs/modbus_application_protocol_v1_1b3.pdf