public static void AutoRun(ref PVar.WorkType StaWork) { try { switch (StaWork.Step) { case 10: if (PVar.Stop_Flag == false) { StaWork.State = false; LoadPSATime.InitialTime(); StaWork.Step = 20; } break; case 20: if (PVar.空跑) { if (StaWork.State == false && StaWork.IsLoadPSA == false && Gg.GetExDi(1, Gg.InPut2.PSA载台真空吸检测信号) == 0 && (PVar.Sta_Work[(int)BVar.工位.流水线0].IsHaveFix || PVar.Sta_Work[(int)BVar.工位.流水线1].IsHaveFix || PVar.Sta_Work[(int)BVar.工位.流水线2].IsHaveFix)) { AddList("PSA上料开始!"); StaWork.State = true; PickUpNumber = 0; Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 0); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 30; } else if (LoadPSATime.TimeIsUp(50)) { StaWork.Step = 10; } } else //***************************************************** { if (StaWork.State == false && StaWork.IsLoadPSA == false && Gg.GetExDi(0, Gg.InPut1.PSA料仓夹紧气缸伸出) == 1 && Gg.GetExDi(1, Gg.InPut2.PSA料仓到位感应信号) == 1 && Gg.GetExDi(1, Gg.InPut2.PSA载台真空吸检测信号) == 0 && (PVar.Sta_Work[(int)BVar.工位.流水线0].IsHaveFix || PVar.Sta_Work[(int)BVar.工位.流水线1].IsHaveFix || PVar.Sta_Work[(int)BVar.工位.流水线2].IsHaveFix)) { AddList("PSA上料开始!"); StaWork.State = true; PickUpNumber = 0; Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 0); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 30; } else if (LoadPSATime.TimeIsUp(50)) { StaWork.Step = 10; } } break; case 30: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 1 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 0) { AddList("PSA搬运Y轴运动到取料位置!"); Gg.AbsMotion(0, Axis.PSA搬运Y轴, mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Y轴吸料位置], PVar.ParAxis.Speed[Axis.PSA搬运Y轴]); LoadPSATime.InitialTime(); StaWork.Step = 40; } else if (LoadPSATime.TimeIsUp(5000)) { AddList("PSA吸嘴升降气缸上感应信号异常!"); ShowList("PSA吸嘴升降气缸上感应信号异常!"); LoadPSATime.InitialTime(); StaWork.Step = 8000; } break; case 40: if (Gg.ZSPD(0, Axis.PSA搬运Y轴) == false && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 0) { AddList("PSA吸嘴升降气缸上信号异常!"); ShowList("PSA吸嘴升降气缸上信号异常!"); LoadPSATime.InitialTime(); StaWork.Step = 10000; } if (Gg.ZSPD(0, Axis.PSA搬运Y轴)) { LoadPSATime.InitialTime(); StaWork.Step = 50; } else if (LoadPSATime.TimeIsUp(5000)) { AddList("PSA搬运Y轴运动超时!"); ShowList("PSA搬运Y轴运动超时!"); LoadPSATime.InitialTime(); StaWork.Step = 10000; } break; case 50: if (PVar.空跑) { AddList("PSA料仓上层感应到物料!"); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 1); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); AddList("PSA吸嘴升降气缸下降取料!"); LoadPSATime.InitialTime(); StaWork.Step = 90; } else { if (Gg.GetExDi(1, Gg.InPut2.PSA料仓上层感应) == 1) { AddList("PSA料仓上层感应到物料!"); LoadPSATime.InitialTime(); StaWork.Step = 60; } else { //当前位置已经到达最高处 if (Gg.GetPrfPosmm(0, Axis.PSA供料Z轴) >= mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴单片位置]) { //回到供料初始位置 Gg.AbsMotion(0, Axis.PSA供料Z轴, mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴初始位置], PVar.ParAxis.Speed[Axis.PSA供料Z轴]); AddList("PSA物料用完,运动到初始位置!"); ShowList("PSA物料用完,运动到初始位置!"); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 0); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 1000; } else { //继续顶PSA物料 Gg.AbsMotion(0, Axis.PSA供料Z轴, mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴单片位置], PVar.ParAxis.Speed[Axis.PSA供料Z轴]); AddList("PSA料仓向上顶料!"); LoadPSATime.InitialTime(); StaWork.Step = 60; } } } break; case 60: if (Gg.GetExDi(1, Gg.InPut2.PSA料仓上层感应) == 1) { gts.GT_Stop(0, 1 << (Axis.PSA供料Z轴 - 1), 0); AddList("感应到PSA物料,顶料轴停止!"); } if (Gg.ZSPD(0, Axis.PSA供料Z轴) && Gg.GetExDi(1, Gg.InPut2.PSA料仓上层感应) == 0) { Gg.AbsMotion(0, Axis.PSA供料Z轴, mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴初始位置], PVar.ParAxis.Speed[Axis.PSA供料Z轴]); AddList("PSA物料用完,运动到初始位置!"); ShowList("PSA物料用完,运动到初始位置!"); LoadPSATime.InitialTime(); StaWork.Step = 1000; } else if (Gg.ZSPD(0, Axis.PSA供料Z轴) && Gg.GetExDi(1, Gg.InPut2.PSA料仓上层感应) == 1) { Gg.AbsMotion(0, Axis.PSA供料Z轴, mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴初始位置], PVar.ParAxis.Speed[Axis.PSA供料Z轴]); AddList("PSA料仓上层感应到物料!"); LoadPSATime.InitialTime(); StaWork.Step = 70; } else if (Gg.ZSPD(0, Axis.PSA供料Z轴) == false && LoadPSATime.TimeIsUp(5000)) { AddList("PSA供料Z轴运动超时!"); ShowList("PSA供料Z轴运动超时!"); LoadPSATime.InitialTime(); StaWork.Step = 10000; } break; case 70: if (mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴单片位置] - Gg.GetPrfPosmm(0, Axis.PSA供料Z轴) > 2) { //2mm/s的速度,按比例向上顶,防止料是倾斜的 Gg.AbsMotion(0, Axis.PSA供料Z轴, Gg.GetPrfPosmm(0, Axis.PSA供料Z轴) + (mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴单片位置] - Gg.GetPrfPosmm(0, Axis.PSA供料Z轴)) * 0.08, 2); } PickUpNumber += 1; Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 1); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); AddList("PSA吸嘴升降气缸下降取料!"); LoadPSATime.InitialTime(); StaWork.Step = 80; break; case 80: if (Gg.GetExDi(1, Gg.InPut2.搬运PSA真空吸检测信号) == 1) { gts.GT_Stop(0, 1 << (Axis.PSA供料Z轴 - 1), 1); LoadPSATime.InitialTime(); StaWork.Step = 90; } else { if (Gg.ZSPD(0, Axis.PSA供料Z轴)) { LoadPSATime.InitialTime(); StaWork.Step = 90; } } break; case 90: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 0 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 1) { Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 1); LoadPSATime.InitialTime(); StaWork.Step = 100; } else if (LoadPSATime.TimeIsUp(3000)) { AddList("PSA吸嘴升降气缸下降超时!"); ShowList("PSA吸嘴升降气缸下降超时!"); LoadPSATime.InitialTime(); StaWork.Step = 8000; } break; case 100: if (LoadPSATime.TimeIsUp(500)) { LoadPSATime.InitialTime(); StaWork.Step = 120; } break; case 120: if (Gg.ZSPD(0, Axis.PSA供料Z轴)) { AddList("PSA吸嘴升降气缸上升!"); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 130; } break; case 130: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 1 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 0) { LoadPSATime.InitialTime(); StaWork.Step = 140; } else if (LoadPSATime.TimeIsUp(3000)) { AddList("PSA吸嘴升降气缸上升超时!"); ShowList("PSA吸嘴升降气缸上升超时!"); LoadPSATime.InitialTime(); StaWork.Step = 8000; } break; case 140: if (LoadPSATime.TimeIsUp(500)) { if (PVar.空跑) { AddList("PSA吸嘴升降气缸上升到位,真空吸OK!"); PickUpNumber = 0; Gg.AbsMotion(0, Axis.PSA搬运Y轴, mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Y轴放料位置], PVar.ParAxis.Speed[Axis.PSA搬运Y轴]); LoadPSATime.InitialTime(); StaWork.Step = 150; } else { if (Gg.GetExDi(1, Gg.InPut2.搬运PSA真空吸检测信号) == 1) { AddList("PSA吸嘴升降气缸上升到位,真空吸OK!"); PickUpNumber = 0; Gg.AbsMotion(0, Axis.PSA搬运Y轴, mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Y轴放料位置], PVar.ParAxis.Speed[Axis.PSA搬运Y轴]); LoadPSATime.InitialTime(); StaWork.Step = 150; } else { if (PickUpNumber > 1) { PickUpNumber = 0; AddList("PSA吸料真空异常,请检查!"); ShowList("PSA吸料真空异常,请检查!"); ErrName = "Foam吸料真空异常,请确认后继续"; LoadPSATime.InitialTime(); StaWork.Step = 6000; } else { Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); LoadPSATime.InitialTime(); StaWork.Step = 70; } } } } break; case 150: if (Gg.ZSPD(0, Axis.PSA搬运Y轴)) { LoadPSATime.InitialTime(); StaWork.Step = 160; } break; case 160: if (LoadPSATime.TimeIsUp(100)) { AddList("吸嘴移动到中转台上方!"); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); LoadPSATime.InitialTime(); StaWork.Step = 170; } break; case 170: //取料和载具平台很难保证统一平面,这里不判断气缸下信号 if (LoadPSATime.TimeIsUp(1500) && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 0) { AddList("PSA吸嘴升降气缸下降到位!"); LoadPSATime.InitialTime(); StaWork.Step = 180; } break; case 180: if (LoadPSATime.TimeIsUp(200)) { Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 1); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 0); Gg.SetExDo(0, 1, Gg.OutPut2.PSA载台破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.PSA载台真空吸, 1); LoadPSATime.InitialTime(); StaWork.Step = 190; } break; case 190: if (LoadPSATime.TimeIsUp(1000)) { if (PVar.空跑) { AddList("PSA载台真空吸检测信号OK!"); Gg.SetExDo(0, 1, Gg.OutPut2.PSA载台真空吸, 0); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 200; } else { if (Gg.GetExDi(1, Gg.InPut2.PSA载台真空吸检测信号) == 1) { AddList("PSA载台真空吸检测信号OK!"); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); LoadPSATime.InitialTime(); StaWork.Step = 200; } else { AddList("PSA载台真空吸检测信号异常,请检查!"); Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); ErrName = "Foam承接平台真空异常,请确认后继续"; LoadPSATime.InitialTime(); StaWork.Step = 7000; } } } break; case 200: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 1 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 0) { LoadPSATime.InitialTime(); StaWork.Step = 210; } else if (LoadPSATime.TimeIsUp(3000)) { AddList("PSA吸嘴升降气缸上升超时!"); ShowList("PSA吸嘴升降气缸上升超时!"); LoadPSATime.InitialTime(); StaWork.Step = 8000; } break; case 210: if (LoadPSATime.TimeIsUp(300)) { Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA破真空, 0); Gg.SetExDo(0, 1, Gg.OutPut2.搬运PSA真空吸, 0); Gg.AbsMotion(0, Axis.PSA搬运Y轴, mFunction.Pos.TeachAxis1[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Y轴吸料位置], PVar.ParAxis.Speed[Axis.PSA搬运Y轴]); LoadPSATime.InitialTime(); StaWork.Step = 220; } break; case 220: if (Gg.ZSPD(0, Axis.PSA搬运Y轴) == false && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 0) { AddList("PSA吸嘴升降气缸上信号异常!"); ShowList("PSA吸嘴升降气缸上信号异常!"); LoadPSATime.InitialTime(); StaWork.Step = 10000; } if (Gg.ZSPD(0, Axis.PSA搬运Y轴)) { StaWork.IsHavePSA = true; //给取PSA信号 LoadPSATime.InitialTime(); StaWork.Step = 300; } else if (LoadPSATime.TimeIsUp(5000)) { AddList("PSA搬运Y轴运动超时!"); ShowList("PSA搬运Y轴运动超时!"); LoadPSATime.InitialTime(); StaWork.Step = 10000; } break; case 300: LoadPSATime.InitialTime(); StaWork.Step = 310; break; case 310: if (StaWork.IsHavePSA == false) { LoadPSATime.InitialTime(); StaWork.Step = 800; } break; case 800: StaWork.Enable = false; StaWork.Result = true; StaWork.State = false; StaWork.Step = 10; break; case 1000: StaWork.Enable = false; StaWork.Result = false; StaWork.State = false; StaWork.Step = 10; break; case 6000: if (MessageBox.Show(ErrName, "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK) { LoadPSATime.InitialTime(); StaWork.Step = 6010; } else { Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); Gg.AbsMotion(0, Axis.PSA供料Z轴, mFunction.Pos.TeachAxis2[Axis.tTag.PSA供料, Axis.Point供料PSA.PSA_Z轴初始位置], PVar.ParAxis.Speed[Axis.PSA供料Z轴]); LoadPSATime.InitialTime(); StaWork.Step = 1000; } break; case 6010: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 1 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 0) { Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); LoadPSATime.InitialTime(); StaWork.Step = 70; } else { Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); LoadPSATime.InitialTime(); StaWork.Step = 6020; } break; case 6020: if (Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸上) == 1 && Gg.GetExDi(0, Gg.InPut1.PSA吸嘴升降气缸下) == 0) { Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 1); LoadPSATime.InitialTime(); StaWork.Step = 70; } else if (LoadPSATime.TimeIsUp(3000)) { AddList("PSA吸嘴升降气缸上升超时!"); ShowList("PSA吸嘴升降气缸上升超时!"); LoadPSATime.InitialTime(); StaWork.Step = 8000; } break; case 7000: if (MessageBox.Show(ErrName, "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK) { LoadPSATime.InitialTime(); StaWork.Step = 160; } else { LoadPSATime.InitialTime(); StaWork.Step = 10; } break; case 8000: Gg.SetExDo(0, 0, Gg.OutPut1.PSA吸嘴升降气缸, 0); StaWork.Enable = false; StaWork.Result = false; StaWork.State = false; StaWork.Step = 10; Frm_Engineering.fEngineering.MacStop(); break; //遇到异常,设备先暂停,确定后处理************************ case 8800: if (Manual.AutoMotionFlag[3]) { if (Manual.HoldFlag[3]) { Manual.HoldFlag[3] = false; Frm_Engineering.fEngineering.CmdHoldPress.Text = "暂停"; Frm_Engineering.fEngineering.CmdHoldPress.BackColor = Color.BurlyWood; ShowList("运动已继续"); } else { Manual.HoldFlag[3] = true; Frm_Engineering.fEngineering.CmdHoldPress.Text = "继续"; Frm_Engineering.fEngineering.CmdHoldPress.BackColor = Color.Red; ShowList("运动已暂停"); } } else { PVar.IsSystemOnPauseMode = true; PVar.MacHold = true; StaWork.StaHold = true; PVar.Stop_Flag = false; Frm_Main.fMain.Btn_Start.Enabled = false; Frm_Main.fMain.Btn_Pause.Enabled = true; Frm_Main.fMain.Btn_Stop.Enabled = false; Frm_Main.fMain.Btn_Start.BZ_BackColor = PVar.BZColor_UnselectedBtn; Frm_Main.fMain.Btn_Pause.BZ_BackColor = PVar.BZColor_SelectedEndBtn; Frm_Main.fMain.Btn_Stop.BZ_BackColor = PVar.BZColor_UnselectedBtn; Frm_Engineering.fEngineering.Auto_Timer.Enabled = false; } PVar.LampStatus = 20; StaWork.Step = BufferStep; break; //严重错误,急停处理 case 10000: Frm_Engineering.fEngineering.MacStop(); break; } } catch (Exception exc) { string Error_Str = ""; string Error_Str1 = ""; Frm_Engineering.fEngineering.MacStop(); MessageBox.Show(exc.Message); Error_Str = PVar.BZ_LogPath + DateTime.Now.ToString("yyyyMMdd") + "\\" + DateTime.Now.ToString("yyyyMMdd") + "_代码异常记录" + ".txt"; Error_Str1 = "\r\n" + "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※" + "\r\n" + "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "\r\n" + exc.ToString(); FileRw.WriteDattxt(Error_Str, Error_Str1); } }
/// <summary> /// GotoHome(short CardNum[卡号], short Axis[轴号], double homeToLimitFDist[极限到原点距离], double searchHomeDist[原点搜索距离], double offsetPos[感应宽度], double homeoffset[原点偏移距离], double vel[搜索原点速度]) /// </summary> /// <param name="CardNum"></param> /// <param name="Axis"></param> /// <param name="homeToLimitFDist"></param> /// <param name="searchHomeDist"></param> /// <param name="offsetPos"></param> /// <param name="homeoffset"></param> /// <param name="vel"></param> public static void GotoHome(short CardNum, short Axis, double homeToLimitFDist, double searchHomeDist, double offsetPos, double homeoffset, double vel) { uint temp_pClock = 0; if (GoHome.AxisHome[CardNum, Axis].Step != 0) { Frm_Engineering.fEngineering.textBox3.Text = GoHome.AxisHome[CardNum, Axis].Step.ToString(); GoHome.AxisHome[CardNum, Axis].State = true; switch (GoHome.AxisHome[CardNum, Axis].Step) { case 10: InitTimeH[CardNum, Axis] = new Tool.Delay(); gts.GT_ClrSts(CardNum, Axis, (short)1); //清除报警 gts.GT_SetPrfPos(CardNum, Axis, 0); //规划器置零 gts.GT_SetEncPos(CardNum, Axis, 0); //编码器置零 gts.GT_SynchAxisPos(CardNum, 1 << (Axis - 1)); //将当前轴进行位置同步 GoHome.AxisHome[CardNum, Axis].Counter = 0; //回原点计数 GoHome.AxisHome[CardNum, Axis].Step = 20; break; case 20: GoHome.AxisHome[CardNum, Axis].Capture = 0; if (Gg.GetHomeDi(CardNum, Axis) == 0) //判断是否在原点上 { if (GoHome.AxisHome[CardNum, Axis].Counter > 1) { GoHome.AxisHome[CardNum, Axis].Step = 140; } else { GoHome.AxisHome[CardNum, Axis].Counter = GoHome.AxisHome[CardNum, Axis].Counter + 1; GoHome.AxisHome[CardNum, Axis].Step = 30; //开始搜索原点 } } else { GoHome.AxisHome[CardNum, Axis].Step = 200; //偏离原点,方向与搜索原点方向相反 } break; case 30: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_SetCaptureMode(CardNum, Axis, gts.CAPTURE_HOME); //第一次原点搜索 GoHome.AxisHome[CardNum, Axis].TempPos = 0; Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + searchHomeDist), vel); //启动运动,开始搜索原点 GoHome.AxisHome[CardNum, Axis].Step = 40; break; case 40: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); gts.GT_GetCaptureStatus(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].Capture, out GoHome.AxisHome[CardNum, Axis].TempPos, (short)1, out temp_pClock); //获取当前轴原点捕获的状态及捕获的当前位置 if (GoHome.AxisHome[CardNum, Axis].Capture == 1) //判断当前轴是否原点捕获触发 { //Gg.AxisStop(CardNum, Axis); //当前轴停止 gts.GT_Stop(CardNum, 1 << (Axis - 1), 1 << (Axis - 1)); InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Capture = 0; GoHome.AxisHome[CardNum, Axis].Step = 50; } else if (Gg.GetLimitDi_Z(CardNum, Axis) == 1) //判断当前轴是否触发正极限 { //Gg.AxisStop(CardNum, Axis); //当前轴停止 gts.GT_Stop(CardNum, 1 << (Axis - 1), 1 << (Axis - 1)); InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 170; } else if (Gg.GetLimitDi_F(CardNum, Axis) == 1) //判断当前轴是否触发负极限 { //Gg.AxisStop(CardNum, Axis); //当前轴停止 gts.GT_Stop(CardNum, 1 << (Axis - 1), 1 << (Axis - 1)); InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 150; } else if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) //判断当前轴规划器是否运动停止(原点搜索距离太小) { InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 140; } break; case 50: if (InitTimeH[CardNum, Axis].TimeIsUp(500)) { GoHome.AxisHome[CardNum, Axis].Step = 52; } break; case 52: //Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis)) / Tools.GeerRate[CardNum, Axis] + 1, 2); //Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + offsetPos), 10); //启动运动,原点反向运动 Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + 2), 5); //启动运动,原点反向运动 GoHome.AxisHome[CardNum, Axis].Step = 60; break; case 60: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); //获取当前轴的状态 if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) //判断当前轴是否运动停止 { GoHome.AxisHome[CardNum, Axis].Step = 70; } break; case 70: if (InitTimeH[CardNum, Axis].TimeIsUp(500)) { GoHome.AxisHome[CardNum, Axis].Step = 72; } break; case 72: gts.GT_SetCaptureMode(CardNum, Axis, gts.CAPTURE_HOME); //第二次原点搜索 //hRtn = gts.GT_SetCaptureMode(CardNum, Axis,gts. CAPTURE_INDEX); //启动当前轴的Z相脉冲捕获 Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) - offsetPos * 2), 1); //以1mm/s速度找原点 GoHome.AxisHome[CardNum, Axis].Step = 80; //跳转到下一步 break; case 80: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); //获取当前轴的状态 gts.GT_GetCaptureStatus(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].Capture, out GoHome.AxisHome[CardNum, Axis].TempPos, (short)1, out temp_pClock); //获取当前轴Z相脉冲捕获的状态及捕获的当前位置 if (GoHome.AxisHome[CardNum, Axis].Capture == 1) //判断当前轴是否Z相脉冲捕获触发 { //Gg.AxisStop(CardNum, Axis); //当前轴停止 gts.GT_Stop(CardNum, 1 << (Axis - 1), 1 << (Axis - 1)); GoHome.AxisHome[CardNum, Axis].Capture = 0; //捕获触发标志清零 GoHome.AxisHome[CardNum, Axis].Step = 90; } else if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) { GoHome.AxisHome[CardNum, Axis].Step = 140; //跳转到第110步(或脉冲未捕获,回原点结束,回原点失败) } break; case 90: if (InitTimeH[CardNum, Axis].TimeIsUp(500)) { GoHome.AxisHome[CardNum, Axis].Step = 92; } break; case 92: Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + homeoffset), 2); //if (homeoffset < 3) // { // Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis) / Tools.GeerRate[CardNum, Axis]) + homeoffset, 2); // } //else // { // Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(GoHome.AxisHome[CardNum, Axis].TempPos / Gg.PlusPerUnit(CardNum, Axis) / Tools.GeerRate[CardNum, Axis]) + homeoffset, 5); // } GoHome.AxisHome[CardNum, Axis].Step = 100; break; case 100: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) //判断当前轴是否运动停止 { InitTime.InitialTime(); InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 110; } break; case 110: if (InitTimeH[CardNum, Axis].TimeIsUp(200)) { GoHome.AxisHome[CardNum, Axis].Step = 120; } break; case 120: gts.GT_SetPrfPos(CardNum, Axis, 0); //将当前轴规划器位置修改为零点 gts.GT_SetEncPos(CardNum, Axis, 0); //将当前轴编码器位置修改为零点 gts.GT_SynchAxisPos(CardNum, 1 << (Axis - 1)); //将当前轴进行位置同步 InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 130; break; case 130: if (InitTimeH[CardNum, Axis].TimeIsUp(50)) { if (Gg.GetEncPos(CardNum, Axis) == 0 && Gg.GetPrfPos(CardNum, Axis) == 0) { GoHome.AxisHome[CardNum, Axis].Result = true; GoHome.AxisHome[CardNum, Axis].State = false; GoHome.AxisHome[CardNum, Axis].Step = 0; } else { InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 110; } } break; case 140: GoHome.AxisHome[CardNum, Axis].Result = false; GoHome.AxisHome[CardNum, Axis].State = false; GoHome.AxisHome[CardNum, Axis].Step = 0; break; //********************************************************************************************************************* case 150: //负极限和原点之间距离 gts.GT_ClrSts(CardNum, Axis, (short)1); Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + homeToLimitFDist), vel); GoHome.AxisHome[CardNum, Axis].Step = 160; break; case 160: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) { GoHome.AxisHome[CardNum, Axis].Step = 20; //重新搜索原点 } break; //********************************************************************************************************************* case 170: //offsetPos大于感应片的宽度 gts.GT_ClrSts(CardNum, Axis, (short)1); Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) - offsetPos), vel); GoHome.AxisHome[CardNum, Axis].Step = 180; break; case 180: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) { GoHome.AxisHome[CardNum, Axis].Step = 20; //重新搜索原点 } break; //********************************************************************************************************************* case 200: //offsetPos大于感应片的宽度 Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + offsetPos), vel); GoHome.AxisHome[CardNum, Axis].Step = 201; break; case 201: if (Gg.GetHomeDi(CardNum, Axis) == 0) //判断是否在原点上 { Gg.AbsMotion(CardNum, Axis, System.Convert.ToDouble(Gg.GetPrfPosmm(CardNum, Axis) + 1), vel); InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 210; } else { gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) { InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 140; } } break; case 210: gts.GT_ClrSts(CardNum, Axis, (short)1); gts.GT_GetSts(CardNum, Axis, out GoHome.AxisHome[CardNum, Axis].status, (short)1, out temp_pClock); if (System.Convert.ToBoolean(GoHome.AxisHome[CardNum, Axis].status & 0x400) == false) { InitTimeH[CardNum, Axis].InitialTime(); GoHome.AxisHome[CardNum, Axis].Step = 220; } break; case (short)220: if (InitTimeH[CardNum, Axis].TimeIsUp(200)) { if (Gg.GetHomeDi(CardNum, Axis) == 1) { GoHome.AxisHome[CardNum, Axis].Step = 140; } else { GoHome.AxisHome[CardNum, Axis].Step = 20; } } break; } } }