优化启动/停止

master
lhiven 1 year ago
parent a83d627b4b
commit 836b0a92e3

@ -134,6 +134,8 @@ namespace Rs.MotionPlat.Commom
QifuManager.Instance.Init(); QifuManager.Instance.Init();
QifuManager.Instance.Write(SysConfigParam.GetValue<float>("QifuValue")); QifuManager.Instance.Write(SysConfigParam.GetValue<float>("QifuValue"));
LightManger.Instance.SetStatus(ELightStatus.YellowBlink); LightManger.Instance.SetStatus(ELightStatus.YellowBlink);
Off("启动灯");
Off("停止灯");
} }
@ -145,7 +147,11 @@ namespace Rs.MotionPlat.Commom
MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Working); MachineManage.Instance.SetLocalMachineStatus(EMachineStatus.Working);
On("启动灯"); On("启动灯");
Off("停止灯"); Off("停止灯");
WorkEnvironment.Instance.Ready(); LightManger.Instance.SetStatus(ELightStatus.Green);
if (!WorkEnvironment.Instance.IsRunning())
{
WorkEnvironment.Instance.Ready();
}
WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne(); WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne();
DischargeFlow.Instance.Start(); DischargeFlow.Instance.Start();
TurnoverFlow.Instance.Start(); TurnoverFlow.Instance.Start();
@ -154,7 +160,6 @@ namespace Rs.MotionPlat.Commom
{ {
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
} }
LightManger.Instance.SetStatus(ELightStatus.Green);
} }
}); });
} }
@ -358,6 +363,9 @@ namespace Rs.MotionPlat.Commom
public static void Quit() public static void Quit()
{ {
LightManger.Instance.CloseAll();
Off("启动灯");
Off("停止灯");
AxisControl.AllDisable(); AxisControl.AllDisable();
HikCamera.Instance.Deinit(); HikCamera.Instance.Deinit();
} }

@ -59,16 +59,24 @@ namespace Rs.MotionPlat.Flow
public virtual void Start() public virtual void Start()
{ {
if(mainTask!=null && (mainTask.Status== TaskStatus.Created || mainTask.Status== TaskStatus.WaitingToRun)) if(b_IsRun)
{ {
b_IsRun= true;
b_IsStop = false; b_IsStop = false;
mainTask.Start();
} }
else if(mainTask.Status== TaskStatus.Running) else
{ {
b_IsRun = true;
b_IsStop = false; b_IsStop = false;
mainTask.Start();
} }
//if(mainTask!=null && (mainTask.Status== TaskStatus.Created || mainTask.Status== TaskStatus.WaitingToRun))
//{
//}
//else if(mainTask.Status== TaskStatus.Running)
//{
//}
} }
/// <summary> /// <summary>
@ -86,5 +94,10 @@ namespace Rs.MotionPlat.Flow
{ {
return this.GetType().Name + "-"; return this.GetType().Name + "-";
} }
public bool IsRunning()
{
return b_IsRun;
}
} }
} }

@ -26,9 +26,16 @@ namespace Rs.MotionPlat.Flow
timer.Interval = 1000; timer.Interval = 1000;
timer.Elapsed += Timer_Elapsed; timer.Elapsed += Timer_Elapsed;
timer.Enabled = true; 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; private static LightManger instance;
@ -47,41 +54,43 @@ namespace Rs.MotionPlat.Flow
switch (LightStatus) switch (LightStatus)
{ {
case ELightStatus.YellowBlink: 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; on = true;
} }
else else
{ {
IoManager.Instance.WriteOut("黄灯", 1); IoManager.Instance.WriteOut("报警黄灯", 1);
on = false; on = false;
} }
break; break;
case ELightStatus.Red: case ELightStatus.Red:
if (!on) if (!on)
{ {
IoManager.Instance.WriteOut("黄灯", 1); IoManager.Instance.WriteOut("报警黄灯", 0);
IoManager.Instance.WriteOut("红灯", 0); IoManager.Instance.WriteOut("报警红灯", 1);
IoManager.Instance.WriteOut("绿灯", 1); IoManager.Instance.WriteOut("报警绿灯", 0);
on = true; on = true;
} }
break; break;
case ELightStatus.Yellow: case ELightStatus.Yellow:
if (!on) if (!on)
{ {
IoManager.Instance.WriteOut("黄灯", 0); IoManager.Instance.WriteOut("报警黄灯", 1);
IoManager.Instance.WriteOut("红灯", 1); IoManager.Instance.WriteOut("报警红灯", 0);
IoManager.Instance.WriteOut("绿灯", 1); IoManager.Instance.WriteOut("报警绿灯", 0);
on = true; on = true;
} }
break; break;
case ELightStatus.Green: case ELightStatus.Green:
if (!on) if (!on)
{ {
IoManager.Instance.WriteOut("黄灯", 1); IoManager.Instance.WriteOut("报警黄灯", 0);
IoManager.Instance.WriteOut("红灯", 1); IoManager.Instance.WriteOut("报警红灯", 0);
IoManager.Instance.WriteOut("绿灯", 0); IoManager.Instance.WriteOut("报警绿灯", 1);
on =true; on =true;
} }
break; break;

