📄 103device.cpp
字号:
case 0x1E://asdu30 ProcessAsdu30(); break; case 0x1F://asdu31 ProcessAsdu31(); break; default : m_ReceData.SetSize(0); break; }}void C103Device::ProcessAsdu1(){ CAsdu01 a1; a1.SaveAsdu(m_ReceData); a1.ExplainAsdu(); if (a1.m_COT == 9)//申请开关量的数据 { CString sztmp = "", szfun = "", szinf = ""; sztmp.sprintf("%d", (*it).CpuNo); szfun.sprintf("%d", a1.m_FUN); szinf.sprintf("%d", a1.m_INF); QDomNode node, cnode; node = m_pxml->GetDomNode("body", "SWITCH", "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_switchvalue SwitchValue; memset(&SwitchValue, 0x00, sizeof(st_switchvalue)); SwitchValue.m_StationNo = g_PublicClass.m_StationNo; SwitchValue.m_MachineNo = m_DevInfo.m_EquipNo; SwitchValue.m_CpuNo = icpuno; SwitchValue.m_FunCode = ifun; SwitchValue.m_EventCode = iinf; SwitchValue.m_GroupNo = igroup; SwitchValue.m_Entry = ientry; SwitchValue.m_State = a1.m_Dpi.dpi.dpi; if (SwitchValue.m_State == 1) strcpy(SwitchValue.m_Value, m_szSDpi1); else strcpy(SwitchValue.m_Value, m_szSDpi2); m_SwitchValue.Add(SwitchValue); } else if (a1.m_COT == 1) { CString sztmp = "", szfun = "", szinf = "", szDate = ""; sztmp.sprintf("%d", (*it).CpuNo); szfun.sprintf("%d", a1.m_FUN); szinf.sprintf("%d", a1.m_INF); QDomNode node, cnode; int ifun = 0, iinf = 0, ientry = 0, igroup = 0, icpuno = 0; CDataNode* pNode = NULL; QDate date = QDate::currentDate(); st_event* pRpt_Event = NULL; st_eventact* pEventAct = NULL; node = m_pxml->GetDomNode("body", "ALERT", "pcpuno", sztmp); if (node.isNull()) goto fault; if (!m_pxml->GetNodeAttr(node, "group", sztmp)) return; igroup = sztmp.toInt(); if (!m_pxml->GetNodeAttr(node, "cpuno", sztmp)) return; 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; pRpt_Event = new st_event; memset(pRpt_Event, 0x00, sizeof(st_event)); pEventAct = new st_eventact; memset(pEventAct, 0x00, sizeof(st_eventact)); pRpt_Event->m_StationNo = g_PublicClass.m_StationNo; pRpt_Event->m_MachineNo = m_DevInfo.m_EquipNo; pRpt_Event->m_CpuNo = icpuno; pRpt_Event->m_Entry = 0; pRpt_Event->m_FaultNum = ++m_iFaultNo; strcpy(pRpt_Event->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_Event->m_ActionTime, szDate.data(), szDate.length()); pEventAct->m_MachineNo = m_DevInfo.m_EquipNo; pEventAct->m_CpuNo = icpuno; pEventAct->m_FaultNum = m_iFaultNo; pEventAct->m_ActNo = 0; pEventAct->m_ActTime = 0; pEventAct->m_Dpi = a1.m_Dpi.dpi.dpi; if (a1.m_Dpi.dpi.dpi == 1) sztmp += m_szDpi1; else sztmp += m_szDpi2; memcpy(pEventAct->m_ActElement, sztmp.data(), sztmp.length()); pEventAct->m_FunCode = ifun; pEventAct->m_EventCode = iinf; pEventAct->m_GroupNo = igroup; pEventAct->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_Event; pNode->m_nodeinfo.m_iSize = sizeof(st_event); pNode->m_nodeinfo.m_DataType = DATA_EVENT; 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)pEventAct; pNode->m_nodeinfo.m_iSize = sizeof(st_eventact); pNode->m_nodeinfo.m_DataType = DATA_EVENTACT; 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_EVENTOVER; 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(); return;fault://某些103保护也用ASDU1送故障信息,如国电南自PSL系列串口通信保护 node = m_pxml->GetDomNode("body", "FAULT", "pcpuno", sztmp); if (node.isNull()) goto fault; if (!m_pxml->GetNodeAttr(node, "group", sztmp)) return; igroup = sztmp.toInt(); if (!m_pxml->GetNodeAttr(node, "cpuno", sztmp)) return; 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -