新增Tesa star e测试功能。

This commit is contained in:
TAO Cheng
2013-12-05 18:16:31 +08:00
parent f5ce9cc087
commit 4632da1b05
14 changed files with 685 additions and 20 deletions
@@ -0,0 +1,268 @@
// TestTesaStarEDialog.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "..\..\..\Tesa\TesaStarE.h"
#include "TestTesaStarEDialog.h"
#include "afxdialogex.h"
extern CTesaStarE* g_pTesaStarE;
// TestTesaStarEDialog dialog
IMPLEMENT_DYNAMIC(TestTesaStarEDialog, CDialog)
TestTesaStarEDialog::TestTesaStarEDialog(CWnd* pParent /*=NULL*/)
: CDialog(TestTesaStarEDialog::IDD, pParent)
{
m_SendType=1;
}
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)
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()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}
void TestTesaStarEDialog::OnEnKillfocusEditMoveT_Deg()
{
// TODO: Add your control notification handler code here
}
void TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarMoveto()
{
// TODO: Add your control notification handler code here
}
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);
if (m_SendType==0)
{
char* stop;
BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0};
iSendDataLength=(csSendData.GetLength()+1)/3;
for(DWORD i=0;i<iSendDataLength;i++)
{
bSendData[i]=(BYTE)strtol(cSendData+i*3,&stop,16);
}
iWriteByte=g_pTesaStarE->m_pSerial->Send((const char*)bSendData,iSendDataLength);
}
else
{
//加上回车换行符
csSendData+=_T("\r");
cSendData=T2A(csSendData);
iSendDataLength=csSendData.GetLength();
iWriteByte=g_pTesaStarE->m_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(!g_pTesaStarE->m_pSerial->m_iRecvState && iRetrys<20)
{
iRetrys++;
Sleep(100);
}
if (g_pTesaStarE->m_pSerial->m_iRecvState)
{
if(g_pTesaStarE->m_pSerial->m_RecvData[0]==0)
{
g_pTesaStarE->m_pSerial->m_iRecvState=FALSE;
INT iRetrys2(0);
while(!g_pTesaStarE->m_pSerial->m_iRecvState && iRetrys2<60)
{
iRetrys2++;
Sleep(100);
}
m_OutMessage=_T("[Recv]");
memcpy(m_RecvData,g_pTesaStarE->m_pSerial->m_RecvData, g_pTesaStarE->m_pSerial->m_iRecvBytes);
iRecvBytes=g_pTesaStarE->m_pSerial->m_iRecvBytes;
TRACE1("====RECV%d====\r\n",g_pTesaStarE->m_pSerial->m_iRecvBytes);
TRACE3("%02X %02X %02X ",g_pTesaStarE->m_pSerial->m_RecvData[0],g_pTesaStarE->m_pSerial->m_RecvData[1],g_pTesaStarE->m_pSerial->m_RecvData[2]);
TRACE3("%02X %02X %02X ",g_pTesaStarE->m_pSerial->m_RecvData[3],g_pTesaStarE->m_pSerial->m_RecvData[4],g_pTesaStarE->m_pSerial->m_RecvData[5]);
TRACE3("%02X %02X %02X\r\n",g_pTesaStarE->m_pSerial->m_RecvData[6],g_pTesaStarE->m_pSerial->m_RecvData[7],g_pTesaStarE->m_pSerial->m_RecvData[8]);
for (INT i=0;i<iRecvBytes;i++)
{
if((BYTE)m_RecvData[i]>32)
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,g_pTesaStarE->m_pSerial->m_RecvData, g_pTesaStarE->m_pSerial->m_iRecvBytes);
iRecvBytes=g_pTesaStarE->m_pSerial->m_iRecvBytes;
TRACE1("====RECV%d====\r\n",g_pTesaStarE->m_pSerial->m_iRecvBytes);
TRACE3("%02X %02X %02X ",g_pTesaStarE->m_pSerial->m_RecvData[0],g_pTesaStarE->m_pSerial->m_RecvData[1],g_pTesaStarE->m_pSerial->m_RecvData[2]);
TRACE3("%02X %02X %02X ",g_pTesaStarE->m_pSerial->m_RecvData[3],g_pTesaStarE->m_pSerial->m_RecvData[4],g_pTesaStarE->m_pSerial->m_RecvData[5]);
TRACE3("%02X %02X %02X\r\n",g_pTesaStarE->m_pSerial->m_RecvData[6],g_pTesaStarE->m_pSerial->m_RecvData[7],g_pTesaStarE->m_pSerial->m_RecvData[8]);
for (INT i=0;i<iRecvBytes;i++)
{
if((BYTE)m_RecvData[i]>32)
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);
}
g_pTesaStarE->m_pSerial->m_iRecvState=FALSE;
}
else
{
m_StatusBar.SetText(_T("Time Out!"), 2, 0);
BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0x0d};
iWriteByte=g_pTesaStarE->m_pSerial->Send((const char*)bSendData,1);
}
iRecvBytes=g_pTesaStarE->m_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(""));
}
//=====================================================================================
//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);
}