You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
11 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<double>("NozzleR1StartPos"), 4);
AxisControl.NozzleR2.MovePos(SysConfigParam.GetValue<double>("NozzleR2StartPos"), 4);
AxisControl.NozzleR3.MovePos(SysConfigParam.GetValue<double>("NozzleR3StartPos"), 4);
AxisControl.NozzleR4.MovePos(SysConfigParam.GetValue<double>("NozzleR4StartPos"), 4);
AxisControl.NozzleR5.MovePos(SysConfigParam.GetValue<double>("NozzleR5StartPos"), 4);
AxisControl.NozzleR6.MovePos(SysConfigParam.GetValue<double>("NozzleR6StartPos"), 4);
AxisControl.NozzleR7.MovePos(SysConfigParam.GetValue<double>("NozzleR7StartPos"), 4);
AxisControl.NozzleR8.MovePos(SysConfigParam.GetValue<double>("NozzleR8StartPos"), 4);
AxisControl.NozzleR9.MovePos(SysConfigParam.GetValue<double>("NozzleR9StartPos"), 4);
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("LoadXStartPos"), 4);
AxisControl.LoadY.MovePos(SysConfigParam.GetValue<double>("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;
}
}
});
}
}
}