using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Rs.DataAccess;
using Rs.Framework;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Entitys.Trays;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow
{
public enum ETaskDealStatus
{
///
/// 未处理过的任务
///
Undeal,
///
/// 已处理过的任务
///
Dealed,
///
/// 所有
///
All
}
///
/// 中控发过来的任务的类型
///
public enum ETaskType
{
///
/// 中转盘上料
///
Load,
///
/// 中转盘下料
///
Unload,
///
/// 中转盘换料
///
Change,
///
/// 测试工位上料
///
TestLoad,
///
/// 测试工位下料
///
TestUnload
}
public class LoadAndUnloadTask
{
private SchedulingMaterial m_schedulingMaterial;
#region 中控发过来的任务
///
/// 中转盘上料任务
///
List loadTaskList = new List();
///
/// 中转盘下料任务
///
List unloadTaskList = new List();
///
/// 中转盘换料任务
///
List changeTaskList = new List();
///
/// 测试位上料任务
///
List testLoadTaskList = new List();
///
/// 测试位下料任务
///
List testUnloadTaskList = new List();
#endregion
List turnoverResult = new List();
SqliteHelper db = new SqliteHelper();
private LoadAndUnloadTask()
{
Categories = new List();
MoveDir = new List();
}
public bool CanRunTask()
{
lock(this)
{
int count1 = GetTaskNum(ETaskType.Load) + GetTaskNum(ETaskType.Unload) + GetTaskNum(ETaskType.Change);
int count2 = GetTaskNum(ETaskType.TestLoad) + GetTaskNum(ETaskType.TestUnload);
if (count1 > 0 && count2 > 0)
return false;
return true;
}
}
private static LoadAndUnloadTask instance;
public static LoadAndUnloadTask Instance
{
get
{
if(instance==null)
{
instance = new LoadAndUnloadTask();
}
return instance;
}
}
public List GetTask()
{
List tilist = new List();
tilist.AddRange(loadTaskList);
tilist.AddRange(unloadTaskList);
tilist.AddRange(changeTaskList);
return tilist;
}
///
/// 获取未执行的任务
///
///
public List GetUnDealedTask()
{
List tilist = new List();
tilist.AddRange(loadTaskList.Where(tr=>tr.Dealed==false));
tilist.AddRange(unloadTaskList.Where(tr => tr.Dealed == false));
tilist.AddRange(changeTaskList.Where(tr => tr.Dealed == false));
return tilist;
}
///
/// 获取还没有执行的放到周转盘的任务
///
///
public List GetUndealedLoadToTurnoverTask()
{
List tilist = new List();
tilist.AddRange(loadTaskList.Where(tr => tr.Dealed == false));
tilist.AddRange(changeTaskList.Where(tr => tr.Dealed == false));
return tilist;
}
///
/// 清除未执行的任务
///
public void ClearUndoTask()
{
List removeList = loadTaskList.Where(t => t.Dealed == false).ToList();
foreach(var t in removeList)
{
loadTaskList.Remove(t);
}
}
public void AddTurnoverResult(Nozzle nozzle)
{
TurnoverInfo turnoverInfo = new TurnoverInfo();
turnoverInfo.FromType = nozzle.FromType;
turnoverInfo.FromFloor = nozzle.FromFloor;
turnoverInfo.FromIndex = nozzle.FromIndex;
turnoverInfo.ToType = nozzle.ToType;
turnoverInfo.ToFloor = nozzle.ToFloor;
turnoverInfo.ToIndex = nozzle.ToIndex;
turnoverInfo.SN = nozzle.SN;
turnoverInfo.Dealed = true;
turnoverInfo.SuckerNo = nozzle.NozzleIndex;
turnoverResult.Add(turnoverInfo);
}
public void CopyBarcodeToTask(int slotIndex,string sn)
{
TurnoverInfo ti = turnoverResult.Where(r => r.ToIndex == slotIndex && r.ToType == TurnoverType.Turnover).First();
if(ti!=null)
{
ti.SN = sn;
}
}
///
/// 获取测试治具上料的任务信息
///
///
///
public string GetLoadString()
{
TurnoverInfos infos = new TurnoverInfos();
infos.Instruction = EInstruction.LoadAndUnloadResult;
infos.GroupID = m_schedulingMaterial.GroupID;
infos.TurnoverID = m_schedulingMaterial.TurnoverID;
infos.Infos = turnoverResult;
string content = JsonConvert.SerializeObject(infos, new StringEnumConverter());
return content;
}
public string GetTestLoadString()
{
List turnoverInfos= new List();
//1、获取有产品的吸嘴
List transitNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
foreach (TransitNozzle nozzle in transitNozzles)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = nozzle.FromType;
ti.FromFloor = nozzle.FromFloor;
ti.FromIndex = nozzle.FromIndex;
ti.SN = nozzle.SN;
ti.ToType = nozzle.ToType;
ti.ToFloor =nozzle.ToFloor;
ti.ToIndex = nozzle.ToIndex;
ti.SuckerNo = nozzle.NozzleIndex;
turnoverInfos.Add(ti);
}
//2、获取测试盘中有产品的穴位
List testSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
foreach (TestTraySlot slot in testSlots)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = slot.FromType;
ti.FromFloor = 0;
ti.FromIndex = slot.FromIndex;
ti.SN = slot.SN;
ti.ToType = TurnoverType.Tester;
ti.ToFloor = 0;
ti.ToIndex = slot.Index-1;
turnoverInfos.Add(ti);
}
TurnoverInfos infos = new TurnoverInfos();
infos.Instruction = EInstruction.LoadAndUnloadResult;
infos.GroupID = m_schedulingMaterial.GroupID;
infos.TurnoverID = m_schedulingMaterial.TurnoverID;
infos.Infos = turnoverInfos;
string content = JsonConvert.SerializeObject(infos, new StringEnumConverter());
return content;
}
///
/// 获取测试治具下料的任务信息
///
///
public string GetTestUnLoadString()
{
//TurnoverInfos infos = new TurnoverInfos();
//infos.Instruction = EInstruction.LoadAndUnloadResult;
//infos.GroupID = m_schedulingMaterial.GroupID;
//infos.TurnoverID = m_schedulingMaterial.TurnoverID;
//infos.Infos = testUnloadTaskList;
//string content = JsonConvert.SerializeObject(infos, new StringEnumConverter());
//LogHelper.Debug("发送:" + content);
//return content;
List turnoverInfos = new List();
//1、获取有产品的吸嘴
List transitNozzles = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.Tested, ETurnoverTraySlotStatus.Have);
foreach (TurnoverTraySlot slot in transitNozzles)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = slot.FromType;
ti.FromFloor = 1;
ti.FromIndex = slot.FromIndex;
ti.SN = slot.SN;
ti.ToType = TurnoverType.Turnover;
ti.ToFloor = 1;
ti.ToIndex = slot.Index - 1;
ti.SuckerNo = slot.SuckerNo;
turnoverInfos.Add(ti);
}
TurnoverInfos infos = new TurnoverInfos();
infos.Instruction = EInstruction.LoadAndUnloadResult;
infos.GroupID = m_schedulingMaterial.GroupID;
infos.TurnoverID = m_schedulingMaterial.TurnoverID;
infos.Infos = turnoverInfos;
string content = JsonConvert.SerializeObject(infos, new StringEnumConverter());
return content;
}
///
/// 获取从中转盘到测试位的任务
///
///
///
public List GetTurnoverToTestTasks(ETaskDealStatus status= ETaskDealStatus.All)
{
List reslut = new List();
switch (status)
{
case ETaskDealStatus.Undeal:
reslut = testLoadTaskList?.Where(t => t.Dealed == false).ToList();
break;
case ETaskDealStatus.Dealed:
reslut = testLoadTaskList?.Where(t => t.Dealed == true).ToList();
break;
case ETaskDealStatus.All:
reslut = testLoadTaskList;
break;
default:
break;
}
return reslut;
}
///
/// 获取从测试位到的中转盘任务
///
///
public List GetTestToTurnoverTasks(ETaskDealStatus status = ETaskDealStatus.All)
{
List reslut = new List();
switch (status)
{
case ETaskDealStatus.Undeal:
reslut = testUnloadTaskList?.Where(t => t.Dealed == false).ToList();
break;
case ETaskDealStatus.Dealed:
reslut = testUnloadTaskList?.Where(t => t.Dealed == true).ToList();
break;
case ETaskDealStatus.All:
reslut = testUnloadTaskList;
break;
default:
break;
}
return reslut;
}
///
/// 根据任务的fromIndex获取任务
///
///
///
public TurnoverInfo GetTestUnloadTask(int fromIndex)
{
return testUnloadTaskList.Where(t => t.FromIndex == fromIndex-1).First();
}
///
/// 获取任务的个数
///
///
///
public int GetTaskNum(ETaskType taskMode)
{
lock(this)
{
switch (taskMode)
{
case ETaskType.Load:
if (loadTaskList == null) return 0;
return loadTaskList.Where(t => t.Dealed == false).Count();
case ETaskType.Unload:
if (unloadTaskList == null) return 0;
return unloadTaskList.Where(t => t.Dealed == false).Count();
case ETaskType.Change:
if (changeTaskList == null) return 0;
return changeTaskList.Where(t => t.Dealed == false).Count();
case ETaskType.TestLoad:
if (testLoadTaskList == null) return 0;
return testLoadTaskList.Where(t => t.Dealed == false).Count();
case ETaskType.TestUnload:
if (testUnloadTaskList == null) return 0;
return testUnloadTaskList.Where(t => t.Dealed == false).Count();
}
return 0;
}
}
///
/// 任务数量
///
public int Count
{
get
{
lock (this)
{
return loadTaskList.Count + unloadTaskList.Count + changeTaskList.Count + testLoadTaskList.Count + testUnloadTaskList.Count;
}
}
}
///
/// 任务种类
///
public List Categories { get; set; }
///
/// 周转时的运动方向
///
public List MoveDir { get; set; }
///
/// 清除任务
/// 任务类型,0=排料任务,1=测试任务
///
public void Clear(int taskMode=0)
{
lock(this)
{
if (turnoverResult != null)
{
if (taskMode == 0)
{
turnoverResult.Clear();
loadTaskList.Clear();
unloadTaskList.Clear();
changeTaskList.Clear();
}
else if(taskMode==1)
{
testLoadTaskList.Clear();
testUnloadTaskList.Clear();
}
}
}
}
public SchedulingMaterial GetCurTask()
{
return m_schedulingMaterial;
}
///
/// 向上下料任务中,添加任务
///
///
///
public bool AddTask(SchedulingMaterial sm)
{
lock (this)
{
m_schedulingMaterial = sm;
//加载上料任务
DealLoadTask(sm);
DealUnloadTask(sm);
DealChangeTask(sm);
DealTestLoadTask(sm);
DealTestUnLoadTask(sm);
}
//lock(this)
//{
// if (Categories != null && Categories.Count > 0)
// Categories.Clear();
// if (MoveDir != null && MoveDir.Count > 0)
// MoveDir.Clear();
// List turnOverTaskList = new List();
// List otherTaskList = new List();
// bool bHaveTurnover = false;
// bool bHaveOther = false;
// if (turnoverInfoList != null && turnoverInfoList.Count > 0)
// return false;
// //这里开始任务的分配
// //如果有从周转载盘到其他盘,
// var types = sm.ActionItems.GroupBy(ai => ai.Load.Type);
// foreach (var type in types)
// {
// if (type.Key == TurnoverType.Turnover)
// {
// bHaveTurnover = true;
// }
// else
// {
// bHaveOther = true;
// }
// Categories.Add(type.Key);
// }
// if (bHaveTurnover)
// {
// //turnOverTaskList = sm.ActionItems.Where(ai => ai.Load.Type == TurnoverType.Turnover).OrderBy(t => t.To.Type).ToList();
// turnOverTaskList = sm.ActionItems.Where(ai => ai.Load.Type == TurnoverType.Turnover).OrderBy(t => t.Load.Index).ToList();
// }
// if (bHaveOther)
// {
// otherTaskList = sm.ActionItems.Where(ai => ai.Load.Type != TurnoverType.Turnover).ToList();
// }
// if (bHaveTurnover && bHaveOther)
// {
// // 1 2 3 4 5 6 7
// // 1 2 3 4 5 6 7 8
// int maxNum = Math.Max(turnOverTaskList.Count, otherTaskList.Count);
// int nozzleNum = NozzleManager.GetNozzles().Count;
// for (int i = 0; i < maxNum; i += nozzleNum)
// {
// for(int nozzle=0;nozzle< nozzleNum; nozzle++)
// {
// if (turnOverTaskList.Count > i + nozzle)
// {
// TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + nozzle]);
// turnoverInfoList.Add(ti);
// }
// }
// for (int nozzle = 0; nozzle < nozzleNum; nozzle++)
// {
// if (otherTaskList.Count > i + nozzle)
// {
// TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + nozzle]);
// turnoverInfoList.Add(ti);
// }
// }
// //if (turnOverTaskList.Count >= i + 1)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 2)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 1]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 3)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 2]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 4)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 3]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 5)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 4]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 6)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 5]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 7)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 6]);
// // turnoverInfoList.Add(ti);
// //}
// //if (turnOverTaskList.Count >= i + 8)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, turnOverTaskList[i + 7]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 1)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 2)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 1]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 3)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 2]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 4)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 3]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 5)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 4]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 6)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 5]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 7)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 6]);
// // turnoverInfoList.Add(ti);
// //}
// //if (otherTaskList.Count >= i + 8)
// //{
// // TurnoverInfo ti = ActionItem2TurnoverInfo(sm, otherTaskList[i + 7]);
// // turnoverInfoList.Add(ti);
// //}
// }
// }
// else if (bHaveTurnover)
// {
// foreach (ActionItem ai in turnOverTaskList)
// {
// TurnoverInfo ti = ActionItem2TurnoverInfo(sm, ai);
// turnoverInfoList.Add(ti);
// }
// }
// else if (bHaveOther)
// {
// foreach (ActionItem ai in otherTaskList)
// {
// TurnoverInfo ti = ActionItem2TurnoverInfo(sm, ai);
// turnoverInfoList.Add(ti);
// }
// }
//}
//if(turnoverInfoList.Count>0)
//{
// Insert2Db();
//}
return true;
}
///
/// 加载上料任务
///
private void DealLoadTask(SchedulingMaterial sm)
{
if (sm == null)
return;
List ais = sm.ActionItems.Where(l => l.Load.Type == TurnoverType.ToBeTested).ToList();
if (ais != null && ais.Count > 0)
{
TurnoverFlow.Instance.CannotMoveFromTestTrayToTurnoverTray();
foreach (ActionItem item in ais)
{
loadTaskList.Add(ActionItem2TurnoverInfo(sm, item, ETaskType.Load));
}
}
}
///
/// 加载下料任务
///
private void DealUnloadTask(SchedulingMaterial sm)
{
if (sm == null)
return;
List ais = sm.ActionItems.Where(l => l.Load.Type == TurnoverType.Turnover && (l.To.Type != TurnoverType.Turnover && l.To.Type != TurnoverType.Tester)).ToList();
if (ais != null && ais.Count > 0)
{
TurnoverFlow.Instance.CannotMoveFromTestTrayToTurnoverTray();
foreach (ActionItem item in ais)
{
unloadTaskList.Add(ActionItem2TurnoverInfo(sm, item, ETaskType.Unload));
}
}
}
///
/// 加载换料任务
///
private void DealChangeTask(SchedulingMaterial sm)
{
if (sm == null)
return;
List ais = sm.ActionItems.Where(l => l.Load.Type == TurnoverType.Turnover && l.To.Type == TurnoverType.Turnover).ToList();
if(ais!=null&&ais.Count>0)
{
TurnoverFlow.Instance.CannotMoveFromTestTrayToTurnoverTray();
foreach (ActionItem item in ais)
{
changeTaskList.Add(ActionItem2TurnoverInfo(sm, item, ETaskType.Change));
}
}
}
///
/// 加载上料任务
///
private void DealTestLoadTask(SchedulingMaterial sm)
{
lock(obj)
{
if (sm == null)
return;
List ais = sm.ActionItems.Where(l => l.Load.Type == TurnoverType.Turnover && l.To.Type == TurnoverType.Tester).ToList();
if (ais != null && ais.Count > 0)
{
TestloadTaskArrived = true;
//如果上料任务列表里面有任务,说明是自己生成的任务,就不再向里面添加了
if (testLoadTaskList.Count > 0)
return;
foreach (ActionItem item in ais)
{
testLoadTaskList.Add(ActionItem2TurnoverInfo(sm, item, ETaskType.TestLoad));
}
}
}
}
///
/// 测试治具下料任务是否已经到达
///
public bool TestUnloadTaskArrived = false;
///
/// 测试治具上料任务是否已经到达
///
public bool TestloadTaskArrived = false;
///
/// 加载上料任务
///
private void DealTestUnLoadTask(SchedulingMaterial sm)
{
lock(obj)
{
if (sm == null)
return;
List ais = sm.ActionItems.Where(l => l.Load.Type == TurnoverType.Tester && l.To.Type == TurnoverType.Turnover).ToList();
if (ais != null && ais.Count > 0)
{
TestUnloadTaskArrived = true;
//如果下料任务列表里面有任务,说明是自己生成的任务,就不再向里面添加了
if (testUnloadTaskList.Count > 0)
return;
foreach (ActionItem item in ais)
{
testUnloadTaskList.Add(ActionItem2TurnoverInfo(sm, item, ETaskType.TestUnload));
}
}
}
}
public TurnoverInfo GetLoadTask()
{
if (loadTaskList == null)
return null;
else
{
return loadTaskList.Where(t=>t.Dealed==false).First();
}
}
public TurnoverInfo GetUnLoadTask()
{
if (unloadTaskList == null || unloadTaskList.Where(t => t.Dealed == false).Count()==0)
return null;
else
{
return unloadTaskList.Where(t => t.Dealed == false).First();
}
}
public TurnoverInfo GetChangeTask()
{
if (changeTaskList == null)
return null;
else
{
return changeTaskList.Where(t => t.Dealed == false).First();
}
}
public TurnoverInfo GetTestLoadTask()
{
if (changeTaskList == null)
return null;
else
{
return testLoadTaskList.Where(t => t.Dealed == false).First();
}
}
public TurnoverInfo GetTestUnLoadTask()
{
if (changeTaskList == null)
return null;
else
{
return testUnloadTaskList.Where(t => t.Dealed == false).First();
}
}
private TurnoverInfo ActionItem2TurnoverInfo(SchedulingMaterial sm,ActionItem ai, ETaskType taskMode)
{
TurnoverInfo ti=new TurnoverInfo();
ti.GUID = GuidHelper.Create();
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;
ti.taskMode = taskMode;
ti.Instruction = sm.Instruction;
ti.GroupID = sm.GroupID;
ti.TurnoverID = sm.TurnoverID;
//MoveDir.Add(ti.FromType.ToString()+"_"+ti.ToType.ToString());
return ti;
}
///
/// 创建测试治具上料任务
///
public void CreateTestLoadTask()
{
lock(obj)
{
testLoadTaskList.Clear();
//从周转盘生成测试治具的上料任务
List slots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
foreach (TurnoverTraySlot slot in slots)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Turnover;
ti.FromFloor = 1;
ti.FromIndex = slot.Index - 1;
ti.SN = slot.SN;
ti.ToType = TurnoverType.Tester;
ti.ToFloor = 1;
ti.ToIndex = TestLoadSlotIndexChange(slot.Index) - 1;
ti.taskMode = ETaskType.TestLoad;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
testLoadTaskList.Add(ti);
}
}
}
private static object obj = new object();
///
/// 创建测试治具下料任务
///
public void CreateTestUnLoadTask()
{
lock(obj)
{
testUnloadTaskList.Clear();
//从周转盘生成测试治具的上料任务
List slots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
foreach (TestTraySlot slot in slots)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Tester;
ti.FromFloor = 1;
ti.FromIndex = slot.Index - 1;
ti.SN = slot.SN;
ti.ToType = TurnoverType.Turnover;
ti.ToFloor = 1;
ti.ToIndex = TestUnLoadSlotIndexChange(slot.Index) - 1;
ti.taskMode = ETaskType.TestLoad;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
testUnloadTaskList.Add(ti);
}
}
}
///
/// 测试位上料索引转换
///
///
private int TestLoadSlotIndexChange(int slotIndex)
{
if (slotIndex <= 8) return slotIndex;
else return slotIndex - 8;
}
///
/// 测试位下料到周转盘索引转换
///
///
///
private int TestUnLoadSlotIndexChange(int slotIndex)
{
if (slotIndex <= 8) return slotIndex + 8;
else return slotIndex + 16;
}
///
/// 创建从排料吸嘴到多功能料仓的下料任务
///
public void CreateDischargeNozzleCleanOutTask()
{
lock(this)
{
List unloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload);
if (unloadNozzles != null && unloadNozzles.Count > 0)
{
foreach (Nozzle nozzle in unloadNozzles)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Turnover;
ti.FromFloor = 1;
ti.FromIndex = nozzle.NozzleIndex-1;
ti.SN = "";
ti.ToType = TurnoverType.Multifunction;
ti.ToFloor = 1;
ti.ToIndex = 0;
ti.taskMode = ETaskType.Unload;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
unloadTaskList.Add(ti);
}
}
}
}
///
/// 创建周转盘清料任务
///
public void CreateTurnoverTrayCleanTask()
{
lock(this)
{
foreach(TurnoverTraySlot slot in TurnoverTrayManager.Instance.Slots)
{
if(slot.IsHasProduct)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Turnover;
ti.FromFloor = 1;
ti.FromIndex = slot.Index - 1;
ti.SN = "";
ti.ToType = TurnoverType.Multifunction;
ti.ToFloor = 1;
ti.ToIndex = 0;
ti.taskMode = ETaskType.Unload;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
unloadTaskList.Add(ti);
}
}
}
}
///
/// 创建周转吸嘴
///
public void CreateTurnoverNozzleTestTrayCleanTask()
{
lock(this)
{
List hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
if (hasProductNozzles != null && hasProductNozzles.Count > 0)
{
foreach (TransitNozzle nozzle in hasProductNozzles)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Tester;
ti.FromFloor = 1;
ti.FromIndex = nozzle.NozzleIndex-1;
ti.SN = "";
ti.ToType = TurnoverType.Turnover;
ti.ToFloor = 1;
ti.ToIndex = TestUnLoadSlotIndexChange(nozzle.NozzleIndex) - 1;
ti.taskMode = ETaskType.TestLoad;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
testUnloadTaskList.Add(ti);
}
}
List hasProductSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
if (hasProductSlots != null && hasProductSlots.Count > 0)
{
foreach (TestTraySlot slot in hasProductSlots)
{
TurnoverInfo ti = new TurnoverInfo();
ti.GUID = GuidHelper.Create();
ti.FromType = TurnoverType.Tester;
ti.FromFloor = 1;
ti.FromIndex = slot.Index - 1;
ti.SN = "";
ti.ToType = TurnoverType.Turnover;
ti.ToFloor = 1;
ti.ToIndex = TestUnLoadSlotIndexChange(slot.Index) - 1;
ti.taskMode = ETaskType.TestLoad;
ti.Instruction = EInstruction.LoadAndUnload;
ti.GroupID = 0;
ti.TurnoverID = 0;
testUnloadTaskList.Add(ti);
}
}
}
}
}
///
/// 排料任务管理
///
public class DischargeTaskManager
{
private DischargeTaskManager() { }
private static DischargeTaskManager instance;
public static DischargeTaskManager Instance
{
get
{
if(instance==null)
instance = new DischargeTaskManager();
return instance;
}
}
public ETaskStatus Status { get; set; } = ETaskStatus.Idle;
private SchedulingMaterial m_schedulingMaterial;
///
/// 上料任务
///
List stockTray2TurnoverTrayList = new List();
///
/// 下料任务
///
List turnoverTray2StockTrayList = new List();
///
/// 换料任务
///
List turnoverTray2turnoverTrayList = new List();
}
///
/// 周转任务管理
///
public class TransitTaskManager
{
public ETaskStatus Status { get; set; } = ETaskStatus.Idle;
private SchedulingMaterial m_schedulingMaterial;
}
///
/// 任务状态
///
public enum ETaskStatus
{
Idle,
Running
}
}