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

📄 demodlg.cpp

📁 运动控制卡的详细开发资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//**************X轴驱动********************//
	

    //*************速度设定*******************//
		g_CtrlCard.Setup_Speed(1, m_nStartvX, m_nSpeedX, m_nAddX, m_nRatioX);
	//*************X轴驱动********************//		
		g_CtrlCard.Axis_Pmove(1, m_nPulseX);
	
	}

	if(m_bY ) 
	{
	//**************Y轴驱动********************//


    //*************速度设定*******************//
		g_CtrlCard.Setup_Speed(2, m_nStartvY, m_nSpeedY, m_nAddY, m_nRatioY);
	//*************Y轴驱动********************//		
		g_CtrlCard.Axis_Pmove(2, m_nPulseY);
	
	}
	if(m_bZ ) 
	{
	//**************Z轴驱动********************//

    //*************速度设定*******************//
		g_CtrlCard.Setup_Speed(3, m_nStartvZ, m_nSpeedZ, m_nAddZ, m_nRatioZ);
	//*************Z轴驱动********************//		
		g_CtrlCard.Axis_Pmove(3, m_nPulseZ);
	
	}
	if(m_bW ) 
	{
	//**************W轴驱动********************//

    //*************速度设定*******************//
		g_CtrlCard.Setup_Speed(4, m_nStartvW, m_nSpeedW, m_nAddW, m_nRatioW);
	//*************W轴驱动********************//		
		g_CtrlCard.Axis_Pmove(4, m_nPulseW);
	
	}

}

