Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

1019 lines
31 KiB
C++

// opexeccersptestdlg.cpp : implementation file
//
#include "stdafx.h"
#include "geomative.h"
#include "opexeccersptestdlg.h"
#include "opexeccersptestframe.h"
#include "opexeccersptesttdview.h"
#include "opexeccersprecframe.h"
#include "opexeccersptestsptlistview.h"
#include "opexeccersptesttdlistview.h"
#include "OpExecCERSPTestTdScrollView.h"
#include "MediumQ.h"
#include "RspCETd.h"
#include "TdChannel.h"
#include "RSPCETdRecord.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern int g_iTransMode;
extern void TransDelay(int iTransMode, int iDS0, int iDS1, HWND hWnd = NULL);
extern BOOL DoEvent(HWND hWnd);
extern BOOL GetSubStringInHeadAndTail(const CString& szSource, CString& szSub, const CString& szHead, const CString& szTail);
extern int StatStringCount(const CString& szSource, const CString& szMember);
extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter);
extern int g_UIOffset;
/////////////////////////////////////////////////////////////////////////////
// COpExecCERSPTestDlg dialog
extern HHOOK hHook;
extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);
COpExecCERSPTestDlg::COpExecCERSPTestDlg(CRspCETd* pRspCETd, INT_PTR* pRet, CWnd* pParent /*=NULL*/)
: CDialog(COpExecCERSPTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COpExecCERSPTestDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pRet = pRet;
m_pRspCETd = pRspCETd;
m_szFileName.Empty();
m_pOpExecCERSPTestFrame = NULL;
}
void COpExecCERSPTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COpExecCERSPTestDlg)
DDX_Control(pDX, IDC_DEEP_FACTOR, m_cbDeepFactor);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COpExecCERSPTestDlg, CDialog)
//{{AFX_MSG_MAP(COpExecCERSPTestDlg)
ON_BN_CLICKED(IDC_BT_TEST, OnBtTest)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EASYSIZE_MAP(COpExecCERSPTestDlg)
EASYSIZE(IDC_BT_TEST, ES_BORDER, ES_BORDER, ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC_DEPTH, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC_ONE, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_DEEP_FACTOR, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC_AB, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDOK, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDCANCEL, ES_KEEPSIZE, ES_BORDER, ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC_FRAME,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
END_EASYSIZE_MAP
/////////////////////////////////////////////////////////////////////////////
// COpExecCERSPTestDlg message handlers
void COpExecCERSPTestDlg::OnOK()
{
// TODO: Add extra validation here
CString szCaption = _T("");
Sleep(20);
if (TRUE == this->m_pRspCETd->SaveData())
{
szCaption.Empty();
szCaption.LoadString(IDS_OP_SUCCESS+g_UIOffset);
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
if (OFFSET_CHINESE == g_UIOffset)
AfxMessageBox(szCaption, MB_ICONINFORMATION);
else
MessageBoxEx(NULL, szCaption, STRING_MESSAGEBOXEX_TITLE, MB_ICONINFORMATION, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
else
{
this->ClearAll();
szCaption.Empty();
szCaption.LoadString(IDS_OP_FAIL+g_UIOffset);
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
if (OFFSET_CHINESE == g_UIOffset)
AfxMessageBox(szCaption, MB_ICONINFORMATION);
else
MessageBoxEx(NULL, szCaption, STRING_MESSAGEBOXEX_TITLE, MB_ICONINFORMATION, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
this->EndModalLoop(RET_OK);
CDialog::OnOK();
}
void COpExecCERSPTestDlg::OnCancel()
{
// TODO: Add extra cleanup here
this->ClearAll();
this->EndModalLoop(RET_CANCEL);
CDialog::OnCancel();
}
BOOL COpExecCERSPTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CTdChannel* pTdChannel = NULL;
CRect rect;
CWnd *pStatic = GetDlgItem(IDC_STATIC_FRAME);
pStatic->GetWindowRect(&rect);
// pStatic->DestroyWindow();
this->ScreenToClient(&rect);
m_pOpExecCERSPTestFrame = (COpExecCERSPTestFrame*)((CRuntimeClass*)RUNTIME_CLASS(COpExecCERSPTestFrame))->CreateObject();
m_pOpExecCERSPTestFrame->Create(NULL, NULL, WS_CHILD, rect, this);
m_pOpExecCERSPTestFrame->MoveWindow(&rect);
m_pOpExecCERSPTestFrame->ShowWindow(SW_SHOW);
pTdChannel = (CTdChannel*)(this->m_pRspCETd->m_tdChaList.GetAt(m_pRspCETd->m_tdChaList.FindIndex(0))); //目前仅支持单通道
m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->m_pTdChannel = pTdChannel;
((CButton*)GetDlgItem(IDC_BT_TEST))->SetButtonStyle(BS_DEFPUSHBUTTON | BS_PUSHBUTTON | BS_NOTIFY);
((CButton*)GetDlgItem(IDC_BT_TEST))->SetFocus();
this->m_cbDeepFactor.SetCurSel(0);
ReSetAll();
INIT_EASYSIZE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void COpExecCERSPTestDlg::ClearAll()
{
CString szFilePath = _T("");
CString szFileName = _T("");
CString szFile = _T("");
CString szOrder = _T("");
CString szResBuff = _T("");
CString szPrompt = _T("");
int iResSize = (int)VAL_ZERO;
int iPollingTime = (int)VAL_ZERO;
char aResBuff[2048] = {0};
szFilePath.Empty();
szFilePath.GetBufferSetLength(2048);
::GetCurrentDirectory(2048, szFilePath.GetBuffer(szFilePath.GetLength()));
szFilePath.ReleaseBuffer();
szFileName.Empty();
szFileName = m_pRspCETd->m_szTdCN + _T(".xml");
szFile.Empty();
szFile = szFilePath + _T("\\") + szFileName;
DeleteFile(szFile);
TransDelay(g_iTransMode, 10, 50, NULL);
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
szOrder.Empty();
szOrder.Format(_T("meas_delete(\"%s\",\"%s\",\"%s\")\r\n"), m_pRspCETd->m_szPrCN, m_pRspCETd->m_szTzCN, m_pRspCETd->m_szTdCN);
// MessageBox(szOrder);
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength());
szOrder.ReleaseBuffer();
// TransDelay(g_iTransMode, 100, 200);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
szResBuff.Empty();
iPollingTime = (int)VAL_ZERO;
while ((szResBuff.Find(">") == -1) && (iPollingTime < 3))
{
Sleep(500);
while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE)
{
szResBuff.Insert(szResBuff.GetLength(), aResBuff);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
}
iPollingTime++;
}
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
if (szResBuff.Find('>') == -1)
{
szPrompt.Empty();
szPrompt.LoadString(IDS_OP_HOST_ERROR);
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szPrompt, NULL, MB_ICONSTOP);
}
this->m_pRspCETd->ClearTdChaList();
}
void COpExecCERSPTestDlg::ReSetAll()
{
CTdChannel* pTdChannel = NULL;
CRspCETdRecord* pRspCETdRecord = NULL;
CRect vRect;
CRect lRect;
int iSmWidth = (int)VAL_ZERO;
int iSmHeight = (int)VAL_ZERO;
int iTdChannelIndex = (int)VAL_ZERO;
int iTdRecIndex = (int)VAL_ZERO;
CListCtrl* pSptList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestSptListView->GetListCtrl());
// CClientDC dc(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView);
// this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView->GetClientRect(vRect);
// dc.FillSolidRect(vRect, RGB(0xFF,0xFF,0xFF));
iTdChannelIndex = (int)VAL_ZERO;
while (iTdChannelIndex < m_pRspCETd->m_tdChaList.GetCount())
{
pTdChannel = NULL;
pTdChannel = (CTdChannel*)this->m_pRspCETd->m_tdChaList.GetAt(this->m_pRspCETd->m_tdChaList.FindIndex(iTdChannelIndex));
if (NULL != pTdChannel)
{
pTdChannel->ClearCESptRecList();
pTdChannel->LoadCEScriptFromDB();
iTdRecIndex = (int)VAL_ZERO;
while (iTdRecIndex < pTdChannel->m_tdRecArray.GetSize())
{
pRspCETdRecord = NULL;
pRspCETdRecord = (CRspCETdRecord*)pTdChannel->m_tdRecArray.GetAt(iTdRecIndex);
pRspCETdRecord->ClearAll();
iTdRecIndex++;
}
// this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdView->m_lRect = lRect;
}
this->PutScriptToList(pSptList, pTdChannel->m_tdRecArray);
iTdChannelIndex++;
}
this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate();
}
void COpExecCERSPTestDlg::OnBtTest()
{
// TODO: Add your control notification handler code here
POSITION posSCon;
int iSConIndex = (int)VAL_ZERO;
CTdChannel* pTdChannel = NULL;
CRspCETdRecord* pRspCETdRecord = NULL;
CListCtrl* pSptList = NULL;
CListCtrl* pTdList = NULL;
pSptList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestSptListView->GetListCtrl());
pTdList = &(this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPRecFrame->m_pOpExecCERSPTestTdListView->GetListCtrl());
posSCon = pSptList->GetFirstSelectedItemPosition();
if (NULL != posSCon)
{
iSConIndex = pSptList->GetNextSelectedItem(posSCon);
pRspCETdRecord = (CRspCETdRecord*)(pSptList->GetItemData(iSConIndex));
pTdChannel = NULL;
pTdChannel = (CTdChannel*)this->m_pRspCETd->m_tdChaList.GetAt(this->m_pRspCETd->m_tdChaList.FindIndex(0));
if (this->TestingPointCollection(pTdList, pRspCETdRecord, pTdChannel) == TRUE)
{
this->GetDlgItem(IDOK)->EnableWindow(TRUE);
}
}
}
void COpExecCERSPTestDlg::PutScriptToList(CListCtrl* pTdList, CPtrArray& tdRecArray)
{
CRspCETdRecord* pRspCETdRecord = NULL;
int iTdRecIndex = (int)VAL_ZERO;
CString szTdCon = _T("");
pTdList->DeleteAllItems();
while (iTdRecIndex < tdRecArray.GetSize())
{
pRspCETdRecord = (CRspCETdRecord*)tdRecArray.GetAt(iTdRecIndex);
szTdCon.Empty();
szTdCon.Format(_T("%d"), pRspCETdRecord->m_iTsn);
pTdList->InsertItem(iTdRecIndex, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fA);
pTdList->SetItemText(iTdRecIndex, 1, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fB);
pTdList->SetItemText(iTdRecIndex, 2, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fX);
pTdList->SetItemText(iTdRecIndex, 3, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%.1f"), pRspCETdRecord->m_fY);
pTdList->SetItemText(iTdRecIndex, 4, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%d"), pRspCETdRecord->m_iN);
pTdList->SetItemText(iTdRecIndex, 5, szTdCon);
szTdCon.Empty();
szTdCon.Format(_T("%f"), pRspCETdRecord->m_fK);
pTdList->SetItemText(iTdRecIndex, 6, szTdCon);
pTdList->SetItemData(iTdRecIndex, (DWORD)pRspCETdRecord);
iTdRecIndex++;
}
}
BOOL COpExecCERSPTestDlg::TestingPointCollection(CListCtrl* pTdList, CRspCETdRecord* pRspCETdRecord, CTdChannel* pTdChannel)
{
char aResBuff[2048] = {0};
int iResSize = (int)VAL_ZERO;
LVFINDINFO info;
CString szTSN = _T("");
int iListIndex = (int)VAL_ZERO;
int iCurListIndex = (int)VAL_ZERO;
int iTdRecIndex = (int)VAL_ZERO;
int iRecIndex = (int)VAL_ZERO;
int iTime = (int)VAL_ZERO;
BOOL bIsRetrans = FALSE;
CString szOrder = _T("");
CString szResBuff = _T("");
CString szResCon = _T("");
CString szPrompt = _T("");
CStringArray szArrayRes;
// CStringArray szArrayRes2;
CRspCETdRecord* pNewRspCETdRecord = NULL;
int iPollingTime = 0;
int iCountTime = 0;
m_pRspCETd->m_fTRPeriod = m_pRspCETd->m_fTRPeriod + 5;
info.flags = LVFI_PARTIAL | LVFI_PARAM;
info.lParam = (long)pRspCETdRecord;
iCurListIndex = pTdList->FindItem(&info);
szTSN.Empty();
szTSN.Format(_T("%5d"), pRspCETdRecord->m_iTsn);
if ((int)VAL_MINUS_ONE != iCurListIndex)
{
info.flags = LVFI_PARTIAL | LVFI_STRING;
info.psz = szTSN;
while ((int)VAL_MINUS_ONE != iListIndex)
{
iCurListIndex = iListIndex;
iListIndex = pTdList->FindItem(&info, iCurListIndex);
}
iListIndex = iCurListIndex;
pNewRspCETdRecord = new CRspCETdRecord(pRspCETdRecord->m_dwChID, pRspCETdRecord->m_pConnection);
pTdChannel->m_tdRecArray.InsertAt(iListIndex + 1, (void*)pNewRspCETdRecord);
}
else
{
if (0 == pTdList->GetItemCount())
{
iListIndex = -1;
}
else
{
iListIndex = pTdList->GetItemCount() - 1;
}
pNewRspCETdRecord = NULL;
pNewRspCETdRecord = pRspCETdRecord;
}
///////////////////////////////////////////////////////////////////////////////
pNewRspCETdRecord->m_iTsn = pRspCETdRecord->m_iTsn;
pNewRspCETdRecord->m_fA = pRspCETdRecord->m_fA;
pNewRspCETdRecord->m_fB = pRspCETdRecord->m_fB;
pNewRspCETdRecord->m_fX = pRspCETdRecord->m_fX;
pNewRspCETdRecord->m_fY = pRspCETdRecord->m_fY;
pNewRspCETdRecord->m_fK = pRspCETdRecord->m_fK;
pNewRspCETdRecord->m_iN = pRspCETdRecord->m_iN;
pNewRspCETdRecord->m_fR0 = pRspCETdRecord->m_fR0;
pNewRspCETdRecord->m_fI = pRspCETdRecord->m_fI;
pNewRspCETdRecord->m_fV = pRspCETdRecord->m_fV;
pNewRspCETdRecord->m_colorREF = pRspCETdRecord->m_colorREF;
pNewRspCETdRecord->m_recPtArea.SetRectEmpty();
pRspCETdRecord->m_fDepth = ((CMediumQ*)pTdChannel->m_pMedium)->CalculateDepth(pRspCETdRecord->m_fA, 0.5);
pNewRspCETdRecord->m_fDepth = pRspCETdRecord->m_fDepth;
// pTdChannel->m_tdRecArray.Add((void*)pNewRspCETdRecord);
///////////////////////////////////////////////////////////////////////////////
// iListIndex = pTdList->GetItemCount();
do
{
if (!bIsRetrans)
{
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2);
// TransDelay(g_iTransMode, 20, 50);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
szResBuff.Empty();
iPollingTime = 0;
while ((szResBuff.Find(">") == -1) && (iPollingTime < MAX_POLLING_TIME))
{
while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE)
{
szResBuff.Insert(szResBuff.GetLength(), aResBuff);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
}
iPollingTime++;
}
if (szResBuff.Find('>') == -1)
{
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2);
// TransDelay(g_iTransMode, 20, 50);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize);
szResBuff.Empty();
szResBuff.Format(_T("%s"), aResBuff);
if (szResBuff.Find('>') == -1)
{
szPrompt.Empty();
szPrompt.LoadString(IDS_OP_HOST_ERROR);
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szPrompt, NULL, MB_ICONSTOP);
return FALSE;
}
}
}
/*
iTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN; //发射周期与迭代次数决定延迟时间,真实环境需删除此处
if (bIsRetrans) //真实环境需删除此处
{
iTime = 0;
}
*/
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
szOrder.Empty();
// szOrder.Format(_T("meas_point(%d,%d,%d,%d,%d,%d)\r\n"), (int)pNewRspCETdRecord->m_fC1*10, (int)pNewRspCETdRecord->m_fC2*10, (int)pNewRspCETdRecord->m_fP1*10, (int)pNewRspCETdRecord->m_fP2*10, iTime, (int)!bIsRetrans);
szOrder.Format(_T("meas_point(%d,%d,%d,%d,0,%d)\r\n"), (int)(pNewRspCETdRecord->m_fA*10.0), (int)(pNewRspCETdRecord->m_fB*10.0), (int)(pNewRspCETdRecord->m_fX*10.0), (int)(pNewRspCETdRecord->m_fY*10.0), !bIsRetrans);
// MessageBox(szOrder);
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength());
szOrder.ReleaseBuffer();
// TransDelay(g_iTransMode, 100, 200);
bIsRetrans = FALSE;
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
szResBuff.Empty();
iPollingTime = 0;
iCountTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN/COMM_TIMEOUT + MAX_POLLING_TIME; //依据发射周期设定轮询时长
while ((szResBuff.Find("]") == -1) && (iPollingTime < iCountTime))
{
// DoEvent(this->m_hWnd);
Sleep(1);
while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE)
{
szResBuff.Insert(szResBuff.GetLength(), aResBuff);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
}
// MessageBox(szResBuff);
iPollingTime++;
}
if ((iCountTime+1) == iPollingTime)
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
// DoEvent(this->m_hWnd);
continue;
}
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
try
{
if (GetSubStringInHeadAndTail(szResBuff, szResCon, _T("["), _T("]")) == TRUE)
{
if (StatStringCount(szResCon, _T(";")) == 4)
{
szArrayRes.RemoveAll();
SplitterString(szArrayRes, szResCon, _T(";"));
if (szArrayRes.GetSize() == 4)
{
/*szArrayRes.GetAt(0).TrimLeft();
szArrayRes.GetAt(0).TrimRight();
szArrayRes.GetAt(1).TrimLeft();
szArrayRes.GetAt(1).TrimRight();
szArrayRes.GetAt(2).TrimLeft();
szArrayRes.GetAt(2).TrimRight();
szArrayRes.GetAt(3).TrimLeft();
szArrayRes.GetAt(3).TrimRight();*/
//by quyx 20180502 为适应vs2013编译器
CString szCstringRes0 = szArrayRes.GetAt(0);
szCstringRes0.TrimLeft(); szCstringRes0.TrimRight();
CString szCstringRes1 = szArrayRes.GetAt(1);
szCstringRes1.TrimLeft(); szCstringRes1.TrimRight();
CString szCstringRes2 = szArrayRes.GetAt(2);
szCstringRes2.TrimLeft(); szCstringRes2.TrimRight();
CString szCstringRes3 = szArrayRes.GetAt(3);
szCstringRes3.TrimLeft(); szCstringRes3.TrimRight();
pNewRspCETdRecord->m_fI = (float)atof(szCstringRes0);// szArrayRes.GetAt(0));
pNewRspCETdRecord->m_fV = (float)atof(szCstringRes1);// szArrayRes.GetAt(1));
pNewRspCETdRecord->m_fR0 = (float)atof(szCstringRes2);// szArrayRes.GetAt(2));
pNewRspCETdRecord->m_fSP = (float)atof(szCstringRes3);// szArrayRes.GetAt(3));
pTdList->InsertItem(iListIndex + 1, szTSN);
pTdList->SetItemText(iListIndex + 1, 1, szCstringRes0);// szArrayRes.GetAt(0));
pTdList->SetItemText(iListIndex + 1, 2, szCstringRes1);// szArrayRes.GetAt(1));
pTdList->SetItemText(iListIndex + 1, 3, szCstringRes2);// szArrayRes.GetAt(2));
pTdList->SetItemText(iListIndex + 1, 4, szCstringRes3);// szArrayRes.GetAt(3));
pTdList->SetHotItem(iListIndex + 1);
pTdList->EnsureVisible(iListIndex + 1, TRUE);
pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord);
pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
pTdList->SetFocus();
}
else
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
continue; //数据错,重测
}
}
else if (_T("0") == szResCon)
{
pNewRspCETdRecord->m_fI = (float)0;
pNewRspCETdRecord->m_fV = (float)0;
pNewRspCETdRecord->m_fR0 = (float)0;
pNewRspCETdRecord->m_fSP = (float)0;
pTdList->InsertItem(iListIndex + 1, szTSN);
pTdList->SetItemText(iListIndex + 1, 1, _T("0"));
pTdList->SetItemText(iListIndex + 1, 2, _T("0"));
pTdList->SetItemText(iListIndex + 1, 3, _T("0"));
pTdList->SetItemText(iListIndex + 1, 4, _T("0"));
pTdList->SetHotItem(iListIndex + 1);
pTdList->EnsureVisible(iListIndex + 1, TRUE);
pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord);
pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
pTdList->SetFocus();
}
else
{
// TransDelay(g_iTransMode, 3, 20, this->m_hWnd); //数据错,重测
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
// DoEvent(this->m_hWnd);
continue;
}
}
else
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
DoEvent(this->m_hWnd);
continue;
}
}
catch (...)
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
continue;
}
DoEvent(this->m_hWnd);
} while (TRUE == bIsRetrans);
if (pNewRspCETdRecord->m_fR0 > pTdChannel->m_fMaxR0)
{
pTdChannel->m_fMaxR0 = pNewRspCETdRecord->m_fR0;
}
if (pNewRspCETdRecord->m_fDepth > pTdChannel->m_fMaxDepth)
{
pTdChannel->m_fMaxDepth = pNewRspCETdRecord->m_fDepth;
}
this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate();
if (19 == pTdChannel->m_pMedium->m_iAR)
{
/////////////////////////////////////////////////////////////////
iListIndex = (int)VAL_ZERO;
iCurListIndex = (int)VAL_ZERO;
pNewRspCETdRecord = NULL;
m_pRspCETd->m_fTRPeriod = m_pRspCETd->m_fTRPeriod + 5;
info.flags = LVFI_PARTIAL | LVFI_PARAM;
info.lParam = (long)pRspCETdRecord;
iCurListIndex = pTdList->FindItem(&info);
szTSN.Empty();
szTSN.Format(_T("%5d"), pRspCETdRecord->m_iTsn);
if ((int)VAL_MINUS_ONE != iCurListIndex)
{
info.flags = LVFI_PARTIAL | LVFI_STRING;
info.psz = szTSN;
while ((int)VAL_MINUS_ONE != iListIndex)
{
iCurListIndex = iListIndex;
iListIndex = pTdList->FindItem(&info, iCurListIndex);
}
iListIndex = iCurListIndex;
pNewRspCETdRecord = new CRspCETdRecord(pRspCETdRecord->m_dwChID, pRspCETdRecord->m_pConnection);
pTdChannel->m_tdRecArray.InsertAt(iListIndex + 1, (void*)pNewRspCETdRecord);
}
///////////////////////////////////////////////////////////////////////////////
pNewRspCETdRecord->m_iTsn = pRspCETdRecord->m_iTsn;
pNewRspCETdRecord->m_fA = pRspCETdRecord->m_fA * (-1);
pNewRspCETdRecord->m_fB = pRspCETdRecord->m_fB;
pNewRspCETdRecord->m_fX = pRspCETdRecord->m_fX;
pNewRspCETdRecord->m_fY = pRspCETdRecord->m_fY;
pNewRspCETdRecord->m_fK = pRspCETdRecord->m_fK;
pNewRspCETdRecord->m_iN = pRspCETdRecord->m_iN;
pNewRspCETdRecord->m_fR0 = pRspCETdRecord->m_fR0;
pNewRspCETdRecord->m_fI = pRspCETdRecord->m_fI;
pNewRspCETdRecord->m_fV = pRspCETdRecord->m_fV;
pNewRspCETdRecord->m_colorREF = pRspCETdRecord->m_colorREF;
pNewRspCETdRecord->m_recPtArea.SetRectEmpty();
// pRspCETdRecord->m_fDepth = ((CMediumQ*)pTdChannel->m_pMedium)->CalculateDepth(pRspCETdRecord->m_fA, 0.5);
pNewRspCETdRecord->m_fDepth = pRspCETdRecord->m_fDepth;
// pTdChannel->m_tdRecArray.Add((void*)pNewRspCETdRecord);
///////////////////////////////////////////////////////////////////////////////
// iListIndex = pTdList->GetItemCount();
do
{
if (!bIsRetrans)
{
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2);
// TransDelay(g_iTransMode, 20, 50);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
szResBuff.Empty();
iPollingTime = 0;
while ((szResBuff.Find(">") == -1) && (iPollingTime < MAX_POLLING_TIME))
{
while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE)
{
szResBuff.Insert(szResBuff.GetLength(), aResBuff);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
}
iPollingTime++;
}
if (szResBuff.Find('>') == -1)
{
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly("\r\n", 2);
// TransDelay(g_iTransMode, 20, 50);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize);
szResBuff.Empty();
szResBuff.Format(_T("%s"), aResBuff);
if (szResBuff.Find('>') == -1)
{
szPrompt.Empty();
szPrompt.LoadString(IDS_OP_HOST_ERROR);
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szPrompt, NULL, MB_ICONSTOP);
return FALSE;
}
}
}
/*
iTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN; //发射周期与迭代次数决定延迟时间,真实环境需删除此处
if (bIsRetrans) //真实环境需删除此处
{
iTime = 0;
}
*/
m_pRspCETd->m_pDevice->m_sComPort.ClearCommSendBuff();
m_pRspCETd->m_pDevice->m_sComPort.ClearCommReceiveBuff();
szOrder.Empty();
// szOrder.Format(_T("meas_point(%d,%d,%d,%d,%d,%d)\r\n"), (int)pNewRspCETdRecord->m_fC1*10, (int)pNewRspCETdRecord->m_fC2*10, (int)pNewRspCETdRecord->m_fP1*10, (int)pNewRspCETdRecord->m_fP2*10, iTime, (int)!bIsRetrans);
szOrder.Format(_T("meas_point(%d,%d,%d,%d,0,%d)\r\n"), (int)(pNewRspCETdRecord->m_fA*10.0), (int)(pNewRspCETdRecord->m_fB*10.0), (int)(pNewRspCETdRecord->m_fX*10.0), (int)(pNewRspCETdRecord->m_fY*10.0), !bIsRetrans);
// MessageBox(szOrder);
m_pRspCETd->m_pDevice->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength());
szOrder.ReleaseBuffer();
// TransDelay(g_iTransMode, 100, 200);
bIsRetrans = FALSE;
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
szResBuff.Empty();
iPollingTime = 0;
iCountTime = (int)m_pRspCETd->m_fTRPeriod * pNewRspCETdRecord->m_iN/COMM_TIMEOUT + MAX_POLLING_TIME; //依据发射周期设定轮询时长
while ((szResBuff.Find("]") == -1) && (iPollingTime < iCountTime))
{
// DoEvent(this->m_hWnd);
Sleep(1);
while (m_pRspCETd->m_pDevice->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE)
{
szResBuff.Insert(szResBuff.GetLength(), aResBuff);
iResSize = (int)VAL_ZERO;
memset(aResBuff, 0, sizeof(aResBuff));
}
// MessageBox(szResBuff);
iPollingTime++;
}
if ((iCountTime+1) == iPollingTime)
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
// DoEvent(this->m_hWnd);
continue;
}
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
try
{
if (GetSubStringInHeadAndTail(szResBuff, szResCon, _T("["), _T("]")) == TRUE)
{
if (StatStringCount(szResCon, _T(";")) == 4)
{
szArrayRes.RemoveAll();
SplitterString(szArrayRes, szResCon, _T(";"));
if (szArrayRes.GetSize() == 4)
{
/*szArrayRes.GetAt(0).TrimLeft();
szArrayRes.GetAt(0).TrimRight();
szArrayRes.GetAt(1).TrimLeft();
szArrayRes.GetAt(1).TrimRight();
szArrayRes.GetAt(2).TrimLeft();
szArrayRes.GetAt(2).TrimRight();
szArrayRes.GetAt(3).TrimLeft();
szArrayRes.GetAt(3).TrimRight();*/
//by quyx 20180502 为适应vs2013编译器
CString szCstringRes0 = szArrayRes.GetAt(0);
szCstringRes0.TrimLeft();szCstringRes0.TrimRight();
CString szCstringRes1 = szArrayRes.GetAt(1);
szCstringRes1.TrimLeft();szCstringRes1.TrimRight();
CString szCstringRes2 = szArrayRes.GetAt(2);
szCstringRes2.TrimLeft();szCstringRes2.TrimRight();
CString szCstringRes3 = szArrayRes.GetAt(3);
szCstringRes3.TrimLeft(); szCstringRes3.TrimRight();
pNewRspCETdRecord->m_fI = (float)atof(szCstringRes0);// szArrayRes.GetAt(0));
pNewRspCETdRecord->m_fV = (float)atof(szCstringRes1);//szArrayRes.GetAt(1));
pNewRspCETdRecord->m_fR0 = (float)atof(szCstringRes2);//szArrayRes.GetAt(2));
pNewRspCETdRecord->m_fSP = (float)atof(szCstringRes3);//szArrayRes.GetAt(3));
pTdList->InsertItem(iListIndex + 1, szTSN);
pTdList->SetItemText(iListIndex + 1, 1, szCstringRes0);//szArrayRes.GetAt(0));
pTdList->SetItemText(iListIndex + 1, 2, szCstringRes1);//szArrayRes.GetAt(1));
pTdList->SetItemText(iListIndex + 1, 3, szCstringRes2);//szArrayRes.GetAt(2));
pTdList->SetItemText(iListIndex + 1, 4, szCstringRes3);//szArrayRes.GetAt(3));
pTdList->SetHotItem(iListIndex + 1);
pTdList->EnsureVisible(iListIndex + 1, TRUE);
pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord);
pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
pTdList->SetFocus();
}
else
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
continue; //数据错,重测
}
}
else if (_T("0") == szResCon)
{
pNewRspCETdRecord->m_fI = (float)0;
pNewRspCETdRecord->m_fV = (float)0;
pNewRspCETdRecord->m_fR0 = (float)0;
pNewRspCETdRecord->m_fSP = (float)0;
pTdList->InsertItem(iListIndex + 1, szTSN);
pTdList->SetItemText(iListIndex + 1, 1, _T("0"));
pTdList->SetItemText(iListIndex + 1, 2, _T("0"));
pTdList->SetItemText(iListIndex + 1, 3, _T("0"));
pTdList->SetItemText(iListIndex + 1, 4, _T("0"));
pTdList->SetHotItem(iListIndex + 1);
pTdList->EnsureVisible(iListIndex + 1, TRUE);
pTdList->SetItemData(iListIndex + 1, (DWORD)pNewRspCETdRecord);
pTdList->SetItemState(iListIndex + 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
pTdList->SetFocus();
}
else
{
// TransDelay(g_iTransMode, 3, 20, this->m_hWnd); //数据错,重测
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
// DoEvent(this->m_hWnd);
continue;
}
}
else
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
DoEvent(this->m_hWnd);
continue;
}
}
catch (...)
{
bIsRetrans = TRUE;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
MessageBox(szResBuff);
continue;
}
DoEvent(this->m_hWnd);
} while (TRUE == bIsRetrans);
if (pNewRspCETdRecord->m_fR0 > pTdChannel->m_fMaxR0)
{
pTdChannel->m_fMaxR0 = pNewRspCETdRecord->m_fR0;
}
if (pNewRspCETdRecord->m_fDepth > pTdChannel->m_fMaxDepth)
{
pTdChannel->m_fMaxDepth = pNewRspCETdRecord->m_fDepth;
}
this->m_pOpExecCERSPTestFrame->m_pOpExecCERSPTestTdScrollView->Invalidate();
/////////////////////////////////////////////////////////////////
}
return TRUE;
}
BOOL COpExecCERSPTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
return TRUE;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void COpExecCERSPTestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
UPDATE_EASYSIZE;
// TODO: Add your message handler code here
//onsize在对话框初始化前会被调用,但此时相关对象并没有被创建起来,故需在要此进行判断
if (m_pOpExecCERSPTestFrame)
{
CRect rect;
CWnd *pStatic = GetDlgItem(IDC_STATIC_FRAME);
pStatic->GetWindowRect(&rect);
this->ScreenToClient(&rect);
m_pOpExecCERSPTestFrame->MoveWindow(&rect);
m_pOpExecCERSPTestFrame->ShowWindow(SW_SHOW);
}
}