优化启动/停止

master
lhiven 1 year ago
parent a83d627b4b
commit 836b0a92e3

@ -134,6 +134,8 @@ namespace Rs.MotionPlat.Commom
QifuManager.Instance.Init();
QifuManager.Instance.Write(SysConfigParam.GetValue<float>("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();
}

@ -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)
//{
//}
}
/// <summary>
@ -86,5 +94,10 @@ namespace Rs.MotionPlat.Flow
{
return this.GetType().Name + "-";
}
public bool IsRunning()
{
return b_IsRun;
}
}
}

@ -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;

@ -175,6 +175,8 @@ namespace Rs.AutoDischarge.V3.Flow
/// </summary>
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;

@ -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;
}
}
}

@ -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");
}
});
}

Loading…
Cancel
Save