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

📄 demo1dlg.cpp

📁 自动化过程中用到的运动控制器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	GetDlgItem(IDC_STATIC_XAXES)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_XLOWSPEED)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_XHIGHSPEED)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_XACCEL)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_XSTEP)->ShowWindow(iStatus);

	GetDlgItem(IDC_STATIC_YAXES)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_YLOWSPEED)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_YHIGHSPEED)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_YACCEL)->ShowWindow(iStatus);
	GetDlgItem(IDC_STATIC_YSTEP)->ShowWindow(iStatus);

	GetDlgItem(IDC_RADIO_AXES1)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_AXES2)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_XAXES)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_YAXES)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_CON)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_FAST)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_PMOVE)->ShowWindow(iStatus);
	GetDlgItem(IDC_RADIO_VMOVE)->ShowWindow(iStatus);

	GetDlgItem(IDC_GROUP_XYAXES)->ShowWindow(iStatus);
	GetDlgItem(IDC_GROUP_AXESNUM)->ShowWindow(iStatus);
	GetDlgItem(IDC_GROUP_SPEEDTYPE)->ShowWindow(iStatus);
	GetDlgItem(IDC_GROUP_MOVETYPE)->ShowWindow(iStatus);

	GetDlgItem(IDC_CHK_IP)->ShowWindow(iStatus);

	////////////////////////////////////////////////////
	//选择了Tab2(圆弧运动参数设定)
	GetDlgItem(IDC_STATIC_ARC_XAXES)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_YAXES)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_VLOWSPEED)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_VHIGHSPEED)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_VACCEL)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_XCEN)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_YCEN)->ShowWindow(iStatus1);
	GetDlgItem(IDC_STATIC_ARC_R)->ShowWindow(iStatus1);

	GetDlgItem(IDC_EDIT_ARC_XAXES)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_YAXES)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_VLOWSPEED)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_VHIGHSPEED)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_VACCEL)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_XCEN)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_YCEN)->ShowWindow(iStatus1);
	GetDlgItem(IDC_EDIT_ARC_R)->ShowWindow(iStatus1);

	GetDlgItem(IDC_GROUP_ARC_SPEEDTYPE)->ShowWindow(iStatus1);
	GetDlgItem(IDC_RADIO_ARC_CON)->ShowWindow(iStatus1);
	GetDlgItem(IDC_RADIO_ARC_FAST)->ShowWindow(iStatus1);
}

void CDemo1Dlg::OnRadioXaxes() 
{
	// TODO: Add your control notification handler code here
	m_iAxes=IDC_RADIO_XAXES;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioYaxes() 
{
	// TODO: Add your control notification handler code here
	m_iAxes=IDC_RADIO_YAXES;
	SetRadioButton();
}

///////////////////////////////////
//设置单选按钮状态
void CDemo1Dlg::SetRadioButton()
{
	CheckRadioButton(IDC_RADIO_XAXES,IDC_RADIO_YAXES,m_iAxes);
	CheckRadioButton(IDC_RADIO_CON,IDC_RADIO_FAST,m_iConFast);
	CheckRadioButton(IDC_RADIO_PMOVE,IDC_RADIO_VMOVE,m_iPVMove);
	CheckRadioButton(IDC_RADIO_AXES1,IDC_RADIO_AXES2,m_iAxesNum);
	CheckRadioButton(IDC_RADIO_ARC_CON,IDC_RADIO_ARC_FAST,m_iArcConFast);
}

void CDemo1Dlg::OnRadioCon() 
{
	// TODO: Add your control notification handler code here
	m_iConFast=IDC_RADIO_CON;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioFast() 
{
	// TODO: Add your control notification handler code here
	m_iConFast=IDC_RADIO_FAST;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioPmove() 
{
	// TODO: Add your control notification handler code here
	m_iPVMove=IDC_RADIO_PMOVE;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioVmove() 
{
	// TODO: Add your control notification handler code here
	m_iPVMove=IDC_RADIO_VMOVE;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioAxes1() 
{
	// TODO: Add your control notification handler code here
	m_iAxesNum=IDC_RADIO_AXES1;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioAxes2() 
{
	// TODO: Add your control notification handler code here
	m_iAxesNum=IDC_RADIO_AXES2;
	SetRadioButton();
}

////////////////////////////////
//初始化运动参数设定
void CDemo1Dlg::InitParam()
{
	m_iAxes=IDC_RADIO_XAXES;	//以X轴为单轴
	m_iConFast=IDC_RADIO_CON;	//常速运动
	m_iPVMove=IDC_RADIO_PMOVE;	//点位运动
	m_iAxesNum=IDC_RADIO_AXES1;	//单轴运动
	
	m_iArcConFast=IDC_RADIO_ARC_CON;	//圆弧运动为常速运动

	m_sXAxes="1";				//X轴参数
	m_sXLowSpeed="2000";
	m_sXHighSpeed="4000";
	m_sXAccel="2000";
	m_sXStep="4000";

	m_sYAxes="2";				//Y轴参数
	m_sYLowSpeed="2000";
	m_sYHighSpeed="4000";
	m_sYAccel="2000";
	m_sYStep="4000";

	m_sArcXAxes="1";			//圆弧运动参数
	m_sArcYAxes="2";
	m_sArcVLowSpeed="2000";
	m_sArcVHighSpeed="4000";
	m_sArcVAccel="2000";
	m_sArcXCen="2000";
	m_sArcYCen="0";
	m_sArcR="360";

	UpdateData(FALSE);
}

void CDemo1Dlg::OnBtnStartmove() 
{
	// TODO: Add your control notification handler code here
	int ChX,ChY;
	int StepX,StepY;
	int DirX,DirY;
	int iSelect;

	long CenX,CenY;
	float Angle;

	//////////////////////////////////////////
	//设置绘图比例
	CString cStr="1";
	m_cG.GetDlgItemText(IDC_EDIT_FACTOR,cStr);
	m_cG.m_lfFactor=atof(cStr);

	//////////////////////////////////////////
	//读取运动参数
	UpdateData(TRUE);

	if(m_bBatch) m_cDll.DmcSetBatchProcessFlag(1);	//批处理模式
	else m_cDll.DmcSetBatchProcessFlag(0);
	
	iSelect=m_cTabSet.GetCurSel();
	if(iSelect==0)	//直线运动
	{
		ChX=atoi(m_sXAxes);	ChY=atoi(m_sYAxes);
		StepX=atoi(m_sXStep);	StepY=atoi(m_sYStep);
		if(StepX>=0)DirX=1;
			else DirX=-1;
		if(StepY>=0)DirY=1;
			else DirY=-1;

		m_cDll.set_conspeed(ChX,atoi(m_sXLowSpeed));
		m_cDll.set_conspeed(ChY,atoi(m_sYLowSpeed));

		m_cDll.set_profile(ChX,atoi(m_sXLowSpeed),atoi(m_sXHighSpeed),atoi(m_sXAccel));
		m_cDll.set_profile(ChY,atoi(m_sYLowSpeed),atoi(m_sYHighSpeed),atoi(m_sYAccel));

		if(m_iConFast==IDC_RADIO_CON)
		{
			if(m_iPVMove==IDC_RADIO_PMOVE)
			{
				if(m_iAxesNum==IDC_RADIO_AXES1)
				{
					if(m_iAxes==IDC_RADIO_XAXES)
						m_cDll.con_pmove(ChX,StepX);
					else
						m_cDll.con_pmove(ChY,StepY);
				}
				else
				{
					if(m_bIP) m_cDll.con_line2(ChX,StepX,ChY,StepY);
					else m_cDll.con_pmove2(ChX,StepX,ChY,StepY);
				}
			}
			else
			{
				if(m_iAxesNum==IDC_RADIO_AXES1)
				{
					if(m_iAxes==IDC_RADIO_XAXES)
						m_cDll.con_vmove(ChX,DirX);
					else
						m_cDll.con_vmove(ChY,DirY);
				}
				else
				{
					if(m_bIP) m_cDll.con_line2(ChX,StepX,ChY,StepY);
					else m_cDll.con_vmove2(ChX,DirX,ChY,DirY);
				}
			}
		}
		else
		{
			if(m_iPVMove==IDC_RADIO_PMOVE)
			{
				if(m_iAxesNum==IDC_RADIO_AXES1)
				{
					if(m_iAxes==IDC_RADIO_XAXES)
						m_cDll.fast_pmove(ChX,StepX);
					else
						m_cDll.fast_pmove(ChY,StepY);
				}
				else
				{
					if(m_bIP) m_cDll.fast_line2(ChX,StepX,ChY,StepY);
					else m_cDll.fast_pmove2(ChX,StepX,ChY,StepY);
				}
			}
			else
			{
				if(m_iAxesNum==IDC_RADIO_AXES1)
				{
					if(m_iAxes==IDC_RADIO_XAXES)
						m_cDll.fast_vmove(ChX,DirX);
					else
					{
						m_cDll.fast_vmove(ChY,DirY);
					}
				}
				else
				{
					if(m_bIP) m_cDll.fast_line2(ChX,StepX,ChY,StepY);
					else m_cDll.fast_vmove2(ChX,DirX,ChY,DirY);
				}
			}
		}
	}
	else	//圆弧运动
	{
		m_cDll.set_vector_conspeed(atoi(m_sArcVLowSpeed));
		m_cDll.set_vector_profile(atof(m_sArcVLowSpeed),atof(m_sArcVHighSpeed),atof(m_sArcVAccel));

		ChX=atoi(m_sArcXAxes);	ChY=atoi(m_sArcYAxes);
		CenX=atol(m_sArcXCen);	CenY=atol(m_sArcYCen);
		Angle=(float)atof(m_sArcR);

		if(m_iArcConFast==IDC_RADIO_ARC_CON)
		{
			m_cDll.arc_center(ChX,ChY,CenX,CenY,Angle);
		}
		else
		{
			m_cDll.fast_arc_center(ChX,ChY,CenX,CenY,Angle);
		}
	}
}

void CDemo1Dlg::OnBtnSuddenstop() 
{
	// TODO: Add your control notification handler code here
	m_cDll.sudden_stop(atoi(m_sXAxes));
	m_cDll.sudden_stop(atoi(m_sYAxes));
}

void CDemo1Dlg::OnBtnDescendstop() 
{
	// TODO: Add your control notification handler code here
	m_cDll.decel_stop(atoi(m_sXAxes));
	m_cDll.decel_stop(atoi(m_sYAxes));
}

BOOL CDemo1Dlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	KillTimer(1);
	return CDialog::DestroyWindow();
}

void CDemo1Dlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	long PosX,PosY;
	CString sMsg;
	int iErr[10],i;

	m_cDll.get_abs_pos(atoi(m_sXAxes),&PosX);	//获取X轴位置
	m_cDll.get_abs_pos(atoi(m_sYAxes),&PosY);	//获取Y轴位置
	m_cG.LineToPos(PosX,PosY);			//画线
	
	for(i=1;i<11;i++)
		iErr[i-1]=m_cDll.DmcGetError(i);		//读取错误代码
	sMsg.Format("Err: %d  %d  %d  %d  %d  %d  %d  %d  %d  %d"
		,iErr[0],iErr[1],iErr[2],iErr[3],iErr[4]
		,iErr[5],iErr[6],iErr[7],iErr[8],iErr[9]);
	GetDlgItem(IDC_STATIC_MSG)->SetWindowText(sMsg);
										//显示错误代码

	CDialog::OnTimer(nIDEvent);
}

void CDemo1Dlg::OnBtnReset() 
{
	// TODO: Add your control notification handler code here
	m_cDll.reset_pos(atoi(m_sXAxes));
	m_cDll.reset_pos(atoi(m_sYAxes));
}

void CDemo1Dlg::OnRadioArcCon() 
{
	// TODO: Add your control notification handler code here
	m_iArcConFast=IDC_RADIO_ARC_CON;
	SetRadioButton();
}

void CDemo1Dlg::OnRadioArcFast() 
{
	// TODO: Add your control notification handler code here
	m_iArcConFast=IDC_RADIO_ARC_FAST;
	SetRadioButton();
}

⌨️ 快捷键说明

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