update
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
/*区域分类,将同一区域名的设备划分到一起*/
|
||||
void app_leakage_region_classify(void)
|
||||
/*控制 声 光 继电器 报警*/
|
||||
static void app_leakage_alarm_contorl(void)
|
||||
{
|
||||
u16 i,j;
|
||||
u8 add_region_flag;
|
||||
|
||||
/*数量及相关数据清零*/
|
||||
p_leakage->region_num = 0;
|
||||
p_leakage->sub_device_num = 0;
|
||||
memset(p_leakage->region_data,0,sizeof(p_leakage->region_data));
|
||||
|
||||
/*遍历子系统*/
|
||||
for(i=0;i<APP_LEAKAGE_SUB_DEVICE_NUM;i++)
|
||||
if(0 != leakage.alarm_state)
|
||||
{
|
||||
add_region_flag = 1; /*添加新区域*/
|
||||
/*设备使能*/
|
||||
if(ENABLE == p_leakage->sub_device_data[i].flash_data.state)
|
||||
{
|
||||
p_leakage->sub_device_num++;/*子系统总数量++*/
|
||||
/*遍历区域*/
|
||||
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))/*名称相同*/
|
||||
{
|
||||
/*添加子设备*/
|
||||
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].leakage_num] = i;/*绑定子设备索引*/
|
||||
p_leakage->region_data[j].sub_device_num++; /*区域中子系统数据++*/
|
||||
add_region_flag = 0;/*不添加新区域*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*没有找到相同名称*/
|
||||
if(add_region_flag)/*添加新区域*/
|
||||
{
|
||||
/*复制名称*/
|
||||
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;/*绑定子设备索引*/
|
||||
p_leakage->region_data[p_leakage->region_num].sub_device_num++; /*区域中子系统数据++*/
|
||||
p_leakage->region_num++; /*区域数量++*/
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
/*断带状态*/
|
||||
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);
|
||||
}
|
||||
/*通讯超时*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*异常状态设备数量统计*/
|
||||
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;
|
||||
|
||||
/* 初始化历史模块 */
|
||||
if(!initialized)
|
||||
{
|
||||
history.init_history();
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
/* 初始化区域异常统计 */
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/* 检测状态变化并统计异常数量 */
|
||||
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];
|
||||
|
||||
/* 检查设备是否启用 */
|
||||
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;
|
||||
}
|
||||
|
||||
/*历史报警存储*/
|
||||
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;
|
||||
|
||||
/* 检测状态变化并记录历史报警 */
|
||||
if((current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE) &&
|
||||
@@ -135,29 +112,11 @@ void app_leakage_task(void)
|
||||
/* 更新历史状态 */
|
||||
prev_ch_state[sub_device_index][k] = current_state;
|
||||
}
|
||||
|
||||
/* 统计区域异常设备数量 - 按设备统计 */
|
||||
|
||||
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; /* 通讯超时,设备已离线,不再检查其他异常 */
|
||||
}
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*报警控制 声光报警*/
|
||||
app_leakage_alarm_contorl();
|
||||
}
|
||||
|
||||
/* 获取当前时间 */
|
||||
|
||||
Reference in New Issue
Block a user