#ifndef _APP_ALARM_H_ #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) /*断带状态*/ #define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0xf000) /*通讯超时*/ #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); /*子设备存储的参数*/ typedef struct { u8 state; /*状态 使能 非使能*/ u8 com_port; /*端口*/ u8 modbus_id; /*modbus id*/ u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*设备名*/ u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*区域名*/ }app_leakage_sub_device_flash_data_t; /*子设备信息*/ typedef struct { app_leakage_sub_device_flash_data_t flash_data; /*flash存储数据*/ struct { u16 state; /*状态*/ u16 distance; /*漏液距离*/ }ch_data[APP_LEAKAGE_SUB_DEVICE_CH_NUM]; /*通道数据*/ u8 heartbeat; /*心跳包,0-59循环*/ u8 test_mode; /*测试模式,0=正常,1-4=测试对应通道*/ }app_leakage_sub_device_class_t; /*区域信息*/ typedef struct { u8 leakage_num; /*漏液数量*/ u8 open_num; /*断带数量*/ u8 time_out_num; /*通讯超时数量*/ u8 sub_device_num; /*设备总数量*/ u8 name[APP_LEAKAGE_STRING_NANE_LEN]; /*区域名称*/ u8 sub_device_index[APP_LEAKAGE_SUB_DEVICE_NUM]; /*设备的索引*/ }app_leakage_region_data_class_t; /* 历史报警记录结构 */ typedef struct { u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /* 区域名 */ u8 device_id; /* 设备ID */ u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /* 设备名称 */ u16 alarm_type; /* 报警类型 */ u8 start_time[6]; /* 开始时间: 年(2字节)月日时分 */ u16 leak_distance; /* 漏液距离 (0表示非漏液报警) */ u8 channel; /* 通道号 (0-3) */ } app_leakage_history_alarm_t; /* 历史报警管理结构 */ typedef struct { u32 total_records; /* 总记录数 */ u32 write_index; /* 写指针 */ u32 read_index; /* 读指针 */ u32 max_records; /* 最大记录数 */ } 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); /*初始化*/ void (*task)(void); /*执行任务*/ }app_leakage_t; typedef struct { u8 (*read_history)(u32, app_leakage_history_alarm_t *); void (*clean_history)(void); void (*init_history)(void); }app_hitory_t; extern app_hitory_t history; #endif