增加当测试工位下料到周转盘后,如果周转盘没有测试料,则让周转Y轴回到安全位

master
lhiven 2 years ago
parent e91bf60fa4
commit 8533e48d9c

@ -84,7 +84,7 @@ namespace Rs.MotionPlat.Commom
public static void Init() public static void Init()
{ {
nozzles.Clear(); nozzles.Clear();
string querySql = "select * from nozzle where enable=1"; string querySql = "select * from nozzle where enable=1 and nozzleindex<=8";
DataTable dt = db.GetDataTable(querySql); DataTable dt = db.GetDataTable(querySql);
if(dt!=null&&dt.Rows.Count>0) if(dt!=null&&dt.Rows.Count>0)
{ {
@ -108,7 +108,7 @@ namespace Rs.MotionPlat.Commom
{ {
if(nozzles!=null && nozzles.Count>0) if(nozzles!=null && nozzles.Count>0)
{ {
return nozzles.Where(n => n.Status == status).ToList(); return nozzles.Where(n => n.Status == status).OrderBy(n=>n.NozzleIndex).ToList();
} }
return null; return null;
} }

@ -272,7 +272,7 @@ namespace Rs.MotionPlat.Flow
ti.FromType = ai.Load.Type; ti.FromType = ai.Load.Type;
ti.FromFloor = ai.Load.Floor; ti.FromFloor = ai.Load.Floor;
ti.FromIndex = ai.Load.Index; ti.FromIndex = ai.Load.Index;
ti.SN = ai.SN;
ti.ToType = ai.To.Type; ti.ToType = ai.To.Type;
ti.ToFloor = ai.To.Floor; ti.ToFloor = ai.To.Floor;
ti.ToIndex = ai.To.Index; ti.ToIndex = ai.To.Index;

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow
{
public class TestStationFlow
{
}
}

@ -65,7 +65,9 @@ namespace Rs.MotionPlat.Flow
gotoTurnoverDownPosDumpPro, gotoTurnoverDownPosDumpPro,
waitArriveTurnoverDownPosDumpPro, waitArriveTurnoverDownPosDumpPro,
gotoTurnoverUpPosDumpOver, gotoTurnoverUpPosDumpOver,
waitArriveTurnoverUpPosDumpOver waitArriveTurnoverUpPosDumpOver,
gotoSafePos,
waitArriveSafePos,
} }
@ -497,12 +499,42 @@ namespace Rs.MotionPlat.Flow
} }
MessageQueue.Instance.Insert($"arrived turnover tray up position TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"); MessageQueue.Instance.Insert($"arrived turnover tray up position TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}");
Thread.Sleep(100); Thread.Sleep(100);
count++; //判断周转盘是否有需要测试的穴位
List<TraySlot> haveSlots =GlobalTray.TurnoverTray.GetSlots(ESlotStatus.Have);
if(haveSlots!=null&&haveSlots.Count>0)
{
if(haveSlots.Where(s=>((s.Index>=1 && s.Index<=8)||(s.Index>=17 && s.Index<=24))).Count()==0)
{
//周转盘没有需要测试的穴位,把轴移动到安全位
Step = ETurnoverFlowStep.gotoSafePos;
}
else
{
unloadOk = true; unloadOk = true;
Step = ETurnoverFlowStep.waitCommand; Step = ETurnoverFlowStep.waitCommand;
} }
}
else
{
unloadOk = true;
Step = ETurnoverFlowStep.waitCommand;
}
}
break;
case ETurnoverFlowStep.gotoSafePos:
AxisControl.TurnoverY.MovePos(SysConfigParam.GetValue<double>("PressTakeY"), GlobalVar.WholeSpeed);
Step = ETurnoverFlowStep.waitArriveSafePos;
break;
case ETurnoverFlowStep.waitArriveSafePos:
if(Ops.IsStop("TurnoverY"))
{
Step = ETurnoverFlowStep.waitCommand;
}
break; break;
} }
} }

