📄 103device.cpp
字号:
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); 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::GetSwitch(){ m_SwitchValue.SetSize(0); for (int i=0; i<m_iCpuNum; i++) { it = m_CommParam.at(i); if (!ResetCU()) { SendMsgToMain(-1, "申请开关量错误"); return false; } m_bSwitch = true; if (!GI()) { SendMsgToMain(-1, "申请开关量错误"); } int iErrors = 0, itimes = 0; while (!m_bGIFinished) { if (!m_bHaveL1UserData)//如果没有一级用户数据,要先申请二级用户数据 { while (!m_bHaveL1UserData) { if (!RequestL2UserData()) { FlibFCB(); if (iErrors++ > 3) { SendMsgToMain(-1, "申请开关量错误"); return false; } } else { iErrors = 0; if (itimes++ > 50) { SendMsgToMain(-1, "申请开关量错误"); return false; } } } } else { if (RequestL1UserData()) { iErrors = 0; itimes = 0; if (m_ReceData.GetSize() > 0) ProcessData(); } else { FlibFCB(); if (iErrors++ > 3) { SendMsgToMain(-1, "申请开关量错误"); return false; } } } } } st_switchvalue* pSwitchValue = new st_switchvalue[m_SwitchValue.GetSize()]; memset(pSwitchValue, 0x00, sizeof(st_switchvalue)); for (int i=0; i<m_SwitchValue.GetSize(); i++) { memcpy(&pSwitchValue[i], &m_SwitchValue[i], sizeof(st_switchvalue)); } CDataNode* pNode = new CDataNode(); memcpy(&pNode->m_nodeinfo, &m_CmdInfo, sizeof(st_nodeinfo)); pNode->m_nodeinfo.mtype = m_CmdInfo.requestid; pNode->m_nodeinfo.requestid = m_CmdInfo.mtype; pNode->m_nodeinfo.m_iResult = 1; pNode->m_nodeinfo.m_SegmentPid = (long)pSwitchValue; pNode->m_nodeinfo.m_iSize = sizeof(st_switchvalue)*m_SwitchValue.GetSize(); pNode->m_nodeinfo.m_DataType = DATA_REQUESTSWITCHVALUE; g_PublicClass.m_NodeManage.AddSendDataNode((void*)pNode); m_bSwitch = false; SendMsgToMain(1, "申请开关量成功"); return true;}bool C103Device::GetYaBan(){ 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", "RYABANCONFIG", "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::CheckTime(){ it = m_CommParam.at(0); int itmpsendaddr = (*it).SendAddress; (*it).SendAddress = 0xff; QDateTime nowDateTime = QDateTime::currentDateTime(); QDate nowDate = nowDateTime.date(); QTime nowTime = nowDateTime.time(); CAsdu06 a6; memset(a6.m_Cp56Time2a.byte, 0x00, 7*sizeof(BYTE)); a6.m_Cp56Time2a.Time.Years = nowDate.year()-2000; a6.m_Cp56Time2a.Time.Months = nowDate.month(); a6.m_Cp56Time2a.Time.DaysOfMonth = nowDate.day();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -