扩展板反馈校验对齐板载语义:命令后150ms直接比FC03反馈位(不等1s故障位),失败文案统一为Load unpowered / relay failure !

This commit is contained in:
helei 2026-09-04 21:26:25 +08:00
parent 8f0e137c57
commit 5ee368da7c
3 changed files with 7 additions and 5 deletions

View File

@ -79,7 +79,7 @@
不一致的回路会**逐路补发 FC05 纠正**——所以从机上线后紧跟着收到几条 FC05 属正常恢复流程,务必如实执行并回显)
2. FC05 收到并校验通过(地址/功能码/线圈范围/CRC后**立即执行**再回显
3. 反馈输入:每路继电器配负载反馈检测(同主控板载继电器:吸合后负载得电=高)。从机自行维护 REG2 故障位:某路输出状态与反馈不一致**持续超过 1s** 置 1恢复一致后清 0
4. 反馈采样建议 10~50ms 周期,加简单消抖(如连续 3 次一致才更新 REG1
4. 反馈采样建议 10~50ms 周期,加简单消抖(如连续 3 次一致才更新 REG1**消抖总时长必须 <150ms**主控在 FC05 回显后 150ms 就读 FC03 校验反馈位反馈跟不上会误判"负载未通电"
5. 只响应地址 0x10 的帧;**不要响应广播/其它地址**(总线上还有秤,地址 0x01
6. 收帧间隔不足 50ms 也要能正常解析(主控保证发送间隔,从机只做鲁棒接收)
@ -87,7 +87,7 @@
主控侧已实现(`HardWare/RELAY/ext_relay.c`
- **命令流程**:平台/蓝牙下发 → FC05 → 等回显300ms 超时,补发 1 次)→ 延时 150ms 等触点稳定 → FC03 读状态 → 校验"输出位=目标状态 且 故障位=0" → 应答平台 OK/失败 → 上报全状态
- **命令流程**:平台/蓝牙下发 → FC05 → 等回显300ms 超时,补发 1 次)→ 延时 150ms 等触点稳定 → FC03 读状态 → 校验"输出位=目标状态 **且 反馈位=目标状态**"(与板载继电器反馈同语义,失败应答 `Load unpowered / relay failure !`)→ 应答平台 → 上报全状态
- **周期轮询**:空闲每 2s 发一次 FC03兼在线检测连续 3 次无应答判离线(日志提示)
- **断电记忆恢复**:扩展板状态存在主控 EEPROM偏移 102 的 Relay_State[5]bit0~3每次离线→上线时比对实际状态与记忆不一致的回路逐路补发 FC05 纠正,恢复完成统一上报一次
- **离线行为**:离线期间下发命令直接回复平台 "ext relay board offline";板子恢复应答后自动上线并补一次状态上报

View File

@ -294,15 +294,17 @@ void ext_relay_process(void)
log_warn("> EXT: 反馈异常标志=%02X (输出=%02X 反馈=%02X)", s_fault, s_state, s_fb);
}
} else {
/* 与板载继电器反馈同语义: 输出位和反馈位都要等于目标状态才算成功
* ( 1s , 150ms REG1 , "吸合但负载没电") */
uint8_t bit = (uint8_t)(1u << (cmd_ch - 1));
int ok = (((s_state & bit) != 0) == cmd_on) && ((s_fault & bit) == 0);
int ok = (((s_state & bit) != 0) == cmd_on) && (((s_fb & bit) != 0) == cmd_on);
if (ok) {
log_info("> EXT: SW%d %s成功 (反馈=%02X)", cmd_ch + 4, cmd_on ? "" : "", s_fb);
ext_respond(1, "OK");
} else {
log_warn("> EXT: SW%d %s未生效 (输出=%02X 反馈=%02X 故障=%02X)",
cmd_ch + 4, cmd_on ? "" : "", s_state, s_fb, s_fault);
ext_respond(0, "ext relay failed / load unpowered");
ext_respond(0, "Load unpowered / relay failure !"); /* 与板载失败文案一致 */
}
ext_save_state(); /* 断电记忆: 以实际输出状态落盘 */
relayStatueUpdata(); /* 命令完成后上报全状态 */

View File

@ -5,7 +5,7 @@
### 新增
- **485 级联扩展继电器板4 路带反馈Modbus RTU 从机 0x10**,与称重秤共用 USART2 总线:
- 新模块 `HardWare/RELAY/ext_relay.c`FC05 写线圈控制 + FC03 读 4 寄存器(输出/反馈/故障/版本)
- 命令闭环FC05 回显校验300ms 超时补发 1 次)→ 150ms 触点稳定 → FC03 校验输出位+故障位 → 应答平台 → 全状态上报
- 命令闭环FC05 回显校验300ms 超时补发 1 次)→ 150ms 触点稳定 → FC03 校验输出位+反馈位(与板载继电器反馈同语义,失败应答 `Load unpowered / relay failure !`→ 应答平台 → 全状态上报
- 空闲 2s 轮询兼在线检测,连续 3 次无应答判离线;离线期间命令直接拒绝;恢复应答自动上线补报
- 反馈异常(故障位非 0打 WARN 日志
- **485 总线多从机改造**USART2 收帧统一在 feedScaleProcess 收取后按站号分发0x01 秤 / 0x10 扩展板);