// TestTesaStarEDialog.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "..\..\..\Tesa\TesaStarE.h" #include "TestTesaStarEDialog.h" #include "afxdialogex.h" extern CTesaStarE* g_pTesaStarE; char m_RecvData[MAX_RECIEVE_BUFFER_SIZE]={0}; double m_MoveToPos[2]={0.0}; int m_SendType=1; // TestTesaStarEDialog dialog IMPLEMENT_DYNAMIC(TestTesaStarEDialog, CDialog) TestTesaStarEDialog::TestTesaStarEDialog(CWnd* pParent /*=NULL*/) : CDialog(TestTesaStarEDialog::IDD, pParent) { m_OutMessage=L""; } TestTesaStarEDialog::~TestTesaStarEDialog() { } void TestTesaStarEDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_TESA_STAR_E_LOG, m_edMSG); } BEGIN_MESSAGE_MAP(TestTesaStarEDialog, CDialog) ON_BN_CLICKED(IDCANCEL, &TestTesaStarEDialog::OnBnClickedCancel) ON_EN_KILLFOCUS(IDC_EDIT_MOVETO_DEG, &TestTesaStarEDialog::OnEnKillfocusEditMoveT_Deg) ON_BN_CLICKED(IDC_BUTTONIDC_BUTTON_TESA_STAR_MOVETO, &TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarMoveto) ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_START_MACHINE, &TestTesaStarEDialog::OnBnClickedButtonTesaStarStartMachine) ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_STOP_MACHINE, &TestTesaStarEDialog::OnBnClickedButtonTesaStarStopMachine) ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_SENDMSG, &TestTesaStarEDialog::OnBnClickedButtonTesaStarSendmsg) ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_CLEAR_LOG, &TestTesaStarEDialog::OnBnClickedButtonTesaStarClearLog) ON_BN_CLICKED(IDC_BUTTONIDC_BUTTON_TESA_STAR_READ_POS, &TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarReadPos) ON_EN_KILLFOCUS(IDC_EDIT_MOVETO_DEGA, &TestTesaStarEDialog::OnEnKillfocusEditMovetoDega) END_MESSAGE_MAP() // TestTesaStarEDialog message handlers //=================================================== BOOL TestTesaStarEDialog::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } //=============================================================================== // 创建状态栏 m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, CRect(0, 0, 0, 0), this, 101); m_StatusBar.SetBkColor(RGB(0xff, 0xff, 0x00)); int arWidth[] = {330,450, -1 }; m_StatusBar.SetParts(3, arWidth); m_StatusBar.SetText(_T("System ready."), 0, 0); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control } void TestTesaStarEDialog::OnBnClickedCancel() { g_pTesaStarE->Unload(); CDialog::OnCancel(); } void TestTesaStarEDialog::OnBnClickedButtonTesaStarStartMachine() { g_pTesaStarE->Initialization(); } void TestTesaStarEDialog::OnBnClickedButtonTesaStarStopMachine() { g_pTesaStarE->Unload(); } void TestTesaStarEDialog::OnBnClickedButtonTesaStarSendmsg() { UpdateData(TRUE); USES_CONVERSION; CString csSendData(L""); GetDlgItem(IDC_EDIT_TESA_STAR_MESSAGE)->GetWindowText(csSendData); const char* cSendData=T2A(csSendData); DWORD iSendDataLength(0); DWORD iWriteByte(0); CPSerial *pSerial = &(g_pTesaStarE->m_pSerial); if (m_SendType==0) { char* stop; BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0}; iSendDataLength=(csSendData.GetLength()+1)/3; for(DWORD i=0;iSend((const char*)bSendData,iSendDataLength); } else { //加上回车换行符 csSendData+=_T("\r"); cSendData=T2A(csSendData); iSendDataLength=csSendData.GetLength(); iWriteByte=pSerial->Send(cSendData,iSendDataLength); } m_OutMessage=_T("[Send] ")+csSendData; OutputWithScroll(m_OutMessage,m_edMSG); m_OutMessage.Format(_T("Send(%dByte)"),iWriteByte); m_StatusBar.SetText(m_OutMessage, 1, 0); //接受数据 INT iRetrys(0); INT iRecvBytes(0); CString csTemp; bool IsTheEnd(false); do { iRetrys=0; while(!pSerial->m_iRecvState && iRetrys<20) { iRetrys++; Sleep(100); } if (pSerial->m_iRecvState) { if(pSerial->m_RecvData[0]==0) { pSerial->m_iRecvState=FALSE; INT iRetrys2(0); while(!pSerial->m_iRecvState && iRetrys2<60) { iRetrys2++; Sleep(100); } m_OutMessage=_T("[Recv]"); memcpy(m_RecvData,pSerial->m_RecvData, pSerial->m_iRecvBytes); iRecvBytes=pSerial->m_iRecvBytes; TRACE1("====RECV%d====\r\n",pSerial->m_iRecvBytes); TRACE3("%02X %02X %02X ",pSerial->m_RecvData[0],pSerial->m_RecvData[1],pSerial->m_RecvData[2]); TRACE3("%02X %02X %02X ",pSerial->m_RecvData[3],pSerial->m_RecvData[4],pSerial->m_RecvData[5]); TRACE3("%02X %02X %02X\r\n",pSerial->m_RecvData[6],pSerial->m_RecvData[7],pSerial->m_RecvData[8]); for (INT i=0;i32) csTemp.Format(_T("%c "),(BYTE)m_RecvData[i]); else csTemp=_T("|"); m_OutMessage+=csTemp; } OutputWithScroll(m_OutMessage,m_edMSG); m_OutMessage.Format(_T("Recv(%dByte)"),iRecvBytes); m_StatusBar.SetText(m_OutMessage, 2, 0); } else { m_OutMessage=_T("[Recv]"); memcpy(m_RecvData,pSerial->m_RecvData, pSerial->m_iRecvBytes); iRecvBytes=pSerial->m_iRecvBytes; TRACE1("====RECV%d====\r\n",pSerial->m_iRecvBytes); TRACE3("%02X %02X %02X ",pSerial->m_RecvData[0],pSerial->m_RecvData[1],pSerial->m_RecvData[2]); TRACE3("%02X %02X %02X ",pSerial->m_RecvData[3],pSerial->m_RecvData[4],pSerial->m_RecvData[5]); TRACE3("%02X %02X %02X\r\n",pSerial->m_RecvData[6],pSerial->m_RecvData[7],pSerial->m_RecvData[8]); for (INT i=0;i32) csTemp.Format(_T("%c "),(BYTE)m_RecvData[i]); else csTemp=_T("|"); m_OutMessage+=csTemp; } OutputWithScroll(m_OutMessage,m_edMSG); m_OutMessage.Format(_T("Recv(%dByte)"),iRecvBytes); m_StatusBar.SetText(m_OutMessage, 2, 0); } pSerial->m_iRecvState=FALSE; } else { m_StatusBar.SetText(_T("Time Out!"), 2, 0); BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0x0d}; iWriteByte=pSerial->Send((const char*)bSendData,1); } iRecvBytes=pSerial->m_iRecvBytes; if(iRecvBytes<3) { iRecvBytes=3; } if ((m_RecvData[iRecvBytes-1]==0X0D)&& (m_RecvData[iRecvBytes-2]==0X0A)&& (m_RecvData[iRecvBytes-3]==0X0D)) { IsTheEnd=true; } } while (!IsTheEnd); } void TestTesaStarEDialog::OnBnClickedButtonTesaStarClearLog() { GetDlgItem(IDC_EDIT_TESA_STAR_E_LOG)->SetWindowTextW(_T("")); } void TestTesaStarEDialog::OnEnKillfocusEditMoveT_Deg() { UpdateData(TRUE); USES_CONVERSION; CString csMoveToPos(L""); GetDlgItem(IDC_EDIT_MOVETO_DEG)->GetWindowText(csMoveToPos); const char* cMove_to_Pos=T2A(csMoveToPos); m_MoveToPos[1]=atof(cMove_to_Pos); } void TestTesaStarEDialog::OnEnKillfocusEditMovetoDega() { UpdateData(TRUE); USES_CONVERSION; CString csMoveToPos(L""); GetDlgItem(IDC_EDIT_MOVETO_DEGA)->GetWindowText(csMoveToPos); const char* cMove_to_Pos=T2A(csMoveToPos); m_MoveToPos[0]=atof(cMove_to_Pos); } void TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarMoveto() { double dMovetoPos[2]={0.0}; dMovetoPos[0]=m_MoveToPos[0]; dMovetoPos[1]=m_MoveToPos[1]; g_pTesaStarE->SetTesaStarEAngle(2,dMovetoPos,true); m_OutMessage.Format(_T("[Move Finished]A:%.4f;B:%.4f"),dMovetoPos[0],dMovetoPos[1]); OutputWithScroll(m_OutMessage,m_edMSG); } void TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarReadPos() { int iDataSize(0); double dData[2]={0.0}; g_pTesaStarE->GetTesaStarEAngle(iDataSize,dData); m_OutMessage.Format(_T("A:%.4f;B:%.4f"),dData[0],dData[1]); OutputWithScroll(m_OutMessage,m_edMSG); } //===================================================================================== //Print message on edit control void TestTesaStarEDialog::OutputWithScroll(const CString &strNewText,CEdit &edtOutput) { CString strOutput; edtOutput.GetWindowText(strOutput); strOutput += strNewText; if ("\r\n" != strOutput.Right(2)) { strOutput += "\r\n"; } int iCount = strOutput.GetLength(); edtOutput.SetRedraw(FALSE); edtOutput.SetWindowText(strOutput); int iLine = edtOutput.GetLineCount(); edtOutput.LineScroll(iLine, 0); edtOutput.SetSel(iCount, iCount); edtOutput.SetRedraw(TRUE); }