R2UWaterRS485UW500/app/UWater_Frame/UWater_frame_app.h

751 lines
30 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; //信息源0uart 1rf
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 */