加了报警和报警恢复,故障和故障恢复的多次重发机制

This commit is contained in:
小马_666 2025-01-25 10:26:13 +08:00
parent 10623a5dd8
commit 3698960afb
8 changed files with 50 additions and 49 deletions

View File

@ -5,7 +5,7 @@
"type": "mrs-debugger", "type": "mrs-debugger",
"request": "launch", "request": "launch",
"name": "JT-DT-YD4N02A_RTT_MRS-4G", "name": "JT-DT-YD4N02A_RTT_MRS-4G",
"cwd": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS", "cwd": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K",
"openOCDCfg": { "openOCDCfg": {
"useLocalOpenOCD": true, "useLocalOpenOCD": true,
"executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe",
@ -39,8 +39,8 @@
"additionalCommands": [] "additionalCommands": []
}, },
"loadedFiles": { "loadedFiles": {
"executableFile": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", "executableFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf",
"symbolFile": "c:\\Users\\16586\\Desktop\\JT-DT-YD4N02A_4G_RTT_MRS\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf", "symbolFile": "d:\\SXDT\\Project\\CH32\\JT-DT-YD4N02A_RTT_MRS-NT26K\\obj\\JT-DT-YD4N02A_RTT_MRS-4G.elf",
"executableFileOffset": 0, "executableFileOffset": 0,
"symbolFileOffset": 0 "symbolFileOffset": 0
}, },

View File

@ -1,4 +1,6 @@
# 一、版本更新内容 # 一、版本更新内容
## v1.0 完成基本功能和物联网功能 ## v1.0 完成基本功能和物联网功能
## v1.1 增加了修改服务器地址的功能增加了物联网接收部分CRC值校验功能 ## v1.1 增加了修改服务器地址的功能增加了物联网接收部分CRC值校验功能##
## v1.6 增加了当上电失败时不发送其他事件的功能,以及掉电关闭模组功能,快速关机的功能
## v1.7 增加了报警和报警恢复,故障和故障恢复发送失败不断重试的功能

View File

@ -20,7 +20,7 @@
#define MAX_EXPIRATION_DAYS (365 * MAX_EXPIRATION_YEARS + 30 * 3U) #define MAX_EXPIRATION_DAYS (365 * MAX_EXPIRATION_YEARS + 30 * 3U)
#define SYS_HW_VERSION (0X22U) #define SYS_HW_VERSION (0X22U)
#define SYS_SW_VERSION (0X16U) #define SYS_SW_VERSION (0X17U)
#define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00U) // 高位在前,低位在后 #define SYS_IOT_UPLOAD_CYCLE_MIN (0X3C00U) // 高位在前,低位在后
#define SYS_IOT_RETRY (0X03U) #define SYS_IOT_RETRY (0X03U)
#define SYS_TEMP_ALARM_THRESHOLD (0X30U) #define SYS_TEMP_ALARM_THRESHOLD (0X30U)

View File

