增加重排功能

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.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -11,30 +12,34 @@ namespace Rs.MotionPlat.Commom
/// </summary> /// </summary>
public static class RearrangeManager 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; int needTakeNum = 0;
List<TurnoverInfo> task = new List<TurnoverInfo>(); List<TurnoverInfo> task = new List<TurnoverInfo>();
//需要取几颗料 //首先判断总列数是奇数还是偶数
int lastRowCount = slotNo % 10; if (tray.ColumnNum % 2 == 0)//偶数
if(lastRowCount> 5)
{ {
needTakeNum = 10 - (slotNo % 10); if (slot.Column+1 > tray.ColumnNum/2)
{
needTakeNum = tray.ColumnNum - slot.Column;
} }
else 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++) for( int i=0;i<needTakeNum;i++)
{ {
TurnoverInfo ti = new TurnoverInfo(); TurnoverInfo ti = new TurnoverInfo();
ti.Instruction = EInstruction.LoadAndUnload; ti.Instruction = EInstruction.LoadAndUnload;
ti.FromType = turnovertype; ti.FromType = fromtray;
ti.FromIndex = baseIndex + i; ti.FromIndex = first-1 + i;
ti.FromFloor= floor; ti.FromFloor= floor;
ti.ToType = turnovertype; ti.ToType = totray;
ti.ToIndex = baseIndex + 10 - i -1; ti.ToIndex = last - 1-i;
task.Add(ti); task.Add(ti);
} }
return task; 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; private static RearrangeFlow instance;
public static RearrangeFlow Instance public static RearrangeFlow Instance
{ {
@ -63,7 +64,11 @@ namespace Rs.MotionPlat.Flow
double targetY = 0.0; double targetY = 0.0;
int FetchNum = 0;//取料次数 int FetchNum = 0;//取料次数
ErrorCode errCode = ErrorCode.Ok; ErrorCode errCode = ErrorCode.Ok;
public override void Run() public void Rearrange()
{
bool finished = false;
flowStep = ERearrangeFlowStep.;
while (!finished)
{ {
switch (flowStep) switch (flowStep)
{ {
@ -79,7 +84,7 @@ namespace Rs.MotionPlat.Flow
break; break;
case ERearrangeFlowStep.: case ERearrangeFlowStep.:
curTask = RearrangeTask.GetTask(); curTask = RearrangeTask.GetTask();
curNozzle = NozzleManager.GetIdelNozzle(); curNozzle = NozzleManager.GetIdelNozzle(true);
if (curTask != null && curNozzle != null) if (curTask != null && curNozzle != null)
{ {
if (SafeControl.Instance.XYCanMove() || GlobalVar.VirtualAxis) if (SafeControl.Instance.XYCanMove() || GlobalVar.VirtualAxis)
@ -232,17 +237,24 @@ namespace Rs.MotionPlat.Flow
if (curTask.FromType == TurnoverType.Passed) if (curTask.FromType == TurnoverType.Passed)
{ {
curNozzle.FromFloor = StockManager.Instance.GetStock(ETrayType.Ok).GetFloor();// StockManager.Instance.GetTray(EStockType.Ok).GetFloor(); 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; curNozzle.FromIndex = curTask.FromIndex;
GlobalTray.OkTary.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave); GlobalTray.OkTary.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave);
} }
else if (curTask.FromType == TurnoverType.Failed) else if (curTask.FromType == TurnoverType.Failed)
{ {
curNozzle.FromFloor = StockManager.Instance.GetStock(ETrayType.Ng).GetFloor();//StockManager.Instance.GetTray(EStockType.Ng).GetFloor(); 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; curNozzle.FromIndex = curTask.FromIndex;
GlobalTray.NgTray.ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave); 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(); curNozzle.Update();
curTask.Dealed = true; curTask.Dealed = true;
if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0)
@ -527,13 +539,14 @@ namespace Rs.MotionPlat.Flow
LogHelper.Debug(logInfo); LogHelper.Debug(logInfo);
} }
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
flowStep = ERearrangeFlowStep.; finished = true;
} }
break; break;
default: default:
break; break;
} }
} }
}
private double GetVacOffsetHeight(int fetchNum) private double GetVacOffsetHeight(int fetchNum)
{ {

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

Loading…
Cancel
Save