From 3c83d01715a28654c66f6c3558cf9d5c04a41694 Mon Sep 17 00:00:00 2001
From: lhiven <236881222@qq.com>
Date: Sat, 7 Oct 2023 07:25:13 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=92=8C=E4=B8=AD=E6=8E=A7?=
=?UTF-8?q?=E9=80=9A=E4=BF=A1=E5=BC=B9=E6=A1=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Rs.SkyLine/Commom/NozzleCollection.cs | 16 +-
Rs.SkyLine/Flow/AlarmConstID.cs | 15 +
Rs.SkyLine/Flow/LoadAndUnloadTask.cs | 2 +-
Rs.SkyLine/Flow/WorkFlow.cs | 800 ++++++++++++++------------
Rs.SkyLine/Program.cs | 2 -
5 files changed, 454 insertions(+), 381 deletions(-)
diff --git a/Rs.SkyLine/Commom/NozzleCollection.cs b/Rs.SkyLine/Commom/NozzleCollection.cs
index d215417..e6e7348 100644
--- a/Rs.SkyLine/Commom/NozzleCollection.cs
+++ b/Rs.SkyLine/Commom/NozzleCollection.cs
@@ -117,11 +117,23 @@ namespace Rs.MotionPlat.Commom
return null;
}
- public static Nozzle GetIdelNozzle()
+ ///
+ /// 获取空闲的吸嘴
+ ///
+ ///
+ ///
+ public static Nozzle GetIdelNozzle(bool turnoverToTray=false)
{
if (nozzles != null && nozzles.Count > 0)
{
- return nozzles.Where(n => n.Status == ENozzleStatus.IDLE).First();
+ if(turnoverToTray)
+ {
+ return nozzles.Where(n => n.NozzleIndex!=1 && n.Status == ENozzleStatus.IDLE).First();
+ }
+ else
+ {
+ return nozzles.Where(n => n.Status == ENozzleStatus.IDLE).First();
+ }
}
return null;
}
diff --git a/Rs.SkyLine/Flow/AlarmConstID.cs b/Rs.SkyLine/Flow/AlarmConstID.cs
index c817e31..00fbec7 100644
--- a/Rs.SkyLine/Flow/AlarmConstID.cs
+++ b/Rs.SkyLine/Flow/AlarmConstID.cs
@@ -62,5 +62,20 @@ namespace Rs.MotionPlat.Flow
/// Empty2缺料报警
///
public const int Empty2NullAlarm = 11;
+
+ ///
+ /// 下相机飞拍失败报警
+ ///
+ public const int DownCameraFlyFailAlarm = 12;
+
+ ///
+ /// 运动不安全报警
+ ///
+ public const int MoveUnsafeAlarm = 13;
+
+ ///
+ /// 运动失败报警
+ ///
+ public const int MoveFailAlarm = 14;
}
}
diff --git a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs
index 65e5a52..81053d8 100644
--- a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs
+++ b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs
@@ -532,7 +532,7 @@ namespace Rs.MotionPlat.Flow
public TurnoverInfo GetUnLoadTask()
{
- if (unloadTaskList == null)
+ if (unloadTaskList == null || unloadTaskList.Where(t => t.Dealed == false).Count()==0)
return null;
else
{
diff --git a/Rs.SkyLine/Flow/WorkFlow.cs b/Rs.SkyLine/Flow/WorkFlow.cs
index a87dee4..98b7ee0 100644
--- a/Rs.SkyLine/Flow/WorkFlow.cs
+++ b/Rs.SkyLine/Flow/WorkFlow.cs
@@ -28,7 +28,7 @@ namespace Rs.MotionPlat.Flow
到取料位下方,
等待到取料位下方,
开真空,
- 取料真空检测,
+ 取料完成后真空检测,
取料完成抬起,
等待取料完成抬起,
到下相机拍照起始位,
@@ -41,8 +41,8 @@ namespace Rs.MotionPlat.Flow
等待到放料位上方,
到放料位下方,
等待到放料位下方,
- 到放料破真空位,
- 等待到放料破真空位,
+ 到放料关破真空位,
+ 等待到放料关破真空位,
周转盘放料位真空检测,
放料完成抬起,
等待放料完成抬起,
@@ -64,10 +64,11 @@ namespace Rs.MotionPlat.Flow
等待Multi料盘搬运完成,
IDLE
}
-
+
public class WorkFlow : BaseFlow
{
- private bool grabOK = false;
+ private WorkFlow() { }
+
private static WorkFlow instance;
public event Action> OnMatchResult;
@@ -83,31 +84,15 @@ namespace Rs.MotionPlat.Flow
}
}
- enum ELoadUnloadAction
- {
- ///
- /// 上料
- ///
- LOAD,
- ///
- /// 下料
- ///
- UNLOAD
- }
- private WorkFlow()
- {
- //HikCamera.Instance.GrabOkEvent += (camIndex,img) => {
- // grabOK = true;
- //};
- }
EWorkFlowStep flowStep = EWorkFlowStep.等待任务;
EWorkFlowStep restoreFlowStep = EWorkFlowStep.IDLE;
HObject[] imgs = new HObject[2];
List mrs = new List();
- int FetchNum = 0;//取料次数
+ int reFetchNum = 0;//重取料次数
bool bFetchBack = false;
double targetX = 0.0;
double targetY = 0.0;
+ double targetPos = 0.0;
TraySlot tray = new TraySlot();
// List totalTask = new List();
List dealTask = new List();
@@ -125,52 +110,45 @@ namespace Rs.MotionPlat.Flow
ErrorCode errCode = ErrorCode.Ok;
List testLoadList = new List();
List testUnLoadList = new List();
+ private bool turnoverToTray = true;
public override void Run()
{
switch (flowStep)
{
case EWorkFlowStep.等待任务:
- if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk)
- {
- if(LoadAndUnloadTask.Instance.CanRunTask())
- {
- if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad)>0)
- {
- logInfo = $"接收到测试工位上料任务";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- flowStep = EWorkFlowStep.测试工位上料;
- }
- else if(LoadAndUnloadTask.Instance.GetTaskNum( ETaskMode.TestUnload)>0)
- {
- logInfo = $"接收到测试工位下料任务";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- flowStep = EWorkFlowStep.测试工位下料;
- }
- else
- {
- logInfo = $"接收到排料任务";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- flowStep = EWorkFlowStep.到取料位上方;
- }
- }
- }
+ WaitTask();
break;
case EWorkFlowStep.到取料位上方:
//先取下料任务,再取上料任务,最后取换料任务
- if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload)>0)
- {
- curTask = LoadAndUnloadTask.Instance.GetUnLoadTask();
- }
- else if(LoadAndUnloadTask.Instance.GetTaskNum( ETaskMode.Load)>0)
+ if(turnoverToTray)
{
- curTask = LoadAndUnloadTask.Instance.GetLoadTask();
+ if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetUnLoadTask();
+ }
+ else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Load) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetLoadTask();
+ }
+ else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetChangeTask();
+ }
}
- else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0)
+ else
{
- curTask = LoadAndUnloadTask.Instance.GetChangeTask();
+ if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Load) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetLoadTask();
+ }
+ else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetUnLoadTask();
+ }
+ else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0)
+ {
+ curTask = LoadAndUnloadTask.Instance.GetChangeTask();
+ }
}
curNozzle = NozzleManager.GetIdelNozzle();
if (curTask!=null && curNozzle != null)
@@ -180,35 +158,28 @@ namespace Rs.MotionPlat.Flow
curSlotPoint = null;
if (curTask.FromType == TurnoverType.Turnover)
{
- logInfo = $"吸嘴 {curNozzle.NozzleIndex} 去周转盘 {curTask.FromIndex + 1} 号穴位取料";
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN);
+ logInfo = $"[{curNozzle.NozzleIndex}]号排料吸嘴到周转盘[{curTask.FromIndex + 1}]号穴位取料";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
}
else if (curTask.FromType == TurnoverType.ToBeTested)
{
TraySlot slot = GlobalTray.InputTray.GetSlot(ESlotStatus.Have);
if (slot != null)
{
- logInfo = $"吸嘴{curNozzle.NozzleIndex} 去Input盘 {slot.Index} 号穴位取料";
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Input", slot.Index, EPointType.BASE);
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
+ logInfo = $"[{curNozzle.NozzleIndex}]吸排料嘴去Input盘[{slot.Index}]号穴位取料";
+ MessageQueue.Instance.Insert(logInfo);
}
else
{
- // Msg.ShowInfo("Input料盘缺料,请手动切盘后点击确定");
- // GlobalTray.InputTray.ResetTray();
- // GlobalTray.InputTray.Fill();
- logInfo = "检测到Input料盘无料,准备上料盘";
+ logInfo = "检测到Input料盘无料,准备上切盘";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
TakeTrayFlow.Instance.Take(EStockType.Input, EStockType.Empty1, ELoadUnloadType.Unload);
restoreFlowStep = EWorkFlowStep.到取料位上方;
flowStep = EWorkFlowStep.等待Input料盘搬运完成;
}
}
-
if (curSlotPoint != null)
{
nozzleDist = TrayPointManager.GetDistToNozzle1(curNozzle.NozzleIndex);
@@ -219,11 +190,26 @@ namespace Rs.MotionPlat.Flow
{
//if(Ops.IsHomedAndNearStartPos($"NozzleR{NozzleIndex}"))
{
- errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"NozzleR{curNozzle.NozzleIndex}StartPos"), (int)(GlobalVar.WholeSpeed));
errCode = AxisControl.LoadY.MovePos(targetY, (int)(GlobalVar.WholeSpeed));
- if (errCode == ErrorCode.Ok | GlobalVar.VirtualAxis)
+ if(errCode== ErrorCode.Ok|| GlobalVar.VirtualAxis)
+ {
+ errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"NozzleR{curNozzle.NozzleIndex}StartPos"), (int)(GlobalVar.WholeSpeed));
+ if (errCode == ErrorCode.Ok | GlobalVar.VirtualAxis)
+ {
+ if (GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
+ flowStep = EWorkFlowStep.等待到取料位上方;
+ }
+ else
+ {
+ //TestCenterMessageBox.Show(1, $"轴NozzleR{curNozzle.NozzleIndex}点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes);
+ }
+ }
+ else
{
- flowStep = EWorkFlowStep.等待到取料位上方;
+ //TestCenterMessageBox.Show(1, $"轴LoadY点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes);
}
}
//else
@@ -231,163 +217,136 @@ namespace Rs.MotionPlat.Flow
// Msg.ShowError($"吸头 NozzleR{NozzleIndex} 不在起始位,请手动手动回原后运动到起始位");
// }
}
+ else
+ {
+ //TestCenterMessageBox.Show(1, $"轴LoadX点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes);
+ }
}
}
else
{
- logInfo = "x y move isn't safe";
+ logInfo = "x y r move isn't safe";
Msg.ShowError(logInfo);
- LogHelper.Error(logInfo);
MessageQueue.Instance.Warn(logInfo);
}
}
break;
+
case EWorkFlowStep.等待到取料位上方:
if (Ops.IsStop("LoadX", "LoadY", $"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
{
- logInfo = "已运动到取料位上方";
- Thread.Sleep(100);
+ logInfo = "已运动到取料位上方";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
flowStep = EWorkFlowStep.到取料位下方;
-
}
break;
+
case EWorkFlowStep.到取料位下方:
- if(GlobalVar.VirtualAxis)
- {
- Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
- flowStep = EWorkFlowStep.等待到取料位下方;
- }
- else
+ if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished || GlobalVar.VirtualAxis)
{
- if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished)
+ logInfo = "准备运动到取料位下方";
+ MessageQueue.Instance.Insert(logInfo);
+ if (curTask.FromType == TurnoverType.Turnover)
{
- logInfo = "准备运动到取料位下方";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- if (curTask.FromType == TurnoverType.Turnover)
- {
- errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed);
- }
- else if (curTask.FromType == TurnoverType.ToBeTested)
- {
- errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed);
- }
- if (errCode == ErrorCode.Ok)
- {
- flowStep = EWorkFlowStep.等待到取料位下方;
- }
+ targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight");
}
- else
+ else if (curTask.FromType == TurnoverType.ToBeTested)
{
- logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定";
- Msg.ShowError(logInfo);
- LogHelper.Error(logInfo);
-
+ targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight");
+ }
+ errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos, GlobalVar.WholeSpeed);
+ if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis)
+ {
+ if(GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
+ flowStep = EWorkFlowStep.等待到取料位下方;
}
}
-
+ else
+ {
+ logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定";
+ MessageQueue.Instance.Warn(logInfo);
+ TestCenterMessageBox.Show(1111, logInfo, ETipButton.Ok);
+ TestCenterMessageBox.WaitResult(1111);
+ }
break;
+
case EWorkFlowStep.等待到取料位下方:
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
{
logInfo = "已运动到取料位下方";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
flowStep = EWorkFlowStep.开真空;
}
break;
+
case EWorkFlowStep.开真空:
- if(GlobalVar.VirtualAxis)
- {
- flowStep = EWorkFlowStep.取料完成抬起;
- }
- else
+ /*打开排料吸嘴真空吸*/
+ Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
+ Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime);
+ logInfo = $"打开{curNozzle.NozzleIndex}号排料吸嘴真空吸";
+ MessageQueue.Instance.Insert(logInfo);
+ if (curTask.FromType == TurnoverType.Turnover)
{
- Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
- Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime);
- logInfo = $"打开{curNozzle.NozzleIndex}号吸嘴真空吸";
+ /*关闭周转盘真空吸*/
+ logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空吸";
+ Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸");
+ Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime);
+ MessageQueue.Instance.Insert(logInfo);
+ /*打开周转盘真空破*/
+ logInfo = $"打开周转盘{curTask.FromIndex + 1}号穴位真空破";
+ Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破");
+ Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime);
+ MessageQueue.Instance.Insert(logInfo);
+ /*关闭周转盘真空破*/
+ logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空破";
+ Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破");
+ Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime);
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- if (curTask.FromType == TurnoverType.Turnover)
- {
- logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空吸";
- Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸");
- Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime);
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- logInfo = $"打开周转盘{curTask.FromIndex + 1}号穴位真空破";
- Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破");
- Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime);
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空破";
- Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破");
- Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime);
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- }
- flowStep = EWorkFlowStep.取料完成抬起;
}
-
+ flowStep = EWorkFlowStep.取料完成抬起;
break;
case EWorkFlowStep.取料完成抬起:
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed);
if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis)
{
+ if(GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
logInfo = "取料完成准备抬起";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug (logInfo);
flowStep = EWorkFlowStep.等待取料完成抬起;
}
+ else
+ {
+ //TestCenterMessageBox.Show(, $"轴NozzleZ{curNozzle.NozzleIndex}运动异常,ret={errCode}", ETipButton.Ok);
+ }
break;
case EWorkFlowStep.等待取料完成抬起:
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
{
- logInfo = "取料完成已运动到抬起位,准备真空检测";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- flowStep = EWorkFlowStep.取料真空检测;
+ logInfo = "取料完成已运动到安全位,准备真空检测";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.取料完成后真空检测;
}
break;
- case EWorkFlowStep.取料真空检测:
+ case EWorkFlowStep.取料完成后真空检测:
if (Ops.IsOn($"{curNozzle.NozzleIndex}号吸嘴真空吸检测") || GlobalVar.RunSpace || GlobalVar.VirtualAxis)
{
- FetchNum = 0;
- logInfo = $"吸嘴{curNozzle.NozzleIndex}真空检测 OK";
+ reFetchNum = 0;
+ logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴真空检测OK";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- curNozzle.Status = ENozzleStatus.ToUnload;
- curNozzle.FromType = curTask.FromType;
- curNozzle.ToType = curTask.ToType;
- curNozzle.ToIndex = curTask.ToIndex;
- curTask.SuckerNo = curNozzle.NozzleIndex ;
- curNozzle.TurnoverGUID = curTask.GUID;
- if (curTask.FromType == TurnoverType.Turnover)
- {
- curNozzle.FromFloor = curTask.FromFloor;
- curNozzle.SN = curTask.SN;
- curNozzle.FromIndex = curTask.FromIndex;
- GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex+1, ESlotStatus.NotHave);
- }
- else if (curTask.FromType == TurnoverType.ToBeTested)
- {
- curNozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor();
- curNozzle.SN = "";
- curNozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index-1;
- GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
- }
- curNozzle.Update();
- curTask.Dealed = true;
+ TakeFinishedUpdateNozzleStatus(curNozzle, curTask);
int undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode);
if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
{
- logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续执行";
- MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
+ logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续取料";
+ MessageQueue.Instance.Insert(logInfo);
flowStep = EWorkFlowStep.到取料位上方;
}
else
@@ -397,13 +356,15 @@ namespace Rs.MotionPlat.Flow
}
else
{
- FetchNum++;
- if (FetchNum == 6)
+ reFetchNum++;
+ if (reFetchNum == 6)
{
+ ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes);
Dictionary buttonText = new Dictionary();
if(curTask.FromType== TurnoverType.ToBeTested)
{
buttonText.Add(ETipButton.No, "结束上料|EndInput");
+ btnText |= ETipButton.No;
}
buttonText.Add(ETipButton.Yes, "继续|Continue");
buttonText.Add(ETipButton.Skip, "跳过|Skip");
@@ -411,81 +372,71 @@ namespace Rs.MotionPlat.Flow
//DialogResult dr = Msg.ShowError($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定", MessageBoxButtons.RetryCancel);
//CloseResult cr = new TakeFailMsg().ShowMsg($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定");
//结束上料/跳过/重试/继续
- ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes | ETipButton.No);
- alarmInfo = $"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定";
+ //ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes | ETipButton.No);
+ alarmInfo = $"【{curNozzle.NozzleIndex}】排料吸嘴取料{reFetchNum}次失败";
TestCenterMessageBox.Show(AlarmConstID.TrayTakeFailAlarm,alarmInfo , btnText);
SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.TrayTakeFailAlarm);
- if (box.Button== ETipButton.Retry)
- {
- FetchNum = 0;
- flowStep = EWorkFlowStep.到取料位下方;
- }
- else if (box.Button== ETipButton.Skip)//switch
+ switch (box.Button)
{
- FetchNum = 0;
- if (curTask.FromType == TurnoverType.Turnover)
- {
- GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave);
- }
- else if (curTask.FromType == TurnoverType.ToBeTested)
- {
- GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
- }
- if (LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode) > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
- {
- flowStep = EWorkFlowStep.到取料位上方;
- }
- else
- {
- flowStep = EWorkFlowStep.到下相机拍照起始位;
- }
- }
- else if(box.Button== ETipButton.No)//结束上料
- {
- FetchNum = 0;
- TestCenter.Instance.EndInput();
- LoadAndUnloadTask.Instance.ClearUndoTask();
- if(NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count>0)
- {
- flowStep = EWorkFlowStep.到下相机拍照起始位;
- }
- else
- {
- flowStep = EWorkFlowStep.任务结束到安全位;
- }
- }
- else if (box.Button== ETipButton.Yes)//继续
- {
- FetchNum = 0;
- curNozzle.Status = ENozzleStatus.ToUnload;
- curNozzle.FromType = curTask.FromType;
- curNozzle.FromFloor = curTask.FromFloor;
-
- curNozzle.ToType = curTask.ToType;
- curNozzle.ToIndex = curTask.ToIndex;
- curTask.SuckerNo = curNozzle.NozzleIndex;
- curNozzle.TurnoverGUID = curTask.GUID;
- if (curTask.FromType == TurnoverType.Turnover)
- {
- curNozzle.SN = curTask.SN;
- curNozzle.FromIndex = curTask.FromIndex;
- GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave);
- }
- else if (curTask.FromType == TurnoverType.ToBeTested)
- {
- curNozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index;
- GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
- }
- curNozzle.Update();
- curTask.Dealed = true;
- if (LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode) > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
- {
- flowStep = EWorkFlowStep.到取料位上方;
- }
- else
- {
- flowStep = EWorkFlowStep.到下相机拍照起始位;
- }
+ case ETipButton.Yes://继续
+ reFetchNum = 0;
+ logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴真空检测NG但选择了继续执行";
+ MessageQueue.Instance.Insert(logInfo);
+ TakeFinishedUpdateNozzleStatus(curNozzle, curTask);
+ int undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode);
+ if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
+ {
+ logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续取料";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.到取料位上方;
+ }
+ else
+ {
+ flowStep = EWorkFlowStep.到下相机拍照起始位;
+ }
+ break;
+ case ETipButton.No:
+ reFetchNum = 0;
+ TestCenter.Instance.EndInput();
+ LoadAndUnloadTask.Instance.ClearUndoTask();
+ if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0)
+ {
+ flowStep = EWorkFlowStep.到下相机拍照起始位;
+ }
+ else
+ {
+ flowStep = EWorkFlowStep.任务结束到安全位;
+ }
+ break;
+ case ETipButton.Retry:
+ reFetchNum = 0;
+ flowStep = EWorkFlowStep.到取料位下方;
+ break;
+ case ETipButton.Skip:
+ reFetchNum = 0;
+ if (curTask.FromType == TurnoverType.Turnover)
+ {
+ GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave);
+ curTask.Dealed = true;
+ }
+ else if (curTask.FromType == TurnoverType.ToBeTested)
+ {
+ GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
+ }
+ undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode);
+ if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
+ {
+ logInfo = $"跳过后检测到还有{undoTaskNum}条任务未执行,继续取料";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.到取料位上方;
+ }
+ else
+ {
+ flowStep = EWorkFlowStep.到下相机拍照起始位;
+ }
+ break;
+ default:
+ break;
}
}
else
@@ -497,9 +448,9 @@ namespace Rs.MotionPlat.Flow
case EWorkFlowStep.到下相机拍照起始位:
if (XYCanMove() || GlobalVar.VirtualAxis)
{
+ turnoverToTray = !turnoverToTray;
logInfo = "到下相机拍照起始位";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
if(!GlobalVar.VirtualAxis)
{
ImageProcess.ClearAutoTrigger();
@@ -527,12 +478,11 @@ namespace Rs.MotionPlat.Flow
{
logInfo = "已运动到下相机拍照起始位";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
- Thread.Sleep(100);
if (!GlobalVar.VirtualAxis)
{
HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto);
}
+
List grabPoints = new List();
//获取有几个吸嘴需要拍照
needGrabNum = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count();
@@ -556,6 +506,10 @@ namespace Rs.MotionPlat.Flow
{
flowStep = EWorkFlowStep.到下相机拍照结束位;
}
+ else
+ {
+ //TestCenterMessageBox.Show(1,$"轴LoadX运动异常,ret={errCode}", ETipButton.Ok);
+ }
}
break;
@@ -564,37 +518,38 @@ namespace Rs.MotionPlat.Flow
{
logInfo = "到下相机拍照结束位";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
IoManager.Instance.WriteOut("下左相机光源触发", 1);
Thread.Sleep(50);
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover)
{
- AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle1CenterX") + 10, GlobalVar.FlyCameraSpeed);
+ errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle1CenterX") + 10, GlobalVar.FlyCameraSpeed);
}
else
{
- AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed);
+ errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed);
+ }
+ if(errCode== ErrorCode.Ok)
+ {
+ flowStep = EWorkFlowStep.等待到下相机拍照结束位;
+ }
+ else
+ {
+ //TestCenterMessageBox.Show(1,$"轴LoadX运动异常,ret={errCode}", ETipButton.Ok);
}
-
- flowStep = EWorkFlowStep.等待到下相机拍照结束位;
}
break;
case EWorkFlowStep.等待到下相机拍照结束位:
- Stopwatch stopwatch = new Stopwatch();
-
if (Ops.IsStop("LoadX") || GlobalVar.VirtualAxis)
{
logInfo = "已运动到下相机拍照结束位";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
if(!GlobalVar.VirtualAxis)
{
AxisControl.LoadX.ClearCompare(1);
}
IoManager.Instance.WriteOut("下左相机光源触发", 0);
flowStep = EWorkFlowStep.等待相机拍照完成;
- stopwatch.Start();
}
break;
case EWorkFlowStep.等待相机拍照完成:
@@ -603,8 +558,6 @@ namespace Rs.MotionPlat.Flow
{
logInfo = "相机拍照完成,准备处理照片";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
-
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover)
{
imgs = imgs.Reverse().ToArray();
@@ -614,15 +567,16 @@ namespace Rs.MotionPlat.Flow
foreach(Nozzle nl in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload))
{
if(string.IsNullOrEmpty(nl.SN))
- nl.SN = (nl.FromIndex+1).ToString().PadLeft(18, '0');
- //nl.SN = GuidHelper.Create();
+ {
+ nl.SN = (nl.FromIndex + 1).ToString().PadLeft(18, '0');
+ }
}
- flowStep = EWorkFlowStep.到放料位上方;
mrs = new List();
for(int i=0;i($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed);
+ targetPos = SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight");
}
else
{
- errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight") +3, GlobalVar.WholeSpeed);
+ targetPos = SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight") + 1;
}
-
+ errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos, GlobalVar.WholeSpeed);
if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis)
{
+ VirtualAxisSleep();
flowStep = EWorkFlowStep.等待到放料位下方;
}
+ else
+ {
+ MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode);
+ }
break;
case EWorkFlowStep.等待到放料位下方:
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
{
- logInfo = "已运动到放料位下方";
+ logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴已运动到放料位下方";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
if (curNozzle.ToType== TurnoverType.Turnover)
{
+ /*打开周转盘真空吸*/
+ MessageQueue.Instance.Insert($"打开周转盘{curNozzle.ToIndex + 1}号穴位真空吸");
Ops.On($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸");
Thread.Sleep(GlobalVar.TurnoverTrayOpenVacSuctionDelaytime);
+ /*关闭排料吸嘴真空吸*/
+ MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸");
Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空
Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime);
+ /*打开排料吸嘴真空破*/
+ MessageQueue.Instance.Insert($"打开{curNozzle.NozzleIndex}号排料吸嘴真空破");
Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀");
Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime);
- Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀");
- Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime);
- flowStep = EWorkFlowStep.放料完成抬起;
+
}
else
{
+ /*关闭排料吸嘴真空吸*/
+ MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸");
Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");
Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime);
+ /*关闭排料吸嘴真空吸*/
+ MessageQueue.Instance.Insert($"打开{curNozzle.NozzleIndex}号排料吸嘴真空破");
Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀");
Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime);
+ /*关闭排料吸嘴真空吸*/
+ MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空破");
Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀");
Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime);
flowStep = EWorkFlowStep.放料完成抬起;
}
-
}
break;
- //case EWorkFlowStep.到放料破真空位:
- // errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight")+1, GlobalVar.WholeSpeed);
- // if (errCode == ErrorCode.Ok)
- // {
- // flowStep = EWorkFlowStep.等待到放料破真空位;
- // }
- // break;
- //case EWorkFlowStep.等待到放料破真空位:
- // if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
- // {
- // flowStep = EWorkFlowStep.周转盘放料位真空检测;
- // }
-
- // break;
- //case EWorkFlowStep.周转盘放料位真空检测:
- // if (curNozzle.ToType == TurnoverType.Turnover)
- // {
- // Thread.Sleep(100);
- // if(Ops.IsOn($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测") || GlobalVar.RunSpace)
- // {
- // flowStep = EWorkFlowStep.放料完成抬起;
- // }
- // else
- // {
- // DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过");
- // if (dr == DialogResult.OK)
- // {
- // flowStep = EWorkFlowStep.放料完成抬起;
- // }
- // }
- // }
- // break;
+ case EWorkFlowStep.到放料关破真空位:
+ targetPos = SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight");
+ errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos + 1, GlobalVar.WholeSpeed);
+ if (errCode == ErrorCode.Ok)
+ {
+ MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴周转盘放料完成,准备微微抬起");
+ flowStep = EWorkFlowStep.等待到放料关破真空位;
+ }
+ else
+ {
+ MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode);
+ }
+ break;
+ case EWorkFlowStep.等待到放料关破真空位:
+ if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}"))
+ {
+ /*关闭排料吸嘴真空破*/
+ Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀");
+ Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime);
+ MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴微微抬起后关闭破真空");
+ flowStep = EWorkFlowStep.放料完成抬起;
+ }
+ break;
case EWorkFlowStep.放料完成抬起:
errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed);
if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis)
{
- logInfo = "放料完成抬起";
+ if (GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
+ logInfo = $"{curNozzle.NozzleIndex}号排料吸嘴放料完成抬起";
MessageQueue.Instance.Insert(logInfo);
flowStep = EWorkFlowStep.等待放料完成抬起;
}
+ else
+ {
+ MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode);
+ }
break;
case EWorkFlowStep.等待放料完成抬起:
if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
{
- logInfo = "放料完成已运动到抬起位,准备真空检测";
+ logInfo = $"{curNozzle.NozzleIndex}号排料吸嘴放料完成已起位,准备真空检测";
MessageQueue.Instance.Insert(logInfo);
flowStep = EWorkFlowStep.放料真空检测;
}
@@ -959,17 +909,19 @@ namespace Rs.MotionPlat.Flow
{
if (Ops.IsOn($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测") || GlobalVar.RunSpace)
{
- logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测 OK";
+ logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测OK";
MessageQueue.Instance.Insert(logInfo);
flowStep = EWorkFlowStep.放料任务完成;
}
else
{
- logInfo = $"放料时周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常";
+ logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常";
MessageQueue.Instance.Warn(logInfo);
- DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过");
- //TestCenterMessageBox.Show(AlarmConstID)
- if (dr == DialogResult.OK)
+ //DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过");
+ alarmInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常";
+ TestCenterMessageBox.Show(AlarmConstID.TurnoverDumpFailAlarm, alarmInfo, ETipButton.Ok);
+ SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.TurnoverDumpFailAlarm);
+ if (box.Button== ETipButton.Ok)
{
flowStep = EWorkFlowStep.放料任务完成;
}
@@ -984,6 +936,7 @@ namespace Rs.MotionPlat.Flow
logInfo = "放料任务完成";
MessageQueue.Instance.Insert(logInfo);
AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home();
+ MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴回原");
//Ops.HomeAndGoStartPos($"NozzleR{NozzleIndex}");
if (curNozzle.ToType == TurnoverType.Turnover)
{
@@ -1014,7 +967,6 @@ namespace Rs.MotionPlat.Flow
GlobalTray.MultiTray.ChangeStatus(downSlot.Index, ESlotStatus.Have);
}
curNozzle.Reset();
- Thread.Sleep(100);
LoadAndUnloadTask.Instance.AddTurnoverResult(curNozzle);
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0)
{
@@ -1034,17 +986,28 @@ namespace Rs.MotionPlat.Flow
break;
case EWorkFlowStep.任务结束到安全位:
- logInfo = "任务结束到安全位";
+ logInfo = "排料任务结束到安全位";
MessageQueue.Instance.Insert(logInfo);
- LogHelper.Debug(logInfo);
errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue("LoadXStartPos"), GlobalVar.WholeSpeed);
if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis)
{
errCode = AxisControl.LoadY.MovePos(SysConfigParam.GetValue("LoadYStartPos"), GlobalVar.WholeSpeed);
if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis)
{
+ if (GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
flowStep = EWorkFlowStep.等待任务结束到安全位;
}
+ else
+ {
+ MoveFailAlarm(AxisAlias.LoadY, errCode);
+ }
+ }
+ else
+ {
+ MoveFailAlarm(AxisAlias.LoadX, errCode);
}
break;
case EWorkFlowStep.等待任务结束到安全位:
@@ -1183,6 +1146,73 @@ namespace Rs.MotionPlat.Flow
}
}
+ ///
+ /// 取料完成后更新吸嘴状态
+ ///
+ private void TakeFinishedUpdateNozzleStatus(Nozzle nozzle,TurnoverInfo turnoverInfo)
+ {
+ nozzle.Status = ENozzleStatus.ToUnload;
+ nozzle.FromType = turnoverInfo.FromType;
+ nozzle.ToType = turnoverInfo.ToType;
+ nozzle.ToIndex = turnoverInfo.ToIndex;
+ turnoverInfo.SuckerNo = nozzle.NozzleIndex;
+ nozzle.TurnoverGUID = turnoverInfo.GUID;
+ if (turnoverInfo.FromType == TurnoverType.Turnover)
+ {
+ nozzle.FromFloor = turnoverInfo.FromFloor;
+ nozzle.SN = turnoverInfo.SN;
+ nozzle.FromIndex = turnoverInfo.FromIndex;
+ GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.FromIndex + 1, ESlotStatus.NotHave);
+ }
+ else if (turnoverInfo.FromType == TurnoverType.ToBeTested)
+ {
+ nozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor();
+ nozzle.SN = "";
+ nozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index - 1;
+ GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
+ }
+ nozzle.Update();
+ turnoverInfo.Dealed = true;
+ }
+ ///
+ /// 等待任务
+ ///
+ private void WaitTask()
+ {
+ if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk)
+ {
+ if (LoadAndUnloadTask.Instance.CanRunTask())
+ {
+ if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad) > 0)
+ {
+ logInfo = $"接收到测试工位上料任务";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.测试工位上料;
+ }
+ else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestUnload) > 0)
+ {
+ logInfo = $"接收到测试工位下料任务";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.测试工位下料;
+ }
+ else
+ {
+ turnoverToTray = true;
+ logInfo = $"接收到排料任务";
+ MessageQueue.Instance.Insert(logInfo);
+ flowStep = EWorkFlowStep.到取料位上方;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 获取拍照点位
+ ///
+ private void GetGrabPoints()
+ {
+
+ }
private double GetVacOffsetHeight(int fetchNum)
{
switch (fetchNum)
@@ -1231,5 +1261,23 @@ namespace Rs.MotionPlat.Flow
//}
return true;
}
+
+ private void MoveFailAlarm(string axisname,ErrorCode _errCode)
+ {
+ string alarmStr = $"轴{axisname}运动异常,ret={_errCode}";
+ TestCenterMessageBox.Show(AlarmConstID.MoveFailAlarm, alarmInfo, ETipButton.Ok);
+ SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.MoveFailAlarm);
+ }
+
+ ///
+ /// 如果是虚拟轴,则模拟等待一下
+ ///
+ private void VirtualAxisSleep()
+ {
+ if (GlobalVar.VirtualAxis)
+ {
+ Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
+ }
+ }
}
}
diff --git a/Rs.SkyLine/Program.cs b/Rs.SkyLine/Program.cs
index 0c02dd7..60def3e 100644
--- a/Rs.SkyLine/Program.cs
+++ b/Rs.SkyLine/Program.cs
@@ -20,8 +20,6 @@ namespace Rs.MotionPlat
static void Main()
{
- List list = RearrangeManager.GeneralRearrangeTask( TurnoverType.ToBeTested, 15, 1);
-
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new FormIO2());