From 05700826d109b09f6031e60e088a2c5ea1ee392e Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 22 Aug 2026 12:56:35 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20485=E5=BA=94=E7=AD=94=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=A1=A5=E5=8F=91=E4=B8=80=E6=AC=A1=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2(400ms=E6=97=A0=E5=A5=BD=E5=B8=A7=E6=88=96=E6=94=B6?= =?UTF-8?q?=E5=88=B0=E5=9D=8F=E5=B8=A7),=E5=AF=B9=E6=8A=97=E6=94=B6?= =?UTF-8?q?=E5=8F=91=E5=99=A8=E5=88=87=E6=8D=A2=E5=88=87=E5=B8=A7=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HardWare/FEED_SCALE/feed_scale.c | 31 +++++++++++++------ .../MDK-ARM/STM32F103rb_App1.uvoptx | 2 +- V1.5/版本说明.md | 2 ++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c b/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c index 24b94d4..bff10e0 100644 --- a/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c +++ b/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c @@ -33,6 +33,8 @@ static uint32_t last_query_tick = 0; static uint32_t feed_start_tick = 0; /* Ͷιʼʱ̣ڳʱ */ static uint8_t first_query_sent = 0; /* ״ϵѯѷ */ static uint32_t await_reply_tick = 0; /* ѯʱ̣0=޵ȴеIJѯ */ +static uint8_t query_retried = 0; /* βѯѲ */ +static uint8_t await_bad_frame = 0; /* ȴڼյ֡֡ͷ/У */ static uint8_t first_query_reported = 0; /* ״ϵЧϱ */ /* 쳣Ӽ */ @@ -398,21 +400,32 @@ void feedScaleProcess(void) } } - /* ѯ 1s κӦ֡־ӦһĿȻ */ - if (await_reply_tick && (HAL_GetTick() - await_reply_tick) > 1000u) { - await_reply_tick = 0; - log_warn("> FEED: ѯӦ𣨳δ///վŲԣ"); - s_last_err = 1; + /* Ӧӣ400ms ޺֡յ֡ ԶһΣ + * 600ms ԲвűӦ𣨻֡ԭ parse Ѵ򣬲ظ */ + if (await_reply_tick) { + uint32_t el = HAL_GetTick() - await_reply_tick; + if (!query_retried && (el > 400u || (await_bad_frame && el > 100u))) { + query_retried = 1; + await_bad_frame = 0; + await_reply_tick = HAL_GetTick(); + log_info("> FEED: Ӧ쳣ѯ"); + feed_scale_send_query(); + } else if (query_retried && el > 600u) { + await_reply_tick = 0; + if (!await_bad_frame) { + log_warn("> FEED: ѯӦ𣨳δ///վŲԣ"); + s_last_err = 1; + } + await_bad_frame = 0; + } } /* ȡ 485 */ len = feed_scale_read_frame(rx_buf, sizeof(rx_buf)); if (len > 0) { - if (!(len == sizeof(RS485_WEIGHT_CMD) && - memcmp(rx_buf, RS485_WEIGHT_CMD, sizeof(RS485_WEIGHT_CMD)) == 0)) { - await_reply_tick = 0; /* յǻ֡βѯӦ */ - } int prc = feed_scale_parse_weight(rx_buf, len, &cur_weight); + if (prc == 0) { await_reply_tick = 0; query_retried = 0; await_bad_frame = 0; } + else if (prc != -7) { await_bad_frame = 1; } /* ֡ */ if (prc != -7) { /* -7=֡Ӱ״̬ʾ */ s_last_err = (prc == 0) ? 0 : (prc == -1 ? 2 : (prc == -2 ? 3 : (prc == -4 ? 4 : (prc == -6 ? 6 : 5)))); } diff --git a/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvoptx b/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvoptx index 7ae1993..bdcee19 100644 --- a/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvoptx +++ b/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvoptx @@ -647,7 +647,7 @@ HardWare - 1 + 0 0 0 0 diff --git a/V1.5/版本说明.md b/V1.5/版本说明.md index 419ca18..fcf25a2 100644 --- a/V1.5/版本说明.md +++ b/V1.5/版本说明.md @@ -193,3 +193,5 @@ - 根治 485 接收停摆:HAL 处理 ORE 错误后 RxState 常卡 BUSY_RX,自愈里的 Receive_IT 静默失败 → 错误回调重挂前强制 RxState=READY;查询前清缓冲时顺带检查接收中断是否停摆并拉起(不 Abort) USART1/USART5 自愈同样加固 +- 485 丢帧根因定位并加固:上位机秒回时回复帧头被 485 收发器切换延迟切掉(真秤有处理延迟不受影响); + 现 400ms 无好帧或收到坏帧自动补发一次查询,仍不行才报无应答