优化扫码功能

master
lhiven 1 year ago
parent 9f39f71010
commit e8c3c75ef9

@ -34,7 +34,7 @@ namespace Rs.MotionPlat.Commom
/// </summary> /// </summary>
/// <param name="eOperator"></param> /// <param name="eOperator"></param>
/// <param name="indexes"></param> /// <param name="indexes"></param>
public static void DischargeVacSuction(EVacOperator eOperator, params int[] indexes) public static void DischargeVacSuction(EVacOperator eOperator, bool needSleep,params int[] indexes)
{ {
if (indexes.Length > 0) if (indexes.Length > 0)
{ {
@ -52,12 +52,14 @@ namespace Rs.MotionPlat.Commom
if (eOperator == EVacOperator.Open) if (eOperator == EVacOperator.Open)
{ {
Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime); if (needSleep)
Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime);
MessageQueue.Instance.Insert($"打开排料{string.Join(",", indexes)}号吸嘴真空吸"); MessageQueue.Instance.Insert($"打开排料{string.Join(",", indexes)}号吸嘴真空吸");
} }
else else
{ {
Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); if (needSleep)
Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime);
MessageQueue.Instance.Insert($"关闭排料{string.Join(",", indexes)}号吸嘴真空吸"); MessageQueue.Instance.Insert($"关闭排料{string.Join(",", indexes)}号吸嘴真空吸");
} }
} }
@ -102,7 +104,7 @@ namespace Rs.MotionPlat.Commom
/// </summary> /// </summary>
/// <param name="eOperator"></param> /// <param name="eOperator"></param>
/// <param name="indexes"></param> /// <param name="indexes"></param>
public static void TurnoverTrayVacSuction(EVacOperator eOperator, params int[] indexes) public static void TurnoverTrayVacSuction(EVacOperator eOperator,bool NeedSleep=true, params int[] indexes)
{ {
if (indexes.Length > 0) if (indexes.Length > 0)
{ {
@ -120,12 +122,14 @@ namespace Rs.MotionPlat.Commom
if (eOperator == EVacOperator.Open) if (eOperator == EVacOperator.Open)
{ {
Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); if(NeedSleep)
Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime);
MessageQueue.Instance.Insert($"打开周转盘{string.Join(",", indexes)}号穴位真空吸"); MessageQueue.Instance.Insert($"打开周转盘{string.Join(",", indexes)}号穴位真空吸");
} }
else else
{ {
Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); if(NeedSleep)
Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime);
MessageQueue.Instance.Insert($"关闭周转盘{string.Join(",", indexes)}号穴位真空吸"); MessageQueue.Instance.Insert($"关闭周转盘{string.Join(",", indexes)}号穴位真空吸");
} }
} }
@ -154,12 +158,12 @@ namespace Rs.MotionPlat.Commom
if (eOperator == EVacOperator.Open) if (eOperator == EVacOperator.Open)
{ {
Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime);
MessageQueue.Instance.Insert($"打开周转盘{indexes.ToJoinString()}号穴位真空破"); MessageQueue.Instance.Insert($"打开周转盘{indexes.ToJoinString()}号穴位真空破");
} }
else else
{ {
Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime);
MessageQueue.Instance.Insert($"关闭周转盘{indexes.ToJoinString()}号穴位真空破"); MessageQueue.Instance.Insert($"关闭周转盘{indexes.ToJoinString()}号穴位真空破");
} }
} }

