|
|
|
@ -82,14 +82,6 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
//};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前取料穴位
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ushort CurFetchSlotIndex = 1;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前组装穴位
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ushort CurAssembleSlotInex = 1;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 吸嘴索引
|
|
|
|
|
/// </summary>
|
|
|
|
@ -113,6 +105,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
SlotPoint nozzleDist = new SlotPoint();
|
|
|
|
|
List<Nozzle> unloadNozzles = new List<Nozzle>();
|
|
|
|
|
TraySlot downSlot = new TraySlot();
|
|
|
|
|
int needGrabNum = 0;//需要拍照的吸嘴数量
|
|
|
|
|
ErrorCode errCode = ErrorCode.Ok;
|
|
|
|
|
public override void Run()
|
|
|
|
|
{
|
|
|
|
@ -121,14 +114,14 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
case EWorkFlowStep.等待任务:
|
|
|
|
|
if (LoadAndUnloadTask.Instance.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
totalTask = LoadAndUnloadTask.Instance.GetTask();
|
|
|
|
|
int totalNum = totalTask.Count;
|
|
|
|
|
LoadAndUnloadTask.Instance.Categories.Count();
|
|
|
|
|
string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString();
|
|
|
|
|
if (LoadAndUnloadTask.Instance.Categories.Count > 1)
|
|
|
|
|
{
|
|
|
|
|
string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString();
|
|
|
|
|
}
|
|
|
|
|
//totalTask = LoadAndUnloadTask.Instance.GetTask();
|
|
|
|
|
//int totalNum = totalTask.Count;
|
|
|
|
|
//LoadAndUnloadTask.Instance.Categories.Count();
|
|
|
|
|
//string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString();
|
|
|
|
|
//if (LoadAndUnloadTask.Instance.Categories.Count > 1)
|
|
|
|
|
//{
|
|
|
|
|
// string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString();
|
|
|
|
|
//}
|
|
|
|
|
//if (totalTask[0].FromType == TurnoverType.Turnover && totalTask[0].ToType == TurnoverType.Tester)
|
|
|
|
|
//{
|
|
|
|
|
// TestCenter.Instance.LoadAndUnloadResult(totalTask);
|
|
|
|
@ -163,6 +156,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
idleNozzle = NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE);
|
|
|
|
|
if (idleNozzle != null && idleNozzle.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
//这里改变吸嘴的状态
|
|
|
|
|
NozzleIndex = idleNozzle[0].NozzleIndex;
|
|
|
|
|
idleNozzle[0].Status = ENozzleStatus.ToUnload;
|
|
|
|
|
idleNozzle[0].ToType = curTurnoverTask.ToType;
|
|
|
|
@ -258,13 +252,13 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
FetchNum = 0;
|
|
|
|
|
if (curTurnoverTask.FromType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
//curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTurnoverTask.FromIndex + 1, EPointType.RUN);
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(curTurnoverTask.FromIndex+1, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
else if (curTurnoverTask.FromType == TurnoverType.ToBeTested)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
if (totalTask.Where(t => t.Dealed == false).Count() > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count >1)
|
|
|
|
|
if (totalTask.Where(t => t.Dealed == false).Count() > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count >0)
|
|
|
|
|
{
|
|
|
|
|
flowStep = EWorkFlowStep.到取料位上方;
|
|
|
|
|
}
|
|
|
|
@ -272,7 +266,6 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
flowStep = EWorkFlowStep.到下相机拍照起始位;
|
|
|
|
|
}
|
|
|
|
|
CurFetchSlotIndex++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -303,7 +296,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
Thread.Sleep(100);
|
|
|
|
|
HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto);
|
|
|
|
|
List<double> grabPoints = new List<double>();
|
|
|
|
|
for(int i=1;i<9;i++)
|
|
|
|
|
//获取有几个吸嘴需要拍照
|
|
|
|
|
needGrabNum = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count();
|
|
|
|
|
for(int i=1;i< needGrabNum+1; i++)
|
|
|
|
|
{
|
|
|
|
|
grabPoints.Add(SysConfigParam.GetValue<double>($"Nozzle{i}CenterX"));
|
|
|
|
|
}
|
|
|
|
@ -320,7 +315,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
IoManager.Instance.WriteOut("下左相机光源触发", 1);
|
|
|
|
|
Thread.Sleep(50);
|
|
|
|
|
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("Nozzle9CenterX") - 10, GlobalVar.FlyCameraSpeed);
|
|
|
|
|
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed);
|
|
|
|
|
flowStep = EWorkFlowStep.等待到下相机拍照结束位;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -338,7 +333,7 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.等待相机拍照完成:
|
|
|
|
|
imgs = ImageProcess.GetAutoImage();
|
|
|
|
|
if (imgs != null && imgs.Length == 8)
|
|
|
|
|
if (imgs != null && imgs.Length == needGrabNum)
|
|
|
|
|
{
|
|
|
|
|
CameraOkEvent?.Invoke(imgs, null);
|
|
|
|
|
if (GlobalVar.RunSpace)
|
|
|
|
@ -390,7 +385,6 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
NozzleIndex = unloadNozzles[0].NozzleIndex;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (unloadNozzles[0].ToType == TurnoverType.Turnover)
|
|
|
|
|
{
|
|
|
|
|
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", unloadNozzles[0].ToIndex + 1, EPointType.RUN);
|
|
|
|
@ -511,11 +505,9 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//回复中控,排料完成
|
|
|
|
|
flowStep = EWorkFlowStep.任务结束到安全位;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CurAssembleSlotInex++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case EWorkFlowStep.任务结束到安全位:
|
|
|
|
@ -550,6 +542,15 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
TestCenter.Instance.LoadAndUnloadResult(totalTask);
|
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Waiting;
|
|
|
|
|
//切换穴位状态
|
|
|
|
|
for(int i=1;i<9;i++)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 17; i < 25; i++)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
flowStep = EWorkFlowStep.等待任务;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -562,6 +563,15 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
{
|
|
|
|
|
TestCenter.Instance.LoadAndUnloadResult(totalTask);
|
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
|
//切换穴位状态
|
|
|
|
|
for (int i = 9; i < 17; i++)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 25; i < 33; i++)
|
|
|
|
|
{
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(i, ESlotStatus.NotHave);
|
|
|
|
|
}
|
|
|
|
|
MachineManage.Instance.RunState = ERunState.Waiting;
|
|
|
|
|
flowStep = EWorkFlowStep.等待任务;
|
|
|
|
|
}
|
|
|
|
@ -593,9 +603,21 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检测排料Y轴是否可以到周转盘
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private bool CanGoTurnoverTray()
|
|
|
|
|
{
|
|
|
|
|
//获取周转Y轴的位置,当排料Y轴去周转盘的时候,检测是否安全
|
|
|
|
|
double turnoverYPos = Ops.GetCurPosition("TurnoverY");
|
|
|
|
|
if (turnoverYPos - SysConfigParam.GetValue<double>("PressY") < -1)
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
private bool XYCanMove()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//AxisControl.VacZ1.GetOrgStatus(out bool bOrgZ1);
|
|
|
|
|
//AxisControl.VacZ2.GetOrgStatus(out bool bOrgZ2);
|
|
|
|
|
//if (AxisControl.LoadX.HomeStatus == EHomeStatus.Finished
|
|
|
|
|