Opticway.Modbus 1.0.0
Opticway.Modbus
自研 Modbus 协议栈,全异步、无第三方协议依赖,覆盖三种链路形态与 TCP 从站服务。
特性
- 三种链路形态:
modbusTcp(MBAP)、modbusRtu(串口)、modbusRtuOverTcp(RTU 帧 over TCP 字节流) - 客户端:
ModbusTcp/ModbusRTU/ModbusRtuOverTcp,功能码 FC01 / 02 / 03 / 04 / 05 / 06 / 15 / 16 / 23 - 服务端:
ModbusTcpServer+SlaveDataStore,多从站地址路由、最大连接数限制 - 健壮性:全链路
async/await,无同步阻塞与死锁;单链路 IO 串行化;并发误用 fail-fast;RTU-over-TCP 单飞读,避免并发ReceiveAsync导致丢帧串帧;脏数据、分包、粘包自动重同步 - 可观测:请求/响应帧追踪、协议错误分类、超时与取消区分
快速开始
using Opticway.Modbus;
await using var client = new ModbusTcp("192.168.1.10", 502);
await client.OpenAsync();
ushort[] values = await client.ReadHoldingRegistersAsync(slaveAddress: 1, start: 0, count: 10);
await client.WriteSingleRegisterAsync(slaveAddress: 1, address: 5, value: 1234);
RTU over TCP:
using Opticway.Modbus;
await using var client = new ModbusRtuOverTcp("192.168.1.20", 4001, TimeSpan.FromMilliseconds(100));
await client.OpenAsync();
ushort[] values = await client.ReadInputRegistersAsync(slaveAddress: 1, start: 0, count: 4);
串口 RTU:
using Opticway.Modbus;
await using var client = new ModbusRTU("COM3", baud: 9600, frameGap: TimeSpan.FromMilliseconds(2));
await client.OpenAsync();
ushort[] values = await client.ReadHoldingRegistersAsync(slaveAddress: 1, start: 0, count: 10);
从站服务器:
using System.Net;
using Opticway.Modbus;
var store = new SlaveDataStore();
store.TryWriteSingle(RegisterKind.HoldingRegister, 0, 1234);
await using var server = new ModbusTcpServer(IPAddress.Any, 502, slave => slave == 1 ? store : null);
await server.StartAsync();
Console.WriteLine($"Listening on {server.Port}");
FC23 原子读改写:
ushort[] result = await client.ReadWriteMultipleRegistersAsync(
slaveAddress: 1,
startWrite: 10, writeData: new ushort[] { 1, 2 },
startRead: 0, readCount: 4,
timeout: TimeSpan.FromSeconds(1));
线程与并发契约
- 每个客户端实例不是线程安全的:同一实例上的并发事务会立即抛
InvalidOperationException(fail-fast,不做静默排队)。请按链路串行调用。 ITransport实现不可并发读写同一连接。ModbusTcpServer支持多客户端并发,每连接独立请求循环。
目标框架
net10.0
许可证
MIT
No packages depend on Opticway.Modbus.
1.0.0 首个公开版本:FC01/02/03/04/05/06/15/16/23;ModbusTcp / ModbusRTU / ModbusRtuOverTcp 客户端;ModbusTcpServer 服务端;异步 IO 全链路无 sync-over-async。
.NET 10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.14)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.14)
- System.IO.Ports (>= 10.0.0)
| Version | Downloads | Last updated |
|---|---|---|
| 1.0.0 | 2 | 11/06/2026 |