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。

Version Downloads Last updated
1.0.0 2 11/06/2026