跳到主要内容

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
portNameserialWindows COM 口,例如 COM3
baudRateserial波特率,例如 9600
hosttcp对端 IP 或主机名
porttcp对端端口,Modbus TCP 常用 502
respondervirtualmodbus 表示挂一个虚拟 Modbus 从站

设备字段

字段含义
nameZeus 设备名,例如 oven
channel要使用的通道名,例如 bus
typemodbus-rtu / modbus-tcp
unitIdModbus 从站地址或 TCP 单元标识
points要周期采集的点

点字段

字段含义
name点名,例如 temperature
tableholding / input / coil / discrete
address0 基地址
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