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