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

📄 103device.cpp

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