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 cfb32dc..419dec6 100644 --- a/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c +++ b/V1.5/STM32F103_App1/HardWare/FEED_SCALE/feed_scale.c @@ -32,6 +32,7 @@ static uint16_t zero_weight = 0; /* 去皮 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=无等待中的查询 */ static uint8_t first_query_reported = 0; /* 首次上电有效重量已上报 */ /* 重量异常增加计数 */ @@ -385,15 +386,27 @@ void feedScaleProcess(void) if (first_query_sent == 0 || (HAL_GetTick() - last_query_tick) >= query_interval) { last_query_tick = HAL_GetTick(); feed_scale_send_query(); + await_reply_tick = HAL_GetTick(); /* 标记等待应答,1s 无帧打日志 */ if (first_query_sent == 0) { first_query_sent = 1; log_info("> FEED: 首次查询已发送"); } } + /* 查询发出后 1s 仍无任何应答帧:打日志(有无应答一目了然) */ + if (await_reply_tick && (HAL_GetTick() - await_reply_tick) > 1000u) { + await_reply_tick = 0; + log_warn("> FEED: 查询无应答(秤未接/线序/波特率/站号不对)"); + s_last_err = 1; + } + /* 读取 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 != -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/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 05dae2e..f13ecf5 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -187,3 +187,4 @@ - 淇 485 淇鏂规锛氬幓鎺 TX 鍚庢竻缂撳啿锛堜細鍚冩帀蹇熷洖澶嶇殑鍓嶅嚑涓瓧鑺傦級锛 鏀逛负鍥炲0甯ф寜鍐呭璇嗗埆闈欓粯涓㈠純锛堜笌鏌ヨ鍛戒护瀹屽叏涓鑷寸殑甯э級锛屽悎骞跺抚闈 01 03 04 甯уご鎼滅储瑙f瀽 - 485 棣栨鏌ヨ寤惰繜 3s锛堥伩寮涓婄數绐楀彛锛岄槻姝㈤涓簲绛旇寮鏈虹箒蹇欐湡鎾炲潖锛 +- 485 鏌ヨ鏃ュ織澧炲己锛氭煡璇㈠彂鍑 1s 鏃犱换浣曞簲绛斿抚鎵 WARN锛堟棤搴旂瓟锛夛紝鏈夊簲绛斿垯鍘熸湁 hex/瑙f瀽鏃ュ織瑕嗙洊