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#

2 years ago
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;
}
}
});
}
}
}