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 TCP/RTU/ASCII 协议包 — 支持 FC 01/03/04/06/10,纯 PHP Socket 实现。纯 PHP 实现,通过内核框架适配器兼容 6 种 PHP 运行时环境。
安装
composer require erikwang2013/industrial-protocols-kernel erikwang2013/industrial-protocols-modbus
本包依赖 erikwang2013/industrial-protocols-kernel,内核提供连接管理、协议注册、协程适配、事件系统等基础设施。
架构
双驱动架构 — ModbusTcpDriver(TCP Socket,stream_socket_client)+ ModbusRtuDriver(RS-485 串口,fopen+stty+CRC16)。帧编解码层:ModbusFrame 抽象基类(CRC16 计算/校验)、ModbusRequest(请求构建,5 种工厂方法)、ModbusResponse(响应解析,含异常帧检测+getRegisters 寄存器提取)。Connector 层:ModbusConnector 实现 ConnectorInterface,自动地址解析(40001-49999 保持寄存器、30001-39999 输入寄存器)。
功能
FC 01 读线圈、FC 03 读保持寄存器、FC 04 读输入寄存器、FC 06 写单个寄存器、FC 10 写多个寄存器、TCP 通信(端口 502,MBAP 头)、RTU 通信(RS-485,CRC16 校验,19200 bps 默认)、ASCII 通信、批量读写、健康检查、连接策略支持(Lazy/Eager/Pooled)
支持的框架
本包通过内核的框架适配器兼容以下 6 种 PHP 运行时环境:Laravel (ServiceProvider+Facade+artisan)、Webman (config/plugin 自动发现+ProtocolProcess)、Hyperf (ConfigProvider+DI+KernelFactory)、ThinkPHP (services.php+IndustrialProtocolsService)、Yii2 (Bootstrap+组件注册)、Plain PHP (直接实例化 Kernel)
Laravel 示例
use Erikwang2013\IndustrialProtocols\Kernel; use Erikwang2013\IndustrialProtocols\Modbus\ModbusProtocol; // AppServiceProvider::boot() $kernel = app(Kernel::class); $kernel->getProtocolRegistry()->register(new ModbusProtocol()); $kernel->boot(); $conn = $kernel->getConnectionManager()->connect('device-id'); $result = $conn->read('address'); // 或使用 Facade \Erikwang2013\IndustrialProtocols\Framework\Laravel\IndustrialProtocolsFacade::connect('device-id')->read('address');
Webman 示例
Worker 启动时 ProtocolProcess 自动初始化。配置 config/plugin/erikwang2013/industrial-protocols-kernel/config/industrial-protocols.php。
Hyperf 示例
$kernel = \Hyperf\Context\ApplicationContext::getContainer()->get(Kernel::class); $conn = $kernel->getConnectionManager()->connect('device-id');
使用说明
use Erikwang2013\IndustrialProtocols\Kernel; use IndustrialProtocols\Bridge\TcpGatewayBridge; use IndustrialProtocols\Bridge\ExternalProcessBridge; $kernel = new Kernel(['config_path' => __DIR__ . '/config.php']); $kernel->boot(); // 方式 1: 通过 TCP 网关连接 $bridge = new TcpGatewayBridge('192.168.1.200', 502); $conn = $kernel->getConnectionManager()->connect('device-id', [ 'protocol' => 'modbus', 'bridge' => $bridge, ]); $result = $conn->read('address'); // 方式 2: 通过厂商工厂一键创建 $bridge = $kernel->getVendorBridgeFactory()->create('beckhoff', 'CX2030', '3.1'); $conn = $kernel->getConnectionManager()->connect('device-id', [ 'protocol' => 'modbus', 'bridge' => $bridge, ]); // 方式 3: 通过 C/C++ SDK 子进程 $bridge = new ExternalProcessBridge('/opt/sdk/bin/master'); $conn = $kernel->getConnectionManager()->connect('device-id', [ 'protocol' => 'modbus', 'bridge' => $bridge, ]);
配置示例
'devices' => [ 'device-id' => [ 'protocol' => 'modbus', 'host' => '192.168.1.10', 'port' => 502, 'timeout' => 3000, ], ],
适配厂商
Hilscher (netX, cifX)、HMS/Anybus (Communicator, X-gateway)、Moxa (MGate 5105-MB-EIP)、Phoenix Contact (AXL F IL ETH)
系统要求
- PHP >= 8.1
- Composer
- erikwang2013/industrial-protocols-kernel
相关链接
License
MIT — Copyright (c) 2026 erik erik@erik.xyz — https://erik.xyz