@ -198,7 +198,7 @@ namespace Rs.MotionPlat.Flow.Camera
/// 检测周转盘放料是否OK /// 检测周转盘放料是否OK
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static VisionResult TurnoverTrayDumpProductOK(HObject image) public static VisionResult TurnoverTrayDumpProductOK(HObject image,bool bNeedLocation=true)
{ {
upCameraScanBarCodeModel = new ModelParameter("周转盘产品定位"); upCameraScanBarCodeModel = new ModelParameter("周转盘产品定位");
VisionResult vr = new VisionResult(); VisionResult vr = new VisionResult();
@ -208,7 +208,7 @@ namespace Rs.MotionPlat.Flow.Camera
HOperatorSet.ReduceDomain(image, upCameraScanBarCodeModel.SearchRegion, out searchImg); HOperatorSet.ReduceDomain(image, upCameraScanBarCodeModel.SearchRegion, out searchImg);
else else
searchImg = image; searchImg = image;
if(GlobalVar.EnableTurnoverTrayRecheck) if(bNeedLocation)
{ {
HOperatorSet.GetShapeModelContours(out HObject modelContours, upCameraScanBarCodeModel.ModelID, 1); HOperatorSet.GetShapeModelContours(out HObject modelContours, upCameraScanBarCodeModel.ModelID, 1);
HOperatorSet.FindShapeModel(searchImg, upCameraScanBarCodeModel.ModelID, HOperatorSet.FindShapeModel(searchImg, upCameraScanBarCodeModel.ModelID,
@ -227,9 +227,10 @@ namespace Rs.MotionPlat.Flow.Camera
vr.OffsetY = -1 * (row.D - upCameraScanBarCodeModel.ModelMatchResult[0].D) * GlobalVar.UpCameraMmPerPixel; vr.OffsetY = -1 * (row.D - upCameraScanBarCodeModel.ModelMatchResult[0].D) * GlobalVar.UpCameraMmPerPixel;
vr.OffsetR = AngleTool.Rad2Deg((angle.D - upCameraScanBarCodeModel.ModelMatchResult[2].D)); vr.OffsetR = AngleTool.Rad2Deg((angle.D - upCameraScanBarCodeModel.ModelMatchResult[2].D));
vr.SourceImage = image; vr.SourceImage = image;
if (vr.OffsetX < GlobalVar.TurnoverTrayLocateXRange && vr.OffsetY < GlobalVar.TurnoverTrayLocateYRange && vr.OffsetR < GlobalVar.TurnoverTrayLocateRRange) if (Math.Abs(vr.OffsetX) < GlobalVar.TurnoverTrayLocateXRange
&& Math.Abs(vr.OffsetY) < GlobalVar.TurnoverTrayLocateYRange
&& Math.Abs(vr.OffsetR) < GlobalVar.TurnoverTrayLocateRRange)
{ {
vr.SearchModelOK = true; vr.SearchModelOK = true;
} }
else else
@ -283,7 +284,7 @@ namespace Rs.MotionPlat.Flow.Camera
//HOperatorSet.GenRectangle1(out HObject searchRegion,row1, col1, row2, col2); //HOperatorSet.GenRectangle1(out HObject searchRegion,row1, col1, row2, col2);
HOperatorSet.ReduceDomain(images, _barCodeRegion, out HObject imgReduaced); HOperatorSet.ReduceDomain(images, _barCodeRegion, out HObject imgReduaced);
HOperatorSet.Emphasize(imgReduaced, out HObject imageEmphasize, new HTuple(7), new HTuple(7), new HTuple(1)); //HOperatorSet.Emphasize(imgReduaced, out HObject imageEmphasize, new HTuple(7), new HTuple(7), new HTuple(1));
//HOperatorSet.CropDomain(imgReduaced, out HObject imagePart); //HOperatorSet.CropDomain(imgReduaced, out HObject imagePart);
//HOperatorSet.WriteImage(imagePart, "bmp", 0, "d://images/11"); //HOperatorSet.WriteImage(imagePart, "bmp", 0, "d://images/11");
//HOperatorSet.Threshold(imagePart, out HObject region, new HTuple(200), new HTuple(255)); //HOperatorSet.Threshold(imagePart, out HObject region, new HTuple(200), new HTuple(255));
@ -308,14 +309,29 @@ namespace Rs.MotionPlat.Flow.Camera
foreach (string mode in modes) foreach (string mode in modes)
{ {
HOperatorSet.CreateDataCode2dModel("Data Matrix ECC 200", "default_parameters", mode, out HTuple dataCodeHandle); HOperatorSet.CreateDataCode2dModel("Data Matrix ECC 200", "default_parameters", mode, out HTuple dataCodeHandle);
HOperatorSet.FindDataCode2d(imageEmphasize, out xlds, dataCodeHandle, new HTuple(), new HTuple(), out HTuple resultHandles, out decodedDataStrings); HOperatorSet.FindDataCode2d(imgReduaced, out xlds, dataCodeHandle, new HTuple(), new HTuple(), out HTuple resultHandles, out decodedDataStrings);
if (decodedDataStrings.Length > 0) if (decodedDataStrings.Length > 0)
{ {
HOperatorSet.ClearDataCode2dModel(dataCodeHandle);
return decodedDataStrings.ToString().Replace("\"", ""); return decodedDataStrings.ToString().Replace("\"", "");
} }
else else
{ {
HOperatorSet.ClearDataCode2dModel(dataCodeHandle);
//增强对比度之后再识别一次
HOperatorSet.MultImage(imgReduaced, imgReduaced, out HObject imageMulti, new HTuple(0.005), new HTuple(0));
HOperatorSet.CreateDataCode2dModel("Data Matrix ECC 200", "default_parameters", mode, out dataCodeHandle);
HOperatorSet.FindDataCode2d(imageMulti, out xlds, dataCodeHandle, new HTuple(), new HTuple(), out resultHandles, out decodedDataStrings);
if (decodedDataStrings.Length > 0)
{
HOperatorSet.ClearDataCode2dModel(dataCodeHandle);
return decodedDataStrings.ToString().Replace("\"", "");
}
else
{
HOperatorSet.ClearDataCode2dModel(dataCodeHandle);
}
if (mode == "maximum_recognition") if (mode == "maximum_recognition")
{ {
string saveDir = $"d://images//{DateTime.Now.ToString("yyyyMMdd")}//Ng"; string saveDir = $"d://images//{DateTime.Now.ToString("yyyyMMdd")}//Ng";

@ -17,6 +17,7 @@ using System.Diagnostics;
using System.Diagnostics.Eventing.Reader; using System.Diagnostics.Eventing.Reader;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -291,6 +292,8 @@ namespace Rs.MotionPlat.Flow
if (curTask.FromType == TurnoverType.Turnover) if (curTask.FromType == TurnoverType.Turnover)
{ {
targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"); targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight");
VacManager.DischargeVacSuction(EVacOperator.Open, false, curNozzle.NozzleIndex);
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, false, curNozzle.FromIndex + 1);
} }
else if (curTask.FromType == TurnoverType.ToBeTested) else if (curTask.FromType == TurnoverType.ToBeTested)
{ {
@ -334,7 +337,7 @@ namespace Rs.MotionPlat.Flow
/*打开排料吸嘴真空吸*/ /*打开排料吸嘴真空吸*/
//Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); //Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
//Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime); //Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime);
VacManager.DischargeVacSuction(EVacOperator.Open, curNozzle.NozzleIndex);
//logInfo = GetClassName()+ $"打开{curNozzle.NozzleIndex}号排料吸嘴真空吸"; //logInfo = GetClassName()+ $"打开{curNozzle.NozzleIndex}号排料吸嘴真空吸";
//MessageQueue.Instance.Insert(logInfo); //MessageQueue.Instance.Insert(logInfo);
if (curTask.FromType == TurnoverType.Turnover) if (curTask.FromType == TurnoverType.Turnover)
@ -344,7 +347,7 @@ namespace Rs.MotionPlat.Flow
//Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸"); //Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸");
//Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime); //Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime);
//MessageQueue.Instance.Insert(logInfo); //MessageQueue.Instance.Insert(logInfo);
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, curNozzle.FromIndex+1); //VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, curNozzle.FromIndex+1);
/*打开周转盘真空破*/ /*打开周转盘真空破*/
//logInfo = GetClassName() + $"打开周转盘{curTask.FromIndex + 1}号穴位真空破"; //logInfo = GetClassName() + $"打开周转盘{curTask.FromIndex + 1}号穴位真空破";
//Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破"); //Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破");
@ -356,7 +359,11 @@ namespace Rs.MotionPlat.Flow
//Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破"); //Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破");
//Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime); //Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime);
//MessageQueue.Instance.Insert(logInfo); //MessageQueue.Instance.Insert(logInfo);
VacManager.TurnoverTrayVacBreak( EVacOperator.Close,curNozzle.FromIndex + 1);
}
else
{
VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex);
} }
flowStep = EDischargeFlowStep.; flowStep = EDischargeFlowStep.;
break; break;
@ -383,6 +390,10 @@ namespace Rs.MotionPlat.Flow
{ {
logInfo = GetClassName()+$"取{WitchTrayWitchSlot(curNozzle.FromType, curNozzle.FromIndex)}号穴位产品完成已抬起"; logInfo = GetClassName()+$"取{WitchTrayWitchSlot(curNozzle.FromType, curNozzle.FromIndex)}号穴位产品完成已抬起";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
if (curTask.FromType == TurnoverType.Turnover)
{
VacManager.TurnoverTrayVacBreak(EVacOperator.Close, curNozzle.FromIndex + 1);
}
flowStep = EDischargeFlowStep.; flowStep = EDischargeFlowStep.;
} }
break; break;
@ -1140,6 +1151,10 @@ namespace Rs.MotionPlat.Flow
if (curNozzle.ToType == TurnoverType.Turnover) if (curNozzle.ToType == TurnoverType.Turnover)
{ {
targetPos = SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"); targetPos = SysConfigParam.GetValue<double>($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight");
/*打开周转盘真空吸*/
logInfo = GetClassName() + $"打开周转盘{curNozzle.ToIndex + 1}号穴位真空吸";
MessageQueue.Instance.Insert(logInfo);
VacManager.TurnoverTrayVacSuction(EVacOperator.Open, false, curNozzle.ToIndex + 1);
} }
else else
{ {
@ -1165,18 +1180,12 @@ namespace Rs.MotionPlat.Flow
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
if (curNozzle.ToType == TurnoverType.Turnover) if (curNozzle.ToType == TurnoverType.Turnover)
{ {
/*打开周转盘真空吸*/
logInfo = GetClassName() + $"打开周转盘{curNozzle.ToIndex + 1}号穴位真空吸";
MessageQueue.Instance.Insert(logInfo);
//Ops.On($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸");
//Thread.Sleep(GlobalVar.TurnoverTrayOpenVacSuctionDelaytime);
VacManager.TurnoverTrayVacSuction(EVacOperator.Open, curNozzle.ToIndex + 1);
/*关闭排料吸嘴真空吸*/ /*关闭排料吸嘴真空吸*/
logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"; logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
//Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空 //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空
//Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime);
VacManager.DischargeVacSuction(EVacOperator.Close, curNozzle.NozzleIndex); VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex);
/*打开排料吸嘴真空破*/ /*打开排料吸嘴真空破*/
logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
@ -1192,7 +1201,7 @@ namespace Rs.MotionPlat.Flow
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
//Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
//Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime);
VacManager.DischargeVacSuction(EVacOperator.Close, curNozzle.NozzleIndex); VacManager.DischargeVacSuction(EVacOperator.Close,true, curNozzle.NozzleIndex);
/*打开排料吸嘴真空破*/ /*打开排料吸嘴真空破*/
logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破";
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
@ -1357,7 +1366,7 @@ namespace Rs.MotionPlat.Flow
//排料轴先回到安全位,等待异常处理吸嘴过来处理这颗异常料 //排料轴先回到安全位,等待异常处理吸嘴过来处理这颗异常料
DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, curNozzle.ToIndex + 1); WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, curNozzle.ToIndex + 1);
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, curNozzle.ToIndex + 1); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, curNozzle.ToIndex + 1);
curNozzle.Reset(); curNozzle.Reset();
flowStep = EDischargeFlowStep.; flowStep = EDischargeFlowStep.;
exit = true; exit = true;
@ -1366,7 +1375,7 @@ namespace Rs.MotionPlat.Flow
{ {
if (!UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, curNozzle.ToIndex + 1)) if (!UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, curNozzle.ToIndex + 1))
{ {
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, curNozzle.ToIndex + 1); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, curNozzle.ToIndex + 1);
curNozzle.Reset(); curNozzle.Reset();
flowStep = EDischargeFlowStep.; flowStep = EDischargeFlowStep.;
exit = true; exit = true;
@ -1471,8 +1480,18 @@ namespace Rs.MotionPlat.Flow
} }
else else
{ {
//复制二维码 //如果扫码失败再重扫一次
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex-1, ""); UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
if(vrsigle.ScanBarCodeOK)
{
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
}
else
{
//复制二维码
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
}
} }
} }
} }
@ -1515,8 +1534,18 @@ namespace Rs.MotionPlat.Flow
} }
else else
{ {
//复制二维码 //如果扫码失败再重扫一次
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex-1, ""); UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true);
VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle();
if (vrsigle.ScanBarCodeOK)
{
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN);
}
else
{
//复制二维码
LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, "");
}
} }
} }
} }

