using NPOI.SS.Formula.Functions;
using Rs.DataAccess;
using Rs.Framework;
using Rs.MotionPlat.Entitys.Trays;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Commom
{
///
/// 中转吸头管理类
/// 中转吸头共有16个吸头
///
public class TransitNozzleManager
{
private TransitNozzle[] nozzles;
private TransitNozzleManager() {
nozzles = new TransitNozzle[8];
for(int i=0;i<8; i++)
{
nozzles[i] = new TransitNozzle() {
NozzleIndex = i + 1,
IsHasProduct = false,
SN=""
};
}
}
private static TransitNozzleManager instance;
public static TransitNozzleManager Instance
{
get
{
if(instance==null)
{
instance = new TransitNozzleManager();
}
return instance;
}
}
public TransitNozzle Nozzle(int nozzleIndex)
{
nozzleIndex = nozzleIndex > 16 ? nozzleIndex - 8 : nozzleIndex;
return nozzles[nozzleIndex - 1];
}
///
/// 获取含有产品的吸嘴
///
///
public List GetHasProductNozzles()
{
return nozzles.Where(n => n.IsHasProduct).ToList();
}
///
/// 重置所有的穴位状态
///
public void ResetStatus()
{
foreach (TransitNozzle nozzle in nozzles)
{
nozzle.IsHasProduct = false;
nozzle.FromIndex = 0;
nozzle.FromType = TurnoverType.Unknown;
nozzle.ToType= TurnoverType.Unknown;
nozzle.ToIndex = 0;
}
}
}
///
/// 中转吸嘴
///
public class TransitNozzle
{
public void AddProduct(TestTraySlot testTraySlot)
{
IsHasProduct = true;
SN = testTraySlot.SN;
FromIndex = testTraySlot.Index-1;
FromType = TurnoverType.Tester;
}
public void AddProduct(TurnoverTraySlot turnoverTraySlot)
{
IsHasProduct = true;
SN=turnoverTraySlot.SN;
FromIndex = turnoverTraySlot.Index-1;
FromType = TurnoverType.Turnover;
}
public void AddProduct(TurnoverInfo task)
{
IsHasProduct = true;
SN = task.SN;
FromIndex = task.FromIndex;
FromType = task.FromType;
ToIndex= task.ToIndex;
ToType= task.ToType;
ToFloor= task.ToFloor;
Task.Run(() => {
SqliteHelper db = new SqliteHelper();
string updateSql = $"update TrayStatus set status=1 where trayname='TurnoverNozzle' and slotindex={NozzleIndex}";
//db.ExecuteNonQuery(updateSql);
});
}
public void Clear(bool closeVac=false)
{
IsHasProduct = false;
SN = "";
if(closeVac )
{
CloseVac();
}
Task.Run(() => {
SqliteHelper db = new SqliteHelper();
string updateSql = $"update TrayStatus set status=0 where trayname='TurnoverNozzle' and slotindex={NozzleIndex}";
db.ExecuteNonQuery(updateSql);
});
}
public void ResetStaus()
{
IsHasProduct = false;
FromIndex = 0;
FromType = TurnoverType.Unknown;
ToType = TurnoverType.Unknown;
ToIndex = 0;
}
///
/// 吸嘴索引
///
public int NozzleIndex { get; set; }
///
/// 是否有产品
///
public bool IsHasProduct { get; set; }
///
/// 产品的SN
///
public string SN { get; set; }
public int FromIndex { get; set; }
public TurnoverType FromType { get; set; }
public int FromFloor { get; set; }
public int ToIndex { get; set; }
public TurnoverType ToType { get; set; }
public int ToFloor { get; set; }
///
/// 是否有真空信号
///
///
public bool HasVacSignal()
{
if(Ops.IsOn($"周转{NozzleIndex}号吸嘴真空吸检测",false))
return true;
return false;
}
///
/// 关闭真空吸
///
public void CloseVac(int waittime=0)
{
if (waittime > 0)
{
Thread.Sleep(waittime);
}
Ops.Off($"周转{NozzleIndex}号吸嘴真空吸");
MessageQueue.Instance.Insert($"关闭周转{NozzleIndex}号吸嘴真空吸");
}
///
/// 打开真空吸
///
public void OpenVac(int waittime = 0)
{
if (waittime > 0)
{
Thread.Sleep(waittime);
}
Ops.On($"周转{NozzleIndex}号吸嘴真空吸");
MessageQueue.Instance.Insert($"打开周转{NozzleIndex}号吸嘴真空吸");
}
///
/// 打开真空破
///
public void OpenBreak()
{
VacManager.TransitNozzleVacBreak(EVacOperator.Open, true,NozzleIndex);
}
///
/// 关闭真空破
///
public void CloseBreak()
{
VacManager.TransitNozzleVacBreak(EVacOperator.Open, true, NozzleIndex);
}
}
}