跳到主要内容

排错

遇到问题时先不要急着改代码。按这个顺序定位:安装能不能编译、宿主有没有启动、通道有没有打开、协议有没有回包、点表有没有值、界面有没有正确绑定。

先做三步快速判断

  1. 把真实串口换成 AddVirtualChannel,看程序结构是否能跑通。
  2. 打印通道状态 channel.State,确认是否进入 Open
  3. 把收到的数据先按十六进制打印,不要一开始就按文本解析。
channel.DataReceived += (_, e) =>
{
Console.WriteLine(Convert.ToHexString(e.Data.Span));
};

安装和包引用

现象最可能原因处理
dotnet 命令不存在没装 .NET SDK,或 PATH 未刷新安装 .NET 8 SDK,重新打开终端
找不到 Zeus 预览包没加 --prereleasedotnet add package Zeus.Communications --prerelease
找不到 AddVirtualChannel没引用 Zeus.Communications安装或引用通信包
找不到 AttachZeus没引用 UI 适配器WinForms 引 Zeus.Presentation.WinForms,WPF 引 Zeus.Presentation.Wpf
WinForms / WPF 包还原失败目标框架不是 Windows 桌面改成 net8.0-windows

宿主和名称

现象最可能原因处理
找不到名为 xxx 的通道Channels.Get 的名称和注册名称不一致看异常里列出的已注册通道名
通道名称已存在注册了两个同名通道改名,例如 meterBusplcBus
当前为 Created,无法写入还没调用 StartAsync先启动宿主
关闭程序后端口仍被占用宿主没释放使用 await using,或让 AttachZeus 管理窗口生命周期

串口和 TCP

现象最可能原因处理
串口打开失败COM 口不存在或被占用看设备管理器,关闭串口助手
串口能打开但无数据接线、波特率、校验位或设备未回包先用串口助手确认设备能通信
收到乱码把二进制协议当文本显示Convert.ToHexString 看原始字节
TCP 连接失败IP、端口、防火墙或设备未监听先用网络工具确认端口可连
对端断开后通道 FaultedTCP 连接被关闭记录日志并重启宿主或重建连接

自定义帧

现象最可能原因处理
超时未收到完整应答帧头、长度、校验或设备没有回包抓原始字节,对照设备手册
超时未收到匹配应答收到的帧不满足匹配器打印响应载荷,检查序号、命令字、地址
校验失败后一直没数据校验算法或覆盖范围不一致确认校验是否覆盖长度域和载荷
载荷超过 255 字节使用了 1 字节长度改用 2 字节长度字段

Modbus

现象最可能原因处理
一直超时从站地址、波特率、RTU/TCP 类型不对先用 ModbusSlaveResponder 验证主站逻辑
非法数据地址地址偏移或数量不对检查 40001 是否要写成地址 0
CRC 失败串口参数不一致或线路干扰核对 9600/8N1/校验位,缩短线缆测试
事务号不匹配同一 TCP 通道并发多路请求串行请求,或为不同任务拆通道
读到的值比例不对少了比例换算在点表中使用 scaleraw => raw * 0.1

点表和采集

现象最可能原因处理
点尚无有效值第一轮采集还没成功订阅 Points.Changed,或稍后再读
点名在多台设备上重复短名冲突使用 oven.temperature 这种限定名
界面显示旧值但有错误本轮采集失败,保留了上一次成功值查看点快照的 Error
总线很慢采集间隔太短或地址太分散加大间隔,让地址尽量连续

JSON 配置

现象最可能原因处理
找不到配置文件工作目录不对,或文件没复制到输出目录看异常中的绝对路径,设置 CopyToOutputDirectory
channel 未在 channels 中声明设备引用了不存在的通道先声明通道,再声明设备
改了 COM 口但没生效通道配置不热更新重启程序
改了采集间隔但没生效JSON 语法错误或没有监视文件看日志,确认 watch: true

WinForms / WPF

现象最可能原因处理
控件跨线程异常直接在 DataReceived 中改 UI使用 BindTo / BindState / AttachZeus
界面状态不刷新没绑定状态,或绑定发生太晚在构造函数里调用 BindState
关闭窗口后仍在采集宿主没跟窗口生命周期绑定使用 this.AttachZeus(...)
点击发送失败通道还没打开看状态 Label 是否为 Open

仍然定位不了

请准备这些信息再继续查:

  • Zeus 版本和运行环境。
  • 使用的是虚拟通道、串口还是 TCP。
  • 串口参数或 TCP 地址。
  • 发送的原始字节和收到的原始字节。
  • 完整异常消息,不要只截第一行。
  • 如果是 Modbus,提供从站地址、功能码、起始地址和数量。