751 lines
30 KiB
C
751 lines
30 KiB
C
#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<EFBFBD>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或者<Q1
|
||
u8 rtcc_time_err : 1; //RTCC时间异常
|
||
u8 nbsend_err : 1; //GPxx异常
|
||
u8 nbrec_err :1;
|
||
u8 water_overheating : 1; //水温超出温度等级范围
|
||
u8 gp22_commun_fail:1;//GP22通信失败
|
||
u8 nouse1 : 1;
|
||
} stat0bits;
|
||
u8 stat0;
|
||
};
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 reverse : 1; //倒转
|
||
u8 low_flow_rate : 1; //超低流量报警
|
||
u8 none_water : 1; //管道无水
|
||
u8 diftof_calibration_switch : 1; //零流量校准开关标志
|
||
u8 transducer_check_abnormal : 1; //换能器可能存在异常的标志
|
||
u8 low_battery_voltage : 1; //电池欠压
|
||
u8 valve_state : 2; //阀门状态
|
||
} stat1bits;
|
||
u8 stat1;
|
||
};
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 met_type: 1;//表计类型(1超声波、0普通)
|
||
u8 nouse : 7;
|
||
} stat2bits;
|
||
u8 stat2;
|
||
};
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 met_type : 1;
|
||
u8 nbrec_err :1;
|
||
u8 gp22_commun_fail:1;//GP22通信失败
|
||
u8 rtcc_time_err : 1; //RTCC时间异常
|
||
u8 nbsend_err : 1; //GPxx异常
|
||
u8 water_overheating : 1; //水温超出温度等级范围
|
||
u8 flow_err : 1; //当前流量>Q4或者<Q1
|
||
u8 transducer_aging : 1;//换能器老化
|
||
} stat3bits;
|
||
u8 stat3;
|
||
};
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 nouse : 8;
|
||
} stat4bits;
|
||
u8 stat4;
|
||
};
|
||
} MET_STATE; //状态字
|
||
typedef struct
|
||
{
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 reverse : 1; //倒转
|
||
u8 low_flow_rate : 1; //超低流量报警
|
||
u8 valve_state : 2; //阀门状态
|
||
u8 remain_warning:1;//余量报警
|
||
u8 release : 2; //空闲
|
||
u8 ntc_state:1; //NTC异常标志
|
||
} statTcp1bits;
|
||
u8 statTCP1;
|
||
};
|
||
union
|
||
{
|
||
struct
|
||
{
|
||
u8 remain_state : 1; //余量为负数
|
||
u8 low_power : 1; //电池欠压报警
|
||
u8 release : 2; //空闲
|
||
u8 amplitude : 4;//换能器幅值档位
|
||
} statTcp2bits;
|
||
u8 statTCP2;
|
||
};
|
||
} TCP_STATE; //状态字
|
||
|
||
typedef union //强制转化为浮点变量
|
||
{
|
||
u32 gp22_u32;
|
||
float gp22_float;
|
||
} Fram_To_Float;
|
||
typedef struct
|
||
{
|
||
u8 data_sourse; //信息源(0:uart ; 1:rf)
|
||
u8 enc_reply_flg; //加密应答标志,置1有效
|
||
u8 enc_tmp_addr[7]; //请求帧加密地址暂存,用于应答。
|
||
u8 rev_key_num; //上位机给的num值
|
||
} STRUCT_FLAG; //内部标志位
|
||
/************************************************规约消息管理相关**********************************/
|
||
typedef struct
|
||
{
|
||
u8 set_verification_msg; //进检定0
|
||
u8 clear_realtime_data_msg; //清实时数据1
|
||
u8 clear_work_time_msg; //清累计工作时间2
|
||
u8 bootloader_msg; //远程升级3
|
||
u8 measure_hydrostatic_jet_lag_msg; //测净水时差4----------没用
|
||
u8 clear_history_data_msg; //清历史数据5
|
||
u8 channel_change_msg; //信道切换6-------------------------没用
|
||
u8 start_188fm_route_msg;//188规约发起递传7----------------没用
|
||
u8 change_link_addr_msg; //更新链路地址8----------------没用
|
||
u8 change_route_mettype_msg; //表类型变9----------------没用
|
||
u8 check_active_time_msg; //需要立即查活跃期msg(上电或者递传时间、抄表时段变)10
|
||
u8 calibrate_time_rfapp_msg; //校时msg(用于rtapp复位状态、标志)11
|
||
u8 calibrate_rtc_msg; //RTC校准msg 12
|
||
u8 valve_ctrl_msg; //阀控msg 13------------------没用
|
||
u8 static_measure_init_msg; //静水测量初始化msg 14----------没用
|
||
u8 low_power_msg; //表计低功耗msg 15
|
||
u8 out_verification_msg; //出检定msg 16
|
||
u8 lcd_display_all_msg; //全显 17
|
||
u8 initial_data_msg; //下初值标志 18
|
||
u8 model_change_msg;//切换逆流计量使用 19
|
||
u8 valve_open_msg;//开阀20
|
||
u8 valve_close_msg;//关阀21
|
||
u8 valve_half_msg;//半开阀22
|
||
//NB上报相关的
|
||
u8 msg_nb_UploadFreqChange;//上报频率改变
|
||
u8 msg_nb_IpPort_change;//IP Port改变
|
||
u8 msg_nb_StartEnd_change;//周期上报起始和结束时间改变
|
||
u8 msg_nb_StepLength_change;//估长值改变
|
||
u8 msg_nb_RetryTimes_change;//重试次数改变
|
||
u8 msg_nb_IntensiveTime;//密集上报
|
||
u8 msg_nb_FlowAlarm;//报警阈值
|
||
u8 msg_nb_UartSend;//串口发起上传
|
||
u8 msg_nb_SoftUpdate;//软件升级消息
|
||
u8 msg_nb_Apn_change;//APN更改
|
||
u8 msg_updatesoft_version_ok;//判断升级版本号正确
|
||
u8 msg_rtcc_adjust_time;//RTC校时消息
|
||
u8 msg_nb_upload_ack_ok;//NB上传应答成功
|
||
u8 msg_nb_uoload_faild;//NB上传失败
|
||
u8 msg_caliberate;//表计单程时间校准标志
|
||
} STRUCT_MSG; //对外msg
|
||
|
||
typedef enum
|
||
{
|
||
SetVerificationMsg = 0, //进检定0
|
||
ClearRealtimeDataMsg = 1, //清实时数据1
|
||
ClearWorkTimeMsg = 2, //清累计工作时间2
|
||
BootloaderMsg = 3, //远程升级3
|
||
MeasureHydrostaticJetLagMsg = 4, //测净水时差4
|
||
ClearHistoryDataMsg = 5,//清历史数据5
|
||
ChannelChangeMsg = 6,//信道切换6
|
||
Start188FmRouteMsg = 7,//188规约发起递传7
|
||
ChangeLinkAddrMsg = 8,//更新链路地址8
|
||
ChangeRouteMettypeMsg = 9,//表类型变9
|
||
CalibrateRtcMsg = 12,//RTC校准msg 12
|
||
ValveCtrlMsg = 13,//阀控msg 13
|
||
StaticMeasureInitMsg = 14,//静水测量初始化msg 14
|
||
LowPowerMsg = 15,//表计低功耗msg 15
|
||
OutVerificationMsg = 16,//出检定msg 16
|
||
LcdDisplayAllMsg = 17,//全显 17
|
||
InitialDataMsg = 18,//下初值标志 18
|
||
ModelChangeMsg = 19,//切换逆流计量使用 19
|
||
ValveOpenMsg = 20,//开阀20
|
||
ValveCloseMsg= 21,//关阀21
|
||
ValveHalfMsg = 22,//半开阀22
|
||
//NB上报相关的
|
||
MsgNbUploadFreqChange=23,//上传数据
|
||
MsgNbIpPortChange=24,//IP Port改变
|
||
MsgNbStartEndChange=25,//周期上报起始和结束时间改变
|
||
MsgNbStepLengthChange=26,//估长值改变
|
||
MsgNbRetryTimesChange=27,//重试次数改变
|
||
MsgNbIntensiveTime=28,//密集上报
|
||
MsgNbFlowAlarm=29,//报警阈值
|
||
MsgNbUartSend=30,//串口发起上传
|
||
MsgNbSoftUpdate=31,//软件升级消息
|
||
MsgNbApnChange=32,//APN更改
|
||
MsgUpdateSoftVersionCheckOk=33,//判断升级版本号正确
|
||
MsgRtccAdjustTime=34,//RTC校时消息
|
||
MsgNbUplaod_AckOk=35,//NB上传应答成功
|
||
MsgNbUploadFailed=36,//NB上传失败
|
||
MsgNbUploadRetryMsg=37,//NB上传开始
|
||
MsgSaveHisIndex=38,//保存读写指针
|
||
MsgSaveBubaoFlag=39,//保存补报标志
|
||
MsgClearNbDebugFlag=40,//关闭红外打印
|
||
MsgOpenIr=41,//打开红外通信
|
||
MsgRtccEvenHour=42,//偶数整点时间到
|
||
MsgValve_EmergencyFlowStore=43,//应急用水量保存消息
|
||
MsgTouchKeyReset = 44,
|
||
MsgNbUplaod_AckLoginOk=45,//NB上传应答成功
|
||
MsgCaliberate = 46,//表计单程时间校准标志
|
||
///////////////////泉州
|
||
MsgQuanzhou_DailySave=47,//日冻结数据存储消息
|
||
MsgQuanzhou_MonthSave=48,//月冻结数据存储消息
|
||
///////////////////长沙
|
||
MsgChangcha_ValveUploadCnts=49,//关阀上报次数增加消息
|
||
MsgTchKey_ClearKeyLimit=50,//清除触摸按键次数消息
|
||
//////////////////阀门状态切换时发起上报
|
||
MsgNbUploadByValveStateChange = 51,
|
||
MsgNb_SaveHis=52,//记录补报消息
|
||
MsgNbUpload_OffLine = 53,//立即下线
|
||
MsgValveCloseSaveFlow = 54,//关阀到位保持当前流量
|
||
MsgValveCloseSuccess = 55,//关阀到位
|
||
MsgValveOpenSuccess =56,//开阀到位
|
||
//////////////////沈阳
|
||
MsgShenYang_DailySave=57,//日冻结数据存储
|
||
MsgShenYang_MonthSave=58,//月冻结数据存储
|
||
MsgShenYang_YearSave=59,//年冻结数据存储
|
||
MsgShenYang_CircleSave=60,//周期数据存储
|
||
MsgShenYang_FrozenClear=61,//冻结数据清除
|
||
MsgShenYang_CircleClear=62,//周期数据清除
|
||
MsgShenYang_WarningClear=63,//报警数据清除
|
||
MsgShenYang_FactorySettingAndReset=64,//恢复出厂设置并重启
|
||
MsgShenYang_SysReset=65,
|
||
MsgShenYang_WarningCheck=66,//检查报警状态
|
||
MsgShenYang_WarningStoreReset=67,
|
||
MsgShenYang_NbUploadWarning = 68,//报警触发上报
|
||
MsgShenYang_NbUploadWarningWithCircle = 69,//报警随周期数据上报
|
||
MsgShenYang_NbUplaod_AckOk=70,//NB上传应答成功
|
||
MsgShenYang_UdpIpPortChange=71,//UDP IP Port改变
|
||
/////////////////////////
|
||
MsgNb_FlagRcvNbFrame=72,//收到指令
|
||
MsgSS_JianGeStore=73,//间隔流量存储
|
||
Msg_FrozenStore=74,//间隔流量存储
|
||
Msg_ClearHisOther=75,//清表数据给其他规约消息
|
||
Msg_ValveOpenEmergency=76,//按键应急开阀
|
||
Msg_WdtReset=77,//看门狗复位消息
|
||
Msg_Por5VReset=78,//欠压或硬复位
|
||
MsgSS_HisIndexStore=79,//冻结数据指针存储
|
||
MsgBLE_AdvChange=80,//广播数据修改
|
||
MsgBLE_ReadData=81,//抄读表数据消息
|
||
MsgBLE_RevData=82,//收到指令消息
|
||
MsgAddr_Change=83,//表地址变化
|
||
MsgBLE_ConfigChange=84,//蓝牙上电初始化
|
||
MsgBLE_Clktrim=85,//时钟校准
|
||
MsgBLE_OtaEnter=86,//进入OTA升级
|
||
MsgBLE_OtaExit=87,//退出OTA升级
|
||
Msg_PsmPowerCheck=88,//PSM电源检查
|
||
Msg_FactoryUpload=89,//厂区上报消息
|
||
Msg_FactoryBleActive=90,//厂区唤醒蓝牙
|
||
|
||
Msg_AllCount=91
|
||
} Frame_MsgTypeDef;
|
||
|
||
#define FRAME_MSG_TYPE_CNT Msg_AllCount
|
||
|
||
typedef union
|
||
{
|
||
STRUCT_MSG MsgStruct;
|
||
u8 MsgBuf[FRAME_MSG_TYPE_CNT];
|
||
} UNION_MSG;
|
||
|
||
void FrameSetMsgApp(Frame_MsgTypeDef msgType);
|
||
u8 FrameCheckMsgApp(Frame_MsgTypeDef msgType);
|
||
u8 FrameClearMsgApp(Frame_MsgTypeDef msgType);
|
||
/***************************************************************************************************/
|
||
/************************************************规约参数管理相关**********************************/
|
||
typedef enum
|
||
{
|
||
FramePara_DNx = 0, //管段口径
|
||
FramePara_Tc0 = 1, //温度系数0
|
||
FramePara_Tc1 = 2, //温度系数1
|
||
FramePara_FcSmall = 3, //流量系数small
|
||
FramePara_FcMiddle0 = 4, //流量系数Middle0
|
||
FramePara_FcMiddle1 = 5, //流量系数Middle1
|
||
FramePara_FcMiddle2 = 6, //流量系数Middle2
|
||
FramePara_FcLarge = 7, //流量系数Large
|
||
FramePara_ReportStartDMY = 8, //密集上报开始时间日月年bcd
|
||
FramePara_ReportStartSMH = 9, //密集上报开始时间秒分时bcd
|
||
FramePara_ProgVersion = 10, //软件版本号
|
||
FramePara_MetAddr0_3 = 11, //通信地址低4字节
|
||
FramePara_MetAddr4 = 12, //通信地址高1字节
|
||
FramePara_FuncCfg0_3 = 13,//功能控制字
|
||
FramePara_FuncCfg4_7 = 14,//功能控制字
|
||
FramePara_FuncCfg8_11 = 15,//功能控制字
|
||
FramePara_FuncCfg12_15 = 16,//功能控制字
|
||
FramePara_ReportEndSMH = 17,//密集上报结束时间日月年bcd
|
||
FramePara_FcMiddle3 = 18, //流量系数Middle3
|
||
FramePara_Sta1_2 = 21,//状态字
|
||
FramePara_CCFlow = 22,//逆流开关
|
||
FramePara_StartFlow = 23,//始动流量
|
||
FramePara_GP30Freq = 24,//采样频率
|
||
FramePara_GP30BufLen = 25,//采样缓存字节数
|
||
FramePara_ReportFreq = 30,//上报频率
|
||
FramePara_EnableTestFunc = 31,//检定功能开关
|
||
FramePara_EnableInfrareFunc = 32,//红外功能开关
|
||
FramePara_StartUsingFunc = 33,//出厂启用
|
||
FramePara_StoreFrequency = 34,//密集存储间隔时间
|
||
FramePara_SamplingFrequency = 35,//江西规约采样频率
|
||
FramePara_PsmOrPwDown = 36, //江西规约NB模组PSM或断电模式选择
|
||
FramePara_NbParaRetryDelay = 37, //NB模组上报重试时间和符网等待时间参数配置
|
||
FramePara_NbParaLoginAckTimes=38,
|
||
FramePara_BootVersion = 39,//boot版本号
|
||
//
|
||
FramePara_End = 40
|
||
} Frame_CheckParaTypeDef;
|
||
#define FRAME_PARA_BUF_LEN (FramePara_End+1)
|
||
u32 FrameCheckParaApp(Frame_CheckParaTypeDef parameter);
|
||
void Frame_Para_Init(void);
|
||
/***************************************************************************************************/
|
||
typedef struct
|
||
{
|
||
u8 en_code;//是否加密,1为加密
|
||
u8 add_num;//加密补位的数字
|
||
u16 data_len;//收到的数据区的长度
|
||
}ENCODE_VERIFY;
|
||
|
||
typedef struct
|
||
{
|
||
u8 mcu; //平台类型
|
||
u8 mcu_model; //MCU型号
|
||
u8 product_model; //产品型号
|
||
u8 hardware_version; //硬件版本号
|
||
u8 soft_version[4]; //软件版本号
|
||
UNION_4U8TOU32 update_num; //升级总字节数
|
||
UNION_2U8TOU16 update_check; //升级校验码
|
||
UNION_2U8TOU16 bootloader_ver;//升级版本
|
||
u8 bootloader_update_flg;//是否升级标志
|
||
u8 bootloader_datas_sourse;//升级来源//0x01--串口 0x02--GPRS 0x03--小无线
|
||
UNION_2U8TOU16 bootloader_paknum;//包号
|
||
//以下不通过上位机发送
|
||
//注意,boot判断到端口号在8081~8090之间,会自动启用UDP升级方式;规约设置IP地址时,判断到该范围,会保存到UDP IP的EE地址
|
||
u8 bootloader_RSSI; //信号强度
|
||
u8 server_ip[4]; //udp升级,ip地址4
|
||
UNION_2U8TOU16 server_port; //udp升级,端口号2
|
||
//表计地址和以上信息在EE中不连续
|
||
u8 bootloader_addr[7];//表计地址
|
||
}U_UPGRADE_INFO; //34字节
|
||
|
||
typedef struct
|
||
{
|
||
u8 FirstPowerOnFlag;
|
||
u8 ProductUpoadFailFlag;
|
||
u8 ProductUploadFlag;
|
||
BLE_FUNC_SW function_switch;//蓝牙功能开关
|
||
u8 NBSleepMode;
|
||
u8 LCD_NoTestFlag;
|
||
}U_TEMP_INFO;
|
||
|
||
typedef struct
|
||
{
|
||
u8 Point_SOE_write; //SOE记录指针
|
||
}U_SIGAL_DATA;
|
||
|
||
typedef union {
|
||
|
||
struct {
|
||
u8 first_flag; //第一次上电标志位
|
||
u32 work_hour; //累计工作时间
|
||
DateTime start_time_up; //出厂时间
|
||
u16 day_history_addr; //历史日数据存储指针
|
||
u32 day_data; //结算日累积流量
|
||
}data;
|
||
u8 byte[18];
|
||
} RTCC_EE_DATA; //RTCC永久性数据
|
||
|
||
typedef struct
|
||
{
|
||
FRAME_MET_INFO P1;//系统参数缓存
|
||
U_UPGRADE_INFO P2;//升级和UDP地址相关
|
||
U_TEMP_INFO P3;//不存EE的全局参数
|
||
U_SIGAL_DATA P4;
|
||
RTCC_EE_DATA ee_data;
|
||
//GP30_DIFTOF_CAL_DATA P5;
|
||
} Data_object;//定义数据对象
|
||
|
||
//#define FLOW_ 0x2B1A
|
||
|
||
extern Data_object Sys_data_object;
|
||
//20211204
|
||
#if PF_TYPE_METER || EN_TYPE_METER || MID_TYPE_METER
|
||
extern float default_error_cruve[15][16];
|
||
#else
|
||
extern float default_error_cruve[12][16];
|
||
#endif
|
||
extern float default_error_DXS[MULT_COEFFICIENT_BUF_NUM];
|
||
|
||
void FrameInitApp(void);
|
||
void FrameMachineApp(void);
|
||
//江西水务规约使用
|
||
void FrameSetSupplementalPack_Flag(u8 tempData);
|
||
|
||
|
||
u16 FrameCheckByte(void);
|
||
u8 FrameIfSleepApp(void);
|
||
MET_STATE FrameGetByte(void);
|
||
u8 Save_histroy_ss_flag(u8 flag);
|
||
u8 Clear_histroy_ss_flag(u8 ss_NO);
|
||
///////////////////////////////////
|
||
u32 HexToBcd32(u32 value);
|
||
u32 Gp30DataToBcd(u32 data, u32 times);
|
||
/*************NB*************************/
|
||
TYP_FLOW_COEFFICIENT* ReadCofficientApp(void);
|
||
UNION_4U8TOU32* Read_Flow_CofficientApp(void);//2020-07-08 用来传递流量系数的首地址
|
||
u32 Read_Flow_CofficientApp_For_LCD(u8 index);//2020-08-13 //用来传输常温流量系数给A2屏幕
|
||
void fram_tools_writeU32ByBuf(u8 *pU32Buf, u8 *pSrc, u8 dir);
|
||
u8 frame_get_datasource(void);
|
||
void frame_set_key(void);
|
||
|
||
float Get_Temperature_Caliberate(void);//获取活塞台子校准温度
|
||
void SetCaliberateTemperature(u16 temp_value);//更新标准温度
|
||
u8 GetNbiotRevHandleOverFlag(void);
|
||
void UWMetPtlPackApp(void);
|
||
|
||
#define UP_DEAL_S0 0
|
||
#define UP_DEAL_S1 1
|
||
#define UP_DEAL_S2 2
|
||
#define UP_DEAL_S3 3
|
||
#define UP_DEAL_S4 4
|
||
#define UP_DEAL_S5 5
|
||
#define UP_DEAL_S6 6
|
||
#define UP_DEAL_S7 7
|
||
#define UP_DEAL_S8 8
|
||
#define UP_DEAL_S9 9
|
||
#define UP_DEAL_S10 10
|
||
#define UP_DEAL_S11 11
|
||
#define UP_DEAL_S12 12
|
||
#define UP_DEAL_S13 13
|
||
#define UP_DEAL_S14 14
|
||
#define UP_DEAL_S15 15
|
||
#define UP_DEAL_S16 16
|
||
#define UP_DEAL_S17 17
|
||
#define UP_DEAL_S18 18
|
||
#define UP_DEAL_S19 19
|
||
#define UP_DEAL_S20 20
|
||
#define UP_DEAL_S21 21
|
||
#define UP_DEAL_S30 30
|
||
#define UP_DEAL_S31 31
|
||
#define UP_DEAL_S32 32
|
||
#define UP_DEAL_S33 33
|
||
|
||
#define UP_DEAL_S_OVER 99
|
||
|
||
//解规约状态机
|
||
typedef enum{
|
||
UW_MET_PTL_IDLE=0, //空闲
|
||
UW_MET_PTL_EXP, //解规约,区分规约类型
|
||
UW_MET_IES_PTL_PACK_S1, //MBUS规约组应答帧
|
||
UW_MET_MBUS_PTL_PACK_S1, //积成NB规约组应答帧
|
||
UW_MET_SHTCP_PTL_PACK_S1, //商河TCP规约组应答帧
|
||
UW_MET_SYNB_PTL_PACK_S1, //沈阳NB规约组应答帧
|
||
UW_MET_OTHER_PTL_PACK_S1,
|
||
UW_MET_PTL_PACK_S2, //根据通道发送数据
|
||
UW_MET_PTL_PACK_S3, //根据通道判断数据发送完成
|
||
}TYP_STATE_MET_PTL_PACK;
|
||
|
||
/*********************************************************缓存队列*********************/
|
||
#define QUEUE_BUF_SIZE 10 //缓存队列深度
|
||
typedef struct
|
||
{
|
||
u8 type;
|
||
u16 length;
|
||
u8 buffer[128];
|
||
} ONE_PACK_DATA;
|
||
|
||
typedef struct
|
||
{
|
||
u8 handled_count;
|
||
u8 total_count;
|
||
ONE_PACK_DATA queue[QUEUE_BUF_SIZE];
|
||
} NBIOT_REV_QUEUE;
|
||
|
||
//规约数据通道类型
|
||
#define UP_SOURCE_IR 0
|
||
#define UP_SOURCE_NB 1
|
||
#define UP_SOURCE_MBUS 2
|
||
#define UP_SOURCE_BLE 3
|
||
//规约类型
|
||
#define IES_PTL 1
|
||
#define MBUS_PTL 2
|
||
//#define SHTCP_PTL 3
|
||
//#define SYNB_PTL 4
|
||
#define OTHER_PTL 5
|
||
//规约组帧状态
|
||
#define PTL_PACK_BUSY 0
|
||
#define PTL_PACK_SUCCESS 1
|
||
#define PTL_PACK_FAIL 2
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* GP30W_FRAME_APP_NEW_H */
|
||
|