📄 serverdlg.cpp
字号:
m_eJoint5=Joint[3]/3.1415926*180.0;
m_eJoint6=Joint[2]/3.1415926*180.0;
m_eJoint7=Joint[1]/3.1415926*180.0;
// m_eJoint8=Joint[0]/3.1415926*180.0;
m_sldJoint1.SetPos(int((m_eJoint1+360.0)/720.0*1000.0));
m_sldJoint2.SetPos(int((m_eJoint2+165.0)/330.0*1000.0));
m_sldJoint3.SetPos(int((m_eJoint3+255.0)/510.0*1000.0));
m_sldJoint4.SetPos(int((m_eJoint4+137.0)/274.0*1000.0));
m_sldJoint5.SetPos(int((m_eJoint5+174.0)/348.0*1000.0));
m_sldJoint6.SetPos(int((m_eJoint6+91.0)/182.0*1000.0));
m_sldJoint7.SetPos(int((m_eJoint7+177.0)/354.0*1000.0));
m_sldJoint8.SetPos(int((m_eJoint8+1.0)/2.0*1000.0));
UpdateData(FALSE);
}
void CServerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int ID=((CSliderCtrl*)pScrollBar)->GetDlgCtrlID();
switch(ID) {
case IDC_SLIDER_JOINT1:
m_eJoint1=m_sldJoint1.GetPos()/1000.0*720.0-360.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT2:
m_eJoint2=m_sldJoint2.GetPos()/1000.0*330.0-165.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT3:
m_eJoint3=m_sldJoint3.GetPos()/1000.0*510.0-255.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT4:
m_eJoint4=m_sldJoint4.GetPos()/1000.0*274.0-137.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT5:
m_eJoint5=m_sldJoint5.GetPos()/1000.0*348.0-174.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT6:
m_eJoint6=m_sldJoint6.GetPos()/1000.0*182.0-91.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT7:
m_eJoint7=m_sldJoint7.GetPos()/1000.0*354.0-177.0;
UpdateData(FALSE);
break;
case IDC_SLIDER_JOINT8:
m_eJoint8=m_sldJoint8.GetPos()/1000.0*2.0-1.0;
UpdateData(FALSE);
break;
default:
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CServerDlg::Move()
{
ANGLE angle;
REAL32 vel[7];
double* temp=m_srvrDataSocket.m_pDataSocket->angle[row];
for(int i=0;i<7;i++)
vel[i]=0.02;
pa_set_vel(ARM0,VT_ONEVEL,vel);
angle.s1=temp[1];
angle.s2=temp[2];
angle.s3=temp[3];
angle.e1=temp[4];
angle.e2=temp[5];
angle.w1=temp[6];
angle.w2=temp[7];
/* angle.s1=0.0;
angle.s2=0.0;
angle.s3=0.0;
angle.e1=0.0;
angle.e2=0.0;
angle.w1=0.0;
angle.w2=0.5;
*/
pa_exe_axs(ARM0,S1|S2|S3|E1|E2|W1|W2,&angle,WM_WAIT);
pa_get_agl(ARM0,&angle);
TRACE("s1:%1f s2:%1f s3:%f e1:%1f e2:%1f w1:%1f w2:%1f",angle.s1,angle.s2,angle.s3,angle.e1,angle.e2,angle.w1,angle.w2);
row++;
Display(temp);
//AfxMessageBox("dddd");
}
void CServerDlg::GetJointValue()
{
ANGLE angle;
pa_get_agl(ARM0,&angle);
/*
m_srvrDataSocket.m_pDataSocket->backAngle[0]=angle.s1;
m_srvrDataSocket.m_pDataSocket->backAngle[1]=angle.s2;
m_srvrDataSocket.m_pDataSocket->backAngle[2]=angle.s3;
m_srvrDataSocket.m_pDataSocket->backAngle[3]=angle.e1;
m_srvrDataSocket.m_pDataSocket->backAngle[4]=angle.e2;
m_srvrDataSocket.m_pDataSocket->backAngle[5]=angle.w1;
m_srvrDataSocket.m_pDataSocket->backAngle[6]=angle.w2;
m_srvrDataSocket.m_pDataSocket->AsyncSelect(FD_WRITE);
*/
m_srvrBackDataSocket.m_backDataSocket->backAngle[0]=angle.s1;
m_srvrBackDataSocket.m_backDataSocket->backAngle[1]=angle.s2;
m_srvrBackDataSocket.m_backDataSocket->backAngle[2]=angle.s3;
m_srvrBackDataSocket.m_backDataSocket->backAngle[3]=angle.e1;
m_srvrBackDataSocket.m_backDataSocket->backAngle[4]=angle.e2;
m_srvrBackDataSocket.m_backDataSocket->backAngle[5]=angle.w1;
m_srvrBackDataSocket.m_backDataSocket->backAngle[6]=angle.w2;
m_srvrBackDataSocket.m_backDataSocket->AsyncSelect(FD_WRITE);
}
void CServerDlg::OnButton1()
{
// TODO: Add your control notification handler code here
if(m_mscom.GetPortOpen())
{
m_mscom.SetPortOpen(FALSE);
}
m_mscom.SetCommPort(1);//设置端口为COM1
m_mscom.SetSettings("9600,N,8,1");//设置波特率、奇偶校验、数据位、停止位
m_mscom.SetInBufferSize(1024);//输入缓冲区大小
m_mscom.SetOutBufferSize(1024);//输出缓冲区大小
m_mscom.SetInputLen(0);//设置从输入缓冲区中一次读出的字节数,0为全部
m_mscom.SetInputMode(1);//设置从输入缓冲区中读取数据的方式,0为以文本方式读取
m_mscom.SetInBufferCount(0);//设置当前输入缓冲区中待读取数据的个数,0为可将输入缓冲区清空
m_mscom.SetRThreshold(1);//设置获取接收缓冲区产生onComm事件的阈值,1为接收一个字符时
m_mscom.SetSThreshold(1);//设置获取发送缓冲区产生onComm事件的阈值,1为发送一个字符时
if(!m_mscom.GetPortOpen())
{
m_mscom.SetPortOpen(TRUE);
MessageBox("成功打开串口");
}
else
{
m_mscom.SetOutBufferCount(0);
}
}
void CServerDlg::OnButton2()
{
// TODO: Add your control notification handler code here
if(m_mscom.GetPortOpen())
{
m_mscom.SetPortOpen(FALSE);
MessageBox("成功关闭串口");
}
//m_mscom.SetPortOpen(FALSE);
}
BEGIN_EVENTSINK_MAP(CServerDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CServerDlg)
ON_EVENT(CServerDlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CServerDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
// VARIANT variant;
VARIANT variant1;
BYTE rxdata[1024];
long length,k;
COleSafeArray safearray1;
// char *str,*str1;
CString input2;
// int counts,i;
switch(m_mscom.GetCommEvent())
{
case 1:
m_show=senddata;
UpdateData(false);
break;
case 2:
variant1=m_mscom.GetInput();
safearray1=variant1;
length=safearray1.GetOneDimSize();
for(k=0;k<length;k++)
{
safearray1.GetElement(&k,rxdata+k);
}
for(k=0;k<length;k++)
{
BYTE a=*(char *)(rxdata+k);
input2.Format("%c",a);
m_receive+=input2;
}
UpdateData(false);
break;
default:
m_mscom.SetOutBufferCount(0);
break;
}
}
BOOL CServerDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
DWORD style=WS_VISIBLE|WS_CHILD;
if(!m_mscom.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1))
{
AfxMessageBox("创建MSComm控件失败!");
return -1;
}
return CDialog::Create(IDD, pParentWnd);
}
void CServerDlg::OnSendButton()
{
// TODO: Add your control notification handler code here
//CString senddata;
senddata="a";
m_mscom.SetOutput(COleVariant(senddata));
}
void CServerDlg::OnMotionButton()
{
// TODO: Add your control notification handler code here
float pi=3.1416;
float a[7][7]={{0.0,38.6,0.0,48.6,0.0,90.8,-45.6},
{0.0,30.0,0.0,40.0,0.0,90.4,0.0},{15.5,22.4,0.0,62.2,-81.8,90.4,-8.4},
{15.5,22.4,0.0,62.2,15.6,90.4,9.3},{15.5,22.4,0.0,62.2,-81.8,90.4,-8.4},
{15.5,38.9,0.0,87.1,-81.8,90.4,37.9},{13.2,28.6,0.0,80.8,-81.8,90.4,19.5}};
ANGLE angle;
//set default velocity
REAL32 vel[7];
vel[0]=0.1;
vel[1]=0.1;
vel[2]=0.1;
vel[3]=0.1;
vel[4]=0.1;
vel[5]=0.1;
vel[6]=0.1;
pa_set_vel(ARM0, VT_ONEVEL,vel);
for(int mmmm=0;mmmm<7;mmmm++){
for(int nnnn=0;nnnn<7;nnnn++){
a[mmmm][nnnn]=a[mmmm][nnnn]*pi/180;
}
}
//move to target position
angle.s1=a[0][0];
angle.s2=a[0][1];
angle.s3=a[0][2];
angle.e1=a[0][3];
angle.e2=a[0][4];
angle.w1=a[0][5];
angle.w2=a[0][6];
pa_exe_axs(ARM0,S1|S2|S3|E1|E2|W1|W2,&angle, WM_WAIT);
AfxMessageBox("1",MB_OK|MB_ICONQUESTION);
// REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
pa_mov_XYZ(ARM0,-100.0,23.0,110.0,WM_WAIT);
AfxMessageBox("2",MB_OK|MB_ICONQUESTION);
succeed=pa_mov_XYZ(ARM0,0.0,0.0,-70.0,WM_WAIT);
if(succeed==0)
{
senddata="a";
m_mscom.SetOutput(COleVariant(senddata));
}
AfxMessageBox("3",MB_OK|MB_ICONQUESTION);
pa_mov_XYZ(ARM0,0.0,0.0,90.0,WM_WAIT);
AfxMessageBox("4",MB_OK|MB_ICONQUESTION);
pa_mov_XYZ(ARM0,21.8,100.0,0.0,WM_WAIT);
AfxMessageBox("5",MB_OK|MB_ICONQUESTION);
pa_mov_XYZ(ARM0,0.0,0.0,-15.0,WM_WAIT);
AfxMessageBox("6",MB_OK|MB_ICONQUESTION);
succeed=pa_mov_XYZ(ARM0,0.0,0.0,-130.0,WM_WAIT);
if(succeed==0)
{
senddata="c";
m_mscom.SetOutput(COleVariant(senddata));
}
AfxMessageBox("7",MB_OK|MB_ICONQUESTION);
if(m_receive=="d")
{
pa_mov_XYZ(ARM0,0.0,0.0,100.0,WM_WAIT);
}
AfxMessageBox("8",MB_OK|MB_ICONQUESTION);
OnGohome();
}
void CServerDlg::OnLeftButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
pa_mov_XYZ(ARM0,0.0,-m_position,0.0,WM_WAIT);
}
void CServerDlg::OnRightButton4()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
succeed=pa_mov_XYZ(ARM0,0.0,m_position,0.0,WM_WAIT);
}
void CServerDlg::OnUpButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
succeed=pa_mov_XYZ(ARM0,0.0,0.0,m_position,WM_WAIT);
}
void CServerDlg::OnDownButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
succeed=pa_mov_XYZ(ARM0,0.0,0.0,-m_position,WM_WAIT);
}
void CServerDlg::OnFrontButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
succeed=pa_mov_XYZ(ARM0,m_position,0.0,0.0,WM_WAIT);
}
void CServerDlg::OnBackButton8()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
REAL32 vel[7];
vel[0]=20.0;
vel[1]=20.0;
vel[2]=20.0;
vel[3]=20.0;
vel[4]=20.0;
vel[5]=20.0;
vel[6]=20.0;
pa_set_vel(ARM0, VT_XYZVEL,vel);
succeed=pa_mov_XYZ(ARM0,-m_position,0.0,0.0,WM_WAIT);
}
void CServerDlg::OnSendleggerButton()
{
// TODO: Add your control notification handler code here
if(succeed==0)
{
senddata="a";
m_mscom.SetOutput(COleVariant(senddata));
AfxMessageBox("字符a已经发送!",MB_OK|MB_ICONQUESTION);
}
}
void CServerDlg::OnSendcButton()
{
// TODO: Add your control notification handler code here
if(succeed==0)
{
senddata="c";
m_mscom.SetOutput(COleVariant(senddata));
AfxMessageBox("字符c已经发送!",MB_OK|MB_ICONQUESTION);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -