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

📄 testdlg.cpp

📁 850运动控制卡的详细开发资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			distance[0]=m_fObjX; distance[1]=m_fObjZ;distance[2]=m_fObjW;
		}
		if (axis[1] && axis[2] && axis[3]) 
		{
			homeaxis[0]=2; homeaxis[1]=3; homeaxis[2]=4;
			distance[0]=m_fObjY; distance[1]=m_fObjZ;distance[2]=m_fObjW;
		}
		result=work_move3(homeaxis[0],distance[0],homeaxis[1],distance[1],homeaxis[2],distance[2],ifRel?0:1,0,ActionFunction);				
	}
	else if (axis[0] && axis[1] && axis[2] && axis[3])
	{
		result=work_move4(m_fObjX,m_fObjY,m_fObjZ,m_fObjW,ifRel?0:1,0,ActionFunction);			
	}
	else
	{
		MessageBox("请选定轴!","提示");
		g_WorkStatus=NORUN;
		return;
	}

	if (result==-1)
		MessageBox("有禁止轴参与运动!","错误",MB_OK||MB_ICONSTOP);	
	else if (result==-2)
		MessageBox("软限位报警!","错误",MB_OK||MB_ICONSTOP);
	else if (result==-3)
		MessageBox("有错误停止!","提示",MB_OK||MB_ICONINFORMATION);
	else if (result==0)
		MessageBox("运动终止!","提示",MB_OK||MB_ICONSTOP);
	else if (result==1)
		MessageBox("运动结束!","提示",MB_OK||MB_ICONINFORMATION);
	
	g_WorkStatus=NORUN;
	
}

void CTestDlg::OnCheckAbsrel() 
{
	// TODO: Add your control notification handler code here
	ifRel=!ifRel;
	CButton *btn=(CButton*)GetDlgItem(IDC_CHECK_ABSREL);
	btn->SetWindowText(ifRel?"相对模式":"绝对模式");
	
}

void CTestDlg::OnButtonInp() 
{
	// TODO: Add your control notification handler code here
	if (g_WorkStatus==RUNNING) return;
	UpdateData(TRUE);
	int nID[]={IDC_CHECK_AXISX,IDC_CHECK_AXISY,IDC_CHECK_AXISZ,IDC_CHECK_AXISW};
	float d[]={m_fObjX,m_fObjY,m_fObjZ,m_fObjW};
	int axis[4],axisNum=0;
	float pos[4];
	int result;	
	CButton *btn;
	for (int i=0;i<4;i++)
	{
		btn=(CButton*)GetDlgItem(nID[i]);
		if (btn->GetCheck()==1)
		{
			axis[axisNum]=i+1;
			pos[axisNum]=d[i];
			axisNum++;		
		}
	}
    g_WorkStatus=RUNNING;
	if (axisNum<2) return;
	if (axisNum==2)
		result=work_inp2(axis[0],pos[0],axis[1],pos[1],ifRel?0:1,0,ActionFunction);
	else if (axisNum==3)
	{
		btn=(CButton*)GetDlgItem(nID[3]);
		if (btn->GetCheck()!=1)
		result=work_inp3(pos[0],pos[1],pos[2],ifRel?0:1,0,ActionFunction);
		else result=-4;
	}
	else if (axisNum==4)
		result=work_inp4(pos[0],pos[1],pos[2],pos[3],ifRel?0:1,0,ActionFunction);
	
	
	
	if (result==-1)
		MessageBox("有禁止轴参与运动!","错误",MB_OK||MB_ICONSTOP);	
	else if (result==-2)
		MessageBox("软限位报警!","错误",MB_OK||MB_ICONSTOP);
	else if (result==-3)
		MessageBox("有错误停止!","提示",MB_OK||MB_ICONINFORMATION);
	else if (result==-4)
		MessageBox("选取的插补轴错误!","提示",MB_OK||MB_ICONSTOP);
	else if (result==0)
		MessageBox("运动终止!","提示",MB_OK||MB_ICONSTOP);
	else if (result==1)
		MessageBox("运动结束!","提示",MB_OK||MB_ICONINFORMATION);
		
	g_WorkStatus=NORUN;
	
}