@ -82,14 +82,6 @@ namespace Rs.MotionPlat.Flow
//}; //};
} }
/// <summary>
/// 当前取料穴位
/// </summary>
private ushort CurFetchSlotIndex = 1;
/// <summary>
/// 当前组装穴位
/// </summary>
private ushort CurAssembleSlotInex = 1;
/// <summary> /// <summary>
/// 吸嘴索引 /// 吸嘴索引
/// </summary> /// </summary>
@ -113,6 +105,7 @@ namespace Rs.MotionPlat.Flow
SlotPoint nozzleDist = new SlotPoint(); SlotPoint nozzleDist = new SlotPoint();
List<Nozzle> unloadNozzles = new List<Nozzle>(); List<Nozzle> unloadNozzles = new List<Nozzle>();
TraySlot downSlot = new TraySlot(); TraySlot downSlot = new TraySlot();
int needGrabNum = 0;//需要拍照的吸嘴数量
ErrorCode errCode = ErrorCode.Ok; ErrorCode errCode = ErrorCode.Ok;
public override void Run() public override void Run()
{ {
@ -121,14 +114,14 @@ namespace Rs.MotionPlat.Flow
case EWorkFlowStep.: case EWorkFlowStep.:
if (LoadAndUnloadTask.Instance.Count > 0) if (LoadAndUnloadTask.Instance.Count > 0)
{ {
totalTask = LoadAndUnloadTask.Instance.GetTask(); //totalTask = LoadAndUnloadTask.Instance.GetTask();
int totalNum = totalTask.Count; //int totalNum = totalTask.Count;
LoadAndUnloadTask.Instance.Categories.Count(); //LoadAndUnloadTask.Instance.Categories.Count();
string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString(); //string from_to = totalTask[0].FromType.ToString() + "_" + totalTask[0].ToType.ToString();
if (LoadAndUnloadTask.Instance.Categories.Count > 1) //if (LoadAndUnloadTask.Instance.Categories.Count > 1)
{ //{
string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString(); // string from_to2 = totalTask[16].FromType.ToString() + "_" + totalTask[16].ToType.ToString();
} //}
//if (totalTask[0].FromType == TurnoverType.Turnover && totalTask[0].ToType == TurnoverType.Tester) //if (totalTask[0].FromType == TurnoverType.Turnover && totalTask[0].ToType == TurnoverType.Tester)
//{ //{
// TestCenter.Instance.LoadAndUnloadResult(totalTask); // TestCenter.Instance.LoadAndUnloadResult(totalTask);
@ -163,6 +156,7 @@ namespace Rs.MotionPlat.Flow
idleNozzle = NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE); idleNozzle = NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE);
if (idleNozzle != null && idleNozzle.Count > 0) if (idleNozzle != null && idleNozzle.Count > 0)
{ {
//这里改变吸嘴的状态
NozzleIndex = idleNozzle[0].NozzleIndex; NozzleIndex = idleNozzle[0].NozzleIndex;
idleNozzle[0].Status = ENozzleStatus.ToUnload; idleNozzle[0].Status = ENozzleStatus.ToUnload;
idleNozzle[0].ToType = curTurnoverTask.ToType; idleNozzle[0].ToType = curTurnoverTask.ToType;
@ -258,13 +252,13 @@ namespace Rs.MotionPlat.Flow
FetchNum = 0; FetchNum = 0;
if (curTurnoverTask.FromType == TurnoverType.Turnover) 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) else if (curTurnoverTask.FromType == TurnoverType.ToBeTested)
{ {
GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); 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.; flowStep = EWorkFlowStep.;
} }
@ -272,7 +266,6 @@ namespace Rs.MotionPlat.Flow
{ {
flowStep = EWorkFlowStep.; flowStep = EWorkFlowStep.;
} }
CurFetchSlotIndex++;
} }
else else
{ {
@ -303,7 +296,9 @@ namespace Rs.MotionPlat.Flow
Thread.Sleep(100); Thread.Sleep(100);
HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto); HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto);
List<double> grabPoints = new List<double>(); 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")); grabPoints.Add(SysConfigParam.GetValue<double>($"Nozzle{i}CenterX"));
} }
@ -320,7 +315,7 @@ namespace Rs.MotionPlat.Flow
{ {
IoManager.Instance.WriteOut("下左相机光源触发", 1); IoManager.Instance.WriteOut("下左相机光源触发", 1);
Thread.Sleep(50); 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.; flowStep = EWorkFlowStep.;
} }
@ -338,7 +333,7 @@ namespace Rs.MotionPlat.Flow
break; break;
case EWorkFlowStep.: case EWorkFlowStep.:
imgs = ImageProcess.GetAutoImage(); imgs = ImageProcess.GetAutoImage();
if (imgs != null && imgs.Length == 8) if (imgs != null && imgs.Length == needGrabNum)
{ {
CameraOkEvent?.Invoke(imgs, null); CameraOkEvent?.Invoke(imgs, null);
if (GlobalVar.RunSpace) if (GlobalVar.RunSpace)
@ -390,7 +385,6 @@ namespace Rs.MotionPlat.Flow
{ {
NozzleIndex = unloadNozzles[0].NozzleIndex; NozzleIndex = unloadNozzles[0].NozzleIndex;
} }
if (unloadNozzles[0].ToType == TurnoverType.Turnover) if (unloadNozzles[0].ToType == TurnoverType.Turnover)
{ {
curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", unloadNozzles[0].ToIndex + 1, EPointType.RUN); curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", unloadNozzles[0].ToIndex + 1, EPointType.RUN);
@ -511,11 +505,9 @@ namespace Rs.MotionPlat.Flow
} }
else else
{ {
//回复中控,排料完成
flowStep = EWorkFlowStep.; flowStep = EWorkFlowStep.;
} }
} }
CurAssembleSlotInex++;
} }
break; break;
case EWorkFlowStep.: case EWorkFlowStep.:
@ -550,6 +542,15 @@ namespace Rs.MotionPlat.Flow
TestCenter.Instance.LoadAndUnloadResult(totalTask); TestCenter.Instance.LoadAndUnloadResult(totalTask);
LoadAndUnloadTask.Instance.Clear(); LoadAndUnloadTask.Instance.Clear();
MachineManage.Instance.RunState = ERunState.Waiting; 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.; flowStep = EWorkFlowStep.;
} }
break; break;
@ -562,6 +563,15 @@ namespace Rs.MotionPlat.Flow
{ {
TestCenter.Instance.LoadAndUnloadResult(totalTask); TestCenter.Instance.LoadAndUnloadResult(totalTask);
LoadAndUnloadTask.Instance.Clear(); 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; MachineManage.Instance.RunState = ERunState.Waiting;
flowStep = EWorkFlowStep.; flowStep = EWorkFlowStep.;
} }
@ -593,9 +603,21 @@ namespace Rs.MotionPlat.Flow
return 0; 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() private bool XYCanMove()
{ {
//AxisControl.VacZ1.GetOrgStatus(out bool bOrgZ1); //AxisControl.VacZ1.GetOrgStatus(out bool bOrgZ1);
//AxisControl.VacZ2.GetOrgStatus(out bool bOrgZ2); //AxisControl.VacZ2.GetOrgStatus(out bool bOrgZ2);
//if (AxisControl.LoadX.HomeStatus == EHomeStatus.Finished //if (AxisControl.LoadX.HomeStatus == EHomeStatus.Finished

@ -159,6 +159,7 @@
<Compile Include="Flow\Space\TakeTrayTest.cs" /> <Compile Include="Flow\Space\TakeTrayTest.cs" />
<Compile Include="Flow\Space\ZRTest.cs" /> <Compile Include="Flow\Space\ZRTest.cs" />
<Compile Include="Flow\TestCenter.cs" /> <Compile Include="Flow\TestCenter.cs" />
<Compile Include="Flow\TestStationFlow.cs" />
<Compile Include="Flow\TurnoverFlow.cs" /> <Compile Include="Flow\TurnoverFlow.cs" />
<Compile Include="Flow\WorkFlow.cs" /> <Compile Include="Flow\WorkFlow.cs" />
<Compile Include="Form1.cs"> <Compile Include="Form1.cs">

Loading…
Cancel
Save