modbus_map_task 是 Modbus 数据模型的周期轮询入口,每轮完成三件事:
刷新只读区:将最新测量值写入输入寄存器,将报警状态写入离散输入
执行保持寄存器变更:处理主站写入后的 dirty 标记,调用对应硬件接口
消费线圈命令:执行由线圈写入触发的延迟操作(对时、休眠、重启)
最终返回一个 action 位掩码,通知调用者需要执行的系统级动作(重配置/休眠/重启)。
uint8_t modbus_map_task(void)
{
uint8_t actions;
update_measurement_snapshot();//刷新输入寄存器(CHx测量值+时间)和离散输入(报警位)
actions = apply_holding_changes();//执行所有dirty保持寄存器变更,部分附带RECONFIGURE action,与线圈action汇总
//实施线圈寄存器修改
if(apply_time_pending) {
apply_time_pending = 0U;
setTime(registers_get_u32(holding_registers, MODBUS_HOLDING_SET_TIME_HI));
}
if(sleep_pending) {
sleep_pending = 0U;
actions |= MODBUS_MAP_ACTION_SLEEP;
}
if(reboot_pending) {
reboot_pending = 0U;
actions |= MODBUS_MAP_ACTION_REBOOT;
}
return actions;
}
还没有评论,来抢沙发吧