using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Communications; using MECF.Framework.Common.Equipment; 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 { private readonly Dictionary SFPair = new Dictionary() { //s1 { FunctionType.Abort,StreamType.SMIFState}, { FunctionType.Online,StreamType.SMIFState}, { FunctionType.OnlineData,StreamType.SMIFState}, { FunctionType.Map,StreamType.SMIFState}, { FunctionType.MapData,StreamType.SMIFState}, { FunctionType.Status,StreamType.SMIFState}, { FunctionType.StatusData,StreamType.SMIFState}, //s2 { FunctionType.SetReport,StreamType.SMIFControl}, { FunctionType.SetReportACK,StreamType.SMIFControl}, { FunctionType.ResetORInit,StreamType.SMIFControl}, { FunctionType.ResetORInitACK,StreamType.SMIFControl}, { FunctionType.RemoteCommand,StreamType.SMIFControl}, { FunctionType.RemoteCommandData,StreamType.SMIFControl}, { FunctionType.CheckProto,StreamType.SMIFControl}, { FunctionType.CheckProtoData,StreamType.SMIFControl}, //s3 { FunctionType.AccessMode,StreamType.LP}, { FunctionType.AccessModeACK,StreamType.LP}, //s4 {FunctionType.ReadTag,StreamType.TAG}, {FunctionType.ReadTagData,StreamType.TAG}, {FunctionType.WriteTag,StreamType.TAG}, {FunctionType.WriteTagData,StreamType.TAG}, //s5 {FunctionType.AlarmData,StreamType.ALARM }, {FunctionType.AlarmACK,StreamType.ALARM }, {FunctionType.SetAlarm,StreamType.ALARM }, {FunctionType.SetAlarmACK,StreamType.ALARM }, //s6 {FunctionType.DataSend,StreamType.DVDATA}, {FunctionType.DataSendACK,StreamType.DVDATA}, //s9 {FunctionType.UnrecognizedDeviceID,StreamType.COMMANDERROR}, {FunctionType.UnrecognizedStream,StreamType.COMMANDERROR}, {FunctionType.UnrecognizedFunction,StreamType.COMMANDERROR}, {FunctionType.IllegalData,StreamType.COMMANDERROR}, }; public enum FunctionType { Abort = 0, Online = 1, OnlineData = 2, Map = 3, MapData = 4, Status = 5, StatusData = 6, SetReport = 15, SetReportACK = 16, ResetORInit = 19, ResetORInitACK = 20, RemoteCommand = 21, RemoteCommandData = 22, CheckProto = 25, CheckProtoData = 26, AccessMode = 27, AccessModeACK = 27, ReadTag = 101, ReadTagData = 102, WriteTag = 103, WriteTagData = 104, AlarmData = 1, AlarmACK = 2, SetAlarm = 3, SetAlarmACK = 4, DataSend = 3, DataSendACK = 4, UnrecognizedDeviceID = 1, UnrecognizedStream = 3, UnrecognizedFunction = 5, IllegalData = 7, } 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; /// /// 构造函数 /// /// 从属的设备 如VCE1 LP1 public FortrendPLUS500(ModuleName DEVICEBelong) { _portname = SC.GetStringValue($"{DEVICEBelong}.SMIF.PortNumber"); _serialport = new AsyncSerialPort(_portname, 9600, 8,Parity.None,StopBits.One); _serialport.Open(); _serialport.OnDataChanged += OnSMIFDataChanged; } //检查传入SxFy是否定义在字典中 private bool CheckStreamFunctionPair(string sfstring) { string[] sfcodes = sfstring.Split('S','F'); if (sfcodes.Length == 2 && Enum.TryParse(Convert.ToInt32(sfcodes[0]).ToString(), out StreamType snum) && Enum.IsDefined(typeof(StreamType),snum) && Enum.TryParse(Convert.ToInt32(sfcodes[1]).ToString(), out FunctionType fnum) && Enum.IsDefined(typeof(FunctionType), fnum) && SFPair.TryGetValue(fnum,out StreamType _snum) && _snum == snum) { return true; } return false; } private void OnSMIFDataChanged(string oneLineMessage) { } public void Load() { } public void Unload() { } public void Lock() { } public void Unlock() { } public void ReadMap() { } /// /// 中断SMIF正在执行的操作 /// public void Abort() { } } }