📄 103function.cpp
字号:
{ memcpy(&pData[i*nLen], &index, 4);//采样点序号 for (j=0; j<m_iNOC; j++)//处理所有通道的第i个采样点 { if (j < (int)m_ChannelData.count()) { pcData = m_ChannelData.at(j); if (i < pcData->m_SDV.GetSize()) { tmp = pcData->m_SDV[i]; memcpy(&pData[i*nLen+4+j], &tmp, 2); } else { printf("i >= pcData->m_SDV.GetSize()\n"); delete [] pData; fFile.close(); return FALSE; } } else { printf("j >= (int)m_ChannelData.count()\n"); delete [] pData; fFile.close(); return FALSE; } } index++; } pcData = m_ChannelData.at(0); j = 0; index = 0; int* iTimeArray = new int[m_iNOE]; memset(iTimeArray, 0xFFFFFFFF, m_iNOE);//comtrade标准:逸失的采样点的时间戳为0XFFFFFFFF for (i=0; i<m_iNOE; i++) { iInt = index*m_iINT;#ifdef NR_WAVE_DEBUG cout<<"index="<<index<<"\tm_iINT="<<m_iINT; cout<<"\tiInt="<<iInt<<endl;#endif memcpy(&iTimeArray[i], &iInt, 4);//采样点的相对时间 if ((pcData->m_NDV[j]+k) < i+1)//采样点逸失处理 {#ifdef NR_WAVE_DEBUG cout<<"pcData->m_NDV[j]+k) < i+1"<<endl; cout<<"pcData->m_NDV[j]="<<pcData->m_NDV[j]; cout<<"\tk="<<k<<"\ti+1="<<i+1<<endl;#endif if (j < pcData->m_NDV.GetSize()) { k += pcData->m_NDV[j]; j++; index = pcData->m_NFE[j]+1; } continue; } index++; }/* pcData = m_ChannelData.at(0); j = 0; index = 0; k = 0; for (i=0; i<m_iNOE; i++) { iInt = index; memcpy(&pData[i*nLen+2], &iInt, 4);//采样点的相对时间 if ((pcData->m_NDV[j]+k) < i+1) { if (j < pcData->m_NDV.GetSize()) { k += pcData->m_NDV[j]; j++; index = pcData->m_NFE[j]+1; } continue; } index++; }*/ WORD *wSwitchPoint = new WORD[iSwitchPoint*m_iNOE]; memset(wSwitchPoint, 0x00, (2*iSwitchPoint*m_iNOE)); WORD wtmp = 0; index = 0; for(j=0; j<m_SwitchDataNOT.GetAt(0); j++,index++)//给开关量赋初始状态值 { if (index <= m_SwitchData.GetSize()) { sData = m_SwitchData.GetAt(index); wtmp = sData.data.DPI-1; } wtmp = wtmp << (j%16); wSwitchPoint[j/16] = wSwitchPoint[j/16]|wtmp; } for (i=0; i<m_iNOE; i++)//把所有采样点的开关的值赋为初始值 { memcpy(&wSwitchPoint[i*iSwitchPoint], &wSwitchPoint[0], 2*iSwitchPoint); } WORD wtmp1 = 0; int inf = 0; for (i=1; i<m_SwitchDataNOT.GetSize(); i++)//把所有的开关变位赋值 { for (j=0; j<m_SwitchDataNOT.GetAt(i); j++) { sData = m_SwitchData.GetAt(index++); wtmp = sData.data.TAP; for (k=0; k<m_iNOE; k++) { memcpy(&wtmp1, &pData[k*nLen+2], 2); if (wtmp1 == wtmp) break; } inf = FindSwitch(sData); if (inf != 0) { memcpy(&wtmp, &wSwitchPoint[k*iSwitchPoint+(inf-1)/16], 2); wtmp = ChangeSwitch(wtmp, (inf-1)%16, sData.data.DPI); for (int a=k; a<m_iNOE; a++) { memcpy(&wSwitchPoint[a*iSwitchPoint+(inf-1)/16], &wtmp, 2); } } } } for (i=0; i<m_iNOE; i++) { memcpy(&pData[i*nLen+4+m_iNOC], &wSwitchPoint[i*iSwitchPoint], 2*iSwitchPoint); } for (i=0; i<m_iNOE; i++) { memcpy(&pData[i*nLen+2], &iTimeArray[i], 4);//重新置采样时间,采样点的相对时间 } if (!fFile.open(IO_WriteOnly)) { delete [] iTimeArray; delete [] wSwitchPoint; delete [] pData; printf("canot Ceate empty dat file\n"); return FALSE; } fFile.writeBlock((unsigned char*)pData, m_iNOE*nLen*sizeof(WORD)); fFile.close(); delete [] iTimeArray; delete [] wSwitchPoint; delete [] pData; return TRUE;}void CDistrubData::CreateHDRFile(CString szFileName){ CString strtmp = "", sztmp = ""; QFile fFile(szFileName+".hdr"); if (!fFile.open(IO_WriteOnly)) return; QTextStream ts(&fFile); strtmp = _T("南京银山网络:故障信息系统分析报告\r\n"); ts<<strtmp; strtmp = _T("接入线路名称:"+m_szLineName+"\r\n"); ts<<strtmp; strtmp = _T("接入设备名称:"+m_szDeviceName+"\r\n"); ts<<strtmp; strtmp = _T("接入设备型号:"+m_szMachineType+"\r\n"); ts<<strtmp; strtmp = szFileName.right(szFileName.length()-szFileName.findRev('/')-1); strtmp = strtmp.left(strtmp.find('-')); sztmp = _T("故障发生时间:"+strtmp+"\r\n"); ts<<sztmp; strtmp = "\r\n"; ts<<strtmp; strtmp = _T("录波分析结束!\r\n"); ts<<strtmp; strtmp = _T("南京银山电子有限公司!\r\n"); ts<<strtmp; fFile.close();}void CDistrubData::DeleteData(){ int iSize = m_ChannelData.count(); CChannelData *pcData; for (int i=0; i<iSize; i++) { pcData = m_ChannelData.at(i); if (pcData) { if (pcData->m_NDV.GetSize() > 0) pcData->m_NDV.RemoveAll(); if (pcData->m_NFE.GetSize() > 0) pcData->m_NFE.RemoveAll(); if (pcData->m_SDV.GetSize() > 0) pcData->m_SDV.RemoveAll(); delete pcData; } } m_ACCInfo.RemoveAll(); m_ChannelData.clear(); m_SwitchDataNOT.RemoveAll(); m_SwitchData.RemoveAll();}WORD CDistrubData::ChangeSwitch(WORD oldData, int no, int value){ WORD wtmp = 0; WORD newData = 0; for (int i=0; i<16; i++) { if (i != no) wtmp = (oldData >> i) & 0x0001; else wtmp = value-1; wtmp = wtmp << i; newData = newData | wtmp; } return newData;}int CDistrubData::FindSwitch(SwitchData sData){ SwitchData tData; int iSize = m_SwitchDataSort.GetSize(); for (int i=0; i<iSize; i++) { tData = m_SwitchDataSort.GetAt(i); if ((sData.data.FUN == tData.data.FUN) && (sData.data.INF == tData.data.INF)) return tData.data.TAP; } return 0;}BOOL CDistrubData::SortData(){ CChannelData *pcData; ACCInfo AccInfo; int iSize = m_ChannelData.count(); if (iSize == 0) return FALSE; int *pAcc = new int[iSize]; memset(pAcc, 0x00, iSize*sizeof(int)); int iTemp = 0, j = 0, k = 0, i = 0; for (i=0; i<iSize; i++) { pcData = m_ChannelData.at(i); pAcc[i] = pcData->m_ACC; } for (i=0; i<iSize; i++) { iTemp = pAcc[i]; k = i; for (j=i; j<iSize; j++) { if (iTemp > pAcc[j]) { iTemp = pAcc[j]; k = j; } } pAcc[k] = pAcc[i]; pAcc[i] = iTemp; pcData = m_ChannelData.at(k); AccInfo = m_ACCInfo.GetAt(k); m_ChannelData.replace(k, m_ChannelData.at(i)); m_ChannelData.replace(i, pcData); m_ACCInfo.SetAt(k, m_ACCInfo.GetAt(i)); m_ACCInfo.SetAt(i, AccInfo); } delete [] pAcc; if (m_SwitchDataNOT.GetSize() == 0) return FALSE; iSize = m_SwitchDataNOT.GetAt(0); if (iSize > m_SwitchData.GetSize()) return FALSE;//如果开关变位的个数少于初始的状态变位的个数,则数据有问题 SwitchData sData1, sData2; k = 0; int itime = 0; for (i=0; i<iSize; i++) { itime = 0; sData1 = m_SwitchData.GetAt(i); iTemp = sData1.data.FUN*255+sData1.data.INF; for (j=i; j<iSize; j++) { sData2 = m_SwitchData.GetAt(j); if (iTemp > sData2.data.FUN*255+sData2.data.INF) { iTemp = sData2.data.FUN*255+sData2.data.INF; k = j; itime++; } } if (itime > 0) { sData2 = m_SwitchData.GetAt(k); m_SwitchData.SetAt(i, sData2); m_SwitchData.SetAt(k, sData1); } } for (i=0; i<iSize; i++) { sData1 = m_SwitchData.GetAt(i); sData1.data.TAP = i+1; m_SwitchDataSort.Add(sData1); } return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -