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

📄 nrlan103.h

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 H
字号:
//// C++ Interface: nrlan103//// Description:////// Author: root <root@localhost.localdomain>, (C) 2006//// Copyright: See COPYING file that comes with this distribution////#ifndef NRLAN103_H#define NRLAN103_H#include <map>#include <deque>#include "baseclass/BaseDevice.h"#include "ASDU.h"#include "103Function.h"#include "103Struct.h"#include "NRLan103def.h"#include "xmlwrapper.hpp"using std::map;using namespace XMLWrapper;/**@author root */class CNRLan103;typedef QPtrList<CNRLan103> DevListType;typedef  QValueList<CmdParam> CMDPARAM;class CNRLan103 : public CBaseDevice{public:    CNRLan103(st_deviceinfo DevInfo);    ~CNRLan103();    virtual bool InitClass();    void AdjustClock();    void CheckDisturb();    void GetAnalog();    void GetDingZhi();    void GetSector();    void GetSwitch();    void GetYaBan();    bool XunJian();private:    bool ReceData(CByteArray& rData);    bool SendAsdu10();    bool SendData(CByteArray& sData);    void ExplainAsdu(CByteArray& Data);    void ProcessAsdu10(CAsdu& a);    void ProcessAsdu23(CAsdu& a);    void ProcessAsdu26(CAsdu& a);    void ProcessAsdu28(CAsdu& a);    void ProcessAsdu27(CAsdu& a);    void ProcessAsdu29(CAsdu& a);    void ProcessAsdu30(CAsdu& a);    void ProcessAsdu31(CAsdu& a);    bool SendAsdu21();    bool SendAsdu24(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC);    bool SendAsdu25(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC);    int CollectGroupInfo();    int processSingle(BYTE* pos,QString& str);    void GroupHandler(CAsdu10& a10);    void ProcessAlert(int icpuno, DataSet* pDataSet);    void ProcessAsdu11(CAsdu& a);    void ProcessFault(int icpuno, DataSet* pDataSet);    void ProcessGroup(CAsdu10& a10);    void ProcessSwitch(int icpuno, DataSet* pDataSet);    void ProcessWave();    void SortDDTable();    /*!        \fn CNRLan103::processGID(BYTE* pos,BYTE* GDDP)     */    QString processGID(BYTE* pos,BYTE* GDDP)    {        /// @todo implement me        QString val;        QString tmp;        BYTE buff[100];//         QTextCodec *decoder = QTextCodec::codecForName ("GB2312");        switch (GDDP[0])        {        case 1:            bzero (buff, 100);            memcpy (buff, pos, GDDP[1] * GDDP[2]);            val = static_cast < QString > ((char *) buff);//             val = decoder->toUnicode (val);            break;        case 3:            bzero (buff, 100);            memcpy (buff, pos, GDDP[1]);            tmp.sprintf ("%u", buff[0]);            val = tmp;            break;        case 4:            bzero (buff, 100);            memcpy (buff, pos, GDDP[1]);            val.sprintf ("%.d", ((int *) buff)[0]);            break;        case 7:            bzero (buff, 100);            memcpy (buff, pos, GDDP[1]);            val.sprintf ("%.5f", ((float *) buff)[0]);            break;        case 8:            bzero (buff, 100);            memcpy (buff, pos, GDDP[1]);            val.sprintf ("%.5f", ((double *) buff)[0]);            break;        case 17:            //wave switches' fun&inf            val.sprintf ("%u", pos[0]);#ifndef USE_LIBXML2            m_pxml->InsertNodeAttr (currentEntry, "pfun", val);#else						currentEntry.setAttributeValue("pfun",val.data());#endif            val.sprintf ("%u", pos[1]);#ifndef USE_LIBXML2            m_pxml->InsertNodeAttr (currentEntry, "pinf", val);#else						currentEntry.setAttributeValue("pinf",val.data());#endif            return "";            break;        default:            return "";        }        return val;    }    /*!        \fn CNRLan103::GetParamType(int groupNo)     */    QString GetParamType(int groupNo)    {        /// @todo implement me        QDomNode node,cnode;        QString val;        val.sprintf("%d",groupNo);        node=this->m_pxml->GetDomNode(QString("body"),"GROUPTITLE");        cnode=this->m_pxml->GetChildNode(node,"GROUP","groupno",val.data(),NULL,NULL);        this->m_pxml->GetNodeAttr(cnode,"character",val);        return val;    }private:    bool collecting;    bool m_bPrint;    bool m_bSaveData;    unsigned short m_LastFan;    BYTE laste;    BYTE lastg;    CDistrubData m_DistrubData;    CMDPARAM m_CmdParam;    CMDPARAM::iterator cmdit;    CMyArray<DistrubDataTable, DistrubDataTable&> m_DDTable;    CMyArray<st_paramvalue, st_paramvalue>  m_GroupValue;    CMyArray<st_paramvalue, st_paramvalue>  m_SwitchValue;    DistrubDataTable  m_Ddt;    enum collectState{COLLECT_G,COLLECT_E,DETAIL,VALUE,SWITCH,WAVE,PARAM} currentState;    int m_iNeedDdtTime;    int m_iPrimary;    int m_iWaveFlag;    int m_iWavingTimes;    BYTE m_Sector;#ifndef USE_LIBXML2    map< BYTE,QDomNode > nodeMap;#else    map< BYTE,Element > nodeMap;#endif    map< QString,int > indexMap;    QDomNode currNode;    QFile m_File;    QPtrList<DataSet> m_CmdDataSets;    QString m_SysPath;    QString m_szDpi1;    QString m_szDpi2;    QString m_szLastWaveTime;    QString m_szSDpi1;    QString m_szSDpi2;    std::deque<BYTE> gQueue;    std::deque<GIN> eQueue;    std::fstream f;#ifndef USE_LIBXML2    QDomNode currentEntry;#else		Element currentEntry;#endif		Document* m_pConfDoc;		static Document* getDocument(const string& filePathName)		{			///@todo mutext			static map<string,Document*> confContainer;			Document* pdoc=NULL;			if(confContainer.end()==confContainer.find(filePathName))			{				while(1)				{					try					{						pdoc=new Document(filePathName.c_str());					}catch(DOMException& e)					{						cout<<e.what()<<endl;						continue;					}					break;				}// 				pdoc->LoadFile(filePathName.c_str());				confContainer.insert(make_pair(filePathName,pdoc));			}			else			{				pdoc=confContainer.find(filePathName)->second;			}			return pdoc;		}public:    bool m_bCheckTime;    bool m_bCmding;    bool m_bConnect;    bool m_bmod;    bool m_bNeedInit;    bool m_bStop;    bool m_bUStop;    bool m_bWaving;    int m_iLPort;    int m_iUPort;    long m_threadid;    BYTE m_StaAddr;    time_t lastRecvWaveTime;    NRLAN103::CommMannager communicator;};inline ostream& operator<<(ostream& o,const CNRLan103& dev){	o<<"["<<dev.m_DevInfo.m_ModuleName<<"][device "<<dev.m_DevInfo.m_MachineNo<<"]["<<dev.m_DevInfo.m_MachineName[80]<<"]["<<dev.m_DevInfo.m_MachineType<<"]";	return o;}#endif

⌨️ 快捷键说明

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