温控仪表
把保持寄存器 0 当作炉温。先在虚拟从站上写业务,再到现场换成串口。
var memory = new ModbusSlaveMemory();
memory.HoldingRegisters[0] = 1800; // 原始值,点表按 0.1 换算为 180.0
await using var app = ZeusHost.Create(builder =>
{
builder.AddAcquisition(TimeSpan.FromMilliseconds(500));
builder.AddVirtualChannel("bus", new ModbusSlaveResponder(1, ModbusTransport.Rtu, memory));
builder.AddModbusRtu("oven", "bus", points: map =>
map.HoldingRegister("temperature", 0, 0.1)
.HoldingRegister("setpoint", 1, 0.1).Writable("setpoint"));
});
await app.StartAsync();
var pv = app.Points.Get<double>("temperature");
await app.Points.WriteAsync("setpoint", 180.0);
现场替换通道:
builder.AddSerialPort("bus", "COM3", 9600);
builder.AddModbusRtu("oven", "bus", unitId: 1);
WinForms 界面使用 app.Points.BindText("temperature", label) 显示炉温;WPF 界面在 ViewModel 中使用 app.Points.AsBindingSource("temperature", WpfUiDispatcher.Current())。两种界面都用 WriteAsync("setpoint", 180.0) 下发设定,协议代码和换通道都不必改。