update
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
#include "proto_modbus_master_leakage.h"
|
||||
#include "proto_modbus_slave_ex.h"
|
||||
#include "proto_modbus_tcp_slave_ex.h"
|
||||
|
||||
#include "gui_tjc_hmi.h"
|
||||
|
||||
@@ -58,7 +58,7 @@ app_timer_class_t app_timer_task[] =
|
||||
void app_init(void)
|
||||
{
|
||||
/*flash*/
|
||||
Usr_Flash.Init();
|
||||
w25q32.init();
|
||||
|
||||
/*<2A><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>*/
|
||||
com_uart1.init(&com_uart1);
|
||||
@@ -81,13 +81,18 @@ void app_init(void)
|
||||
modbus_leakage[APP_COM2].init(&modbus_leakage[APP_COM2]);
|
||||
modbus_leakage[APP_COM3].init(&modbus_leakage[APP_COM3]);
|
||||
modbus_leakage[APP_COM4].init(&modbus_leakage[APP_COM4]);
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD>ͨѶ*/
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD>*/
|
||||
DS1302.Init();
|
||||
relay.init();
|
||||
buzzer.init();
|
||||
led.init();
|
||||
|
||||
leakage.init();
|
||||
/*com<6F>ڰ<EFBFBD><DAB0><EFBFBD>*/
|
||||
app_com.init();
|
||||
history.init_history();
|
||||
|
||||
/*<2A><>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>Ƭ<EFBFBD><C6AC>ѯ*/
|
||||
app_timer.init(APP_TIMER_TASK_NUM,app_timer_task);
|
||||
|
||||
@@ -115,6 +120,7 @@ void task_idle(void)
|
||||
com_uart3.rx_task(&com_uart3);
|
||||
com_uart4.rx_task(&com_uart4);
|
||||
com_uart6.rx_task(&com_uart6);
|
||||
W5500.Task();
|
||||
}
|
||||
|
||||
void task_10ms(void)
|
||||
@@ -139,7 +145,10 @@ void task_200ms(void)
|
||||
void task_500ms(void)
|
||||
{
|
||||
led.task();
|
||||
//tdlas.tx_task();
|
||||
modbus_leakage[APP_COM1].tx_task(&modbus_leakage[APP_COM1]);
|
||||
modbus_leakage[APP_COM2].tx_task(&modbus_leakage[APP_COM2]);
|
||||
modbus_leakage[APP_COM3].tx_task(&modbus_leakage[APP_COM3]);
|
||||
// modbus_leakage[APP_COM4].tx_task(&modbus_leakage[APP_COM4]);
|
||||
}
|
||||
|
||||
|
||||
@@ -147,7 +156,6 @@ void task_1s(void)
|
||||
{
|
||||
leakage.task();
|
||||
DS1302.Task();
|
||||
|
||||
buzzer.task();
|
||||
relay.task();
|
||||
}
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
#include "app_alarm.h"
|
||||
#include "app_leakage.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "bsp_w25q.h"
|
||||
#include "bsp_buzzer.h"
|
||||
#include "bsp_relay.h"
|
||||
|
||||
static void history_clear_all(void);
|
||||
static u8 history_read_record(u32 record_index, app_leakage_history_alarm_t *record);
|
||||
static void history_init(void);
|
||||
static void history_save_metadata(void);
|
||||
|
||||
app_leakage_t leakage =
|
||||
{
|
||||
.region_num = 0,
|
||||
.sub_device_num = 0,
|
||||
.init = NULL,
|
||||
.task = app_leakage_task
|
||||
};
|
||||
app_leakage_t *p_leakage = &leakage;
|
||||
|
||||
app_hitory_t history =
|
||||
{
|
||||
.read_history = history_read_record,
|
||||
@@ -24,91 +17,75 @@ app_hitory_t history =
|
||||
.init_history = history_init
|
||||
};
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>һ<EFBFBD><EFBFBD>*/
|
||||
void app_leakage_region_classify(void)
|
||||
/*<2A><><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <20><> <20>̵<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
static void app_leakage_alarm_contorl(void)
|
||||
{
|
||||
u16 i,j;
|
||||
u8 add_region_flag;
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_num = 0;
|
||||
p_leakage->sub_device_num = 0;
|
||||
memset(p_leakage->region_data,0,sizeof(p_leakage->region_data));
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ*/
|
||||
for(i=0;i<APP_LEAKAGE_SUB_DEVICE_NUM;i++)
|
||||
if(0 != leakage.alarm_state)
|
||||
{
|
||||
add_region_flag = 1; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
/*<2A>豸ʹ<E8B1B8><CAB9>*/
|
||||
if(ENABLE == p_leakage->sub_device_data[i].flash_data.state)
|
||||
{
|
||||
p_leakage->sub_device_num++;/*<2A><>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for(j=0;j<APP_LEAKAGE_SUB_DEVICE_NUM;j++)
|
||||
{
|
||||
if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
|
||||
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_data[j].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
|
||||
add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*û<><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>*/
|
||||
if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(p_leakage->region_data[p_leakage->region_num].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN);
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_index[p_leakage->region_data[p_leakage->region_num].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
|
||||
p_leakage->region_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
|
||||
}
|
||||
}
|
||||
buzzer.set.on();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
buzzer.set.off();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_OFF);
|
||||
}
|
||||
|
||||
/*©Һ״̬*/
|
||||
if(leakage.alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_OFF);
|
||||
}
|
||||
/*<2A>ϴ<EFBFBD>״̬*/
|
||||
if(leakage.alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_OFF);
|
||||
}
|
||||
/*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
if(leakage.alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*<2A>쳣״̬<D7B4>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>*/
|
||||
void app_leakage_task(void)
|
||||
{
|
||||
static u16 prev_ch_state[APP_LEAKAGE_SUB_DEVICE_NUM][APP_LEAKAGE_SUB_DEVICE_CH_NUM] = {0};
|
||||
u16 i, j, k, sub_device_index;
|
||||
static u8 initialized = 0;
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʷģ<CAB7><C4A3> */
|
||||
if(!initialized)
|
||||
{
|
||||
history.init_history();
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣ͳ<ECB3A3><CDB3> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
{
|
||||
p_leakage->region_data[i].leakage_num = 0;
|
||||
p_leakage->region_data[i].open_num = 0;
|
||||
p_leakage->region_data[i].time_out_num = 0;
|
||||
}
|
||||
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4>仯<EFBFBD><E4BBAF>ͳ<EFBFBD><CDB3><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
for(i = 0; i < leakage.region_num; i++)
|
||||
{
|
||||
for(j = 0; j < p_leakage->region_data[i].sub_device_num; j++)
|
||||
for(j = 0; j < leakage.region_data[i].sub_device_num; j++)
|
||||
{
|
||||
sub_device_index = p_leakage->region_data[i].sub_device_index[j];
|
||||
sub_device_index = leakage.region_data[i].sub_device_index[j];
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> */
|
||||
if(p_leakage->sub_device_data[sub_device_index].flash_data.state != ENABLE)
|
||||
if(leakage.sub_device_data[sub_device_index].flash_data.state != ENABLE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢*/
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
u16 current_state = leakage.sub_device_data[sub_device_index].ch_data[k].state;
|
||||
u16 prev_state = prev_ch_state[sub_device_index][k];
|
||||
u16 leak_distance = p_leakage->sub_device_data[sub_device_index].ch_data[k].distance;
|
||||
u16 leak_distance = leakage.sub_device_data[sub_device_index].ch_data[k].distance;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD> */
|
||||
if((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE) &&
|
||||
@@ -135,29 +112,11 @@ void app_leakage_task(void)
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ״̬ */
|
||||
prev_ch_state[sub_device_index][k] = current_state;
|
||||
}
|
||||
|
||||
/* ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD>豸ͳ<E8B1B8><CDB3> */
|
||||
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
p_leakage->region_data[i].time_out_num++;
|
||||
continue; /* ͨѶ<CDA8><D1B6>ʱ<EFBFBD><CAB1><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣 */
|
||||
}
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
p_leakage->region_data[i].open_num++;
|
||||
}
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
p_leakage->region_data[i].leakage_num++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ⱨ<EFBFBD><E2B1A8>*/
|
||||
app_leakage_alarm_contorl();
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1> */
|
||||
|
||||
@@ -2,57 +2,7 @@
|
||||
#define _APP_ALARM_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define ENABLE (1)
|
||||
#define DISABLE (0)
|
||||
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE (0x0001) /*©Һ״̬*/
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_OPEN (0x0002) /*<2A>ϴ<EFBFBD>״̬*/
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0xf000) /*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
|
||||
#define APP_LEAKAGE_STRING_NANE_LEN (10)
|
||||
#define APP_LEAKAGE_SUB_DEVICE_NUM (32)
|
||||
#define APP_LEAKAGE_SUB_DEVICE_CH_NUM (4)
|
||||
|
||||
void app_leakage_task(void);
|
||||
void app_leakage_region_classify(void);
|
||||
void history_add_alarm_record(u8 region_idx, u8 device_idx, u8 channel, u16 alarm_type, u16 leak_distance);
|
||||
|
||||
|
||||
/*<2A><><EFBFBD>豸<EFBFBD>洢<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>*/
|
||||
typedef struct
|
||||
{
|
||||
u8 state; /*״̬ ʹ<><CAB9> <20><>ʹ<EFBFBD><CAB9>*/
|
||||
u8 com_port; /*<2A>˿<EFBFBD>*/
|
||||
u8 modbus_id; /*modbus id*/
|
||||
u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A>豸<EFBFBD><E8B1B8>*/
|
||||
u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
}app_leakage_sub_device_flash_data_t;
|
||||
|
||||
/*<2A><><EFBFBD>豸<EFBFBD><E8B1B8>Ϣ*/
|
||||
typedef struct
|
||||
{
|
||||
app_leakage_sub_device_flash_data_t flash_data; /*flash<73>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>*/
|
||||
struct
|
||||
{
|
||||
u16 state; /*״̬*/
|
||||
u16 distance; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
|
||||
}ch_data[APP_LEAKAGE_SUB_DEVICE_CH_NUM]; /*ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
u8 heartbeat; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-59ѭ<39><D1AD>*/
|
||||
u8 test_mode; /*<2A><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-4=<3D><><EFBFBD>Զ<EFBFBD>Ӧͨ<D3A6><CDA8>*/
|
||||
}app_leakage_sub_device_class_t;
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
|
||||
typedef struct
|
||||
{
|
||||
u8 leakage_num; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD>*/
|
||||
u8 open_num; /*<2A>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
u8 time_out_num; /*ͨѶ<CDA8><D1B6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
|
||||
u8 sub_device_num; /*<2A>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
u8 name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
u8 sub_device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*<2A>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
}app_leakage_region_data_class_t;
|
||||
#include "app_leakage.h"
|
||||
|
||||
/* <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ṹ */
|
||||
typedef struct
|
||||
@@ -75,18 +25,6 @@ typedef struct
|
||||
u32 max_records; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC> */
|
||||
} app_leakage_history_metadata_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 region_num;
|
||||
u8 sub_device_num;
|
||||
app_leakage_region_data_class_t region_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
app_leakage_sub_device_class_t sub_device_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
|
||||
app_leakage_history_metadata_t history_metadata;
|
||||
|
||||
void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/
|
||||
void (*task)(void); /*ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
}app_leakage_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -8,34 +8,33 @@ bsp_uart_t *com_to_uart[APP_COM_NUM] =
|
||||
&com_uart4,
|
||||
&com_uart2,
|
||||
&com_uart3,
|
||||
&com_uart1,
|
||||
&com_uart6,
|
||||
};
|
||||
|
||||
static void app_com_uart_baud_rate_set(app_com_class_t * p_com,u16 baud_rate);
|
||||
static void app_com_uart_class_rate_set(app_com_class_t * p_com,u16 baud_rate);
|
||||
static void app_com_class_update(void );
|
||||
static void app_com_init(app_com_class_t * p_com);
|
||||
static void app_com_init(void);
|
||||
|
||||
app_com_t app_com=
|
||||
{
|
||||
|
||||
.init = app_com_init,
|
||||
.class_update = app_com_class_update,
|
||||
};
|
||||
|
||||
static void app_com_init(app_com_class_t * p_com)
|
||||
static void app_com_init(void)
|
||||
{
|
||||
if(p_com == &app_com.com[APP_COM1])
|
||||
p_com->com_uart = com_to_uart[APP_COM1];
|
||||
else if(p_com == &app_com.com[APP_COM2])
|
||||
p_com->com_uart = com_to_uart[APP_COM2];
|
||||
else if(p_com == &app_com.com[APP_COM3])
|
||||
p_com->com_uart = com_to_uart[APP_COM3];
|
||||
else if(p_com == &app_com.com[APP_COM4])
|
||||
p_com->com_uart = com_to_uart[APP_COM4];
|
||||
u8 i;
|
||||
for(i=0;i<APP_COM_NUM;i++)
|
||||
{
|
||||
app_com.com[i].com_uart = com_to_uart[i];
|
||||
}
|
||||
app_com_class_update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
static void app_com_uart_baud_rate_set(app_com_class_t * p_com,u16 baud_rate)
|
||||
static void app_com_class_baud_rate_set(app_com_class_t * p_com,u16 baud_rate)
|
||||
{
|
||||
p_com->com_uart->set.baud_rate(p_com->com_uart,baud_rate);
|
||||
}
|
||||
|
||||
@@ -26,14 +26,15 @@ struct app_com_class_t
|
||||
bsp_uart_t *com_uart; /*<2A><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
struct
|
||||
{
|
||||
void (*baud_rate)(app_com_class_t *,u16); /*<2A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
void (*baud_rate)(app_com_class_t *,u16); /*<2A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
}set;
|
||||
void (*init)(app_com_class_t *); /*<2A><>ʼ<EFBFBD><CABC>*/
|
||||
//void (*init)(app_com_class_t *); /*<2A><>ʼ<EFBFBD><CABC>*/
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
app_com_class_t com[APP_COM_NUM];
|
||||
void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/
|
||||
void (*class_update)(void ); /*com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
}app_com_t;
|
||||
|
||||
|
||||
@@ -2,18 +2,23 @@
|
||||
|
||||
#include <string.h>
|
||||
#include "bsp_w25q.h"
|
||||
#include "bsp_buzzer.h"
|
||||
#include "bsp_relay.h"
|
||||
|
||||
static void history_clear_all(void);
|
||||
static u8 history_read_record(u32 record_index, app_leakage_history_alarm_t *record);
|
||||
static void history_init(void);
|
||||
static void history_save_metadata(void);
|
||||
|
||||
static void app_leakage_init(void);
|
||||
|
||||
app_leakage_t leakage =
|
||||
{
|
||||
.region_num = 0,
|
||||
.region_num = 0,
|
||||
.sub_device_num = 0,
|
||||
.init = NULL,
|
||||
.task = app_leakage_task
|
||||
.init = app_leakage_init,
|
||||
.task = app_leakage_task,
|
||||
.class_update = app_leakage_region_classify,
|
||||
};
|
||||
app_leakage_t *p_leakage = &leakage;
|
||||
|
||||
@@ -24,6 +29,12 @@ app_hitory_t history =
|
||||
.init_history = history_init
|
||||
};
|
||||
|
||||
|
||||
static void app_leakage_init(void)
|
||||
{
|
||||
app_leakage_region_classify();
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><E0A3AC>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ֵ<EFBFBD>һ<EFBFBD><D2BB>*/
|
||||
void app_leakage_region_classify(void)
|
||||
{
|
||||
@@ -66,27 +77,61 @@ void app_leakage_region_classify(void)
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
|
||||
p_leakage->region_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD> <20><> <20><> <20>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD>*/
|
||||
static void app_leakage_alarm_contorl(void)
|
||||
{
|
||||
if(0 != p_leakage->alarm_state)
|
||||
{
|
||||
buzzer.set.on();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
buzzer.set.off();
|
||||
relay.set(BSP_RELAY_CH_ERROR_STATE,USR_OFF);
|
||||
}
|
||||
|
||||
/*©Һ״̬*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_LEAKAGE,USR_OFF);
|
||||
}
|
||||
/*<2A>ϴ<EFBFBD>״̬*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_OPEN,USR_OFF);
|
||||
}
|
||||
/*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
if(p_leakage->alarm_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
relay.set(BSP_RELAY_CH_COMMINCAION,USR_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*<2A>쳣״̬<D7B4>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>*/
|
||||
void app_leakage_task(void)
|
||||
{
|
||||
static u16 prev_ch_state[APP_LEAKAGE_SUB_DEVICE_NUM][APP_LEAKAGE_SUB_DEVICE_CH_NUM] = {0};
|
||||
u16 i, j, k, sub_device_index;
|
||||
static u8 initialized = 0;
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʷģ<CAB7><C4A3> */
|
||||
if(!initialized)
|
||||
{
|
||||
history.init_history();
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
|
||||
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣ͳ<ECB3A3><CDB3> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
{
|
||||
@@ -94,7 +139,7 @@ void app_leakage_task(void)
|
||||
p_leakage->region_data[i].open_num = 0;
|
||||
p_leakage->region_data[i].time_out_num = 0;
|
||||
}
|
||||
|
||||
p_leakage->alarm_state = 0;
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4>仯<EFBFBD><E4BBAF>ͳ<EFBFBD><CDB3><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD> */
|
||||
for(i = 0; i < p_leakage->region_num; i++)
|
||||
{
|
||||
@@ -108,6 +153,7 @@ void app_leakage_task(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢*/
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
@@ -141,27 +187,31 @@ void app_leakage_task(void)
|
||||
}
|
||||
|
||||
/* ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD>豸ͳ<E8B1B8><CDB3> */
|
||||
|
||||
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++)
|
||||
{
|
||||
u16 current_state = p_leakage->sub_device_data[sub_device_index].ch_data[k].state;
|
||||
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT)
|
||||
{
|
||||
p_leakage->region_data[i].time_out_num++;
|
||||
continue; /* ͨѶ<CDA8><D1B6>ʱ<EFBFBD><CAB1><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣 */
|
||||
p_leakage->region_data[i].time_out_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT;
|
||||
}
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
|
||||
{
|
||||
p_leakage->region_data[i].open_num++;
|
||||
p_leakage->region_data[i].open_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
|
||||
{
|
||||
p_leakage->region_data[i].leakage_num++;
|
||||
p_leakage->region_data[i].leakage_num++;
|
||||
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ⱨ<EFBFBD><E2B1A8>*/
|
||||
app_leakage_alarm_contorl();
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1> */
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE (0x0001) /*©Һ״̬*/
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_OPEN (0x0002) /*<2A>ϴ<EFBFBD>״̬*/
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0xf000) /*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
#define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0x8000) /*ͨѶ<CDA8><D1B6>ʱ*/
|
||||
|
||||
#define APP_LEAKAGE_STRING_NANE_LEN (10)
|
||||
#define APP_LEAKAGE_SUB_DEVICE_NUM (32)
|
||||
@@ -79,13 +79,18 @@ typedef struct
|
||||
{
|
||||
u8 region_num;
|
||||
u8 sub_device_num;
|
||||
app_leakage_region_data_class_t region_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
app_leakage_sub_device_class_t sub_device_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
u16 alarm_state; /*ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>״̬*/
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD>*/
|
||||
app_leakage_region_data_class_t region_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
/*<2A><><EFBFBD>豸*/
|
||||
app_leakage_sub_device_class_t sub_device_data[APP_LEAKAGE_SUB_DEVICE_NUM];
|
||||
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>*/
|
||||
app_leakage_history_metadata_t history_metadata;
|
||||
|
||||
void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/
|
||||
void (*task)(void); /*ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
void (*class_update)(void);
|
||||
}app_leakage_t;
|
||||
|
||||
typedef struct
|
||||
|
||||
Reference in New Issue
Block a user