diff --git a/Rs.MotionPlat/Commom/NozzleCollection.cs b/Rs.MotionPlat/Commom/NozzleCollection.cs index bc46c95..baaa910 100644 --- a/Rs.MotionPlat/Commom/NozzleCollection.cs +++ b/Rs.MotionPlat/Commom/NozzleCollection.cs @@ -84,7 +84,7 @@ namespace Rs.MotionPlat.Commom public static void Init() { nozzles.Clear(); - string querySql = "select * from nozzle where enable=1"; + string querySql = "select * from nozzle where enable=1 and nozzleindex<=8"; DataTable dt = db.GetDataTable(querySql); if(dt!=null&&dt.Rows.Count>0) { @@ -108,7 +108,7 @@ namespace Rs.MotionPlat.Commom { if(nozzles!=null && nozzles.Count>0) { - return nozzles.Where(n => n.Status == status).ToList(); + return nozzles.Where(n => n.Status == status).OrderBy(n=>n.NozzleIndex).ToList(); } return null; } diff --git a/Rs.MotionPlat/Flow/LoadAndUnloadTask.cs b/Rs.MotionPlat/Flow/LoadAndUnloadTask.cs index c4d2046..3da9659 100644 --- a/Rs.MotionPlat/Flow/LoadAndUnloadTask.cs +++ b/Rs.MotionPlat/Flow/LoadAndUnloadTask.cs @@ -272,7 +272,7 @@ namespace Rs.MotionPlat.Flow ti.FromType = ai.Load.Type; ti.FromFloor = ai.Load.Floor; ti.FromIndex = ai.Load.Index; - + ti.SN = ai.SN; ti.ToType = ai.To.Type; ti.ToFloor = ai.To.Floor; ti.ToIndex = ai.To.Index; diff --git a/Rs.MotionPlat/Flow/TestStationFlow.cs b/Rs.MotionPlat/Flow/TestStationFlow.cs new file mode 100644 index 0000000..4b511f9 --- /dev/null +++ b/Rs.MotionPlat/Flow/TestStationFlow.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Rs.MotionPlat.Flow +{ + public class TestStationFlow + { + } +} diff --git a/Rs.MotionPlat/Flow/TurnoverFlow.cs b/Rs.MotionPlat/Flow/TurnoverFlow.cs index 3df34f9..8df7a17 100644 --- a/Rs.MotionPlat/Flow/TurnoverFlow.cs +++ b/Rs.MotionPlat/Flow/TurnoverFlow.cs @@ -65,7 +65,9 @@ namespace Rs.MotionPlat.Flow gotoTurnoverDownPosDumpPro, waitArriveTurnoverDownPosDumpPro, gotoTurnoverUpPosDumpOver, - waitArriveTurnoverUpPosDumpOver + waitArriveTurnoverUpPosDumpOver, + gotoSafePos, + waitArriveSafePos, } @@ -497,12 +499,42 @@ namespace Rs.MotionPlat.Flow } MessageQueue.Instance.Insert($"arrived turnover tray up position TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"); Thread.Sleep(100); - count++; - unloadOk = true; + //判断周转盘是否有需要测试的穴位 + List haveSlots =GlobalTray.TurnoverTray.GetSlots(ESlotStatus.Have); + if(haveSlots!=null&&haveSlots.Count>0) + { + if(haveSlots.Where(s=>((s.Index>=1 && s.Index<=8)||(s.Index>=17 && s.Index<=24))).Count()==0) + { + //周转盘没有需要测试的穴位,把轴移动到安全位 + Step = ETurnoverFlowStep.gotoSafePos; + } + else + { + unloadOk = true; + Step = ETurnoverFlowStep.waitCommand; + } + } + else + { + unloadOk = true; + Step = ETurnoverFlowStep.waitCommand; + } + + } + break; + case ETurnoverFlowStep.gotoSafePos: + AxisControl.TurnoverY.MovePos(SysConfigParam.GetValue("PressTakeY"), GlobalVar.WholeSpeed); + Step = ETurnoverFlowStep.waitArriveSafePos; + break; + case ETurnoverFlowStep.waitArriveSafePos: + if(Ops.IsStop("TurnoverY")) + { + Step = ETurnoverFlowStep.waitCommand; } break; - + + } } diff --git a/Rs.MotionPlat/Flow/WorkFlow.cs b/Rs.MotionPlat/Flow/WorkFlow.cs index 88db9fe..0153216 100644 --- a/Rs.MotionPlat/Flow/WorkFlow.cs +++ b/Rs.MotionPlat/Flow/WorkFlow.cs @@ -82,14 +82,6 @@ namespace Rs.MotionPlat.Flow //}; } - /// - /// 当前取料穴位 - /// - private ushort CurFetchSlotIndex = 1; - /// - /// 当前组装穴位 - /// - private ushort CurAssembleSlotInex = 1; /// /// 吸嘴索引 /// @@ -113,6 +105,7 @@ namespace Rs.MotionPlat.Flow SlotPoint nozzleDist = new SlotPoint(); List unloadNozzles = new List(); TraySlot downSlot = new TraySlot(); + int needGrabNum = 0;//需要拍照的吸嘴数量 ErrorCode errCode = ErrorCode.Ok; public override void Run() { @@ -121,14 +114,14 @@ namespace Rs.MotionPlat.Flow case EWorkFlowStep.等待任务: if (LoadAndUnloadTask.Instance.Count > 0) { - totalTask = LoadAndUnloadTask.Instance.GetTask(); - int totalNum = totalTask.Count; - LoadAndUnloadTask.Instance.Categories.Count(); - string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString(); - if (LoadAndUnloadTask.Instance.Categories.Count > 1) - { - string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString(); - } + //totalTask = LoadAndUnloadTask.Instance.GetTask(); + //int totalNum = totalTask.Count; + //LoadAndUnloadTask.Instance.Categories.Count(); + //string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString(); + //if (LoadAndUnloadTask.Instance.Categories.Count > 1) + //{ + // string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString(); + //} //if (totalTask[0].FromType == TurnoverType.Turnover && totalTask[0].ToType == TurnoverType.Tester) //{ // TestCenter.Instance.LoadAndUnloadResult(totalTask); @@ -163,6 +156,7 @@ namespace Rs.MotionPlat.Flow idleNozzle = NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE); if (idleNozzle != null && idleNozzle.Count > 0) { + //这里改变吸嘴的状态 NozzleIndex = idleNozzle[0].NozzleIndex; idleNozzle[0].Status = ENozzleStatus.ToUnload; idleNozzle[0].ToType = curTurnoverTask.ToType; @@ -258,13 +252,13 @@ namespace Rs.MotionPlat.Flow FetchNum = 0; if (curTurnoverTask.FromType == TurnoverType.Turnover) { - //curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTurnoverTask.FromIndex + 1, EPointType.RUN); + GlobalTray.TurnoverTray.ChangeStatus(curTurnoverTask.FromIndex+1, ESlotStatus.NotHave); } else if (curTurnoverTask.FromType == TurnoverType.ToBeTested) { GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); } - if (totalTask.Where(t => t.Dealed == false).Count() > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count >1) + if (totalTask.Where(t => t.Dealed == false).Count() > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count >0) { flowStep = EWorkFlowStep.到取料位上方; } @@ -272,7 +266,6 @@ namespace Rs.MotionPlat.Flow { flowStep = EWorkFlowStep.到下相机拍照起始位; } - CurFetchSlotIndex++; } else { @@ -303,7 +296,9 @@ namespace Rs.MotionPlat.Flow Thread.Sleep(100); HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto); List grabPoints = new List(); - for(int i=1;i<9;i++) + //获取有几个吸嘴需要拍照 + needGrabNum = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count(); + for(int i=1;i< needGrabNum+1; i++) { grabPoints.Add(SysConfigParam.GetValue($"Nozzle{i}CenterX")); } @@ -320,7 +315,7 @@ namespace Rs.MotionPlat.Flow { IoManager.Instance.WriteOut("下左相机光源触发", 1); Thread.Sleep(50); - AxisControl.LoadX.MovePos(SysConfigParam.GetValue("Nozzle9CenterX") - 10, GlobalVar.FlyCameraSpeed); + AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed); flowStep = EWorkFlowStep.等待到下相机拍照结束位; } @@ -338,7 +333,7 @@ namespace Rs.MotionPlat.Flow break; case EWorkFlowStep.等待相机拍照完成: imgs = ImageProcess.GetAutoImage(); - if (imgs != null && imgs.Length == 8) + if (imgs != null && imgs.Length == needGrabNum) { CameraOkEvent?.Invoke(imgs, null); if (GlobalVar.RunSpace) @@ -390,7 +385,6 @@ namespace Rs.MotionPlat.Flow { NozzleIndex = unloadNozzles[0].NozzleIndex; } - if (unloadNozzles[0].ToType == TurnoverType.Turnover) { curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", unloadNozzles[0].ToIndex + 1, EPointType.RUN); @@ -511,11 +505,9 @@ namespace Rs.MotionPlat.Flow } else { - //回复中控,排料完成 flowStep = EWorkFlowStep.任务结束到安全位; } } - CurAssembleSlotInex++; } break; case EWorkFlowStep.任务结束到安全位: @@ -550,6 +542,15 @@ namespace Rs.MotionPlat.Flow TestCenter.Instance.LoadAndUnloadResult(totalTask); LoadAndUnloadTask.Instance.Clear(); MachineManage.Instance.RunState = ERunState.Waiting; + //切换穴位状态 + for(int i=1;i<9;i++) + { + GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave); + } + for (int i = 17; i < 25; i++) + { + GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave); + } flowStep = EWorkFlowStep.等待任务; } break; @@ -562,6 +563,15 @@ namespace Rs.MotionPlat.Flow { TestCenter.Instance.LoadAndUnloadResult(totalTask); LoadAndUnloadTask.Instance.Clear(); + //切换穴位状态 + for (int i = 9; i < 17; i++) + { + GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave); + } + for (int i = 25; i < 33; i++) + { + GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave); + } MachineManage.Instance.RunState = ERunState.Waiting; flowStep = EWorkFlowStep.等待任务; } @@ -593,9 +603,21 @@ namespace Rs.MotionPlat.Flow return 0; } } - + /// + /// 检测排料Y轴是否可以到周转盘 + /// + /// + private bool CanGoTurnoverTray() + { + //获取周转Y轴的位置,当排料Y轴去周转盘的时候,检测是否安全 + double turnoverYPos = Ops.GetCurPosition("TurnoverY"); + if (turnoverYPos - SysConfigParam.GetValue("PressY") < -1) + return false; + return true; + } private bool XYCanMove() { + //AxisControl.VacZ1.GetOrgStatus(out bool bOrgZ1); //AxisControl.VacZ2.GetOrgStatus(out bool bOrgZ2); //if (AxisControl.LoadX.HomeStatus == EHomeStatus.Finished diff --git a/Rs.MotionPlat/Rs.MotionPlat.csproj b/Rs.MotionPlat/Rs.MotionPlat.csproj index a9667c7..8ced5c5 100644 --- a/Rs.MotionPlat/Rs.MotionPlat.csproj +++ b/Rs.MotionPlat/Rs.MotionPlat.csproj @@ -159,6 +159,7 @@ +