Files
geomative/GeomativeStudio/cpp/ProblemZone/TestingData.cpp
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

1303 lines
44 KiB
C++

// 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<CMedium*>& 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<STSigTWInfo>& 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;
}