@ -175,6 +175,8 @@ namespace Rs.AutoDischarge.V3.Flow
/// </summary> /// </summary>
bool isFull = false; bool isFull = false;
bool isRunning = false;
SchedulingMessageBox msgBox; SchedulingMessageBox msgBox;
public StockTrayFlow(ETrayType stockType) public StockTrayFlow(ETrayType stockType)
{ {
@ -188,6 +190,14 @@ namespace Rs.AutoDischarge.V3.Flow
public bool Load(EStockTrayLoadMode loadMode,Action loadFinishedEvent) public bool Load(EStockTrayLoadMode loadMode,Action loadFinishedEvent)
{ {
if(!isRunning)
{
isRunning = true;
}
else
{
return false;
}
IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}"); IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}");
if(StockZ.HomeStatus!= EHomeStatus.Finished) if(StockZ.HomeStatus!= EHomeStatus.Finished)
{ {
@ -228,7 +238,7 @@ namespace Rs.AutoDischarge.V3.Flow
} }
IAxis StockFlow = AxisControl.GetAxis($"StockFlow{(int)m_stockType}"); IAxis StockFlow = AxisControl.GetAxis($"StockFlow{(int)m_stockType}");
while (!finished) while (isRunning)
{ {
switch (loadStep) switch (loadStep)
{ {
@ -388,11 +398,11 @@ namespace Rs.AutoDischarge.V3.Flow
Thread.Sleep(200); Thread.Sleep(200);
logInfo = GetClassName() + $"{(int)m_stockType}号料仓斜推气缸 on"; logInfo = GetClassName() + $"{(int)m_stockType}号料仓斜推气缸 on";
finished = true; finished = true;
isRunning = false;
ChangeStatus(EStockTrayStatus.Loaded); ChangeStatus(EStockTrayStatus.Loaded);
if (loadMode == EStockTrayLoadMode.Whole) if (loadMode == EStockTrayLoadMode.Whole)
{ {
siloFloor++; siloFloor++;
} }
logInfo = GetClassName()+ $"{GetTrayName()} 料仓上料盘完成"; logInfo = GetClassName()+ $"{GetTrayName()} 料仓上料盘完成";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
@ -429,6 +439,14 @@ namespace Rs.AutoDischarge.V3.Flow
public bool Unload(EStockTrayUnLoadMode unLoadMode, Action unloadFinishedEvent) public bool Unload(EStockTrayUnLoadMode unLoadMode, Action unloadFinishedEvent)
{ {
if(!isRunning)
{
isRunning = true;
}
else
{
return false;
}
IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}"); IAxis StockZ = AxisControl.GetAxis($"StockZ{(int)m_stockType}");
if (StockZ.HomeStatus != EHomeStatus.Finished) if (StockZ.HomeStatus != EHomeStatus.Finished)
{ {
@ -447,13 +465,8 @@ namespace Rs.AutoDischarge.V3.Flow
logInfo = GetClassName() + $"{GetTrayName()} 料仓收到下料任务"; logInfo = GetClassName() + $"{GetTrayName()} 料仓收到下料任务";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
unloadStep = EStockTrayUnloadFlowStep.; unloadStep = EStockTrayUnloadFlowStep.;
while (!finished) while (isRunning)
{ {
if (MachineManage.Instance.MachineStatus == EMachineStatus.Stop)
{
Thread.Sleep(10);
continue;
}
switch (unloadStep) switch (unloadStep)
{ {
case EStockTrayUnloadFlowStep.: case EStockTrayUnloadFlowStep.:
@ -654,6 +667,7 @@ namespace Rs.AutoDischarge.V3.Flow
isFull = false; isFull = false;
} }
finished = true; finished = true;
isRunning = false;
//actionFinishedEvent.Set(); //actionFinishedEvent.Set();
} }
break; break;
@ -663,6 +677,10 @@ namespace Rs.AutoDischarge.V3.Flow
return true; return true;
} }
public bool IsRunning()
{
return isRunning;
}
public void ChangeStatus(EStockTrayStatus status,bool updateSlot=true) public void ChangeStatus(EStockTrayStatus status,bool updateSlot=true)
{ {
Status=status; Status=status;

@ -29,6 +29,7 @@ namespace Rs.MotionPlat.Flow
public bool EnvironmentOk { get; set; } = false; public bool EnvironmentOk { get; set; } = false;
public ManualResetEvent EnvReadyOkEvent = new ManualResetEvent(false); public ManualResetEvent EnvReadyOkEvent = new ManualResetEvent(false);
private static WorkEnvironment instance; private static WorkEnvironment instance;
private bool isRunning = false;
public static WorkEnvironment Instance public static WorkEnvironment Instance
{ {
get get
@ -40,12 +41,18 @@ namespace Rs.MotionPlat.Flow
} }
public void Ready() public void Ready()
{ {
if (!isRunning)
{
isRunning = true;
}
else
return;
step = EStockCheckStep.Input; step = EStockCheckStep.Input;
EnvReadyOkEvent.Reset(); EnvReadyOkEvent.Reset();
Task.Run(() => Task.Run(() =>
{ {
EnvironmentOk = false; EnvironmentOk = false;
while(true && !EnvironmentOk) while(isRunning)
{ {
Thread.Sleep(5); Thread.Sleep(5);
switch (step) switch (step)
@ -180,6 +187,7 @@ namespace Rs.MotionPlat.Flow
{ {
MessageQueue.Instance.Insert("所有料仓准备就绪"); MessageQueue.Instance.Insert("所有料仓准备就绪");
EnvironmentOk = true; EnvironmentOk = true;
isRunning = false;
EnvReadyOkEvent.Set(); EnvReadyOkEvent.Set();
} }
break; break;
@ -193,5 +201,10 @@ namespace Rs.MotionPlat.Flow
{ {
return this.GetType().Name + "-"; return this.GetType().Name + "-";
} }
public bool IsRunning()
{
return isRunning;
}
} }
} }

@ -31,23 +31,37 @@ namespace Rs.MotionPlat.SysConfig
if (ok) if (ok)
{ {
Task.Run(() => { Task.Run(() => {
if(IsBack(trayName)) if (MachineManage.Instance.MachineStatus == EMachineStatus.Homed || MachineManage.Instance.MachineStatus == EMachineStatus.Stop)
{ {
StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.AfterBacked, () => { if (StockManager.Instance.GetStock(result).IsRunning())
}); {
} if (IsBack(trayName))
else
{
StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.Whole, () => {
if (result == ETrayType.Input)
{ {
GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Have); StockManager.Instance.GetStock(result).Load(EStockTrayLoadMode.AfterBacked, () => {
});
} }
else 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(() => { Task.Run(() => {
if(IsBack(trayName)) if(MachineManage.Instance.MachineStatus== EMachineStatus.Homed || MachineManage.Instance.MachineStatus== EMachineStatus.Stop)
{ {
StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Back, () => { if (StockManager.Instance.GetStock(result).IsRunning())
// GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null); {
}); 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 else
{ {
StockManager.Instance.GetStock(result).Unload(EStockTrayUnLoadMode.Whole, () => { Msg.ShowError($"device status is {MachineManage.Instance.MachineStatus},cann't operate the stock");
GlobalTray.GetTray(result).ChangeStatus(Rs.Controls.ESlotStatus.Null);
});
} }
}); });
} }

Loading…
Cancel
Save