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

📄 103function.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "103Function.h"// #include <qfile.h>// #include <qdatetime.h>#include <time.h>#include "baseclass/publicclass.h"#ifndef FALSE#define FALSE false#endif#ifndef TRUE#define TRUE true#endif#define _T//////////////////////////////////////////////////////////////////////// CModfiyDingzhi//////////////////////////////////////////////////////////////////////CModfiyDingzhi::CModfiyDingzhi(){    m_bGroup = 0x00;    m_bEntry = 0x00;    m_bType = 0x00;    m_bLen = 0x00;}//////////////////////////////////////////////////////////////////////// CDistrubData//////////////////////////////////////////////////////////////////////CDistrubData::CDistrubData(){    m_iNOE = 0;    m_iNOC = 0;    m_iFAN = 0;    m_iINT = 0;}CDistrubData::~CDistrubData(){}void CDistrubData::SaveACCInfo(BYTE* pData){    ACCInfo aData;    aData.ACC = pData[0];    aData.RPV = *(float*)(pData+1);    aData.RSV = *(float*)(pData+5);    aData.RFA = *(float*)(pData+9);    m_ACCInfo.Add(aData);}void CDistrubData::SaveACCInfo(BYTE ACC, float RPV, float RSV, float RFA){    ACCInfo aData;    aData.ACC = ACC;    aData.RPV = RPV;    aData.RSV = RSV;    aData.RFA = RFA;    m_ACCInfo.Add(aData);}void CDistrubData::SaveSwitchData(BYTE* pData){    m_SwitchDataNOT.Add(pData[0]);    SwitchData sData;    memset(sData.byte, 0x00, sizeof(SwitchData));    int index = 3;    WORD wtmp = 0;    memcpy(&wtmp, &pData[1], 2*sizeof(BYTE));    if ((wtmp == 0) && (m_SwitchDataNOT.GetSize() == 2))    {        m_SwitchDataNOT.RemoveAt(1);        m_SwitchDataNOT.SetAt(0, m_SwitchDataNOT.GetAt(0)+pData[0]);    }    for (int i=0; i<pData[0]; i++)    {        sData.data.TAP=wtmp;        memcpy(sData.byte+2, &pData[index], 3);        index += 3;        m_SwitchData.Add(sData);    }}void CDistrubData::SaveChannelData(BYTE* pData){    CChannelData *pcData;    WORD wtmp = 0;    int iACC = -1;    int step = 0;    BYTE btmp;    if (m_ChannelData.count() > 0)    {        pcData = m_ChannelData.at(m_ChannelData.count()-1);        iACC = pcData->m_ACC;    }	if (m_ChannelData.count()>0&&iACC == pData[0])    {        pcData = m_ChannelData.at(m_ChannelData.count()-1);        btmp = *(pData+1);		pcData->m_NDV.Add(btmp);#ifdef NR_WAVE_DEBUG		cout<<"pcData->m_NDV.add(btmp);btmp="<<(int)btmp<<endl;#endif        wtmp = *(WORD *)(pData+2);        pcData->m_NFE.Add(wtmp);#ifdef NR_WAVE_DEBUG		cout<<"pcData->m_NFE.add(wtmp);wtmp="<<(int)wtmp<<endl;#endif        step = 0;        int iNDV = pcData->m_NDV.GetAt(pcData->m_NDV.GetSize()-1);        for (int i=0; i<iNDV; i++)        {            wtmp = *(WORD *)(pData+4+step);            step += 2;            pcData->m_SDV.Add(wtmp);        }    }    else    {        pcData = new CChannelData;        pcData->m_ACC = pData[0];        btmp = *(pData+1);        pcData->m_NDV.Add(btmp);        wtmp = *(WORD *)(pData+2);        pcData->m_NFE.Add(wtmp);        step = 0;        for (int i=0; i<pcData->m_NDV[0]; i++)        {            wtmp = *(WORD *)(pData+4+step);            step += 2;            pcData->m_SDV.Add(wtmp);        }        m_ChannelData.append(pcData);    }}CString CDistrubData::CreateWaveFile(int iCpuNo, CString szFilePath){    CString strtmp = "";    strtmp.sprintf("%s%04d%02d%02d%02d%02d%05d-%d", szFilePath.data(),                   m_FaultDataTime.Time.Years+2000, m_FaultDataTime.Time.Months,                   m_FaultDataTime.Time.DaysOfMonth, m_FaultDataTime.Time.Hours,                   m_FaultDataTime.Time.Minutes, m_FaultDataTime.Time.Milliseconds, m_iFAN);    if (!SortData())    {    	printf("can not create SortData\n");        DeleteData();        return "";    }    if (CreateDATFile(strtmp))    {        CreateCFGFile(iCpuNo, strtmp);        CreateHDRFile(strtmp);    }    else    {    	printf("can not create Dat File\n");        strtmp = "";    }    DeleteData();    return strtmp;}void CDistrubData::CreateCFGFile(int iCpuNo, CString szFileName){    szFileName += ".cfg";    CString strtmp = "";    QFile fFile(szFileName);    if (!fFile.open(IO_WriteOnly))        return;    QTextStream ts(&fFile);    strtmp.sprintf("%sCPU%d,%d\r\n", m_szDeviceName.data(), iCpuNo, m_iDeviceNo);    ts<<strtmp;    m_iAnalogSum = m_ACCInfo.GetSize();    m_iSwitchSum = m_SwitchDataNOT.GetAt(0);    strtmp.sprintf("%d,%dA,%dD\r\n", m_iAnalogSum+m_iSwitchSum, m_iAnalogSum, m_iSwitchSum);    ts<<strtmp;    CString szDesc1 = "", szDesc2 = "", sztmp = "", szfun = "", szinf = "";    float fFactor = 0.0;    ACCInfo aData;    int i = 0;    sztmp.sprintf("%d", iCpuNo);    QDomNode node, cnode;    node = m_pXml->GetDomNodex(QString("body"), "WAVEANALOG", "cpuno", sztmp.data(),NULL,NULL);    if (node.isNull())    {        printf("CDistrubData::CreateCFGFile\n\tcan not get <WAVEANALOG/> with cpu %s\n",sztmp.data());        return;    }    for (i=1; i<=m_iAnalogSum; i++)    {        aData = m_ACCInfo.GetAt(i-1);        fFactor = 1/aData.RFA;        sztmp.sprintf("%d", aData.ACC);        cnode = m_pXml->GetChildNode(node, "ELEMENT", "no", sztmp.data(),NULL,NULL);        if (!m_pXml->GetNodeAttr(cnode, "value1", szDesc1))            return;        if (!m_pXml->GetNodeAttr(cnode, "value2", szDesc2))            return;        strtmp.sprintf("%d,", i);        strtmp += m_szLineName;        strtmp += " ";        strtmp += szDesc1;        CString szfactor = "";        szfactor.sprintf("%g", fFactor);        strtmp += szfactor;        strtmp += szDesc2;        strtmp += "\r\n";        strtmp = strtmp;        ts<<strtmp;    }    SwitchData sData;    sztmp.sprintf("%d", iCpuNo);    node = m_pXml->GetDomNodex(QString("body"), "WAVESWITCH", "cpuno", sztmp.data(),NULL,NULL);    if (node.isNull())    {        printf("CDistrubData::CreateCFGFile\n\tcan not get <WAVESWITCH/> with cpu %s\n",sztmp.data());        return;    }    for (i=1; i<=m_iSwitchSum; i++)    {        sData = m_SwitchData.GetAt(i-1);        szinf.sprintf("%d", sData.data.INF);        cnode = m_pXml->GetChildNode(node, "ELEMENT", "pinf", szinf.data(),NULL,NULL);        if (cnode.isNull())        {            szDesc1.sprintf("NOTFIND INF:%d", sData.data.INF);            szDesc2 = "1";        }        else        {            if (!m_pXml->GetNodeAttr(cnode, "desc", szDesc1))            {                printf("CDistrubData::CreateCFGFile\n\tcan not get desc of WAVESWITCH %d \n",i);                return;            }            if (!m_pXml->GetNodeAttr(cnode, "level", szDesc2))            {                printf("CDistrubData::CreateCFGFile\n\tcan not get level of WAVESWITCH %d \n",i);                return;            }        }        strtmp.sprintf("%d,", m_iAnalogSum+i);        strtmp += m_szLineName;        strtmp += " ";        strtmp += szDesc1;        strtmp += ",";        strtmp += szDesc2;        strtmp += "\r\n";        strtmp = strtmp;        ts<<strtmp;    }    strtmp.sprintf("50\r\n");    ts<<strtmp;    strtmp.sprintf("1\r\n");    ts<<strtmp;    strtmp.sprintf("%d,%d\r\n", 1000000/m_iINT, m_iNOE);    ts<<strtmp;    strtmp.sprintf("%02d/%02d/%d,%02d:%02d:%02d.%03d\r\n", m_FaultDataTime.Time.Months,                   m_FaultDataTime.Time.DaysOfMonth, m_FaultDataTime.Time.Years,                   m_FaultDataTime.Time.Hours, m_FaultDataTime.Time.Minutes,                   m_FaultDataTime.Time.Milliseconds/1000,                   m_FaultDataTime.Time.Milliseconds%1000);    ts<<strtmp;    strtmp.sprintf("%02d/%02d/%d,%02d:%02d:%02d.%03d\r\n", m_FaultStartTime.Time.Months,                   m_FaultStartTime.Time.DaysOfMonth, m_FaultStartTime.Time.Years,                   m_FaultStartTime.Time.Hours, m_FaultStartTime.Time.Minutes,                   m_FaultStartTime.Time.Milliseconds/1000,                   m_FaultStartTime.Time.Milliseconds%1000);    ts<<strtmp;    strtmp.sprintf("BINARY\r\n");    ts<<strtmp;    fFile.close();}BOOL CDistrubData::CreateDATFile(CString szFileName){    szFileName += ".dat";    CString strtmp = "";    QFile fFile(szFileName);    int index = 1;    int iInt = 0;    CChannelData *pcData;    SwitchData sData;    int i = 0, j = 0, k = 0;    if (m_SwitchDataNOT.GetSize() == 0)    {    	printf("m_SwitchDataNOT.GetSize() == 0\n");        return FALSE;    }	int iSwitchPoint = 0;//数字通道长度	int nLen = 0;//每个采样点总长    if (m_SwitchDataNOT.GetAt(0)%16 > 0)        iSwitchPoint = m_SwitchDataNOT.GetAt(0)/16+1;    else        iSwitchPoint = m_SwitchDataNOT.GetAt(0)/16;	nLen = /*sizeof(int)*2/sizeof(WORD)=4*/4+m_iNOC+iSwitchPoint;    WORD *pData = new WORD[m_iNOE*nLen];    memset(pData, 0x00, m_iNOE*nLen*2);    WORD tmp = 0;    pcData = m_ChannelData.at(0);    if (m_iNOE > pcData->m_SDV.GetSize())    {        m_iNOE = pcData->m_SDV.GetSize();    }    for (i=0; i<m_iNOE; i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -