V1.5: 断电pow:0改等模组OK(1.5s x3次)+OK后800ms空口,失败也照常记录复位

This commit is contained in:
helei 2026-08-21 22:19:11 +08:00
parent 3daf12e144
commit 433030cd9d
5 changed files with 41 additions and 13 deletions

View File

@ -65,15 +65,18 @@ void update_batter(void)
} }
if (!confirm) return; if (!confirm) return;
/* 分毫必争:先发掉电消息,后打日志(串口打印也要十几 ms /* 分毫必争:发掉电消息并等模组回 OK最多 ~1.5s/次,最多试 3 次)。
* GPS -1 50ms * 3 /线 */
* */ {
if (NET_publish_power(0) != 0) return; static uint8_t pub_try = 0;
if (NET_publish_power_wait(0) != 0 && ++pub_try < 3) return;
pub_try = 0;
}
powoff = 1; powoff = 1;
log_info("> 电量低: %d%%", (int)batter_valtage); log_info("> 电量低: %d%%", (int)batter_valtage);
hlw8032_save(); /* 本地记录:电量、断电原因(都很快) */ hlw8032_save(); /* 本地记录:电量、断电原因(都很快) */
reset_log_power_loss(); reset_log_power_loss();
HAL_Delay(500); /* 给模组把 MQTT 报文发出去的时间 */ HAL_Delay(800); /* OK 后再留 800ms 让报文上空口 */
NVIC_SystemReset(); NVIC_SystemReset();
/* BootLoader 会检测主电源12V 未恢复前不跳 APP防止外设没上电时程序乱跑 */ /* BootLoader 会检测主电源12V 未恢复前不跳 APP防止外设没上电时程序乱跑 */
} }

View File

@ -355,7 +355,29 @@ int NET_publish_power(int on)
return 0; 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) void NET_publish_energy(float kwh, float power_w)
{ {
if (g_net_tx_busy) { log_info("> NET: energy 上报被丢弃 (发送忙)"); return; } if (g_net_tx_busy) { log_info("> NET: energy 上报被丢弃 (发送忙)"); return; }

View File

@ -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=已发出 */ float weight_kg, float once_wt_kg, float zero_kg); /* 返回 0=已发出 */
void NET_publish_response(const char *cmd_id, int ok, const char *msg); void NET_publish_response(const char *cmd_id, int ok, const char *msg);
int NET_publish_power(int on); int NET_publish_power(int on);
int NET_publish_power_wait(int on); /* 断电预警专用:等模组 OK0=已受理 */
void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */ void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */
void NET_publish_energy(float kwh, float power_w); /* 上报累计电量,标识符 energy单位 kWh */ 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=送达 */ int NET_mqtt_report(const char *header, const char *ota_id, int val); /* 返回 0=送达 */

View File

@ -54,14 +54,14 @@ extern UART_HandleTypeDef huart3;
//#define MQTT_PASSWORD "b612c2839c135934" //#define MQTT_PASSWORD "b612c2839c135934"
////RTOS版-投料机-无蠕变磅秤-01 ////RTOS版-投料机-无蠕变磅秤-01
#define MQTT_CLIENT_ID "46c080c385c3652e" //#define MQTT_CLIENT_ID "46c080c385c3652e"
#define MQTT_USERNAME "766990788193702677" //#define MQTT_USERNAME "766990788193702677"
#define MQTT_PASSWORD "6ae9622b7034326b" //#define MQTT_PASSWORD "6ae9622b7034326b"
//RTOS版-投料机-无蠕变磅秤-03 //RTOS版-投料机-无蠕变磅秤-03
//#define MQTT_CLIENT_ID "5791a8579d459290" #define MQTT_CLIENT_ID "5791a8579d459290"
//#define MQTT_USERNAME "766990788193702677" #define MQTT_USERNAME "766990788193702677"
//#define MQTT_PASSWORD "5f6cd7748ec9db35" #define MQTT_PASSWORD "5f6cd7748ec9db35"
#define MQTT_SERVER_IP "58.17.14.95" #define MQTT_SERVER_IP "58.17.14.95"
#define MQTT_SERVER_PORT 1880 #define MQTT_SERVER_PORT 1880
@ -75,7 +75,7 @@ extern UART_HandleTypeDef huart3;
/*===== 蓝牙发射功率AT+RFPOWER ===== /*===== 蓝牙发射功率AT+RFPOWER =====
* 1~18 18 8 1~3 * 1~18 18 8 1~3
* */ * */
#define BLE_TX_POWER 8 #define BLE_TX_POWER 1
/*===== HLW8032 电量计量系数UART5 PD2 接收,只上报累计电量) ===== /*===== HLW8032 电量计量系数UART5 PD2 接收,只上报累计电量) =====
* : ZMPT107-1(2mA:2mA) 220V 100K 49.9R * : ZMPT107-1(2mA:2mA) 220V 100K 49.9R

View File

@ -172,3 +172,5 @@
>10W 每 30s否则首次+开关切换),平台物模型加 float 即可 >10W 每 30s否则首次+开关切换),平台物模型加 float 即可
- 新增蓝牙发射功率配置main.h 宏 BLE_TX_POWERAT+RFPOWER 1~18 级,默认 8 - 新增蓝牙发射功率配置main.h 宏 BLE_TX_POWERAT+RFPOWER 1~18 级,默认 8
功率值并入 EEPROM 缓存判断(偏移 158改宏后下次开机自动重设一次 功率值并入 EEPROM 缓存判断(偏移 158改宏后下次开机自动重设一次
- 断电消息发送加固pow:0 改等模组回 OK~1.5s/次,最多 3 次)+ OK 后留 800ms 空口时间;
3 次都失败也照常写记录复位(不因发送失败丢断电记录)