diff --git a/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs b/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs new file mode 100644 index 0000000..e9858cb --- /dev/null +++ b/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs @@ -0,0 +1,121 @@ +using Rs.Controls; +using Rs.Framework; +using Rs.Motion; +using Rs.MotionPlat.Commom; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Rs.MotionPlat.Flow.SubFlow +{ + enum EZRHomeFlowStep + { + StartHome, + WaitHomed, + GoStartPos, + WaitArrivedStartPos + } + public class ZRHomeFlow + { + private ZRHomeFlow() { } + + private static ZRHomeFlow instance; + public static ZRHomeFlow Instance + { + get + { + if(instance==null) + instance = new ZRHomeFlow(); + return instance; + } + } + private ManualResetEvent homeFinished = new ManualResetEvent(false); + private EZRHomeFlowStep step = EZRHomeFlowStep.StartHome; + bool finished = false; + + public void GoHome() + { + if (finished) + { + finished = false; + } + else + return; + + Task.Run(() => { + while (!finished) + { + switch (step) + { + case EZRHomeFlowStep.StartHome: + AxisControl.NozzleZ1.Home(); + AxisControl.NozzleZ2.Home(); + AxisControl.NozzleZ3.Home(); + AxisControl.NozzleZ4.Home(); + AxisControl.NozzleZ5.Home(); + AxisControl.NozzleZ6.Home(); + AxisControl.NozzleZ7.Home(); + AxisControl.NozzleZ8.Home(); + + AxisControl.NozzleR1.Home(); + AxisControl.NozzleR2.Home(); + AxisControl.NozzleR3.Home(); + AxisControl.NozzleR4.Home(); + AxisControl.NozzleR5.Home(); + AxisControl.NozzleR6.Home(); + AxisControl.NozzleR7.Home(); + AxisControl.NozzleR8.Home(); + step = EZRHomeFlowStep.WaitHomed; + break; + case EZRHomeFlowStep.WaitHomed: + if(AxisControl.NozzleZ1.HomeStatus== EHomeStatus.Finished + && AxisControl.NozzleZ2.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ3.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ4.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ5.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ6.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ7.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleZ8.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR1.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR2.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR3.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR4.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR5.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR6.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR7.HomeStatus == EHomeStatus.Finished + && AxisControl.NozzleR8.HomeStatus == EHomeStatus.Finished) + { + step = EZRHomeFlowStep.GoStartPos; + } + break; + case EZRHomeFlowStep.GoStartPos: + for(int i=1;i<9;i++) + { + double targetPos = SysConfigParam.GetValue($"NozzleR{i}StartPos"); + AxisControl.GetAxis($"NozzleR{i}").MovePos(targetPos, GlobalVar.WholeSpeed); + } + step = EZRHomeFlowStep.WaitArrivedStartPos; + break; + case EZRHomeFlowStep.WaitArrivedStartPos: + if(Ops.IsStop("NozzleR1") + && Ops.IsStop("NozzleR2") + && Ops.IsStop("NozzleR3") + && Ops.IsStop("NozzleR4") + && Ops.IsStop("NozzleR5") + && Ops.IsStop("NozzleR6") + && Ops.IsStop("NozzleR7") + && Ops.IsStop("NozzleR8")) + { + finished = true; + homeFinished.Set(); + } + break; + } + } + }); + } + } +} diff --git a/Rs.SkyLine/Rs.SkyLine.csproj b/Rs.SkyLine/Rs.SkyLine.csproj index 971a03d..7608461 100644 --- a/Rs.SkyLine/Rs.SkyLine.csproj +++ b/Rs.SkyLine/Rs.SkyLine.csproj @@ -235,6 +235,7 @@ +