|
|
|
@ -5,6 +5,7 @@ using Rs.MotionPlat.Commom;
|
|
|
|
|
using Rs.MotionPlat.Entitys;
|
|
|
|
|
using Rs.MotionPlat.Flow.Common;
|
|
|
|
|
using Rs.MotionPlat.Flow.NormalFlow;
|
|
|
|
|
using Rs.MotionPlat.Flow.SubFlow;
|
|
|
|
|
using Rs.MotionPlat.Module;
|
|
|
|
|
using Rs.MotionPlat.Vision;
|
|
|
|
|
using System;
|
|
|
|
@ -30,10 +31,12 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
料盘是否抓起检测,
|
|
|
|
|
上升一层,
|
|
|
|
|
等待上升一层完成,
|
|
|
|
|
到拍照位,
|
|
|
|
|
等待运动到拍照位,
|
|
|
|
|
通知上料仓拍照,
|
|
|
|
|
处理上料仓拍照数据,
|
|
|
|
|
//到拍照位,
|
|
|
|
|
//等待运动到拍照位,
|
|
|
|
|
//通知上料仓拍照,
|
|
|
|
|
//处理上料仓拍照数据,
|
|
|
|
|
上料仓拍照处理,
|
|
|
|
|
放料盘前拍照,
|
|
|
|
|
到放料盘上方,
|
|
|
|
|
等待到放料盘上方,
|
|
|
|
|
到放料盘位下方,
|
|
|
|
@ -95,7 +98,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
/// <param name="takeTrayFinishedEvent">搬运料盘被拿起后事件</param>
|
|
|
|
|
/// <param name="arrivedDumpPosEvent">到达放料盘位上方事件</param>
|
|
|
|
|
/// <param name="dumpTrayFinishedEvent">放料盘完成后事件</param>
|
|
|
|
|
public void Take(ETrayType fromTray, ETrayType toTray,bool isNeedGoDown=true)
|
|
|
|
|
public void Take(ETrayType fromTray, ETrayType toTray,bool isNeedGoDown=true,bool placeTrayGrab=false)
|
|
|
|
|
{
|
|
|
|
|
switch (fromTray)
|
|
|
|
|
{
|
|
|
|
@ -272,79 +275,94 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case ETakeTrayFlowStep.等待上升一层完成:
|
|
|
|
|
if(fromTray== ETrayType.Input)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.到拍照位;
|
|
|
|
|
step = ETakeTrayFlowStep.上料仓拍照处理;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ETakeTrayFlowStep.到拍照位:
|
|
|
|
|
targetPosition.TakeTrayX = GlobalVar.InputStockGrabPos;
|
|
|
|
|
if(GroupAxisMove.TakeXMove(GetClassName(), targetPosition.TakeTrayX, GlobalVar.WholeSpeed))
|
|
|
|
|
{
|
|
|
|
|
logInfo = GetClassName() + $"到料仓{toTray}拍照位";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
step = ETakeTrayFlowStep.等待运动到拍照位;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ETakeTrayFlowStep.等待运动到拍照位:
|
|
|
|
|
if(Ops.IsStop("TakeTrayX"))
|
|
|
|
|
case ETakeTrayFlowStep.上料仓拍照处理:
|
|
|
|
|
StockGrabFlow.Instance.Grab(fromTray);
|
|
|
|
|
if(placeTrayGrab)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.通知上料仓拍照;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ETakeTrayFlowStep.通知上料仓拍照:
|
|
|
|
|
if(GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
vr = VisionHelper.Grab(Vision.EVisionScene.HaveOrNot);
|
|
|
|
|
if (vr.Result)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.处理上料仓拍照数据;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Msg.ShowError("有无相机拍照失败,点击确定后重拍");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case ETakeTrayFlowStep.处理上料仓拍照数据:
|
|
|
|
|
List<int> noHasProduct = new List<int>();
|
|
|
|
|
for(int i=0;i<vr.Products.Length;i++)
|
|
|
|
|
{
|
|
|
|
|
if (vr.Products[i]=='1')
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(i + 1, ESlotStatus.Have);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
noHasProduct.Add(i + 1);
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(i + 1, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(noHasProduct.Count>0)
|
|
|
|
|
{
|
|
|
|
|
EButtonType btn = Msgbox.ShowDialog(EButtonType.Retry | EButtonType.Skip, "料盘未放满,请处理","tray info",true);
|
|
|
|
|
if(btn== EButtonType.Retry)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.通知上料仓拍照;
|
|
|
|
|
}
|
|
|
|
|
else if(btn== EButtonType.Skip)
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
}
|
|
|
|
|
step = ETakeTrayFlowStep.放料盘前拍照;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case ETakeTrayFlowStep.放料盘前拍照:
|
|
|
|
|
StockGrabFlow.Instance.Grab(toTray);
|
|
|
|
|
step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
break;
|
|
|
|
|
//case ETakeTrayFlowStep.到拍照位:
|
|
|
|
|
// targetPosition.TakeTrayX = GlobalVar.InputStockGrabPos;
|
|
|
|
|
// if(GroupAxisMove.TakeXMove(GetClassName(), targetPosition.TakeTrayX, GlobalVar.WholeSpeed))
|
|
|
|
|
// {
|
|
|
|
|
// logInfo = GetClassName() + $"到料仓{toTray}拍照位";
|
|
|
|
|
// MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
// step = ETakeTrayFlowStep.等待运动到拍照位;
|
|
|
|
|
// }
|
|
|
|
|
// break;
|
|
|
|
|
//case ETakeTrayFlowStep.等待运动到拍照位:
|
|
|
|
|
// if(Ops.IsStop("TakeTrayX"))
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.通知上料仓拍照;
|
|
|
|
|
// }
|
|
|
|
|
// break;
|
|
|
|
|
//case ETakeTrayFlowStep.通知上料仓拍照:
|
|
|
|
|
// if(GlobalVar.RunSpace)
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// vr = VisionHelper.Grab(Vision.EVisionScene.HaveOrNot);
|
|
|
|
|
// if (vr.Result)
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.处理上料仓拍照数据;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// Msg.ShowError("有无相机拍照失败,点击确定后重拍");
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
//case ETakeTrayFlowStep.处理上料仓拍照数据:
|
|
|
|
|
// List<int> noHasProduct = new List<int>();
|
|
|
|
|
// for(int i=0;i<vr.Products.Length;i++)
|
|
|
|
|
// {
|
|
|
|
|
// if (vr.Products[i]=='1')
|
|
|
|
|
// {
|
|
|
|
|
// GlobalTray.InputTray.ChangeStatus(i + 1, ESlotStatus.Have);
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// noHasProduct.Add(i + 1);
|
|
|
|
|
// GlobalTray.InputTray.ChangeStatus(i + 1, ESlotStatus.NotHave);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// if(noHasProduct.Count>0)
|
|
|
|
|
// {
|
|
|
|
|
// EButtonType btn = Msgbox.ShowDialog(EButtonType.Retry | EButtonType.Skip, "料盘未放满,请处理","tray info",true);
|
|
|
|
|
// if(btn== EButtonType.Retry)
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.通知上料仓拍照;
|
|
|
|
|
// }
|
|
|
|
|
// else if(btn== EButtonType.Skip)
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// step = ETakeTrayFlowStep.到放料盘上方;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
case ETakeTrayFlowStep.到放料盘上方:
|
|
|
|
|
//if (DischargeFlow.Instance.XYCanGoLocalArea())
|
|
|
|
|
{
|
|
|
|
|