From d8dd84ebe4d139c7256f377bfbc5ee6e5bd13e1b Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Sat, 3 Feb 2024 08:50:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=8D=E6=8E=92=E5=8F=96?= =?UTF-8?q?=E6=96=99=E5=A4=B1=E8=B4=A5=E6=97=B6=EF=BC=8C=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E6=8C=89=E9=92=AE=E6=B2=A1=E6=9C=89=E5=8A=A8?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Flow/RearrangeFlow.cs | 51 ++-- Rs.SkyLine/Flow/TestCenter.cs | 332 ++++++++++++++------------ Rs.SkyLine/Properties/AssemblyInfo.cs | 2 +- Rs.SkyLine/Rs.SkyLine.csproj | 3 +- 4 files changed, 203 insertions(+), 185 deletions(-) diff --git a/Rs.SkyLine/Flow/RearrangeFlow.cs b/Rs.SkyLine/Flow/RearrangeFlow.cs index ccabc43..1437739 100644 --- a/Rs.SkyLine/Flow/RearrangeFlow.cs +++ b/Rs.SkyLine/Flow/RearrangeFlow.cs @@ -243,7 +243,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"检测到还有条任务未执行,继续执行"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.到取料位上方; } else @@ -262,7 +261,7 @@ namespace Rs.MotionPlat.Flow if (FetchNum >= GlobalVar.DischargeRetakeNum) { DischargeDumpFlow.Instance.Start(curTask.FromType, curNozzle.NozzleIndex, curNozzle.FromIndex); - alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.料仓tray盘取料报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.料仓tray盘取料报警), curNozzle.NozzleIndex, curTask.FromIndex + 1); flowStep = ERearrangeFlowStep.取料失败报警; } else @@ -285,14 +284,14 @@ namespace Rs.MotionPlat.Flow case ETipButton.Retry: logInfo = GetClassName() + $"选择了重试,继续取料"; MessageQueue.Instance.Insert(logInfo); - if (curTask.FromType == TurnoverType.ToBeTested) + //if (curTask.FromType == TurnoverType.ToBeTested) { //检测料盘是否在上料位,在上料位则继续取料,不在上料位,则通知料仓把料盘送到上料位 - if (!StockManager.Instance.GetStock(ETrayType.Input).HasTray()) + if (!StockManager.Instance.GetStock(traytype).HasTray()) { logInfo = GetClassName() + $"检测到料盘不在就绪状态,上料盘"; MessageQueue.Instance.Insert(logInfo); - StockManager.Instance.GetStock(ETrayType.Input).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked); + StockManager.Instance.GetStock(traytype).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked); } } FetchNum = 0; @@ -310,50 +309,48 @@ namespace Rs.MotionPlat.Flow logInfo = GetClassName() + $"上料完成,通知相机拍照,检测产品是否已拿走"; MessageQueue.Instance.Insert(logInfo); } - haveProduct = UpCameraCheckFlow.Instance.CheckStockTrayHasProduct(traytype, curNozzle.FromIndex + 1, true); + haveProduct = UpCameraCheckFlow.Instance.CheckStockTrayHasProduct(traytype, curTask.FromIndex + 1, true); if (!haveProduct.HasProduct) { logInfo = GetClassName() + "检测到产品已拿走,流程继续"; MessageQueue.Instance.Insert(logInfo); FetchNum = 0; + curTask.Dealed= true; //执行料仓Tray取料NG时的处理流程,流程处理结束后,流程继续 - GlobalTray.GetTray(traytype).ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave); + GlobalTray.GetTray(traytype).ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave); if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) { flowStep = ERearrangeFlowStep.到取料位上方; } else { - flowStep = ERearrangeFlowStep.到放料位上方; + if(NozzleManager.GetToUnloadNozzle()!=null) + { + flowStep = ERearrangeFlowStep.到放料位上方; + } + else + { + flowStep = ERearrangeFlowStep.任务结束到安全位; + } } } else { - alarmInfo = $"检测到{curNozzle.FromIndex + 1}号穴位产品未取出,请处理"; + alarmInfo = $"检测到{curTask.FromIndex + 1}号穴位产品未取出,请处理"; flowStep = ERearrangeFlowStep.取料失败报警; } break; case ETipButton.Yes://移动到安全位 //通知料仓把料盘退回到安全位 - if (curTask.FromType == TurnoverType.ToBeTested) - { - logInfo = GetClassName() + $"通知料仓把料盘退回到安全位"; - MessageQueue.Instance.Insert(logInfo); - StockManager.Instance.GetStock(ETrayType.Input).Unload(EStockTrayUnLoadMode.Back, null);//.UnLoad(EStockType.Input, EStockTrayUnLoadMode.Back); - //StockManager.Instance.Wait(EStockType.Input); - logInfo = GetClassName() + $"料仓已退回到安全位"; - MessageQueue.Instance.Insert(logInfo); - } - else if (curTask.FromType == TurnoverType.Turnover) - { - logInfo = GetClassName() + $"通知排料头回安全位"; - MessageQueue.Instance.Insert(logInfo); - DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); - logInfo = GetClassName() + $"排料头已回到安全位"; - MessageQueue.Instance.Insert(logInfo); - } - alarmInfo = $"已运动到安全位,{curNozzle.NozzleIndex}号排料吸嘴取{curNozzle.FromIndex}号穴位产品次失败,请处理"; + logInfo = GetClassName() + "选择了移动到安全位"; + MessageQueue.Instance.Insert(logInfo); + logInfo = GetClassName() + $"通知料仓把料盘退回到安全位"; + MessageQueue.Instance.Insert(logInfo); + StockManager.Instance.GetStock(traytype).Unload(EStockTrayUnLoadMode.Back, null);//.UnLoad(EStockType.Input, EStockTrayUnLoadMode.Back); + logInfo = GetClassName() + $"料仓已退回到安全位"; + MessageQueue.Instance.Insert(logInfo); + alarmInfo = $"已运动到安全位,{curNozzle.NozzleIndex}号排料吸嘴取{curTask.FromIndex+1}号穴位产品次失败,请处理"; flowStep = ERearrangeFlowStep.取料失败报警; break; default: diff --git a/Rs.SkyLine/Flow/TestCenter.cs b/Rs.SkyLine/Flow/TestCenter.cs index a6a002e..f207c4d 100644 --- a/Rs.SkyLine/Flow/TestCenter.cs +++ b/Rs.SkyLine/Flow/TestCenter.cs @@ -116,159 +116,164 @@ namespace Rs.MotionPlat.Flow private void Client_DataRecived(System.Net.Sockets.Socket socket, byte[] data) { string msg = Encoding.UTF8.GetString(data); - - foreach (string json in Scheduling.GetJsons(msg)) + try { - Scheduling schedule = JsonConvert.DeserializeObject(json); - EInstruction eInstructioneInstruction = schedule.Instruction; - if(eInstructioneInstruction!= EInstruction.InquireStatus) - { - LogHelper.Debug(" >>> " +json); - } - switch (eInstructioneInstruction) + foreach (string json in Scheduling.GetJsons(msg)) { - case EInstruction.TransferSiloTray: - ReportToTestCenter(schedule); - MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying); - NgTrayToInputTrayFlow.Instance.MoveToInput(); - MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); - Ops.Stop(); - break; - case EInstruction.TestFinished: - MessageQueue.Instance.Insert("测试完成:"+JsonConvert.SerializeObject(schedule, new StringEnumConverter())); - ReportToTestCenter(schedule); - MachineManage.Instance.TestStatus = ETestStatus.Finished; - break; - case EInstruction.Rearrange: - Rearrange(json); - break; - case EInstruction.InquireSiloStatus: - InquireSiloStatus(json); - break; - case EInstruction.RequestSwitchTray: - RequestSwitchTray(json); - break; - case EInstruction.InquireConnectionInfo: - InquireConnectionInfo(json); - break; - case EInstruction.LoadAndUnload: - LoadAndUnload(json); - break; - case EInstruction.CancelLoadAndUnload: - //schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID }; - ReportToTestCenter(schedule); - break; - case EInstruction.InquireStatus: - SchedulingStatusInfo statusInto = JsonConvert.DeserializeObject(json); - switch (statusInto.Type) - { - case SchedulingStatusInfo.InfoType.State: - statusInto.Info = MachineManage.Instance.GetLoadUnloadStatus().ToString();// ERunState.Waiting.ToString(); - break; - case SchedulingStatusInfo.InfoType.RunStatus: - statusInto.Info = MachineManage.Instance.GetCenterRunStatus().ToString();// ERunStatus.Started.ToString(); - break; - case SchedulingStatusInfo.InfoType.RunMode: - statusInto.Info = MachineManage.Instance.RunMode.ToString(); - break; - case SchedulingStatusInfo.InfoType.InitializeState: - statusInto.Info = MachineManage.Instance.InitializeState.ToString();// EInitializeState.Initialized.ToString(); - break; - case SchedulingStatusInfo.InfoType.AssignMode: - statusInto.Info = EAssignMode.Normal.ToString(); - break; - case SchedulingStatusInfo.InfoType.TesterState: - statusInto.Info = JsonConvert.SerializeObject(MachineManage.Instance.GetTesterInfo());//.ToString(); - break; - default: - break; - } - ReportToTestCenter(statusInto); - //LogHelper.Debug(statusInto.ToString()); - ReplayTaskEvent?.Invoke(statusInto.ToString()); - break; - case EInstruction.SwitchStatus: - SchedulingStatusInfo switchStatus = JsonConvert.DeserializeObject(msg); - SwitchStatus(switchStatus); - //MachineManage.Instance.MachineStatus= EMachineStatus. - //if (ss.TryConvertInfoTo(out ERunMode runMode)) - // MachineManage.Instance.RunMode = runMode; - //client.Send(ss.ToString()); - //ReplayTaskEvent?.Invoke(ss.ToString()); - break; - case EInstruction.ClearAlarm: - break; - case EInstruction.GetRecipeList: - SchedulingResult sr = JsonConvert.DeserializeObject(msg); - sr.Message = "Default"; - client.Send(sr.ToString()); - ReplayTaskEvent?.Invoke(sr.ToString()); - break; - case EInstruction.SetRecipe: - break; - case EInstruction.GetCurrentRecipe: - SchedulingResult srcur = JsonConvert.DeserializeObject(msg); - srcur.Message = GlobalVar.CurRecipe; - client.Send(srcur.ToString()); - ReplayTaskEvent?.Invoke(srcur.ToString()); - break; - case EInstruction.TurnoverReady: - break; - case EInstruction.ChangeState: - SchedulingResult cs = JsonConvert.DeserializeObject(msg); - client.Send(cs.ToString()); - ReplayTaskEvent?.Invoke(cs.ToString()); - break; - case EInstruction.ShowMessage: - break; - case EInstruction.CloseMessage: - SchedulingMessageBox mbox = JsonConvert.DeserializeObject(json); - TestCenterMessageBox.RecivedMsg(mbox); - //TestCenterMessageBoxManager.GetMsgbox(mbox.ID)?.Recived(mbox); - break; - case EInstruction.MachineButtonDown: - break; - case EInstruction.MachineButtonUp: - break; - case EInstruction.TrayProductRange: - break; - case EInstruction.ClearTrayProductRange: - schedulResult = JsonConvert.DeserializeObject(msg); - client.Send(schedulResult.ToString()); - ReplayTaskEvent?.Invoke(schedulResult.ToString()); - break; - case EInstruction.BeginSwitchTray: - break; - case EInstruction.MoveScanner: - break; - case EInstruction.InquireMoveScannerState: - break; - case EInstruction.SetAlarms: - break; - case EInstruction.CancelAlarms: - SchedulingAlarms alarms= JsonConvert.DeserializeObject(msg); - if(alarms!=null&&alarms.Alarms!=null&&alarms.Alarms.Count>0) - { - foreach (AlarmItem alarm in alarms.Alarms) + Scheduling schedule = JsonConvert.DeserializeObject(json); + EInstruction eInstructioneInstruction = schedule.Instruction; + if (eInstructioneInstruction != EInstruction.InquireStatus) + { + LogHelper.Debug(" >>> " + json); + } + switch (eInstructioneInstruction) + { + case EInstruction.TransferSiloTray: + ReportToTestCenter(schedule); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying); + NgTrayToInputTrayFlow.Instance.MoveToInput(); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + Ops.Stop(); + break; + case EInstruction.TestFinished: + MessageQueue.Instance.Insert("测试完成:" + JsonConvert.SerializeObject(schedule, new StringEnumConverter())); + ReportToTestCenter(schedule); + MachineManage.Instance.TestStatus = ETestStatus.Finished; + break; + case EInstruction.Rearrange: + Rearrange(json); + break; + case EInstruction.InquireSiloStatus: + InquireSiloStatus(json); + break; + case EInstruction.RequestSwitchTray: + RequestSwitchTray(json); + break; + case EInstruction.InquireConnectionInfo: + InquireConnectionInfo(json); + break; + case EInstruction.LoadAndUnload: + LoadAndUnload(json); + break; + case EInstruction.CancelLoadAndUnload: + //schedulResult = new SchedulingResult() { Instruction = EInstruction.CancelLoadAndUnload, State = ERunState.Busying, GroupID = sm.GroupID, TurnoverID = sm.TurnoverID }; + ReportToTestCenter(schedule); + break; + case EInstruction.InquireStatus: + SchedulingStatusInfo statusInto = JsonConvert.DeserializeObject(json); + switch (statusInto.Type) + { + case SchedulingStatusInfo.InfoType.State: + statusInto.Info = MachineManage.Instance.GetLoadUnloadStatus().ToString();// ERunState.Waiting.ToString(); + break; + case SchedulingStatusInfo.InfoType.RunStatus: + statusInto.Info = MachineManage.Instance.GetCenterRunStatus().ToString();// ERunStatus.Started.ToString(); + break; + case SchedulingStatusInfo.InfoType.RunMode: + statusInto.Info = MachineManage.Instance.RunMode.ToString(); + break; + case SchedulingStatusInfo.InfoType.InitializeState: + statusInto.Info = MachineManage.Instance.InitializeState.ToString();// EInitializeState.Initialized.ToString(); + break; + case SchedulingStatusInfo.InfoType.AssignMode: + statusInto.Info = EAssignMode.Normal.ToString(); + break; + case SchedulingStatusInfo.InfoType.TesterState: + statusInto.Info = JsonConvert.SerializeObject(MachineManage.Instance.GetTesterInfo());//.ToString(); + break; + default: + break; + } + ReportToTestCenter(statusInto); + //LogHelper.Debug(statusInto.ToString()); + ReplayTaskEvent?.Invoke(statusInto.ToString()); + break; + case EInstruction.SwitchStatus: + SchedulingStatusInfo switchStatus = JsonConvert.DeserializeObject(msg); + SwitchStatus(switchStatus); + //MachineManage.Instance.MachineStatus= EMachineStatus. + //if (ss.TryConvertInfoTo(out ERunMode runMode)) + // MachineManage.Instance.RunMode = runMode; + //client.Send(ss.ToString()); + //ReplayTaskEvent?.Invoke(ss.ToString()); + break; + case EInstruction.ClearAlarm: + break; + case EInstruction.GetRecipeList: + SchedulingResult sr = JsonConvert.DeserializeObject(msg); + sr.Message = "Default"; + client.Send(sr.ToString()); + ReplayTaskEvent?.Invoke(sr.ToString()); + break; + case EInstruction.SetRecipe: + break; + case EInstruction.GetCurrentRecipe: + SchedulingResult srcur = JsonConvert.DeserializeObject(msg); + srcur.Message = GlobalVar.CurRecipe; + client.Send(srcur.ToString()); + ReplayTaskEvent?.Invoke(srcur.ToString()); + break; + case EInstruction.TurnoverReady: + break; + case EInstruction.ChangeState: + SchedulingResult cs = JsonConvert.DeserializeObject(msg); + client.Send(cs.ToString()); + ReplayTaskEvent?.Invoke(cs.ToString()); + break; + case EInstruction.ShowMessage: + break; + case EInstruction.CloseMessage: + SchedulingMessageBox mbox = JsonConvert.DeserializeObject(json); + TestCenterMessageBox.RecivedMsg(mbox); + //TestCenterMessageBoxManager.GetMsgbox(mbox.ID)?.Recived(mbox); + break; + case EInstruction.MachineButtonDown: + break; + case EInstruction.MachineButtonUp: + break; + case EInstruction.TrayProductRange: + break; + case EInstruction.ClearTrayProductRange: + schedulResult = JsonConvert.DeserializeObject(msg); + client.Send(schedulResult.ToString()); + ReplayTaskEvent?.Invoke(schedulResult.ToString()); + break; + case EInstruction.BeginSwitchTray: + break; + case EInstruction.MoveScanner: + break; + case EInstruction.InquireMoveScannerState: + break; + case EInstruction.SetAlarms: + break; + case EInstruction.CancelAlarms: + SchedulingAlarms alarms = JsonConvert.DeserializeObject(msg); + if (alarms != null && alarms.Alarms != null && alarms.Alarms.Count > 0) { - if(!alarmInfos.ContainsKey(alarm.NO)) + foreach (AlarmItem alarm in alarms.Alarms) { - alarmInfos.Add(alarm.NO, alarm); + if (!alarmInfos.ContainsKey(alarm.NO)) + { + alarmInfos.Add(alarm.NO, alarm); + } } } - } - break; - case EInstruction.TakingError: - break; - case EInstruction.CancelTakingError: - break; - case EInstruction.ScanBarcode: - break; - } + break; + case EInstruction.TakingError: + break; + case EInstruction.CancelTakingError: + break; + case EInstruction.ScanBarcode: + break; + } + } + } + catch (Exception ex) + { + LogHelper.Debug("receivedata:" + msg); + LogHelper.Debug("接收数据异常:"+ex.Message); } - - //string msg=Encoding.UTF8.GetString(data); //LogHelper.TestCenterLog("接收:"+msg); //ReciveTaskEvent?.Invoke(msg); @@ -297,6 +302,13 @@ namespace Rs.MotionPlat.Flow SiloRearrange info = JsonConvert.DeserializeObject(json); ReportToTestCenter(info); Thread.Sleep(200); + + //TurnoverInfos tis = new TurnoverInfos(); + //tis.GroupID = 0; + //tis.Instruction = EInstruction.RearrangeResult; + //ReportToTestCenter(tis); + //MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + //return; if (info.SiloType == SchedulingSiloBase.ESiloType.Multifunction) { TraySlot ts = GlobalTray.MultiTray.GetSlot(Controls.ESlotStatus.NotHave); @@ -310,15 +322,18 @@ namespace Rs.MotionPlat.Flow } else { - List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Multifunction,TurnoverType.Multifunction, GlobalTray.MultiTray, ts, 1); - RearrangeTask.AddRanage(rearrangeList); - RearrangeFlow.Instance.Rearrange(); + Task.Run(() => { + List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Multifunction, TurnoverType.Multifunction, GlobalTray.MultiTray, ts, 1); + RearrangeTask.AddRanage(rearrangeList); + RearrangeFlow.Instance.Rearrange(); + }); + } } else if (info.SiloType == SchedulingSiloBase.ESiloType.Passed) { TraySlot ts = GlobalTray.OkTary.GetSlot(Controls.ESlotStatus.NotHave); - if (ts==null || ts.Column==0)//无需重排 + if (ts == null || ts.Column == 0)//无需重排 { TurnoverInfos tis = new TurnoverInfos(); tis.GroupID = 0; @@ -328,9 +343,13 @@ namespace Rs.MotionPlat.Flow } else { - List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed,TurnoverType.Passed, GlobalTray.OkTary, ts, 1); - RearrangeTask.AddRanage(rearrangeList); - RearrangeFlow.Instance.Rearrange(); + Task.Run(() => { + List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed, TurnoverType.Passed, GlobalTray.OkTary, ts, 1); + RearrangeTask.AddRanage(rearrangeList); + + RearrangeFlow.Instance.Rearrange(); + }); + } } else if (info.SiloType == SchedulingSiloBase.ESiloType.Failed) @@ -346,9 +365,12 @@ namespace Rs.MotionPlat.Flow } else { - List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed,TurnoverType.Failed, GlobalTray.NgTray,ts, 1); - RearrangeTask.AddRanage(rearrangeList); - RearrangeFlow.Instance.Rearrange(); + Task.Run(() => { + List rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed, TurnoverType.Failed, GlobalTray.NgTray, ts, 1); + RearrangeTask.AddRanage(rearrangeList); + RearrangeFlow.Instance.Rearrange(); + }); + } } } diff --git a/Rs.SkyLine/Properties/AssemblyInfo.cs b/Rs.SkyLine/Properties/AssemblyInfo.cs index 910f893..ff11555 100644 --- a/Rs.SkyLine/Properties/AssemblyInfo.cs +++ b/Rs.SkyLine/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ using System.Runtime.InteropServices; // //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: - [assembly: AssemblyVersion("2.20.24.5")] + [assembly: AssemblyVersion("2.20.24.8")] //[assembly: AssemblyVersion("1.0.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rs.SkyLine/Rs.SkyLine.csproj b/Rs.SkyLine/Rs.SkyLine.csproj index 4b345aa..c92dae2 100644 --- a/Rs.SkyLine/Rs.SkyLine.csproj +++ b/Rs.SkyLine/Rs.SkyLine.csproj @@ -86,7 +86,7 @@ False bin\Debug\Rs.DataAccess.dll - + False bin\Debug\Rs.Framework.dll @@ -715,6 +715,5 @@ - \ No newline at end of file