void CDEMODlg::OnButtonInpmove() 
{
	UpdateData();

	long Startv[]={m_nStartvX,m_nStartvY,m_nStartvZ,m_nStartvW};     //初始速度

	long Speed[]={m_nSpeedX,m_nSpeedY,m_nSpeedZ,m_nSpeedW};          //驱动速度

	long Add[]  ={m_nAddX,m_nAddY,m_nAddZ,m_nAddW};                  //加速度

	long Pulse[]={m_nPulseX,m_nPulseY,m_nPulseZ,m_nPulseW};          //轴的驱动脉冲数

	long Ratio[]={m_nRatioX,m_nRatioY,m_nRatioZ,m_nRatioW};          //倍率

/*****************速度设定判断************************

  当硬件版本号为1时,须范围设置,决定倍率

  初始速度和驱动速度的设置范围为(1×倍率~8000×倍率)

  加速度的设置范围为(125×倍率~125×8000×倍率)

  可通过修改倍率来改变设置范围

  当硬件版本号>1时,无需范围设置

  初始速度和驱动速度的设置范围为(1~1M)

  加速度的设置范围为(1×125~65536×125)

*****************************************************/
	if(g_CtrlCard.m_nHardwareVer==1)
	{
		for(int i=1; i<MAXAXIS+1; i++)
		{
			if(Startv[i-1]>8000*Ratio[i-1] || Startv[i-1]<Ratio[i-1])
			{
				if(MessageBox("起始速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
			if(Speed[i-1]>8000*Ratio[i-1] || Speed[i-1]<Ratio[i-1])
			{
				if(MessageBox("驱动速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
			if(Add[i-1]>125*8000*Ratio[i-1] || Add[i-1]<Ratio[i-1]*125)
			{
				if(MessageBox("加速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
		}
	}
	else
	{
		for(int i=1; i<MAXAXIS+1; i++)
		{
			if(Startv[i-1]>1000000 || Startv[i-1]<1)
			{
				if(MessageBox("起始速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
			if(Speed[i-1]>1000000 || Speed[i-1]<1)
			{
				if(MessageBox("驱动速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
			if(Add[i-1]>65536*125 || Add[i-1]<125)
			{
				if(MessageBox("加速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
					
					return;
			}
		}


	}



//*******************两轴插补********************//
	if(m_bX && m_bY && !m_bZ && !m_bW)                  //XY两轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move2(1, 2, Pulse[0], Pulse[1]);
	}
	else if(m_bX && !m_bY && m_bZ && !m_bW)             //XZ两轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move2(1, 3, Pulse[0], Pulse[2]);
	}
	else if(m_bX && !m_bY && !m_bZ && m_bW)             //XW两轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move2(1, 4, Pulse[0], Pulse[3]);
	}
	else if(!m_bX && m_bY && m_bZ && !m_bW)            //YZ两轴插补
	{

		g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);

		g_CtrlCard.Interp_Move2(2, 3, Pulse[1], Pulse[2]);
	}
	else if(!m_bX && m_bY && !m_bZ && m_bW)            //YW两轴插补
	{
		g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);

		g_CtrlCard.Interp_Move2(2, 4, Pulse[1], Pulse[3]);
	}
	else if(!m_bX && !m_bY && m_bZ && m_bW)            //ZW两轴插补
	{
		g_CtrlCard.Setup_Speed(3, Startv[2], Speed[2], Add[2], Ratio[2]);

		g_CtrlCard.Interp_Move2(3, 4, Pulse[2], Pulse[3]);
	}
//*******************三轴插补********************//
	else if(m_bX && m_bY && m_bZ && !m_bW)            //XYZ三轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move3(1, 2, 3, Pulse[0], Pulse[1], Pulse[2]);
	}
	else if(m_bX && m_bY && m_bZ && !m_bW)            //XYZ三轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move3(1, 2, 3, Pulse[0], Pulse[1], Pulse[2]);
	}
	else if(m_bX && m_bY && !m_bZ && m_bW)            //XYW三轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move3(1, 2, 4, Pulse[0], Pulse[1], Pulse[3]);
	}
	else if(m_bX && !m_bY && m_bZ && m_bW)            //XZW三轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move3(1, 3, 4, Pulse[0], Pulse[2], Pulse[3]);
	}
	else if(!m_bX && m_bY && m_bZ && m_bW)            //YZW三轴插补
	{

		g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);

		g_CtrlCard.Interp_Move3(2, 3, 4, Pulse[1], Pulse[2], Pulse[3]);
	}
//*******************四轴插补********************//
	else if(m_bX && m_bY && m_bZ && m_bW)            //XYZW四轴插补
	{
		g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);

		g_CtrlCard.Interp_Move4(Pulse[0], Pulse[1], Pulse[2], Pulse[3]);
	}
	else
	{
		MessageBox("请选择插补轴!","提示");
	}

}
/******************************
        停止按钮动作
		各轴立即停止
*******************************/
void CDEMODlg::OnButtonStop() 
{
	for (int i = 1; i<MAXAXIS; i++)
	{	
       g_CtrlCard.StopRun(i,0);   
    }
	
}
//********************实时获取状态*************************//
//     获取逻辑位置、实际位置、运行速度和驱动状态          //
//     读取正负限位、stop0、stop1信号                      //
//*********************************************************//
void CDEMODlg::OnTimer(UINT nIDEvent) 
{
	long log,act,spd;

	UINT nID1[]={IDC_POS_LOGX,IDC_POS_LOGY,IDC_POS_LOGZ,IDC_POS_LOGW};

	UINT nID2[]={IDC_POS_ACTX,IDC_POS_ACTY,IDC_POS_ACTZ,IDC_POS_ACTW};

	UINT nID3[]={IDC_RUNSPEED_X,IDC_RUNSPEED_Y,IDC_RUNSPEED_Z,IDC_RUNSPEED_W};

	UINT nID4[]={m_nRatioX,m_nRatioY,m_nRatioZ,m_nRatioW};

	CStatic *lbl;

	CString str;

	int status[4];

	for (int i=1; i<MAXAXIS+1; i++){

		g_CtrlCard.Get_CurrentInf(i,log,act,spd);    //读取逻辑位置、实际位置和运行速度

		//******显示逻辑位置*********//
		lbl=(CStatic*)GetDlgItem(nID1[i-1]);

		str.Format("%ld",log);

		lbl->SetWindowText(str);                      

		//******显示实际位置*********//
		lbl=(CStatic*)GetDlgItem(nID2[i-1]);

		str.Format("%ld",act);

		lbl->SetWindowText(str);

		//******显示运行速度*********//
		lbl=(CStatic*)GetDlgItem(nID3[i-1]);

		if(g_CtrlCard.m_nHardwareVer==1)   //硬件版本为1时,实际速度=获取的值×倍率
		{

			str.Format("%ld",spd*nID4[i-1]);

		}
		else                               //硬件版本>1时,无倍率设定,实际速度=获取的值
		{

			str.Format("%ld",spd);

		}

		lbl->SetWindowText(str);

		//******获取驱动状态*********//
		g_CtrlCard.Get_Status(i,status[i-1],0);

	}
//***********************信号检测******************************
//           X轴正限位-0            X轴负限位-1
//           X轴STOP0 -2            X轴STOP1 -3
//           Y轴正限位-4            Y轴负限位-5
//           Y轴STOP0 -6            Y轴STOP1 -7
//           Z轴正限位-8            Z轴负限位-9
//           Z轴STOP0 -10           Z轴STOP1 -11
//           W轴正限位-12           W轴负限位-13
//           W轴STOP0 -14           W轴STOP1 -15
	UINT nIDIN[]={   IDC_LIMIT_X,IDC_LIMIT_X2,             //X轴正负限位
					 IDC_STOP0_X,IDC_STOP1_X,              
		             IDC_LIMIT_Y,IDC_LIMIT_Y2,             //Y轴正负限位
					 IDC_STOP0_X,IDC_STOP1_X,
				     IDC_LIMIT_Z,IDC_LIMIT_Z2,             //Z轴正负限位
					 IDC_STOP0_Z,IDC_STOP1_Z,
					 IDC_LIMIT_W,IDC_LIMIT_W2,             //W轴正负限位
					 IDC_STOP0_W,IDC_STOP1_W }; 


	CButton *btn;

	int value;

	for (i=0; i<16; i++)
	{
		value=g_CtrlCard.Read_Input(i);                   //读取信号

		btn=(CButton*)GetDlgItem(nIDIN[i]);

		btn->SetCheck(value==0?1:0);
	}
//******************************************************************

	
	CDialog::OnTimer(nIDEvent);
}

void CDEMODlg::OnButtonIotest() 
{
	CIOTest dlg;

	dlg.DoModal();
	
}



void CDEMODlg::OnButtonBasepara() 
{
	CBaseParaSet dlg;

	dlg.DoModal();
	
}

void CDEMODlg::OnButtonClearpos() 
{
	for(int i=1; i<MAXAXIS+1; i++)
	{
		g_CtrlCard.Setup_Pos(i, 0, 0);    //逻辑位置设置为零

		g_CtrlCard.Setup_Pos(i, 0, 1);    //实际位置设置为零
	}
	
}

void CDEMODlg::OnDelay() 
{
	
	if ( g_CtrlCard.m_nHardwareVer ==1)
	{
		MessageBox("硬件版本号为1时无延时功能");

		return;
	}

	g_CtrlCard.Setup_Delay(m_nDelayTime);

	while(true)
	{
		m_bDelayStatus = true;

		if(g_CtrlCard.Get_DelayStatus()==0)
		{
			m_bDelayStatus = false;

			break;
		}
	}

	
	
}


⌨️ 快捷键说明

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