erikwang2013 / industrial-protocols-modbus
Modbus TCP/RTU/ASCII 协议包 — 支持 FC 01/03/04/06/10,纯 PHP Socket 实现
Package info
github.com/erikwang2013/industrial-protocols-modbus
Type:industrial-protocol
pkg:composer/erikwang2013/industrial-protocols-modbus
Requires
- php: >=8.1
- erikwang2013/industrial-protocols-kernel: *
README
Modbus 工业以太网协议,纯 PHP Socket 实现,支持 TCP/RTU/ASCII 三种变体,FC 01(读线圈)、03(读保持寄存器)、04(读输入寄存器)、06(写单寄存器)、10(写多寄存器)。
安装
composer require erikwang2013/industrial-protocols-modbus
架构
实现 6 个核心 SDK 接口:ProtocolInterface、ConnectorInterface、DriverInterface(TCP+RTU 双驱动)、FrameInterface(Request+Response 双帧)。通过 composer.json 的 extra.industrial-protocols.protocol 自动注册到内核。
功能
Modbus TCP 驱动(端口 502,FC 01/03/04/06/10)、Modbus RTU 驱动(串口,CRC16 校验)、地址格式解析(40001-49999 保持寄存器 / 30001-39999 输入寄存器 / 0-9999 原始偏移)、批量读写、健康检查、ModbusException 分层异常(fromErrorCode 工厂方法)
使用说明
$kernel = new Kernel(['config_path' => __DIR__ . '/config.php']); $kernel->getProtocolRegistry()->register(new ModbusProtocol()); $kernel->boot(); $conn = $kernel->getConnectionManager()->connect('plc-001'); $result = $conn->read('40001'); // ['40001' => 42] $conn->write(['40001' => 25]); // 单寄存器写入 $conn->write(['40001', '40002'], [100, 200]); // 批量写入
配置示例
'devices' => [ 'plc-001' => [ 'protocol' => 'modbus', 'variant' => 'tcp', 'host' => '192.168.1.10', 'port' => 502, 'unit_id' => 1, 'timeout' => 3000, ], 'plc-rtu' => [ 'protocol' => 'modbus', 'variant' => 'rtu', 'device' => '/dev/ttyUSB0', 'baud_rate' => 19200, 'parity' => 'N', 'data_bits' => 8, 'stop_bits' => 1, 'unit_id' => 1, ], ],
兼容框架
Laravel / Webman / Hyperf / ThinkPHP / Yii2 / Plain PHP
系统要求
- PHP >= 8.1
- Composer
- erikwang2013/industrial-protocols-kernel
License
MIT — Copyright (c) 2026 erik erik@erik.xyz — https://erik.xyz