void CTestDlg::OnButtonContinue() 
{
	// TODO: Add your control notification handler code here
	if (g_WorkStatus==RUNNING) return;
	int result;
	BOOL axis[4]={FALSE,FALSE,FALSE,FALSE};
	float distance[4];
	CButton *btn;
	btn=(CButton*)GetDlgItem(IDC_CHECK_AXISX);
	if (btn->GetCheck()==1) axis[0]=TRUE;
	btn=(CButton*)GetDlgItem(IDC_CHECK_AXISY);
	if (btn->GetCheck()==1) axis[1]=TRUE;
	btn=(CButton*)GetDlgItem(IDC_CHECK_AXISZ);
	if (btn->GetCheck()==1) axis[2]=TRUE;
	btn=(CButton*)GetDlgItem(IDC_CHECK_AXISW);
	if (btn->GetCheck()==1) axis[3]=TRUE;
//	SetTimer(IDC_MAIN_TIMER,100,NULL);
	g_WorkStatus=RUNNING;
	if (axis[0] && !axis[1] && !axis[2] && !axis[3] ||
		axis[1] && !axis[0] && !axis[2] && !axis[3] ||
		axis[2] && !axis[0] && !axis[1] && !axis[3] ||
		axis[3] && !axis[0] && !axis[1] && !axis[2] )
	{
		int homeaxis;
		if (axis[0]) {homeaxis=1;}
		if (axis[1]) {homeaxis=2;}
		if (axis[2]) {homeaxis=3;}
		if (axis[3]) {homeaxis=4;}	
		result=continue_move1(homeaxis,0,0,ActionFunction);
	}
	else if (axis[0] && axis[1] && !axis[2] && !axis[3] ||
			 axis[0] && axis[2] && !axis[1] && !axis[3] ||
			 axis[0] && axis[3] && !axis[1] && !axis[2] ||
			 axis[1] && axis[2] && !axis[0] && !axis[3] ||
			 axis[1] && axis[3] && !axis[0] && !axis[2] ||
			 axis[2] && axis[3] && !axis[0] && !axis[1] )
	{
		int homeaxis[2];
		if (axis[0] && axis[1]) {homeaxis[0]=1; homeaxis[1]=2;}
		if (axis[0] && axis[2]) {homeaxis[0]=1; homeaxis[1]=3;}
		if (axis[0] && axis[3]) {homeaxis[0]=1; homeaxis[1]=4;}
		if (axis[1] && axis[2]) {homeaxis[0]=2; homeaxis[1]=3;}
		if (axis[1] && axis[3]) {homeaxis[0]=2; homeaxis[1]=4;}
		if (axis[2] && axis[3]) {homeaxis[0]=3; homeaxis[1]=4;}
		result=continue_move2(homeaxis[0],0,homeaxis[1],0,0,ActionFunction);
	}
	else if (axis[0] && axis[1] && axis[2] && !axis[3] ||
			 axis[0] && axis[1] && axis[3] && !axis[2] ||
			 axis[0] && axis[2] && axis[3] && !axis[1] ||
			 axis[1] && axis[2] && axis[3] && !axis[0] )
	{
		int homeaxis[3];
		if (axis[0] && axis[1] && axis[2]) 
		{
			homeaxis[0]=1; homeaxis[1]=2; homeaxis[2]=3;		
		}
		if (axis[0] && axis[1] && axis[3]) 
		{
			homeaxis[0]=1; homeaxis[1]=2; homeaxis[2]=4;
		}
		if (axis[0] && axis[2] && axis[3]) 
		{
			homeaxis[0]=1; homeaxis[1]=3; homeaxis[2]=4;
		}
		if (axis[1] && axis[2] && axis[3]) 
		{
			homeaxis[0]=2; homeaxis[1]=3; homeaxis[2]=4;
		}
		result=continue_move3(homeaxis[0],0,homeaxis[1],0,homeaxis[2],0,0,ActionFunction);
	}
	else if (axis[0] && axis[1] && axis[2] && axis[3])
	{
		result=continue_move4(0,0,0,0,0,ActionFunction);
	}
	else
	{
		MessageBox("请选定轴!","提示");
		g_WorkStatus=NORUN;
//		KillTimer(IDC_MAIN_TIMER);
		return;
	}

	if (result==-1)
		MessageBox("有禁止轴参与运动!","错误",MB_OK||MB_ICONSTOP);	
	else if (result==0)
		MessageBox("运动终止!","提示",MB_OK||MB_ICONSTOP);
	else if (result==-3)
		MessageBox("有错误停止!","提示",MB_OK||MB_ICONINFORMATION);
	
	g_WorkStatus=NORUN;	
//	KillTimer(IDC_MAIN_TIMER);
	
}

