⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comtrade.h~

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 H~
字号:
#ifndef COMTRADE_H#define COMTRADE_H#include "mytype.h"#include <qstring.h>#include <qdatetime.h>#include <qptrlist.h>#include <math.h>#include <qfile.h>class CAnalogChannel;//SampleAttributes结构存放各采样频率特征:频率大小,采样点数typedef struct _SampleAttributes{	unsigned int   SampleFreq;//采样频率大小	unsigned int   SamplePoints;//在该频率下的采样点数} SampleAttributes;//enumListType为相量的类别://NORMAL_VECTOR:正常相量;			  //POSITIVE_VECTOR:正序相量;//NEGATIVE_VECTOR:负序相量;//ZERO_VECTOR:零序相量typedef enum  _ListType{	NORMAL_VECTOR,	POSITIVE_VECTOR,	NEGATIVE_VECTOR,	ZERO_VECTOR} ListType;//typedef enum _ElecType{	CURRENT,	VOLTAGE,//	OTHER} ElecType;//三种通道类型: //ANALOG=模拟;//DIGITAL=数字,//HIGHFREQ=高频typedef enum _ChannelType{	ANALOG,	DIGITAL,	HIGHFREQ}ChannelType;//被监测通道所代表的相别typedef enum _PhaseType { 	A,	B,	C,	zero,	NN,	J} PhaseType;typedef CMyArray<SampleAttributes,SampleAttributes> CSampleArray;//电网设备对象(广义线路)class CWholeLine{	public:	CWholeLine()	{		m_pAPhaseCh = NULL;		m_pBPhaseCh = NULL;		m_pCPhaseCh = NULL;		m_pOPhaseCh = NULL;		m_pNPhaseCh = NULL;		m_iType = -1;	};	virtual ~CWholeLine(){};		public:	CAnalogChannel* m_pAPhaseCh;	//A相通道	CAnalogChannel* m_pBPhaseCh;	//B相通道	CAnalogChannel* m_pCPhaseCh;	//C相通道	CAnalogChannel* m_pOPhaseCh;	//0相通道	CAnalogChannel* m_pNPhaseCh;	//N相通道	char m_LineName[40];	int m_iType;	//0:电流   1:电压};//CStationGenericInfo//用于存放电站的通用信息:电站名,电站编号,总通道数,模拟通道数,数字通道数,//公频,采样频率数,各采样频率及其点数,记录开始时间,故障触发时间//数据文件(*.DAT)的类型class CStationGenericInfo    							{	public:	CStationGenericInfo();	~CStationGenericInfo();	void ReleaseMem();	char  m_chStationName[80];//电站名	char  m_chStationID[16];//电站编号	unsigned int  m_nChannelCount;//总通道数	unsigned int  m_nAnalogChannels; //模拟通道数	unsigned int  m_nDigitalChannels;//数字通道数		double m_nTransportFreq;//工频	CSampleArray m_SaArray;//采样频率数组	QDateTime m_tStartPoint;//故障文件记录开始时间	QString m_strStartTime;	QDateTime m_tTriggerPoint;//故障触发时间	QString m_strTriggerTime;	int    m_nActualPoints;//实际点数	bool  m_bTextMode;//数据文件的类型: TRUE为文本(ASCII)文件;FALSE为二进制(Binary)文件	CMyArray<int ,int>m_TimeArray;//存放各采样点相对与记录开始时刻的时间偏移值,以us为单位	int  m_nPointCount;//总的采样时间点数	public:	void AddTimePoint(int nTime);//填充时间数组	void ComfirmTimePoints();//计算出总的采样点数};//通道class  CChannel{	public:	CChannel(CSampleArray* pSaArray);	~CChannel();	void ReleaseMem();	ChannelType m_ChannelType;//通道的类型	char        m_chChannelName[40];//通道名	char        m_chChannelNumber[16];//通道编号	int			m_nChannelNumber;//数字形式的通道编号	int        m_times;//采样点数	ElecType   m_elecType;//电气特性	CSampleArray* m_pSaArray;};//模拟通道class CAnalogChannel : public CChannel{	public:	QString m_strMonitoredComponent;//该通道被监测的电路或器件	char	m_chChannelUnit[4];//该通道上的电量单位		PhaseType m_PhaseType;//通道的相别	double  m_A,m_B;//通道的数据转换因子:Xk=A*Xk+B	double  m_data_max,m_data_min;//数据的上下限:data_max为数据的上限;data_min为数据的下限	double   m_nSkew;//零飘值	short    m_nMax,m_nMin;//实际读入的通道数据的最大,最小值(DRAW 用)	short    m_nSaveMax,m_nSaveMin;//实际读入的通道数据的最大,最小值(不可变)		CMyArray<INT16,INT16> m_DataArray;//存放通道数据的数据;数据类型为2字节	double m_CurRData,m_CurIData;	//当前点的通道有效值	double m_Value,m_Angle;			//幅值和相角	public:	CAnalogChannel(QString Channelname,QString ChannelNumber,CSampleArray* pSaArray);	~CAnalogChannel();	void ReleaseMem();	void GetValue(int x,int tune,int nSampleNumber,double& a,double& b);		void Create(double Count);//确定数据数组的范围	void GetAsciiData();//获取文本形式的数据	void GetBinaryData(ushort nData);//获取二进制形式的数据};//数字通道class CDigitalChannel : public CChannel{	public:	bool m_bDefaultState;//数字通道上默认状态	CMyArray <WORD,WORD> m_DataArray;		public:	CDigitalChannel(QString Channelname,QString ChannelNumber,CSampleArray* pSaArray);	~CDigitalChannel();	void ReleaseMem();	void GetAsciiData();	void GetBinaryData(WORD nData,int nNumber);	void GetValue(int x,WORD& sw_state);};//class CComtradeFile{	public: 	CComtradeFile();	~CComtradeFile();	void ReleaseMem();		public:	QString             m_szHdr;	QString             m_szFileName;//存放故障文件的文件名    CStationGenericInfo m_GenericInfo;//存放电站的通用配置信息	QPtrList<CChannel> m_ChannelArray;//存放各数据通道的链表	int m_iStartTime;	int m_iPingLv;	double  m_nTimeOffset;//错误时刻与记录开始时刻的时间差值;以ms为单位	QPtrList<CWholeLine> m_WLineArray;		protected:	QString RefineString(QString str1,QString& str2);//提取,前面的字符串放在str2中,其余为返回值	unsigned int UINTNormalize(const char* ch);//将字符串转化为UINT型	double DoubleNormalize(const char* ch);//将字符串转化为double型		public:	bool OpenCfgFile(const char * lpszPathName);//读cfg文件	bool OpenHdrFile(const char *  lpszPathName);//读hdr文件	bool RealDataFile(const char * lpszPathName,int nNeedData);	bool OpenBinaryDatFile(const char * lpszPathName,int nNeedData);//读二进制数据文件	bool OpenAsciiDatFile(const char * lpszpathName,int nNeedData);//读ASCII数据文件	bool ReadComtradeFileBaseInfo(const char * lpszPathName);	//读comtrade基本信息	int  GetWholeLine();	bool GetDataSampleInfo(int& dataNo,unsigned int& nSampleNumber,bool to = true);	bool GetAllAnChannelValue();	bool GetOneAnChannelValue(int dataNo,CAnalogChannel* pAnCh,bool to = true);	void GetFaultAfterValue();	//取故障后5ms开始那个周波的有效值数据	void GetFaultBeforeValue();	//取故障前35ms开始那个周波的有效值数据};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -