307 lines
9.1 KiB
C++
307 lines
9.1 KiB
C++
// 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;i<iSendDataLength;i++)
|
|
{
|
|
bSendData[i]=(BYTE)strtol(cSendData+i*3,&stop,16);
|
|
}
|
|
iWriteByte=pSerial->Send((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;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,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;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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
|