/******************************************************************************
版权所有：	
文件名称：	pw_quality.h
文件版本：	01.01
创建作者：xxxxxx
创建日期：	2014-08-04
功能说明：	DTU电能质量处理
其它说明：
修改记录：
*/
#ifndef _PW_QUALITY_H
#define _PW_QUALITY_H
/*------------------------------- 头文件 --------------------------------------
*/
#include "fft.h"

/*------------------------------- 宏定义 --------------------------------------
*/
/*------------------------------ 类型结构 -------------------------------------
*/
/**********************************电度定义**************************************/
//电度记录文件头，16bytes
struct energy_file_head
{
	u32	signature;	//电度文件签名
	u32	version;		//电度文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

struct  energy_file_head_data
{
	// 电度记录文件头
	struct energy_file_head cfh;		

	// 电度头
	u32	interval;	//间隔：5~60分钟
	u32	size;		//存储容量：7天
	u32 	swnum;		//开关数量
	u32	addr;		//起始地址
	u32	num;		//存储总量
	u8	reserved[12];
};

struct energy
{
	float		energy_p_p;	//正向有功电度值
	float		energy_p_n;	//负向有功电度值
	float		energy_q_p;	//正向无功电度值
	float		energy_q_n;	//负向无功电度值
};
struct energy_rcd
{
	struct rtc_time_t	timemark;	//时标
	struct energy mea[SWITCH_NUM_MAX];
}; //(需按16对齐规则补齐)

struct rsc
{
	u16	di;	//点号
	u8	owner;	//归属：开关1~开关12、公共0
	u8	is_real;	//是否实点	
	u8	indexno;	//在归属中的索引号
	char name[7];
	qs16	normal;	//额定值	4byte
}; 

/**********************************极值定义**************************************/
//极值记录文件头，16bytes
struct extrema_file_head
{
	u32	signature;	//极值文件签名
	u32	version;		//极值文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};
struct  extrema_file_head_data
{
	// 极值记录文件头
	struct extrema_file_head cfh;		

	// 极值头
	u32	interval;	//间隔：年月日
	u32	size;		//单顶存储容量
	u32	mea_num;	//测量值个数
	u32	addr_desc;	//描述起始地址

	u32	num_desc;	//描述存储总量
	u32	addr;	//记录起始地址
	u32	num;	//记录存储总量
	u16	rsc_crc;		//转发表CRC
	u8	Reserved[2];
};

struct extrema
{
	float	extrema_h;	//极大值
	struct rtc_time_t	timemark_h;	//极大值时标
	float	extrema_l;	//极小值
	struct rtc_time_t	timemark_l;	//极小值时标
}; //24byte

struct extrema_rcd
{
	struct rtc_time_t	timemark;	//时标
	struct extrema	extrema_mea[UI_NUM + SW_AC_NUM_ALL*SWITCH_NUM_MAX];
};// (需按16对齐规则补齐)

/**********************************定点遥测定义**************************************/
//整点记录文件头，16bytes
struct mearcd_file_head
{
	u32	signature;	//整点记录文件签名
	u32	version;	//整点记录文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

struct  mearcd_file_head_data
{
	// 整点记录文件头
	struct mearcd_file_head cfh;		

	// 整点记录头
	u32	interval;	//间隔：5~60分钟
	u32	size;	//存储容量：30天
	u32 mea_num;//测量值个数
	u32	addr_desc;	//描述起始地址

	u32	num_desc;	//描述存储总量
	u32	addr;	//起始地址
	u32	num;	//存储总量
	u16	rsc_crc;	//转发表CRC
	u8	Reserved[2];
};

struct mea_rcd
{
	struct rtc_time_t	timemark;	//时标
	float	data[UI_NUM + SW_AC_NUM_ALL*SWITCH_NUM_MAX];	//测量值
};// (需按16对齐规则补齐)

/**********************************电容器管理定义**************************************/
//电容器管理文件头，16bytes
struct capmanage_file_head
{
	u32	signature;	//电容器管理文件签名
	u32	version;	//电容器管理文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

struct  capmanage_file_head_data
{
	//电容器管理文件头
	struct capmanage_file_head cfh;

	//电容器管理头
	u32	size;	//存储容量：30条	
	u32	meanum;	//测量个数
	u32	addr_desc;	//描述起始地址
	u32	num_desc;	//描述存储总量
	
	u32	addr;	//起始地址
	u32	num;	//存储总量
	u16	rsc_crc;	//转发表CRC
	u8	Reserved[6];
};

struct cap
{
	float		old_data;	//旧数值
	float		new_data;	//新数值
}; 

struct cap_rcd
{
	struct rtc_time_t	action_timemark;	//动作时标
	struct cap		data[SWITCH_NUM_MAX*2+6];	//测量值,每个开关的U、Q、COS
};// (需按16对齐规则补齐)

/**********************************电池电压记录定义**************************************/
//电池电压记录文件头，16bytes
struct udcrcd_file_head
{
	u32	signature;	//电池电压记录文件签名
	u32	version;	//电池电压记录文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

struct  udcrcd_file_head_data
{
	//电池电压文件头
	struct udcrcd_file_head cfh;

	//电池电压头
	u32	size;		//存储容量：30天
	u32	addr;		//起始地址
	u32	num;		//存储总量
	u8	reserved[4];
};

struct udc_rcd
{
	struct rtc_time_t	timemark;	//动作时标
	float		data[30];					//每隔30秒记录1条
};

struct pw_quality
{
	u32 len;			//一条记录的长度
	u32 index;		//索引0xFF标示行
	u32 rcd_num;	//记录行总数
	u32 sw_num;		//点表中配置的开关数量
	u32 mea_num;
	u32 delay_s;
	u32 change_set;
	u32 begin;
	u32 no;
};

/*------------------------------ 函数声明 -------------------------------------
*/

extern struct pw_quality 		g_energy;
extern struct pw_quality 		g_extrema;
extern struct pw_quality 		g_mearcd;
extern struct pw_quality		g_capmanage;
extern struct pw_quality		g_udcrcd;

int energy_init(void);
int extrema_init(void);
int mearcd_init(void);
int capmanage_init(void);
int udcrcd_init(void);

int pw_quality_init(void);
int pw_quality_exit(void);
int pw_quality_app(void);
int energy_create_csv(void);
int extrema_create_csv(void);
int mearcd_create_csv(void);
int capmanage_create_csv(void);
int udcrcd_create_csv(void);

#endif //_PW_QUALITY_H

/*------------------------------ 文件结束 -------------------------------------
*/



