using Rs.Controls; using Rs.Framework; using Rs.MotionPlat.Commom; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Rs.MotionPlat.Flow { public class HomeFlow { ushort homeStep = 0; private static HomeFlow instace; private bool m_bCancle = false; private bool m_bHomed = false; private Stopwatch homeTime = new Stopwatch(); public static HomeFlow Instance { get { if (instace == null) instace = new HomeFlow(); return instace; } } public void CancleHome() { m_bCancle = true; } private HomeFlow() { } public void StartGoHome() { MachineManage.Instance.InitializeState = EInitializeState.Initializing ; Task.Run(() => { while (true && !m_bCancle && !m_bHomed) { switch (homeStep) { case 0://所有的Z轴回原 MessageQueue.Instance.Insert("Z轴开始回零"); m_bHomed = false; homeTime.Restart(); MachineManage.Instance.MachineStatus = EMachineStatus.Homing; //料仓Z轴回零 AxisControl.GetAxis($"StockZ1").Home(); AxisControl.GetAxis($"StockZ2").Home(); AxisControl.GetAxis($"StockZ3").Home(); AxisControl.GetAxis($"StockZ4").Home(); AxisControl.GetAxis($"StockZ5").Home(); AxisControl.GetAxis($"StockZ6").Home(); AxisControl.GetAxis($"NozzleZ1").Home(); AxisControl.GetAxis($"NozzleZ2").Home(); AxisControl.GetAxis($"NozzleZ3").Home(); AxisControl.GetAxis($"NozzleZ4").Home(); AxisControl.GetAxis($"NozzleZ5").Home(); AxisControl.GetAxis($"NozzleZ6").Home(); AxisControl.GetAxis($"NozzleZ7").Home(); AxisControl.GetAxis($"NozzleZ8").Home(); AxisControl.GetAxis($"NozzleZ9").Home(); //保压Z轴回原 AxisControl.PressZ.Home(); //周转Z轴回原 AxisControl.TurnoverZ.Home(); homeStep++; break; case 1://等待所有Z轴回原完成 if (homeTime.ElapsedMilliseconds < 1000 * 60 * 2)//5分钟还未回零成功,则返回回零超时 { if (Ops.AllZHomed() && Ops.IsHomed("StockZ1","StockZ2", "StockZ3", "StockZ4", "StockZ5", "StockZ6", "PressZ", "TurnoverZ")) { MessageQueue.Instance.Insert("Z axis home finished!"); homeStep++; } } else { AxisControl.GetAxis($"StockZ1").Abort_Go_Home(); AxisControl.GetAxis($"StockZ2").Abort_Go_Home(); AxisControl.GetAxis($"StockZ3").Abort_Go_Home(); AxisControl.GetAxis($"StockZ4").Abort_Go_Home(); AxisControl.GetAxis($"StockZ5").Abort_Go_Home(); AxisControl.GetAxis($"StockZ6").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ1").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ2").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ3").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ4").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ5").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ6").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ7").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ8").Abort_Go_Home(); AxisControl.GetAxis($"NozzleZ9").Abort_Go_Home(); //保压Z轴回原 AxisControl.PressZ.Abort_Go_Home(); //周转Z轴回原 AxisControl.TurnoverZ.Abort_Go_Home(); MachineManage.Instance.MachineStatus = EMachineStatus.HomeFail; MessageQueue.Instance.Insert("Device home fail"); CancleHome(); } break; case 2: AxisControl.TurnoverZ.MovePos(0.22, GlobalVar.WholeSpeed); AxisControl.PressZ.MovePos(0.2, GlobalVar.WholeSpeed); homeStep++; break; case 3: if (Ops.IsStop("TurnoverZ", "PressZ")) { Thread.Sleep(100); homeStep++; } break; case 4://XY回零 MessageQueue.Instance.Insert("x y r go home"); AxisControl.GetAxis($"NozzleR1").Home(); AxisControl.GetAxis($"NozzleR2").Home(); AxisControl.GetAxis($"NozzleR3").Home(); AxisControl.GetAxis($"NozzleR4").Home(); AxisControl.GetAxis($"NozzleR5").Home(); AxisControl.GetAxis($"NozzleR6").Home(); AxisControl.GetAxis($"NozzleR7").Home(); AxisControl.GetAxis($"NozzleR8").Home(); AxisControl.GetAxis($"NozzleR9").Home(); AxisControl.LoadX.Home(); AxisControl.LoadY.Home(); AxisControl.TurnoverY.Home(); homeStep++; break; case 5: if (homeTime.ElapsedMilliseconds < 1000 * 60 * 2)//5分钟还未回零成功,则返回回零超时 { if (Ops.IsHomed("LoadX", "LoadY", "TurnoverY") && Ops.AllRHomed()) { homeStep++; } } else { AxisControl.GetAxis($"NozzleR1").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR2").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR3").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR4").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR5").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR6").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR7").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR8").Abort_Go_Home(); AxisControl.GetAxis($"NozzleR9").Abort_Go_Home(); AxisControl.LoadX.Abort_Go_Home(); AxisControl.LoadY.Abort_Go_Home(); AxisControl.TurnoverY.Abort_Go_Home(); MachineManage.Instance.MachineStatus = EMachineStatus.HomeFail; MessageQueue.Instance.Insert("Device home fail"); CancleHome(); } break; case 6://go to start position Thread.Sleep(200); AxisControl.NozzleR1.MovePos(SysConfigParam.GetValue("NozzleR1StartPos"), 4); AxisControl.NozzleR2.MovePos(SysConfigParam.GetValue("NozzleR2StartPos"), 4); AxisControl.NozzleR3.MovePos(SysConfigParam.GetValue("NozzleR3StartPos"), 4); AxisControl.NozzleR4.MovePos(SysConfigParam.GetValue("NozzleR4StartPos"), 4); AxisControl.NozzleR5.MovePos(SysConfigParam.GetValue("NozzleR5StartPos"), 4); AxisControl.NozzleR6.MovePos(SysConfigParam.GetValue("NozzleR6StartPos"), 4); AxisControl.NozzleR7.MovePos(SysConfigParam.GetValue("NozzleR7StartPos"), 4); AxisControl.NozzleR8.MovePos(SysConfigParam.GetValue("NozzleR8StartPos"), 4); AxisControl.NozzleR9.MovePos(SysConfigParam.GetValue("NozzleR9StartPos"), 4); AxisControl.LoadX.MovePos(SysConfigParam.GetValue("LoadXStartPos"), 4); AxisControl.LoadY.MovePos(SysConfigParam.GetValue("LoadYStartPos"), 4); homeStep++; break; case 7: if (Ops.IsStop("LoadX","LoadY","NozzleR1", "NozzleR2", "NozzleR3", "NozzleR4", "NozzleR5", "NozzleR6", "NozzleR7", "NozzleR8", "NozzleR9")) { MachineManage.Instance.RunStatus = Commom.ERunStatus.Stopped; MessageQueue.Instance.Insert("Device home ok"); MachineManage.Instance.MachineStatus = EMachineStatus.Homed; m_bHomed = true; MachineManage.Instance.InitializeState = EInitializeState.Initialized; } break; default: break; } } }); } } }