Курсовая работа: Применение автоматизированного адаптивного интерферометра для исследования наносмещений микрообъектов
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSerialGateTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSerialGateTestDlg::OnOpen()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_port == 0 || m_rate == 0)
{
MessageBox("Not correct data","Error", MB_ICONERROR);
return;;
}
bool b = sg.Open(m_port, m_rate);
if(b == false)
{
MessageBox("Can`t open Port","Error", MB_ICONERROR);
return;;
}
else
{
MessageBox("Port open OK","Info", MB_ICONINFORMATION);
}
SetTimer(1, 1000, NULL);
}
void CSerialGateTestDlg::OnTimer(UINT nIDEvent)
{
if (key==0)
{// TODO: Add your message handler code here and/or call default
char buff[128];
int rcv = sg.Recv(buff, sizeof(buff));
this->m_recievecontr.SetWindowText("");
if(rcv > 0)
{
for(int i = 0; i< rcv; i++)
this->m_recieve += buff[i];
UpdateData(false);
}
}
CDialog::OnTimer(nIDEvent);
}
void CSerialGateTestDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int len = this->m_send.GetLength();
if(len > 0)
{
char* LocBuf = m_send.GetBuffer(128);
sg.Send(LocBuf, len);
m_send.ReleaseBuffer();
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
}
}
void CSerialGateTestDlg::OnButton3()
{
UpdateData(true);
int len = this->m_send.GetLength();
if(len > 0)
{
char ent=0x01;
char* ent2 = &ent;
sg.Send(ent2, 1);
char* LocBuf = m_send.GetBuffer(128);
sg.Send(LocBuf, len);
m_send.ReleaseBuffer();
}
}
void CSerialGateTestDlg::OnOnSetaxsis() //выбор оси
{
UpdateData(true);
int popytka=0;
//изменение активного мотора
char ctrlkey=0x01;
char* ctrlkey2 = &ctrlkey;
sg.Send(ctrlkey2, 1);
int len=1;
char* LocBuf = m_axsis.GetBuffer(128);
sg.Send(LocBuf, len);
m_send.ReleaseBuffer();
CString tp="tp";
char* LocBuf2 = tp.GetBuffer(128);
sg.Send(LocBuf2, 2);
tp.ReleaseBuffer();
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
}
void CSerialGateTestDlg::OnOnSetacsel() //установить ускорение
{
UpdateData(true);
CString sa="sa";
char* LocBuf2 = sa.GetBuffer(128);
sg.Send(LocBuf2, 2);
sa.ReleaseBuffer();
int len = this->m_asel.GetLength();
if(len > 0)
{
char* LocBuf = m_asel.GetBuffer(128);
sg.Send(LocBuf, len);
m_asel.ReleaseBuffer();
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
//проверкаtl
CString tl="tl";
char* LocBuf3 = tl.GetBuffer(128);
sg.Send(LocBuf3, 2);
tl.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
//m_recievecontr.SetWindowText("0");
//CEdit::Clear;
//UpdateData(false);
}
}
void CSerialGateTestDlg::OnOnSetvelos()
{
UpdateData(true);
CString sv="sv";
char* LocBuf2 = sv.GetBuffer(128);
sg.Send(LocBuf2, 2);
sv.ReleaseBuffer();
int len = this->m_vel.GetLength();
if(len > 0)
{
char* LocBuf = m_vel.GetBuffer(128);
sg.Send(LocBuf, len);
m_vel.ReleaseBuffer();
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
//проверкаty
CString ty="ty";
char* LocBuf3 = ty.GetBuffer(128);
sg.Send(LocBuf3, 2);
ty.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
}
}
void CSerialGateTestDlg::OnOnMotroon()
{
UpdateData(true); //включить мотор
CString mn="mn";
char* LocBuf2 = mn.GetBuffer(128);
sg.Send(LocBuf2, 2);
mn.ReleaseBuffer();// TODO: Add your control notification handler code here
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
}
void CSerialGateTestDlg::OnOnMotoroff() //выключить мотор
{
CString mf="mf";
char* LocBuf2 = mf.GetBuffer(128);
sg.Send(LocBuf2, 2);
mf.ReleaseBuffer();// TODO: Add your control notification handler code here
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
}
void CSerialGateTestDlg::OnOnMr() //перемещение
{
UpdateData(true);
CString mr="mr";
char* LocBuf2 = mr.GetBuffer(128);
sg.Send(LocBuf2, 2);
mr.ReleaseBuffer();
int len = this->m_gomr.GetLength();
if(len > 0)
{
char* LocBuf = m_gomr.GetBuffer(128);
sg.Send(LocBuf, len);
m_gomr.ReleaseBuffer();
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
//проверкаty
CString tp="tp";
char* LocBuf3 = tp.GetBuffer(128);
sg.Send(LocBuf3, 2);
tp.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
//m_recieve.Clear();
}
}
void CSerialGateTestDlg::OnOnGo() //////////////////кнопка GO//////////////////////
{
UpdateData(true);
key=1;
int axis=0;
int res;
TP0:
//изменение активного мотора
char ctrlkey=0x01;
char* ctrlkey2 = &ctrlkey;
sg.Send(ctrlkey2, 1);
int len=1;
char axsis0='0';
char* axsis0_2 = &axsis0;
sg.Send(axsis0_2, 1);
CString tp="tp";
char* LocBuf2 = tp.GetBuffer(128);
sg.Send(LocBuf2, 2);
tp.ReleaseBuffer();
//enter
char ent=0x0D;
char* ent2 = &ent;
sg.Send(ent2, 1);
Sleep(700); //организуем паузу чтобы контроллер успел ответить
//считаем текущую позицию//
char buff[128];
int rcv = sg.Recv(buff, sizeof(buff));
int elmbuff=rcv-1;
buff[rcv]=0;
CString str;
for(int i = 0; i< rcv; i++)
str += buff[i];
char* j = strchr(buff, '+');
res = atoi(j);
if (j==0)
{
j = strchr(buff, '-');
res = atoi(j); //в res здесь храниться текущие положение
}
CString mraxsis0_2; //сюда записывается занчение е окошка edit axsis0
GetDlgItemText(IDC_MRAXSIS0,mraxsis0_2);
int posnum0=atoi(mraxsis0_2);
int posnum0_mr=res-posnum0/2;
CString mraxsis0_mr;
mraxsis0_mr =itoa(posnum0_mr,mraxsis0_mr.GetBuffer(10),10);
//выполним перемещение на нулевую позицию//
CString mr="MA";
char* LocBuf8 = mr.GetBuffer(128);
sg.Send(LocBuf8, 2);
mr.ReleaseBuffer();
len=mraxsis0_mr.GetLength();
char* LocBuf9 = mraxsis0_mr.GetBuffer(128);
sg.Send(LocBuf9, len);
mraxsis0_mr.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
int gto0=posnum0_mr;
int posicino00=res;
Sleep(400);
TP1:
//изменение активного мотора
sg.Send(ctrlkey2, 1);
len=1;
char axsis1='1';
char* axsis1_2 = &axsis1;
sg.Send(axsis1_2, 1);
tp="tp";
LocBuf2 = tp.GetBuffer(128);
sg.Send(LocBuf2, 2);
tp.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
Sleep(700);
//организуем паузу чтобы контроллер успел ответить
//считаем текущую позицию//
char buff2[128];
rcv = sg.Recv(buff2, sizeof(buff2));
elmbuff=rcv-1;
buff2[rcv]=0;
CString str2;
for(i = 0; i< rcv; i++)
str2 += buff2[i];
j = strchr(buff2, '+');
res = atoi(j);
if (j==0)
{
j = strchr(buff2, '-');
res = atoi(j); //в res здесь храниться текущие положение
}
CString mraxsis1_2; //сюда записывается занчение е окошка edit axsis0
GetDlgItemText(IDC_MRAXSIS1,mraxsis1_2);
int posnum1=atoi(mraxsis1_2);
int posnum1_mr=res-posnum1/2;
CString mraxsis1_mr;
mraxsis1_mr =itoa(posnum1_mr,mraxsis1_mr.GetBuffer(10),10);
//выполним перемещение на нулевую позицию//
mr="MA";
LocBuf8 = mr.GetBuffer(128);
sg.Send(LocBuf8, 2);
mr.ReleaseBuffer();
len=mraxsis1_mr.GetLength();
LocBuf9 = mraxsis1_mr.GetBuffer(128);
sg.Send(LocBuf9, len);
mraxsis1_mr.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
int gto1=posnum1_mr;
int posicino01=res;
Sleep(130);
int pos01=gto1;
int pos00=gto0;
int modul;
do
{
Sleep(400);
//изменение активного мотора
sg.Send(ctrlkey2, 1);
sg.Send(axsis0_2, 1);
tp="tp";
LocBuf2 = tp.GetBuffer(128);
sg.Send(LocBuf2, 2);
tp.ReleaseBuffer();
//enter
sg.Send(ent2, 1);
Sleep(800); //организуем паузу чтобы контроллер успел ответить
//считаем текущую позицию//
CString str;
char buff[128];
rcv = sg.Recv(buff, sizeof(buff));
if(rcv > 0)
elmbuff=rcv-1;