using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Log;
using Aitex.Core.RT.SCCore;
using MECF.Framework.Common.Communications;
using MECF.Framework.Common.Equipment;
using MECF.Framework.RT.ModuleLibrary.Commons;
using SecsGem.Core;
using SecsGemSerial.Application;
using SecsGemSerial.Core;
using SecsGemSerial.Core.EnumData;
using SecsGemSerial.Core.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Venus_RT.Devices.SMIF
{
///
/// Fortrend PLUS 500
/// Loader/Unloader
/// 执行标准 E84
///
public class FortrendPLUS500 : ISMIF
{
public enum StreamType
{
SMIFState = 1,
SMIFControl = 2,
LP = 3,
TAG = 4,
ALARM = 5,
DVDATA = 6,
COMMANDERROR = 9,
RFIDCOMMAND = 18,
SMARTTAG8400COMMAND = 100,
}
//private AsyncSerialPort _serialport;
private string _portname;
//connect status
public bool IsConnected;
//online status
public bool IsOnline;
//Load
public bool IsLoaded;
//Lock
public bool IsLocked;
//Error
public bool IsError;
private SecsGemSerialApplication _serial = null;
private ModuleName _smifbelong;
///
/// 构造函数
///
/// 从属的设备 如VCE1 LP1
public FortrendPLUS500(ModuleName VCEName)
{
_smifbelong = VCEName;
_portname = SC.GetStringValue($"{VCEName}.SMIF.Port");
SerialOptions serialOptions = new SerialOptions()
{
Port = _portname ?? "COM81",
BaudRate = 9600,
DataBits = 8,
Parity = Parity.None,
StopBits = StopBits.One,
};
SecsGemSerialOptions secsGemSerialOptions = new SecsGemSerialOptions()
{
DeviceId = 0
};
_serial = new SecsGemSerialApplication(VCEName.ToString(), serialOptions, secsGemSerialOptions);
_serial.OnAlarm += _serial_OnAlarm;
}
private void _serial_OnAlarm(string alarm)
{
//Console.WriteLine(alarm);
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"SMIF({_smifbelong}) received Alarm:{alarm}");
}
public void Initialize()
{
_serial.Initialize();
_serial.RemoteControl(out string reason);
}
private void OnSMIFDataChanged(string oneLineMessage)
{
}
public void Query()
{
SmifData smifdata = _serial.QueryAllSvids(out string reason);
List mapdata = smifdata?.WaferMap;
int? wafercount = smifdata?.WaferCount;
E84Signals SmifIO = smifdata?.E84Signals;
}
public void Home()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.HomeSmif, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Home Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Home Command to SMIF({_smifbelong})");
}
public void Load()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.StartLoadOpenCycle, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Load Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Load Command to SMIF({_smifbelong})");
}
public void Unload()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.StartUnloadCloseCycle, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unload Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLoad Command to SMIF({_smifbelong})");
}
public void Lock()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.KeepPrtLocked, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Lock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send Lock Command to SMIF({_smifbelong})");
}
public void Unlock()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.UnlockPort, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unlock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLock Command to SMIF({_smifbelong})");
}
public void Reset()
{
if (!_serial.RemoteCommand(EnumRemoteCmd.HomeSmif, out string reason))
LOG.Write(eEvent.ERR_VCE_COMMON_Failed, _smifbelong, $"Send Unlock Command Failed for {reason}!Please Check SMIF({_smifbelong})");
else
LOG.Write(eEvent.EV_VCE_COMMON_INFO, _smifbelong, $"Send UnLock Command to SMIF({_smifbelong})");
}
///
/// 中断SMIF正在执行的操作
///
public void Abort()
{
}
}
}