|
|
|
@ -128,6 +128,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
/// 未执行的任务数量
|
|
|
|
|
/// </summary>
|
|
|
|
|
private int undoTaskNum = 0;
|
|
|
|
|
int scanNum = 0;
|
|
|
|
|
public override void Run()
|
|
|
|
|
{
|
|
|
|
|
switch (flowStep)
|
|
|
|
@ -1469,179 +1470,186 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
if (LoadAndUnloadTask.Instance.GetUndealedLoadToTurnoverTask().Count == 0 && !GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
//没有需要给周转盘上料的任务后,就开始上相机扫码
|
|
|
|
|
//判断周转盘第一行有没有产品,如果有产品则拍第一行
|
|
|
|
|
if(TurnoverTrayManager.Instance.HasProduct(ETrayRow.One))
|
|
|
|
|
if(GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 1);
|
|
|
|
|
SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 8);
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanMulti(1, false);
|
|
|
|
|
List<VisionResult> result = UpCameraScanBarCodeFlow.Instance.Wait();
|
|
|
|
|
foreach (var vr in result)
|
|
|
|
|
scanNum++;
|
|
|
|
|
}
|
|
|
|
|
if(scanNum==1 || !GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
//没有需要给周转盘上料的任务后,就开始上相机扫码
|
|
|
|
|
//判断周转盘第一行有没有产品,如果有产品则拍第一行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One))
|
|
|
|
|
{
|
|
|
|
|
if(TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 1);
|
|
|
|
|
SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 8);
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanMulti(1, false);
|
|
|
|
|
List<VisionResult> result = UpCameraScanBarCodeFlow.Instance.Wait();
|
|
|
|
|
foreach (var vr in result)
|
|
|
|
|
{
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
if(!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if(GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex-1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if(vr.ScanBarCodeOK)
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr,true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex-1, vr.SN);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while(true)
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
if(failNum<4)
|
|
|
|
|
{
|
|
|
|
|
//如果扫码失败再重扫一次
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
|
|
|
|
|
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
|
|
if (vrsigle.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Cancel);
|
|
|
|
|
if(box.Button== ETipButton.Retry)
|
|
|
|
|
if (failNum < 4)
|
|
|
|
|
{
|
|
|
|
|
failNum = 1;
|
|
|
|
|
//如果扫码失败再重扫一次
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
|
|
|
|
|
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
|
|
if (vrsigle.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
break;
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Cancel);
|
|
|
|
|
if (box.Button == ETipButton.Retry)
|
|
|
|
|
{
|
|
|
|
|
failNum = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr,false);
|
|
|
|
|
}
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
}
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
}
|
|
|
|
|
//判断周转盘第三行有没有产品,如果有产品则拍第三行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.Three))
|
|
|
|
|
{
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 17);
|
|
|
|
|
SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 24);
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanMulti(24, true);
|
|
|
|
|
List<VisionResult> result = UpCameraScanBarCodeFlow.Instance.Wait();
|
|
|
|
|
foreach (var vr in result)
|
|
|
|
|
//判断周转盘第三行有没有产品,如果有产品则拍第三行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.Three))
|
|
|
|
|
{
|
|
|
|
|
if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 17);
|
|
|
|
|
SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 24);
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanMulti(24, true);
|
|
|
|
|
List<VisionResult> result = UpCameraScanBarCodeFlow.Instance.Wait();
|
|
|
|
|
foreach (var vr in result)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex-1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex- 1, vr.SN);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
if (failNum < 4)
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//如果扫码失败再重扫一次
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
|
|
|
|
|
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
|
|
if (vrsigle.ScanBarCodeOK)
|
|
|
|
|
if (failNum < 4)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
//如果扫码失败再重扫一次
|
|
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
|
|
|
|
|
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
|
|
if (vrsigle.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Skip);
|
|
|
|
|
if (box.Button == ETipButton.Retry)
|
|
|
|
|
{
|
|
|
|
|
failNum = 1;
|
|
|
|
|
}
|
|
|
|
|
else if(box.Button== ETipButton.Skip)
|
|
|
|
|
{
|
|
|
|
|
//OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
break;
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Skip);
|
|
|
|
|
if (box.Button == ETipButton.Retry)
|
|
|
|
|
{
|
|
|
|
|
failNum = 1;
|
|
|
|
|
}
|
|
|
|
|
else if (box.Button == ETipButton.Skip)
|
|
|
|
|
{
|
|
|
|
|
//OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr,false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|