#ifndef UWATER_FRAME_APP_H #define UWATER_FRAME_APP_H #ifdef __cplusplus extern "C" { #endif #include "type.h" #include "UWater_gp22_driver.h" #include "UWater_uart_driver.h" #include "UWater_rtcc_driver.h" #pragma pack(1) //1字节对齐 /** 硬件版本号命名规则:最高位表示是否带温度板 软件版本号命名规则:高4位表示地区 bit31 bit30 bit29 bit28 [地区:深水3-江水4----] **/ #define BOOTLOADER_VERSION 0x3030314E //远程升级版本号(N1.00ASCALL #define FM_HEAD_MARK 0x68 //帧头 #define MET_TYPE 0x10 //表计类型 0x10:水表 #define MET_TYPE_TCP 0x20 //表计类型 #define MET_TYPE_SY 0x02 //表计类型 沈阳规约定义为规约版本为02H 20211025 #define FM_END_MARK 0x16 //帧尾 #define MAX_NB 500 //NB接收数据缓冲区最大值 #define FM_MAX_BUF_NUM 500 //发送缓冲区最大值 /*流量系数部分2020-07-08*/ //流量系数部分宏定义 #define FLOW_COEFFICIENT_BUF_NUM 18 //流量系数的个数 #define LOW_TYPE 0x77 #define MIDDLE_TYPE 0x88 #define LARGE_TYPE 0x99 #define ALL_TYPE 0xAA #define FLOW_COEFFICIENT_MAX 72089 #define FLOW_COEFFICIENT_MIN 58982 //第一次上电标志 #define FIRST_POWER_ON_FLAG 0X55 #define EEP_FRAME_BASE_ADDR 0x00 #define EEP_FRAME_FIRST_POWER_ADDR (EEP_FRAME_BASE_ADDR + 0) //1byte //第一次上电标志地址 #define EEP_FRAME_STARTUSING_ADDR (EEP_FRAME_FIRST_POWER_ADDR + 1) //1byte //出厂启用标志1字节 #define FRAME_NBIot_FREQVAL (EEP_FRAME_STARTUSING_ADDR + 1) //设置上报频率5字节 add by wm 2017.07.19 #define FRAME_NBIot_IP (FRAME_NBIot_FREQVAL+5) //设置ip 4字节 #define FRAME_NBIot_PORT (FRAME_NBIot_IP+4) //设置端口 2字节 #define FRAME_NBIot_REPORTSTART (FRAME_NBIot_PORT+2) //设置周期上报起始时间 6字节 #define FRAME_NBIot_REPORTEND (FRAME_NBIot_REPORTSTART+6) //设置周期上报结束时间 6字节 #define FRAME_NBIot_LENGTH (FRAME_NBIot_REPORTEND+6) //设置周期上报最小估值长度2字节 #define EEP_RETRY_TIMES_ADDR (FRAME_NBIot_LENGTH + 2) //重试次数1字节 #define FRAME_NBIot_STARTTIME (EEP_RETRY_TIMES_ADDR+1) //设置密集上报时间 9字节 #define FRAME_NBIot_HIGHFLOW (FRAME_NBIot_STARTTIME+9) //设置最大流量报警阈值 4字节 #define FRAME_VALVE_PRA (FRAME_NBIot_HIGHFLOW+4) //阀控相关参数 4字节 #define FRAME_VALVE_EMERGENCY_FLOW (FRAME_VALVE_PRA +4) //应急开阀用水量设置 2字节 #define FRAME_NBIot_fre (FRAME_VALVE_EMERGENCY_FLOW+2) //频点2个字节 #define FRAME_NBIot_APN (FRAME_NBIot_fre+2) //APN 20字节 #define FRAME_NBIot_KEY (FRAME_NBIot_APN+20) //普通密钥, 16字节 #define EEP_FRAME_MAC_ADDR (FRAME_NBIot_KEY + 16) //7bytes //物理地址首地址 #define EEP_FRAME_SER_NUM_ADDR (EEP_FRAME_MAC_ADDR + 7) //7bytes //序列号首地址 #define EEP_FRAME_MET_ADDR (EEP_FRAME_SER_NUM_ADDR + 7) //7bytes //通讯地址首地址 #define EEP_FRAME_SOLIDIFY_MAC_ADDR (EEP_FRAME_MET_ADDR + 7) //1byte //固化物理地址标志地址 #define EEP_FRAME_BOOTLOADER_INFO_ADDR (EEP_FRAME_SOLIDIFY_MAC_ADDR + 1) //5bytes //远程升级信息首地址 #define EEP_FRAME_ENABLE_BAK_KEY_ADDR (EEP_FRAME_BOOTLOADER_INFO_ADDR + 5) //1bytes //启用备份密钥标志地址 #define EEP_FRAME_LAST_KEY_NUM (EEP_FRAME_ENABLE_BAK_KEY_ADDR + 1) //1byte //最新num,即下次通讯密钥num #define EEP_FRAME_TEMPERATURE_COEFFICIENT_ADDR (EEP_FRAME_LAST_KEY_NUM + 1) //8bytes //温度系数首地址 #define EEP_FRAME_FLOW_COEFFICIENT_ADDR (EEP_FRAME_TEMPERATURE_COEFFICIENT_ADDR + 8) //24bytes //流量系数首地址 #define EEP_FRAME_VERIFICATION_FUNCTION_ADDR (EEP_FRAME_FLOW_COEFFICIENT_ADDR + 24) //1byte //启用检定功能地址 #define EEP_FRAME_INFRARED_FUNCTION_ADDR (EEP_FRAME_VERIFICATION_FUNCTION_ADDR + 1) //1byte //启用红外功能地址 #define EEP_FRAME_FUNCCFGBYTES_ADDR (EEP_FRAME_INFRARED_FUNCTION_ADDR + 1) //32bytes //配置字节 #define EEP_FRAME_START_FLOW_ADDR (EEP_FRAME_FUNCCFGBYTES_ADDR + 32) //2byte //使动流量2字节---20191111改善项目 #define EEP_FRAME_COUNTER_CURRENT_FLOW_ADDR (EEP_FRAME_START_FLOW_ADDR + 2) //2byte //逆流开关2字节---20191111改善项目 #define EEP_FRAME_SAMPLING_FREQUENCY_ADDR (EEP_FRAME_COUNTER_CURRENT_FLOW_ADDR + 2) //1byte //采样频率1字节---20191113改善项目 #define EEP_FRAME_SAMPLING_BUF_LEN_ADDR (EEP_FRAME_SAMPLING_FREQUENCY_ADDR + 1) //1byte //采样缓冲区大小1字节---20191113改善项目 #define EEP_FRAME_STORAGE_FREQUENCY (EEP_FRAME_SAMPLING_BUF_LEN_ADDR + 1) //1byte //密集存储间隔(0:30s,1:1min,2:2min,3:3min...) #define EEP_FRAME_JX_SAMPLING_FREQUENCY_ADDR (EEP_FRAME_STORAGE_FREQUENCY + 1) //2byte //江西规约采样频率(byte1,最低采样频率;byte2,最高采样频率) #define EEP_FRAME_JX_PSM_PWDOWN_ADDR (EEP_FRAME_JX_SAMPLING_FREQUENCY_ADDR +2) //1byte //江西规约NB模组PSM或断电模式选择(0,psm;1,power down) #define EEP_FRAME_NB_PARA_ADDR (EEP_FRAME_JX_PSM_PWDOWN_ADDR + 1) //4byte //设置NB重试间隔时间和符网等待时间 #define FRAME_NBIot_BUBAO_FLAG (EEP_FRAME_NB_PARA_ADDR+4) //6byte //记录需要补包的数据“条数”,一个位对应一个数据包;以及读写历史数据指针 6字节 #define FRMAE_REMAIN_EMERGENCY_FLOW (FRAME_NBIot_BUBAO_FLAG+6) //4byte 剩余应急用水量 #define EEP_BLE_PARA_VOLTAGE (FRMAE_REMAIN_EMERGENCY_FLOW+4) //4byte 欠压阈值4字节 #define EEP_FRMAE_BATTERY_ENERGY (EEP_BLE_PARA_VOLTAGE+4) //18byte 电池电量参数 ////以上要和 FRAME_MET_INFO 对应起来 #define EEP_GP30_BASE_ADDR 0X100 /*#define DIFTOF_CALIBRATION_FLAG_ADDR 0X150 //2021,04,增加换能器零流量校准标志,如果是0xA1B2C3D4E5F6A7B8表示校准过 #define DIFTOF_CALIBRATION_VALUE_ADDR DIFTOF_CALIBRATION_FLAG_ADDR +8 //2021,04,增加换能器零流量校准值4字节*/ #define EEP_RTCC_APP_USE_ADDR 0X180 #define FRAME_FLOW_COEFFICIENT_ADDR 0x200 //多项式建模系数五条曲线共5*11*4字节 #define EEP_BOOTLOAD_START 0X300 #define EEP_MCU_TYPE EEP_BOOTLOAD_START //mcu平台类型 #define EEP_MCU_MODEL (EEP_MCU_TYPE+1) //mcu型号,1 字节 #define EEP_PRODUCT_MODEL (EEP_MCU_MODEL+1) //产品型号,1字节 #define EEP_HARDWARE_VERSION (EEP_PRODUCT_MODEL+1) //硬件版本,1字节 #define EEP_SOFT_VERSION (EEP_HARDWARE_VERSION+1) //软件版本,4字节 #define EEP_UPDATE_NUM (EEP_SOFT_VERSION+4) //升级总字节数,4字节 #define EEP_UPDATE_CHECK (EEP_UPDATE_NUM+4) //升级校验码,2字节 #define EEP_UPDATE_VER (EEP_UPDATE_CHECK+2) //升级版本,2字节 #define EEP_UPDATE_FLAG (EEP_UPDATE_VER+2) //是否升级标志,1字节 #define EEP_UPDATE_SOURSE (EEP_UPDATE_FLAG+1) //升级来源,1字节 #define EEP_UPDATE_PKNUM (EEP_UPDATE_SOURSE+1) //包号,2字节 #define EEP_UPDATE_RSSI (EEP_UPDATE_PKNUM+2) //信号强度,1字节 #define EEP_UPDATE_UDP_IP (EEP_UPDATE_RSSI+1) //4bytes,UDP升级IP地址 #define EEP_UPDATE_UDP_PORT (EEP_UPDATE_UDP_IP+4) //2bytes,UDP升级端口号 #define EEP_BASE_VALVE (EEP_BOOTLOAD_START+40) //阀门控制,2字节 20180903 #define FRAME_FLOW_LOW_COEFFICIENT_ADDR 0x340 //72字节,流量系数基地址 2020-07-08 #define FRAME_FLOW_MIDDLE_COEFFICIENT_ADDR (FRAME_FLOW_LOW_COEFFICIENT_ADDR + 24)//流量系数LOW地址向后偏移24个字节用于存储20~35℃数值 #define FRAME_FLOW_HIGH_COEFFICIENT_ADDR (FRAME_FLOW_MIDDLE_COEFFICIENT_ADDR + 24)//流量系数MIDDLE地址向后偏移24个字节用于存储35℃及以上数值 #define EEP_RTCC_APP_HISTORY_ADDR 0x440 //0x440~0x823 #define EEP_SOE_ADDR 0x1000 //SOE存储基地址 #define FRAME_NBIot_HISTORY_READ_ADD 0x2000 //存储历史数据基地址 #define FRAME_QUANZHOU_STORE_ADD 0x4000 //泉州项目数据存储地址 #define FRAME_SHENYANG_STORE_ADD 0x7300 //沈阳项目数据存储地址 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //多项式建模部分宏定义 #define MULT_COEFFICIENT_BUF_NUM 55 //多项式建模系数的个数 #define COEFFICIENT_MAX (float)1000 //多项式建模系数的合法最大值 #define COEFFICIENT_MIN (float)-1000 //多项式建模系数的合法最小值 typedef union { UNION_4U8TOU32 float_storage_format; float float_datas; } UNION_FLOAT_STORAGE; typedef union { uint8_t value[4]; uint32_t value_u32; float flt; } TYP_FLOW_COEFFICIENT; typedef union { struct { u8 type; //天数/月份区分位,无符号整数(HEX)。0:表示按天来发送1:表示按月来发送 u8 period; //无符号整数(HEX)。周期值,如果配置为按天传,则该字段表示几天。如果配置为按月传,则该字段表示每月的几号 bcd hour; //上传时间,BCD码,表示时。 bcd minute; //上传时间,BCD码,表示分。 bcd second; }s; u8 buf[5]; } Time_upload;//定时上传参数 typedef union { struct { u8 valve_state; //阀门状态 u8 valve_err; //阀门异常 u8 valve_total_time; //最大控阀时间 u8 valve_AD; //堵转AD值 }; u8 byte[4]; } IES_VALVE_PARAS; //阀控参数 typedef union { struct { u8 valve_up_times_pre; //规约设定的频率-关阀上报 u8 valve_up_times_total; //规约设定的次数-关阀上报 u8 valve_up_times_realtime; //实时上报的次数-关阀上报 u8 valve_auto_check; //每月阀门自检功能是否开启,AA表示开启 u8 reserv;//预留字节 }; u8 byte[5]; } IES_VALVE_UP_TIMES; //关阀后,上报参数 extern TYP_FLOW_COEFFICIENT cal_coefficient[MULT_COEFFICIENT_BUF_NUM]; extern const float default_coefficient[MULT_COEFFICIENT_BUF_NUM]; extern UNION_4U8TOU32 cal_flow_coefficient[FLOW_COEFFICIENT_BUF_NUM];//多项式流量系数 extern const u32 default_flow_coefficient[FLOW_COEFFICIENT_BUF_NUM];// typedef struct { u8 ble_tx_power; u8 ble_adv_fre; u8 ble_con_para; u8 ble_scan_times; u8 password_enable; } BLE_FUNC_SW; typedef struct { mtype32_ total_use_sum_times_sec; mtype32_ bat_surplus; mtype32_ use_sum_times_sec; mtype32_ nb_use_sum_times_sec; u16 nb_upload_happen_num; u16 valve_use_sum_times_sec; float ee_remain_para_energy_life; }STR_RUN_INFO; typedef struct { u8 first_power_flg; //第一次上电标志---------------------1 u8 start_using_flg; //出厂启用标志-----------------------1 Time_upload Time_upload_2006; //定时上传参数//上报频率5--------------------------5第无字节秒不用 u8 server_ip[4]; //ip地址4----------------------------4 UNION_2U8TOU16 server_port; //端口号2----------------------------2 u8 report_period_start[6]; //周期上报起始时间,月日时?6----------6 u8 report_period_end[6]; //周期上报结束时间,月日时?6----------6 UNION_2U8TOU16 report_step_len; //UNION_2U8TOU16 report_step_len;//周期上报最小估长值2-----------------2// 错峰间隔时间 单位秒,范围15~43.定时上传错峰方案:定时上传时间 + 表号后3位 ×错峰时间间隔 + 60秒。 u8 report_retry_times; //u8 report_retry_times; //重试次数 1 --------------------1 u8 report_start_time[9]; //密集上报开始时间,月日时?9-----------9 UNION_4U8TOU32 high_flow_alarm; //大流量报警门限值4-------------------4 IES_VALVE_PARAS ies_valve_paras;//阀控参数 u8 ss_bak[6];//预留6个字节------------------------4 UNION_2U8TOU16 ies_pulse_emergency; //应急用水量----------------------2 UNION_2U8TOU16 report_fre; //频点2-------------------------------2 u8 apn[20]; //APN, 20 ------------------------20 u8 key[16]; //普通密钥---------------------------16 u8 mac_addr[7]; //物理地址----------------------------7 u8 ser_num[7]; //序列号------------------------------7 u8 met_addr[7]; //通讯地址----------------------------7 u8 solidify_mac_addr_flg; //固化物理地址标识---------------------1 IES_VALVE_UP_TIMES ies_valve_up_times;//关阀后,上报参数-----------------5 u8 enable_bak_key; //启用备份密钥--------------------------1 u8 last_key_num; //下次通讯的密钥num---------------------1 UNION_4U8TOU32 temperature_coefficient0; //温度系数0---------------------4 UNION_4U8TOU32 temperature_coefficient1; //温度系数1---------------------4 UNION_4U8TOU32 flow_coefficient_small; //小流量系数----------------------4//0x00010000 UNION_4U8TOU32 flow_coefficient_middle0; //中流量系数0-------------------4//0x00010000 UNION_4U8TOU32 flow_coefficient_middle1; //中流量系数1-------------------4//0x00010000 UNION_4U8TOU32 flow_coefficient_middle2; //中流量系数2-------------------4//0x00010000 UNION_4U8TOU32 flow_coefficient_middle3; //中流量系数3-------------------4//0x00010000 //20161021 UNION_4U8TOU32 flow_coefficient_large; //大流量系数----------------------4//0x00010000 u8 enable_verification_function; //启用检定功能--------------------------1//0x5A u8 enable_infrared_function; //启用红外功能------------------------------1//0x5A u8 func_cfg_bytes[32]; //功能配置字节------------------------------32 //改善项目-20191108-增加始动流量和逆向流量开关,共4字节, UNION_2U8TOU16 start_flow;//使动流量2字节--------------------------------2 UNION_2U8TOU16 counter_current_flow; //逆向流量开关----------------------2 u8 sampling_frequency; //采样频率----------------------------------------1 u8 buf_length; // BUFF--------------------------------------------------1 u8 storage_frequency;//密集存储间隔--------------------------------------1 u8 jx_sampling_frequency[2];//江西规约采样频率---------------------------2 u8 jx_psm_pwdown;//江西规约NB模组PSM或断电模式选择------------------------1 UNION_2U8TOU16 Upload_again_interval_time;//UNION_2U8TOU16 nb_para_retry_delay; //重试时间 UNION_2U8TOU16 nb_para_login_ask_times; //增加附网时长(查询cereg次数) UNION_4U8TOU32 Supplemental_send_flag; //补包标志记录,每天的周期上报不成功则记录一个bit最多补包30天记录。 u8 histroy_r;//历史数据的读指针 历史数据存储指针 u8 histroy_w;//历史数据的写指针 补包用数据指针 UNION_4U8TOU32 ies_pulse_remain; //应急用水量应达到的值,4 u8 voltage_low[4];//欠压阈值 STR_RUN_INFO run_information_object; }FRAME_MET_INFO; typedef struct { union { struct { u8 transducer_aging : 1; //换能器老化 u8 flow_err : 1; //当前流量>Q4或者Q4或者