优化最后一个批次流程

master
lhiven 2 years ago
parent 04e3e394e4
commit d004c95769

@ -122,7 +122,9 @@ namespace Rs.MotionPlat.Commom
Ops.Off("下右相机光源触发"); Ops.Off("下右相机光源触发");
Ops.Off("上相机光源触发"); Ops.Off("上相机光源触发");
TurnoverSlotOffset.Init(); TurnoverSlotOffset.Init();
MonitorSystemButton.Instance.Start(); MonitorSystemButton.Instance.Start();
TakeTrayFlow.Instance.Start();
StockManager.Instance.Start();
//}); //});
} }
@ -133,7 +135,6 @@ namespace Rs.MotionPlat.Commom
TakeTrayFlow.Instance.Start(); TakeTrayFlow.Instance.Start();
StockManager.Instance.Start(); StockManager.Instance.Start();
Task.Run(() => { Task.Run(() => {
MachineManage.Instance.MachineStatus = EMachineStatus.Working;
WorkEnvironment.Instance.Ready(); WorkEnvironment.Instance.Ready();
if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne()) if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne())
{ {
@ -166,6 +167,8 @@ namespace Rs.MotionPlat.Commom
TurnoverFlow.Instance.Stop(); TurnoverFlow.Instance.Stop();
TakeTrayFlow.Instance.Stop(); TakeTrayFlow.Instance.Stop();
StockManager.Instance.Stop(); StockManager.Instance.Stop();
MachineManage.Instance.SetCenterMachineStatus(ERunStatus.Stopped);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Interrupt);
MachineManage.Instance.MachineStatus = EMachineStatus.Stop; MachineManage.Instance.MachineStatus = EMachineStatus.Stop;
} }

@ -70,6 +70,7 @@ namespace Rs.AutoDischarge.V3.Flow
public bool NeedLoad = false; public bool NeedLoad = false;
private bool finished = false; private bool finished = false;
private bool m_bWholeLoad = true; private bool m_bWholeLoad = true;
private int siloFloor = 0;
//double baseHeight = -1; //double baseHeight = -1;
//private static StockTest instance; //private static StockTest instance;
int stockNo = -1;//料仓编号 int stockNo = -1;//料仓编号
@ -117,10 +118,11 @@ namespace Rs.AutoDischarge.V3.Flow
Thread.Sleep(200); Thread.Sleep(200);
finished = false; finished = false;
NeedUnload = false; NeedUnload = false;
Step = ETrayTestStep.; ReportSwitchTray(stockNo);
Step = ETrayTestStep.;
} }
else if (NeedLoad && (Status!= ETrayStatus.Loading)) else if (NeedLoad)
{ {
if(!Ops.IsOn($"{stockNo}号料仓料盘到位光电检测") || m_bWholeLoad==false) if(!Ops.IsOn($"{stockNo}号料仓料盘到位光电检测") || m_bWholeLoad==false)
{ {
@ -131,6 +133,7 @@ namespace Rs.AutoDischarge.V3.Flow
Status = ETrayStatus.Loading; Status = ETrayStatus.Loading;
finished = false; finished = false;
NeedLoad = false; NeedLoad = false;
ReportSwitchTray(stockNo);
if (m_bWholeLoad) if (m_bWholeLoad)
Step = ETrayTestStep.; Step = ETrayTestStep.;
else else
@ -277,6 +280,7 @@ namespace Rs.AutoDischarge.V3.Flow
{ {
if (IoManager.Instance.ReadIn($"{stockNo}号料仓料盘到位光电检测") == 1) if (IoManager.Instance.ReadIn($"{stockNo}号料仓料盘到位光电检测") == 1)
{ {
siloFloor++;
switch (stockNo) switch (stockNo)
{ {
case 1: case 1:
@ -330,7 +334,25 @@ namespace Rs.AutoDischarge.V3.Flow
} }
} }
public int GetFloor()
{
return siloFloor;
}
private void ReportSwitchTray(int no)
{
switch (no)
{
case 1: TestCenter.Instance.SwitchTray(EStockType.Empty1,siloFloor); break;
case 2: TestCenter.Instance.SwitchTray(EStockType.Input, siloFloor); break;
case 3: TestCenter.Instance.SwitchTray(EStockType.Ok, siloFloor); break;
case 4: TestCenter.Instance.SwitchTray(EStockType.Ng, siloFloor); break;
case 5: TestCenter.Instance.SwitchTray(EStockType.Multi, siloFloor); break;
case 6: TestCenter.Instance.SwitchTray(EStockType.Empty2, siloFloor); break;
default:
break;
}
}
public void Unload() public void Unload()
{ {
Status = ETrayStatus.Unloading; Status = ETrayStatus.Unloading;

@ -92,6 +92,26 @@ namespace Rs.MotionPlat.Flow
return true; return true;
} }
public TrayTest GetTray(EStockType stockType)
{
switch (stockType)
{
case EStockType.Empty1:
return Empty1Tray;
case EStockType.Input:
return InputTray;
case EStockType.Ok:
return OkTray;
case EStockType.Ng:
return NgTray;
case EStockType.Multi:
return MultiTray;
case EStockType.Empty2:
return Empty2Tray;
}
return null;
}
public List<EStockType> GetHasNotTrayStock() public List<EStockType> GetHasNotTrayStock()
{ {
List<EStockType> stockList = new List<EStockType>(); List<EStockType> stockList = new List<EStockType>();
@ -194,6 +214,7 @@ namespace Rs.MotionPlat.Flow
return ETrayStatus.UnKnown; return ETrayStatus.UnKnown;
} }
public void ChangeStatus(EStockType stock, ETrayStatus status) public void ChangeStatus(EStockType stock, ETrayStatus status)
{ {
switch (stock) switch (stock)

@ -1,6 +1,7 @@
using HalconDotNet; using HalconDotNet;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Converters; using Newtonsoft.Json.Converters;
using Rs.AutoDischarge.V3.Flow;
using Rs.Framework; using Rs.Framework;
using Rs.MotionPlat.Commom; using Rs.MotionPlat.Commom;
using System; using System;
@ -8,7 +9,9 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using static Rs.MotionPlat.Commom.SchedulingSilo;
using static System.Windows.Forms.AxHost; using static System.Windows.Forms.AxHost;
using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Windows.Forms.VisualStyles.VisualStyleElement;
@ -16,7 +19,7 @@ namespace Rs.MotionPlat.Flow
{ {
public class TestCenter public class TestCenter
{ {
TcpClientHelper client = new TcpClientHelper("10.86.15.67",2048); TcpClientHelper client = new TcpClientHelper("127.0.0.1",2048);
SchedulingResult schedulResult = new SchedulingResult(); SchedulingResult schedulResult = new SchedulingResult();
SchedulingMaterial sm; SchedulingMaterial sm;
public event Action<string> ReciveTaskEvent; public event Action<string> ReciveTaskEvent;
@ -79,11 +82,14 @@ namespace Rs.MotionPlat.Flow
EInstruction eInstructioneInstruction = schedule.Instruction; EInstruction eInstructioneInstruction = schedule.Instruction;
switch (eInstructioneInstruction) switch (eInstructioneInstruction)
{ {
case EInstruction.Rearrange:
Rearrange(json);
break;
case EInstruction.InquireSiloStatus: case EInstruction.InquireSiloStatus:
InquireSiloStatus(json); InquireSiloStatus(json);
break; break;
case EInstruction.RequestSwitchTray: case EInstruction.RequestSwitchTray:
RequestSwitchTray(json);
break; break;
case EInstruction.InquireConnectionInfo: case EInstruction.InquireConnectionInfo:
InquireConnectionInfo(json); InquireConnectionInfo(json);
@ -193,10 +199,6 @@ namespace Rs.MotionPlat.Flow
break; break;
case EInstruction.CancelTakingError: case EInstruction.CancelTakingError:
break; break;
case EInstruction.Rearrange:
break;
case EInstruction.RearrangeResult:
break;
case EInstruction.ScanBarcode: case EInstruction.ScanBarcode:
break; break;
} }
@ -210,6 +212,20 @@ namespace Rs.MotionPlat.Flow
} }
private void Rearrange(string json)
{
MachineManage.Instance.RunState = ERunState.Busying;
SiloRearrange info = JsonConvert.DeserializeObject<SiloRearrange>(json);
Send(info);
Thread.Sleep(2000);
TurnoverInfos tis = new TurnoverInfos();
tis.GroupID = 0;
tis.Instruction = EInstruction.RearrangeResult;
Send(tis);
MachineManage.Instance.RunState = ERunState.Waiting;
}
private void LoadAndUnload(string json) private void LoadAndUnload(string json)
{ {
@ -240,36 +256,65 @@ namespace Rs.MotionPlat.Flow
private void InquireSiloStatus(string json) private void InquireSiloStatus(string json)
{ {
SchedulingSilo inquireSilo = JsonConvert.DeserializeObject<SchedulingSilo>(json); SchedulingSilo inquireSilo = JsonConvert.DeserializeObject<SchedulingSilo>(json);
inquireSilo.SiloFloor = 1;
switch (inquireSilo.SiloType) switch (inquireSilo.SiloType)
{ {
case SchedulingSiloBase.ESiloType.ToBeTested: case SchedulingSiloBase.ESiloType.ToBeTested:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Input));
break; break;
case SchedulingSiloBase.ESiloType.Passed: case SchedulingSiloBase.ESiloType.Passed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Ok));
break; break;
case SchedulingSiloBase.ESiloType.Failed: case SchedulingSiloBase.ESiloType.Failed:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Ng));
break; break;
case SchedulingSiloBase.ESiloType.Multifunction: case SchedulingSiloBase.ESiloType.Multifunction:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Multi));
break; break;
case SchedulingSiloBase.ESiloType.EmptyInput: case SchedulingSiloBase.ESiloType.EmptyInput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;// StockManager.Instance.GetStockStatus(EStockType.Empty1); inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Empty1));
break; break;
case SchedulingSiloBase.ESiloType.EmptyOutput: case SchedulingSiloBase.ESiloType.EmptyOutput:
inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Empty2));
break; break;
} }
TestCenter.instance.Send(inquireSilo); TestCenter.instance.Send(inquireSilo);
//查询料仓状态 //查询料仓状态
} }
private ESiloStatus TranlateSiloStatus(ETrayStatus status)
{
if (status == ETrayStatus.Loading || status == ETrayStatus.Unloading)
return ESiloStatus.Switching;
else if (status == ETrayStatus.Loaded || status == ETrayStatus.Unloaded)
return ESiloStatus.Standby;
return ESiloStatus.Stopped;
}
/// <summary> /// <summary>
/// 请求切盘 /// 请求切盘
/// </summary> /// </summary>
private void RequestSwitchTray(string json) private void RequestSwitchTray(string json)
{ {
SchedulingSilo inquireSilo = JsonConvert.DeserializeObject<SchedulingSilo>(json);
switch (inquireSilo.SiloType)
{
case SchedulingSiloBase.ESiloType.ToBeTested:
StockManager.Instance.UnLoad(EStockType.Input);
break;
case SchedulingSiloBase.ESiloType.Passed:
StockManager.Instance.UnLoad(EStockType.Ok);
break;
case SchedulingSiloBase.ESiloType.Failed:
StockManager.Instance.UnLoad(EStockType.Ng);
break;
case SchedulingSiloBase.ESiloType.Multifunction:
StockManager.Instance.UnLoad(EStockType.Multi);
break;
case SchedulingSiloBase.ESiloType.EmptyInput:
break;
case SchedulingSiloBase.ESiloType.EmptyOutput:
break;
}
} }
/// <summary> /// <summary>
@ -353,5 +398,40 @@ namespace Rs.MotionPlat.Flow
string content = JsonConvert.SerializeObject(msgBox, new StringEnumConverter()); string content = JsonConvert.SerializeObject(msgBox, new StringEnumConverter());
client.Send(content,Encoding.UTF8); client.Send(content,Encoding.UTF8);
} }
public void SwitchTray(EStockType stockType,int floor)
{
MessageQueue.Instance.Insert($"{stockType} 切盘中");
SchedulingSilo tray = new SchedulingSilo();
tray.Instruction = EInstruction.BeginSwitchTray;
tray.SiloFloor = floor;
tray.TurnoverID = 0;
tray.GroupID = 0;
tray.SiloStatus = ESiloStatus.Switching;
switch (stockType)
{
case EStockType.Empty1:
tray.SiloType = SchedulingSiloBase.ESiloType.EmptyInput;
break;
case EStockType.Input:
tray.SiloType = SchedulingSiloBase.ESiloType.ToBeTested;
break;
case EStockType.Ok:
tray.SiloType = SchedulingSiloBase.ESiloType.Passed;
break;
case EStockType.Ng:
tray.SiloType = SchedulingSiloBase.ESiloType.Failed;
break;
case EStockType.Multi:
tray.SiloType = SchedulingSiloBase.ESiloType.Multifunction;
break;
case EStockType.Empty2:
tray.SiloType = SchedulingSiloBase.ESiloType.EmptyOutput;
break;
default:
break;
}
Send(tray);
}
} }
} }

@ -343,8 +343,7 @@ namespace Rs.MotionPlat.Flow
LogHelper.Debug(logInfo); LogHelper.Debug(logInfo);
curNozzle.Status = ENozzleStatus.ToUnload; curNozzle.Status = ENozzleStatus.ToUnload;
curNozzle.FromType = curTask.FromType; curNozzle.FromType = curTask.FromType;
curNozzle.FromFloor = curTask.FromFloor; curNozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor();
curNozzle.ToType = curTask.ToType; curNozzle.ToType = curTask.ToType;
curNozzle.ToIndex = curTask.ToIndex; curNozzle.ToIndex = curTask.ToIndex;
curTask.SuckerNo = curNozzle.NozzleIndex ; curTask.SuckerNo = curNozzle.NozzleIndex ;

Loading…
Cancel
Save