|
|
|
@ -121,6 +121,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
int needGrabNum = 0;//需要拍照的吸嘴数量
|
|
|
|
|
int reGrabCount = 0;//重拍次数
|
|
|
|
|
ErrorCode errCode = ErrorCode.Ok;
|
|
|
|
|
string logInfo = "";
|
|
|
|
|
List<TurnoverInfo> testLoadList = new List<TurnoverInfo>();
|
|
|
|
|
List<TurnoverInfo> testUnLoadList = new List<TurnoverInfo>();
|
|
|
|
|
public override void Run()
|
|
|
|
|
{
|
|
|
|
|
switch (flowStep)
|
|
|
|
@ -132,14 +135,23 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad)>0)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"接收到测试工位上料任务";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.测试工位上料;
|
|
|
|
|
}
|
|
|
|
|
else if(LoadAndUnloadTask.Instance.GetTaskNum( ETaskMode.TestUnload)>0)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"接收到测试工位下料任务";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.测试工位下料;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"接收到排料任务";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.到取料位上方;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -167,22 +179,29 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
curSlotPoint = null;
|
|
|
|
|
if (curTask.FromType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"吸嘴{curTask.FromIndex + 1} 去周转盘 {curTask.FromIndex + 1} 号穴位取料";
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN);
|
|
|
|
|
MessageQueue.Instance.Insert($"吸嘴{curTask.FromIndex + 1} 去周转盘 {curTask.FromIndex + 1} 号穴位取料");
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
}
|
|
|
|
|
else if (curTask.FromType == TurnoverType.ToBeTested)
|
|
|
|
|
{
|
|
|
|
|
TraySlot slot = GlobalTray.InputTray.GetSlot(ESlotStatus.Have);
|
|
|
|
|
if (slot != null)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"吸嘴{curNozzle.NozzleIndex} 去Input盘 {slot.Index} 号穴位取料";
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Input", slot.Index, EPointType.BASE);
|
|
|
|
|
MessageQueue.Instance.Insert($"吸嘴{curNozzle.NozzleIndex} 去Input盘 {slot.Index} 号穴位取料");
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// Msg.ShowInfo("Input料盘缺料,请手动切盘后点击确定");
|
|
|
|
|
// GlobalTray.InputTray.ResetTray();
|
|
|
|
|
// GlobalTray.InputTray.Fill();
|
|
|
|
|
logInfo = "检测到Input料盘无料,准备上料盘";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
TakeTrayFlow.Instance.Take(EStockType.Input, EStockType.Empty1, ELoadUnloadType.Unload);
|
|
|
|
|
restoreFlowStep = EWorkFlowStep.到取料位上方;
|
|
|
|
|
flowStep = EWorkFlowStep.等待Input料盘搬运完成;
|
|
|
|
@ -214,7 +233,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Msg.ShowError("x y move isn't safe");
|
|
|
|
|
logInfo = "x y move isn't safe";
|
|
|
|
|
Msg.ShowError(logInfo);
|
|
|
|
|
LogHelper.Error(logInfo);
|
|
|
|
|
MessageQueue.Instance.Warn(logInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -222,16 +244,20 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.等待到取料位上方:
|
|
|
|
|
if (Ops.IsStop("LoadX","LoadY", $"NozzleR{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "已运动到取料位上方";
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.到取料位下方;
|
|
|
|
|
MessageQueue.Instance.Insert("已运动到取料位上方");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.到取料位下方:
|
|
|
|
|
if(AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus== EHomeStatus.Finished)
|
|
|
|
|
{
|
|
|
|
|
MessageQueue.Instance.Insert("准备运动到取料位下方");
|
|
|
|
|
logInfo = "准备运动到取料位下方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
if (curTask.FromType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed);
|
|
|
|
@ -247,49 +273,75 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Msg.ShowError($"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定");
|
|
|
|
|
logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定";
|
|
|
|
|
Msg.ShowError(logInfo);
|
|
|
|
|
LogHelper.Error(logInfo);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待到取料位下方:
|
|
|
|
|
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
Thread.Sleep(GlobalVar.AxisArrivedWaittime);
|
|
|
|
|
MessageQueue.Instance.Insert("已运动到取料位下方");
|
|
|
|
|
logInfo = "已运动到取料位下方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.开真空;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.开真空:
|
|
|
|
|
Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
|
|
|
|
|
MessageQueue.Instance.Insert($"打开{curNozzle.NozzleIndex}号吸嘴真空吸");
|
|
|
|
|
Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime);
|
|
|
|
|
logInfo = $"打开{curNozzle.NozzleIndex}号吸嘴真空吸";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper .Debug(logInfo);
|
|
|
|
|
if (curTask.FromType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空吸";
|
|
|
|
|
Ops.Off($"周转盘{curTask.FromIndex+1}号穴位真空吸");
|
|
|
|
|
Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime);
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper .Debug(logInfo);
|
|
|
|
|
logInfo = $"打开周转盘{curTask.FromIndex + 1}号穴位真空破";
|
|
|
|
|
Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破");
|
|
|
|
|
Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime);
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空破";
|
|
|
|
|
Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破");
|
|
|
|
|
Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime);
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper .Debug(logInfo);
|
|
|
|
|
}
|
|
|
|
|
flowStep = EWorkFlowStep.取料完成抬起;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case EWorkFlowStep.取料完成抬起:
|
|
|
|
|
|
|
|
|
|
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed);
|
|
|
|
|
if (errCode == ErrorCode.Ok)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "取料完成准备抬起";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug (logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.等待取料完成抬起;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待取料完成抬起:
|
|
|
|
|
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "取料完成已运动到抬起位,准备真空检测";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.取料真空检测;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.取料真空检测:
|
|
|
|
|
if (Ops.IsOn($"{curNozzle.NozzleIndex}号吸嘴真空吸检测") || GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
FetchNum = 0;
|
|
|
|
|
logInfo = $"吸嘴{curNozzle.NozzleIndex}真空检测 OK";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
curNozzle.Status = ENozzleStatus.ToUnload;
|
|
|
|
|
curNozzle.FromType = curTask.FromType;
|
|
|
|
|
curNozzle.FromFloor = curTask.FromFloor;
|
|
|
|
@ -298,8 +350,6 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
curNozzle.ToIndex = curTask.ToIndex;
|
|
|
|
|
curTask.SuckerNo = curNozzle.NozzleIndex ;
|
|
|
|
|
curNozzle.TurnoverGUID = curTask.GUID;
|
|
|
|
|
|
|
|
|
|
FetchNum = 0;
|
|
|
|
|
if (curTask.FromType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
curNozzle.SN = curTask.SN;
|
|
|
|
@ -313,8 +363,12 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
curNozzle.Update();
|
|
|
|
|
curTask.Dealed = true;
|
|
|
|
|
if (LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode)>0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
|
|
|
|
|
int undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode);
|
|
|
|
|
if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续执行";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.到取料位上方;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -411,6 +465,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.到下相机拍照起始位:
|
|
|
|
|
if (XYCanMove())
|
|
|
|
|
{
|
|
|
|
|
logInfo = "到下相机拍照起始位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
ImageProcess.ClearAutoTrigger();
|
|
|
|
|
HikCamera.Instance.SetExposure("locationCamera", GlobalVar.FlyGrabExposureTime);
|
|
|
|
|
HikCamera.Instance.SetGain("locationCamera", GlobalVar.FlyGrabGain);
|
|
|
|
@ -432,6 +489,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.等待到下相机拍照起始位:
|
|
|
|
|
if (Ops.IsStop("LoadX", "LoadY"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "已运动到下相机拍照起始位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto);
|
|
|
|
|
List<double> grabPoints = new List<double>();
|
|
|
|
@ -463,6 +523,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.到下相机拍照结束位:
|
|
|
|
|
if (XYCanMove())
|
|
|
|
|
{
|
|
|
|
|
logInfo = "到下相机拍照结束位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
IoManager.Instance.WriteOut("下左相机光源触发", 1);
|
|
|
|
|
Thread.Sleep(50);
|
|
|
|
|
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover)
|
|
|
|
@ -483,6 +546,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
|
|
|
|
|
if (Ops.IsStop("LoadX"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "已运动到下相机拍照结束位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
|
|
|
|
|
AxisControl.LoadX.ClearCompare(1);
|
|
|
|
|
IoManager.Instance.WriteOut("下左相机光源触发", 0);
|
|
|
|
|
flowStep = EWorkFlowStep.等待相机拍照完成;
|
|
|
|
@ -493,6 +560,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
imgs = ImageProcess.GetAutoImage();
|
|
|
|
|
if (imgs != null && imgs.Length == needGrabNum)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "相机拍照完成,准备处理照片";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
|
|
|
|
|
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
imgs = imgs.Reverse().ToArray();
|
|
|
|
@ -524,6 +595,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
mrs = VisionProcess.Instance.MatchDownCam(imgs);
|
|
|
|
|
if (mrs != null && mrs.Count == imgs.Length && mrs.Where(m=>m.IsOK==true).Count()==imgs.Length)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "图片处理完成,准备放料";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
//foreach (Nozzle nozzle in NozzleManager.GetNozzles())
|
|
|
|
|
//{
|
|
|
|
|
// nozzle.SN = Guid.NewGuid().ToString();
|
|
|
|
@ -585,6 +659,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.到放料位上方:
|
|
|
|
|
if (XYCanMove())
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
turnoverOffsetPoint.Reset();
|
|
|
|
|
tray = null;
|
|
|
|
|
targetX = 0.0;
|
|
|
|
@ -596,15 +671,22 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
if (curNozzle.ToType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "到周转盘放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curNozzle.ToIndex + 1, EPointType.RUN);
|
|
|
|
|
turnoverOffsetPoint = TurnoverSlotOffset.GetOffsetPoint(curNozzle.ToIndex + 1);
|
|
|
|
|
}
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.ToBeTested)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "到input盘放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
|
|
|
|
|
downSlot = GlobalTray.InputTray.GetSlot(ESlotStatus.NotHave);
|
|
|
|
|
if (downSlot != null)
|
|
|
|
|
{
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Input", downSlot.Index, EPointType.RUN);
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Input", downSlot.Index, EPointType.BASE);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -619,6 +701,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Passed)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
logInfo = "到Pass盘放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
//OK料仓切盘
|
|
|
|
|
downSlot = GlobalTray.OkTary.GetSlot(ESlotStatus.NotHave);
|
|
|
|
|
if (downSlot != null)
|
|
|
|
@ -641,6 +727,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Failed)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
logInfo = "到Ng盘放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
downSlot = GlobalTray.NgTray.GetSlot(ESlotStatus.NotHave);
|
|
|
|
|
if (downSlot != null)
|
|
|
|
|
{
|
|
|
|
@ -660,6 +750,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Multifunction)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "到Multi盘放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
downSlot = GlobalTray.MultiTray.GetSlot(ESlotStatus.NotHave);
|
|
|
|
|
if (downSlot != null)
|
|
|
|
|
{
|
|
|
|
@ -716,12 +809,17 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
if (Ops.IsStop("LoadX", "LoadY",$"NozzleR{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
logInfo = "已运动到放料位上方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.到放料位下方;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.到放料位下方:
|
|
|
|
|
|
|
|
|
|
logInfo = "到放料位下方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
if (curNozzle.ToType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed);
|
|
|
|
@ -739,6 +837,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.等待到放料位下方:
|
|
|
|
|
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "已运动到放料位下方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
if (curNozzle.ToType== TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
Ops.On($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸");
|
|
|
|
@ -800,12 +901,18 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed);
|
|
|
|
|
if (errCode == ErrorCode.Ok)
|
|
|
|
|
{
|
|
|
|
|
logInfo = "放料完成抬起";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.等待放料完成抬起;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待放料完成抬起:
|
|
|
|
|
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "放料完成已运动到抬起位,准备真空检测";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
flowStep = EWorkFlowStep.放料真空检测;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -814,10 +921,17 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
if (Ops.IsOn($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测") || GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测 OK";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
|
|
|
|
|
flowStep = EWorkFlowStep.放料任务完成;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
logInfo = $"放料时周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常";
|
|
|
|
|
MessageQueue.Instance.Warn(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过");
|
|
|
|
|
if (dr == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
@ -831,6 +945,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.放料任务完成:
|
|
|
|
|
logInfo = "放料任务完成";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home();
|
|
|
|
|
//Ops.HomeAndGoStartPos($"NozzleR{NozzleIndex}");
|
|
|
|
|
if (curNozzle.ToType == TurnoverType.Turnover)
|
|
|
|
@ -874,6 +991,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case EWorkFlowStep.任务结束到安全位:
|
|
|
|
|
logInfo = "任务结束到安全位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("LoadXStartPos"), GlobalVar.WholeSpeed);
|
|
|
|
|
if(errCode== ErrorCode.Ok)
|
|
|
|
|
{
|
|
|
|
@ -887,16 +1007,27 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.等待任务结束到安全位:
|
|
|
|
|
if(Ops.IsStop("LoadX","LoadY"))
|
|
|
|
|
{
|
|
|
|
|
logInfo = "任务结束已回到安全位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
if (TestCenter.Instance.LoadResult())
|
|
|
|
|
{
|
|
|
|
|
logInfo = "通知中控任务完成";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
|
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
|
logInfo = "任务完成,清除任务";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
LogHelper.Debug(logInfo);
|
|
|
|
|
}
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Waiting;
|
|
|
|
|
flowStep = EWorkFlowStep.等待任务;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.测试工位上料:
|
|
|
|
|
TurnoverFlow.Instance.PressLoad(LoadAndUnloadTask.Instance.GetTestLoadTasks());
|
|
|
|
|
testLoadList = LoadAndUnloadTask.Instance.GetTestLoadTasks();
|
|
|
|
|
TurnoverFlow.Instance.PressLoad(testLoadList);
|
|
|
|
|
flowStep = EWorkFlowStep.等待测试工位上料完成;
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待测试工位上料完成:
|
|
|
|
@ -906,35 +1037,45 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
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++)
|
|
|
|
|
foreach (TurnoverInfo turnoverInfo in testLoadList)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave);
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.FromIndex, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
//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;
|
|
|
|
|
case EWorkFlowStep.测试工位下料:
|
|
|
|
|
TurnoverFlow.Instance.PressUnload(LoadAndUnloadTask.Instance.GetTestUnLoadTasks());
|
|
|
|
|
testUnLoadList = LoadAndUnloadTask.Instance.GetTestUnLoadTasks();
|
|
|
|
|
TurnoverFlow.Instance.PressUnload(testUnLoadList);
|
|
|
|
|
flowStep = EWorkFlowStep.等待测试工位下料完成;
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待测试工位下料完成:
|
|
|
|
|
if (TurnoverFlow.Instance.UnloadFinished())
|
|
|
|
|
{
|
|
|
|
|
//logInfo = string.Join(",",testUnLoadList.Select(t=>t.ToIndex).ToList());
|
|
|
|
|
TestCenter.Instance.LoadTestUnLoadResult();
|
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
|
//切换穴位状态
|
|
|
|
|
for (int i = 9; i < 17; i++)
|
|
|
|
|
foreach (TurnoverInfo turnoverInfo in testUnLoadList)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.Have);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 25; i < 33; i++)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.Have);
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.ToIndex, ESlotStatus.Have);
|
|
|
|
|
}
|
|
|
|
|
//for (int i = 9; i < 17; i++)
|
|
|
|
|
//{
|
|
|
|
|
// GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.Have);
|
|
|
|
|
//}
|
|
|
|
|
//for (int i = 25; i < 33; i++)
|
|
|
|
|
//{
|
|
|
|
|
// GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.Have);
|
|
|
|
|
//}
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Waiting;
|
|
|
|
|
flowStep = EWorkFlowStep.等待任务;
|
|
|
|
|
}
|
|
|
|
|