diff --git a/Rs.SkyLine/Commom/Ops.cs b/Rs.SkyLine/Commom/Ops.cs index 396efe8..e5a134a 100644 --- a/Rs.SkyLine/Commom/Ops.cs +++ b/Rs.SkyLine/Commom/Ops.cs @@ -134,6 +134,8 @@ namespace Rs.MotionPlat.Commom QifuManager.Instance.Init(); QifuManager.Instance.Write(SysConfigParam.GetValue("QifuValue")); LightManger.Instance.SetStatus(ELightStatus.YellowBlink); + Off("启动灯"); + Off("停止灯"); } @@ -145,7 +147,11 @@ namespace Rs.MotionPlat.Commom MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Working); On("启动灯"); Off("停止灯"); - WorkEnvironment.Instance.Ready(); + LightManger.Instance.SetStatus(ELightStatus.Green); + if (!WorkEnvironment.Instance.IsRunning()) + { + WorkEnvironment.Instance.Ready(); + } WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne(); DischargeFlow.Instance.Start(); TurnoverFlow.Instance.Start(); @@ -154,7 +160,6 @@ namespace Rs.MotionPlat.Commom { MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); } - LightManger.Instance.SetStatus(ELightStatus.Green); } }); } @@ -358,6 +363,9 @@ namespace Rs.MotionPlat.Commom public static void Quit() { + LightManger.Instance.CloseAll(); + Off("启动灯"); + Off("停止灯"); AxisControl.AllDisable(); HikCamera.Instance.Deinit(); } diff --git a/Rs.SkyLine/Flow/BaseFlow.cs b/Rs.SkyLine/Flow/BaseFlow.cs index c961f5d..112d4f4 100644 --- a/Rs.SkyLine/Flow/BaseFlow.cs +++ b/Rs.SkyLine/Flow/BaseFlow.cs @@ -59,16 +59,24 @@ namespace Rs.MotionPlat.Flow public virtual void Start() { - if(mainTask!=null && (mainTask.Status== TaskStatus.Created || mainTask.Status== TaskStatus.WaitingToRun)) + if(b_IsRun) { - b_IsRun= true; b_IsStop = false; - mainTask.Start(); } - else if(mainTask.Status== TaskStatus.Running) + else { + b_IsRun = true; b_IsStop = false; + mainTask.Start(); } + //if(mainTask!=null && (mainTask.Status== TaskStatus.Created || mainTask.Status== TaskStatus.WaitingToRun)) + //{ + + //} + //else if(mainTask.Status== TaskStatus.Running) + //{ + + //} } /// @@ -86,5 +94,10 @@ namespace Rs.MotionPlat.Flow { return this.GetType().Name + "-"; } + + public bool IsRunning() + { + return b_IsRun; + } } } diff --git a/Rs.SkyLine/Flow/LightManger.cs b/Rs.SkyLine/Flow/LightManger.cs index ba3f9c1..1f2205a 100644 --- a/Rs.SkyLine/Flow/LightManger.cs +++ b/Rs.SkyLine/Flow/LightManger.cs @@ -26,9 +26,16 @@ namespace Rs.MotionPlat.Flow timer.Interval = 1000; timer.Elapsed += Timer_Elapsed; timer.Enabled = true; - IoManager.Instance.WriteOut("黄灯", 1); - IoManager.Instance.WriteOut("红灯", 1); - IoManager.Instance.WriteOut("绿灯", 1); + IoManager.Instance.WriteOut("报警黄灯", 1); + IoManager.Instance.WriteOut("报警红灯", 1); + IoManager.Instance.WriteOut("报警绿灯", 1); + } + + public void CloseAll() + { + IoManager.Instance.WriteOut("报警黄灯", 0); + IoManager.Instance.WriteOut("报警红灯", 0); + IoManager.Instance.WriteOut("报警绿灯", 0); } private static LightManger instance; @@ -47,41 +54,43 @@ namespace Rs.MotionPlat.Flow switch (LightStatus) { case ELightStatus.YellowBlink: - if(!on) + IoManager.Instance.WriteOut("报警红灯", 0); + IoManager.Instance.WriteOut("报警绿灯", 0); + if (!on) { - IoManager.Instance.WriteOut("黄灯", 0); + IoManager.Instance.WriteOut("报警黄灯", 0); on = true; } else { - IoManager.Instance.WriteOut("黄灯", 1); + IoManager.Instance.WriteOut("报警黄灯", 1); on = false; } break; case ELightStatus.Red: if (!on) { - IoManager.Instance.WriteOut("黄灯", 1); - IoManager.Instance.WriteOut("红灯", 0); - IoManager.Instance.WriteOut("绿灯", 1); + IoManager.Instance.WriteOut("报警黄灯", 0); + IoManager.Instance.WriteOut("报警红灯", 1); + IoManager.Instance.WriteOut("报警绿灯", 0); on = true; } break; case ELightStatus.Yellow: if (!on) { - IoManager.Instance.WriteOut("黄灯", 0); - IoManager.Instance.WriteOut("红灯", 1); - IoManager.Instance.WriteOut("绿灯", 1); + IoManager.Instance.WriteOut("报警黄灯", 1); + IoManager.Instance.WriteOut("报警红灯", 0); + IoManager.Instance.WriteOut("报警绿灯", 0); on = true; } break; case ELightStatus.Green: if (!on) { - IoManager.Instance.WriteOut("黄灯", 1); - IoManager.Instance.WriteOut("红灯", 1); - IoManager.Instance.WriteOut("绿灯", 0); + IoManager.Instance.WriteOut("报警黄灯", 0); + IoManager.Instance.WriteOut("报警红灯", 0); + IoManager.Instance.WriteOut("报警绿灯", 1); on =true; } break; diff --git a/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs b/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs index 83f62b2..a331352 100644 --- a/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs @@ -175,6 +175,8 @@ namespace Rs.AutoDischarge.V3.Flow /// bool isFull = false; + bool isRunning = false; + SchedulingMessageBox msgBox; public StockTrayFlow(ETrayType stockType) { @@ -188,6 +190,14 @@ namespace Rs.AutoDischarge.V3.Flow public bool Load(EStockTrayLoadMode loadMode,Action loadFinishedEvent) { + if(!isRunning) + { + isRunning = true; + } + else + { + return false; + } IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}"); if(StockZ.HomeStatus!= EHomeStatus.Finished) { @@ -228,7 +238,7 @@ namespace Rs.AutoDischarge.V3.Flow } IAxis StockFlow = AxisControl.GetAxis($"StockFlow{(int)m_stockType}"); - while (!finished) + while (isRunning) { switch (loadStep) { @@ -388,11 +398,11 @@ namespace Rs.AutoDischarge.V3.Flow Thread.Sleep(200); logInfo = GetClassName() + $"{(int)m_stockType}号料仓斜推气缸 on"; finished = true; + isRunning = false; ChangeStatus(EStockTrayStatus.Loaded); if (loadMode == EStockTrayLoadMode.Whole) { siloFloor++; - } logInfo = GetClassName()+ $"{GetTrayName()} 料仓上料盘完成"; MessageQueue.Instance.Insert(logInfo); @@ -429,6 +439,14 @@ namespace Rs.AutoDischarge.V3.Flow public bool Unload(EStockTrayUnLoadMode unLoadMode, Action unloadFinishedEvent) { + if(!isRunning) + { + isRunning = true; + } + else + { + return false; + } IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}"); if (StockZ.HomeStatus != EHomeStatus.Finished) { @@ -447,13 +465,8 @@ namespace Rs.AutoDischarge.V3.Flow logInfo = GetClassName() + $"{GetTrayName()} 料仓收到下料任务"; MessageQueue.Instance.Insert(logInfo); unloadStep = EStockTrayUnloadFlowStep.料仓满料检测; - while (!finished) + while (isRunning) { - if (MachineManage.Instance.MachineStatus == EMachineStatus.Stop) - { - Thread.Sleep(10); - continue; - } switch (unloadStep) { case EStockTrayUnloadFlowStep.料仓满料检测: @@ -654,6 +667,7 @@ namespace Rs.AutoDischarge.V3.Flow isFull = false; } finished = true; + isRunning = false; //actionFinishedEvent.Set(); } break; @@ -663,6 +677,10 @@ namespace Rs.AutoDischarge.V3.Flow return true; } + public bool IsRunning() + { + return isRunning; + } public void ChangeStatus(EStockTrayStatus status,bool updateSlot=true) { Status=status; diff --git a/Rs.SkyLine/Flow/WorkEnvironment.cs b/Rs.SkyLine/Flow/WorkEnvironment.cs index 33274cc..d6502f4 100644 --- a/Rs.SkyLine/Flow/WorkEnvironment.cs +++ b/Rs.SkyLine/Flow/WorkEnvironment.cs @@ -29,6 +29,7 @@ namespace Rs.MotionPlat.Flow public bool EnvironmentOk { get; set; } = false; public ManualResetEvent EnvReadyOkEvent = new ManualResetEvent(false); private static WorkEnvironment instance; + private bool isRunning = false; public static WorkEnvironment Instance { get @@ -40,12 +41,18 @@ namespace Rs.MotionPlat.Flow } public void Ready() { + if (!isRunning) + { + isRunning = true; + } + else + return; step = EStockCheckStep.Input料仓是否就绪; EnvReadyOkEvent.Reset(); Task.Run(() => { EnvironmentOk = false; - while(true && !EnvironmentOk) + while(isRunning) { Thread.Sleep(5); switch (step) @@ -180,6 +187,7 @@ namespace Rs.MotionPlat.Flow { MessageQueue.Instance.Insert("所有料仓准备就绪"); EnvironmentOk = true; + isRunning = false; EnvReadyOkEvent.Set(); } break; @@ -193,5 +201,10 @@ namespace Rs.MotionPlat.Flow { return this.GetType().Name + "-"; } + + public bool IsRunning() + { + return isRunning; + } } } diff --git a/Rs.SkyLine/SysConfig/StockControl.cs b/Rs.SkyLine/SysConfig/StockControl.cs index f25e644..dada66b 100644 --- a/Rs.SkyLine/SysConfig/StockControl.cs +++ b/Rs.SkyLine/SysConfig/StockControl.cs @@ -31,23 +31,37 @@ namespace Rs.MotionPlat.SysConfig if (ok) { Task.Run(() => { - if(IsBack(trayName)) + if (MachineManage.Instance.MachineStatus == EMachineStatus.Homed || MachineManage.Instance.MachineStatus == EMachineStatus.Stop) { - StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.AfterBacked, () => { - }); - } - else - { - StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.Whole, () => { - if (result == ETrayType.Input) + if (StockManager.Instance.GetStock(result).IsRunning()) + { + if (IsBack(trayName)) { - GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Have); + StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.AfterBacked, () => { + }); } else { - GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.NotHave); + StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.Whole, () => { + if (result == ETrayType.Input) + { + GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Have); + } + else + { + GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.NotHave); + } + }); } - }); + } + else + { + Msg.ShowError("Stock is busy"); + } + } + else + { + Msg.ShowError($"device status is {MachineManage.Instance.MachineStatus},cann't operate the stock"); } }); @@ -64,20 +78,33 @@ namespace Rs.MotionPlat.SysConfig { Task.Run(() => { - if(IsBack(trayName)) + if(MachineManage.Instance.MachineStatus== EMachineStatus.Homed || MachineManage.Instance.MachineStatus== EMachineStatus.Stop) { - StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Back, () => { - // GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null); - }); + if (StockManager.Instance.GetStock(result).IsRunning()) + { + if (IsBack(trayName)) + { + StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Back, () => { + // GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null); + }); + } + else + { + StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Whole, () => { + GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null); + }); + + } + } + else + { + Msg.ShowError("Stock is busy"); + } } else { - StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Whole, () => { - GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null); - }); - + Msg.ShowError($"device status is {MachineManage.Instance.MachineStatus},cann't operate the stock"); } - }); }