using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.Xml.Serialization; namespace Aitex.Core.Util { //Some common data structure are defined here for data transfer between server and client //via serialization and deserialization /// <summary> /// Analog device data /// </summary> [DataContract] [Serializable] public class AnalogDeviceData { [DataMember] public string TechnicalName { get; set; } [DataMember] public string DeviceName { get; set; } [DataMember] public string DeviceId { get; set; } [DataMember] public string Unit { get; set; } [DataMember] public string Description { get; set; } /// <summary> /// 量程 /// </summary> [DataMember] public double Scale { get; set; } /// <summary> /// 设定值 /// </summary> [DataMember] public double SetPoint { get; set; } /// <summary> /// 实际反馈值 /// </summary> [DataMember] public double FeedBack { get; set; } /// <summary> /// 默认值 /// </summary> [DataMember] public double DefaultValue { get; set; } /// <summary> /// 是否有报警 /// </summary> [DataMember] public bool IsWarning { get; set; } /// <summary> /// alarm或是erro时显示的信息 /// </summary> [DataMember] public string ErroMessage { get; set; } private double _factor = 1.0; [DataMember] public double Factor { get { return _factor; } set { _factor = value; } } public override string ToString() { return FeedBack.ToString(); } /// <summary> /// Default constructor. /// </summary> public AnalogDeviceData() { } /// <summary> /// Copy constructor of this object. /// </summary> /// <param name="deviceData"></param> public AnalogDeviceData(AnalogDeviceData deviceData) { TechnicalName = deviceData.TechnicalName; DeviceName = deviceData.DeviceName; DeviceId = deviceData.DeviceId; Unit = deviceData.Unit; Description = deviceData.Description; Scale = deviceData.Scale; SetPoint = deviceData.SetPoint; FeedBack = deviceData.FeedBack; DefaultValue = deviceData.DefaultValue; IsWarning = deviceData.IsWarning; ErroMessage = deviceData.ErroMessage; } } //public interface IAnalogData //{ // AnalogDeviceData GetData(string deviceId); //} /// <summary> /// Digital device data /// </summary> [DataContract] [Serializable] public class DigitalDeviceData { [DataMember] public string TechnicalName { get; set; } [DataMember] public string DeviceName { get; set; } [DataMember] public string DeviceId { get; set; } /// <summary> /// 当前设定值 /// </summary> [DataMember] public bool SetValue { get; set; } /// <summary> /// 默认值 /// </summary> [DataMember] public bool DefaultValue { get; set; } /// <summary> /// 实际反馈值 /// </summary> [DataMember] public bool Feedback { get; set; } public override string ToString() { return Feedback.ToString(); } } //public interface IDigitalData //{ // DigitalDeviceData GetData(string deviceId); //} ///// <summary> ///// Reactor data ///// </summary> //[DataContract] //[Serializable] //public class ReactorData //{ // public ReactorData() // { // MFC = new SerializableDictionary<string, AnalogDeviceData>(); // PC = new SerializableDictionary<string, AnalogDeviceData>(); // Valve = new SerializableDictionary<string, DigitalDeviceData>(); // ProcessData = new SerializableDictionary<string, string>(); // } // /// <summary> // /// Class members // /// </summary> // public SerializableDictionary<string, AnalogDeviceData> MFC; // /// <summary> // /// Class members // /// </summary> // public SerializableDictionary<string, AnalogDeviceData> PC; // /// <summary> // /// Class members // /// </summary> // public SerializableDictionary<string, DigitalDeviceData> Valve; // /// <summary> // /// Class members // /// </summary> // public SerializableDictionary<string, string> ProcessData; //} ///// <summary> ///// Heater data ///// </summary> //[DataContract] //[Serializable] //public class HeaterData //{ // public bool Enable; // public bool PsuEnable; // public HeaterMode Mode; // public double[] ZoneTempFeedback; // public double[] ZoneCurrentFeedback; // public double[] ZonePowerFeedback; // public double[] ZoneTcFeedback; // //public double[] PSU_Current_Read; // public double[] Zone_Voltage_Read; // public double[] Current_SetPoint; //} ///// <summary> ///// Pressure data ///// </summary> //[DataContract] //[Serializable] //public class PressureData //{ // public bool ThrottleValveEnable; // public bool MainPumpEnable; // public PressureControlMode Mode; // /// <summary> // /// pres real data // /// </summary> // public double TVPresFeedback; //throttle valve pressure feedback // public double TVPresSetPoint; // public double PT1Feedback; // public double PT2Feedback; // public double ThrottleValveOpenRate; // public int TV_Status; //} ///// <summary> ///// System monitor view data ///// </summary> //[DataContract] //[Serializable] //public class SystemMonitorViewData //{ // /// <summary> // /// Susceptor infors // /// </summary> // public SerializableDictionary<ChamberSet, SusceptorInfo> ChamberSusceptorInfos // { // get; // set; // } // public SerializableDictionary<ChamberSet, ChamberCommStateEnum> ChamberCommStates; // /// <summary> // /// IsServiceModeA // /// </summary> // public bool IsServiceModeA // { // get; // set; // } // /// <summary> // /// IsServiceModeB // /// </summary> // public bool IsServiceModeB // { // get; // set; // } // /// <summary> // /// IsServiceModeC // /// </summary> // public bool IsServiceModeC // { // get; // set; // } // /// <summary> // /// IsServiceModeD // /// </summary> // public bool IsServiceModeD // { // get; // set; // } // /// <summary> // /// IsServiceRunningLoadlock // /// </summary> // public bool IsServiceRunningLoadlock // { // get; // set; // } // /// <summary> // /// IsServiceRunningTransfer // /// </summary> // public bool IsServiceRunningTransfer // { // get; // set; // } // /// <summary> // /// Is reactor processing? // /// </summary> // public bool IsProcessingA // { // get; // set; // } // /// <summary> // /// Is reactor processing? // /// </summary> // public bool IsProcessingB // { // get; // set; // } // /// <summary> // /// Is reactor processing? // /// </summary> // public bool IsProcessingC // { // get; // set; // } // /// <summary> // /// Is reactor processing? // /// </summary> // public bool IsProcessingD // { // get; // set; // } // /// <summary> // /// Is reactor susceptor rotation? // /// </summary> // public bool IsRotatingA // { // get; // set; // } // /// <summary> // /// Is reactor susceptor rotation? // /// </summary> // public bool IsRotatingB // { // get; // set; // } // /// <summary> // /// Is reactor susceptor rotation? // /// </summary> // public bool IsRotatingC // { // get; // set; // } // /// <summary> // /// Is reactor susceptor rotation? // /// </summary> // public bool IsRotatingD // { // get; // set; // } // /// <summary> // /// Robot data // /// </summary> // public double RobotTheta // { // get; // set; // } // /// <summary> // /// Robot data // /// </summary> // public double RobotRadius // { // get; // set; // } // /// <summary> // /// Is sequencer running // /// </summary> // public bool SequencerRunning // { // get; // set; // } // /// <summary> // /// Chamber information // /// </summary> // public string PMA_Info // { // get; // set; // } // /// <summary> // /// Chamber information // /// </summary> // public string PMB_Info // { // get; // set; // } // /// <summary> // /// Chamber information // /// </summary> // public string PMC_Info // { // get; // set; // } // /// <summary> // /// Chamber information // /// </summary> // public string PMD_Info // { // get; // set; // } // /// <summary> // /// chamber door state // /// </summary> // public int IsPMADoorOpen // { // get; // set; // } // /// <summary> // /// chamber door state // /// </summary> // public int IsPMBDoorOpen // { // get; // set; // } // /// <summary> // /// chamber door state // /// </summary> // public int IsPMCDoorOpen // { // get; // set; // } // /// <summary> // /// chamber door state // /// </summary> // public int IsPMDDoorOpen // { // get; // set; // } // /// <summary> // /// LL door state // /// </summary> // public int IsLLDoorOpen // { // get; // set; // } // public bool IsLLDoorEverOpened // { // get; // set; // } // /// <summary> // /// Loadlock door latch state // /// </summary> // public int IsLLDoorLatched // { // get; // set; // } // /// <summary> // /// PMA pressure // /// </summary> // public double PMA_Pres // { // get; // set; // } // /// <summary> // /// PMB pressure // /// </summary> // public double PMB_Pres // { // get; // set; // } // /// <summary> // /// PMC pressure // /// </summary> // public double PMC_Pres // { // get; // set; // } // /// <summary> // /// PMD pressure // /// </summary> // public double PMD_Pres // { // get; // set; // } // /// <summary> // /// TM pressure // /// </summary> // public double TM_Pres // { // get; // set; // } // /// <summary> // /// LL pressure // /// </summary> // public double LL_Pres // { // get; // set; // } // /// <summary> // /// PMA temperature // /// </summary> // public double PMA_Temp // { // get; // set; // } // /// <summary> // /// PMB temperature // /// </summary> // public double PMB_Temp // { // get; // set; // } // /// <summary> // /// PMC temperature // /// </summary> // public double PMC_Temp // { // get; // set; // } // /// <summary> // /// PMD temperature // /// </summary> // public double PMD_Temp // { // get; // set; // } // /// <summary> // /// Cooldown temperature // /// </summary> // public double CoolDown_Temp // { // get; // set; // } // /// <summary> // /// LL temperature // /// </summary> // public double LL_Temp // { // get; // set; // } // /// <summary> // /// current cycle // /// </summary> // public int TheIthCycle { get; set; } // public int CycleCount { get; set; } // public bool IsCycleMode { get; set; } //} ///// <summary> ///// Config data structure ///// </summary> //[DataContract] //[Serializable] //public class ConfigEntry //{ // public ChamberSet ChamId { get; set; } // public string SectionName { get; set; } // public string EntryName { get; set; } // public string Description { get; set; } // public string Type { get; set; } // public string Unit { get; set; } // public string Value { get; set; } // public string Default { get; set; } // public string RangeLowLimit { get; set; } // public string RangeUpLimit { get; set; } // public string XPath { get; set; } //} ///// <summary> ///// 显示数据只包含时间和数值 ///// </summary> //[DataContract] //[Serializable] //public class ChartShowInfo //{ // public string TimeString { get; set; } // public DateTime Time { get; set; } // public double Value { get; set; } //} //[DataContract] //[Serializable] //public class TransferData //{ // public bool DorDPressSwitch; // public bool DorCPressSwitch; // public bool DorBPressSwitch; // public bool DorAPressSwitch; // public bool TubePressSwitch; // public bool DoubleOringPump; // public bool TmDryPump; // public bool? TmPumpRun; // public bool TmPumpAlarm; // public bool TransferFastPumpClose; // public bool TransferSlowPumpClose; //} //[DataContract] //[Serializable] //public class LoadLockData //{ // public bool LoadLockFastPumpClose; // public bool LoadLockSlowPumpClose; // public bool GateIsOpen; // public bool DoorClose; // public double Temperature; // public double Pressure; // public bool AtAtm; // public bool UnderVacuum; //} ///// <summary> ///// Reactor's bubbler data ///// </summary> //[DataContract] //[Serializable] //public class BubblerData //{ // /// <summary> // /// 名称 // /// </summary> // public string MoName { get; set; } // /// <summary> // /// 总量 // /// </summary> // public double TotalWeight { get; set; } // /// <summary> // /// 计算使用量 // /// </summary> // public double IntegralUsedWeight { get; set; } // /// <summary> // /// 计算因子 // /// </summary> // public double MoCalcFactor { get; set; } // /// <summary> // /// 报警阈值 // /// </summary> // public double MoAlarmLimit { get; set; } // /// <summary> // /// 实际使用量 // /// </summary> // public double MoUsedWeight { get; set; } // /// <summary> // /// 实际剩余量 // /// </summary> // public double MoRemainedWeight { get; set; } // /// <summary> // /// MO剩余百分比 // /// </summary> // public string MoRemainedPercentage { get; set; } // /// <summary> // /// Bubble温度 // /// </summary> // public double BubbleTemp { get; set; } // /// <summary> // /// 平均每分钟的MO消耗质量 // /// </summary> // public double AveragedMoWeightLostPerMin { get; set; } //} ///// <summary> ///// 模块监控单元的状态定义 ///// </summary> //[DataContract] //[Serializable] //public enum ModuleMonitorItemStatus //{ // Alarm, // NoAlarm, // Active, // NoActive //} ///// <summary> ///// 模块监控单元 ///// </summary> //[DataContract] //[Serializable] //public class ModuleMonitorItem //{ // public string ModuleName { get; set; } // public string Description { get; set; } // public ModuleMonitorItemStatus Status { get; set; } //} ///// <summary> ///// ///// </summary> //[DataContract] //[Serializable] //public class ChartSaveData //{ // public DateTime RecordTime; // public double tvPresData; // public double ZoneA_TC_Read, ZoneB_TC_Read, ZoneC_TC_Read, ZoneD_TC_Read; // public double ZoneA_Current_Read, ZoneB_Current_Read, ZoneC_Current_Read, ZoneD_Current_Read; //} //[DataContract] //[Serializable] //public enum ServerRoutineState //{ // NotRun, // ZhenKong, // Vent, // CyclePurge, // LeakCheck, //} [Serializable] public class DataItem { public string DataName { get; set; } //public bool IsPreLoaded { get; set; } public List<DateTime> TimeStamp { get; set; } public List<float> RawData { get; set; } } /// <summary> /// archived data format /// </summary> [Serializable] public class ArchivedFile { public string ChamId { get; set; } public string Description { get; set; } public DateTime BeginTime { get; set; } public DateTime EndTime { get; set; } public Dictionary<string, DataItem> Datas { get; set; } public Dictionary<string, List<string>> AliasList { get; set; } public List<KeyValuePair<DateTime, string>> RecipeSteps { get; set; } } #region PM data /// <summary> /// 标识不需要数据库记录的数据类型 /// </summary> [AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field)] public class DatabaseSaveIgnoreAttribute : Attribute { } [Serializable] [DataContract] public class BathData { [XmlAttribute] public string BathName; public bool IsCommErr; public bool IsOutofTempRange; [DatabaseSaveIgnore] public bool IsTempSignalAlarm; [DatabaseSaveIgnore] public bool IsCutoffAlarm; [DatabaseSaveIgnore] public bool IsLevelWarning; public double TemperatureReading; } [Serializable] [DataContract] public class MoLine { [XmlAttribute] public string MoName; [DatabaseSaveIgnore] public bool IsDummyMo; //public bool IsBathTempAbnormal; //public double BathTemperatureReading; [DatabaseSaveIgnore] public double MoAlarmLimit; public double MoTotalWeight; [DatabaseSaveIgnore] public double MoWeightCalFactor; public double IntegralUsedWeight; public bool IsMoRemainedWeightAlarm; [DatabaseSaveIgnore] public double MoRemainedPercentage; [DatabaseSaveIgnore] public double MoRemainedWeight; public double MoUsedWeight; public double ToChamFlowRate; [DatabaseSaveIgnore] public double AveragedMoWeightLostPerMin;/*平均每分钟的MO消耗量计算值*/ [DatabaseSaveIgnore] public BathData Bath; public override string ToString() { return MoName; } } #endregion }