void CTestDlg::OnButtonInparc() 
{
	// TODO: Add your control notification handler code here
	if (g_WorkStatus==RUNNING) return;
	UpdateData(TRUE);
	int nID[]={IDC_CHECK_AXISX,IDC_CHECK_AXISY,IDC_CHECK_AXISZ,IDC_CHECK_AXISW};
	int inpID[2];
	float pos[6]={1,1,11,11,21,1};
	int n=0;
	CButton *btn;
	for (int i=0;i<4;i++)
	{
		btn=(CButton*)GetDlgItem(nID[i]);
		if (btn->GetCheck()==1)
		{
			inpID[n]=i+1;	
			n++;
			if (n>1) break;
		}
	}

	if (n!=2) return;
	int result;	
	g_WorkStatus=RUNNING;

	result=work_arc(inpID[0],inpID[1],pos,0,ActionFunction);
    	
	if (result==-1)
		MessageBox("有禁止轴参与运动!","错误",MB_OK||MB_ICONSTOP);	
	else if (result==-2)
		MessageBox("软限位报警!","错误",MB_OK||MB_ICONSTOP);
	else if (result==-3)
		MessageBox("有错误停止!","提示",MB_OK||MB_ICONINFORMATION);
	else if (result==-4)
		MessageBox("三点不能构成圆!","提示",MB_OK||MB_ICONINFORMATION);
	else if (result==-5)
		MessageBox("选取的插补轴不能进行插补!","错误",MB_OK||MB_ICONSTOP);
	else if (result==0)
		MessageBox("运动终止!","提示",MB_OK||MB_ICONSTOP);
	else if (result==1)
		MessageBox("运动结束!","提示",MB_OK||MB_ICONINFORMATION);
	
	
	g_WorkStatus=NORUN;	
	
}

void CTestDlg::OnButtonMovefree() 
{
	// TODO: Add your control notification handler code here
	if (g_WorkStatus==RUNNING) return;	
	UpdateData(TRUE);
	int nID[]={IDC_CHECK_AXISX,IDC_CHECK_AXISY,IDC_CHECK_AXISZ,IDC_CHECK_AXISW};
	float d[]={m_fObjX,m_fObjY,m_fObjZ,m_fObjW};
	int axis[4],axisNum=0;
	float pos[4];
	int result;	
	CButton *btn;
	for (int i=0;i<4;i++)
	{
		btn=(CButton*)GetDlgItem(nID[i]);
		if (btn->GetCheck()==1)
		{
			axis[axisNum]=i+1;
			pos[axisNum]=d[i];
			axisNum++;		
		}
	}

	if (axisNum==0) return;
	g_WorkStatus=RUNNING;
	if (axisNum==1)
		result=free_move1(axis[0],d[0],5,6,0.1,ifRel?0:1,ActionFunction);
	else if (axisNum==2)
		result=free_move2(axis[0],pos[0],5,6,0.1,axis[1],pos[1],4,5,0.1,ifRel?0:1,ActionFunction);
	else if (axisNum==3)
		result=free_move3(axis[0],pos[0],3,4,0.1,axis[1],pos[1],4,5,0.1,axis[2],pos[2],5,6,0.1,ifRel?0:1,ActionFunction);
	else if (axisNum==4)
		result=free_move4(pos[0],2,3,0.1,pos[1],3,4,0.2,pos[2],4,5,0.4,pos[3],5,6,0.3,ifRel?0:1,ActionFunction);
	    	
	if (result==-1)
		MessageBox("有禁止轴参与运动!","错误",MB_OK||MB_ICONSTOP);	
	else if (result==-2)
		MessageBox("软限位报警!","错误",MB_OK||MB_ICONSTOP);
	else if (result==-3)
		MessageBox("有错误停止!","提示",MB_OK||MB_ICONINFORMATION);
	else if (result==0)
		MessageBox("运动终止!","提示",MB_OK||MB_ICONSTOP);
	else if (result==1)
		MessageBox("运动结束!","提示",MB_OK||MB_ICONINFORMATION);
		
	g_WorkStatus=NORUN;
	
}

void CTestDlg::OnButtonStop() 
{
	// TODO: Add your control notification handler code here
	all_stop(0);
	
}

void CTestDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (!ifInit || nIDEvent!=IDC_MAIN_TIMER) return;

	

	int IO[12]={0,1,2,8,9,10,16,17,18,24,25,26};
	int IOID[12]={IDC_CHECK_LIMITX,IDC_CHECK_LIMITX2,IDC_CHECK_ORIGINX,
				  IDC_CHECK_LIMITY,IDC_CHECK_LIMITY2,IDC_CHECK_ORIGINY,
				  IDC_CHECK_LIMITZ,IDC_CHECK_LIMITZ2,IDC_CHECK_ORIGINZ,
				  IDC_CHECK_LIMITW,IDC_CHECK_LIMITW2,IDC_CHECK_ORIGINW};
	CButton *btn;
	for (int i=0; i<12; i++)
	{
		btn=(CButton*)GetDlgItem(IOID[i]);
		btn->SetCheck(get_input(IO[i])==0?1:0);
	}
	
	if(g_WorkStatus!=RUNNING)return;
	Update();
	CDialog::OnTimer(nIDEvent);
}

void CTestDlg::ActionFunction()
{

	static int count=0;
	
	if (count<1000 )
	{
		count++;

		return;
	}
	
	DoEvent();
}

void CTestDlg::OnCheckAxisx() 
{
	// TODO: Add your control notification handler code here
	CButton *btn=(CButton*)GetDlgItem(IDC_CHECK_AXISX);
	if (btn->GetCheck()==1)
		g_Axis[0]=1;	
	else
		g_Axis[0]=0;
	
}

void CTestDlg::OnCheckAxisy() 
{
	// TODO: Add your control notification handler code here
	CButton *btn=(CButton*)GetDlgItem(IDC_CHECK_AXISY);
	if (btn->GetCheck()==1)
		g_Axis[1]=2;	
	else
		g_Axis[1]=0;
	
}

void CTestDlg::OnCheckAxisz() 
{
	// TODO: Add your control notification handler code here
	CButton *btn=(CButton*)GetDlgItem(IDC_CHECK_AXISZ);
	if (btn->GetCheck()==1)
		g_Axis[2]=3;	
	else
		g_Axis[2]=0;
	
}

void CTestDlg::OnCheckAxisw() 
{
	// TODO: Add your control notification handler code here
	CButton *btn=(CButton*)GetDlgItem(IDC_CHECK_AXISW);
	if (btn->GetCheck()==1)
		g_Axis[3]=4;	
	else
		g_Axis[3]=0;
	
}

void CTestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	
    if( g_WorkStatus==RUNNING || ifHand ) return;//正忙中...
	
	switch( nChar)
	{
			
		default:
			break;
	}

	
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CTestDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if( g_WorkStatus==RUNNING || ifHand ) return;//正忙中...
	switch( nChar )
	{
		case VK_LEFT:
		case VK_RIGHT:			
		all_stop(0);
		return;
	}
	
	CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if( pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP  ){	
	
		if ( pMsg->wParam == VK_LEFT||
			 pMsg->wParam == VK_RIGHT)			 	
		all_stop(1);
		SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);	
		return TRUE;
	}
	
	switch ( pMsg->wParam )
	{
		case VK_RIGHT:	
			if( g_WorkStatus==RUNNING || ifHand ) break;//正忙中...		
			MouseDOWN(0x1000);	
			break;
		case VK_LEFT:	
			if( g_WorkStatus==RUNNING || ifHand ) break;//正忙中
			MouseDOWN(0x1001);	
			break;
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CTestDlg::Update()
{
	UpdateData(TRUE);

	m_fLogPosX=get_logical_pos(1,0);
	
	m_fLogPosY=get_logical_pos(2,0);

	m_fLogPosZ=get_logical_pos(3,0);

	m_fLogPosW=get_logical_pos(4,0);

	m_fFactPosX=get_fact_pos(1,0);

	m_fFactPosY=get_fact_pos(2,0);

	m_fFactPosZ=get_fact_pos(3,0);

	m_fFactPosW=get_fact_pos(4,0);

	m_fSpeedX=get_move_speed(1,0);

	m_fSpeedY=get_move_speed(2,0);

	m_fSpeedZ=get_move_speed(3,0);

	m_fSpeedW=get_move_speed(4,0);
	
	UpdateData(FALSE);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -