From d004c9576917e4cdfcc8213ec8c84f9a34d3fa77 Mon Sep 17 00:00:00 2001 From: lhiven Date: Mon, 2 Oct 2023 17:26:50 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=89=B9=E6=AC=A1=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/Ops.cs | 7 +- Rs.SkyLine/Flow/Space/TrayTest.cs | 28 +++++++- Rs.SkyLine/Flow/StockManager.cs | 21 ++++++ Rs.SkyLine/Flow/TestCenter.cs | 106 ++++++++++++++++++++++++++---- Rs.SkyLine/Flow/WorkFlow.cs | 3 +- 5 files changed, 145 insertions(+), 20 deletions(-) diff --git a/Rs.SkyLine/Commom/Ops.cs b/Rs.SkyLine/Commom/Ops.cs index 55b20d1..60a0bb3 100644 --- a/Rs.SkyLine/Commom/Ops.cs +++ b/Rs.SkyLine/Commom/Ops.cs @@ -122,7 +122,9 @@ namespace Rs.MotionPlat.Commom Ops.Off("下右相机光源触发"); Ops.Off("上相机光源触发"); 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(); StockManager.Instance.Start(); Task.Run(() => { - MachineManage.Instance.MachineStatus = EMachineStatus.Working; WorkEnvironment.Instance.Ready(); if (WorkEnvironment.Instance.EnvReadyOkEvent.WaitOne()) { @@ -166,6 +167,8 @@ namespace Rs.MotionPlat.Commom TurnoverFlow.Instance.Stop(); TakeTrayFlow.Instance.Stop(); StockManager.Instance.Stop(); + MachineManage.Instance.SetCenterMachineStatus(ERunStatus.Stopped); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Interrupt); MachineManage.Instance.MachineStatus = EMachineStatus.Stop; } diff --git a/Rs.SkyLine/Flow/Space/TrayTest.cs b/Rs.SkyLine/Flow/Space/TrayTest.cs index a1d082e..1822421 100644 --- a/Rs.SkyLine/Flow/Space/TrayTest.cs +++ b/Rs.SkyLine/Flow/Space/TrayTest.cs @@ -70,6 +70,7 @@ namespace Rs.AutoDischarge.V3.Flow public bool NeedLoad = false; private bool finished = false; private bool m_bWholeLoad = true; + private int siloFloor = 0; //double baseHeight = -1; //private static StockTest instance; int stockNo = -1;//料仓编号 @@ -117,10 +118,11 @@ namespace Rs.AutoDischarge.V3.Flow Thread.Sleep(200); finished = 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) { @@ -131,6 +133,7 @@ namespace Rs.AutoDischarge.V3.Flow Status = ETrayStatus.Loading; finished = false; NeedLoad = false; + ReportSwitchTray(stockNo); if (m_bWholeLoad) Step = ETrayTestStep.到上料接料盘位; else @@ -277,6 +280,7 @@ namespace Rs.AutoDischarge.V3.Flow { if (IoManager.Instance.ReadIn($"{stockNo}号料仓料盘到位光电检测") == 1) { + siloFloor++; switch (stockNo) { 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() { Status = ETrayStatus.Unloading; diff --git a/Rs.SkyLine/Flow/StockManager.cs b/Rs.SkyLine/Flow/StockManager.cs index 652425d..0b08159 100644 --- a/Rs.SkyLine/Flow/StockManager.cs +++ b/Rs.SkyLine/Flow/StockManager.cs @@ -92,6 +92,26 @@ namespace Rs.MotionPlat.Flow 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 GetHasNotTrayStock() { List stockList = new List(); @@ -194,6 +214,7 @@ namespace Rs.MotionPlat.Flow return ETrayStatus.UnKnown; } + public void ChangeStatus(EStockType stock, ETrayStatus status) { switch (stock) diff --git a/Rs.SkyLine/Flow/TestCenter.cs b/Rs.SkyLine/Flow/TestCenter.cs index 3a239ff..b05cf06 100644 --- a/Rs.SkyLine/Flow/TestCenter.cs +++ b/Rs.SkyLine/Flow/TestCenter.cs @@ -1,6 +1,7 @@ using HalconDotNet; using Newtonsoft.Json; using Newtonsoft.Json.Converters; +using Rs.AutoDischarge.V3.Flow; using Rs.Framework; using Rs.MotionPlat.Commom; using System; @@ -8,7 +9,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; +using static Rs.MotionPlat.Commom.SchedulingSilo; using static System.Windows.Forms.AxHost; using static System.Windows.Forms.VisualStyles.VisualStyleElement; @@ -16,7 +19,7 @@ namespace Rs.MotionPlat.Flow { 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(); SchedulingMaterial sm; public event Action ReciveTaskEvent; @@ -79,11 +82,14 @@ namespace Rs.MotionPlat.Flow EInstruction eInstructioneInstruction = schedule.Instruction; switch (eInstructioneInstruction) { + case EInstruction.Rearrange: + Rearrange(json); + break; case EInstruction.InquireSiloStatus: InquireSiloStatus(json); break; case EInstruction.RequestSwitchTray: - + RequestSwitchTray(json); break; case EInstruction.InquireConnectionInfo: InquireConnectionInfo(json); @@ -193,10 +199,6 @@ namespace Rs.MotionPlat.Flow break; case EInstruction.CancelTakingError: break; - case EInstruction.Rearrange: - break; - case EInstruction.RearrangeResult: - break; case EInstruction.ScanBarcode: break; } @@ -210,6 +212,20 @@ namespace Rs.MotionPlat.Flow } + private void Rearrange(string json) + { + MachineManage.Instance.RunState = ERunState.Busying; + SiloRearrange info = JsonConvert.DeserializeObject(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) { @@ -240,36 +256,65 @@ namespace Rs.MotionPlat.Flow private void InquireSiloStatus(string json) { SchedulingSilo inquireSilo = JsonConvert.DeserializeObject(json); + inquireSilo.SiloFloor = 1; switch (inquireSilo.SiloType) { case SchedulingSiloBase.ESiloType.ToBeTested: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Input)); break; case SchedulingSiloBase.ESiloType.Passed: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Ok)); break; case SchedulingSiloBase.ESiloType.Failed: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Ng)); break; case SchedulingSiloBase.ESiloType.Multifunction: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Multi)); break; case SchedulingSiloBase.ESiloType.EmptyInput: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby;// StockManager.Instance.GetStockStatus(EStockType.Empty1); + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Empty1)); break; case SchedulingSiloBase.ESiloType.EmptyOutput: - inquireSilo.SiloStatus = SchedulingSilo.ESiloStatus.Standby; + inquireSilo.SiloStatus = TranlateSiloStatus(StockManager.Instance.GetStockStatus(EStockType.Empty2)); break; } 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; + } /// /// 请求切盘 /// private void RequestSwitchTray(string json) { - + SchedulingSilo inquireSilo = JsonConvert.DeserializeObject(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; + } } /// @@ -353,5 +398,40 @@ namespace Rs.MotionPlat.Flow string content = JsonConvert.SerializeObject(msgBox, new StringEnumConverter()); 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); + } } } diff --git a/Rs.SkyLine/Flow/WorkFlow.cs b/Rs.SkyLine/Flow/WorkFlow.cs index 98ef0d0..df424e5 100644 --- a/Rs.SkyLine/Flow/WorkFlow.cs +++ b/Rs.SkyLine/Flow/WorkFlow.cs @@ -343,8 +343,7 @@ namespace Rs.MotionPlat.Flow LogHelper.Debug(logInfo); curNozzle.Status = ENozzleStatus.ToUnload; curNozzle.FromType = curTask.FromType; - curNozzle.FromFloor = curTask.FromFloor; - + curNozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor(); curNozzle.ToType = curTask.ToType; curNozzle.ToIndex = curTask.ToIndex; curTask.SuckerNo = curNozzle.NozzleIndex ;