|
|
|
@ -2361,6 +2361,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
|
|
|
|
|
public void ScanBarCode()
|
|
|
|
|
{
|
|
|
|
|
//需要检测的穴位
|
|
|
|
|
List<TurnoverTraySlot> checkSlots = new List<TurnoverTraySlot>();
|
|
|
|
|
int reScanNum = 0;
|
|
|
|
|
bool exitScan = false;
|
|
|
|
|
SchedulingMessageBox box = new SchedulingMessageBox();
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
|
{
|
|
|
|
@ -2390,6 +2394,10 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
while(!exitScan)
|
|
|
|
|
{
|
|
|
|
|
checkSlots.Clear();
|
|
|
|
|
reScanNum++;
|
|
|
|
|
//没有需要给周转盘上料的任务后,就开始上相机扫码
|
|
|
|
|
//判断周转盘第一行有没有产品,如果有产品则拍第一行
|
|
|
|
|
if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One))
|
|
|
|
@ -2419,6 +2427,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(vr.SlotIndex).SN = vr.SN;
|
|
|
|
|
checkSlots.Add(TurnoverTrayManager.Instance.Slot(vr.SlotIndex));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -2435,6 +2444,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN);
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(vr.SlotIndex).SN = vrsigle.SN;
|
|
|
|
|
checkSlots.Add(TurnoverTrayManager.Instance.Slot(vr.SlotIndex));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -2533,6 +2543,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
//复制二维码
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(vr.SlotIndex).SN = vr.SN;
|
|
|
|
|
checkSlots.Add(TurnoverTrayManager.Instance.Slot(vr.SlotIndex));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -2550,6 +2561,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
OnShowGrabResult?.Invoke(vrsigle, true);
|
|
|
|
|
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN);
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(vr.SlotIndex).SN = vrsigle.SN;
|
|
|
|
|
checkSlots.Add(TurnoverTrayManager.Instance.Slot(vr.SlotIndex));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -2622,11 +2634,67 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
//OnUpCameraGrabResult?.Invoke(result);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if(checkSlots!=null && checkSlots.Count>0)
|
|
|
|
|
{
|
|
|
|
|
var repeatList = checkSlots.GroupBy(s => s.SN).Where(k => k.Count() >= 2).ToList();
|
|
|
|
|
if (repeatList != null && repeatList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
if (reScanNum >= 3)
|
|
|
|
|
{
|
|
|
|
|
List<int> slots = new List<int>();
|
|
|
|
|
List<string> repeatMsg = new List<string>();
|
|
|
|
|
//here need alarm and after take products out from tray point
|
|
|
|
|
foreach (var item in repeatList)
|
|
|
|
|
{
|
|
|
|
|
string repeatSnSlot = string.Join(" eq ", item.Select(s => s.Index));
|
|
|
|
|
repeatMsg.Add(repeatSnSlot);
|
|
|
|
|
foreach (var rslot in item)
|
|
|
|
|
{
|
|
|
|
|
slots.Add(rslot.Index);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
string msg = string.Join(",", repeatMsg);
|
|
|
|
|
alarmInfo = GetClassName() + msg;
|
|
|
|
|
MessageQueue.Instance.Warn(alarmInfo);
|
|
|
|
|
alarmEntity = AlarmCollection.Get(AlarmConstID.二维码重码报警).Transform(msg);
|
|
|
|
|
AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Retry, null, true);
|
|
|
|
|
//judge product taked away use upcamea
|
|
|
|
|
foreach (var item in slots)
|
|
|
|
|
{
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
SlotProductHasOrNotResult haveProduct = UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, item);
|
|
|
|
|
if (haveProduct.HasProduct)
|
|
|
|
|
{
|
|
|
|
|
alarmEntity = AlarmCollection.Get(AlarmConstID.周转盘产品未取出).Transform(item);
|
|
|
|
|
AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Retry, null);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LoadAndUnloadTask.Instance.RemoveRepeatSnTask(item-1);
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(item).ClearProduct();
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(item, ESlotStatus.NotHave);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
reScanNum = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
exitScan = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
exitScan = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|