⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverdlg.cpp

📁 控制机器人完成螺丝刀插孔实验
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -