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

📄 nrlan103.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*!    \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 + -