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

📄 103device.cpp

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