@ -192,7 +192,7 @@ namespace Rs.MotionPlat.Flow
step = ETakeTrayFlowStep.; step = ETakeTrayFlowStep.;
break; break;
case ETakeTrayFlowStep.: case ETakeTrayFlowStep.:
if (stopwatch.ElapsedMilliseconds < 5000) if (stopwatch.ElapsedMilliseconds < 10000)
{ {
if ((Ops.IsOn("上下气缸原位")) || (GlobalVar.VirtualAxis)) if ((Ops.IsOn("上下气缸原位")) || (GlobalVar.VirtualAxis))
{ {

@ -257,7 +257,7 @@ namespace Rs.MotionPlat.Flow
{ {
WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index); WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index);
slot.ClearProduct(); slot.ClearProduct();
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index); VacManager.TurnoverTrayVacSuction(EVacOperator.Close,true, slot.Index);
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave); GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave);
} }
exit = true; exit = true;
@ -271,7 +271,7 @@ namespace Rs.MotionPlat.Flow
TestHeightResult heightResult = LaserFlow.Instance.HasProduct(ETrayType.Turnover, slot.Index); TestHeightResult heightResult = LaserFlow.Instance.HasProduct(ETrayType.Turnover, slot.Index);
if (!heightResult.HasProduct) if (!heightResult.HasProduct)
{ {
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, slot.Index);
slot.ClearProduct(); slot.ClearProduct();
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave); GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave);
} }
@ -350,7 +350,7 @@ namespace Rs.MotionPlat.Flow
/*打开周转吸嘴真空吸*/ /*打开周转吸嘴真空吸*/
VacManager.TransitNozzleVacSuction(EVacOperator.Open, undealTasks.Select(t => t.ToIndex + 1).ToArray()); VacManager.TransitNozzleVacSuction(EVacOperator.Open, undealTasks.Select(t => t.ToIndex + 1).ToArray());
/*关闭周转盘真空吸*/ /*关闭周转盘真空吸*/
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, undealTasks.Select(t => t.FromIndex + 1).ToArray()); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, undealTasks.Select(t => t.FromIndex + 1).ToArray());
/*打开周转盘真空破*/ /*打开周转盘真空破*/
VacManager.TurnoverTrayVacBreak(EVacOperator.Open, undealTasks.Select(t => t.FromIndex + 1).ToArray()); VacManager.TurnoverTrayVacBreak(EVacOperator.Open, undealTasks.Select(t => t.FromIndex + 1).ToArray());
Step = ETurnoverFlowStep.; Step = ETurnoverFlowStep.;
@ -415,7 +415,7 @@ namespace Rs.MotionPlat.Flow
undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal); undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal);
foreach (TurnoverInfo task in undealTasks) foreach (TurnoverInfo task in undealTasks)
{ {
if (Ops.IsOn($"周转{task.FromIndex + 1}号吸嘴真空吸检测") || GlobalVar.VirtualAxis || GlobalVar.RunSpace) if (Ops.IsOn($"周转{task.ToIndex + 1}号吸嘴真空吸检测") || GlobalVar.VirtualAxis || GlobalVar.RunSpace)
{ {
//如果真空检测OK带料产品已经吸上了 //如果真空检测OK带料产品已经吸上了
TransitNozzleManager.Instance.Nozzle(task.ToIndex + 1).AddProduct(task); TransitNozzleManager.Instance.Nozzle(task.ToIndex + 1).AddProduct(task);
@ -971,7 +971,7 @@ namespace Rs.MotionPlat.Flow
break; break;
case ETurnoverFlowStep.: case ETurnoverFlowStep.:
targetPos = SysConfigParam.GetValue<double>("PressSafeZ"); targetPos = SysConfigParam.GetValue<double>("PressSafeZ");
errCode = AxisControl.PressZ.MovePos(0, GlobalVar.WholeSpeed); errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed);
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
{ {
if (GlobalVar.VirtualAxis) if (GlobalVar.VirtualAxis)
@ -1476,7 +1476,7 @@ namespace Rs.MotionPlat.Flow
MessageQueue.Instance.Insert(logInfo); MessageQueue.Instance.Insert(logInfo);
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
/*打开周转盘真空吸*/ /*打开周转盘真空吸*/
VacManager.TurnoverTrayVacSuction(EVacOperator.Open, hasProductNozzles.Select(n => n.ToIndex+1).ToArray()); VacManager.TurnoverTrayVacSuction(EVacOperator.Open, true, hasProductNozzles.Select(n => n.ToIndex+1).ToArray());
/*关闭周转吸头真空吸*/ /*关闭周转吸头真空吸*/
VacManager.TransitNozzleVacSuction( EVacOperator.Close,hasProductNozzles.Select(n=>n.FromIndex + 1).ToArray()); VacManager.TransitNozzleVacSuction( EVacOperator.Close,hasProductNozzles.Select(n=>n.FromIndex + 1).ToArray());
/*打开周转吸头真空破*/ /*打开周转吸头真空破*/
@ -1660,7 +1660,7 @@ namespace Rs.MotionPlat.Flow
DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index); WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index);
nozzle.Clear(); nozzle.Clear();
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, slot.Index);
exit = true; exit = true;
} }
else else
@ -1669,7 +1669,7 @@ namespace Rs.MotionPlat.Flow
if (!UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, slot.Index, true)) if (!UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, slot.Index, true))
{ {
nozzle.Clear(); nozzle.Clear();
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, slot.Index);
exit = true; exit = true;
} }
} }

