|
|
|
@ -632,6 +632,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ScanBarCode();
|
|
|
|
|
flowStep = EDischargeFlowStep.任务结束到安全位;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1542,202 +1543,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
if(curNozzle.ToType== TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
if (LoadAndUnloadTask.Instance.GetUndealedLoadToTurnoverTask().Count == 0 && !GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
if(GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
scanNum++;
|
|
|
|
|
}
|
|
|
|
|
if(scanNum==1 || !GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
if(GlobalVar.EnableVirtuleBarCode)
|
|
|
|
|
{
|
|
|
|
|
List<TurnoverTraySlot> slots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
|
|
foreach (var slot in slots)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(slot.Index - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//没有需要给周转盘上料的任务后,就开始上相机扫码
|
|
|
|
|
//判断周转盘第一行有没有产品,如果有产品则拍第一行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One))
|
|
|
|
|
{
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
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 (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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, vrsigle.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.扫码失败), vr.SlotIndex);
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.扫码失败, alarmInfo, 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//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.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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, vrsigle.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ScanBarCode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LoadAndUnloadTask.Instance.GetUnDealedTask().Count > 0)
|
|
|
|
@ -1817,6 +1623,207 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ScanBarCode()
|
|
|
|
|
{
|
|
|
|
|
SchedulingMessageBox box = new SchedulingMessageBox();
|
|
|
|
|
if (LoadAndUnloadTask.Instance.GetUndealedLoadToTurnoverTask().Count == 0 && !GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
scanNum++;
|
|
|
|
|
}
|
|
|
|
|
if (scanNum == 1 || !GlobalVar.GRR)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.EnableVirtuleBarCode)
|
|
|
|
|
{
|
|
|
|
|
List<TurnoverTraySlot> slots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
|
|
foreach (var slot in slots)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(slot.Index - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//没有需要给周转盘上料的任务后,就开始上相机扫码
|
|
|
|
|
//判断周转盘第一行有没有产品,如果有产品则拍第一行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One))
|
|
|
|
|
{
|
|
|
|
|
//找拍照起点和终点
|
|
|
|
|
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 (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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, vrsigle.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
failNum++;
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
//LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.扫码失败), vr.SlotIndex);
|
|
|
|
|
box = MsgBox.ShowDialog(AlarmConstID.扫码失败, alarmInfo, 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//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.Slot(vr.SlotIndex).IsHasProduct)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (vr.SearchModelOK)//定位成功
|
|
|
|
|
{
|
|
|
|
|
if (!GlobalVar.EnableScanBarCodeByDownCamera)
|
|
|
|
|
{
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (vr.ScanBarCodeOK)
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, true);
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int failNum = 1;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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, vrsigle.SN);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//定位失败,或者超出指定范围
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OnShowGrabResult?.Invoke(vr, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 取料完成后更新吸嘴状态
|
|
|
|
|
/// </summary>
|
|
|
|
@ -1910,4 +1917,5 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
return $"{trayType}盘{slotIndex+1}穴位";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|