@ -518,7 +518,7 @@ int nt26k_netdev_check_link_status(struct netdev *netdev)
RT_ASSERT(netdev); RT_ASSERT(netdev);
rt_snprintf(tname, RT_NAME_MAX, "%s", netdev->name); rt_snprintf(tname, RT_NAME_MAX, "%s_link", netdev->name);
/* create nt26k link status polling thread */ /* create nt26k link status polling thread */
tid = rt_thread_create(tname, nt26k_check_link_status_entry, (void *)netdev, tid = rt_thread_create(tname, nt26k_check_link_status_entry, (void *)netdev,

View File

@ -38,8 +38,7 @@ static uint8_t _CommonBtnRead(void *arg)
switch (btn->id) switch (btn->id)
{ {
case USER_BUTTON_0: case USER_BUTTON_0:
value = rt_pin_read(BUTTON_0); return rt_pin_read(BUTTON_0);
// return rt_pin_read(BUTTON_0);
break; break;
default: default:

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-11-14 10:21:04 * @Date: 2024-11-14 10:21:04
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-23 09:05:28 * @LastEditTime: 2025-01-24 10:53:59
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c
* @Description: * @Description:
* *

View File

@ -2,7 +2,7 @@
* @Author: mbw * @Author: mbw
* @Date: 2024-10-09 08:42:14 * @Date: 2024-10-09 08:42:14
* @LastEditors: mbw && 1600520629@qq.com * @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-24 10:23:59 * @LastEditTime: 2025-01-25 09:42:09
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c
* @Description: * @Description:
* *
@ -199,11 +199,6 @@ static void Nt26k_Ht_Timer_Cb(void *parameter)
// 定时器回调函数,当1分钟内没有数据交互时关闭tcp连接 // 定时器回调函数,当1分钟内没有数据交互时关闭tcp连接
static void Nt26k_Error_Timer_Cb(void *parameter) static void Nt26k_Error_Timer_Cb(void *parameter)
{ {
if((nt26k_send_error_flag == 1) && power_on_send_flag == 1)
{
nt26k_send_error_flag = 0;
Nt26k_Send_Event(nt26k_event_index.current_event);
}
if (power_on_send_flag) // 上电成功时,停止定时器 if (power_on_send_flag) // 上电成功时,停止定时器
{ {
rt_timer_stop(nt26k_error_timer); rt_timer_stop(nt26k_error_timer);
@ -834,11 +829,6 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device,
{ {
// 收不到说明在平台未注册,此时nt26k_connect_sever_flag 为0但nt26k_conncet_tcp_flag = 1此时不发起重连等待事件触发就行 // 收不到说明在平台未注册,此时nt26k_connect_sever_flag 为0但nt26k_conncet_tcp_flag = 1此时不发起重连等待事件触发就行
nt26k_connect_sever_flag = 0; nt26k_connect_sever_flag = 0;
if(rt_strcmp(event->event_name, "上电心跳事件") != RT_EOK)//不是上电事件下的失败
{
nt26k_send_error_flag = 1;
rt_timer_start(nt26k_error_timer);
}
ret = RT_ERROR; ret = RT_ERROR;
} }
} }
@ -1302,7 +1292,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kPowerOnEvent)) if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kPowerOnEvent))
{ {
result = Nt26k_Process_Events(kNt26kPowerOnEvent, device, ops); // 当上电心跳包发送不成功时,其他事件不启动 result = Nt26k_Process_Events(kNt26kPowerOnEvent, device, ops); // 当上电心跳包发送不成功时,其他事件不启动
if (result) if (result != RT_EOK)
{ {
power_on_send_flag = 0; power_on_send_flag = 0;
rt_timer_start(nt26k_error_timer); // 启动重连定时器, 3min一次直到发送成功 rt_timer_start(nt26k_error_timer); // 启动重连定时器, 3min一次直到发送成功
@ -1311,7 +1301,6 @@ static void Nt26k_Send_Thread_Entry(void *param)
else else
{ {
rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送 rt_timer_start(nt26k_timer); // 当上电心跳包发送成功时, 开始心跳包周期发送
rt_timer_start(nt26k_upload_timer); // 周期修改时间更新 rt_timer_start(nt26k_upload_timer); // 周期修改时间更新
power_on_send_flag = 1; power_on_send_flag = 1;
} }
@ -1321,7 +1310,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kHeartbeatEvent)) if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kHeartbeatEvent))
{ {
result = Nt26k_Process_Events(kNt26kHeartbeatEvent, device, ops); result = Nt26k_Process_Events(kNt26kHeartbeatEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1333,42 +1322,55 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmEvent))
{ {
result = Nt26k_Process_Events(kNt26kAlarmEvent, device, ops); result = Nt26k_Process_Events(kNt26kAlarmEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
if (SysControl.status == kAlarmEvent)
{
Nt26k_Send_Event(kNt26kAlarmEvent);
}
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
} }
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kAlarmRcyEvent))
{ {
result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops); result = Nt26k_Process_Events(kNt26kAlarmRcyEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
if (SysControl.status == kAlarmRcyEvent)
{
Nt26k_Send_Event(kNt26kAlarmRcyEvent);
}
} }
} }
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultEvent))
{ {
if (device_state_flag != 1) // 当设备失效时,只上报失效信息 result = Nt26k_Process_Events(kNt26kFaultEvent, device, ops);
if (result != RT_EOK)
{ {
result = Nt26k_Process_Events(kNt26kFaultEvent, device, ops); LOG_E("nt26k send data failed result = [%d]\n", result);
if (result) if (SysControl.status == kFaultEvent)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); Nt26k_Send_Event(kNt26kFaultEvent);
} }
} }
} }
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultRcyEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFaultRcyEvent))
{ {
result = Nt26k_Process_Events(kNt26kFaultRcyEvent, device, ops); result = Nt26k_Process_Events(kNt26kFaultRcyEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
if (SysControl.status == kFaultRcyEvent)
{
Nt26k_Send_Event(kNt26kFaultRcyEvent);
}
} }
} }
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSelfCheckEvent))
{ {
result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops); result = Nt26k_Process_Events(kNt26kSelfCheckEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1376,7 +1378,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSilenceEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kSilenceEvent))
{ {
result = Nt26k_Process_Events(kNt26kSilenceEvent, device, ops); result = Nt26k_Process_Events(kNt26kSilenceEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1384,7 +1386,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kExceptionEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kExceptionEvent))
{ {
result = Nt26k_Process_Events(kNt26kExceptionEvent, device, ops); result = Nt26k_Process_Events(kNt26kExceptionEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1392,7 +1394,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kValveStatusEvent))
{ {
result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops); result = Nt26k_Process_Events(kNt26kValveStatusEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1400,7 +1402,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFanStatusEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kFanStatusEvent))
{ {
result = Nt26k_Process_Events(kNt26kFanStatusEvent, device, ops); result = Nt26k_Process_Events(kNt26kFanStatusEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1408,7 +1410,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kTempAnomalyEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kTempAnomalyEvent))
{ {
result = Nt26k_Process_Events(kNt26kTempAnomalyEvent, device, ops); result = Nt26k_Process_Events(kNt26kTempAnomalyEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1417,7 +1419,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
{ {
nt26k_event_initialized = RT_FALSE; // 当接收到掉电事件时,发送完成后删除事件,不再接收其他事件 nt26k_event_initialized = RT_FALSE; // 当接收到掉电事件时,发送完成后删除事件,不再接收其他事件
result = Nt26k_Process_Events(kNt26kPowerDownEvent, device, ops); result = Nt26k_Process_Events(kNt26kPowerDownEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1425,7 +1427,7 @@ static void Nt26k_Send_Thread_Entry(void *param)
else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kDeviceFailureEvent)) else if (nt26k_recv_event & Nt26k_Get_Event_Flag(kNt26kDeviceFailureEvent))
{ {
result = Nt26k_Process_Events(kNt26kDeviceFailureEvent, device, ops); result = Nt26k_Process_Events(kNt26kDeviceFailureEvent, device, ops);
if (result) if (result != RT_EOK)
{ {
LOG_E("nt26k send data failed result = [%d]\n", result); LOG_E("nt26k send data failed result = [%d]\n", result);
} }
@ -1482,9 +1484,8 @@ static void Nt26k_Life_Thread_Entry(void *parameter)
if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK) if (device->class->device_ops->control(device, AT_DEVICE_CTRL_POWER_ON, RT_NULL) == RT_EOK)
{ {
LOG_D("AT device power on success"); LOG_D("AT device power on success");
rt_thread_mdelay(1000);
/* disable echo */ /* disable echo */
at_obj_exec_cmd(device->client, resp, "ATE0"); at_client_obj_wait_connect(device->client, 5000);
/*AT+QICFG="dataformat" 设置收发模式*/ /*AT+QICFG="dataformat" 设置收发模式*/
if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK) if (at_obj_exec_cmd(device->client, resp, "AT+QICFG=\"dataformat\",%d,%d", AT_NSONMI_MODE_DEFAULT, AT_NSONMI_MODE_DEFAULT) != RT_EOK)
{ {

View File

@ -15,18 +15,14 @@
/*使用动态日志及密码功能时,需开启宏 FINSH_USING_AUTH ULOG_USING_FILTER ENABLE_LOG_ALL ULOG_OUTPUT_LVL = 7 以及设置ulog.c 1522行 输出等级为0*/ /*使用动态日志及密码功能时,需开启宏 FINSH_USING_AUTH ULOG_USING_FILTER ENABLE_LOG_ALL ULOG_OUTPUT_LVL = 7 以及设置ulog.c 1522行 输出等级为0*/
/**/ /**/
// #define FINSH_USING_AUTH //开启终端密码登录功能 #define FINSH_USING_AUTH //开启终端密码登录功能
// #define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行 #define ULOG_USING_FILTER //开启动态修改日志等级 默认修改在ulog.c 1522行
#define ENABLE_LOG_ALL #define ENABLE_LOG_ALL
#define TEST_ENABLE //打开所有的终端测试程序 #define TEST_ENABLE //打开所有的终端测试程序
#define ULOG_OUTPUT_LVL 7 // 生产时将其设为0 #define ULOG_OUTPUT_LVL 7
#define IOT_MODULE_SWITCH 1 //开启物联网功能 #define IOT_MODULE_SWITCH 1 //开启物联网功能
// #ifdef FINSH_USING_AUTH
#define AT_USING_CLI
#define AT_PRINT_RAW_CMD
// #endif
/* RT-Thread Kernel */ /* RT-Thread Kernel */
@ -82,7 +78,7 @@
#define RT_USING_DEVICE #define RT_USING_DEVICE
#define RT_USING_CONSOLE #define RT_USING_CONSOLE
#define RT_CONSOLEBUF_SIZE 512 #define RT_CONSOLEBUF_SIZE 640
#define RT_CONSOLE_DEVICE_NAME "uart2" #define RT_CONSOLE_DEVICE_NAME "uart2"
/* end of Kernel Device Object */ /* end of Kernel Device Object */
#define RT_VER_NUM 0x40101 #define RT_VER_NUM 0x40101
@ -159,7 +155,10 @@
#define AT_USING_CLIENT #define AT_USING_CLIENT
#define AT_CLIENT_NUM_MAX 1 #define AT_CLIENT_NUM_MAX 1
#ifndef FINSH_USING_AUTH
#define AT_USING_CLI
#define AT_PRINT_RAW_CMD
#endif
#define AT_CMD_MAX_LEN 256 #define AT_CMD_MAX_LEN 256
#define AT_SW_VERSION_NUM 0x10301 #define AT_SW_VERSION_NUM 0x10301