跳到主要内容

串口

串口通道用于连接 USB 转串口、RS232、RS485 转换器或其它表现为 COM 口的设备。Zeus 负责打开、关闭、写入和接收事件;你不需要直接使用 System.IO.Ports.SerialPort

接设备前先确认三件事

要确认例子去哪里看
端口名COM3Windows 设备管理器
通信参数9600, 8N1设备手册或现场配置
协议原始字节、自定义帧、Modbus RTU设备通讯协议文档

只知道 COM 口还不够。波特率、校验位、停止位或协议不一致时,端口可能能打开,但收不到正确数据。

最小用法

await using var app = ZeusHost.Create(builder =>
{
builder.AddSerialPort("meter", "COM3", 9600);
});

var meter = app.Channels.Get("meter");
meter.DataReceived += (_, e) =>
{
Console.WriteLine(Convert.ToHexString(e.Data.Span));
};

await app.StartAsync();
await meter.WriteAsync(new byte[] { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B });

这里的 meter 是你给通道起的名字,不是系统里的 COM 口名。COM3 才是操作系统端口名。

更完整的参数写法

设备如果不是默认 8N1,用 options 写法:

builder.AddSerialPort("meter", options =>
{
options.PortName = "COM3";
options.BaudRate = 9600;
options.DataBits = 8;
options.Parity = System.IO.Ports.Parity.Even;
options.StopBits = System.IO.Ports.StopBits.One;
options.ReadTimeoutMilliseconds = 500;
options.WriteTimeoutMilliseconds = 500;
});

参数说明

属性默认大白话
PortNameCOM1Windows 看到的端口号
BaudRate115200每秒传输速率,必须和设备一致
DataBits8数据位,常见是 8
ParityNone校验位,常见是 None / Even
StopBitsOne停止位,常见是 One
ReadTimeoutMilliseconds1000读超时
WriteTimeoutMilliseconds1000写超时

从虚拟通道切换过来

开发界面时先写:

builder.AddVirtualChannel("meter");

接硬件时只改成:

builder.AddSerialPort("meter", "COM3", 9600);

如果你使用 JSON 配置,改 zeus.json 里的通道类型即可,不需要重新编译。

和协议怎么配合

串口通道只负责字节,不理解设备协议。

设备协议推荐做法
设备手册给的是固定十六进制命令直接 WriteAsync,在 DataReceived 里处理返回字节
设备是“帧头 + 长度 + 校验”使用 自定义帧
设备是 Modbus RTU使用 Modbus,不要手拼 CRC

常见问题

现象最可能原因处理
打开失败,提示端口被占用串口助手或其它程序正在使用关闭其它程序,重新启动应用
找不到 COM3端口号变了或驱动没装好看设备管理器,重新插拔 USB 转串口
能打开但收不到数据接线、波特率、校验位或设备未主动上报先用串口助手确认设备能回包
收到乱码把二进制协议当文本显示先用 Convert.ToHexString 看原始字节
Modbus 一直超时从站地址、功能码、RTU/TCP 或 CRC 不对先用虚拟 Modbus 从站验证主站逻辑

没有硬件时,继续用 虚拟通道