JSON 配置
JSON 配置适合现场交付:端口号、从站地址、点表和采集间隔放在文件里,现场人员改配置,不需要重新编译程序。
最小配置文件
zeus.json:
{
"acquisition": {
"intervalMilliseconds": 500,
"pollImmediately": true
},
"channels": [
{
"name": "bus",
"type": "serial",
"portName": "COM3",
"baudRate": 9600
}
],
"devices": [
{
"name": "oven",
"channel": "bus",
"type": "modbus-rtu",
"unitId": 1,
"points": [
{
"name": "temperature",
"table": "holding",
"address": 0,
"scale": 0.1
}
]
}
]
}
程序里读取:
await using var app = ZeusHost.Create(builder => builder.AddJsonFile("zeus.json"));
await app.StartAsync();
var temperature = app.Points.Get<double>("temperature");
配置文件怎么读
| 区域 | 含义 |
|---|---|
acquisition | 采集间隔和是否启动后立刻采集 |
channels | 通信线路,例如串口、TCP、虚拟通道 |
devices | 设备,例如 Modbus RTU / TCP 设备 |
points | 设备上的业务点,例如温度、设定值、加热输出 |
设备里的 channel 必须引用已经在 channels 中声明过的通道名。
没硬件时用虚拟配置
把串口通道换成虚拟 Modbus 从站:
{
"name": "bus",
"type": "virtual",
"responder": "modbus",
"unitId": 1,
"transport": "rtu"
}
这样可以先验证点表、采集和界面绑定。接真实设备时再改回:
{
"name": "bus",
"type": "serial",
"portName": "COM3",
"baudRate": 9600
}
通道字段
| 字段 | 适用类型 | 含义 |
|---|---|---|
name | 全部 | Zeus 通道名,例如 bus |
type | 全部 | virtual / serial / tcp |
portName | serial | Windows COM 口,例如 COM3 |
baudRate | serial | 波特率,例如 9600 |
host | tcp | 对端 IP 或主机名 |
port | tcp | 对端端口,Modbus TCP 常用 502 |
responder | virtual | modbus 表示挂一个虚拟 Modbus 从站 |
设备字段
| 字段 | 含义 |
|---|---|
name | Zeus 设备名,例如 oven |
channel | 要使用的通道名,例如 bus |
type | modbus-rtu / modbus-tcp |
unitId | Modbus 从站地址或 TCP 单元标识 |
points | 要周期采集的点 |
点字段
| 字段 | 含义 |
|---|---|
name | 点名,例如 temperature |
table | holding / input / coil / discrete |
address | 0 基地址 |
scale | 可选,寄存器原始值乘以该系数,结果为 double |
哪些修改会热更新
默认 AddJsonFile(path, watch: true) 会监视文件变化,但当前只有采集间隔会热更新。
| 修改内容 | 是否立即生效 | 说明 |
|---|---|---|
acquisition.intervalMilliseconds | 是 | 保存 JSON 后生效 |
acquisition.pollImmediately | 否 | 下一次启动时生效 |
| COM 口、波特率、TCP 地址 | 否 | 需要重启进程 |
| 增删通道 | 否 | 需要重启进程 |
| 增删设备或点 | 否 | 需要重启进程 |
从站地址 unitId | 否 | 需要重启进程 |
如果 JSON 语法错误,Zeus 会继续使用上一份有效采集间隔,并在日志里记录错误。
复制到输出目录
如果你把 zeus.json 放在项目里,建议在 .csproj 中设置复制:
<ItemGroup>
<None Include="zeus.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
否则运行目录可能找不到配置文件。
常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 找不到配置文件 | 工作目录不是配置所在目录 | 看异常里的绝对路径,或设置复制到输出目录 |
channel 未在 channels 中声明 | 设备引用了不存在的通道名 | 先写 channels,再写 devices |
| 改了 COM 口没生效 | 通道配置不热更新 | 重启程序 |
| 改了采集间隔没生效 | JSON 语法错误或文件没被监视 | 看日志,确认 watch: true |
| 地址读不对 | address 没按 0 基写 | 对照 Modbus 地址换算 |
可运行示例:samples/Zeus.Samples.Console.Config。