public static void moveEventHandle() { while (started) { if (goHomeFlag != 0) { if (startGoHome != 0) { if (NO_ORG == startSearchHome(ref mAxis[X])) { // AfxMessageBox(_T("X轴没有找到原点!"), MB_OK, MB_ICONEXCLAMATION); //m_axis[0].m_home_flag=false; Console.WriteLine("X轴没有找到原点"); } else { delayTime(100); RFIDControl.dmc_write_sevon_pin(0, 0, LOW); singleAxisMove(ref mAxis[X], (long)(-42 * line_coefficient), ABS_MODE); while (RFIDControl.dmc_check_done(mAxis[X].m_card_num, mAxis[X].m_axis_num) == RUN) { ; } RFIDControl.dmc_write_sevon_pin(0, 0, HIGH); delayTime(100); RFIDControl.dmc_set_position(mAxis[X].m_card_num, mAxis[X].m_axis_num, 0); //设置零点 RFIDControl.dmc_set_encoder(0, 0, 0); //设置初始值为0 } ; //m_axis[0].m_home_flag=true; } if (startGoHome != 0) { if (NO_ORG == startSearchHome(ref mAxis[Y])) { // AfxMessageBox(_T("U轴没有找到原点!"), MB_OK, MB_ICONEXCLAMATION); Console.WriteLine("U轴没有找到原点"); } else { delayTime(100); RFIDControl.dmc_write_sevon_pin(0, 1, LOW); singleAxisMove(ref mAxis[Y], (long)(820 * cicle_coefficient), ABS_MODE); while (RFIDControl.dmc_check_done(mAxis[Y].m_card_num, mAxis[Y].m_axis_num) == RUN) { ; } RFIDControl.dmc_write_sevon_pin(0, 1, HIGH); delayTime(100); RFIDControl.dmc_set_position(mAxis[Y].m_card_num, mAxis[Y].m_axis_num, 0); //设置零点 RFIDControl.dmc_set_encoder(0, 1, 0); //设置初始值为0 } } delayTime(100); startGoHome = 0; goHomeFlag = 0; } } }
public static ushort startSearchHome(ref AxisInfo axisInfo) { ulong axisStatus; ushort orignCount = 0; axisInfo.m_acc_time = 0.1; axisInfo.m_dcc_time = 0.1; orign_begin: axisInfo.m_home_flag = 0; RFIDControl.dmc_set_home_pin_logic(axisInfo.m_card_num, axisInfo.m_axis_num, LOW, 0); //原点信号 低电平有效 RFIDControl.dmc_set_pulse_outmode(axisInfo.m_card_num, axisInfo.m_axis_num, axisInfo.m_pulse_mode); //设置脉冲输出模式 RFIDControl.dmc_set_profile(axisInfo.m_card_num, axisInfo.m_axis_num, axisInfo.m_speed_min_home, axisInfo.m_speed_max_home, axisInfo.m_acc_time, axisInfo.m_dcc_time, 500); //设置速度曲线 RFIDControl.dmc_set_homemode(axisInfo.m_card_num, axisInfo.m_axis_num, (ushort)axisInfo.m_home_dir, 1, (ushort)axisInfo.m_home_mode, 0); //设置回零方式 反向回原点 orignCount++; axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num); //读取轴的状态 if (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) != 0) //开始回原点时正在原点位置上 { // dmc_set_profile(m_axis->m_card_num,m_axis->m_axis_num,m_axis->m_speed_min_home,m_axis->m_speed_max_home,m_axis->m_acc_time,m_axis->m_dcc_time,500);//设置速度曲线 RFIDControl.dmc_vmove(axisInfo.m_card_num, axisInfo.m_axis_num, (ushort)(axisInfo.m_home_dir == MoveDir.FOR_WORD ? MoveDir.BACK_WORD : MoveDir.FOR_WORD)); //反向运动 delayTime(WAIT_TIMER); //延时 do { axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num);//读取轴的状态 if (startGoHome == 0) { return(NO_ORG); } } while (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) != 0);//等到原点信号 变高 RFIDControl.dmc_stop(axisInfo.m_card_num, axisInfo.m_axis_num, DIRECT_STOP); } if (getStatus(axisStatus, (int)AxisStatus.MOTOR_EL_B) != 0) //开始时在负限位 { RFIDControl.dmc_vmove(axisInfo.m_card_num, axisInfo.m_axis_num, (ushort)(axisInfo.m_home_dir == MoveDir.FOR_WORD ? MoveDir.BACK_WORD : MoveDir.FOR_WORD)); //反向运动 delayTime(WAIT_TIMER); //延时 do { axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num);//读取轴的状态 if (startGoHome == 0) { return(NO_ORG); } } while (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) == 0);//查询原点信号 do { axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num);//读取轴的状态 if (startGoHome == 0) { return(NO_ORG); } } while (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) != 0);//查询消失原点信号 RFIDControl.dmc_stop(axisInfo.m_card_num, axisInfo.m_axis_num, DIRECT_STOP); } delayTime(100); //延时 RFIDControl.dmc_home_move(axisInfo.m_card_num, axisInfo.m_axis_num); //回零动作 delayTime(WAIT_TIMER); //延时 while (RFIDControl.dmc_check_done(axisInfo.m_card_num, axisInfo.m_axis_num) == RUN) //判断当前轴状态 { //遇到极限自动返回 axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num); //读取轴的状态 if (getStatus(axisStatus, (int)AxisStatus.MOTOR_EL_B) != 0) //负向极限 { RFIDControl.dmc_stop(axisInfo.m_card_num, axisInfo.m_axis_num, DIRECT_STOP); delayTime(WAIT_TIMER); //延时 RFIDControl.dmc_vmove(axisInfo.m_card_num, axisInfo.m_axis_num, (ushort)(axisInfo.m_home_dir == MoveDir.BACK_WORD ? MoveDir.FOR_WORD : MoveDir.BACK_WORD)); //反向运动 delayTime(WAIT_TIMER); //延时 do { axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num);//读取轴的状态 if (startGoHome == 0) { return(NO_ORG); } } while (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) == 0);//查询原点信号 do { axisStatus = RFIDControl.dmc_axis_io_status(axisInfo.m_card_num, axisInfo.m_axis_num);//读取轴的状态 if (startGoHome == 0) { return(NO_ORG); } } while (getStatus(axisStatus, (int)AxisStatus.MOTOR_ORG) != 0); //查询消失原点信号 RFIDControl.dmc_stop(axisInfo.m_card_num, axisInfo.m_axis_num, DIRECT_STOP); delayTime(100); //延时 RFIDControl.dmc_home_move(axisInfo.m_card_num, axisInfo.m_axis_num); //重新开始回零动作 } if (getStatus(axisStatus, (int)AxisStatus.MOTOR_EL_F) != 0) //负向极限 { if (orignCount < 3) { goto orign_begin; } RFIDControl.dmc_stop(axisInfo.m_card_num, axisInfo.m_axis_num, DIRECT_STOP); return(NO_ORG);//没有原信号 } if (startGoHome == 0) { return(NO_ORG); } } if (startGoHome == 0) { return(NO_ORG); } delayTime(100); RFIDControl.dmc_set_position(axisInfo.m_card_num, axisInfo.m_axis_num, 0); //设置零点 axisInfo.m_home_flag = 1; //设定脉冲模式及逻辑方向(此处脉冲模式固定为P+D方向:脉冲+方向) RFIDControl.dmc_set_pulse_outmode(axisInfo.m_card_num, axisInfo.m_axis_num, axisInfo.m_pulse_mode); RFIDControl.dmc_set_profile(axisInfo.m_card_num, axisInfo.m_axis_num, axisInfo.m_speed_min, axisInfo.m_speed_max, axisInfo.m_acc_time, axisInfo.m_dcc_time, 0); //设定S段时间 RFIDControl.dmc_set_s_profile(axisInfo.m_card_num, axisInfo.m_axis_num, 0, 0.4); RFIDControl.dmc_set_encoder(axisInfo.m_card_num, axisInfo.m_axis_num, 0); //设置初始值为0 RFIDControl.dmc_set_position(axisInfo.m_card_num, axisInfo.m_axis_num, 0); //初始位置设为零 RFIDControl.dmc_set_equiv(axisInfo.m_card_num, axisInfo.m_axis_num, 1); axisInfo.m_pulse_mode = 3; axisInfo.m_home_flag = 1; return(ORG_OK); }