// TestingData.cpp: implementation of the CTestingData class. // ////////////////////////////////////////////////////////////////////// #include "geomative.h" #include "TestingData.h" #include "AppDataCEIpCurveDlg.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif extern int g_iUILanguage; extern int g_iLanguage; extern UINT32 g_ui32PageCount; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// extern HHOOK hHook; extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam); extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter); extern void get_fit_equation(double x[],double y[],int n,double a[],int m,double dt[]); extern void get_integral_area(double x1, double x2, double a[],int m,double &dRes); extern double get_fit_equation_value(double x, double a[], int m); CTestingData::CTestingData(DWORD dwID, _ConnectionPtr& pConnection) { m_pConnection = pConnection; m_dwID = dwID; m_pDevice = NULL; m_szTdName.Empty(); m_szTdCN.Empty(); m_szTLocation.Empty(); m_szPrCN.Empty(); m_szTzName.Empty(); m_szTzCN.Empty(); m_dwTzID = (DWORD)VAL_ZERO; m_dwSCID = (DWORD)VAL_ZERO; m_szSCCN.Empty(); m_szSName.Empty(); m_iSType = (int)VAL_ZERO; m_iTType = (int)VAL_ZERO; m_iTMode = (int)VAL_ZERO; m_iEAmount = (int)VAL_ZERO; m_iTPAmount = (int)VAL_ZERO; m_iCHAmount = (int)VAL_ZERO; m_iN = (int)VAL_ZERO; m_iTRWave = (int)VAL_ZERO; m_iTRFrequency = (int)VAL_ZERO; m_iIFrequency = (int)VAL_ZERO; m_iSAFrequency = (int)VAL_ZERO; m_iCLayout = (int)VAL_ZERO; m_fESpace = (float)VAL_ZERO; // m_szEDistance = (int)VAL_ZERO; m_szEDistance.Empty(); m_iWeather = (int)VAL_ZERO; m_iWDIR = (int)VAL_ZERO; m_fTemperature = (float)VAL_ZERO; m_fHeight = (float)VAL_ZERO; m_fHumidity = (float)VAL_ZERO; m_fTRPeriod = (float)VAL_ZERO; m_szCDate.Empty(); m_szCTime.Empty(); m_szTDate.Empty(); m_szTTime.Empty(); m_iRCamount = (int)VAL_ZERO; m_iRDirection = (int)VAL_ZERO; m_iCRtime = (int)VAL_ZERO; m_szPM.Empty(); m_szOP.Empty(); m_szQA.Empty(); m_waveCount = NULL; } CTestingData::~CTestingData() { } // bool CTestingData::ShowDetailInfo(CListCtrl &tdDetailList) // { // return true; // } bool CTestingData::ShowConList(CListCtrl &tdConList) { return true; } bool CTestingData::ShowConListByPage(CListCtrl &tdConList, int iSType) { _RecordsetPtr pRecConList = NULL; CString szSql; int iIndex = (int)VAL_ZERO; pRecConList.CreateInstance(_uuidof(Recordset)); if (g_ui32PageCount < 1) { return true; } if (VAL_ZERO == tdConList.GetItemCount()) { return true; } /*if (VAL_ZERO != tdConList.GetItemCount()) { tdConList.DeleteAllItems(); }*/ if (1 == iSType) { szSql.Empty(); szSql.Format(_T("select TSN,a,b,x,y,N,K,I,V,R0,SP,bUse from td1dcon where TCHID in (select ID from tdchannel where TDID = %u and TSN>%u and TSN<=%u order by TCHID) order by TSN"), m_dwID, g_ui32PageCount*ONE_PAGE_DATA_NUMBER, (g_ui32PageCount + 1)*ONE_PAGE_DATA_NUMBER); OutputDebugString(szSql + _T("\n")); try { pRecConList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTHookProc, AfxGetInstanceHandle(), NULL); AfxMessageBox((LPCTSTR)e.Description()); } CString strDBVal = _T(""); float fV = 0, fI = 0, fR = 0; while ((short)VAL_ZERO == pRecConList->adoEOF) { if (pRecConList->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { tdConList.InsertItem(iIndex, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("a"))); tdConList.SetItemText(iIndex, 1, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("b"))); tdConList.SetItemText(iIndex, 2, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("x"))); tdConList.SetItemText(iIndex, 3, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("y"))); tdConList.SetItemText(iIndex, 4, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("N"))); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("K")).fltVal); tdConList.SetItemText(iIndex, 5, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("I")).fltVal); tdConList.SetItemText(iIndex, 6, strDBVal); fI = (float)pRecConList->GetCollect(_T("I")).fltVal; strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("V")).fltVal); tdConList.SetItemText(iIndex, 7, strDBVal); fV = (float)pRecConList->GetCollect(_T("V")).fltVal; //添加R fR = (0 == fI) ? 0 : fV / fI; strDBVal.Empty(); strDBVal.Format(_T("%f"), fR); tdConList.SetItemText(iIndex, 8, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("R0")).fltVal); tdConList.SetItemText(iIndex, 9, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("SP")).fltVal); tdConList.SetItemText(iIndex, 10, strDBVal); tdConList.SetItemData(iIndex, (int)pRecConList->GetCollect(_T("TSN")).lVal); iIndex++; } pRecConList->MoveNext(); } pRecConList->Close(); return true; } szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse from td%ddcon where TCHID in (select ID from tdchannel where TDID = %u order by TCHID) and TSN>%u and TSN<=%u order by TSN"), iSType, m_dwID, g_ui32PageCount*ONE_PAGE_DATA_NUMBER, (g_ui32PageCount + 1)*ONE_PAGE_DATA_NUMBER); OutputDebugString(szSql + _T("\n")); try { pRecConList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTHookProc, AfxGetInstanceHandle(), NULL); AfxMessageBox((LPCTSTR)e.Description()); } try { CString strDBVal = _T(""); float fV = 0, fI = 0, fR = 0; while ((short)VAL_ZERO == pRecConList->adoEOF) { if (pRecConList->GetCollect(_T("bUse")).boolVal != 0)//0为access数据库中的false { tdConList.InsertItem(iIndex, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("C1"))); tdConList.SetItemText(iIndex, 1, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("C2"))); tdConList.SetItemText(iIndex, 2, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("P1"))); tdConList.SetItemText(iIndex, 3, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("P2"))); tdConList.SetItemText(iIndex, 4, (LPCTSTR)(_bstr_t)pRecConList->GetCollect(_T("N"))); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("K")).fltVal); tdConList.SetItemText(iIndex, 5, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("I")).fltVal); tdConList.SetItemText(iIndex, 6, strDBVal); fI = (float)pRecConList->GetCollect(_T("I")).fltVal; strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("V")).fltVal); tdConList.SetItemText(iIndex, 7, strDBVal); fV = (float)pRecConList->GetCollect(_T("V")).fltVal; //添加R fR = (0 == fI) ? 0 : fV / fI; strDBVal.Empty(); strDBVal.Format(_T("%f"), fR); tdConList.SetItemText(iIndex, 8, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("R0")).fltVal); tdConList.SetItemText(iIndex, 9, strDBVal); strDBVal.Empty(); strDBVal.Format(_T("%f"), (float)pRecConList->GetCollect(_T("SP")).fltVal); tdConList.SetItemText(iIndex, 10, strDBVal); tdConList.SetItemData(iIndex, (int)pRecConList->GetCollect(_T("TSN")).lVal); iIndex++; } pRecConList->MoveNext(); } } catch (_com_error e) { AfxMessageBox(e.Description()); } pRecConList->Close(); return true; } bool CTestingData::ShowGrList(CListCtrl &tdGrList) { return true; } //BOOL CTestingData::SaveTdToExcelFile() //{ // return TRUE; //} BOOL CTestingData::LoadData(CLinkList& m_medLinkList) { return TRUE; } BOOL CTestingData::SaveTdToExcelFile(CString f_szFileName) { return TRUE; } BOOL CTestingData::SaveTdToCsvFile(CString f_szFileName) { return TRUE; } BOOL CTestingData::SaveTdToRes2DFile(CString f_szFileName) { return TRUE; } BOOL CTestingData::SaveOrgDataToDB(DWORD dwTdID) { _RecordsetPtr pRecTdCon = NULL; _RecordsetPtr pRecChID = NULL; _CommandPtr pCmdUpd = NULL; CString szSql = _T(""); CString szTsn = _T(""); CString szVRawData = _T(""); CString szIRawData = _T(""); CString szFileName = _T(""); CString szHostFile = _T(""); CString szLocFile = _T(""); CString szLocFilePath = _T(""); CString szNodeName = _T(""); DWORD aChID[8] = {0}; int iIndex = (int)VAL_ZERO; int iTsn = (int)VAL_ZERO; int iChNum = (int)VAL_ZERO; ///////////////////////////////////////////////////////////////////////////////////////////// szLocFilePath.Empty(); szLocFilePath.GetBufferSetLength(256); ::GetCurrentDirectory(szLocFilePath.GetLength(), szLocFilePath.GetBuffer(szLocFilePath.GetLength())); szLocFilePath.ReleaseBuffer(); szLocFilePath = szLocFilePath + _T("\\CACHE\\projects\\"); szLocFilePath += this->m_szPrCN + "\\" + this->m_szTzCN + "\\"; szFileName.Empty(); szFileName = this->m_szTdCN + _T(".org"); szHostFile = _T("/SD/projects/") + this->m_szPrCN + _T("/") + this->m_szTzCN + _T("/") + szFileName; szLocFile = szLocFilePath + szFileName; DeleteFile(szLocFile); if (TRUE != this->m_pDevice->ReceiveFile(szLocFilePath, szHostFile)) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("获取ORG文件失败")); else MessageBoxEx(NULL, _T("Get ORG file failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return FALSE; } ///////////////////////////////////////////////////////////////////////////////////////////// pRecTdCon.CreateInstance(_uuidof(Recordset)); pRecChID.CreateInstance(_uuidof(Recordset)); pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = m_pConnection; szSql.Empty(); szSql.Format(_T("select ID from tdchannel where TDID = %u"), dwTdID); pRecChID->Open(szSql.AllocSysString(),_variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); iIndex = (int)VAL_ZERO; while ((short)VAL_ZERO == pRecChID->adoEOF) { aChID[iIndex] = pRecChID->GetCollect(_T("ID")).ulVal; iIndex++; pRecChID->MoveNext(); } pRecChID->Close(); CMarkup *pXML = new CMarkup; pXML->Load(szLocFile); pXML->FindElem(_T("Origin")); szSql.Empty(); szSql.Format(_T("select TSN from td1dcon where TCHID = %u order by TSN"), aChID[0]); pRecTdCon->Open(szSql.AllocSysString(),_variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecTdCon->adoEOF) { iTsn = (int)pRecTdCon->GetCollect(_T("TSN")).lVal; if (iTsn <= 9999) { szNodeName.Format(_T("D%.4d"), iTsn); } else { szNodeName.Format(_T("D%d"), iTsn); } if (pXML->FindChildElem(szNodeName)) { pXML->IntoElem(); pXML->FindChildElem(_T("V")); szVRawData.Empty(); szVRawData = pXML->GetChildData(); pXML->FindChildElem(_T("I")); szIRawData.Empty(); szIRawData = pXML->GetChildData(); pXML->OutOfElem(); if ((szVRawData.GetLength() != (int)VAL_ZERO) && (szIRawData.GetLength() != (int)VAL_ZERO)) { szSql.Empty(); szSql.Format(_T("update td1dcon set Vrawdata = ?, Irawdata = ? where TCHID = %u and TSN = %d"), aChID[0], iTsn); pCmdUpd->CommandType =adCmdText; pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Parameters->Append(pCmdUpd->CreateParameter("Vrawdata", adBSTR, adParamInput, szSql.GetLength(), _variant_t(szVRawData.AllocSysString()))); pCmdUpd->Parameters->Append(pCmdUpd->CreateParameter("Irawdata", adBSTR, adParamInput, szSql.GetLength(), _variant_t(szIRawData.AllocSysString()))); pCmdUpd->Execute(NULL, NULL, adCmdText); if (pCmdUpd->Parameters->GetCount() != VAL_ZERO) { pCmdUpd->Parameters->Delete(_variant_t("Vrawdata")); pCmdUpd->Parameters->Delete(_variant_t("Irawdata")); } } } pRecTdCon->MoveNext(); } pRecTdCon->Close(); delete pXML; return TRUE; } BOOL CTestingData::SaveGRDataToDB(DWORD dwTdID) { CString szSql = _T(""); _CommandPtr pCmdIns = NULL; pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = m_pConnection; szSql.Empty(); szSql.Format(_T("insert into gr(TDID,Ecode,Mdate,Mtime,OMvalue,StatusCode,OM1value,StatusCode1) select %u,Ecode,Mdate,Mtime,OMvalue,") _T(" StatusCode,OM1value,StatusCode1 from devgr where DEID = %u"), this->m_dwID, this->m_pDevice->m_dwID); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); return TRUE; } BOOL CTestingData::SaveTdToRes3DFile(CString f_szFileName) { return TRUE; } BOOL CTestingData::DisplayIpCurveGraph() { CAppDataCEIpCurveDlg *pDataView = new CAppDataCEIpCurveDlg(this); pDataView->DoModal(); delete pDataView; return TRUE; } BOOL CTestingData::SaveTdToResCEFile(CString f_szFileName) { return TRUE; } bool CTestingData::CalculateTWInfo(CStringArray *v_orgData, int nFrenquence) { double dXDataArray[50], dYDataArray[50], dCoefficient1[50], dCoefficient2[50],dDtInfo1[20],dDtInfo2[20]; memset(dXDataArray, 0, sizeof(dXDataArray)); memset(dYDataArray, 0, sizeof(dYDataArray)); memset(dCoefficient1, 0, sizeof(dCoefficient1)); memset(dDtInfo1, 0, sizeof(dDtInfo1)); double dPeroid = GetCycle(nFrenquence); int nDataNum = atoi(v_orgData->GetAt(3).GetString());//GetBuffer(0)); double dSplit = dPeroid / (nDataNum-1); nDataNum = nDataNum/4; double dX1Average = 0, dX2Average = 0; int nIndex = 0; for (nIndex= 0; nIndex < nDataNum; nIndex++) { dXDataArray[nIndex] = nIndex * dSplit; //以放电的第一个点的位置为基准进行多项式的计算 dX1Average += dXDataArray[nIndex]; dYDataArray[nIndex] = atof(v_orgData->GetAt(4 + nDataNum + nIndex)); } dX1Average = dX1Average / nDataNum; //得到第一段的多项式 get_fit_equation(dXDataArray, dYDataArray, nDataNum, dCoefficient1, nDataNum-1, dDtInfo1); m_waveCount->windowList[0].wintime_Vp = 0; //VP的值取充电过程的最后三个数的平均值 for (nIndex = 0; nIndex < 3; nIndex++) { m_waveCount->windowList[0].wintime_Vp += atof(v_orgData->GetAt(3+nDataNum-nIndex)); } m_waveCount->windowList[0].wintime_Vp = m_waveCount->windowList[0].wintime_Vp/3; int nTWPos = 0, nTWWideth = 0; double dVal1 =0, dVal2 =0; for (nIndex = 0; nIndex < m_waveCount->windowList[0].ListLength; nIndex++) { nTWPos = m_waveCount->windowList[0].timeWinList[nIndex].wintime_StartTime; nTWWideth = m_waveCount->windowList[0].timeWinList[nIndex].wintime_width; get_integral_area(nTWPos-dX1Average, nTWPos+nTWWideth-dX1Average, dCoefficient1, nDataNum-1, m_waveCount->windowList[0].timeWinList[nIndex].wintime_Integral); dVal1 = get_fit_equation_value(nTWPos - dX1Average, dCoefficient1, nDataNum - 1); dVal2 = get_fit_equation_value(nTWPos + nTWWideth - dX1Average, dCoefficient1, nDataNum -1); m_waveCount->windowList[0].timeWinList[nIndex].wintime_V2 = (dVal1 + dVal2)/2; if (0 == (int)m_waveCount->windowList[0].wintime_Vp) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("Wintime_Vp不能为0")); else MessageBoxEx(NULL, _T("Wintime_Vp can not be zero!!!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return false; } m_waveCount->windowList[0].timeWinList[nIndex].wintime_M = m_waveCount->windowList[0].timeWinList[nIndex].wintime_Integral/m_waveCount->windowList[0].wintime_Vp; m_waveCount->windowList[0].timeWinList[nIndex].wintime_ETA = 100 * m_waveCount->windowList[0].timeWinList[nIndex].wintime_V2/m_waveCount->windowList[0].wintime_Vp; } //得到第二次放电的的多项式 memset(dXDataArray, 0, sizeof(dXDataArray)); memset(dYDataArray, 0, sizeof(dYDataArray)); memset(dCoefficient2, 0, sizeof(dCoefficient2)); memset(dDtInfo2, 0, sizeof(dDtInfo2)); //获取采样时窗 for (nIndex= 0; nIndex < nDataNum; nIndex++) { dXDataArray[nIndex] = nIndex * dSplit; //以放电的第一个点的位置为基准进行多项式的计算 dX2Average += dXDataArray[nIndex]; dYDataArray[nIndex] = atof(v_orgData->GetAt(4 + nDataNum*3 + nIndex)); } dX2Average = dX2Average/nDataNum; //计算第二段的多项式 get_fit_equation(dXDataArray, dYDataArray, nDataNum, dCoefficient2, nDataNum-1, dDtInfo2); //获取第二次充电的VP m_waveCount->windowList[1].wintime_Vp = 0; for (nIndex = 0; nIndex < 3; nIndex++) { m_waveCount->windowList[1].wintime_Vp += atof(v_orgData->GetAt(3+nDataNum*3-nIndex)); } m_waveCount->windowList[1].wintime_Vp = m_waveCount->windowList[1].wintime_Vp/3; m_waveCount->windowList[1].ListLength = m_waveCount->windowList[0].ListLength; for (nIndex = 0; nIndex < m_waveCount->windowList[0].ListLength; nIndex++) { //在这里用第一个放电过程的时窗信息,因为第一次放电和第二次放电的时窗是完全一样的 nTWPos = m_waveCount->windowList[0].timeWinList[nIndex].wintime_StartTime; nTWWideth = m_waveCount->windowList[0].timeWinList[nIndex].wintime_width; m_waveCount->windowList[1].timeWinList[nIndex].wintime_StartTime = nTWPos; m_waveCount->windowList[1].timeWinList[nIndex].wintime_width = nTWWideth; get_integral_area(nTWPos-dX2Average, nTWPos+nTWWideth-dX2Average, dCoefficient2, nDataNum-1, m_waveCount->windowList[1].timeWinList[nIndex].wintime_Integral); dVal1 = get_fit_equation_value(nTWPos - dX2Average, dCoefficient2, nDataNum - 1); dVal2 = get_fit_equation_value(nTWPos + nTWWideth - dX2Average, dCoefficient2, nDataNum -1); m_waveCount->windowList[1].timeWinList[nIndex].wintime_V2 = (dVal1 + dVal2)/2; if (0 == (int)m_waveCount->windowList[1].wintime_Vp) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("Wintime_Vp1不能为0")); else MessageBoxEx(NULL, _T("Wintime_Vp1 can not be zero!!!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return false; } m_waveCount->windowList[1].timeWinList[nIndex].wintime_M = m_waveCount->windowList[1].timeWinList[nIndex].wintime_Integral/m_waveCount->windowList[1].wintime_Vp; m_waveCount->windowList[1].timeWinList[nIndex].wintime_ETA = 100 * m_waveCount->windowList[1].timeWinList[nIndex].wintime_V2/m_waveCount->windowList[1].wintime_Vp; } return true; } bool CTestingData::CalculateTimeWindows(struct _WinTimeList f_winTimeList, CStringArray *v_orgData, int f_TRwave, int f_Tcycle, int f_Sample, int f_interation, int f_industrial) { return true; //下面这段代码不用,用新的时窗计算方法 int *pOrdData = NULL; pOrdData = new int[v_orgData->GetSize()]; double nOffset = 0; //ORG内容的第一列 double nCodeOffset = 0; //ORG内容的第二列 int nStart = 0; //ORG内容的第三列 int nDataLength = 0; //ORG内容的第四列 nOffset = atof(v_orgData->GetAt(0)); nCodeOffset = atof(v_orgData->GetAt(1)); nStart = atoi(v_orgData->GetAt(2)); nDataLength = atoi(v_orgData->GetAt(3)); //把原始数据转换成DOUBLE类型保存起来 for (int n = 4; n < v_orgData->GetSize(); n++) { pOrdData[n] = atoi(v_orgData->GetAt(n)); } //检查m_iTRwave是不是波形类型 CString szWave = _T(""); //记录波形 szWave = GetWaveNum(f_TRwave); int nSample = 0;//采样频率 nSample = GetSample(f_industrial, f_Sample); double fCycle; fCycle = GetCycle(f_Tcycle); //计算每一段波形的数据总量(迭代次数为1的情况) int ValueInWaveCount = 0; //记录每一段波形的数据总量 ValueInWaveCount = fCycle * nSample / 1000 / szWave.GetLength(); //每一段的数据量 = 周期 * (每毫秒采样数) / 波形的段数 //记录实际的波形区间数(避免迭代次数不为1时) int nWaveCount; nWaveCount = v_orgData->GetSize() / ValueInWaveCount; // 申请空间,将数据复制到这个结构体中 m_waveCount = new _WaveCount[sizeof(_WaveCount) + sizeof(_WinTimeList) * nWaveCount]; memset(m_waveCount,0, sizeof(_WaveCount) + sizeof(_WinTimeList) * nWaveCount); //删除超出时域的时窗 int *WinTimeCount = NULL; WinTimeCount = &(f_winTimeList.ListLength); // *WinTimeCount = 0; for ( *WinTimeCount = 0; *WinTimeCount < 10; (*WinTimeCount)++ ) { if( (f_winTimeList.timeWinList[*WinTimeCount].wintime_StartTime + f_winTimeList.timeWinList[*WinTimeCount].wintime_width) > ( fCycle / szWave.GetLength()) ) break; } //计算从第几段波形开始(起始位置(org文件定义) % 单位宽度的数据量) int WaveBegin = (nStart % ValueInWaveCount) ?nStart / ValueInWaveCount + 1 : nStart / ValueInWaveCount; int WaveIndex = 0, WaveLength = 0; double fVar,Integral,Vp; for ( ; WaveBegin < nWaveCount; WaveBegin++) { WaveIndex = WaveBegin % szWave.GetLength(); if ('0' == szWave.GetAt(WaveIndex)) { int stamp, width, index; for (index = 0; index < *WinTimeCount; index++) { // 时域(ms)转换成数域, 与SPS rate有关 stamp = f_winTimeList.timeWinList[index].wintime_StartTime * nSample / 1000 + WaveBegin * ValueInWaveCount - nStart; width = f_winTimeList.timeWinList[index].wintime_StartTime * nSample / 1000; fVar = adc_average(&pOrdData[stamp], width); f_winTimeList.timeWinList[index].wintime_V2 = adc_calculate(nOffset,nCodeOffset,fVar); fVar = adc_integral(&pOrdData[stamp], width); f_winTimeList.timeWinList[index].wintime_Integral = adc_calculate(nOffset,nCodeOffset, fVar); //将数据保存在第n个波形的第n个时窗------------------------------------------- m_waveCount->windowList[WaveLength].timeWinList[index].wintime_StartTime = f_winTimeList.timeWinList[index].wintime_StartTime; m_waveCount->windowList[WaveLength].timeWinList[index].wintime_width = f_winTimeList.timeWinList[index].wintime_width; m_waveCount->windowList[WaveLength].timeWinList[index].wintime_V2 = f_winTimeList.timeWinList[index].wintime_V2; m_waveCount->windowList[WaveLength].timeWinList[index].wintime_Integral = f_winTimeList.timeWinList[index].wintime_Integral; //------------------------------------------------------------------------ } width = ValueInWaveCount / 4; stamp = WaveBegin * ValueInWaveCount - width - nStart; fVar = adc_average(&pOrdData[stamp], width); m_waveCount->windowList[WaveLength].wintime_Vp = adc_calculate(nOffset,nCodeOffset,fVar); //将数据复制到结构体中-------------------------------------------- m_waveCount->windowList[WaveLength].ListLength = *WinTimeCount; for (index = 0; index < *WinTimeCount; index++) { m_waveCount->windowList[WaveLength].timeWinList[index].wintime_ETA = f_winTimeList.timeWinList[index].wintime_V2 / m_waveCount->windowList[WaveLength].wintime_Vp; m_waveCount->windowList[WaveLength].timeWinList[index].wintime_M = f_winTimeList.timeWinList[index].wintime_Integral / m_waveCount->windowList[WaveLength].wintime_Vp; } m_waveCount->WaveLength++; WaveLength++; //----------------------------------------------------------------- } } delete [] pOrdData; return TRUE; } double CTestingData::adc_calculate(double offset, double coefficient, double adc) { double f_var; if (!coefficient) { return adc; } else { f_var = adc / (double)0x7fffff; f_var *= 4096.0 / coefficient; f_var += offset; f_var = f_var; return f_var; } } void CTestingData::TransfToDouble(double* f_buff, CStringArray f_szArray) { for (int n = 0; n < f_szArray.GetSize(); n++) { f_buff[n] = atof(f_szArray.GetAt(n)); } } CString CTestingData::GetWaveNum(int f_waveType) { //返回波形类型对应的段数可以在数据库的CM表中"TRWAVE"名字中查询 switch (f_waveType) { case 0: return "0+-0"; case 1: return "+0-0"; case 2: return "0"; case 3: return "+-"; case 4: return "+"; case 5: return "-"; } } double CTestingData::adc_average(int *adc_buf, int length) { long value = 0; int i; if (!adc_buf || length <= 0) return 0.0; for (i = 0; i < length; i++) { value += adc_buf[i]; } return (double)value / (double)length; } double CTestingData::adc_integral(int *adc_buf, int length) { long value = 0; int i; if (!adc_buf || length <= 0) return 0.0; for (i = 0; i < length; i++) { value += adc_buf[i]; } return ((double)value - ((double)(adc_buf[0] + adc_buf[length - 1]) / 2.0)); } void CTestingData::CreateWindowsTime() { if (m_waveCount) { delete m_waveCount; m_waveCount = NULL; } m_waveCount = new _WaveCount; memset(m_waveCount, 0, sizeof(_WaveCount)); } void CTestingData::FreeWindowsTime() { delete m_waveCount; m_waveCount = NULL; } //这个函数的作用是,把ORG数据以";"为分隔符,加在数组里面 void CTestingData::GetORGCStringToArray(CString f_SrcString, CStringArray *f_array) { SplitterString(*f_array, f_SrcString, _T(";")); // szVRawData.Empty(); // szVRawData = (LPCTSTR)(_bstr_t)pRecRawData->GetCollect(_T("Vrawdata")); // SplitterString(m_saVRawData, szVRawData, _T(";")); int iIndex = (int)VAL_ZERO; CString szValue = _T(""); while (iIndex < f_array->GetSize()) { szValue.Empty(); szValue = f_array->GetAt(iIndex); if (4 == iIndex) { szValue.TrimLeft(szValue.Left(5)); } szValue.TrimLeft(); // if (iIndex >= 4) // { // fValue = 0.0; // fValue = this->ConvertVOrgData((float)atof(szValue)); // // if (fabsf(fValue) > this->m_fMaxAbsV) // { // this->m_fMaxAbsV = fabsf(fValue); // } // // szValue.Empty(); // szValue.Format(_T("%.4f"), fValue); // } f_array->SetAt(iIndex, szValue); iIndex++; } } //转换发射周期 double CTestingData::GetCycle(int f_type) { //以毫秒为单位 switch (f_type) { case 0: return (double)(1 / 0.015625 * 1000); case 1: return (double)(1 / 0.0625 * 1000); case 2: return (double)(1 / 0.125 * 1000); case 3: return (double)(1 / 0.25 * 1000); case 4: return (double)(1 / 0.5 * 1000); case 5: return (double)(1 / 1.0 * 1000); case 6: return (double)(1 / 2.0 * 1000); case 7: return (double)(1 / 4.0 * 1000); case 8: return (double)(1 / 8.0 * 1000); case 9: return (double)(1 / 0.03125 * 1000); default: CString strShow = _T(""); if (LANG_ZHCN == g_iUILanguage) { strShow.Format(_T("未知频率值= %d"), f_type); AfxMessageBox(strShow); } else { strShow.Format(_T("Unknow TRfrequency, value = %d"), f_type); MessageBoxEx(NULL, strShow, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return 0; } } int CTestingData::GetSample(int f_nindustrial, int f_type) { if (f_nindustrial == 0) { switch (f_type) { case 0: return 25; case 1: return 50; case 2: return 100; } } else if (f_nindustrial == 1) { switch (f_type) { case 0: return 30; case 1: return 60; case 2: return 120; } } } BOOL CTestingData::ShowTimeWindow(CListCtrl &tdConList, int iTsn) { return TRUE; } void CTestingData::GetTimeWindowList(CListCtrl &f_list) { CString szSql = _T(""); CString szMST = _T(""); CString szMTW = _T(""); _RecordsetPtr pRecTdTW = NULL; pRecTdTW.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select M0ST,M0TW,M1ST,M1TW,M2ST,M2TW,M3ST,M3TW,M4ST,M4TW,M5ST,M5TW,M6ST,M6TW,M7ST,M7TW,M8ST,M8TW,M9ST,M9TW from ac where TDID = %u"), this->m_dwID); pRecTdTW->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); for (int n = 9; n >= 0; n--) { szMST.Format("M%dST", n); szMTW.Format("M%dTW", n); f_list.SetItemText(n,1,(LPCTSTR)(_bstr_t)pRecTdTW->GetCollect(szMST.GetBuffer(0)) ); f_list.SetItemText(n,2,(LPCTSTR)(_bstr_t)pRecTdTW->GetCollect(szMTW.GetBuffer(0)) ); } pRecTdTW->Close(); } bool CTestingData::GetTimeWindowInfo(std::vector& vtTWInfo) { CString szSql = _T(""); CString szMST = _T(""); CString szMTW = _T(""); vtTWInfo.clear(); _RecordsetPtr pRecTdTW = NULL; pRecTdTW.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select M0ST,M0TW,M1ST,M1TW,M2ST,M2TW,M3ST,M3TW,M4ST,M4TW,M5ST,M5TW,M6ST,M6TW,M7ST,M7TW,M8ST,M8TW,M9ST,M9TW from ac where TDID = %u"), this->m_dwID); pRecTdTW->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); STSigTWInfo stSigTW; for (int i = 0; i < 10; i++) { szMST.Format("M%dST", i); szMTW.Format("M%dTW", i); stSigTW.nTWStartPos = (int)pRecTdTW->GetCollect(szMST.GetBuffer(0)).iVal; stSigTW.nTWWidth = (int)pRecTdTW->GetCollect(szMTW.GetBuffer(0)).iVal; if (stSigTW.nTWWidth > 0) { vtTWInfo.push_back(stSigTW); } } pRecTdTW->Close(); return true; } BOOL CTestingData::ExcuteSql(CString f_sql) { _CommandPtr pCmdUpd = NULL; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = m_pConnection; pCmdUpd->CommandText = f_sql.AllocSysString(); try { pCmdUpd->Execute(NULL, NULL, adCmdText); } catch (...) { return FALSE; } return TRUE; } void CTestingData::UpdataTopography(int f_disType ,int f_start,CListCtrl &f_list) { } double CTestingData::GetPeriod() { CString szSql = _T(""); int nFrenquence = 0; double dPeriod = 0; _RecordsetPtr pRecTd = NULL; pRecTd.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select TRfrequency from td where ID = %u"), this->m_dwID); pRecTd->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecTd->GetRecordCount()) { nFrenquence = (int)pRecTd->GetCollect(_T("TRfrequency")).iVal; if (nFrenquence < 0) { CString strInfo = _T(""); if (LANG_ZHCN == g_iUILanguage) { strInfo.Format(_T("获取频率信息错误 %d"), nFrenquence); AfxMessageBox(strInfo.GetBuffer(0)); } else { strInfo.Format(_T("Get TRfrequency info Error, nVal = %d"), nFrenquence); MessageBoxEx(NULL, _T("Export FileName is empty!!!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return false; } dPeriod = GetCycle(nFrenquence); } pRecTd->Close(); return dPeriod; } bool CTestingData::ShowDetailInfo(CListCtrl &tdDetailList) { _RecordsetPtr pRecTd = NULL; _RecordsetPtr pRecTdHead = NULL; _RecordsetPtr pRecDev = NULL; _RecordsetPtr pRecPara = NULL; _RecordsetPtr pRecCm = NULL; CString szSql; CString szLabel; int iRowIndex = (int)VAL_ZERO; while (tdDetailList.GetItemCount() != iRowIndex) { tdDetailList.SetItemText(iRowIndex, 1, _T("")); iRowIndex++; } pRecTd.CreateInstance(_uuidof(Recordset)); pRecTdHead.CreateInstance(_uuidof(Recordset)); pRecDev.CreateInstance(_uuidof(Recordset)); pRecPara.CreateInstance(_uuidof(Recordset)); pRecCm.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID,TDname,Tlocation,DESN,SCCN,Sname,Stype,Ttype,Tmode,Eamount,TPamount,CHamount,N,TRwave,TRfrequency,Ifrequency,SAfrequency,Clayout,Espace,Edistance,weather,WDIR," "temperature,height,humidity,Format(Cdate,'YYYY-MM-DD') as Cdate,Format(Ctime,'HH:MM:SS') as Ctime,Format(Tdate,'YYYY-MM-DD') as Tdate,Format(Ttime,'HH:MM:SS') as Ttime," "Rdirection,CRtime,IIf(IsNull(PM),'',PM) as PM,IIf(IsNull(OP),'',OP) as OP,IIf(IsNull(QA),'',QA) as QA from td where ID = %u"), m_dwID); pRecTd->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); int iRow = 0; if ((long)VAL_ZERO != pRecTd->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("TDname"))); // tdDetailList.SetItemText(1, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Tlocation"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("DESN")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("DESN"))); // tdDetailList.SetItemText(2, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("SCCN"))); tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Sname"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Stype' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Stype")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Stype"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Ttype' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Ttype")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Ttype"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Tmode' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Tmode")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Tmode"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { // tdDetailList.SetItemText(6, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } pRecCm->Close(); ///////////////////////////////////加入装置类型//////////////////////////// szSql.Empty(); szSql.Format(_T("select MEname from medium where LANG = %d and AR in (select AR from tdchannel where TDID = %d)"), g_iLanguage, m_dwID); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("MEname"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); ////////////////////////////////////////////////////////////////////////// tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Eamount"))); szSql.Empty(); szSql.Format(_T("select count(*) as TotalPoints from td%ddcon where TCHID = %d"), pRecTd->GetCollect(_T("Stype")).vt == VT_NULL ? 1 : pRecTd->GetCollect(_T("Stype")).iVal+1, m_dwID); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("TotalPoints"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("TPamount"))); tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("CHamount"))); tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("N"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'TRwave' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("TRwave")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("TRwave"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); if ((0 == pRecTd->GetCollect(_T("Ttype")).iVal) || (1 == pRecTd->GetCollect(_T("Ttype")).iVal)) { szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Trfrequency' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Trfrequency")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Trfrequency"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); } else if (2 == pRecTd->GetCollect(_T("Ttype")).iVal) { szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Trfrequencyself' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Trfrequency")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Trfrequency"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, pRecCm->GetCollect(_T("Clabel")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); } szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Ifrequency' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Ifrequency")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Ifrequency"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, pRecCm->GetCollect(_T("Clabel")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); // if (0 == pRecTd->GetCollect(_T("Ifrequency")).iVal) // { // szSql.Empty(); // szSql.Format(_T("select Clabel from cm where Cname = 'SAfrequency50' and Lang = %d and Cvalue = %s"), // g_iLanguage, pRecTd->GetCollect(_T("SAfrequency")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("SAfrequency"))); // pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); // if ((long)VAL_ZERO != pRecCm->GetRecordCount()) // { // tdDetailList.SetItemText(13, 1, pRecCm->GetCollect(_T("Clabel")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); // } // pRecCm->Close(); // } // else if (1 == pRecTd->GetCollect(_T("Ifrequency")).iVal) // { // szSql.Empty(); // szSql.Format(_T("select Clabel from cm where Cname = 'SAfrequency60' and Lang = %d and Cvalue = %s"), // g_iLanguage, pRecTd->GetCollect(_T("SAfrequency")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("SAfrequency"))); // pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); // if ((long)VAL_ZERO != pRecCm->GetRecordCount()) // { // tdDetailList.SetItemText(13, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); // } // pRecCm->Close(); // } szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Clayout' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Clayout")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Clayout"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); // tdDetailList.SetItemText(16, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Espace"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("Edistance")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Edistance"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'weather' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("weather")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("weather"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'WDIR' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("WDIR")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("WDIR"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { tdDetailList.SetItemText(iRow++, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } else { tdDetailList.SetItemText(iRow++, 1, _T("")); } pRecCm->Close(); CString szDefault = _T(""); szDefault = (pRecTd->GetCollect(_T("temperature")).vt == VT_NULL)? _T(""):(LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("temperature")); if (szDefault == "-9999")//若为该值则不显示东西 { szDefault = ""; } tdDetailList.SetItemText(iRow++, 1, szDefault); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("height")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("height"))); szDefault = (pRecTd->GetCollect(_T("humidity")).vt==VT_NULL)?_T(""):(LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("humidity")); if (szDefault == "-9999")//若为该值则不显示东西 { szDefault = ""; } tdDetailList.SetItemText(iRow++, 1, szDefault); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("Cdate")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Cdate"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("Ctime")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Ctime"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("Tdate")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Tdate"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("Ttime")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Ttime"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Rdirection' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecTd->GetCollect(_T("Rdirection")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Rdirection"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { // tdDetailList.SetItemText(27, 1, pRecCm->GetCollect(_T("Clabel")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } pRecCm->Close(); // tdDetailList.SetItemText(28, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("CRtime"))); // tdDetailList.SetItemText(25, 1, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("PM"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("OP")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("OP"))); tdDetailList.SetItemText(iRow++, 1, (pRecTd->GetCollect(_T("QA")).vt == VT_NULL) ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("QA"))); } pRecTd->Close(); return true; }