修复sw5~sw8被旧范围检查拦截(上次改错到relaySet的同名行,已还原)+ext_relay发送前清残留应答标志+故障告警变化才打印

This commit is contained in:
helei 2026-09-08 12:53:24 +08:00
parent 5ee368da7c
commit be448b07af
3 changed files with 45 additions and 24 deletions

View File

@ -37,9 +37,17 @@ static uint16_t ext_crc16(const uint8_t *data, uint16_t len)
return crc;
}
/* 帧事件(on_frame 置位, process 消费; 同在 app_task 单线程) */
static uint8_t rx_echo_ok = 0;
static uint8_t rx_state_ok = 0;
static uint8_t rx_exc = 0;
/* 总线发送: 等 50ms 静默 + 清接收缓冲(防陈旧帧) + 发送 + 刷新时间戳 */
static void ext_tx(const uint8_t *frame, uint16_t len)
{
rx_echo_ok = 0; /* 清上一事务残留的应答标志, 防止迟到帧被当前事务误消费 */
rx_state_ok = 0;
rx_exc = 0;
uint32_t dt = HAL_GetTick() - rs485_bus_last_tick();
if (dt < 50u) vTaskDelay(50u - dt);
USART2_FlushRxBuf();
@ -82,6 +90,7 @@ static uint8_t s_fb = 0; /* REG1
static uint8_t s_fault = 0; /* REG2 故障标志 */
static uint16_t s_ver = 0; /* REG3 从机版本 */
static uint8_t s_miss = 0; /* 连续无应答计数 */
static uint8_t s_fault_logged = 0; /* 已打印的故障位(变化才重打) */
static uint32_t s_last_poll = 0;
/* 命令状态机 */
@ -93,10 +102,6 @@ static uint8_t cmd_is_restore = 0;/*
static uint32_t cmd_tick = 0;
static char cmd_id[20] = {0};
/* 帧事件(on_frame 置位, process 消费; 同在 app_task 单线程) */
static uint8_t rx_echo_ok = 0;
static uint8_t rx_state_ok = 0;
static uint8_t rx_exc = 0;
#define EXT_STATE_EEPROM_IDX 5 /* MqttInfoStr.Relay_State[5] 原保留字节: 扩展板状态位掩码 */
@ -290,9 +295,12 @@ void ext_relay_process(void)
}
} else if (cmd_is_poll) {
cmd_is_poll = 0;
if (s_fault != s_fault_logged) { /* 故障位变化才打印, 防止每 2s 刷屏 */
s_fault_logged = s_fault;
if (s_fault) {
log_warn("> EXT: 反馈异常标志=%02X (输出=%02X 反馈=%02X)", s_fault, s_state, s_fb);
}
}
} else {
/* 与板载继电器反馈同语义: 输出位和反馈位都要等于目标状态才算成功
* ( 1s , 150ms REG1 , "吸合但负载没电") */

View File

@ -135,7 +135,7 @@ GPIO_PinState relayReadFb(uint8_t ch)
/* 设置指定继电器开关状态: 只写 GPIO 和 Relay_State, 不碰 EEPROM/网络 */
void relaySet(uint8_t ch, uint8_t on)
{
if (ch < 1 || ch > 8) return;
if (ch < 1 || ch > 4) return;
MqttInfoStr.Relay_State[ch] = on ? 1 : 0;
switch (ch) {
case 1: if (on) Relay1_ON; else Relay1_OFF; break;
@ -191,7 +191,7 @@ void relayAction(uint8_t *data)
p = strstr((char *)data, "\"sw");
ch = p[3] - '0';
/* sw1 与 feeding 指令等效, 均控制继电器 1 */
if (ch < 1 || ch > 4) { log_warn("> 继电器: sw 编号无效,仅支持 sw1~sw4"); return; }
if (ch < 1 || ch > 8) { log_warn("> 继电器: sw 编号无效,仅支持 sw1~sw8"); return; }
swkey[0] = 's'; swkey[1] = 'w'; swkey[2] = (char)('0' + ch); swkey[3] = '\0';
if (!proto_get_bool((char *)data, swkey, &on)) {

View File

@ -750,6 +750,19 @@
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\HardWare\RELAY\ext_relay.c</PathWithFileName>
<FilenameWithoutPath>ext_relay.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\HardWare\LOG\log.c</PathWithFileName>
<FilenameWithoutPath>log.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@ -757,7 +770,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -770,7 +783,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -783,7 +796,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -796,7 +809,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -809,7 +822,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -822,7 +835,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -835,7 +848,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -848,7 +861,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -861,7 +874,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -874,7 +887,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -887,7 +900,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -900,7 +913,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -913,7 +926,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -926,7 +939,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -939,7 +952,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
@ -960,7 +973,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>53</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>