/// <summary> /// 单轴回原点; /// </summary> /// <param name="axisinfo"></param> /// <param name="BitNum"></param> /// <returns></returns> public override int SingleAxisHomeBack(PCI9014AxisInfo axisinfo, uint BitNum) { int waittime = 0; int res = 0; int FindORLCondition = 0; res = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.HomeBackSpeed, axisinfo.HomeBackSpeed, axisinfo.AccTime, axisinfo.DecTime); res = CPci9014.p9014_home_move(axisinfo.No, FindORLCondition);//设置为反向查找; if (res != 0) { Log.GetInstance().ErrorWrite("回原点失败!!"); return(res); } while (true) { if (waittime == 50) { Log.GetInstance().ErrorWrite(string.Format("{0}回原点超时!!", axisinfo.AxisName)); Global.AxisControlCard.Stop(axisinfo); return(res); } waittime++; res = (int)Global.AxisControlCard.GetInBit(0, BitNum); if (res == 2) { continue; } else if (res == 1 && axisinfo.AxisName == "检测相机") { Log.GetInstance().ErrorWrite(string.Format("{0}-运动轴报警!!!", axisinfo.AxisName)); Global.AxisControlCard.Stop(axisinfo); return(res); } else if (res == 0 && axisinfo.AxisName == "遮光幕布") { Log.GetInstance().ErrorWrite(string.Format("{0}-运动轴报警!!!", axisinfo.AxisName)); Global.AxisControlCard.Stop(axisinfo); return(res); } res = (int)IsMotionDone(axisinfo); if (res == 2) { Log.GetInstance().ErrorWrite("获取运动状态失败!!"); break; } else if (res == 0) { Log.GetInstance().NormalWrite(string.Format("{0}轴的运动状态已停止!!", axisinfo.AxisName)); break; } Thread.Sleep(1000); } return(res); }
/// <summary> /// 单轴回负极线位置; /// </summary> /// <param name="axisinfo"></param> /// <returns></returns> public override int SingleAxisBackWorkPos(PCI9014AxisInfo axisinfo) { int res = 0; if (IsORG(axisinfo) != 1) { res = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.HomeBackSpeed, axisinfo.HomeBackSpeed, axisinfo.AccTime, axisinfo.DecTime); res = CPci9014.p9014_home_move(axisinfo.No, 0);//设置为反向查找; while (true) { if (IsMotionDone(axisinfo) == 0) { break; } Thread.Sleep(100); } if (res != 0) { Log.GetInstance().ErrorWrite("测试完成后回原点失败!!"); return(res); } res = IsORG(axisinfo); if (res != 1) { Log.GetInstance().ErrorWrite("测试完成回后原点失败!!"); return(res); } } axisinfo.cmdPos = axisinfo.WorkPosition1; res = CPci9014.p9014_set_t_profile(axisinfo.No, axisinfo.startSpeed, axisinfo.maxSpeed, axisinfo.AccTime, axisinfo.DecTime); res = CPci9014.p9014_pmove(axisinfo.No, axisinfo.cmdPos, 0, 2); //检查运动是否完成,且检查运动轴是否报警; while (true) { if (IsMotionDone(axisinfo) == 0) { break; } Thread.Sleep(50); } if (Global.AxisControlCard.GetCurrentPos(axisinfo) == 0) { if (System.Math.Abs(axisinfo.curPos - axisinfo.cmdPos) > 1000) { Log.GetInstance().ErrorWrite("与目标位置相差大于1000个脉冲!!"); res = 2; } } return(res); }
public override int HomeMove(SingleDemura.PCI9014AxisInfo axinfo, int dir) { return(CPci9014.p9014_home_move(axinfo.No, dir)); }
/// <summary> /// 回原运动 /// </summary> /// <param name="axbase"></param> /// <returns></returns> public override int HomeAllAxis(PCI9014AxisInfo SetAxis) { Log.GetInstance().WarningWrite("正在回原点,请等待......"); //当处于原点时,需要往正向移动一定距离,然后再进行复位动作,保证每次复位位置一致 int res = 0; res = IsORG(SetAxis); if (res == 1) { Log.GetInstance().WarningWrite(string.Format("{0}--已经在原点位置无需回原运动!", SetAxis.AxisName)); goto WorkPos; } else if (res == 2) { return((int)(ErrorInfo.ErrorCmdExcuteFail)); } CPci9014.p9014_set_t_profile(SetAxis.No, SetAxis.startSpeed, SetAxis.maxSpeed, SetAxis.AccTime, SetAxis.DecTime); CPci9014.p9014_pmove(SetAxis.No, SetAxis.StartBackHomeDis, 0, 2); while (true) { if (IsMotionDone(SetAxis) == 0) { break; } Thread.Sleep(50); } //固定回原速度,起止速度相同; CPci9014.p9014_set_t_profile(SetAxis.No, SetAxis.HomeBackSpeed, SetAxis.HomeBackSpeed, SetAxis.AccTime, SetAxis.DecTime); CPci9014.p9014_home_move(SetAxis.No, 0); while (true) { if (IsMotionDone(SetAxis) == 0) { break; } Thread.Sleep(50); } Thread.Sleep(100); res = IsORG(SetAxis); if (res == 1) { Log.GetInstance().WarningWrite("回原点成功!!"); } else { Log.GetInstance().ErrorWrite("回原点失败!!"); return((int)ErrorInfo.ErrorCmdExcuteFail); } Log.GetInstance().WarningWrite(string.Format("{0}--准备运动到工作位置!", SetAxis.AxisName)); res = Global.AxisControlCard.GetCurrentPos(SetAxis); if (res != 0) { Log.GetInstance().ErrorWrite("获取当前位置失败!!"); return((int)ErrorInfo.ErrorCmdExcuteFail); } WorkPos : SetAxis.cmdPos = SetAxis.WorkPosition1 - SetAxis.curPos; res = Global.AxisControlCard.PRelativeMove(SetAxis); if (res != (int)ErrorInfo.ErrorSucceed) { Log.GetInstance().ErrorWrite(string.Format("{0}运动失败!!", SetAxis.AxisName)); return((int)ErrorInfo.ErrorCmdExcuteFail); } return((int)ErrorInfo.ErrorSucceed); }