在通信架構中,MODBUS TCP通常由**主站(Master)發起請求,並由從站(Slave)**響應命令。這種結構使得主站可以高效地集中控制多個工業設備,從而實現數據集中採集和遠程控制。
<?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, $registerAddress, $registerCount); socket_send($this->socket, $buffer, strlen($buffer), 0); $response = ''; $bytes = socket_recv($this->socket, $response, 2048, MSG_WAITALL); $registers = unpack("n*", substr($response, 9)); return $registers; } public function writeRegister($slaveId, $registerAddress, $registerValue) { $buffer = pack("nnn", $slaveId, 0x06, $registerAddress, $registerValue); socket_send($this->socket, $buffer, strlen($buffer), 0); } public function __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 "Register $address: $value\n"; } $modbus->writeRegister(1, 0, 100);
這段代碼展示了一個基本的ModbusTCP類,它通過PHP的socket函數實現與從站的連接、寄存器的讀取與寫入功能。在實際使用中,開發者只需初始化類實例,並傳入設備IP和端口,即可實現工業設備的數據交互。
參考文獻:
[1] MODBUS Application Protocol Specification v1.1b3 — https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf