📄 103device.cpp~
字号:
icpuno = sztmp.toInt(); cnode = m_pxml->GetChildNode(node, "ELEMENT", "pfun", szfun, "pinf", szinf); if (cnode.isNull()) return; if (!m_pxml->GetNodeAttr(cnode, "pfun", szfun)) return; ifun = szfun.toInt(); if (!m_pxml->GetNodeAttr(cnode, "pinf", szinf)) return; iinf = szinf.toInt(); if (!m_pxml->GetNodeAttr(cnode, "entry", sztmp)) return; ientry = sztmp.toInt(); if (!m_pxml->GetNodeAttr(cnode, "desc", sztmp)) return; st_fault* pRpt_Fault = new st_fault; st_faultact* pFaultAct = new st_faultact; memset(pRpt_Fault, 0x00, sizeof(st_fault)); memset(pFaultAct, 0x00, sizeof(st_faultact)); pRpt_Fault->m_StationNo = g_PublicClass.m_StationNo; pRpt_Fault->m_MachineNo = m_DevInfo.m_EquipNo; pRpt_Fault->m_CpuNo = icpuno; pRpt_Fault->m_FaultNum = ++m_iFaultNo; strcpy(pRpt_Fault->m_MachineName, m_DevInfo.m_Equipment); szDate.sprintf("%04d%02d%02d%02d%02d%02d%03d", date.year(), date.month(), date.day(), a1.m_Cp32Time.Time.Hours, a1.m_Cp32Time.Time.Minutes, a1.m_Cp32Time.Time.Milliseconds/1000, a1.m_Cp32Time.Time.Milliseconds%1000); memcpy(pRpt_Fault->m_ActionTime, szDate.data(), szDate.length()); if (a1.m_Dpi.dpi.dpi == 1) sztmp += m_szDpi1; else sztmp += m_szDpi2; pFaultAct->m_MachineNo = m_DevInfo.m_EquipNo; pFaultAct->m_CpuNo = icpuno; pFaultAct->m_FaultNum = m_iFaultNo; memcpy(pFaultAct->m_ActElement, sztmp.data(), sztmp.length()); pFaultAct->m_ActTime = 0; pFaultAct->m_Dpi = a1.m_Dpi.dpi.dpi; pFaultAct->m_FunCode = ifun; pFaultAct->m_EventCode = iinf; pFaultAct->m_GroupNo = igroup; pFaultAct->m_Entry = ientry; pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上 pNode->m_nodeinfo.m_iResult = 1; pNode->m_nodeinfo.m_SegmentPid = (long)pRpt_Fault; pNode->m_nodeinfo.m_iSize = sizeof(st_fault); pNode->m_nodeinfo.m_DataType = DATA_FAULT; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上 pNode->m_nodeinfo.m_iResult = 1; pNode->m_nodeinfo.m_SegmentPid = (long)pFaultAct; pNode->m_nodeinfo.m_iSize = sizeof(st_faultact); pNode->m_nodeinfo.m_DataType = DATA_FAULTACT; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid; pNode->m_nodeinfo.m_iResult = m_iFaultNo; pNode->m_nodeinfo.m_SegmentPid = (long)0; pNode->m_nodeinfo.m_iSize = 0; pNode->m_nodeinfo.m_DataType = DATA_FAULTOVER; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); node = m_pxml->GetDomNode("body", "DEVCONFIG"); sztmp.sprintf("%s", m_DevInfo.m_Equipment); cnode = m_pxml->GetChildNode(node, "FAULTNO", "devname", sztmp); sztmp.sprintf("%d", m_iFaultNo); m_pxml->InsertNodeAttr(cnode, "value", sztmp); m_pxml->SaveXmlFile(); }}void C103Device::ProcessAsdu2(){ CAsdu02 a2; a2.SaveAsdu(m_ReceData); a2.ExplainAsdu(); if (a2.m_COT == 1) { CString sztmp = "", szfun = "", szinf = ""; sztmp.sprintf("%d", (*it).CpuNo); szfun.sprintf("%d", a2.m_FUN); szinf.sprintf("%d", a2.m_INF); QDomNode node, cnode; node = m_pxml->GetDomNode("body", "FAULT", "pcpuno", sztmp); if (node.isNull()) return; if (!m_pxml->GetNodeAttr(node, "group", sztmp)) return; int igroup = sztmp.toInt(); if (!m_pxml->GetNodeAttr(node, "cpuno", sztmp)) return; int icpuno = sztmp.toInt(); cnode = m_pxml->GetChildNode(node, "ELEMENT", "pfun", szfun, "pinf", szinf); if (cnode.isNull()) return; if (!m_pxml->GetNodeAttr(cnode, "pfun", szfun)) return; int ifun = szfun.toInt(); if (!m_pxml->GetNodeAttr(cnode, "pinf", szinf)) return; int iinf = szinf.toInt(); if (!m_pxml->GetNodeAttr(cnode, "entry", sztmp)) return; int ientry = sztmp.toInt(); if (!m_pxml->GetNodeAttr(cnode, "desc", sztmp)) return; st_fault* pRpt_Fault = new st_fault; st_faultact* pFaultAct = new st_faultact; memset(pRpt_Fault, 0x00, sizeof(st_fault)); memset(pFaultAct, 0x00, sizeof(st_faultact)); pRpt_Fault->m_StationNo = g_PublicClass.m_StationNo; pRpt_Fault->m_MachineNo = m_DevInfo.m_EquipNo; pRpt_Fault->m_CpuNo = icpuno; pRpt_Fault->m_FaultNum = ++m_iFaultNo; strcpy(pRpt_Fault->m_MachineName, m_DevInfo.m_Equipment); CString szDate = ""; QDate date = QDate::currentDate(); szDate.sprintf("%04d%02d%02d%02d%02d%02d%03d", date.year(), date.month(), date.day(), a2.m_Cp32Time.Time.Hours, a2.m_Cp32Time.Time.Minutes, a2.m_Cp32Time.Time.Milliseconds/1000, a2.m_Cp32Time.Time.Milliseconds%1000); memcpy(pRpt_Fault->m_ActionTime, szDate.data(), szDate.length()); if (a2.m_Dpi.dpi.dpi == 1) sztmp += m_szDpi1; else sztmp += m_szDpi2; pFaultAct->m_MachineNo = m_DevInfo.m_EquipNo; pFaultAct->m_CpuNo = icpuno; pFaultAct->m_FaultNum = m_iFaultNo; memcpy(pFaultAct->m_ActElement, sztmp.data(), sztmp.length()); pFaultAct->m_ActTime = a2.m_Cp32TimeRET.Time.Milliseconds; pFaultAct->m_Dpi = a2.m_Dpi.dpi.dpi; pFaultAct->m_FunCode = ifun; pFaultAct->m_EventCode = iinf; pFaultAct->m_GroupNo = igroup; pFaultAct->m_Entry = ientry; CDataNode* pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上 pNode->m_nodeinfo.m_iResult = 1; pNode->m_nodeinfo.m_SegmentPid = (long)pRpt_Fault; pNode->m_nodeinfo.m_iSize = sizeof(st_fault); pNode->m_nodeinfo.m_DataType = DATA_FAULT; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid;//同上 pNode->m_nodeinfo.m_iResult = 1; pNode->m_nodeinfo.m_SegmentPid = (long)pFaultAct; pNode->m_nodeinfo.m_iSize = sizeof(st_faultact); pNode->m_nodeinfo.m_DataType = DATA_FAULTACT; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = g_PublicClass.m_MainModuleNode.m_deviceinfo.mtype;//存在问题,如果没有先下命令,没有此值 pNode->m_nodeinfo.requestid = g_PublicClass.m_SelfPid; pNode->m_nodeinfo.m_iResult = m_iFaultNo; pNode->m_nodeinfo.m_SegmentPid = (long)0; pNode->m_nodeinfo.m_iSize = 0; pNode->m_nodeinfo.m_DataType = DATA_FAULTOVER; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); node = m_pxml->GetDomNode("body", "DEVCONFIG"); sztmp.sprintf("%s", m_DevInfo.m_Equipment); cnode = m_pxml->GetChildNode(node, "FAULTNO", "devname", sztmp); sztmp.sprintf("%d", m_iFaultNo); m_pxml->InsertNodeAttr(cnode, "value", sztmp); m_pxml->SaveXmlFile(); }}void C103Device::ProcessAsdu3(){ CAsdu03 a03; a03.SaveAsdu(m_ReceData); a03.ExplainAsdu();}void C103Device::ProcessAsdu4(){ CAsdu04 a04; a04.SaveAsdu(m_ReceData); a04.ExplainAsdu();}void C103Device::ProcessAsdu6(){ CAsdu06 a06; a06.SaveAsdu(m_ReceData); a06.ExplainAsdu();}void C103Device::ProcessAsdu8(){ CAsdu08 a08; a08.SaveAsdu(m_ReceData); a08.ExplainAsdu(); m_bGIFinished = true;}void C103Device::ProcessAsdu9(){ CAsdu09 a09; a09.SaveAsdu(m_ReceData); a09.ExplainAsdu();}void C103Device::ProcessAsdu10(){ CAsdu10 a10; a10.SaveAsdu(m_ReceData); if (a10.m_COT == 0x01)//南瑞RCS系列保护送故障时测距值和电流值等信息 { CFaultExplain FaultExplain; a10.ExplainAsdu(FaultExplain); m_FaultExplain.Add(FaultExplain); } else if (a10.m_COT == 0x2c)//修改定值或压板状态时,表明可以修改了 { // m_bCanModfiy = TRUE; } else if (a10.m_COT == 0x28)//修改定值或压板状态时,表明修改成功了 { // m_bModfiyFinish = TRUE; }}void C103Device::ProcessAsdu23(){ CAsdu23 a23; a23.SaveAsdu(m_ReceData); a23.ExplainAsdu(); if (m_iWaveFlag == 1 && m_bSwitch == false) { for (int i=0; i<a23.m_VSQ.byte; i++) { CString sztmp = ""; sztmp.sprintf("%04d%02d%02d%02d%02d%05d", a23.m_DDTables[i].Cp56Time.Time.Years+2000, a23.m_DDTables[i].Cp56Time.Time.Months, a23.m_DDTables[i].Cp56Time.Time.DaysOfMonth, a23.m_DDTables[i].Cp56Time.Time.Hours, a23.m_DDTables[i].Cp56Time.Time.Minutes, a23.m_DDTables[i].Cp56Time.Time.Milliseconds); if (strcmp(sztmp, m_szLastWaveTime) > 0) { m_DDTable.Add(a23.m_DDTables[i]); } } SortDDTable(); }}void C103Device::ProcessAsdu26(){ CAsdu26 a26; a26.SaveAsdu(m_ReceData); a26.ExplainAsdu(); m_DistrubData.DeleteData(); m_DistrubData.m_iNOC = a26.m_NOC; m_DistrubData.m_iNOE = a26.m_NOE; m_DistrubData.m_iINT = a26.m_INT; memcpy(m_DistrubData.m_FaultStartTime.byte, a26.m_Cp32Time.byte, 4*sizeof(BYTE)); if (!SendAsdu24(a26.m_FAN, 0x02, a26.m_TOV, 0)) m_DDStatus = 2;}void C103Device::ProcessAsdu27(){ CAsdu27 a27; a27.SaveAsdu(m_ReceData); a27.ExplainAsdu(); m_DistrubData.SaveACCInfo(a27.m_ACC, a27.m_RPV, a27.m_RSV, a27.m_RFA); if (!SendAsdu24(a27.m_FAN, 0x08, a27.m_TOV, a27.m_ACC)) m_DDStatus = 2;}void C103Device::ProcessAsdu28(){ CAsdu28 a28; a28.SaveAsdu(m_ReceData); a28.ExplainAsdu(); if (!SendAsdu24(a28.m_FAN, 0x10, 0x01, 0)) m_DDStatus = 2;}void C103Device::ProcessAsdu29(){ CAsdu29 a29; a29.SaveAsdu(m_ReceData); a29.ExplainAsdu(); m_DistrubData.SaveSwitchData(a29.m_ASDUData.GetData());}void C103Device::ProcessAsdu30(){ CAsdu30 a30; a30.SaveAsdu(m_ReceData); a30.ExplainAsdu(); m_DistrubData.SaveChannelData(a30.m_ASDUData.GetData());}void C103Device::ProcessAsdu31(){ CAsdu31 a31; a31.SaveAsdu(m_ReceData); a31.ExplainAsdu(); switch(a31.m_TOO) { case 32://不带中止的扰动数据传输的结束 m_DDStatus = 1; SendAsdu25(a31.m_FAN, 0x40, a31.m_TOV, a31.m_ACC);//0x40成功的扰动数据传输(肯定) break; case 33://由控制系统所中止的扰动数据传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x41, a31.m_TOV, a31.m_ACC);//0x41不成功的扰动数据传输(否定) m_DistrubData.DeleteData(); break; case 34://由继电保护设备(或间隔单元)所中止的扰动数据的传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x41, a31.m_TOV, a31.m_ACC);//0x41不成功的扰动数据传输(否定) m_DistrubData.DeleteData(); break; case 35://不带中止的通道传输的结束 m_DDStatus = 0; SendAsdu25(a31.m_FAN, 0x42, a31.m_TOV, a31.m_ACC);//0x42成功的通道传输(肯定) break; case 36://由控制系统所中止的通道传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x43, a31.m_TOV, a31.m_ACC);//0x43不成功的通道传输(否定) m_DistrubData.DeleteData(); break; case 37://由继电保护设备(或间隔单元)所中止的通道传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x43, a31.m_TOV, a31.m_ACC);//0x43不成功的通道传输(否定) m_DistrubData.DeleteData(); break; case 38://不带中止的带标志的状态变位的传输的结束 m_DDStatus = 0; SendAsdu25(a31.m_FAN, 0x44, a31.m_TOV, a31.m_ACC);//0x44成功的带标志的状态变位传输(肯定) break; case 39://由控制系统所中止的带标志的状态变位的传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x45, a31.m_TOV, a31.m_ACC);//0x45不成功的带标志的状态变位传输(否定) m_DistrubData.DeleteData(); break; case 40://由继电保护设备(或间隔单元)所中止的带标志的状态变位的传输的结束 m_DDStatus = 2; SendAsdu25(a31.m_FAN, 0x45, a31.m_TOV, a31.m_ACC);//0x45不成功的带标志的状态变位传输(否定) m_DistrubData.DeleteData(); break; default : break; }}bool C103Device::GetDingZhi(){ m_CmdInfo.m_SegmentPid = 0; m_CmdInfo.m_iSize = 0; for (int i=0; i<m_iCpuNum; i++) { it = m_CommParam.at(i); if (!ResetCU()) { SendMsgToMain(-1, "申请定值错误"); return false; } CString sztmp = ""; sztmp.sprintf("%d", (*it).CpuNo); QDomNode node, cnode; node = m_pxml->GetDomNode("body", "PARAMCONFIG", "cpuno", sztmp); if (node.isNull()) { SendMsgToMain(-1, "申请定值错误"); return false; } int ilen = m_pxml->GetChildNodeCount(node); CAsdu10 a10; for (int j=0; j<ilen; j++) { sztmp.sprintf("GROUPNO%d", j+1); cnode = m_pxml->GetChildNode(node, sztmp, "", ""); if (!m_pxml->GetNodeAttr(cnode, "value", sztmp)) continue; BYTE igroup = (BYTE)sztmp.toInt(); if (!GetGroupData(a10, igroup, 0, 1)) { ExplainGroupData(a10); SendMsgToMain(-1, "申请定值错误"); return false; } } ExplainGroupData(a10); } SendMsgToMain(1, "申请定值成功"); return true;}bool C103Device::GetSector(){ m_CmdInfo.m_SegmentPid = 0; m_CmdInfo.m_iSize = 0; for (int i=0; i<m_iCpuNum; i++) { it = m_CommParam.at(i); if (!ResetCU()) { SendMsgToMain(-1, "申请定值区号错误"); return false; } CString sztmp = ""; sztmp.sprintf("%d", (*it).CpuNo); QDomNode node, cnode; node = m_pxml->GetDomNode("body", "SECTORCONFIG", "cpuno", sztmp); if (node.isNull()) { SendMsgToMain(-1, "申请定值区号错误"); return false; } int ilen = m_pxml->GetChildNodeCount(node); CAsdu10 a10; for (int j=0; j<ilen; j++) { sztmp.sprintf("GROUPNO%d", j+1); cnode = m_pxml->GetChildNode(node, sztmp, "", ""); if (!m_pxml->GetNodeAttr(cnode, "value", sztmp)) continue; BYTE igroup = (BYTE)sztmp.toInt(); if (!GetGroupData(a10, igroup, 0, 1)) { ExplainGroupData(a10); SendMsgToMain(-1, "申请定值区号错误"); return false; } } ExplainGroupData(a10); } SendMsgToMain(1, "申请定值区号成功"); return true;}bool C103Device::GetAnalog(){ m_CmdInfo.m_SegmentPid = 0; m_CmdInfo.m_iSize = 0; for (int i=0; i<m_iCpuNum; i++) { it = m_CommParam.at(i); if (!ResetCU()) { SendMsgToMain(-1, "申请采样值错误"); return false; } CString sztmp = ""; sztmp.sprintf("%d", (*it).CpuNo); QDomNode node, cnode; node = m_pxml->GetDomNode("body", "ANALOGCONFIG", "cpuno", sztmp); if (node.isNull()) { SendMsgToMain(-1, "申请采样值错误"); return false; } int ilen = m_pxml->GetChildNodeCount(node); CAsdu10 a10; for (int j=0; j<ilen; j++) { sztmp.sprintf("GROUPNO%d", j+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -