using Rs.DataAccess; using Rs.MotionPlat.Commom; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Rs.MotionPlat.Entitys.Trays { /// /// 周转盘穴位类型 /// public enum ETurnoverTraySlotType { /// /// 待测穴位 /// WaitTest, /// /// 已测穴位 /// Tested } public enum ETurnoverTraySlotStatus { /// /// 有产品 /// Have, /// /// 无产品 /// NotHave, /// /// 有产品且真空异常 /// VacException, /// /// 所有 /// All } /// /// 周转盘状态管理类,只有一个周转盘,32个穴位 /// public class TurnoverTrayManager { /// /// 周转盘层数 /// public int Floor { get; set; } private TurnoverTraySlot[] slots; public List Slots { get { return slots.ToList(); } } private TurnoverTrayManager() { slots = new TurnoverTraySlot[16]; int index = 0; for(int row=1;row<=4;row++) { for(int col=1;col<=4;col++) { slots[index] = new TurnoverTraySlot() { Row = row, Index = index+1, IsHasProduct = false, SN = "", FromIndex = 0, SuckerNo = 0, SlotType = (row%2==0) ? ETurnoverTraySlotType.Tested : ETurnoverTraySlotType.WaitTest }; index++; } } } private static TurnoverTrayManager instance; public static TurnoverTrayManager Instance { get { if(instance==null) { instance = new TurnoverTrayManager(); } return instance; } } public TurnoverTraySlot Slot(int slotIndex) { return slots[slotIndex - 1]; } /// /// 根据穴位中是否有产品获取待测穴位 /// /// public List GetSlots(ETurnoverTraySlotType slotType,ETurnoverTraySlotStatus slotStatus) { List results = new List(); switch (slotStatus) { case ETurnoverTraySlotStatus.Have: results = slots.Where(s => s.SlotType == slotType && s.IsHasProduct == true).ToList(); break; case ETurnoverTraySlotStatus.NotHave: results = slots.Where(s => s.SlotType == slotType && s.IsHasProduct == false).ToList(); break; case ETurnoverTraySlotStatus.VacException: results = slots.Where(s => s.SlotType == slotType && s.IsHasProduct == true && s.VacException==true).ToList(); break; case ETurnoverTraySlotStatus.All: results = slots.Where(s => s.SlotType == slotType).ToList(); break; default: break; } return results; } /// /// 检测料盘中某一行是否有产品 /// /// /// public bool HasProduct(ETrayRow row) { return slots.Where(s => s.Row == (int)row && s.IsHasProduct==true).Count() > 0; } public List GetAll() { return slots.ToList(); } /// /// 重置周转盘穴位状态 /// public void ResetStatus() { foreach (TurnoverTraySlot slot in slots) { slot.IsHasProduct = false; slot.FromIndex = 0; slot.FromType = TurnoverType.Unknown; } } } public class TurnoverTraySlot:BaseTraySlot { /// /// 穴位类型 0:待测 1:已测 /// public ETurnoverTraySlotType SlotType { get; set; } public void AddProduct(Nozzle nozzle) { IsHasProduct = true; SN = nozzle.SN; FromIndex = nozzle.FromIndex; FromType = nozzle.FromType; SuckerNo = nozzle.NozzleIndex; Task.Run(() => { SqliteHelper db = new SqliteHelper(); string updateSql = $"update TrayStatus set status=1 where trayname='TurnoverTray' and slotindex={Index}"; db.ExecuteNonQuery(updateSql); }); } public void AddProduct(TransitNozzle nozzle) { IsHasProduct = true; SN = nozzle.SN; FromIndex = nozzle.FromIndex; FromType = nozzle.FromType; SuckerNo = nozzle.NozzleIndex; Task.Run(() => { SqliteHelper db = new SqliteHelper(); string updateSql = $"update TrayStatus set status=1 where trayname='TurnoverTray' and slotindex={Index}"; db.ExecuteNonQuery(updateSql); }); } public void ClearProduct() { IsHasProduct = false; SN = ""; FromIndex = 0; FromType = TurnoverType.Unknown; SuckerNo = 0; Task.Run(() => { SqliteHelper db = new SqliteHelper(); string updateSql = $"update TrayStatus set status=0 where trayname='TurnoverTray' and slotindex={Index}"; //db.ExecuteNonQuery(updateSql); }); } public bool HasVac() { if (Ops.IsOn($"周转盘{Index}号穴位真空吸检测")) return true; return false; } public void ResetStatus() { IsHasProduct = false; FromIndex = 0; FromType = TurnoverType.Unknown; } /// /// 穴位真空异常 /// public bool VacException { get; set; } = false; } }