|
|
|
@ -4,6 +4,7 @@ using Rs.Motion;
|
|
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
|
|
using Rs.MotionPlat.Entitys;
|
|
|
|
|
using Rs.MotionPlat.Flow.Common;
|
|
|
|
|
using Rs.MotionPlat.Flow.NormalFlow;
|
|
|
|
|
using Rs.MotionPlat.Flow.SafePosFlow;
|
|
|
|
|
using Rs.MotionPlat.Vision;
|
|
|
|
|
using System;
|
|
|
|
@ -18,7 +19,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
{
|
|
|
|
|
enum EFiveProductTestFlowStep
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
OK盘三点定位,
|
|
|
|
|
到料仓拍照位上方,
|
|
|
|
|
等待到料仓拍照位上方,
|
|
|
|
|
料仓取料拍照,
|
|
|
|
@ -59,7 +60,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
}
|
|
|
|
|
private AlarmEntity alarmEntity;
|
|
|
|
|
Stopwatch timeout = new Stopwatch();
|
|
|
|
|
EFiveProductTestFlowStep flowStep = EFiveProductTestFlowStep.到料仓拍照位上方;
|
|
|
|
|
EFiveProductTestFlowStep flowStep = EFiveProductTestFlowStep.OK盘三点定位;
|
|
|
|
|
|
|
|
|
|
int scanNum = 0;
|
|
|
|
|
string logInfo = string.Empty;
|
|
|
|
@ -114,9 +115,14 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
testFinishedNum = 0;
|
|
|
|
|
VirtualBarCode.Reset();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool binit = false;
|
|
|
|
|
public void Init()
|
|
|
|
|
{
|
|
|
|
|
if(binit)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
binit = true;
|
|
|
|
|
mainTask = new Task(Run);
|
|
|
|
|
mainTask.Start();
|
|
|
|
|
}
|
|
|
|
@ -125,7 +131,6 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
{
|
|
|
|
|
run = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int takeNum = 0;
|
|
|
|
|
private void Run()
|
|
|
|
|
{
|
|
|
|
@ -139,7 +144,16 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
switch (flowStep)
|
|
|
|
|
{
|
|
|
|
|
#region 料仓取料
|
|
|
|
|
case EFiveProductTestFlowStep.OK盘三点定位:
|
|
|
|
|
ThreePointLocationFlow.Instance.Location(ETrayType.Ok);
|
|
|
|
|
flowStep = EFiveProductTestFlowStep.到料仓拍照位上方;
|
|
|
|
|
break;
|
|
|
|
|
case EFiveProductTestFlowStep.到料仓拍照位上方:
|
|
|
|
|
//GlobalTray.InputTray.ChangeStatus(1, ESlotStatus.Have);
|
|
|
|
|
//GlobalTray.InputTray.ChangeStatus(2, ESlotStatus.Have);
|
|
|
|
|
//GlobalTray.InputTray.ChangeStatus(3, ESlotStatus.Have);
|
|
|
|
|
//GlobalTray.InputTray.ChangeStatus(4, ESlotStatus.Have);
|
|
|
|
|
//GlobalTray.InputTray.ChangeStatus(5, ESlotStatus.Have);
|
|
|
|
|
curTakeSlot = GlobalTray.InputTray.GetSlot(ESlotStatus.Have);
|
|
|
|
|
if (curTakeSlot != null)
|
|
|
|
|
{
|
|
|
|
@ -211,14 +225,15 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
break;
|
|
|
|
|
case EFiveProductTestFlowStep.到料仓取料位上方:
|
|
|
|
|
//获取空闲吸嘴
|
|
|
|
|
curTakeNozzle = NozzleManager.GetIdelNozzle();
|
|
|
|
|
//curTakeNozzle = NozzleManager.GetIdelNozzle();
|
|
|
|
|
curTakeNozzle = NozzleManager.GetNozzle(1);
|
|
|
|
|
if (curTakeNozzle != null)
|
|
|
|
|
{
|
|
|
|
|
targetPosition = NozzleManager.GetToTraySlot(ETrayType.Input, curTakeSlot.Index, curTakeNozzle.NozzleIndex);
|
|
|
|
|
if (curTakeNozzle != null)
|
|
|
|
|
{
|
|
|
|
|
targetPosition.X += vProductResult.OffsetX + offsetX;
|
|
|
|
|
targetPosition.Y2 += vProductResult.OffsetY +offsetY;
|
|
|
|
|
targetPosition.Y2 += vProductResult.OffsetY + offsetY;
|
|
|
|
|
if (GroupAxisMove.XY1Y2MovePos(targetPosition, GlobalVar.WholeSpeed))
|
|
|
|
|
{
|
|
|
|
|
AxisPosPrint.PrintXY1Y2TargetPos("到料仓取料位上方,", targetPosition, GetClassName());
|
|
|
|
@ -289,7 +304,6 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
case EFiveProductTestFlowStep.料仓取料真空吸检测:
|
|
|
|
|
if (Ops.IsOn($"吸料真空{curTakeNozzle.NozzleIndex}检测") || GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
takedNum++;
|
|
|
|
|
curTakeNozzle.Product = new TestProduct() { SN = "", FromSlotIndex = curTakeSlot.Index };
|
|
|
|
|
curTakeNozzle.Status = ENozzleStatus.ToUnload;
|
|
|
|
|
GlobalTray.NozzleTray.ChangeStatus(curTakeNozzle.NozzleIndex, ESlotStatus.Have);
|
|
|
|
@ -313,7 +327,8 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
//料仓放料
|
|
|
|
|
|
|
|
|
|
case EFiveProductTestFlowStep.到料仓放料位上方:
|
|
|
|
|
curDumpNozzle = NozzleManager.GetToUnloadNozzle();
|
|
|
|
|
//curDumpNozzle = NozzleManager.GetToUnloadNozzle();
|
|
|
|
|
curDumpNozzle = NozzleManager.GetNozzle(1);
|
|
|
|
|
if (curDumpNozzle != null)
|
|
|
|
|
{
|
|
|
|
|
//吸嘴放料,加测吸嘴上的产品的测试结果,决定把料放到哪个料仓
|
|
|
|
@ -393,17 +408,20 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
case EFiveProductTestFlowStep.等待料仓放料完成抬起:
|
|
|
|
|
if (Ops.IsStop($"NozzleZ{curDumpNozzle.NozzleIndex}"))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
logInfo = $"{GetClassName()}料仓放料完成已抬起";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
takedNum++;
|
|
|
|
|
if(takedNum<5)
|
|
|
|
|
curDumpNozzle.Status = ENozzleStatus.IDLE;
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(curDumpSlot.Index, ESlotStatus.Have);
|
|
|
|
|
|
|
|
|
|
if (takedNum < 5)
|
|
|
|
|
{
|
|
|
|
|
flowStep = EFiveProductTestFlowStep.到料仓拍照位上方;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
run = false;
|
|
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion(ESafePosSide.Stock);
|
|
|
|
|
stop = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -414,6 +432,19 @@ namespace Rs.MotionPlat.Flow.SubFlow
|
|
|
|
|
|
|
|
|
|
public void Start()
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(1, ESlotStatus.Have);
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(2, ESlotStatus.Have);
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(3, ESlotStatus.Have);
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(4, ESlotStatus.Have);
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(5, ESlotStatus.Have);
|
|
|
|
|
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(1, ESlotStatus.NotHave);
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(2, ESlotStatus.NotHave);
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(3, ESlotStatus.NotHave);
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(4, ESlotStatus.NotHave);
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(5, ESlotStatus.NotHave);
|
|
|
|
|
flowStep = EFiveProductTestFlowStep.OK盘三点定位;
|
|
|
|
|
takedNum = 0;
|
|
|
|
|
stop = false;
|
|
|
|
|
}
|
|
|
|
|
public void Stop()
|
|
|
|
|