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

master
lhiven 2 years ago
parent e91bf60fa4
commit 8533e48d9c

@ -84,7 +84,7 @@ namespace Rs.MotionPlat.Commom
public static void Init()
{
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);
if(dt!=null&&dt.Rows.Count>0)
{
@ -108,7 +108,7 @@ namespace Rs.MotionPlat.Commom
{
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;
}

@ -272,7 +272,7 @@ namespace Rs.MotionPlat.Flow
ti.FromType = ai.Load.Type;
ti.FromFloor = ai.Load.Floor;
ti.FromIndex = ai.Load.Index;
ti.SN = ai.SN;
ti.ToType = ai.To.Type;
ti.ToFloor = ai.To.Floor;
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,
waitArriveTurnoverDownPosDumpPro,
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")}");
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;
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;
}
}

@ -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

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

Loading…
Cancel
Save