php实现modbus
PHP 实现 Modbus 通信
Modbus 是一种工业通信协议,常用于设备间的数据交换。PHP 可以通过 TCP/IP 或串口(如 RS485)与 Modbus 设备通信。
使用 PHP-Modbus 库
PHP-Modbus 是一个开源的 PHP 库,支持 Modbus TCP 和 RTU 协议。
安装库:

composer require adduc/phpmodbus
示例代码(Modbus TCP):
require_once 'vendor/autoload.php';
use ModbusTcpClient\Network\BinaryStreamConnection;
use ModbusTcpClient\Packet\ModbusFunction\ReadHoldingRegistersRequest;
use ModbusTcpClient\Packet\ModbusFunction\ReadHoldingRegistersResponse;
$connection = BinaryStreamConnection::getBuilder()
->setPort(502)
->setHost('192.168.1.1')
->build();
$request = new ReadHoldingRegistersRequest(0, 2);
$response = $connection->connect()->sendAndReceive($request);
if ($response instanceof ReadHoldingRegistersResponse) {
$data = $response->getData();
echo "Register values: " . implode(', ', $data);
}
$connection->close();
使用 PHP-Serial 库(Modbus RTU)
对于串口通信,可以使用 php-serial 库。

安装库:
composer require majd/php-serial
示例代码(Modbus RTU):
require_once 'vendor/autoload.php';
use PhpSerial\Serial;
$serial = new Serial();
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(9600);
$serial->confParity('none');
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->deviceOpen();
// 发送 Modbus RTU 请求(示例:读取寄存器)
$request = "\x01\x03\x00\x00\x00\x02\xC4\x0B";
$serial->sendMessage($request);
$response = $serial->readPort();
echo "Response: " . bin2hex($response);
$serial->deviceClose();
注意事项
- 协议选择:Modbus TCP 基于以太网,Modbus RTU 基于串口(如 RS485)。
- 超时设置:通信时需设置合理的超时时间,避免阻塞。
- 数据解析:Modbus 数据通常为 16 位整数或浮点数,需根据设备文档解析。
- 错误处理:检查响应是否正确,处理异常情况(如超时、校验失败)。
其他工具
- modbus-php:另一个轻量级 Modbus 库,支持 TCP 和 RTU。
- 自定义实现:若需更灵活的控制,可直接通过 PHP 的
socket或fopen实现底层通信。