@ -226,6 +226,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
} }
break; break;
case EUpCameraScanBarCodeFlowStep.: case EUpCameraScanBarCodeFlowStep.:
vReslutList.Clear();
int slotIndex = 0; int slotIndex = 0;
foreach (var img in grabImages) foreach (var img in grabImages)
{ {
@ -241,7 +242,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
VisionResult vr = new VisionResult(); VisionResult vr = new VisionResult();
if (TurnoverTrayManager.Instance.Slot(sIndex).IsHasProduct) if (TurnoverTrayManager.Instance.Slot(sIndex).IsHasProduct)
{ {
vr = VisionManager.TurnoverTrayDumpProductOK(img); vr = VisionManager.TurnoverTrayDumpProductOK(img,GlobalVar.EnableTurnoverTrayRecheck);
} }
vr.SlotIndex = sIndex; vr.SlotIndex = sIndex;
vReslutList.Add(vr); vReslutList.Add(vr);
@ -335,6 +336,7 @@ namespace Rs.MotionPlat.Flow.SubFlow
break; break;
case EUpCameraFixedScanBarCodeFlowStep.: case EUpCameraFixedScanBarCodeFlowStep.:
singleResult = VisionManager.TurnoverTrayDumpProductOK(imageSingle); singleResult = VisionManager.TurnoverTrayDumpProductOK(imageSingle);
singleResult.SlotIndex = SlotIndex;
exit = true; exit = true;
grabFinishedEvent.Set(); grabFinishedEvent.Set();
break; break;

@ -182,7 +182,7 @@ namespace Rs.MotionPlat.Flow.NgFlow
//打开强力吸嘴真空 //打开强力吸嘴真空
VacManager.ForceNozzleVacSuction(EVacOperator.Open); VacManager.ForceNozzleVacSuction(EVacOperator.Open);
//关闭周转盘真空吸 //关闭周转盘真空吸
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, exceptionSlotIndex); VacManager.TurnoverTrayVacSuction(EVacOperator.Close, true, exceptionSlotIndex);
//打开周转盘这空破 //打开周转盘这空破
VacManager.TurnoverTrayVacBreak(EVacOperator.Open, exceptionSlotIndex); VacManager.TurnoverTrayVacBreak(EVacOperator.Open, exceptionSlotIndex);
step = EWarningSuckerNgFlowStep.; step = EWarningSuckerNgFlowStep.;

@ -192,7 +192,7 @@
this.btnMoveEmpty2TakeTrayX.Name = "btnMoveEmpty2TakeTrayX"; this.btnMoveEmpty2TakeTrayX.Name = "btnMoveEmpty2TakeTrayX";
this.btnMoveEmpty2TakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveEmpty2TakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveEmpty2TakeTrayX.TabIndex = 45; this.btnMoveEmpty2TakeTrayX.TabIndex = 45;
this.btnMoveEmpty2TakeTrayX.Tag = "LoadY"; this.btnMoveEmpty2TakeTrayX.Tag = "LoadX";
this.btnMoveEmpty2TakeTrayX.Text = "运动到此"; this.btnMoveEmpty2TakeTrayX.Text = "运动到此";
this.btnMoveEmpty2TakeTrayX.UseVisualStyleBackColor = false; this.btnMoveEmpty2TakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveEmpty2TakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveEmpty2TakeTrayX.Click += new System.EventHandler(this.Move_Click);
@ -319,7 +319,7 @@
this.btnMoveMultiTakeTrayX.Name = "btnMoveMultiTakeTrayX"; this.btnMoveMultiTakeTrayX.Name = "btnMoveMultiTakeTrayX";
this.btnMoveMultiTakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveMultiTakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveMultiTakeTrayX.TabIndex = 45; this.btnMoveMultiTakeTrayX.TabIndex = 45;
this.btnMoveMultiTakeTrayX.Tag = "LoadY"; this.btnMoveMultiTakeTrayX.Tag = "LoadX";
this.btnMoveMultiTakeTrayX.Text = "运动到此"; this.btnMoveMultiTakeTrayX.Text = "运动到此";
this.btnMoveMultiTakeTrayX.UseVisualStyleBackColor = false; this.btnMoveMultiTakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveMultiTakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveMultiTakeTrayX.Click += new System.EventHandler(this.Move_Click);
@ -446,7 +446,7 @@
this.btnMoveNgTakeTrayX.Name = "btnMoveNgTakeTrayX"; this.btnMoveNgTakeTrayX.Name = "btnMoveNgTakeTrayX";
this.btnMoveNgTakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveNgTakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveNgTakeTrayX.TabIndex = 45; this.btnMoveNgTakeTrayX.TabIndex = 45;
this.btnMoveNgTakeTrayX.Tag = "LoadY"; this.btnMoveNgTakeTrayX.Tag = "LoadX";
this.btnMoveNgTakeTrayX.Text = "运动到此"; this.btnMoveNgTakeTrayX.Text = "运动到此";
this.btnMoveNgTakeTrayX.UseVisualStyleBackColor = false; this.btnMoveNgTakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveNgTakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveNgTakeTrayX.Click += new System.EventHandler(this.Move_Click);
@ -573,7 +573,7 @@
this.btnMoveOkTakeTrayX.Name = "btnMoveOkTakeTrayX"; this.btnMoveOkTakeTrayX.Name = "btnMoveOkTakeTrayX";
this.btnMoveOkTakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveOkTakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveOkTakeTrayX.TabIndex = 45; this.btnMoveOkTakeTrayX.TabIndex = 45;
this.btnMoveOkTakeTrayX.Tag = "LoadY"; this.btnMoveOkTakeTrayX.Tag = "LoadX";
this.btnMoveOkTakeTrayX.Text = "运动到此"; this.btnMoveOkTakeTrayX.Text = "运动到此";
this.btnMoveOkTakeTrayX.UseVisualStyleBackColor = false; this.btnMoveOkTakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveOkTakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveOkTakeTrayX.Click += new System.EventHandler(this.Move_Click);
@ -715,7 +715,7 @@
this.btnMoveInputTakeTrayX.Name = "btnMoveInputTakeTrayX"; this.btnMoveInputTakeTrayX.Name = "btnMoveInputTakeTrayX";
this.btnMoveInputTakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveInputTakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveInputTakeTrayX.TabIndex = 45; this.btnMoveInputTakeTrayX.TabIndex = 45;
this.btnMoveInputTakeTrayX.Tag = "LoadY"; this.btnMoveInputTakeTrayX.Tag = "LoadX";
this.btnMoveInputTakeTrayX.Text = "运动到此"; this.btnMoveInputTakeTrayX.Text = "运动到此";
this.btnMoveInputTakeTrayX.UseVisualStyleBackColor = false; this.btnMoveInputTakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveInputTakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveInputTakeTrayX.Click += new System.EventHandler(this.Move_Click);
@ -890,7 +890,7 @@
this.btnMoveEmpty1TakeTrayX.Name = "btnMoveEmpty1TakeTrayX"; this.btnMoveEmpty1TakeTrayX.Name = "btnMoveEmpty1TakeTrayX";
this.btnMoveEmpty1TakeTrayX.Size = new System.Drawing.Size(80, 25); this.btnMoveEmpty1TakeTrayX.Size = new System.Drawing.Size(80, 25);
this.btnMoveEmpty1TakeTrayX.TabIndex = 45; this.btnMoveEmpty1TakeTrayX.TabIndex = 45;
this.btnMoveEmpty1TakeTrayX.Tag = "LoadY"; this.btnMoveEmpty1TakeTrayX.Tag = "LoadX";
this.btnMoveEmpty1TakeTrayX.Text = "运动到此"; this.btnMoveEmpty1TakeTrayX.Text = "运动到此";
this.btnMoveEmpty1TakeTrayX.UseVisualStyleBackColor = false; this.btnMoveEmpty1TakeTrayX.UseVisualStyleBackColor = false;
this.btnMoveEmpty1TakeTrayX.Click += new System.EventHandler(this.Move_Click); this.btnMoveEmpty1TakeTrayX.Click += new System.EventHandler(this.Move_Click);

Loading…
Cancel
Save