1303 lines
44 KiB
C++
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;
|
|
} |