|
|
using Rs.Controls;
|
|
|
using Rs.Framework;
|
|
|
using Rs.Motion.Base;
|
|
|
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 ;
|
|
|
homeStep = 0;
|
|
|
m_bHomed = false;
|
|
|
m_bCancle = false;
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
while (!m_bCancle && !m_bHomed)
|
|
|
{
|
|
|
if(GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
MachineManage.Instance.SetCenterMachineStatus(Commom.ERunStatus.Stopped);
|
|
|
MessageQueue.Instance.Insert("Device home ok");
|
|
|
MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Homed);
|
|
|
MachineManage.Instance.InitializeState = EInitializeState.Initialized;
|
|
|
m_bHomed = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
switch (homeStep)
|
|
|
{
|
|
|
case 0://所有的Z轴回原
|
|
|
string canGohome = CheckCanHome();
|
|
|
if (!string.IsNullOrEmpty(canGohome))
|
|
|
{
|
|
|
Msg.ShowError($"轴{canGohome}处于报警状态,不能回原");
|
|
|
MessageQueue.Instance.Warn($"轴{canGohome}处于报警状态,不能回原");
|
|
|
m_bCancle = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageQueue.Instance.Insert("Z轴开始回零");
|
|
|
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();
|
|
|
|
|
|
if(NozzleManager.GetNozzle(1).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ1").Home();
|
|
|
}
|
|
|
|
|
|
if (NozzleManager.GetNozzle(2).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ2").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(3).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ3").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(4).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ4").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(5).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ5").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(6).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ6").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(7).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleZ7").Home();
|
|
|
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(8).Enable)
|
|
|
{
|
|
|
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 2://XY回零
|
|
|
MessageQueue.Instance.Insert("x y r go home");
|
|
|
if(NozzleManager.GetNozzle(1).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR1").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(2).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR2").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(3).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR3").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(4).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR4").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(5).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR5").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(6).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR6").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(7).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR7").Home();
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(8).Enable)
|
|
|
{
|
|
|
AxisControl.GetAxis($"NozzleR8").Home();
|
|
|
}
|
|
|
|
|
|
//AxisControl.GetAxis($"NozzleR9").Home();
|
|
|
AxisControl.LoadX.Home();
|
|
|
AxisControl.LoadY.Home();
|
|
|
AxisControl.TurnoverX.Home();
|
|
|
AxisControl.TurnoverY.Home();
|
|
|
homeStep++;
|
|
|
break;
|
|
|
case 3:
|
|
|
|
|
|
if (homeTime.ElapsedMilliseconds < 1000 * 60 * 2)//5分钟还未回零成功,则返回回零超时
|
|
|
{
|
|
|
if (Ops.IsHomed("LoadX", "LoadY", "TurnoverX", "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.TurnoverX.Abort_Go_Home();
|
|
|
AxisControl.TurnoverY.Abort_Go_Home();
|
|
|
MachineManage.Instance.MachineStatus = EMachineStatus.HomeFail;
|
|
|
MessageQueue.Instance.Insert("Device home fail");
|
|
|
CancleHome();
|
|
|
}
|
|
|
break;
|
|
|
case 4://go to start position
|
|
|
Thread.Sleep(200);
|
|
|
if(NozzleManager.GetNozzle(1).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR1.MovePos(SysConfigParam.GetValue<double>("NozzleR1StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(2).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR2.MovePos(SysConfigParam.GetValue<double>("NozzleR2StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(3).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR3.MovePos(SysConfigParam.GetValue<double>("NozzleR3StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(4).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR4.MovePos(SysConfigParam.GetValue<double>("NozzleR4StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(5).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR5.MovePos(SysConfigParam.GetValue<double>("NozzleR5StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(6).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR6.MovePos(SysConfigParam.GetValue<double>("NozzleR6StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(7).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR7.MovePos(SysConfigParam.GetValue<double>("NozzleR7StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
if (NozzleManager.GetNozzle(8).Enable)
|
|
|
{
|
|
|
AxisControl.NozzleR8.MovePos(SysConfigParam.GetValue<double>("NozzleR8StartPos"), GlobalVar.WholeSpeed);
|
|
|
}
|
|
|
|
|
|
//AxisControl.NozzleR9.MovePos(SysConfigParam.GetValue<double>("NozzleR9StartPos"), GlobalVar.WholeSpeed);
|
|
|
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("LoadXStartPos"), GlobalVar.WholeSpeed);
|
|
|
AxisControl.LoadY.MovePos(SysConfigParam.GetValue<double>("LoadYStartPos"), GlobalVar.WholeSpeed);
|
|
|
homeStep++;
|
|
|
break;
|
|
|
case 5:
|
|
|
if (Ops.IsStop("LoadX", "LoadY", "NozzleR1", "NozzleR2", "NozzleR3", "NozzleR4", "NozzleR5", "NozzleR6", "NozzleR7", "NozzleR8"))
|
|
|
{
|
|
|
MachineManage.Instance.SetCenterMachineStatus(ERunStatus.Stopped);
|
|
|
MessageQueue.Instance.Insert("Device home ok");
|
|
|
MachineManage.Instance.MachineStatus = EMachineStatus.Homed;
|
|
|
m_bHomed = true;
|
|
|
MachineManage.Instance.InitializeState = EInitializeState.Initialized;
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private string CheckCanHome()
|
|
|
{
|
|
|
List<string> list = new List<string>();
|
|
|
foreach(IAxis axis in AxisControl.GetAllAxis())
|
|
|
{
|
|
|
axis.GetAlarmStatus(out bool bAlarm);
|
|
|
if(bAlarm)
|
|
|
{
|
|
|
list.Add(axis.Config.AxisName);
|
|
|
}
|
|
|
}
|
|
|
return string.Join(",", list);
|
|
|
}
|
|
|
}
|
|
|
}
|