📄 comtrade.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 + -