增加重排功能

master
lhiven 1 year ago
parent 0b4868e0a0
commit e6533555f6

@ -1,4 +1,5 @@
using System;
using Rs.Controls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -11,30 +12,34 @@ namespace Rs.MotionPlat.Commom
/// </summary>
public static class RearrangeManager
{
public static List<TurnoverInfo> GeneralRearrangeTask(TurnoverType turnovertype,int slotNo,int floor)
public static List<TurnoverInfo> GeneralRearrangeTask(TurnoverType fromtray, TurnoverType totray, RsTray tray, TraySlot slot,int floor)
{
int needTakeNum = 0;
List<TurnoverInfo> task = new List<TurnoverInfo>();
//需要取几颗料
int lastRowCount = slotNo % 10;
if(lastRowCount> 5)
//首先判断总列数是奇数还是偶数
if (tray.ColumnNum % 2 == 0)//偶数
{
needTakeNum = 10 - (slotNo % 10);
if (slot.Column+1 > tray.ColumnNum/2)
{
needTakeNum = tray.ColumnNum - slot.Column;
}
else
{
needTakeNum = lastRowCount;
needTakeNum = slot.Column;
}
}
int baseIndex=(slotNo /10) * 10 ;
//找到要搬运的行的第一个和最后一个
int last = slot.Index + (tray.ColumnNum - (slot.Column + 1));
int first = slot.Index - slot.Column;
for( int i=0;i<needTakeNum;i++)
{
TurnoverInfo ti = new TurnoverInfo();
ti.Instruction = EInstruction.LoadAndUnload;
ti.FromType = turnovertype;
ti.FromIndex = baseIndex + i;
ti.FromType = fromtray;
ti.FromIndex = first-1 + i;
ti.FromFloor= floor;
ti.ToType = turnovertype;
ti.ToIndex = baseIndex + 10 - i -1;
ti.ToType = totray;
ti.ToIndex = last - 1-i;
task.Add(ti);
}
return task;

@ -40,8 +40,9 @@ namespace Rs.MotionPlat.Flow
}
public class RearrangeFlow:BaseFlow
public class RearrangeFlow
{
private string logInfo = string.Empty;
private static RearrangeFlow instance;
public static RearrangeFlow Instance
{
@ -63,7 +64,11 @@ namespace Rs.MotionPlat.Flow
double targetY = 0.0;
int FetchNum = 0;//取料次数
ErrorCode errCode = ErrorCode.Ok;
public override void Run()
public void Rearrange()
{
bool finished = false;
flowStep = ERearrangeFlowStep.;
while (!finished)
{
switch (flowStep)
{
@ -79,7 +84,7 @@ namespace Rs.MotionPlat.Flow
break;
case ERearrangeFlowStep.:
curTask = RearrangeTask.GetTask();
curNozzle = NozzleManager.GetIdelNozzle();
curNozzle = NozzleManager.GetIdelNozzle(true);
if (curTask != null && curNozzle != null)
{
if (SafeControl.Instance.XYCanMove() || GlobalVar.VirtualAxis)
@ -232,17 +237,24 @@ namespace Rs.MotionPlat.Flow
if (curTask.FromType == TurnoverType.Passed)
{
curNozzle.FromFloor = StockManager.Instance.GetStock(ETrayType.Ok).GetFloor();// StockManager.Instance.GetTray(EStockType.Ok).GetFloor();
curNozzle.SN = "";
curNozzle.SN = GlobalTray.OkTary.GetSlot(curTask.FromIndex+1).SN;
curNozzle.FromIndex = curTask.FromIndex;
GlobalTray.OkTary.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave);
}
else if (curTask.FromType == TurnoverType.Failed)
{
curNozzle.FromFloor = StockManager.Instance.GetStock(ETrayType.Ng).GetFloor();//StockManager.Instance.GetTray(EStockType.Ng).GetFloor();
curNozzle.SN = "";
curNozzle.SN = GlobalTray.NgTray.GetSlot(curTask.FromIndex + 1).SN;
curNozzle.FromIndex = curTask.FromIndex;
GlobalTray.NgTray.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave);
}
else if (curTask.FromType == TurnoverType.Multifunction)
{
curNozzle.FromFloor = StockManager.Instance.GetStock(ETrayType.Multi).GetFloor();//StockManager.Instance.GetTray(EStockType.Ng).GetFloor();
curNozzle.SN = GlobalTray.MultiTray.GetSlot(curTask.FromIndex + 1).SN;
curNozzle.FromIndex = curTask.FromIndex;
GlobalTray.MultiTray.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave);
}
curNozzle.Update();
curTask.Dealed = true;
if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
@ -527,13 +539,14 @@ namespace Rs.MotionPlat.Flow
LogHelper.Debug(logInfo);
}
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
flowStep = ERearrangeFlowStep.;
finished = true;
}
break;
default:
break;
}
}
}
private double GetVacOffsetHeight(int fetchNum)
{

@ -272,7 +272,10 @@ namespace Rs.MotionPlat.Flow
SiloRearrange info = JsonConvert.DeserializeObject<SiloRearrange>(json);
ReportToTestCenter(info);
Thread.Sleep(200);
//if(info.SiloType== SchedulingSiloBase.ESiloType.Multifunction)
if (info.SiloType == SchedulingSiloBase.ESiloType.Multifunction)
{
TraySlot ts = GlobalTray.MultiTray.GetSlot(Controls.ESlotStatus.NotHave);
if (ts.Column == 0)//无需重排
{
TurnoverInfos tis = new TurnoverInfos();
tis.GroupID = 0;
@ -280,42 +283,49 @@ namespace Rs.MotionPlat.Flow
ReportToTestCenter(tis);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
}
//else if(info.SiloType== SchedulingSiloBase.ESiloType.Passed)
//{
// TraySlot ts = GlobalTray.OkTary.GetSlot(Controls.ESlotStatus.NotHave);
// if((ts.Index-1)%10==0)
// {
// TurnoverInfos tis = new TurnoverInfos();
// tis.GroupID = 0;
// tis.Instruction = EInstruction.RearrangeResult;
// Send(tis);
// MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
// }
// else
// {
// List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed, ts.Index-1, StockManager.Instance.GetTray(EStockType.Ok).GetFloor());
// RearrangeTask.AddRanage(rearrangeList);
// RearrangeFlow.Instance.Start();
// }
//}
//else if (info.SiloType == SchedulingSiloBase.ESiloType.Failed)
//{
// TraySlot ts = GlobalTray.NgTray.GetSlot(ESlotStatus.NotHave);
// if ((ts.Index-1) % 10 == 0)
// {
// TurnoverInfos tis = new TurnoverInfos();
// tis.GroupID = 0;
// tis.Instruction = EInstruction.RearrangeResult;
// Send(tis);
// MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
// }
// else
// {
// List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed, ts.Index-1, StockManager.Instance.GetTray(EStockType.Ng).GetFloor());
// RearrangeTask.AddRanage(rearrangeList);
// RearrangeFlow.Instance.Start();
// }
//}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Multifunction,TurnoverType.Multifunction, GlobalTray.MultiTray, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
}
}
else if (info.SiloType == SchedulingSiloBase.ESiloType.Passed)
{
TraySlot ts = GlobalTray.OkTary.GetSlot(Controls.ESlotStatus.NotHave);
if (ts.Column==0)//无需重排
{
TurnoverInfos tis = new TurnoverInfos();
tis.GroupID = 0;
tis.Instruction = EInstruction.RearrangeResult;
ReportToTestCenter(tis);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Passed,TurnoverType.Passed, GlobalTray.OkTary, ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
}
}
else if (info.SiloType == SchedulingSiloBase.ESiloType.Failed)
{
TraySlot ts = GlobalTray.NgTray.GetSlot(ESlotStatus.NotHave);
if (ts.Column == 0)
{
TurnoverInfos tis = new TurnoverInfos();
tis.GroupID = 0;
tis.Instruction = EInstruction.RearrangeResult;
ReportToTestCenter(tis);
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
}
else
{
List<TurnoverInfo> rearrangeList = RearrangeManager.GeneralRearrangeTask(TurnoverType.Failed,TurnoverType.Failed, GlobalTray.NgTray,ts, 1);
RearrangeTask.AddRanage(rearrangeList);
RearrangeFlow.Instance.Rearrange();
}
}
}
private void LoadAndUnload(string json)

Loading…
Cancel
Save