P2UWaterJiangXi/app/UWater_Frame/UWater_frame_func_ReplyWuHa...

200 lines
6.2 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 __WHYW_FRAME_H__
#define __WHYW_FRAME_H__
/******************************************************************************
* Include files
******************************************************************************/
#include "sys_config.h"
#if PRODUCT_WHYW
#include "UWater_frame_app.h"
#include "UWater_rtcc_driver.h"
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern "C"
{
#endif
/*******************************EEPROM存储地址划分****************************/
#define STORE_DATA_SIZE_CIRCLE 4 //周期数据单条长度
#define STORE_DATA_COUNT_CIRCLE 240
#define EEP_DATA_LEN_CIRCLE (STORE_DATA_SIZE_CIRCLE*STORE_DATA_COUNT_CIRCLE)//1200//周期数据存储空间
#define EEP_ADDR_WHYW_STORE_CIRCLE FRAME_SHENYANG_STORE_ADD //0x7300~0x7C00 周期数据存储地址
#define EEP_ADDR_WHYW_CIRCLE_INDEX_W (EEP_ADDR_WHYW_STORE_CIRCLE+EEP_DATA_LEN_CIRCLE)//周期数据存储指针
#define EEP_ADDR_WHYW_CIRCLE_INDEX_R (EEP_ADDR_WHYW_CIRCLE_INDEX_W+2)//周期数据读取指针
#define EEP_ADDR_WHYW_LAST_RTCC (EEP_ADDR_WHYW_CIRCLE_INDEX_R+2)//最后一条记录的时间7字节
//配置参数相关的存储
#define EEP_ADDR_WHYW_NB_ONLINE_KEEP (EEP_ADDR_WHYW_LAST_RTCC+7) //在线延时时间 1字节
#define EEP_ADDR_WHYW_STORE_INTERVAL (EEP_ADDR_WHYW_NB_ONLINE_KEEP+1)//表数据采集记录间隔时间 1字节
#define EEP_ADDR_WHYW_BATTERY_PRA (EEP_ADDR_WHYW_STORE_INTERVAL+1)//电池电压相关参数 4字节
#define EEP_ADDR_WHYW_UPLOAD_SUCCESS (EEP_ADDR_WHYW_BATTERY_PRA+4)//上报总次数
#define EEP_ADDR_WHYW_UPLOAD_FAIL (EEP_ADDR_WHYW_UPLOAD_SUCCESS+4)//上报成功总次数
#define UPLOAD_CIRCLE_MAX_COUNT 48 //单帧最多48条记录:48*4=192
#define UPLOAD_CIRCLE_MAX_LEN (STORE_DATA_SIZE_CIRCLE*UPLOAD_CIRCLE_MAX_COUNT)//单帧最大字节数
#define EE_PRA_SIZE_WHYW 21//EE存储参数总字节数
typedef union
{
struct
{
UNION_2U8TOU16 u_circle_store_index_w;//周期数据存储的位置
UNION_2U8TOU16 u_circle_store_index_r;//周期数据读取的位置
DateTime store_circle_rtcc_end;//最后一条记录的时间7字节
u8 ee_nb_online_keep_time;//在线延时时间 1字节
u8 ee_nb_acq_interval;//表数据采集记录间隔时间 1字节 采集间隔30分钟
u8 ee_battery_pra[4];//电池电压相关参数
UNION_2U8TOU16 ee_upload_count_success;//上报成功总次数
UNION_2U8TOU16 ee_upload_count_fail;//上报失败总次数
}Data;
u8 data_buf[EE_PRA_SIZE_WHYW];
}WHYW_UNION_EE_STORE;
/******************************规约解析相关参数*********************************/
#define FRAME_HEAD_MARK 0x68
#define FRAME_END_MARK 0x16
#define UP_BUF_SIZE 512
#define FRAME_LEN_MAX UP_BUF_SIZE
#define FRAME_LEN_MIN 10
#define FRAME_GUIDE 0xFE //引导
#define FRAME_HEAD 0x68 //帧头
#define FRAME_TAIL 0x16 //帧尾本号
#define W_METTYPE 0x10 //水表类型
#define LYBK_DATA_UP_NOW 0x55
#define LYBK_OFFSET_DATA_UP 0xFF
#define LYBK_DISCRETE_DATA_UP 0x99
#define READ_CTRL_DOWN 0x01 //读控制码下行
#define READ_CTRL_UP 0x81 //读控制码上行
#define WRITE_CTRL_DOWN 0x04 //写控制码下行
#define WRITE_CTRL_UP 0x84 //写控制码上行
//读、写水表在线延时等待时间
#define RW_ONLINE_TIME_D0 0x81
#define RW_ONLINE_TIME_D1 0x11
//读、写水表实时时间
#define RW_METER_TIME_D0 0xA0
#define RW_METER_TIME_D1 0x15
//读、写水表自动上传数据的时间参数
#define RW_UPLOAD_TIME_ID0 0x81
#define RW_UPLOAD_TIME_ID1 0x04
//读、写水表数据采集间隔时间
#define RW_INTERVAL_TIME_ID0 0x81
#define RW_INTERVAL_TIME_ID1 0x05
//读、写取电池电压相关参数
#define RW_BATTERY_D0 0x81
#define RW_BATTERY_D1 0x09
//读、写水表 NB 网络参数
#define RW_NB_PARA_D0 0x81
#define RW_NB_PARA_D1 0x10
//当前计量信息数据标识D0
#define UPLOAD_DATA_D0 0x90
#define UPLOAD_DATA_D1 0x20
//////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef union //强制转化为浮点变量
{
u32 gp22_u32;
float gp22_float;
u8 buf[4];
}U32_To_Float;
typedef struct //存放表计收到的比较重要的数据
{
u8 head_site;
u8 frame_ctrl; //下行控制码
u8 ack_ctrl; //上行控制码
u8 mark_DI0; //数据标识DI0
u8 mark_DI1; //数据标识DI1
u8 serial_num; //序列号
mtype16_ len; //长度
u16 chkval; //校验和
u8 frame_sta; //规约状态
} STRUCT_FRAME_WHYW;
typedef struct
{
u16 send_len;
u8 send_sum_cs; //校验和
u8 send_buf[UP_BUF_SIZE];
}OTHER_FRAME_UP_SEND_PARA_;
typedef enum{
WHYW_STATE_S0 = 0,
WHYW_STATE_S1,
WHYW_STATE_S2,
WHYW_STATE_S3,
WHYW_STATE_S4,
WHYW_STATE_S5,
WHYW_STATE_S6,
WHYW_STATE_S7,
WHYW_STATE_S8,
WHYW_STATE_S9,
WHYW_STATE_S10,
WHYW_STATE_S11,
WHYW_STATE_S12,
WHYW_STATE_S13,
WHYW_STATE_S20,
WHYW_STATE_S21,
WHYW_STATE_S22,
WHYW_STATE_S30,
WHYW_STATE_S31,
WHYW_STATE_S32,
}TYP_STATE_WHYW;
u8 crack_frame_WHYW(u16 frame_lenth, u8 *frame_buffer);
u8 up_deal_code_WHYW(void);
void Frame_ack_WHYW(u8* p_send_buf, u16* p_send_len);
void Frame_ResetDealState_WHYW(void);
void GetUploadDataResetState_WHYW(void);
u8 GetUploadDataCheckIdle_WHYW(void);
u8 GetUploadDataCheckTask_WHYW(void);
void GetUploadDataMachine_WHYW(u8 data_step, u8* p_send_buf, u16* p_send_len);
/****************************规约数据存储部分*****************************/
void DataStoreInit(void);
void DataStoreMachine(void);
u8 DataStoreIfIdle(void);
/************************网络连接选择\延时等待时间设置********************/
#define MAIN_CONNECT_TYPE NBIOT_CONNECT_UDP1
#define MAIN_SEND_TYPE SEND_TYPE_UDP1
#define SLAVE_CONNECT_TYPE NBIOT_CONNECT_UDP2
#define SLAVE_SEND_TYPE SEND_TYPE_UDP2
#define COAP_UPLOAD_WAIT_ACK_TIME 150 //主上报15秒副上报5秒
#define UDP_UPLOAD_WAIT_ACK_TIME 50
#define NB_ONLINE_KEEP_TIME 50
#ifdef __cplusplus
}
#endif
#endif
#endif /* __LYBK_FRAME_H__ */
/******************************************************************************
* EOF (not truncated)
******************************************************************************/