📄 nrlan103.cpp
字号:
/*! \fn CNRLan103::GetSwitch() */void CNRLan103::GetSwitch(){ /// @todo implement me m_bCmding = true; QString szcpuno = "", szgroup = "", sztmp = "", szaddr = "", szdevaddr = ""; szdevaddr.sprintf ("%d", m_DevInfo.m_MachineAddr);#ifndef USE_LIBXML2 QDomNode node, cnode;#endif for (int i = 0; i < m_iCpuNum; i++) { szcpuno.sprintf ("%d", i + 1);#ifndef USE_LIBXML2 node = m_pxml->GetDomNodex (QString("body"), "CPUCONFIG", "index", szcpuno.data(),NULL,NULL/*,"devaddr",szdevaddr*/);#else Element rootElem=m_pConfDoc->getRootElement(); XPathProcessor xprc(*m_pConfDoc); char exprBuff[100]; bzero(exprBuff,100); sprintf(exprBuff,"//body/CPUCONFIG[@index='%s']",szcpuno.data()); Node node=xprc.selectSingleNode(rootElem,exprBuff);#endif if (node.isNull ()) { cout<<*this<<"[ERROR][CNRLan103::GetSwitch()]can not loacte"<<exprBuff<<endl; m_CmdParam.clear (); m_CmdDataSets.clear (); m_bCmding=false; return; }#ifndef USE_LIBXML2 m_pxml->GetNodeAttr (node, "addr", szaddr); cnode = m_pxml->GetChildNode (node, "GROUP", "charc", "SWITCH",NULL,NULL); m_pxml->GetNodeAttr (cnode, "value", szgroup);#else Node attrNode=xprc.selectSingleNode(node,"@addr"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GetSwitch()]can not loacte"<<exprBuff<<"/@addr"<<endl; m_CmdParam.clear (); m_CmdDataSets.clear (); m_bCmding=false; return; } szaddr=attrNode.value().c_str(); attrNode=xprc.selectSingleNode(node,"GROUP[@charc='SWITCH']/@value"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GetSwitch()]can not loacte"<<exprBuff<<"/GROUP[@charc='SWITCH']/@value"<<endl; m_CmdParam.clear (); m_CmdDataSets.clear (); m_bCmding=false; return; } szgroup=attrNode.value().c_str();#endif CmdParam cmd; cmd.type = 21; cmd.cot = 42; cmd.addr = szaddr.toInt (); cmd.fun = 254; cmd.inf = 241; cmd.num = 1; m_CmdParam.append (cmd); DataSet *pds = new DataSet; pds->gin.GROUP = szgroup.toInt (); pds->gin.ENTRY = 0; pds->kod = 1; m_CmdDataSets.append (pds); } cmdit = m_CmdParam.at (0); SendAsdu21 ();}/*! \fn CNRLan103::GetYaBan() */void CNRLan103::GetYaBan(){ /// @todo implement me m_bCmding = true; QString szcpuno = "", szgroup = "", sztmp = "", szaddr = "", szdevaddr = ""; szdevaddr.sprintf ("%d", m_DevInfo.m_MachineAddr);#ifndef USE_LIBXML2 QDomNode node, cnode;#endif for (int i = 0; i < m_iCpuNum; i++) { szcpuno.sprintf ("%d", i + 1);#ifndef USE_LIBXML2 node = m_pxml->GetDomNodex (QString("body"), "CPUCONFIG", "index", szcpuno.data(),NULL,NULL/*,"devaddr",szdevaddr*/); if (node.isNull ()) { m_CmdParam.clear (); m_CmdDataSets.clear (); m_bCmding=false; return; } m_pxml->GetNodeAttr (node, "addr", szaddr); cnode = m_pxml->GetChildNode (node, "GROUP", "charc", "RYABAN",NULL,NULL); m_pxml->GetNodeAttr (cnode, "value", szgroup);#else Element rootElem=m_pConfDoc->getRootElement(); XPathProcessor xprc(*m_pConfDoc); char exprBuff[100]; bzero(exprBuff,100); sprintf(exprBuff,"//body/CPUCONFIG[@index='%s']",szcpuno.data()); Node node=xprc.selectSingleNode(rootElem,exprBuff); if(node.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GetYaBan()]can not locate"<<exprBuff<<endl; return; } Node attrNode=xprc.selectSingleNode(node,"/@addr"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GetYaBan()]can not locate"<<exprBuff<<"/@addr"<<endl; return; } szaddr=attrNode.value().c_str(); attrNode=xprc.selectSingleNode(node,"/GROUP[@charc='RYABAN']/@value"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GetYaBan()]can not locate"<<exprBuff<<"/GROUP[@charc='RYABAN']/@value"<<endl; return; } szgroup=attrNode.value().data();#endif CmdParam cmd; cmd.type = 21; cmd.cot = 42; cmd.addr = szaddr.toInt (); cmd.fun = 254; cmd.inf = 241; cmd.num = 1; m_CmdParam.append (cmd); DataSet *pds = new DataSet; pds->gin.GROUP = szgroup.toInt (); pds->gin.ENTRY = 0; pds->kod = 1; m_CmdDataSets.append (pds); } cmdit = m_CmdParam.at (0); SendAsdu21 ();}/*! \fn CNRLan103::SendAsdu21() */bool CNRLan103::SendAsdu21(){ /// @todo implement me printf("CNRLan103::SendAsdu21()%02x,%02x,%02x,%02x\n",(*cmdit).fun,(*cmdit).inf,(*cmdit).addr,(*cmdit).num); CAsdu21 a21; a21.m_FUN=(*cmdit).fun; a21.m_INF=(*cmdit).inf; a21.m_Addr=(*cmdit).addr; a21.m_NOG=(*cmdit).num; if(a21.m_NOG>0) { DataSet* pDataSet=m_CmdDataSets.at(0); a21.m_DataSets.append(pDataSet); m_CmdDataSets.remove(0); } m_CmdParam.remove(cmdit); CByteArray sData; a21.BulidArray(sData); if(!SendData(sData))return false; return true;}/*! \fn CNRLan103::SendAsdu24(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC) */bool CNRLan103::SendAsdu24(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC){ /// @todo implement me QString msg; msg.sprintf ("--@@NRLan103 SendAsdu24 too=%d fan=%d acc=%d@@--\n", iTOO, iFAN,iACC); ///communicator.printData (NULL, 0, msg.data (), 1); CAsdu24 a24; a24.m_Addr = addr; a24.m_FUN = fun; a24.m_FAN = iFAN; a24.m_TOO = iTOO; a24.m_TOV = iTOV; a24.m_ACC = iACC; CByteArray sData; a24.BulidArray (sData); if (!SendData (sData)) return false; return true;}/*! \fn CNRLan103::SendAsdu25(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC) */bool CNRLan103::SendAsdu25(BYTE addr, BYTE fun, WORD iFAN, BYTE iTOO, BYTE iTOV, BYTE iACC){ /// @todo implement me QString msg; msg.sprintf ("--@@NRLan103 SendAsdu25 too=%d fan=%d acc=%d@@--\n", iTOO, iFAN,iACC); communicator.printData (NULL, 0, msg.data (), 1); CAsdu25 a25; a25.m_Addr = addr; a25.m_FUN = fun; a25.m_FAN = iFAN; a25.m_TOO = iTOO; a25.m_TOV = iTOV; a25.m_ACC = iACC; CByteArray sData; a25.BulidArray (sData); if (!SendData (sData)) return false; return true;}/*! \fn CNRLan103::CollectGroupInfo() */int CNRLan103::CollectGroupInfo(){ /// @todo implement me ///printf (" CNRLan103::CollectGroupInfo()\n"); CmdParam cmd; cmd.type = 21; cmd.cot = 42; cmd.addr = m_DevInfo.m_MachineAddr; cmd.fun = 254; cmd.inf = 240; cmd.num = 0; m_CmdParam.append (cmd); cmdit = m_CmdParam.at (0); collecting = true; currentState = COLLECT_G; SendAsdu21 ();}/*! \fn CNRLan103::processSingle(BYTE* pos,QString& str) */int CNRLan103::processSingle(BYTE* pos,QString& str){ /// @todo implement me BYTE *const KODP = pos; BYTE *const GDDP = KODP + 1; BYTE *const GIDP = GDDP + 3; BYTE buff[100]; int size = GDDP[1]; int count = GDDP[2]; QString attr; QString tstr; switch (KODP[0]) { case 1: attr = "type"; tstr.sprintf ("%d", GDDP[0]);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, attr, tstr);#else currentEntry.setAttributeValue(attr.data(),tstr.data());#endif tstr = ""; for (int i = 0; i < count; i++) tstr += processGID (GIDP + size * i, GDDP); if (tstr != "") { //m_pxml->InsertNodeAttr (currentEntry, "actual-value", tstr); } break; case 2: //attr="default"; tstr = ""; for (int i = 0; i < count; i++) tstr += processGID (GIDP + size * i, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "default", tstr);#else currentEntry.setAttributeValue("default",tstr.data());#endif break; case 3: //"range"; tstr = processGID (GIDP, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "min", tstr);#else currentEntry.setAttributeValue("min",tstr.data());#endif tstr = processGID (GIDP + size, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "max", tstr);#else currentEntry.setAttributeValue("max",tstr.data());#endif tstr = processGID (GIDP + size * 2, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "step", tstr);#else currentEntry.setAttributeValue("step",tstr.data());#endif break; case 5: //"precision"; tstr = processGID (GIDP, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "pm", tstr);#else currentEntry.setAttributeValue("pm",tstr.data());#endif tstr = processGID (GIDP + size, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "pn", tstr);#else currentEntry.setAttributeValue("pn",tstr.data());#endif break; case 9: //"dime"; tstr = processGID (GIDP, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "dime", tstr);#else currentEntry.setAttributeValue("dime",tstr.data());#endif break; case 10: //"desc"; tstr = processGID (GIDP, GDDP);#ifndef USE_LIBXML2 m_pxml->InsertNodeAttr (currentEntry, "desc", tstr);#else currentEntry.setAttributeValue("desc",tstr.data());#endif break; default: return size * count + 4; } return size * count + 4;}/*! \fn CNRLan103::GroupHandler(CAsdu10& a10) */void CNRLan103::GroupHandler(CAsdu10& a10){ /// @todo implement me if (a10.m_COT != 42) return; if (currentState == COLLECT_G) { QString str = "", cstr = "", szexport = "", szupgroup = "",szdesc="";#ifndef USE_LIBXML2 QDomNode cnode, gtnode, gnode; QDomNode node = m_pxml->GetDomNode (QString("body"),QString("INITINFO")); m_pxml->GetNodeAttr (node, "encoding", str); ///@todo replacement // gtnode = node.parentNode (); gnode = m_pxml->GetChildNode (gtnode, "GROUPTITLE", NULL, NULL); if (gnode.isNull ()) gtnode = m_pxml->InsertChildNode (gtnode, "GROUPTITLE"); else gtnode = gnode; ///@todo replacement /// QTextCodec *decoder = QTextCodec::codecForName (str);#else Element rootElem=m_pConfDoc->getRootElement(); XPathProcessor xprc(*m_pConfDoc); Node attrNode=xprc.selectSingleNode(rootElem,"//body/INITINFO/@encoding"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GroupHandler(CAsdu10& a10)]can not locate //body/INITINFO/@encoding"<<endl; return; } Element gnode=xprc.selectSingleNode(rootElem,"//body/GROUPTITLE"); if(gnode.isNull()) { gnode=(Element)xprc.selectSingleNode(rootElem,"//body"); gnode=gnode.addChildElement("GROUPTITLE"); }#ifdef GBK_ENV convertor conv(attrNode.value().c_str(),"GBK");#else convertor conv(attrNode.value().c_str(),"UTF-8");#endif#endif char buff[100]; int index; for (int i = 0; i < a10.m_DataSets.count (); i++) { if (a10.m_DataSets.at (i)->kod == 10) { bzero (buff, 100); memcpy (buff, a10.m_DataSets.at (i)->gid.GetData (), a10.m_DataSets.at (i)->gid.GetSize ()); str = static_cast < QString > (buff); /// str = decoder->toUnicode (str); // str=""; // for(int j=0;j<a10.m_DataSets.at (i)->gid.GetSize ();j++) // { // str+=QString().sprintf("%02x",a10.m_DataSets.at (i)->gid.GetData ()[j]); // } str=conv.convert(str.data()).c_str();#ifndef USE_LIBXML2 cnode = m_pxml->GetChildNode (node, "//INITINFO/GROUPINFO", "value", str.data(),NULL,NULL);#else char exprBuff[100]; bzero(exprBuff,100); sprintf(exprBuff,"//INITINFO/GROUPINFO[@value='%s']",str.data()); Node cnode=xprc.selectSingleNode(rootElem,exprBuff);#endif if (cnode.isNull ()) continue;#ifndef USE_LIBXML2 m_pxml->GetNodeAttr(cnode,"title",szdesc); m_pxml->GetNodeAttr (cnode, "character", cstr);#else attrNode=xprc.selectSingleNode(cnode,"@title"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GroupHandler(CAsdu10& a10)]can not loacate "<<exprBuff<<"/@title"<<endl; return; } szdesc=attrNode.value().c_str(); attrNode=xprc.selectSingleNode(cnode,"@character"); if(attrNode.isNull()) { cout<<*this<<"[ERROR][CNRLan103::GroupHandler(CAsdu10& a10)]can not loacate "<<exprBuff<<"/@character"<<endl; return; } cstr=attrNode.value().c_str();#endif map < QString, int >::iterator iter; if ((iter = indexMap.find (cstr)) != indexMap.end ())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -