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;
}
}