From 433030cd9da8ef002e12060de523cf2288f42bdd Mon Sep 17 00:00:00 2001 From: helei Date: Fri, 21 Aug 2026 22:19:11 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E6=96=AD=E7=94=B5pow:0=E6=94=B9?= =?UTF-8?q?=E7=AD=89=E6=A8=A1=E7=BB=84OK(1.5s=20x3=E6=AC=A1)+OK=E5=90=8E80?= =?UTF-8?q?0ms=E7=A9=BA=E5=8F=A3,=E5=A4=B1=E8=B4=A5=E4=B9=9F=E7=85=A7?= =?UTF-8?q?=E5=B8=B8=E8=AE=B0=E5=BD=95=E5=A4=8D=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V1.5/STM32F103_App1/HardWare/ADC/adc.c | 13 ++++++---- .../STM32F103_App1/HardWare/NETWORK/network.c | 24 ++++++++++++++++++- .../STM32F103_App1/HardWare/NETWORK/network.h | 1 + V1.5/STM32F103_App1/Inc/main.h | 14 +++++------ V1.5/鐗堟湰璇存槑.md | 2 ++ 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/V1.5/STM32F103_App1/HardWare/ADC/adc.c b/V1.5/STM32F103_App1/HardWare/ADC/adc.c index 674634e..cb577a0 100644 --- a/V1.5/STM32F103_App1/HardWare/ADC/adc.c +++ b/V1.5/STM32F103_App1/HardWare/ADC/adc.c @@ -65,15 +65,18 @@ void update_batter(void) } if (!confirm) return; - /* 分毫必争:先发掉电消息,后打日志(串口打印也要十几 ms)。 - * 发送通道被占用(如 GPS 轮询)时丢弃返回 -1:不锁存,下个 50ms 周期重试, - * 直到发出或电容耗尽 */ - if (NET_publish_power(0) != 0) return; + /* 分毫必争:发掉电消息并等模组回 OK(最多 ~1.5s/次,最多试 3 次)。 + * 3 次都发不出(通道忙/模组已掉线)也照常记录复位,不能因发送失败就不记录 */ + { + static uint8_t pub_try = 0; + if (NET_publish_power_wait(0) != 0 && ++pub_try < 3) return; + pub_try = 0; + } powoff = 1; log_info("> 电量低: %d%%", (int)batter_valtage); hlw8032_save(); /* 本地记录:电量、断电原因(都很快) */ reset_log_power_loss(); - HAL_Delay(500); /* 给模组把 MQTT 报文发出去的时间 */ + HAL_Delay(800); /* OK 后再留 800ms 让报文上空口 */ NVIC_SystemReset(); /* BootLoader 会检测主电源,12V 未恢复前不跳 APP,防止外设没上电时程序乱跑 */ } diff --git a/V1.5/STM32F103_App1/HardWare/NETWORK/network.c b/V1.5/STM32F103_App1/HardWare/NETWORK/network.c index 8e60583..cb9a90b 100644 --- a/V1.5/STM32F103_App1/HardWare/NETWORK/network.c +++ b/V1.5/STM32F103_App1/HardWare/NETWORK/network.c @@ -355,7 +355,29 @@ int NET_publish_power(int on) return 0; } -/* 上报累计电量: energy 字段,单位 kWh,两位小数 */ +/* 断电预警专用:发 pow 并等模组回 OK(最多 ~1.5s),确认模组已受理。 + * 返回 0=模组已受理,-1=通道忙/无应答。WiFi 通道 QoS0 无 OK 概念,发完即返 0 */ +int NET_publish_power_wait(int on) +{ + if (g_net_tx_busy) return -1; + if (net_at_trylock() != 0) return -1; + int rc = 0; + if (s_backend == NET_BACKEND_4G) { + static char cmd[160]; + sprintf(cmd, "AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22pow\\22:%d}}\"", + MqttInfoStr.ClientID, on ? 1 : 0); + if (catSendCmd(cmd, "OK", 1, 15) != 0) rc = -1; + } else { + char json[96]; + snprintf(json, sizeof(json), + "{\"header\":\"iot.prop.post\",\"body\":{\"pow\":%d}}", on ? 1 : 0); + net_wifi_publish_up(json); + } + net_at_unlock(); + return rc; +} + +/* 上报累计电量+实时功率: energy(kWh) + power(W),同一条报文 */ void NET_publish_energy(float kwh, float power_w) { if (g_net_tx_busy) { log_info("> NET: energy 上报被丢弃 (发送忙)"); return; } diff --git a/V1.5/STM32F103_App1/HardWare/NETWORK/network.h b/V1.5/STM32F103_App1/HardWare/NETWORK/network.h index 089ed08..c50443d 100644 --- a/V1.5/STM32F103_App1/HardWare/NETWORK/network.h +++ b/V1.5/STM32F103_App1/HardWare/NETWORK/network.h @@ -53,6 +53,7 @@ int NET_publish_status(int sw1, int feeding, int sw2, int sw3, int sw4, float weight_kg, float once_wt_kg, float zero_kg); /* 返回 0=已发出 */ void NET_publish_response(const char *cmd_id, int ok, const char *msg); int NET_publish_power(int on); +int NET_publish_power_wait(int on); /* 断电预警专用:等模组 OK,0=已受理 */ void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */ void NET_publish_energy(float kwh, float power_w); /* 上报累计电量,标识符 energy,单位 kWh */ int NET_mqtt_report(const char *header, const char *ota_id, int val); /* 返回 0=送达 */ diff --git a/V1.5/STM32F103_App1/Inc/main.h b/V1.5/STM32F103_App1/Inc/main.h index 69694e5..bd9a271 100644 --- a/V1.5/STM32F103_App1/Inc/main.h +++ b/V1.5/STM32F103_App1/Inc/main.h @@ -54,14 +54,14 @@ extern UART_HandleTypeDef huart3; //#define MQTT_PASSWORD "b612c2839c135934" ////RTOS版-投料机-无蠕变磅秤-01 -#define MQTT_CLIENT_ID "46c080c385c3652e" -#define MQTT_USERNAME "766990788193702677" -#define MQTT_PASSWORD "6ae9622b7034326b" +//#define MQTT_CLIENT_ID "46c080c385c3652e" +//#define MQTT_USERNAME "766990788193702677" +//#define MQTT_PASSWORD "6ae9622b7034326b" //RTOS版-投料机-无蠕变磅秤-03 -//#define MQTT_CLIENT_ID "5791a8579d459290" -//#define MQTT_USERNAME "766990788193702677" -//#define MQTT_PASSWORD "5f6cd7748ec9db35" +#define MQTT_CLIENT_ID "5791a8579d459290" +#define MQTT_USERNAME "766990788193702677" +#define MQTT_PASSWORD "5f6cd7748ec9db35" #define MQTT_SERVER_IP "58.17.14.95" #define MQTT_SERVER_PORT 1880 @@ -75,7 +75,7 @@ extern UART_HandleTypeDef huart3; /*===== 蓝牙发射功率(AT+RFPOWER) ===== * 1~18 共 18 级,出厂默认 8。多台设备同场所时调小(如 1~3), * 缩短可搜索距离,避免互相认错设备。模块内保存,改宏后下次开机自动重设一次 */ -#define BLE_TX_POWER 8 +#define BLE_TX_POWER 1 /*===== HLW8032 电量计量系数(UART5 PD2 接收,只上报累计电量) ===== * 电压通道: ZMPT107-1(2mA:2mA),初级 220V 串 100K,次级并 49.9R diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 2ab0248..533b94f 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -172,3 +172,5 @@ 锛>10W 姣 30s锛屽惁鍒欓娆+寮鍏冲垏鎹級锛屽钩鍙扮墿妯″瀷鍔 float 鍗冲彲 - 鏂板钃濈墮鍙戝皠鍔熺巼閰嶇疆锛歮ain.h 瀹 BLE_TX_POWER锛圓T+RFPOWER 1~18 绾э紝榛樿 8锛夛紝 鍔熺巼鍊煎苟鍏 EEPROM 缂撳瓨鍒ゆ柇锛堝亸绉 158锛夛紝鏀瑰畯鍚庝笅娆″紑鏈鸿嚜鍔ㄩ噸璁句竴娆 +- 鏂數娑堟伅鍙戦佸姞鍥猴細pow:0 鏀圭瓑妯$粍鍥 OK锛垀1.5s/娆★紝鏈澶 3 娆★級+ OK 鍚庣暀 800ms 绌哄彛鏃堕棿锛 + 3 娆¢兘澶辫触涔熺収甯稿啓璁板綍澶嶄綅锛堜笉鍥犲彂閫佸け璐ヤ涪鏂數璁板綍锛