int Action::SeconMotorBackToOrigin()
{
	d1000_home_move(SECOND_MOTOR, 50, ini->m_MotorSpinSpeed1/5, 10);
	if (d1000_check_done(SECOND_MOTOR))
	{
		d1000_start_t_move(SECOND_MOTOR, -2000, ini->m_MotorSpinSpeed1 / 40, ini->m_MotorSpinSpeed1 / 10, 50);
		while (!d1000_check_done(SECOND_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
		d1000_home_move(SECOND_MOTOR, ini->m_MotorSpinSpeed1/10, ini->m_MotorSpinSpeed1/5, 10);
		while (!d1000_check_done(SECOND_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
	}
	else
	{
		while (!d1000_check_done(SECOND_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
	}

	Sleep(100);
	d1000_start_t_move(SECOND_MOTOR, ini->m_MotorCompenstate1, ini->m_MotorSpinSpeed / 100, ini->m_MotorSpinSpeed / 10, 10);

	while (!d1000_check_done(SECOND_MOTOR))
	{
		if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
		continue;
	}

	d1000_set_command_pos(SECOND_MOTOR, 0);
	return 1;
}
int Action::FisrtMotorBackToOrigin()
{
	d1000_home_move(0, 50, -ini->m_MotorSpinSpeed / 10, 10);
	if (d1000_check_done(FIRST_MOTOR))
	{
		d1000_start_t_move(FIRST_MOTOR, ini->m_MotorSpinWaves, ini->m_MotorSpinSpeed / 100, ini->m_MotorSpinSpeed / 10, 10);
		while (!d1000_check_done(FIRST_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
		d1000_home_move(0, 50, ini->m_MotorSpinSpeed / 10, 10);
		while (!d1000_check_done(FIRST_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
	}
	else
	{
		while (!d1000_check_done(FIRST_MOTOR))
		{
			if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
			continue;
		}
	}
	Sleep(100);
	d1000_start_t_move(FIRST_MOTOR, ini->m_MotorCompenstate, ini->m_MotorSpinSpeed / 100, ini->m_MotorSpinSpeed / 10, 10);

	while (!d1000_check_done(FIRST_MOTOR))
	{
		if (::WaitForSingleObject(g_evtEStop.evt, 0) == WAIT_OBJECT_0) break;
		continue;
	}
	d1000_set_command_pos(0,0);
	return 1;
}
Example #3
0
/// <summary>
/// 单轴直线运动函数
/// </summary>
/// <param name="UseAxis">轴号:0:X   1:Y   2:Z   3:T</param>
/// <param name="UseStart"></param>
/// <param name="UseAcc"></param>
/// <param name="UseSpeed"></param>
/// <param name="UseMove"></param>运动方向: 
void PosController::axisMove( int UseAxis,  double UseStart, double UseAcc, double UseSpeed, double UseMove )
{
	if (!check_Val(UseStart, MAX_START_SPEED/*,  HT_Public.AxisName[this.UseAxis] + " 轴起始速度必须正数,且只允许[ 0-" + MaxStartSpeed.ToString().Trim() + " ]之间数值!"*/))
	{
		return;
	}
	if (!check_Val(UseAcc, MAX_ACC_SPEED/*, HT_Public.AxisName[this.UseAxis] + " 轴加减速度必须正数,且只允许[ 0-" + MaxAccSpeed.ToString().Trim() + " ]之间数值!"*/))
	{
		return;
	}
	if (!check_Val(UseSpeed, MAX_RUN_SPEED/*, HT_Public.AxisName[this.UseAxis] + " 轴运行速度必须为正数,且只允许[ 0-" + MaxRunSpeed.ToString().Trim() + " ]之间数值!"*/))
	{
		return;
	}

	// 	if (!check_Val(UseMove, 0/*, HT_Public.AxisName[this.UseAxis] + " 轴运行位移必须为正数!"*/))
	// 	{
	// 		return;
	// 	}

	double UseEncConst = PulseUnit[UseAxis];  //获取脉冲当量

	int start   = (int)(UseStart * UseEncConst);		    //启动速度
	double fAcc = (double)(UseAcc * UseEncConst);				//加速度
	int speed   = (int)(UseSpeed * UseEncConst);		    //运行速度
	int move    = (int)(UseMove * UseEncConst);			//运行步长

	if (!isConnected()) 
	{
		return;
	}
	//检测当量轴是否在运动
	if (!checkAxisDown(UseAxis)) 
	{
		return;
	}
	//检测轴是否到极限
	if (!check_Limit(UseAxis, UseMove,true)) 
	{
		//MessageBox(NULL, TEXT("警告!"), TEXT("已运动到极限!请反向运动!"),MB_OK);
		return;
	}
	//停止当前轴
	int Ret = d1000_immediate_stop(UseAxis);
	d1000_start_t_move(UseAxis, move, start, speed, fAcc);
}