371 lines
12 KiB
C
371 lines
12 KiB
C
|
||
#ifndef __UWater_SY_STORE_APP_H
|
||
#define __UWater_SY_STORE_APP_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* Includes ------------------------------------------------------------------*/
|
||
#include "sys_config.h"
|
||
#if PRODUCT_SY
|
||
#include "UWater_frame_app.h"
|
||
#include "UWater_Rtcc_driver.h"
|
||
|
||
#define STORE_SIZE_DATA_CIRCLE 16 //周期数据单条长度
|
||
#define STORE_SIZE_DATA_FROZEN 32 //冻结数据单条长度
|
||
|
||
#define EEP_DATA_LEN_CIRCLE (STORE_SIZE_DATA_CIRCLE*24*6)//2352//周期数据存储和指针长度
|
||
|
||
#define EEP_ADDR_SY_STORE_CIRCLE FRAME_SHENYANG_STORE_ADD //0x7300~0x7C00 周期数据16*24*6=2304=0x900
|
||
#define EEP_ADDR_SY_STORE_INDEX_CIRCLE (EEP_ADDR_SY_STORE_CIRCLE + STORE_SIZE_DATA_CIRCLE*24*6) //数据存储指针_周期数据_48BYTE
|
||
#define EEP_ADDR_SY_STORE_INDEX_DAILY (EEP_ADDR_SY_STORE_INDEX_CIRCLE + 66)////数据存储指针_日冻结数据_1BYTE
|
||
#define EEP_ADDR_SY_STORE_INDEX_MONTH (EEP_ADDR_SY_STORE_INDEX_DAILY + 1)////数据存储指针_月冻结数据_1BYTE
|
||
#define EEP_ADDR_SY_STORE_INDEX_YEAR (EEP_ADDR_SY_STORE_INDEX_MONTH + 1)////数据存储指针_年冻结数据_1BYTE
|
||
#define EEP_ADDR_SY_FIRST_PWON (EEP_ADDR_SY_STORE_INDEX_YEAR + 1)
|
||
//参数存储地址
|
||
#define EEP_ADDR_SY_TLVDATA (EEP_ADDR_SY_FIRST_PWON+1) //104字节
|
||
|
||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
#define EEP_DATA_LEN_FROZEN (STORE_SIZE_DATA_FROZEN*31)//995//冻结数据存储和指针长度
|
||
|
||
#define EEP_ADDR_SY_STORE_FROZEN_DAILY EEP_RTCC_APP_HISTORY_ADDR //0x440 日冻结数据(32*7)
|
||
#define EEP_ADDR_SY_STORE_FROZEN_MONTH (EEP_ADDR_SY_STORE_FROZEN_DAILY + STORE_SIZE_DATA_FROZEN*7) //月冻结数据(32*18)
|
||
#define EEP_ADDR_SY_STORE_FROZEN_YEAR (EEP_ADDR_SY_STORE_FROZEN_MONTH + STORE_SIZE_DATA_FROZEN*18) //年冻结数据(32*6)
|
||
|
||
#define SY_FIRST_POWERON_FLAG 0x56
|
||
|
||
typedef union //强制转化为浮点变量
|
||
{
|
||
u32 gp22_u32;
|
||
float gp22_float;
|
||
u8 buf[4];
|
||
}SY_U32_To_Float;
|
||
|
||
//数据存储指针参数名称
|
||
typedef enum
|
||
{
|
||
SY_StoreCurIndex_Daily = 0,//日冻结存储指针
|
||
SY_StoreCurIndex_Month = 1,//月冻结存储指针
|
||
SY_StoreCurIndex_Year = 2//月冻结存储指针
|
||
} SY_ParaTypeDef;
|
||
|
||
//周期数据结构体
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
u32 CurrentFlow;//正向累计流量
|
||
u32 CurrentFlowReverse;//负向累计流量
|
||
u32 InstantaneousFlow;//瞬时流量
|
||
u16 Presure;//压力
|
||
u16 Temprature;//温度
|
||
}Data;
|
||
u8 data_buf[STORE_SIZE_DATA_CIRCLE];
|
||
}UNION_SY_STORE_CIRCLE;
|
||
|
||
//周期数据存储索引结构体
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
DateTime CircleDataTime;//年月日时(分秒),分秒为0,使用DateTime格式而不是DateTime_noweek格式,已便于计算
|
||
u8 CircleCntStart;
|
||
u8 CircleCntEnd;
|
||
u8 ReadStart; //读取周期数据时使用
|
||
u8 ReadEnd;
|
||
}Data;
|
||
u8 data_buf[11];
|
||
}TYPE_CIRCLE_INDEX;
|
||
|
||
typedef union
|
||
{
|
||
TYPE_CIRCLE_INDEX CircleIndex[6];
|
||
u8 data_buf[66];
|
||
}UNION_SY_STORE_CIRCLE_INDEX;
|
||
|
||
//数据存储指针
|
||
#define SIZE_SY_STORE_INDEX (11*6+3+1)//70
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
UNION_SY_STORE_CIRCLE_INDEX Circle;//周期数据存储指针
|
||
u8 Daily;//日冻结数据存储指针
|
||
u8 Month;//月冻结数据存储指针
|
||
u8 Year;//年冻结数据存储指针
|
||
u8 firstPowerOn;//第一次上电标志
|
||
}Data;
|
||
u8 data_buf[SIZE_SY_STORE_INDEX];
|
||
}UNION_SY_STORE_INDEX;
|
||
|
||
//冻结数据结构体
|
||
/**
|
||
日期 3
|
||
时间 3
|
||
正向累计流量 4
|
||
负向累计流量 4
|
||
峰值流量 4
|
||
峰值流量时间 3
|
||
电池电压 6
|
||
水表状态 1
|
||
水表故障 1
|
||
阀门状态 1
|
||
预留 1
|
||
校验和 1
|
||
总字节数 32
|
||
*/
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
DateTime_noweek FrozenDataTime; //日期时间 6
|
||
u32 CurrentFlow;//正向累计流量 4
|
||
u32 CurrentFlowReverse;//负向累计流量 4
|
||
u32 PeakCurrentFlow;//峰值流量 4
|
||
u8 PeakCurrentFlowTime[3];//时分秒 3
|
||
u8 BatPower[6];//电池电压 6
|
||
u8 MeterState;//水表状态 1
|
||
u8 MeterFault;//水表故障 1
|
||
u8 ValveState;//阀门状态 1
|
||
u8 Reverse; //预留 1
|
||
u8 CheckSum;// 1
|
||
}Data;
|
||
u8 data_buf[STORE_SIZE_DATA_FROZEN];
|
||
}UNION_SY_STORE_FROZEN;
|
||
|
||
/**TLV 数据格式的参数**/
|
||
typedef enum
|
||
{
|
||
TagWarningId = 0, //即时报警ID
|
||
TagOverFlowCurrent = 1, //过流报警的阈值,单位0.1L/H
|
||
TagOverFlowMinute = 2, //持续过流时间
|
||
TagReverseFlowCurrent = 3, //反流报警的阈值,单位0.1L/H
|
||
TagReverseFlowMinute = 4, //持续反流报警时间
|
||
TagLeakFlowMinute = 5, //漏水报警时间
|
||
TagPowerLow001V = 6, //电压报警阈值
|
||
TagNoWaterMinute = 7, //空管报警时间
|
||
TagValveState = 8, //阀门状态
|
||
TagUploadStartTime = 12, //数据上报起始时间a
|
||
TagCircleData5Minutes = 13,//周期数据时间间隔a
|
||
TagDataFrozenTimeDailay = 14,//日冻结时间
|
||
TagDataFrozenTimeMonth = 15, //月冻结时间
|
||
TagUploadRetryTimes = 16,//上报重发次数
|
||
TagUploadRetryDelayMinite = 17,//重发延时时间
|
||
TagUploadIntervalHour = 18,//数据上报时间间隔a
|
||
TagServerIpPort = 21, //服务器地址a
|
||
TagAPN = 22, //APN信息
|
||
TagWorkTime = 31 //水表运行时间
|
||
|
||
}TypeDef_TLVTag;
|
||
|
||
typedef enum
|
||
{
|
||
LenWarningId = 2, //即时报警ID-----------------------------2
|
||
LenOverFlowCurrent = 4, //过流报警的阈值,单位0.1L/H-------4
|
||
LenOverFlowMinute = 1, //持续过流时间----------------------1
|
||
LenReverseFlowCurrent = 4, //反流报警的阈值,单位0.1L/H----4
|
||
LenReverseFlowMinute = 1, //持续反流报警时间---------------1
|
||
LenLeakFlowMinute = 1, //漏水报警时间----------------------1
|
||
LenPowerLow001V = 2, //电压报警阈值------------------------2
|
||
LenNoWaterMinute = 1, //空管报警时间-----------------------1
|
||
LenValveState = 7, //阀门状态---------------------------7
|
||
LenUploadStartTime = 4, //数据上报起始时间a-------------4
|
||
LenCircleData5Minutes = 1, //周期数据时间间隔a-------------1
|
||
LenDataFrozenTimeDailay = 1, //日冻结时间------------------1
|
||
LenDataFrozenTimeMonth = 2, //月冻结时间----------------2
|
||
LenUploadRetryTimes = 1, //上报重发次数--------------------1
|
||
LenUploadRetryDelayMinite = 1, //重发延时时间--------------1
|
||
LenUploadIntervalHour = 1, //数据上报时间间隔a-------------1
|
||
LenServerIpPort = 32, //服务器地址a--------------------32
|
||
LenAPN = 32, //APN信息---------------------------------32
|
||
LenWorkTime = 6 //水表运行时间-------------------------6
|
||
}TypeDef_TLVDataLen;
|
||
|
||
//水表参数定义
|
||
#define TLV_VALUE_LEN 104
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
u8 ValueWarningId[2];//即时报警ID--------------------------2
|
||
u8 ValueOverFlowCurrent[4];//过流报警的阈值,单位0.1L/H----4
|
||
u8 ValueOverFlowMinute;//持续过流时间----------------------1
|
||
u8 ValueReverseFlowCurrent[4];//反流报警的阈值,单位0.1L/H-4
|
||
u8 ValueReverseFlowMinute;//持续反流报警时间---------------1
|
||
u8 ValueLeakFlowMinute;//漏水报警时间----------------------1
|
||
u8 ValuePowerLow001V[2];//电压报警阈值---------------------2
|
||
u8 ValueNoWaterMinute;//空管报警时间-----------------------1
|
||
u8 ValueValveState[7];//阀门状态---------------------------7
|
||
u8 ValueUploadStartTime[4];//数据上报起始时间a-------------4
|
||
u8 ValueCircleData5Minutes;//周期数据时间间隔a-------------1
|
||
u8 ValueDataFrozenTimeDailay;//日冻结时间------------------1
|
||
u8 ValueDataFrozenTimeMonth[2];//月冻结时间----------------2
|
||
u8 ValueUploadRetryTimes;//上报重发次数--------------------1
|
||
u8 ValueUploadRetryDelayMinite;//重发延时时间--------------1
|
||
u8 ValueUploadIntervalHour;//数据上报时间间隔a-------------1
|
||
u8 ValueServerIpPort[32];//服务器地址a--------------------32
|
||
u8 ValueAPN[32];//APN信息---------------------------------32
|
||
u8 ValueWorkTime[6];//水表运行时间-------------------------6
|
||
}s;
|
||
u8 data_buf[TLV_VALUE_LEN];
|
||
}Type_TLVValue;
|
||
|
||
typedef enum
|
||
{
|
||
AddrWarningId = 0, //即时报警ID-----------------------------2
|
||
AddrOverFlowCurrent = 2, //过流报警的阈值,单位0.1L/H-------4
|
||
AddrOverFlowMinute = 6, //持续过流时间----------------------1
|
||
AddrReverseFlowCurrent = 7, //反流报警的阈值,单位0.1L/H----4
|
||
AddrReverseFlowMinute = 11,//持续反流报警时间---------------1
|
||
AddrLeakFlowMinute = 12,//漏水报警时间----------------------1
|
||
AddrPowerLow001V = 13,//电压报警阈值------------------------2
|
||
AddrNoWaterMinute = 15,//空管报警时间-----------------------1
|
||
AddrValveState = 16,//阀门状态---------------------------7
|
||
AddrUploadStartTime = 23, //数据上报起始时间a-------------4
|
||
AddrCircleData5Minutes = 27,//周期数据时间间隔a-------------1
|
||
AddrDataFrozenTimeDailay = 28,//日冻结时间------------------1
|
||
AddrDataFrozenTimeMonth = 29, //月冻结时间----------------2
|
||
AddrUploadRetryTimes = 31,//上报重发次数--------------------1
|
||
AddrUploadRetryDelayMinite = 32,//重发延时时间--------------1
|
||
AddrUploadIntervalHour = 33,//数据上报时间间隔a-------------1
|
||
AddrServerIpPort = 34, //服务器地址a--------------------32
|
||
AddrAPN = 66, //APN信息---------------------------------32
|
||
AddrWorkTime = 98 //水表运行时间-------------------------6
|
||
}TypeDef_TLVDataAddr;
|
||
|
||
typedef struct
|
||
{
|
||
const TypeDef_TLVTag Tag;
|
||
const TypeDef_TLVDataLen Len;
|
||
TypeDef_TLVDataAddr ValueAddr;
|
||
u8 EditFlag;//是否修改,0不修改, 1修改
|
||
} TypeDef_TLVStruct;
|
||
|
||
#define TLV_STR_BUF_LEN 19
|
||
static TypeDef_TLVStruct TlvStrBuf[TLV_STR_BUF_LEN]={
|
||
{TagWarningId, LenWarningId, AddrWarningId, 0},
|
||
{TagOverFlowCurrent, LenOverFlowCurrent, AddrOverFlowCurrent, 0},
|
||
{TagOverFlowMinute, LenOverFlowMinute, AddrOverFlowMinute, 0},
|
||
{TagReverseFlowCurrent, LenReverseFlowCurrent, AddrReverseFlowCurrent, 0},
|
||
{TagReverseFlowMinute, LenReverseFlowMinute, AddrReverseFlowMinute, 0},
|
||
{TagLeakFlowMinute, LenLeakFlowMinute, AddrLeakFlowMinute, 0},
|
||
{TagPowerLow001V, LenPowerLow001V, AddrPowerLow001V, 0},
|
||
{TagNoWaterMinute, LenNoWaterMinute, AddrNoWaterMinute, 0},
|
||
{TagValveState, LenValveState, AddrValveState, 0},
|
||
{TagUploadStartTime, LenUploadStartTime, AddrUploadStartTime, 0},
|
||
{TagCircleData5Minutes, LenCircleData5Minutes, AddrCircleData5Minutes, 0},
|
||
{TagDataFrozenTimeDailay, LenDataFrozenTimeDailay, AddrDataFrozenTimeDailay, 0},
|
||
{TagDataFrozenTimeMonth, LenDataFrozenTimeMonth, AddrDataFrozenTimeMonth, 0},
|
||
{TagUploadRetryTimes, LenUploadRetryTimes, AddrUploadRetryTimes, 0},
|
||
{TagUploadRetryDelayMinite, LenUploadRetryDelayMinite, AddrUploadRetryDelayMinite,0},
|
||
{TagUploadIntervalHour, LenUploadIntervalHour, AddrUploadIntervalHour, 0},
|
||
{TagServerIpPort, LenServerIpPort, AddrServerIpPort, 0},
|
||
{TagAPN, LenAPN, AddrAPN, 0},
|
||
{TagWorkTime, LenWorkTime, AddrWorkTime, 0}
|
||
};
|
||
/*报警触发上报标志位
|
||
0 流量超限
|
||
1 空管报警
|
||
2 反流报警
|
||
3 漏水报警
|
||
4 低电压报警
|
||
5 温度超范围
|
||
6 上盖被打开
|
||
7 阀门动作
|
||
8-11 预留
|
||
12-15 厂家自定义
|
||
*/
|
||
typedef enum
|
||
{
|
||
UPLOAD_OVER_FLOW = 0,//流量超限--
|
||
UPLOAD_NO_WATER, //空管报警--
|
||
UPLOAD_REVERSE_FLOW, //反流报警--
|
||
UPLOAD_LEAK_FLOW,//漏水报警--
|
||
UPLOAD_LOW_POWER,//低电压报警---
|
||
UPLOAD_TEMP_OVER,//温度超范围--
|
||
UPLOAD_SHELL_OPEN,//上盖被打开
|
||
UPLOAD_VALVE_CHANGE//阀门动作--
|
||
}TypeDef_UploadWarning;
|
||
/*状态号*/
|
||
typedef enum{
|
||
SY_STATE_S0 = 0,
|
||
SY_STATE_S1,
|
||
SY_STATE_S2,
|
||
SY_STATE_S3,
|
||
SY_STATE_S4,
|
||
SY_STATE_S5,
|
||
SY_STATE_S6,
|
||
SY_STATE_S7,
|
||
SY_STATE_S8,
|
||
SY_STATE_S9,
|
||
SY_STATE_S10,
|
||
SY_STATE_S11,
|
||
SY_STATE_S12,
|
||
SY_STATE_S13,
|
||
SY_STATE_S20,
|
||
SY_STATE_S21,
|
||
SY_STATE_S22,
|
||
SY_STATE_S30,
|
||
SY_STATE_S31,
|
||
SY_STATE_S32,
|
||
SY_STATE_S40,
|
||
SY_STATE_S41,
|
||
SY_STATE_S42,
|
||
SY_STATE_S50,
|
||
SY_STATE_S51,
|
||
SY_STATE_S52,
|
||
SY_STATE_S60,
|
||
SY_STATE_S61,
|
||
SY_STATE_S62,
|
||
SY_STATE_S70,
|
||
SY_STATE_S71,
|
||
SY_STATE_S72,
|
||
SY_STATE_S80,
|
||
SY_STATE_S81,
|
||
SY_STATE_S82,
|
||
SY_STATE_S90,
|
||
SY_STATE_S91,
|
||
SY_STATE_S92
|
||
}TYP_STATE_SY;
|
||
|
||
|
||
|
||
|
||
void ShenYang_Store_InitApp(void);
|
||
void ShenYang_Store_Machine(void);
|
||
void ShenYang_SOE_Machine(void);
|
||
u8 get_SY_StorePara(SY_ParaTypeDef paraType);
|
||
u8 ShenYangStore_IfSleep(void);
|
||
//int NB_SY_Frame_Upload_Warning(u8 *pBuf);
|
||
|
||
u8 getSY_StoreCircleIndex(void);
|
||
u8 getSY_CircleUploadPackets(void);
|
||
u8 getSY_ThisCirclePacket_Index(u8 current_packet);
|
||
int NB_SY_Frame_Upload_Data(u8 index, u8 *pBuf);
|
||
int NB_SY_Frame_Upload_CurrentData(u8 *pBuf);
|
||
void SY_GetCircleDateTime(DateTime *pDT, u8 index, u8 UploadOrRead);
|
||
u8 SY_GetCircleReadStartEnd(u8 index, u8 StartOrEnd);
|
||
int ShenYang_CircleDataStore_ClearUploadIndex(u8 index);
|
||
void ShenYang_TlvDataStoreMachine(void);
|
||
//计算往前几天的日期和时间,带周
|
||
DateTime getBackDateTime(u8 backDays);
|
||
//计算往前几天的日期和时间,不带周
|
||
DateTime_noweek getBackDateTimeNoWeek(u8 backDays);
|
||
u8 getSY_CircleDataPackets(u8 readDays, u8 *pIndexBuf);
|
||
u8 checkWarningUploadState(TypeDef_UploadWarning tWarningType);
|
||
u8 GetTLVData(u8 Tag, u8 Len, u8* pValue);
|
||
u8 SetTLVData(u8 Tag, u8 Len, u8* pValue);
|
||
u8 getTlvTagIndex(u8 inTag);
|
||
u8 getWaterState(void);
|
||
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __UWater_JIANGXISTORE_APP_H */
|
||
|
||
/***************************************************************END OF FILE****/
|