Browse Source

1.添加IoSwitch
2.完善Kepler 模拟器(可正常运行Kepler)

lixiang 1 year ago
parent
commit
8f80478982

+ 11 - 1
Venus/Venus_Core/VenusDevice.cs

@@ -102,7 +102,9 @@
         TMSoftPumpValve,
         TMFastPumpValve,
         TMPurgeValve,
-        TMVentValve,
+        //TMVentValve,
+        TMSoftVentValve,
+        TMFastVentValve,
         LLASoftPumpValve,
         LLAFastPumpValve,
         LLAPurgeValve,
@@ -138,6 +140,14 @@
         TMATMSwitch,
         LLAATMSwitch,
         LLBATMSwitch,
+
+        LLAWaferSizeCheckSwitch,
+        LLBWaferSizeCheckSwitch,
+        PMAWaferSizeCheckSwitch,
+        PMBWaferSizeCheckSwitch,
+        PMCWaferSizeCheckSwitch,
+        PMDWaferSizeCheckSwitch,
+
     }
 
     public enum StateData

+ 76 - 29
Venus/Venus_MainPages/ViewModels/DataHistoryViewModel.cs

@@ -37,8 +37,10 @@ namespace Venus_MainPages.ViewModels
         RealtimeProvider _provider = new RealtimeProvider();
         private object _lockSelection = new object();
         ConcurrentBag<QueryIndexer> _lstTokenTimeData = new ConcurrentBag<QueryIndexer>();
-        List<string> keys=new List<string> ();
+        ObservableCollection<string> m_Keys=new ObservableCollection<string> ();
+        ObservableCollection<KeyData> m_KeyDataObservableCollection = new ObservableCollection<KeyData>();
         DispatcherTimer timer = new DispatcherTimer();
+        public List<SolidColorBrush> solidColorBrushes = new List<SolidColorBrush> ();
         DateTime currentTime;
         #endregion
 
@@ -48,7 +50,16 @@ namespace Venus_MainPages.ViewModels
             get { return _ParameterNodes; }
             set { SetProperty(ref _ParameterNodes, value); }
         }
-
+        public ObservableCollection<string> Keys
+        {
+            get { return m_Keys; }
+            set { SetProperty(ref m_Keys, value); }
+        }
+        public ObservableCollection<KeyData> KeyDataObservableCollection
+        {
+            get { return m_KeyDataObservableCollection; }
+            set { SetProperty(ref m_KeyDataObservableCollection, value); }
+        }
         #endregion
 
         #region 命令
@@ -68,9 +79,9 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand ClearCommand =>
             _ClearCommand ?? (_ClearCommand = new DelegateCommand(OnClear));
 
-        private DelegateCommand _StartRealTimeCommand;
-        public DelegateCommand StartRealTimeCommand =>
-            _StartRealTimeCommand ?? (_StartRealTimeCommand = new DelegateCommand(OnStartRealTime));
+        private DelegateCommand<object> _StartRealTimeCommand;
+        public DelegateCommand<object> StartRealTimeCommand =>
+            _StartRealTimeCommand ?? (_StartRealTimeCommand = new DelegateCommand<object>(OnStartRealTime));
 
         private DelegateCommand _StopRealTimeCommand;
         public DelegateCommand StopRealTimeCommand =>
@@ -82,10 +93,22 @@ namespace Venus_MainPages.ViewModels
         {
             ParameterNodes = _provider.GetParameters();
             timer.Interval = TimeSpan.FromSeconds(0.5);
-            timer.Tick += Timer_Tick; ;
+            timer.Tick += Timer_Tick;
+            solidColorBrushes.Add(new SolidColorBrush (Colors.Green));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Red));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Blue));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Orange));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Yellow));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.YellowGreen));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.AliceBlue));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Chocolate));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.Cyan));
+            solidColorBrushes.Add(new SolidColorBrush(Colors.DarkGreen));
+
+
         }
 
-       
+
         #endregion
 
         #region 命令方法
@@ -108,10 +131,35 @@ namespace Venus_MainPages.ViewModels
             {
                 RefreshTreeStatusToParent(node);
             }
+
+            Keys.Clear();
+            for (int i = 0; i < ParameterNodes.Count; i++)
+            {
+                CalKeys(ParameterNodes[i]);
+            }
+            KeyDataObservableCollection.Clear();
+            for (int i = 0; i < Keys.Count; i++)
+            {
+                if (i == 10)
+                {
+                    break;
+                }
+                KeyDataObservableCollection.Add(new KeyData() { Key = Keys[i], Color = solidColorBrushes[i] });
+            }
+
         }
 
-        private void OnStartRealTime()
+        private void OnStartRealTime(object obj)
         {
+            
+            if (Keys.Count > 10)
+            {
+                ((System.Windows.Controls.CheckBox)obj).IsChecked= false;
+                timer.Stop();
+                WPFMessageBox.ShowWarning("最多显示10个数据");
+                return;
+            }
+
             currentTime = DateTime.Now;
             timer.Start();
         }
@@ -122,28 +170,24 @@ namespace Venus_MainPages.ViewModels
       
         private void OnStart()
         {
-            keys.Clear();
-            for (int i = 0; i < ParameterNodes.Count; i++)
-            {
-                CalKeys(ParameterNodes[i]);
-            }
-            if (keys.Count > 10)
+           
+            if (Keys.Count > 10)
             {
                 WPFMessageBox.ShowWarning("最多显示10个数据");
                 return;
             }
             this.DataHistoryView.MyDrawGraphicsControl.ClearPlotPoints();
-            var result = GetData(keys.Distinct().ToList(), this.DataHistoryView.wfTimeFrom.Value, this.DataHistoryView.wfTimeTo.Value);
+            var result = GetData(Keys.Distinct().ToList(), this.DataHistoryView.wfTimeFrom.Value, this.DataHistoryView.wfTimeTo.Value);
             if (result == null)
             {
                 return;
             }
             List<PointCollection> cls = new List<PointCollection>(); 
-            for (int i = 0; i < keys.Count; i++)
+            for (int i = 0; i < Keys.Count; i++)
             {
                 PointCollection points = new PointCollection();
                 int k = 1;
-                result[keys[i]].ForEach(point => 
+                result[Keys[i]].ForEach(point => 
                 {
                     points.Add(new Point() { X = point.dateTime.ToOADate(), Y = point.value });
                     k += 1;
@@ -217,6 +261,7 @@ namespace Venus_MainPages.ViewModels
                     node.ParentNode.Selected = false;
                 }
                 RefreshTreeStatusToParent(node.ParentNode);
+                
             }
         }
 
@@ -293,8 +338,7 @@ namespace Venus_MainPages.ViewModels
 
         }
         private void CalKeys(ParameterNode parameterNode)
-        {
-
+        {           
             if (parameterNode.ChildNodes.Count > 0)
             {
                 foreach (var item in parameterNode.ChildNodes)
@@ -306,36 +350,34 @@ namespace Venus_MainPages.ViewModels
             {
                 if (parameterNode.Selected == true)
                 {
-                    keys.Add(parameterNode.Name);
+                    Keys.Add(parameterNode.Name);
                 }
             }
+            
 
         }
 
         private void Timer_Tick(object sender, EventArgs e)
         {
-            keys.Clear();
-            for (int i = 0; i < ParameterNodes.Count; i++)
-            {
-                CalKeys(ParameterNodes[i]);
-            }
-            if (keys.Count > 10)
+           
+            if (Keys.Count > 10)
             {
                 WPFMessageBox.ShowWarning("最多显示10个数据");
+                timer.Stop();
                 return;
             }
             this.DataHistoryView.MyDrawGraphicsControl.ClearPlotPoints();
-            var result = GetData(keys.Distinct().ToList(), currentTime.AddMinutes(-1), DateTime.Now);
+            var result = GetData(Keys.Distinct().ToList(), currentTime.AddMinutes(-1), DateTime.Now);
             if (result == null)
             {
                 return;
             }
             List<PointCollection> cls = new List<PointCollection>();
-            for (int i = 0; i < keys.Count; i++)
+            for (int i = 0; i < Keys.Count; i++)
             {
                 PointCollection points = new PointCollection();
                 int k = 1;
-                result[keys[i]].ForEach(point =>
+                result[Keys[i]].ForEach(point =>
                 {
                     points.Add(new Point() { X = point.dateTime.ToOADate(), Y = point.value });
                     k += 1;
@@ -361,4 +403,9 @@ namespace Venus_MainPages.ViewModels
         public List<string> DataList { get; set; }
         public string Module { get; set; }
     }
+    public class KeyData
+    {
+        public string Key { get; set; }
+        public SolidColorBrush Color { get; set; }
+    }
 }

+ 45 - 126
Venus/Venus_MainPages/ViewModels/OverViewModel.cs

@@ -968,15 +968,11 @@ namespace Venus_MainPages.ViewModels
         #region 构造函数
         public OverViewModel()
         {
-            //RTData.init();
-            //m_RtConfigKeys = new List<string>();
             m_RtDataKeys = new List<string>();
 
             m_IsATM = true;
 
             ModuleName = "PMA";
-            //addConfigKeys();
-            //addDataKeys();
             
             CurrentModuleRecipes = GetFilesNames(Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName)).ToList();
 
@@ -1005,12 +1001,6 @@ namespace Venus_MainPages.ViewModels
         {
             await Task.Run(async () => 
             {
-                //if (GasIsFlowing==true)
-                //{
-                //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-                //}
-                //else
-                //{
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas1.SetPoint", MFC1SetPoint);
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas2.SetPoint", MFC2SetPoint);
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas3.SetPoint", MFC3SetPoint);
@@ -1023,10 +1013,7 @@ namespace Venus_MainPages.ViewModels
                     await Task.Delay(1000);
                     object[] mfc = new object[8];
                     string[] mfcSetPoint = new string[8];
-                    //for (int index = 0; index < mfc.Length; index++)
-                    //{
-                    //    mfc[index] = RtDataValues[$"{ModuleName}.MfcGas{index + 1}.SetPoint"];
-                    //}
+
                     mfc[0] = MFC1Data.SetPoint;
                     mfc[1] = MFC2Data.SetPoint;
                     mfc[2] = MFC3Data.SetPoint;
@@ -1036,16 +1023,8 @@ namespace Venus_MainPages.ViewModels
                     mfc[6] = MFC7Data.SetPoint;
                     mfc[7] = MFC8Data.SetPoint;
 
-                    //if (((Math.Abs((double)mfc[0] - (double)_oldmfc[0]) < 0.01) && (Math.Abs((double)mfc[1] - (double)_oldmfc[1]) < 0.01) && (Math.Abs((double)mfc[2] - (double)_oldmfc[2])) < 0.01)
-                    //   || ((Math.Abs((double)mfc[0]) <= 0.01 && Math.Abs((double)mfc[1]) <= 0.01 && Math.Abs((double)mfc[2]) <= 0.01)))
-                    //{
-                    //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-                    //    return;
-                    //}
-
-                    //_oldmfc = mfc;
-                    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
-                //}
+                   InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
+                
             });
            
            
@@ -1234,7 +1213,6 @@ namespace Venus_MainPages.ViewModels
 
         private async void OnSetSRf()
         {   
-            //if (!GasIsFlowing == true) return;
 
             if (SRFIsOn == true)
             {
@@ -1243,19 +1221,12 @@ namespace Venus_MainPages.ViewModels
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match}.{AITRfOperation.SetMatchPosition}", SRFMatchC1, SRFMatchC2);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match}.{AITRfOperation.SetMatchPositionC2}", SRFMatchC2);
-                var t = Task.Run(async delegate
-                {
-                    await Task.Delay(100);
-                    return 42;
-                });
-                await t;
+                await Task.Delay(100);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetSRf", SRFFwdPowerSetpoint, true);
             }
         }
         private async void OnSetBRf()
         {
-            //if (!GasIsFlowing == true) return;
 
             if (BRFIsOn == true)
             {
@@ -1265,14 +1236,7 @@ namespace Venus_MainPages.ViewModels
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchPosition}", BRFMatchC1,BRFMatchC2);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchPositionC2}", BRFMatchC2);
-                //Thread.Sleep(100);
-                var t = Task.Run(async delegate
-                {
-                    await Task.Delay(100);
-                    return 42;
-                });
-                await t;
+                await Task.Delay(100);
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBRf", BRFFwdPowerSetpoint, true);
             }
             
@@ -1328,24 +1292,6 @@ namespace Venus_MainPages.ViewModels
 
         }
 
-        //private void OnSetMatchMode(object obj)
-        //{
-        //    switch (obj.ToString())
-        //    {
-        //        case "SRFManual":
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match.ToString()}.{AITRfOperation.SetMatchProcessMode}", EnumRfMatchTuneMode.Manual.ToString());
-        //            break;
-        //        case "SRFAuto":
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match.ToString()}.{AITRfOperation.SetMatchProcessMode}", EnumRfMatchTuneMode.Auto.ToString());
-        //            break;
-        //        case "BRFManual":
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch.ToString()}.{AITRfOperation.SetMatchProcessMode}", EnumRfMatchTuneMode.Manual.ToString());
-        //            break;
-        //        case "BRFAuto":
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch.ToString()}.{AITRfOperation.SetMatchProcessMode}", EnumRfMatchTuneMode.Auto.ToString());
-        //            break;
-        //    }
-        //}
 
         private void OnRunRecipe(object obj)
         {
@@ -1430,42 +1376,37 @@ namespace Venus_MainPages.ViewModels
             MFC6ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveMfc6.IsOpen");
             MFC7ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveMfc7.IsOpen");
             MFC8ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveMfc8.IsOpen");
-            N2ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveN2.IsOpen"); 
-            SoftPumpValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveSoftPump.IsOpen"];
-            FastPumpValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveFastPump.IsOpen"];
-            GuageValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveGuage.IsOpen"];
-            PVHe1ValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValvePVHe1.IsOpen"];
-            PVHe2ValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValvePVHe2.IsOpen"];
-            PVN21ValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValvePVN21.IsOpen"];
-            PVN22ValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValvePVN22.IsOpen"];           
-            TurboPumpPumpingValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveTurboPumpPumping.IsOpen"];
-            TurboPumpPurgeValveIsOpen = (bool)RtDataValues[$"{ModuleName}.ValveTurboPumpPurge.IsOpen"];
-
-            HVIsOn = (bool)RtDataValues[$"{ModuleName}.ESCHV.IsOn"];
-
-            PumpIsOpen = (bool)RtDataValues[$"{ModuleName}.PumpIsRunning"];
-            TurboIsOpen = (bool)RtDataValues[$"{ModuleName}.TurboPumpIsRunning"];
-
-            //BRFIsOn = (bool)RtDataValues[$"{ModuleName}.BRfIsOn"];
-            //SRFIsOn = (bool)RtDataValues[$"{ModuleName}.SRfIsOn"];
-            LiftPinIsUp= (bool)RtDataValues[$"{ModuleName}.LiftPinIsUp"];
-            IsSlitDoorClosed = (bool)RtDataValues[$"{ModuleName}.IsSlitDoorClosed"];
-            IsLidClosed = (bool)RtDataValues[$"{ModuleName}.IsLidClosed"];
+            N2ValveIsOpen =   CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveN2.IsOpen"); 
+            SoftPumpValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveSoftPump.IsOpen");
+            FastPumpValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveFastPump.IsOpen"); 
+            GuageValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveGuage.IsOpen"); 
+            PVHe1ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVHe1.IsOpen"); 
+            PVHe2ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVHe2.IsOpen");
+            PVN21ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVN21.IsOpen");
+            PVN22ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVN22.IsOpen");        
+            TurboPumpPumpingValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPumping.IsOpen");
+            TurboPumpPurgeValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPurge.IsOpen");
+
+            HVIsOn = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ESCHV.IsOn");
+
+            PumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.PumpIsRunning");
+            TurboIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.TurboPumpIsRunning");
+
+
+            LiftPinIsUp= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.LiftPinIsUp");
+            IsSlitDoorClosed = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsSlitDoorClosed");
+            IsLidClosed = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsLidClosed");
 
             PendulumValvePosition = CommonFunction.GetValue<float>(RtDataValues,$"{ModuleName}.GetPVPosition");
             TurboPumpRotationalSpeed = Convert.ToInt32( RtDataValues[$"{ModuleName}.TurboPumpRotationalSpeed"].ToString());
 
             PositionValue = -((int)((PendulumValvePosition) * 0.09));
 
-            
-            PMState currentState = (PMState)Enum.Parse(typeof(PMState), RtDataValues[$"{ModuleName}.FsmState"].ToString());
-            if (PMCurrentState != currentState)
-            {
-                PMCurrentState = currentState;
-            }
+
+            PMCurrentState = (PMState)Enum.Parse(typeof(PMState), RtDataValues[$"{ModuleName}.FsmState"].ToString());
+  
             GasIsFlowing = PMCurrentState == PMState.GasFlowing;
 
-            //MFC1Data = (AITMfcData)RtDataValues[$"{ModuleName}.MfcGas1"];
             MFC1Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas1");
             MFC2Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas2");
             MFC3Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas3");
@@ -1495,50 +1436,30 @@ namespace Venus_MainPages.ViewModels
             ChillerTemperature = float.Parse(RtDataValues[$"{ModuleName}.Chiller.Temp"].ToString());
 
 
+            ChillerIsOn = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.Chiller.IsOn");
 
-            //PendulumValveIsOpen = (bool)RtDataValues[$"{ModuleName}.PendulumValve.IsOpen"];
-
-
-            ChillerIsOn = (bool)RtDataValues[$"{ModuleName}.Chiller.IsOn"];
-
-            SourceRFFanInterlock= (bool)RtDataValues[$"{ModuleName}.SourceRFFanInterlock"];
-            IsWLK= (bool)RtDataValues[$"{ModuleName}.IsWLK"];
-            IsWaterFlowOk= (bool)RtDataValues[$"{ModuleName}.IsWaterFlowOk"];
-            IsTurboPumpInterlock= (bool)RtDataValues[$"{ModuleName}.IsTurboPumpInterlock"];
-            IsCDAOK= (bool)RtDataValues[$"{ModuleName}.IsCDA_OK"];
-            SensorGasBoxDoor= (bool)RtDataValues[$"{ModuleName}.GasBoxDoorSW.Value"];
-            SensorGasBoxPressure= (bool)RtDataValues[$"{ModuleName}.GasBoxPressureSW.Value"];
-
-            IsATM=  (bool)RtDataValues[$"{ModuleName}.IsATM"];
-            IsVAC = (bool)RtDataValues[$"{ModuleName}.IsVAC"];
-
-            ESCHVOutputVoltage= (int)RtDataValues[$"{ModuleName}.ESCHV.OutputVoltage"];
-
-            //SRfReflectPower= float.Parse(RtDataValues[$"{ModuleName}.SRfReflectPower"].ToString());
-            //SRfReflectPower = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.SRfReflectPower");
-            //SRfForwardPowerFeedBack = float.Parse(RtDataValues[$"{ModuleName}.SRfForwardPowerFeedBack"].ToString());
-            //SRfForwardPowerFeedBack= CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.SRfForwardPowerFeedBack");
+            SourceRFFanInterlock= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.SourceRFFanInterlock");
+            IsWLK= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsWLK");
+            IsWaterFlowOk= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsWaterFlowOk");
+            IsTurboPumpInterlock= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsTurboPumpInterlock");
+            IsCDAOK= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsCDA_OK");
+            SensorGasBoxDoor= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.GasBoxDoorSW.Value"); 
+            SensorGasBoxPressure= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.GasBoxPressureSW.Value"); 
 
-            //BRfReflectPower = float.Parse(RtDataValues[$"{ModuleName}.BRfReflectPower"].ToString());
-            //BRfForwardPowerFeedBack = float.Parse(RtDataValues[$"{ModuleName}.BRfForwardPowerFeedBack"].ToString());
+            IsATM= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsATM"); 
+            IsVAC = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsVAC"); 
 
+            ESCHVOutputVoltage= CommonFunction.GetValue<int>(RtDataValues, $"{ModuleName}.ESCHV.OutputVoltage");
 
-            //MatchWorkMode=RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.Match}.WorkMode") ? (int)RtDataValues[$"{ModuleName}.{VenusDevice.Match}.WorkMode"] : 0;            
-            //BiasMatchWorkMode = RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.BiasMatch}.WorkMode") ?   (int)RtDataValues[$"{ ModuleName}.{VenusDevice.BiasMatch}.WorkMode"]:0;
-
-            //MatchC1= RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.Match}.C1") ? float.Parse(RtDataValues[$"{ModuleName}.{VenusDevice.Match}.C1"].ToString()):0;
-            //MatchC2 = RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.Match}.C2") ? float.Parse(RtDataValues[$"{ModuleName}.{VenusDevice.Match}.C2"].ToString()) : 0;
+            
             MatchC1 = CommonFunction.GetValue<float>(RtDataValues,$"{ModuleName}.{VenusDevice.Match}.C1");
             MatchC2 = CommonFunction.GetValue<float>(RtDataValues,$"{ModuleName}.{VenusDevice.Match}.C2");
-
-
-            //BiasMatchC1 = RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.BiasMatch}.C1") ? float.Parse(RtDataValues[$"{ModuleName}.{VenusDevice.BiasMatch}.C1"].ToString()):0;
-            //BiasMatchC2 = RtDataValues.Keys.Contains($"{ModuleName}.{VenusDevice.BiasMatch}.C2") ? float.Parse(RtDataValues[$"{ModuleName}.{VenusDevice.BiasMatch}.C2"].ToString()) : 0;
+          
             BiasMatchC1 = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.{VenusDevice.BiasMatch}.C1");
             BiasMatchC2 = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.{VenusDevice.BiasMatch}.C2");
-            TurboPumpWaterFlowSwitch = (bool)(RtDataValues[$"{ModuleName}.TurboPumpWaterFlowSwitch.Value"]);
-            IsTurboPumpAtSpeed = (bool)RtDataValues[$"{ModuleName}.IsTurboPumpAtSpeed"];
-            IsHasWafer= (bool)RtDataValues[$"{ModuleName}.HasWafer"];
+            TurboPumpWaterFlowSwitch = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.TurboPumpWaterFlowSwitch.Value");
+            IsTurboPumpAtSpeed = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsTurboPumpAtSpeed"); 
+            IsHasWafer= CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.HasWafer"); 
 
 
             if (PMCurrentState == PMState.Processing)
@@ -1563,9 +1484,7 @@ namespace Venus_MainPages.ViewModels
             { 
                 ChamberPressureFeedBack =  ProcessHighPressure;
             }
-        }
-       
-
+        }       
         public void addDataKeys()
         {
             m_RtDataKeys.Clear();

+ 30 - 30
Venus/Venus_MainPages/Views/DataHistoryView.xaml

@@ -22,28 +22,29 @@
             <ColumnDefinition Width="Auto"/>
             <ColumnDefinition />
         </Grid.ColumnDefinitions>
-        <StackPanel>
+        <Expander  ExpandDirection="Left">
             <StackPanel>
+                <StackPanel>
 
-                <TextBlock Text="Start Time:" Width="70" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Left" Margin="5,0,0,0"/>
-       
-                <wfi:WindowsFormsHost Margin="5,0,0,0" FontSize="14" FontFamily="Arial" Width="170" Height="40" HorizontalAlignment="Left">
-                    <wf:DateTimePicker x:Name="wfTimeFrom" Value="2011-8-1" CustomFormat="yyyy/MM/dd HH:mm:ss" Format="Custom"></wf:DateTimePicker>
-                </wfi:WindowsFormsHost>
+                    <TextBlock Text="Start Time:" Width="70" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Left" Margin="5,0,0,0"/>
 
+                    <wfi:WindowsFormsHost Margin="5,0,0,0" FontSize="14" FontFamily="Arial" Width="170" Height="40" HorizontalAlignment="Left">
+                        <wf:DateTimePicker x:Name="wfTimeFrom" Value="2011-8-1" CustomFormat="yyyy/MM/dd HH:mm:ss" Format="Custom"></wf:DateTimePicker>
+                    </wfi:WindowsFormsHost>
 
-                <TextBlock Text="End Time:" Width="70" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Left" Margin="5,0,0,0"/>
-                <wfi:WindowsFormsHost Margin="5,0,0,0" FontSize="14" FontFamily="Arial" Width="170" Height="22" HorizontalAlignment="Left">
-                    <wf:DateTimePicker x:Name="wfTimeTo" Value="2013-8-1" CustomFormat="yyyy/MM/dd HH:mm:ss" Format="Custom"></wf:DateTimePicker>
-                </wfi:WindowsFormsHost>
 
-                <StackPanel Orientation="Horizontal">
-                    <Button Content="Search" Command="{Binding StartCommand}" Width="80" Height="20" HorizontalAlignment="Left" Margin="5,10,0,0" IsEnabled="{Binding ElementName=TimeDataCheckBox,Path=IsChecked,Converter={StaticResource BoolToBool}}"/>
-                    <Button Content="Clear" Command="{Binding  ClearCommand}" Width="80" Height="20" HorizontalAlignment="Left" Margin="5,10,0,0"/>
+                    <TextBlock Text="End Time:" Width="70" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Left" Margin="5,0,0,0"/>
+                    <wfi:WindowsFormsHost Margin="5,0,0,0" FontSize="14" FontFamily="Arial" Width="170" Height="22" HorizontalAlignment="Left">
+                        <wf:DateTimePicker x:Name="wfTimeTo" Value="2013-8-1" CustomFormat="yyyy/MM/dd HH:mm:ss" Format="Custom"></wf:DateTimePicker>
+                    </wfi:WindowsFormsHost>
+
+                    <StackPanel Orientation="Horizontal">
+                        <Button Content="Search" Command="{Binding StartCommand}" Width="80" Height="20" HorizontalAlignment="Left" Margin="5,10,0,0" IsEnabled="{Binding ElementName=TimeDataCheckBox,Path=IsChecked,Converter={StaticResource BoolToBool}}"/>
+                        <Button Content="Clear" Command="{Binding  ClearCommand}" Width="80" Height="20" HorizontalAlignment="Left" Margin="5,10,0,0"/>
+                    </StackPanel>
                 </StackPanel>
-            </StackPanel>
 
-            <TreeView x:Name="ParameterTreeView" ItemsSource="{Binding ParameterNodes}"  Canvas.Top="100" Height="800">
+                <TreeView x:Name="ParameterTreeView" ItemsSource="{Binding ParameterNodes}"  Canvas.Top="100" Height="500">
                     <TreeView.ItemTemplate>
                         <HierarchicalDataTemplate  ItemsSource="{Binding ChildNodes}">
                             <StackPanel Orientation="Horizontal">
@@ -60,8 +61,19 @@
                     </TreeView.ItemTemplate>
                 </TreeView>
 
+                <ListBox ItemsSource="{Binding KeyDataObservableCollection}"  Margin="20,0,0,0" FontSize="20" Height="200" VerticalAlignment="Bottom">
+                    <ListBox.ItemTemplate>
+                        <DataTemplate>
+                            <StackPanel Orientation="Horizontal">
+                                <TextBlock Text="{Binding Key}" Width="480"/>
+                                <Ellipse Fill="{Binding Color}" Width="20" Height="20" Margin="10,0,0,0"/>
+                            </StackPanel>
+                        </DataTemplate>
+                    </ListBox.ItemTemplate>
+                </ListBox>
+            </StackPanel>
 
-        </StackPanel>
+        </Expander>
         <Grid Grid.Column="1">
             <Grid.RowDefinitions>
                 <RowDefinition Height="60"/>
@@ -70,27 +82,15 @@
             </Grid.RowDefinitions>
             <!--<Border BorderThickness="1" BorderBrush="Black"  Margin="50,5,20,5">-->
                 <StackPanel Orientation="Horizontal">
-                    <!--<TextBlock Text="MinX:"   Padding="50,20,0,0" FontSize="20"/>
-                <TextBox BorderThickness="0,0,0,1" BorderBrush="Black" Height="20" Width="80" Background="Transparent" HorizontalAlignment="Center" FontSize="20" Padding="3,0,0,0" Margin="2,0,0,-1" x:Name="MinXTextBox"/>
-
-                    <TextBlock Text="MaxX:"   Padding="100,20,0,0" FontSize="20"/>
-                <TextBox BorderThickness="0,0,0,1" BorderBrush="Black" Height="20" Width="80" Background="Transparent" HorizontalAlignment="Center" FontSize="20" Padding="3,0,0,0" Margin="2,0,0,-1" x:Name="MaxXTextBox"/>
-
-                    <TextBlock Text="MinY:"   Padding="100,20,0,0" FontSize="20"/>
-                <TextBox BorderThickness="0,0,0,1" BorderBrush="Black" Height="20" Width="80" Background="Transparent" HorizontalAlignment="Center" FontSize="20" Padding="3,0,0,0" Margin="2,0,0,-1" x:Name="MinYTextBox"/>
-
-                    <TextBlock Text="MaxY:"   Padding="100,20,0,0" FontSize="20"/>
-                <TextBox BorderThickness="0,0,0,1" BorderBrush="Black" Height="20" Width="80" Background="Transparent" HorizontalAlignment="Center" FontSize="20" Padding="3,0,0,0" Margin="2,0,0,-1" x:Name="MaxYTextBox"/>-->
 
-                    <!--<TextBlock Text="AutoX:"   Padding="100,15,0,0" FontSize="20"/>-->
                 <CheckBox    HorizontalAlignment="Center" FontSize="20" Padding="3,-5,0,0" Margin="100,25,0,0" Content="AutoX Zoom"     x:Name="AutoXCheckBox"/>
 
                 <CheckBox    HorizontalAlignment="Center" FontSize="20" Padding="3,-5,0,0" Margin="100,25,0,0" Content="AutoY Zoom"     x:Name="AutoYCheckBox"/>
 
-                <CheckBox    HorizontalAlignment="Center" FontSize="20" Padding="3,-5,0,0" Margin="100,25,0,0" Content="查看实时数据"     x:Name="TimeDataCheckBox">
+                <CheckBox   HorizontalAlignment="Center" FontSize="20" Padding="3,-5,0,0" Margin="100,25,0,0" Content="查看实时数据"     x:Name="TimeDataCheckBox">
                     <i:Interaction.Triggers>
                         <i:EventTrigger EventName="Checked">
-                            <i:InvokeCommandAction  Command="{Binding StartRealTimeCommand}"/>
+                            <i:InvokeCommandAction  Command="{Binding StartRealTimeCommand}" CommandParameter="{Binding ElementName=TimeDataCheckBox}"/>
                         </i:EventTrigger>
                         <i:EventTrigger EventName="Unchecked">
                             <i:InvokeCommandAction  Command="{Binding StopRealTimeCommand}"/>

BIN
Venus/Venus_RT/Config/DeviceModelKepler.xml


BIN
Venus/Venus_RT/Config/DeviceModelVenus.xml


BIN
Venus/Venus_RT/Config/DeviceModelVenus_MF.xml


+ 229 - 2
Venus/Venus_RT/Config/Interlock.Kepler.xml

@@ -1,7 +1,234 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Interlock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  
- 
+
+	<!--PMA-->
+	<Action do="PMA.DO_PVN21" value="true" tip="PVN21" tip.zh-CN=""  tip.en-US="DO-0" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PVN22"  value="true" tip="PVN22" tip.zh-CN="" tip.en-US="DO-1" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"          tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV11" value="true" tip="PV11" tip.zh-CN="" tip.en-US="DO-2" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"            tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"   tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"          tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV12" value="true" tip="PV12" tip.zh-CN="" tip.en-US="DO-3" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV21" value="true" tip="PV21" tip.zh-CN="" tip.en-US="DO-4" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"            tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"   tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"          tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV22" value="true" tip="PV22" tip.zh-CN="" tip.en-US="DO-5" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"	            tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV31" value="true" tip="PV31" tip.zh-CN="" tip.en-US="DO-6" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV32" value="true" tip="PV32" tip.zh-CN="" tip.en-US="DO-7" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV41" value="true" tip="PV41" tip.zh-CN="" tip.en-US="DO-8" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PV42" value="true" tip="PV42" tip.zh-CN="" tip.en-US="DO-9" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_N2_Valve" value="true" tip="N2" tip.zh-CN="" tip.en-US="DO-10" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+		<Limit do="PMA.DO_Soft_Pumping_Valve"	value="false" tip="DO Soft Pumping Valve"	tip.zh-CN="" tip.en-US="DO-22" />
+		<Limit do="PMA.DO_Fast_Pumping_Valve"	value="false" tip="DO Fast Pumping Valve"	tip.zh-CN="" tip.en-US="DO-23" />
+	</Action>
+
+	<Action do="PMA.DO_MFC1_Valve" value="true" tip="MFC1 Valve" tip.zh-CN="" tip.en-US="DO-11" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC2_Valve" value="true" tip="MFC2 Valve" tip.zh-CN="" tip.en-US="DO-12" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC3_Valve" value="true" tip="MFC3 Valve" tip.zh-CN="" tip.en-US="DO-13" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC4_Valve" value="true" tip="MFC4 Valve" tip.zh-CN="" tip.en-US="DO-14" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC5_Valve" value="true" tip="MFC5 Valve" tip.zh-CN="" tip.en-US="DO-15" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC6_Valve" value="true" tip="MFC6 Valve" tip.zh-CN="" tip.en-US="DO-16" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC7_Valve" value="true" tip="MFC7 Valve" tip.zh-CN="" tip.en-US="DO-17" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_MFC8_Valve" value="true" tip="MFC8 Valve" tip.zh-CN="" tip.en-US="DO-18" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PVHe1" value="true" tip="PVHe1" tip.zh-CN="" tip.en-US="DO-19" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_PVHe2" value="true" tip="PVHe2" tip.zh-CN="" tip.en-US="DO-20" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit di="PMA.DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+		<Limit di="PMA.DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+	</Action>
+
+	<Action do="PMA.DO_Gas_Final_Valve" value="true" tip="Gas Final Valve" tip.zh-CN=""	tip.en-US="DO-21" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI PM Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+	</Action>
+
+	<Action do="PMA.DO_Soft_Pumping_Valve" value="true" tip="Soft Pumping Valve" tip.zh-CN="" tip.en-US="DO-22" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI PM Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit do="PMA.DO_N2_Valve"				value="false" tip="DO N2 Valve"				tip.zh-CN="" tip.en-US="DO-10" />
+	</Action>
+
+	<Action do="PMA.DO_Fast_Pumping_Valve" value="true" tip="Fast Pumping Valve" tip.zh-CN="" tip.en-US="DO-23" >
+		<Limit di="PMA.DI_Lid_Closed"		value="true" tip="DI PM Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+		<Limit do="PMA.DO_N2_Valve"				value="false" tip="DO N2 Valve"				tip.zh-CN="" tip.en-US="DO-10" />
+	</Action>
+
+	<Action do="PMA.DO_Slit_Door_Open" value="true" tip="Slit Door Open" tip.zh-CN="" tip.en-US="DO-24" >
+		<Limit di="PMA.DI_Lid_Closed"			value="true" tip="DI PM Lid Closed"				tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+		
+	</Action>
+
+	<Action do="PMA.DO_Slit_Door_Close" value="true" tip="Slit Door Close" tip.zh-CN="" tip.en-US="DO-25" >
+		<Limit di="PMA.DI_Lid_Closed"			value="true" tip="DI PM Lid Closed"				tip.zh-CN="" tip.en-US="DI-0" />
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+		
+	</Action>
+
+
+	<Action do="PMA.DO_Lift_Pin_Up" value="true" tip="Lift Pin Up" tip.zh-CN="" tip.en-US="DO-26" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+	</Action>
+
+	<Action do="PMA.DO_Lift_Pin_Down" value="true" tip="Lift Pin Down" tip.zh-CN="" tip.en-US="DO-27" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+	</Action>
+
+	<Action do="PMA.DO_Turbo_Pump_Pumping_Valve" value="true" tip="Turbo Pump Pumping Valve" tip.zh-CN="" tip.en-US="DO-29" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+	</Action>
+
+	<Action do="PMA.DO_Turbo_Pump_Purge_Valve" value="true" tip="Turbo Pump Purge Valve" tip.zh-CN="" tip.en-US="DO-30" >
+		<Limit di="PMA.DI_CDA_Pressure_Switch"				value="true" tip="DI CDA Pressure"				tip.zh-CN="" tip.en-US="DI-12" />
+
+	</Action>
+
+	<Action do="PMA.DO_Guage_Valve" value="true" tip="Guage Valve" tip.zh-CN="" tip.en-US="DO-31" >
+		<Limit di="PMA.DI_VAC_Switch"				value="true" tip="DI PM Vacuum SW"				tip.zh-CN="" tip.en-US="DI-2" />
+		<Limit di="PMA.DI_Slit_Door_Close_POS"		value="true" tip="DI Slit Door Close POS"		tip.zh-CN="" tip.en-US="DI-11" />
+	</Action>
+
+	<Action do="PMA.DO_CHB_Wall_Heater_On" value="true" tip="Chamber Wall Heater On" tip.zh-CN="" tip.en-US="DO-35" >
+		<Limit di="PMA.DI_CHB_Wall_OT_Switch_Alarm" value="false" tip="DI Chamber Wall OT Alarm" tip.zh-CN="" tip.en-US="DI-32" />
+	</Action>
+
+
+
+
 
 	
 

+ 87 - 87
Venus/Venus_RT/Config/_ioDefineKepler.xml

@@ -9,13 +9,13 @@
 		<DI_ITEM Index="2" Name="DI_VAC_Switch" Device="" Addr="w20.02" />
 		<DI_ITEM Index="3" Name="" Device="" Addr="w20.03" Note="" />
 		<DI_ITEM Index="4" Name="DI_Water_Leak_Sensor" Device="" Addr="w20.04" />
-		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_Position" Device="" Addr="w20.05" />
-		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_Position" Device="" Addr="w20.06" />
+		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_POS" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_POS" Device="" Addr="w20.06" />
 		<DI_ITEM Index="7" Name="DI_Source_RF_Generator_Interlock" Device="" Addr="w20.07" />
 		<DI_ITEM Index="8" Name="DI_Source_RF_Fan" Device="" Addr="w20.08" />
 		<DI_ITEM Index="9" Name="DI_Turbo_Pump_Interlock" Device="" Addr="w20.09" />
-		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_Position" Device="" Addr="w20.10" />
-		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_Position" Device="" Addr="w20.11" />
+		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_POS" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_POS" Device="" Addr="w20.11" />
 		<DI_ITEM Index="12" Name="DI_CDA_Pressure_Switch" Device="" Addr="w20.12" />
 		<DI_ITEM Index="13" Name="" Device="" Addr="" Note="" />
 		<DI_ITEM Index="14" Name="" Device="" Addr="" />
@@ -54,7 +54,7 @@
 		<DI_ITEM Index="47" Name="" Device="" Addr="" />
 		<DI_ITEM Index="48" Name="" Device="" Addr="" />
 		<DI_ITEM Index="49" Name="" Device="" Addr="" />
-		<DI_ITEM Index="50" Name="" Device="LL_ATM_SW" Addr="" />
+		<DI_ITEM Index="50" Name="" Device="" Addr="" />
 		<DI_ITEM Index="51" Name="DI_Gas_Box_Door_Switch" Device="" Addr="w23.03" />
 		<DI_ITEM Index="52" Name="DI_Gas_Box_Pressure_Switch" Device="" Addr="w23.04" />
 		<DI_ITEM Index="53" Name="DI_Turbo_Pump_Water_Flow_Switch" Device="" Addr="w23.05" />
@@ -232,29 +232,29 @@
 		<DO_ITEM Index="111" Name="" />
 	</Dig_Out>
 	<Ana_Out>
-		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint" Device="" Addr="d1000" Note="MFC" />
-		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint" Device="" Addr="d1002" Note="MFC" />
-		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint" Device="" Addr="d1004" Note="MFC" />
-		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint" Device="" Addr="d1006" Note="MFC" />
-		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint" Device="" Addr="d1008" Note="MFC" />
-		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint" Device="" Addr="d1010" Note="MFC" />
-		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint" Device="" Addr="d1012" Note="MFC" />
-		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint" Device="" Addr="d1014" Note="MFC" />
-		<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint" Device="" Addr="d1016" Note="MFC" />
-		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint" Device="" Addr="d1018" Note="MFC" />
-		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint" Device="" Addr="d1020" Note="以前是Valve" />
-		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint" Device="" Addr="d1022" />
-		<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint" Device="" Addr="d1024" Note="前级管道设定温度" />
-		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint" Device="" Addr="d1026" Note="Temp Limit" />
-		<AO_ITEM Index="14" Name="AO_CHB_Wall_Temperature_Setpoint" Device="" Addr="d1028" Note="腔体壁设定温度" />
-		<AO_ITEM Index="15" Name="AO_CHB_Wall_Temp_Limit_Setpoint" Device="" Addr="d1030" Note="Temp Limit" />
-		<AO_ITEM Index="16" Name="AO_Heartbeat" Device="" Addr="d1032" Note="PC to PLC" />
-		<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint" Device="" Addr="d1034" Note="ESC配置" />
-		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode" Device="" Addr="d1036" />
-		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
-		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />
-		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
-		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
+		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint"                 BufferOffset="0" Device="" Addr="d1000" Note="MFC" />
+		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint"                 BufferOffset="2" Device="" Addr="d1002" Note="MFC" />
+		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint"                 BufferOffset="4" Device="" Addr="d1004" Note="MFC" />
+		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint"                 BufferOffset="6" Device="" Addr="d1006" Note="MFC" />
+		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint"                 BufferOffset="8" Device="" Addr="d1008" Note="MFC" />
+		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint"                 BufferOffset="10" Device="" Addr="d1010" Note="MFC" />
+		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint"                 BufferOffset="12" Device="" Addr="d1012" Note="MFC" />
+		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint"                 BufferOffset="14" Device="" Addr="d1014" Note="MFC" />
+		<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint"                   BufferOffset="16"   Device="" Addr="d1016" Note="MFC" />
+		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint"        BufferOffset="18"  Device="" Addr="d1018" Note="MFC" />
+		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint"      BufferOffset="20" Device="" Addr="d1020" Note="以前是Valve" />
+		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint"       BufferOffset="22" Device="" Addr="d1022" />
+		<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint"     BufferOffset="24" Device="" Addr="d1024" Note="前级管道设定温度" />
+		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint"      BufferOffset="26" Device="" Addr="d1026" Note="Temp Limit" />
+		<AO_ITEM Index="14" Name="AO_CHB_Wall_Temperature_Setpoint"     BufferOffset="28"  Device="" Addr="d1028" Note="腔体壁设定温度" />
+		<AO_ITEM Index="15" Name="AO_CHB_Wall_Temp_Limit_Setpoint"      BufferOffset="30" Device="" Addr="d1030" Note="Temp Limit" />
+		<AO_ITEM Index="16" Name="AO_Heartbeat"                         BufferOffset="32" Device="" Addr="d1032" Note="PC to PLC" />
+		<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint"          BufferOffset="34" Device="" Addr="d1034" Note="ESC配置" />
+		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode"               BufferOffset="36" Device="" Addr="d1036" />
+		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint"      BufferOffset="38" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
+		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint"       BufferOffset="40" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />
+		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint"     BufferOffset="42" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
+		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint"      BufferOffset="44" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
 		<AO_ITEM Index="23" Name="" />
 		<AO_ITEM Index="24" Name="" />
 		<AO_ITEM Index="25" Name="" />
@@ -284,64 +284,64 @@
 		<AO_ITEM Index="49" Name="" />
 	</Ana_Out>
 	<Ana_In>
-		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t" Device="" Addr="d2000" Note="float" />
-		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt" Device="" Addr="d2002" Note="float" />
-		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t" Device="" Addr="d2004" Note="float" />
-		<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t" Device="" Addr="d2006" Note="float" />
-		<AI_ITEM Index="4" Name="AI_MFC1_Flow" Device="" Addr="d2008" Note="float" />
-		<AI_ITEM Index="5" Name="AI_MFC2_Flow" Device="" Addr="d2010" Note="float" />
-		<AI_ITEM Index="6" Name="AI_MFC3_Flow" Device="" Addr="d2012" Note="float" />
-		<AI_ITEM Index="7" Name="AI_MFC4_Flow" Device="" Addr="d2014" Note="float" />
-		<AI_ITEM Index="8" Name="AI_MFC5_Flow" Device="" Addr="d2016" Note="float" />
-		<AI_ITEM Index="9" Name="AI_MFC6_Flow" Device="" Addr="d2018" Note="float" />
-		<AI_ITEM Index="10" Name="AI_MFC7_Flow" Device="" Addr="d2020" Note="float" />
-		<AI_ITEM Index="11" Name="AI_MFC8_Flow" Device="" Addr="d2022" Note="float" />
-		<AI_ITEM Index="12" Name="AI_ESC_He_Flow" Device="" Addr="d2024" Note="float" />
-		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow" Device="" Addr="d2026" Note="float" />
-		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp" Device="" Addr="d2028" Note="float" />
-		<AI_ITEM Index="15" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp" Device="" Addr="d2032" Note="float" />
-		<AI_ITEM Index="17" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="18" Name="AI_CHB_Wall_Control_TC_Temp" Device="" Addr="d2036" Note="float" />
-		<AI_ITEM Index="19" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="20" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="21" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="22" Name="AI_Heartbeat_FB" Device="" Addr="d2044" Note="float" />
-		<AI_ITEM Index="23" Name="AI_Second" Device="" Addr="d2046" Note="float" />
-		<AI_ITEM Index="24" Name="AI_Minute" Device="" Addr="d2048" Note="float" />
-		<AI_ITEM Index="25" Name="AI_Time" Device="" Addr="d2050" Note="float" />
-		<AI_ITEM Index="26" Name="AI_Day" Device="" Addr="d2052" Note="float" />
-		<AI_ITEM Index="27" Name="AI_Month" Device="" Addr="d2054" Note="float" />
-		<AI_ITEM Index="28" Name="AI_Year" Device="" Addr="d2056" Note="float" />
-		<AI_ITEM Index="29" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="30" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual" Device="" Addr="d2062" Note="float" />
-		<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp" Device="" Addr="d2064" Note="float" />
-		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp" Device="" Addr="d2066" Note="float" />
-		<AI_ITEM Index="34" Name="" />
-		<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp" Device="" Addr="d2070" Note="float" />
-		<AI_ITEM Index="36" Name="" />
-		<AI_ITEM Index="37" Name="" />
-		<AI_ITEM Index="38" Name="" />
-		<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp" Device="" Addr="d2078" Note="float" />
-		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp" Device="" Addr="d2080" Note="float" />
-		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp" Device="" Addr="d2082" Note="float" />
-		<AI_ITEM Index="42" Name="" />
-		<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp" Device="" Addr="d2086" Note="float" />
-		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp" Device="" Addr="d2088" Note="float" />
-		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp" Device="" Addr="d2090" Note="float" />
-		<AI_ITEM Index="46" Name="" />
-		<AI_ITEM Index="47" Name="" />
-		<AI_ITEM Index="48" Name="" />
-		<AI_ITEM Index="49" Name="" />
-		<AI_ITEM Index="50" Name="" />
-		<AI_ITEM Index="51" Name="" />
-		<AI_ITEM Index="52" Name="" />
-		<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp" Device="" Addr="d2106" Note="float" />
-		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp" Device="" Addr="d2108" Note="float" />
-		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp" Device="" Addr="d2110" Note="float" />
-		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp" Device="" Addr="d2112" Note="float" />
-		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp" Device="" Addr="d2114" Note="float" />
-		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp" Device="" Addr="d2116" Note="float" />
+		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t"                 BufferOffset="0" Device="" Addr="d2000" Note="float" />
+		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt"               BufferOffset="2" Device="" Addr="d2002" Note="float" />
+		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t"                BufferOffset="4" Device="" Addr="d2004" Note="float" />
+		<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t"                 BufferOffset="6" Device="" Addr="d2006" Note="float" />
+		<AI_ITEM Index="4" Name="AI_MFC1_Flow"                            BufferOffset="8" Device="" Addr="d2008" Note="float" />
+		<AI_ITEM Index="5" Name="AI_MFC2_Flow"                            BufferOffset="10" Device="" Addr="d2010" Note="float" />
+		<AI_ITEM Index="6" Name="AI_MFC3_Flow"                            BufferOffset="12" Device="" Addr="d2012" Note="float" />
+		<AI_ITEM Index="7" Name="AI_MFC4_Flow"                            BufferOffset="14" Device="" Addr="d2014" Note="float" />
+		<AI_ITEM Index="8" Name="AI_MFC5_Flow"                            BufferOffset="16" Device="" Addr="d2016" Note="float" />
+		<AI_ITEM Index="9" Name="AI_MFC6_Flow"                            BufferOffset="18" Device="" Addr="d2018" Note="float" />
+		<AI_ITEM Index="10" Name="AI_MFC7_Flow"                           BufferOffset="20" Device="" Addr="d2020" Note="float" />
+		<AI_ITEM Index="11" Name="AI_MFC8_Flow"                           BufferOffset="22" Device="" Addr="d2022" Note="float" />
+		<AI_ITEM Index="12" Name="AI_ESC_He_Flow"                         BufferOffset="24" Device="" Addr="d2024" Note="float" />
+		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow"                  BufferOffset="26" Device="" Addr="d2026" Note="float" />
+		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp"             BufferOffset="28" Device="" Addr="d2028" Note="float" />
+		<AI_ITEM Index="15" Name=""                                       BufferOffset="30" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp"            BufferOffset="32" Device="" Addr="d2032" Note="float" />
+		<AI_ITEM Index="17" Name=""                                       BufferOffset="34" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="18" Name="AI_CHB_Wall_Control_TC_Temp"            BufferOffset="36" Device="" Addr="d2036" Note="float" />
+		<AI_ITEM Index="19" Name=""                                       BufferOffset="38" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="20" Name=""                                       BufferOffset="40" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="21" Name=""                                       BufferOffset="42" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="22" Name="AI_Heartbeat_FB"                        BufferOffset="44" Device="" Addr="d2044" Note="float" />
+		<AI_ITEM Index="23" Name="AI_Second"                              BufferOffset="46" Device="" Addr="d2046" Note="float" />
+		<AI_ITEM Index="24" Name="AI_Minute"                              BufferOffset="48" Device="" Addr="d2048" Note="float" />
+		<AI_ITEM Index="25" Name="AI_Time"                                BufferOffset="50" Device="" Addr="d2050" Note="float" />
+		<AI_ITEM Index="26" Name="AI_Day"                                 BufferOffset="52" Device="" Addr="d2052" Note="float" />
+		<AI_ITEM Index="27" Name="AI_Month"                               BufferOffset="54" Device="" Addr="d2054" Note="float" />
+		<AI_ITEM Index="28" Name="AI_Year"                                BufferOffset="56" Device="" Addr="d2056" Note="float" />
+		<AI_ITEM Index="29" Name=""                                       BufferOffset="58" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="30" Name=""                                       BufferOffset="60" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual"            BufferOffset="62" Device="" Addr="d2062" Note="float" />
+		<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp"             BufferOffset="64" Device="" Addr="d2064" Note="float" />
+		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp"            BufferOffset="66" Device="" Addr="d2066" Note="float" />
+		<AI_ITEM Index="34" Name=""                                       BufferOffset="68"/>
+		<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp"            BufferOffset="70" Device="" Addr="d2070" Note="float" />
+		<AI_ITEM Index="36" Name=""                                       BufferOffset="72"/>
+		<AI_ITEM Index="37" Name=""                                       BufferOffset="74"/>
+		<AI_ITEM Index="38" Name=""                                       BufferOffset="76"/>
+		<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp"           BufferOffset="78" Device="" Addr="d2078" Note="float" />
+		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp"           BufferOffset="80" Device="" Addr="d2080" Note="float" />
+		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp"           BufferOffset="82" Device="" Addr="d2082" Note="float" />
+		<AI_ITEM Index="42" Name=""                                       BufferOffset="84"/>
+		<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp"           BufferOffset="86" Device="" Addr="d2086" Note="float" />
+		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp"           BufferOffset="88" Device="" Addr="d2088" Note="float" />
+		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp"           BufferOffset="90" Device="" Addr="d2090" Note="float" />
+		<AI_ITEM Index="46" Name=""                                       BufferOffset="92"/>
+		<AI_ITEM Index="47" Name=""                                       BufferOffset="94"/>
+		<AI_ITEM Index="48" Name=""                                       BufferOffset="96"/>
+		<AI_ITEM Index="49" Name=""                                       BufferOffset="98"/>
+		<AI_ITEM Index="50" Name=""                                       BufferOffset="100"/>
+		<AI_ITEM Index="51" Name=""                                       BufferOffset="102"/>
+		<AI_ITEM Index="52" Name=""                                       BufferOffset="104"/>
+		<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp"     BufferOffset="106" Device="" Addr="d2106" Note="float" />
+		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp"    BufferOffset="108" Device="" Addr="d2108" Note="float" />
+		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp"     BufferOffset="110" Device="" Addr="d2110" Note="float" />
+		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp"    BufferOffset="112" Device="" Addr="d2112" Note="float" />
+		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp"     BufferOffset="114" Device="" Addr="d2114" Note="float" />
+		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp"    BufferOffset="116" Device="" Addr="d2116" Note="float" />
 	</Ana_In>
 </IO_DEFINE>

+ 17 - 13
Venus/Venus_RT/Config/_ioDefineVenus_MF.xml

@@ -1,8 +1,8 @@
 <?xml version='1.0'?>
 <IO_DEFINE xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
 
-	<!--文件根据Kepler TM IO List V1.0 20230302.xlsx生成-->
-	<!--生成时间:03/10/2023 18:03:04-->
+	<!--文件根据210-0062-100-E01 20230527.xlsx生成-->
+	<!--生成时间:06/02/2023 14:22:51-->
 	<Dig_In>
 		<DI_ITEM Index="0" Name="DI_TM_Power_On" Device="" Addr="w20.00" Note="1=OK,0=alarm,Interlock-PLC" />
 		<DI_ITEM Index="1" Name="" />
@@ -14,7 +14,7 @@
 		<DI_ITEM Index="7" Name="DI_TM_RB_Not_Extend_PMD" Device="" Addr="w20.07" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="8" Name="DI_TM_RB_Not_Extend_LLA" Device="" Addr="w20.08" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="9" Name="DI_TM_RB_Not_Extend_LLB" Device="" Addr="w20.09" Note="1=ON,0=OFF,Interlock-PLC" />
-		<DI_ITEM Index="10" Name="DI_TM_RB_In_Auto_Mode" Device="" Addr="w20.10" Note="1=ON,0=OFF,Interlock-PLC" />
+		<!--<DI_ITEM Index="10" Name="DI_TM_RB_In_Auto_Mode" Device="" Addr="w20.10" Note="1=ON,0=OFF,Interlock-PLC" />-->
 		<DI_ITEM Index="11" Name="DI_EFEM_RB_Not_Extend_LLA" Device="" Addr="w20.11" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="12" Name="DI_EFEM_RB_Not_Extend_LLB" Device="" Addr="w20.12" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="13" Name="DI_EFEM_Side_Door_Closed" Device="" Addr="w20.13" Note="1=OK,0=alarm,Interlock-PLC" />
@@ -122,8 +122,10 @@
 		<DO_ITEM Index="1" Name="DO_Soft_Pumping_Valve_TM" Device="" Addr="w0.01" />
 		<DO_ITEM Index="2" Name="DO_Fast_Pumping_Valve_TM" Device="" Addr="w0.02" />
 		<DO_ITEM Index="3" Name="DO_Purge_Valve_TM" Device="" Addr="w0.03" />
-		<DO_ITEM Index="4" Name="DO_Vent_Valve_TM" Device="" Addr="w0.04" />
-		<DO_ITEM Index="5" Name="" Device="" Addr="w0.05" />
+		<!--<DO_ITEM Index="4" Name="DO_Vent_Valve_TM" Device="" Addr="w0.04" />
+		<DO_ITEM Index="5" Name="" Device="" Addr="w0.05" />-->
+		<DO_ITEM Index="4" Name="DO_Soft_Vent_Valve_TM" Device="" Addr="w0.04" />
+		<DO_ITEM Index="5" Name="DO_Fast_Vent_Valve_TM" Device="" Addr="w0.05" />
 		<DO_ITEM Index="6" Name="DO_Soft_Pumping_Valve_LLA" Device="" Addr="w0.06" />
 		<DO_ITEM Index="7" Name="DO_Fast_Pumping_Valve_LLA" Device="" Addr="w0.07" />
 		<DO_ITEM Index="8" Name="DO_Purge_Valve_LLA" Device="" Addr="w0.08" />
@@ -133,7 +135,8 @@
 		<DO_ITEM Index="12" Name="DO_LLA_Slit_Door_E_Close" Device="" Addr="w0.12" />
 		<DO_ITEM Index="13" Name="DO_LLA_Slit_Door_T_Open" Device="" Addr="w0.13" />
 		<DO_ITEM Index="14" Name="DO_LLA_Slit_Door_T_Close" Device="" Addr="w0.14" />
-		<DO_ITEM Index="15" Name="" Device="" Addr="w0.15" />
+		<!--<DO_ITEM Index="15" Name="" Device="" Addr="w0.15" />-->
+		<DO_ITEM Index="15" Name="DO_LLA_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w0.15" />
 		<DO_ITEM Index="16" Name="DO_Soft_Pumping_Valve_LLB" Device="" Addr="w1.00" />
 		<DO_ITEM Index="17" Name="DO_Fast_Pumping_Valve_LLB" Device="" Addr="w1.01" />
 		<DO_ITEM Index="18" Name="DO_Purge_Valve_LLB" Device="" Addr="w1.02" />
@@ -143,13 +146,14 @@
 		<DO_ITEM Index="22" Name="DO_LLB_Slit_Door_E_Close" Device="" Addr="w1.06" />
 		<DO_ITEM Index="23" Name="DO_LLB_Slit_Door_T_Open" Device="" Addr="w1.07" />
 		<DO_ITEM Index="24" Name="DO_LLB_Slit_Door_T_Close" Device="" Addr="w1.08" />
-		<DO_ITEM Index="25" Name="" Device="" Addr="w1.09" />
+		<!--<DO_ITEM Index="25" Name="" Device="" Addr="w1.09" />-->
+		<DO_ITEM Index="25" Name="DO_LLB_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.09" />
 		<DO_ITEM Index="26" Name="DO_Water_Valve_Relay" Device="" Addr="w1.10" Note="PC to PLC  w1.10  ON开启冷却水,DO-26在满足DI-03 ON条件下置ON。" />
 		<DO_ITEM Index="27" Name="" Device="" Addr="w1.11" />
-		<DO_ITEM Index="28" Name="" Device="" Addr="w1.12" />
-		<DO_ITEM Index="29" Name="" Device="" Addr="w1.13" />
-		<DO_ITEM Index="30" Name="" Device="" Addr="w1.14" />
-		<DO_ITEM Index="31" Name="" Device="" Addr="w1.15" />
+		<DO_ITEM Index="28" Name="DO_PMA_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.12" Note="SMALL SIZE WAFER 置ON,BIG SIZE WAFER 置OFF."/>
+		<DO_ITEM Index="29" Name="DO_PMB_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.13" Note="SMALL SIZE WAFER 置ON,BIG SIZE WAFER 置OFF."/>
+		<DO_ITEM Index="30" Name="DO_PMC_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.14" Note="SMALL SIZE WAFER 置ON,BIG SIZE WAFER 置OFF."/>
+		<DO_ITEM Index="31" Name="DO_PMD_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.15" Note="SMALL SIZE WAFER 置ON,BIG SIZE WAFER 置OFF."/>
 		<DO_ITEM Index="32" Name="" />
 		<DO_ITEM Index="33" Name="" />
 		<DO_ITEM Index="34" Name="" />
@@ -182,7 +186,7 @@
 		<DO_ITEM Index="61" Name="" />
 		<DO_ITEM Index="62" Name="" />
 		<DO_ITEM Index="63" Name="" />
-		<DO_ITEM Index="64" Name="" />
+		<DO_ITEM Index="64" Name="DO_TM_MFC_FLOW_MODE_PRESSURE_MODE" Device="" Addr="w4.00" />
 		<DO_ITEM Index="65" Name="" />
 		<DO_ITEM Index="66" Name="" />
 		<DO_ITEM Index="67" Name="" />
@@ -190,7 +194,7 @@
 		<DO_ITEM Index="69" Name="" />
 		<DO_ITEM Index="70" Name="" />
 		<DO_ITEM Index="71" Name="" />
-		<DO_ITEM Index="72" Name="" />
+		<DO_ITEM Index="72" Name="DO_TM_VAC_ATM_MODE" Device="" Addr="w4.08" />
 		<DO_ITEM Index="73" Name="" />
 		<DO_ITEM Index="74" Name="" />
 		<DO_ITEM Index="75" Name="" />

+ 93 - 0
Venus/Venus_RT/Devices/IODevices/IoSwitch.cs

@@ -0,0 +1,93 @@
+using Aitex.Core.Common.DeviceData;
+using Aitex.Core.RT.DataCenter;
+using Aitex.Core.RT.Device;
+using Aitex.Core.RT.IOCore;
+using Aitex.Core.RT.Log;
+using Aitex.Core.RT.OperationCenter;
+using CdioCs;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace Venus_RT.Devices
+{
+    public class IoSwitch : BaseDevice, IDevice
+    {
+        private readonly DIAccessor _di;
+        private readonly DOAccessor _do;
+
+        /// <summary>
+        /// true是small size,false是big size,null di/do都为空
+        /// </summary>
+        public bool? Status
+        {
+            get
+            {
+                return _di==null? _do?.Value:_di.Value;               
+            }
+        }
+        public bool SetPoint
+        {
+            get
+            {
+                return _do.Value;
+            }
+            set
+            {
+                if (_do != null)
+                {
+                    _do.Value = value;
+                }
+            }
+        }
+
+        public IoSwitch(string module, XmlElement node, string ioModule = "")
+        {
+            base.Module = module;
+            base.Name = node.GetAttribute("id");
+            base.Display = node.GetAttribute("display");
+            base.DeviceID = node.GetAttribute("schematicId");
+
+            _di = ParseDiNode("di", node, ioModule);
+            _do = ParseDoNode("do", node, ioModule);
+
+        }
+       
+        public bool Initialize()
+        {
+            
+
+            return true;
+        }
+
+        public void Terminate()
+        {
+            
+        }
+
+       
+
+        public void Monitor()
+        {
+           
+        }
+
+        public void Reset()
+        {
+           
+        }
+
+        public void TurnOn()
+        {
+            SetPoint = true;
+        }
+        public void TurnOff()
+        {
+            SetPoint = false;
+        }
+    }
+}

+ 2 - 3
Venus/Venus_RT/Devices/JetKeplerPM.cs

@@ -145,7 +145,7 @@ namespace Venus_RT.Devices
         public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
         public override bool IsVACLoadLock => LoadlockPressure <= 1000;
         public override bool IsVAC => _VAC_sw.Value;
-        public override bool IsWaterFlowOk => _Water_Flow.Value;
+        public override bool IsWaterFlowOk => true;
         public override bool IsWLK => _WLK_sw.Value;
         public override bool IsRFGInterlockOn => _RFG_Interlock.Value;
 
@@ -427,8 +427,7 @@ namespace Venus_RT.Devices
             _TurboPumpPumpingValve.TurnValve(false, out _);
             _TurboPumpPurgeValve.TurnValve(false, out _);
             _GuageValve.TurnValve(false, out _);
-            _LoadlockVentValve.TurnValve(false, out _);
-            _LoadlockPumpingValve.TurnValve(false, out _);
+
 
             _N2Valve.TurnValve(false, out _);
             _FastPumpValve.TurnValve(false, out _);

+ 31 - 6
Venus/Venus_RT/Devices/TM/JetTM.cs

@@ -40,7 +40,10 @@ namespace Venus_RT.Devices
         private readonly IoValve _TMSoftPumpValve;
         private readonly IoValve _TMFastPumpValve;
         private readonly IoValve _TMPurgeValve;
-        private readonly IoValve _TMVentValve;
+        //private readonly IoValve _TMVentValve;
+        private readonly IoValve _TMSoftVentValve;
+        private readonly IoValve _TMFastVentValve;
+
         private readonly IoValve _LLASoftPumpValve;
         private readonly IoValve _LLAFastPumpValve;
         private readonly IoValve _LLAPurgeValve;
@@ -79,6 +82,14 @@ namespace Venus_RT.Devices
         private readonly IoSensor _LLAATMSwitch;
         private readonly IoSensor _LLBATMSwitch;
 
+        private readonly IoSwitch _LLAWaferSizeCheck;
+        private readonly IoSwitch _LLBWaferSizeCheck;
+        private readonly IoSwitch _PMAWaferSizeCheck;
+        private readonly IoSwitch _PMBWaferSizeCheck;
+        private readonly IoSwitch _PMCWaferSizeCheck;
+        private readonly IoSwitch _PMDWaferSizeCheck;
+
+
         private readonly IoTMPressureCtrl _presureCtrl;
 
         public bool TMLidClosed => _TMLid.OFFFeedback;
@@ -109,7 +120,10 @@ namespace Venus_RT.Devices
         public bool IsLLBVentValveOpen => _LLBVentValve.Status;
         public bool IsLLBPurgeValveOpen => _LLBPurgeValve.Status;
 
-        public bool IsTMVentValveOpen => _TMVentValve.Status;
+        public bool IsTMSoftVentValveOpen => _TMSoftVentValve.Status;
+
+        public bool IsTMFastVentValveOpen => _TMFastVentValve.Status;
+
         public bool IsTMPurgeValveOpen => _TMPurgeValve.Status;
         public bool IsTMFastPumpOpen => _TMFastPumpValve.Status;
         public bool IsTMSoftPumpOpen => _TMSoftPumpValve.Status;
@@ -143,8 +157,11 @@ namespace Venus_RT.Devices
             _TMSoftPumpValve    = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMSoftPumpValve}");
             _TMFastPumpValve    = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMFastPumpValve}");
             _TMPurgeValve       = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMPurgeValve}");
-            _TMVentValve        = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMVentValve}");
-            _LLASoftPumpValve   = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.LLASoftPumpValve}");
+            //_TMVentValve        = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMVentValve}");
+            _TMSoftVentValve = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMSoftVentValve}");
+            _TMFastVentValve = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.TMFastVentValve}");
+
+            _LLASoftPumpValve = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.LLASoftPumpValve}");
             _LLAFastPumpValve   = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.LLAFastPumpValve}");
             _LLAPurgeValve      = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.LLAPurgeValve}");
             _LLAVentValve       = DEVICE.GetDevice<IoValve>($"TM.{VenusDevice.LLAVentValve}");
@@ -183,6 +200,14 @@ namespace Venus_RT.Devices
             _LLAATMSwitch   = DEVICE.GetDevice<IoSensor>($"TM.{VenusDevice.LLAATMSwitch}");
             _LLBATMSwitch   = DEVICE.GetDevice<IoSensor>($"TM.{VenusDevice.LLBATMSwitch}");
 
+            _LLAWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.LLAWaferSizeCheckSwitch}");
+            _LLBWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.LLBWaferSizeCheckSwitch}");
+            _PMAWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.PMAWaferSizeCheckSwitch}");
+            _PMBWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.PMBWaferSizeCheckSwitch}");
+            _PMCWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.PMCWaferSizeCheckSwitch}");
+            _PMDWaferSizeCheck = DEVICE.GetDevice<IoSwitch>($"TM.{VenusDevice.PMDWaferSizeCheckSwitch}");
+
+
             _presureCtrl = DEVICE.GetDevice<IoTMPressureCtrl>($"TM.{VenusDevice.TMPressureCtrl}");
 
         }
@@ -230,7 +255,7 @@ namespace Venus_RT.Devices
             switch(mod)
             {
                 case ModuleName.TM:
-                    _TMVentValve.TurnValve(bOn, out string _);
+                    _TMSoftVentValve.TurnValve(bOn, out string _);
                     break;
                 case ModuleName.LLA:
                     _LLAVentValve.TurnValve(bOn, out string _);
@@ -354,7 +379,7 @@ namespace Venus_RT.Devices
             switch (mod)
             {
                 case ModuleName.TM:
-                    if (IsTMVentValveOpen)
+                    if (IsTMSoftVentValveOpen)
                     {
                         LOG.Write(eEvent.ERR_TM, ModuleName.TM, "TM Vent Valve not closed");
                         return false;

+ 1 - 1
Venus/Venus_RT/Modules/PMs/PMHomeRoutine.cs

@@ -44,7 +44,7 @@ namespace Venus_RT.Modules.PMs
 
         private bool IsHomed()
         {
-            return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down && _chamber.PVN22ValveIsOpen && _chamber.IsLoadlockArmRetract;
+            return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down && _chamber.PVN22ValveIsOpen;
         }
     }
 }

+ 1 - 0
Venus/Venus_RT/Venus_RT.csproj

@@ -138,6 +138,7 @@
     <Compile Include="Devices\IODevices\IoPressureMeter.cs" />
     <Compile Include="Devices\IODevices\IoSignalLight.cs" />
     <Compile Include="Devices\IODevices\IoSignalTower.cs" />
+    <Compile Include="Devices\IODevices\IoSwitch.cs" />
     <Compile Include="Devices\IODevices\IoTMPressureCtl.cs" />
     <Compile Include="Devices\JetPMBase.cs" />
     <Compile Include="Devices\JetVenusPM.cs" />

+ 86 - 86
Venus/Venus_Simulator/Config/_ioDefineKepler.xml

@@ -9,13 +9,13 @@
 		<DI_ITEM Index="2" Name="DI_VAC_Switch" Device="" Addr="w20.02" />
 		<DI_ITEM Index="3" Name="" Device="" Addr="w20.03" Note="" />
 		<DI_ITEM Index="4" Name="DI_Water_Leak_Sensor" Device="" Addr="w20.04" />
-		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_Position" Device="" Addr="w20.05" />
-		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_Position" Device="" Addr="w20.06" />
+		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_POS" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_POS" Device="" Addr="w20.06" />
 		<DI_ITEM Index="7" Name="DI_Source_RF_Generator_Interlock" Device="" Addr="w20.07" />
 		<DI_ITEM Index="8" Name="DI_Source_RF_Fan" Device="" Addr="w20.08" />
 		<DI_ITEM Index="9" Name="DI_Turbo_Pump_Interlock" Device="" Addr="w20.09" />
-		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_Position" Device="" Addr="w20.10" />
-		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_Position" Device="" Addr="w20.11" />
+		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_POS" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_POS" Device="" Addr="w20.11" />
 		<DI_ITEM Index="12" Name="DI_CDA_Pressure_Switch" Device="" Addr="w20.12" />
 		<DI_ITEM Index="13" Name="" Device="" Addr="" Note="" />
 		<DI_ITEM Index="14" Name="" Device="" Addr="" />
@@ -232,29 +232,29 @@
 		<DO_ITEM Index="111" Name="" />
 	</Dig_Out>
 	<Ana_Out>
-		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint" Device="" Addr="d1000" Note="MFC" />
-		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint" Device="" Addr="d1002" Note="MFC" />
-		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint" Device="" Addr="d1004" Note="MFC" />
-		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint" Device="" Addr="d1006" Note="MFC" />
-		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint" Device="" Addr="d1008" Note="MFC" />
-		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint" Device="" Addr="d1010" Note="MFC" />
-		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint" Device="" Addr="d1012" Note="MFC" />
-		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint" Device="" Addr="d1014" Note="MFC" />
-		<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint" Device="" Addr="d1016" Note="MFC" />
-		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint" Device="" Addr="d1018" Note="MFC" />
-		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint" Device="" Addr="d1020" Note="以前是Valve" />
-		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint" Device="" Addr="d1022" />
-		<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint" Device="" Addr="d1024" Note="前级管道设定温度" />
-		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint" Device="" Addr="d1026" Note="Temp Limit" />
-		<AO_ITEM Index="14" Name="AO_CHB_Wall_Temperature_Setpoint" Device="" Addr="d1028" Note="腔体壁设定温度" />
-		<AO_ITEM Index="15" Name="AO_CHB_Wall_Temp_Limit_Setpoint" Device="" Addr="d1030" Note="Temp Limit" />
-		<AO_ITEM Index="16" Name="AO_Heartbeat" Device="" Addr="d1032" Note="PC to PLC" />
-		<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint" Device="" Addr="d1034" Note="ESC配置" />
-		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode" Device="" Addr="d1036" />
-		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
-		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />
-		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
-		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
+		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint"                 BufferOffset="0" Device="" Addr="d1000" Note="MFC" />
+		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint"                 BufferOffset="2" Device="" Addr="d1002" Note="MFC" />
+		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint"                 BufferOffset="4" Device="" Addr="d1004" Note="MFC" />
+		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint"                 BufferOffset="6" Device="" Addr="d1006" Note="MFC" />
+		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint"                 BufferOffset="8" Device="" Addr="d1008" Note="MFC" />
+		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint"                 BufferOffset="10" Device="" Addr="d1010" Note="MFC" />
+		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint"                 BufferOffset="12" Device="" Addr="d1012" Note="MFC" />
+		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint"                 BufferOffset="14" Device="" Addr="d1014" Note="MFC" />
+		<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint"                   BufferOffset="16"   Device="" Addr="d1016" Note="MFC" />
+		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint"        BufferOffset="18"  Device="" Addr="d1018" Note="MFC" />
+		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint"      BufferOffset="20" Device="" Addr="d1020" Note="以前是Valve" />
+		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint"       BufferOffset="22" Device="" Addr="d1022" />
+		<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint"     BufferOffset="24" Device="" Addr="d1024" Note="前级管道设定温度" />
+		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint"      BufferOffset="26" Device="" Addr="d1026" Note="Temp Limit" />
+		<AO_ITEM Index="14" Name="AO_CHB_Wall_Temperature_Setpoint"     BufferOffset="28"  Device="" Addr="d1028" Note="腔体壁设定温度" />
+		<AO_ITEM Index="15" Name="AO_CHB_Wall_Temp_Limit_Setpoint"      BufferOffset="30" Device="" Addr="d1030" Note="Temp Limit" />
+		<AO_ITEM Index="16" Name="AO_Heartbeat"                         BufferOffset="32" Device="" Addr="d1032" Note="PC to PLC" />
+		<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint"          BufferOffset="34" Device="" Addr="d1034" Note="ESC配置" />
+		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode"               BufferOffset="36" Device="" Addr="d1036" />
+		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint"      BufferOffset="38" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
+		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint"       BufferOffset="40" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />
+		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint"     BufferOffset="42" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
+		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint"      BufferOffset="44" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
 		<AO_ITEM Index="23" Name="" />
 		<AO_ITEM Index="24" Name="" />
 		<AO_ITEM Index="25" Name="" />
@@ -284,64 +284,64 @@
 		<AO_ITEM Index="49" Name="" />
 	</Ana_Out>
 	<Ana_In>
-		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t" Device="" Addr="d2000" Note="float" />
-		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt" Device="" Addr="d2002" Note="float" />
-		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t" Device="" Addr="d2004" Note="float" />
-		<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t" Device="" Addr="d2006" Note="float" />
-		<AI_ITEM Index="4" Name="AI_MFC1_Flow" Device="" Addr="d2008" Note="float" />
-		<AI_ITEM Index="5" Name="AI_MFC2_Flow" Device="" Addr="d2010" Note="float" />
-		<AI_ITEM Index="6" Name="AI_MFC3_Flow" Device="" Addr="d2012" Note="float" />
-		<AI_ITEM Index="7" Name="AI_MFC4_Flow" Device="" Addr="d2014" Note="float" />
-		<AI_ITEM Index="8" Name="AI_MFC5_Flow" Device="" Addr="d2016" Note="float" />
-		<AI_ITEM Index="9" Name="AI_MFC6_Flow" Device="" Addr="d2018" Note="float" />
-		<AI_ITEM Index="10" Name="AI_MFC7_Flow" Device="" Addr="d2020" Note="float" />
-		<AI_ITEM Index="11" Name="AI_MFC8_Flow" Device="" Addr="d2022" Note="float" />
-		<AI_ITEM Index="12" Name="AI_ESC_He_Flow" Device="" Addr="d2024" Note="float" />
-		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow" Device="" Addr="d2026" Note="float" />
-		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp" Device="" Addr="d2028" Note="float" />
-		<AI_ITEM Index="15" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp" Device="" Addr="d2032" Note="float" />
-		<AI_ITEM Index="17" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="18" Name="AI_CHB_Wall_Control_TC_Temp" Device="" Addr="d2036" Note="float" />
-		<AI_ITEM Index="19" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="20" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="21" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="22" Name="AI_Heartbeat_FB" Device="" Addr="d2044" Note="float" />
-		<AI_ITEM Index="23" Name="AI_Second" Device="" Addr="d2046" Note="float" />
-		<AI_ITEM Index="24" Name="AI_Minute" Device="" Addr="d2048" Note="float" />
-		<AI_ITEM Index="25" Name="AI_Time" Device="" Addr="d2050" Note="float" />
-		<AI_ITEM Index="26" Name="AI_Day" Device="" Addr="d2052" Note="float" />
-		<AI_ITEM Index="27" Name="AI_Month" Device="" Addr="d2054" Note="float" />
-		<AI_ITEM Index="28" Name="AI_Year" Device="" Addr="d2056" Note="float" />
-		<AI_ITEM Index="29" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="30" Name="" Device="" Addr="" Note="float" />
-		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual" Device="" Addr="d2062" Note="float" />
-		<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp" Device="" Addr="d2064" Note="float" />
-		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp" Device="" Addr="d2066" Note="float" />
-		<AI_ITEM Index="34" Name="" />
-		<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp" Device="" Addr="d2070" Note="float" />
-		<AI_ITEM Index="36" Name="" />
-		<AI_ITEM Index="37" Name="" />
-		<AI_ITEM Index="38" Name="" />
-		<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp" Device="" Addr="d2078" Note="float" />
-		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp" Device="" Addr="d2080" Note="float" />
-		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp" Device="" Addr="d2082" Note="float" />
-		<AI_ITEM Index="42" Name="" />
-		<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp" Device="" Addr="d2086" Note="float" />
-		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp" Device="" Addr="d2088" Note="float" />
-		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp" Device="" Addr="d2090" Note="float" />
-		<AI_ITEM Index="46" Name="" />
-		<AI_ITEM Index="47" Name="" />
-		<AI_ITEM Index="48" Name="" />
-		<AI_ITEM Index="49" Name="" />
-		<AI_ITEM Index="50" Name="" />
-		<AI_ITEM Index="51" Name="" />
-		<AI_ITEM Index="52" Name="" />
-		<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp" Device="" Addr="d2106" Note="float" />
-		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp" Device="" Addr="d2108" Note="float" />
-		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp" Device="" Addr="d2110" Note="float" />
-		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp" Device="" Addr="d2112" Note="float" />
-		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp" Device="" Addr="d2114" Note="float" />
-		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp" Device="" Addr="d2116" Note="float" />
+		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t"                 BufferOffset="0" Device="" Addr="d2000" Note="float" />
+		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt"               BufferOffset="2" Device="" Addr="d2002" Note="float" />
+		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t"                BufferOffset="4" Device="" Addr="d2004" Note="float" />
+		<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t"                 BufferOffset="6" Device="" Addr="d2006" Note="float" />
+		<AI_ITEM Index="4" Name="AI_MFC1_Flow"                            BufferOffset="8" Device="" Addr="d2008" Note="float" />
+		<AI_ITEM Index="5" Name="AI_MFC2_Flow"                            BufferOffset="10" Device="" Addr="d2010" Note="float" />
+		<AI_ITEM Index="6" Name="AI_MFC3_Flow"                            BufferOffset="12" Device="" Addr="d2012" Note="float" />
+		<AI_ITEM Index="7" Name="AI_MFC4_Flow"                            BufferOffset="14" Device="" Addr="d2014" Note="float" />
+		<AI_ITEM Index="8" Name="AI_MFC5_Flow"                            BufferOffset="16" Device="" Addr="d2016" Note="float" />
+		<AI_ITEM Index="9" Name="AI_MFC6_Flow"                            BufferOffset="18" Device="" Addr="d2018" Note="float" />
+		<AI_ITEM Index="10" Name="AI_MFC7_Flow"                           BufferOffset="20" Device="" Addr="d2020" Note="float" />
+		<AI_ITEM Index="11" Name="AI_MFC8_Flow"                           BufferOffset="22" Device="" Addr="d2022" Note="float" />
+		<AI_ITEM Index="12" Name="AI_ESC_He_Flow"                         BufferOffset="24" Device="" Addr="d2024" Note="float" />
+		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow"                  BufferOffset="26" Device="" Addr="d2026" Note="float" />
+		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp"             BufferOffset="28" Device="" Addr="d2028" Note="float" />
+		<AI_ITEM Index="15" Name=""                                       BufferOffset="30" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp"            BufferOffset="32" Device="" Addr="d2032" Note="float" />
+		<AI_ITEM Index="17" Name=""                                       BufferOffset="34" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="18" Name="AI_CHB_Wall_Control_TC_Temp"            BufferOffset="36" Device="" Addr="d2036" Note="float" />
+		<AI_ITEM Index="19" Name=""                                       BufferOffset="38" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="20" Name=""                                       BufferOffset="40" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="21" Name=""                                       BufferOffset="42" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="22" Name="AI_Heartbeat_FB"                        BufferOffset="44" Device="" Addr="d2044" Note="float" />
+		<AI_ITEM Index="23" Name="AI_Second"                              BufferOffset="46" Device="" Addr="d2046" Note="float" />
+		<AI_ITEM Index="24" Name="AI_Minute"                              BufferOffset="48" Device="" Addr="d2048" Note="float" />
+		<AI_ITEM Index="25" Name="AI_Time"                                BufferOffset="50" Device="" Addr="d2050" Note="float" />
+		<AI_ITEM Index="26" Name="AI_Day"                                 BufferOffset="52" Device="" Addr="d2052" Note="float" />
+		<AI_ITEM Index="27" Name="AI_Month"                               BufferOffset="54" Device="" Addr="d2054" Note="float" />
+		<AI_ITEM Index="28" Name="AI_Year"                                BufferOffset="56" Device="" Addr="d2056" Note="float" />
+		<AI_ITEM Index="29" Name=""                                       BufferOffset="58" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="30" Name=""                                       BufferOffset="60" Device="" Addr="" Note="float" />
+		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual"            BufferOffset="62" Device="" Addr="d2062" Note="float" />
+		<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp"             BufferOffset="64" Device="" Addr="d2064" Note="float" />
+		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp"            BufferOffset="66" Device="" Addr="d2066" Note="float" />
+		<AI_ITEM Index="34" Name=""                                       BufferOffset="68"/>
+		<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp"            BufferOffset="70" Device="" Addr="d2070" Note="float" />
+		<AI_ITEM Index="36" Name=""                                       BufferOffset="72"/>
+		<AI_ITEM Index="37" Name=""                                       BufferOffset="74"/>
+		<AI_ITEM Index="38" Name=""                                       BufferOffset="76"/>
+		<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp"           BufferOffset="78" Device="" Addr="d2078" Note="float" />
+		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp"           BufferOffset="80" Device="" Addr="d2080" Note="float" />
+		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp"           BufferOffset="82" Device="" Addr="d2082" Note="float" />
+		<AI_ITEM Index="42" Name=""                                       BufferOffset="84"/>
+		<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp"           BufferOffset="86" Device="" Addr="d2086" Note="float" />
+		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp"           BufferOffset="88" Device="" Addr="d2088" Note="float" />
+		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp"           BufferOffset="90" Device="" Addr="d2090" Note="float" />
+		<AI_ITEM Index="46" Name=""                                       BufferOffset="92"/>
+		<AI_ITEM Index="47" Name=""                                       BufferOffset="94"/>
+		<AI_ITEM Index="48" Name=""                                       BufferOffset="96"/>
+		<AI_ITEM Index="49" Name=""                                       BufferOffset="98"/>
+		<AI_ITEM Index="50" Name=""                                       BufferOffset="100"/>
+		<AI_ITEM Index="51" Name=""                                       BufferOffset="102"/>
+		<AI_ITEM Index="52" Name=""                                       BufferOffset="104"/>
+		<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp"     BufferOffset="106" Device="" Addr="d2106" Note="float" />
+		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp"    BufferOffset="108" Device="" Addr="d2108" Note="float" />
+		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp"     BufferOffset="110" Device="" Addr="d2110" Note="float" />
+		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp"    BufferOffset="112" Device="" Addr="d2112" Note="float" />
+		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp"     BufferOffset="114" Device="" Addr="d2114" Note="float" />
+		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp"    BufferOffset="116" Device="" Addr="d2116" Note="float" />
 	</Ana_In>
 </IO_DEFINE>

+ 1 - 1
Venus/Venus_Simulator/Config/_ioDefineVenus.xml

@@ -192,7 +192,7 @@
 		<AI_ITEM Index="9" Name="AI_MFC6_Flow" BufferOffset="18" Device="" Addr="d2018" Note="MFC" />
 		<AI_ITEM Index="10" Name="AI_MFC7_Flow" BufferOffset="20" Device="" Addr="d2020" Note="MFC" />
 		<AI_ITEM Index="11" Name="AI_MFC8_Flow" BufferOffset="22" Device="" Addr="d2022" Note="MFC" />
-		<AI_ITEM Index="12" Name="AI_He_Flow" BufferOffset="24" Device="" Addr="d2024" Note="MFC" />
+		<AI_ITEM Index="12" Name="AI_ESC_He_Flow" BufferOffset="24" Device="" Addr="d2024" Note="MFC" />
 		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow" BufferOffset="26" Device="" Addr="d2026" Note="MFC" />
 		<AI_ITEM Index="14" Name="AI_Valve_Control_TC_Temp" BufferOffset="28" Device="" Addr="d2028" Note="TC temp" />
 		<AI_ITEM Index="15" Name="AI_Valve_Monitor_TC_Temp" BufferOffset="30" Device="" Addr="d2030" Note="TC temp" />

+ 17 - 13
Venus/Venus_Simulator/Config/_ioDefineVenus_MF.xml

@@ -1,8 +1,8 @@
 <?xml version='1.0'?>
 <IO_DEFINE xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
 
-	<!--文件根据Kepler TM IO List V1.0 20230302.xlsx生成-->
-	<!--生成时间:03/10/2023 18:03:04-->
+	<!--文件根据210-0062-100-E01 20230527.xlsx生成-->
+	<!--生成时间:06/02/2023 14:22:51-->
 	<Dig_In>
 		<DI_ITEM Index="0" Name="DI_TM_Power_On" Device="" Addr="w20.00" Note="1=OK,0=alarm,Interlock-PLC" />
 		<DI_ITEM Index="1" Name="" />
@@ -14,7 +14,7 @@
 		<DI_ITEM Index="7" Name="DI_TM_RB_Not_Extend_PMD" Device="" Addr="w20.07" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="8" Name="DI_TM_RB_Not_Extend_LLA" Device="" Addr="w20.08" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="9" Name="DI_TM_RB_Not_Extend_LLB" Device="" Addr="w20.09" Note="1=ON,0=OFF,Interlock-PLC" />
-		<DI_ITEM Index="10" Name="DI_TM_RB_In_Auto_Mode" Device="" Addr="w20.10" Note="1=ON,0=OFF,Interlock-PLC" />
+		<!--<DI_ITEM Index="10" Name="DI_TM_RB_In_Auto_Mode" Device="" Addr="w20.10" Note="1=ON,0=OFF,Interlock-PLC" />-->
 		<DI_ITEM Index="11" Name="DI_EFEM_RB_Not_Extend_LLA" Device="" Addr="w20.11" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="12" Name="DI_EFEM_RB_Not_Extend_LLB" Device="" Addr="w20.12" Note="1=ON,0=OFF,Interlock-PLC" />
 		<DI_ITEM Index="13" Name="DI_EFEM_Side_Door_Closed" Device="" Addr="w20.13" Note="1=OK,0=alarm,Interlock-PLC" />
@@ -122,8 +122,10 @@
 		<DO_ITEM Index="1" Name="DO_Soft_Pumping_Valve_TM" Device="" Addr="w0.01" />
 		<DO_ITEM Index="2" Name="DO_Fast_Pumping_Valve_TM" Device="" Addr="w0.02" />
 		<DO_ITEM Index="3" Name="DO_Purge_Valve_TM" Device="" Addr="w0.03" />
-		<DO_ITEM Index="4" Name="DO_Vent_Valve_TM" Device="" Addr="w0.04" />
-		<DO_ITEM Index="5" Name="" Device="" Addr="w0.05" />
+		<!--<DO_ITEM Index="4" Name="DO_Vent_Valve_TM" Device="" Addr="w0.04" />
+		<DO_ITEM Index="5" Name="" Device="" Addr="w0.05" />-->
+		<DO_ITEM Index="4" Name="DO_Soft_Vent_Valve_TM" Device="" Addr="w0.04" />
+		<DO_ITEM Index="5" Name="DO_Fast_Vent_Valve_TM" Device="" Addr="w0.05" />
 		<DO_ITEM Index="6" Name="DO_Soft_Pumping_Valve_LLA" Device="" Addr="w0.06" />
 		<DO_ITEM Index="7" Name="DO_Fast_Pumping_Valve_LLA" Device="" Addr="w0.07" />
 		<DO_ITEM Index="8" Name="DO_Purge_Valve_LLA" Device="" Addr="w0.08" />
@@ -133,7 +135,8 @@
 		<DO_ITEM Index="12" Name="DO_LLA_Slit_Door_E_Close" Device="" Addr="w0.12" />
 		<DO_ITEM Index="13" Name="DO_LLA_Slit_Door_T_Open" Device="" Addr="w0.13" />
 		<DO_ITEM Index="14" Name="DO_LLA_Slit_Door_T_Close" Device="" Addr="w0.14" />
-		<DO_ITEM Index="15" Name="" Device="" Addr="w0.15" />
+		<!--<DO_ITEM Index="15" Name="" Device="" Addr="w0.15" />-->
+		<DO_ITEM Index="15" Name="DO_LLA_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w0.15" />
 		<DO_ITEM Index="16" Name="DO_Soft_Pumping_Valve_LLB" Device="" Addr="w1.00" />
 		<DO_ITEM Index="17" Name="DO_Fast_Pumping_Valve_LLB" Device="" Addr="w1.01" />
 		<DO_ITEM Index="18" Name="DO_Purge_Valve_LLB" Device="" Addr="w1.02" />
@@ -143,13 +146,14 @@
 		<DO_ITEM Index="22" Name="DO_LLB_Slit_Door_E_Close" Device="" Addr="w1.06" />
 		<DO_ITEM Index="23" Name="DO_LLB_Slit_Door_T_Open" Device="" Addr="w1.07" />
 		<DO_ITEM Index="24" Name="DO_LLB_Slit_Door_T_Close" Device="" Addr="w1.08" />
-		<DO_ITEM Index="25" Name="" Device="" Addr="w1.09" />
+		<!--<DO_ITEM Index="25" Name="" Device="" Addr="w1.09" />-->
+		<DO_ITEM Index="25" Name="DO_LLB_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.09" />
 		<DO_ITEM Index="26" Name="DO_Water_Valve_Relay" Device="" Addr="w1.10" Note="PC to PLC  w1.10  ON开启冷却水,DO-26在满足DI-03 ON条件下置ON。" />
 		<DO_ITEM Index="27" Name="" Device="" Addr="w1.11" />
-		<DO_ITEM Index="28" Name="" Device="" Addr="w1.12" />
-		<DO_ITEM Index="29" Name="" Device="" Addr="w1.13" />
-		<DO_ITEM Index="30" Name="" Device="" Addr="w1.14" />
-		<DO_ITEM Index="31" Name="" Device="" Addr="w1.15" />
+		<DO_ITEM Index="28" Name="DO_PMA_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.12" />
+		<DO_ITEM Index="29" Name="DO_PMB_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.13" />
+		<DO_ITEM Index="30" Name="DO_PMC_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.14" />
+		<DO_ITEM Index="31" Name="DO_PMD_BIG_SMALL_SIZE_WAFER_CHECK" Device="" Addr="w1.15" />
 		<DO_ITEM Index="32" Name="" />
 		<DO_ITEM Index="33" Name="" />
 		<DO_ITEM Index="34" Name="" />
@@ -182,7 +186,7 @@
 		<DO_ITEM Index="61" Name="" />
 		<DO_ITEM Index="62" Name="" />
 		<DO_ITEM Index="63" Name="" />
-		<DO_ITEM Index="64" Name="" />
+		<DO_ITEM Index="64" Name="DO_TM_MFC_FLOW_MODE_PRESSURE_MODE" Device="" Addr="w4.00" />
 		<DO_ITEM Index="65" Name="" />
 		<DO_ITEM Index="66" Name="" />
 		<DO_ITEM Index="67" Name="" />
@@ -190,7 +194,7 @@
 		<DO_ITEM Index="69" Name="" />
 		<DO_ITEM Index="70" Name="" />
 		<DO_ITEM Index="71" Name="" />
-		<DO_ITEM Index="72" Name="" />
+		<DO_ITEM Index="72" Name="DO_TM_VAC_ATM_MODE" Device="" Addr="w4.08" />
 		<DO_ITEM Index="73" Name="" />
 		<DO_ITEM Index="74" Name="" />
 		<DO_ITEM Index="75" Name="" />

+ 204 - 26
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -137,10 +137,10 @@ namespace Venus_Simulator.Instances
                 SetAiValue($"{mod}.AI_Foreline_Pressure_760t", 5001);
                 //SetAiValue($"{mod}.AI_Chamber_Pressure_10t", 5000);
                 SetAiValue($"{mod}.AI_Process_Pressure_100mt", 1000);
-                //SetAiValue($"{mod}.AI_Chamber_Pressure_760t", ATM_PRESSURE);
+                //SetAiValue($"{mod}.AI_Chamber_Pressure_10t", ATM_PRESSURE);
                 SetAiValue($"{mod}.AI_Chamber_Pressure_Virtual", PROCESS_GAUGE);
 
-                SetAiValue($"{mod}.AI_Chamber_Pressure_760t", 5000);
+                SetAiValue($"{mod}.AI_Chamber_Pressure_10t", 5000);
                 SetAiValue($"{mod}.AI_LL_Pressure_760t", ATM_LoadLock_PRESSURE);
 
                 //// Temperature
@@ -178,14 +178,14 @@ namespace Venus_Simulator.Instances
 
                 IO.DI[$"{mod}.DI_Water_Leak_Sensor"].Value = true;
 
-                IO.DI[$"{mod}.DI_Lift_Pin_Up_Position"].Value = false;
-                IO.DI[$"{mod}.DI_Lift_Pin_Down_Position"].Value = true;
+                IO.DI[$"{mod}.DI_Lift_Pin_Up_POS"].Value = false;
+                IO.DI[$"{mod}.DI_Lift_Pin_Down_POS"].Value = true;
                 IO.DI[$"{mod}.DI_Source_RF_Generator_Interlock"].Value = true;
                 IO.DI[$"{mod}.DI_Source_RF_Fan"].Value = true;
                 IO.DI[$"{mod}.DI_Turbo_Pump_Interlock"].Value = true;
 
-                IO.DI[$"{mod}.DI_Slit_Door_Open_Position"].Value = false;
-                IO.DI[$"{mod}.DI_Slit_Door_Close_Position"].Value = true;
+                IO.DI[$"{mod}.DI_Slit_Door_Open_POS"].Value = false;
+                IO.DI[$"{mod}.DI_Slit_Door_Close_POS"].Value = true;
                 IO.DI[$"{mod}.DI_CDA_Pressure_Switch"].Value = true;
 
 
@@ -341,15 +341,36 @@ namespace Venus_Simulator.Instances
                     ChangeTime(ModuleName.PMB);
                     //MonitorIOPumpCtrl(ModuleName.PMB);
 
-                    MonitorMFSlitDoor();
+                    
                     ChangeTime(ModuleName.TM);
                 }
                 else if(SimulatorJetChamber.CurrentChamber == JetChamber.Kepler)
-                { 
-                
+                {
+                    // PMA
+                    MonitorSlitDoor(ModuleName.PMA);
+                    MonitorPin(ModuleName.PMA);
+                    MonitorPressure_Kepler(ModuleName.PMA);
+                    
+                    //MonitorTemperature(ModuleName.PMA);
+                    MonitorGas(ModuleName.PMA);
+                    //MonitorRF(ModuleName.PMA);
+                    ChangeTime(ModuleName.PMA);
+                    //MonitorIOPumpCtrl(ModuleName.PMA);
+
+                    // PMB
+                    MonitorSlitDoor(ModuleName.PMB);
+                    MonitorPin(ModuleName.PMB);
+                    MonitorPressure_Kepler(ModuleName.PMB);
+                    //MonitorTemperature(ModuleName.PMB);
+                    MonitorGas(ModuleName.PMB);
+                    // MonitorRF(ModuleName.PMB);
+                    ChangeTime(ModuleName.PMB);
+                    //MonitorIOPumpCtrl(ModuleName.PMB);
+
+                    ChangeTime(ModuleName.TM);
                 }
 
-                 
+                MonitorMFSlitDoor();
 
 
             }
@@ -520,7 +541,7 @@ namespace Venus_Simulator.Instances
             }
 
             // PLC 模拟量范围[0,4000], 电压[0, 10V], 压力[0, 760Torr]
-            string sAI_ChamberPressure = "AI_Chamber_Pressure_760t";
+            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
             string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
             //float chamber_pressure = GetMockChamberPressure(mod);
             //float process_pressure = GetAiValue($"{mod}.AI_Chamber_Pressure_Virtual");
@@ -768,15 +789,173 @@ namespace Venus_Simulator.Instances
             //}
         }
 
-        //float GetMockChamberPressure(ModuleName mod)
-        //{
-        //    return GetAiValue($"{mod}.AI_Chamber_Pressure_760t");
-        //}
+        void MonitorPressure_Kepler(ModuleName mod)
+        {
+            string sAI_Foreline = "AI_Foreline_Pressure_10t";
+
+
+
+          
+
+            if (SkyPumpMockPMA._simPumpStatus == SkyPumpMockPMA.SimPumpStatus.Open || EdwardsPumpMockPMA._simPumpStatus == EdwardsPumpMockPMA.SimEdwardsPumpStatus.Open)
+            {
+                SetAiValue($"{mod}.{sAI_Foreline}", GetAiValue($"{mod}.{sAI_Foreline}") - _rd.Next(500, 600));
+            }
+            else
+            {
+                SetAiValue($"{mod}.{sAI_Foreline}", GetAiValue($"{mod}.{sAI_Foreline}") + _rd.Next(500, 600));
+            }
+
+            // PLC 模拟量范围[0,4000], 电压[0, 10V], 压力[0, 760Torr]
+            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
+            string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
+            //float chamber_pressure = GetMockChamberPressure(mod);
+            //float process_pressure = GetAiValue($"{mod}.AI_Chamber_Pressure_Virtual");
+
+            // soft pump & fast pump
+            DOAccessor fast_pump_vlv = IO.DO[$"{mod}.DO_Fast_Pumping_Valve"];
+            DOAccessor soft_pump_vlv = IO.DO[$"{mod}.DO_Soft_Pumping_Valve"];
+            DOAccessor turbo_pump_vlv = IO.DO[$"{mod}.DO_Turbo_Pump_Pumping_Valve"];
+
+            if (fast_pump_vlv.Value || soft_pump_vlv.Value || turbo_pump_vlv.Value)
+            {
+                if (fast_pump_vlv.Value && soft_pump_vlv.Value)
+                {
+                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                    if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
+                    {
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 30000);
+                        //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                    }
+                    else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
+                    {
+                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1500);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1500);
+                    }
+
+                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(15000, 16000));
+                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(150, 160));
+                }
+                else if (fast_pump_vlv.Value)
+                {
+                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                    if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
+                    {
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000);
+                        //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                    }
+                    else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
+                    {
+                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1300);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1300);
+                    }
+                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(12000, 13000));
+                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(120, 130));
+                }
+                else if (soft_pump_vlv.Value)
+                {
+                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                    if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
+                    {
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000);
+                        //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                    }
+                    else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
+                    {
+                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1100);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1100);
+                    }
+                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(13000, 14000));
+                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(100, 110));
+                }
+                else if (turbo_pump_vlv.Value)
+                {
+                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+
+                    getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
+                    SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
+                }
+            }
+
+            // fast vent & purge
+            DOAccessor vent_vlv = IO.DO[$"{mod}.DO_N2_Valve"];
+
+
+            if (vent_vlv.Value)
+            {
+                float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
+                {
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + 25000);
+                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                }
+                else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
+                {
+                    getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + 1300);
+                    SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + 1300);
+                }
+                else
+                {
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + 25000);
+                }
+                //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + _rd.Next(25000, 30000));
+                //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + _rd.Next(130, 150));
+            }
+
+
+            // Loadlock Pumping Valve
+          
+
+            // 压力值越界,复位
+            float chamber_pressure1 = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+            if (chamber_pressure1 > ATM_PRESSURE)
+            {
+                SetAiValue($"{mod}.AI_Chamber_Pressure_10t", ATM_PRESSURE);
+            }
+            else if (chamber_pressure1 < 20)
+            {
+                SetAiValue($"{mod}.AI_Chamber_Pressure_10t", 20);
+            }
+
+            float process_pressure1 = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+            if (process_pressure1 > PROCESS_GAUGE)
+            {
+                SetAiValue($"{mod}.AI_Chamber_Pressure_Virtual", PROCESS_GAUGE);
+            }
+            else if (process_pressure1 < 20)
+            {
+                SetAiValue($"{mod}.AI_Chamber_Pressure_Virtual", 20);
+            }
+
+            float foreline_pressure = GetAiValue($"{mod}.{sAI_Foreline}");
+            if (foreline_pressure > 10000)
+            {
+                SetAiValue($"{mod}.AI_Foreline_Pressure_10t", 10000);
+            }
+            else if (foreline_pressure < 150)
+            {
+                SetAiValue($"{mod}.AI_Foreline_Pressure_10t", 150);
+            }
+
+            // ATM switch
+            IO.DI[$"{mod}.DI_ATM_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") > ATM_THRESHOLD;
+
+            // VAC switch
+            IO.DI[$"{mod}.DI_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
+
+        }
+
 
-        //void SetMockChamberPressure(ModuleName mod, float val)
-        //{
-        //    SetAiValue($"{mod}.AI_Chamber_Pressure_760t", val);
-        //}
 
         void SetAiValue(string name, float value)
         {
@@ -879,10 +1058,7 @@ namespace Venus_Simulator.Instances
         {
             var sp = GetAoValue($"{mod}.AO_MFC{gasNum}_Flow_Setpoint");
 
-            if (gasNum == 3)
-            {
-                sp = Math.Max(0, sp - 150);
-            }
+
 
             var mock_fb = _rd.Next((int)sp - 3, (int)sp + 3) + _rd.NextDouble();
 
@@ -904,7 +1080,7 @@ namespace Venus_Simulator.Instances
 
             var mock_fb = _rd.Next((int)sp - 3, (int)sp + 3) + _rd.NextDouble();
 
-            SetAiValue($"{mod}.AI_He_Flow", (float)mock_fb);
+            SetAiValue($"{mod}.AI_ESC_He_Flow", (float)mock_fb);
         }
 
         void MonitorRF(ModuleName mod)
@@ -930,11 +1106,13 @@ namespace Venus_Simulator.Instances
             _thread.Stop();
         }
 
-        ////////////////////////////////////////////////////////////////////////
-        ////////////////////////////////////////////////////////////////////////
         public void SetCoolantOutletTemp(string module, int Temp)
         {
+            if (SimulatorJetChamber.CurrentChamber == JetChamber.Venus)
+            { 
             SetAiValue($"{module}.AI_Coolant_Outlet_Temp", Temp);
+
+            }
         }
     }
 }

+ 7 - 16
Venus/Venus_Themes/UserControls/Chamber.xaml

@@ -271,21 +271,14 @@
                             </Style.Triggers>
                         </Style>
                     </Grid.Style>
-                    <!--<Rectangle Stroke="{DynamicResource Lid_BD}" Fill="BlueViolet"  StrokeThickness="1" VerticalAlignment="Top"  Height="8" Margin="0,2,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}"/>-->
-                    <!--<Rectangle  Stroke="Black" VerticalAlignment="Top"  Height="8" Margin="0,2,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}">
-                        <Rectangle.Fill>
-                            <LinearGradientBrush StartPoint="1,1" EndPoint="0,0">
-                                <GradientStop Color="Black" Offset="0" />
-                                <GradientStop Color="White"  Offset="1" />
-                            </LinearGradientBrush>
-                        </Rectangle.Fill>
-                    </Rectangle>-->
-                    <Border BorderThickness="1" BorderBrush="Black" CornerRadius="4" VerticalAlignment="Top"  Height="8" Margin="0,2,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}">
+
+                    <Border BorderThickness="1" BorderBrush="Black" CornerRadius="4" VerticalAlignment="Top"  Height="6" Margin="0,4,0,0" Width="70" Visibility="{Binding ElementName=chamber,Path=IsHasWafer,Converter={StaticResource bool2VisibilityConverter}}">
                         <Border.Background>
-                            <LinearGradientBrush StartPoint="1,0" EndPoint="0,0">
-                                <GradientStop Color="Orange" Offset="0" />
-                                <GradientStop Color="Gray"  Offset="1" />
-                            </LinearGradientBrush>
+                            <RadialGradientBrush >
+                                <GradientStop Color="White" Offset="0" />
+                                <GradientStop Color="#ffe600" Offset="1" />
+
+                            </RadialGradientBrush>
                         </Border.Background>
                     </Border>
                     <Rectangle HorizontalAlignment="Left" Fill="{DynamicResource Lid_BG3}" Stroke="{DynamicResource Lid_BD}" Width="8" Margin="48,10,0,4"/>
@@ -293,8 +286,6 @@
                     <Rectangle Stroke="{DynamicResource Lid_BD}" Fill="{DynamicResource Lid_BG3}" StrokeThickness="1" VerticalAlignment="Bottom" Height="8" Margin="5,0" Width="64" />
                     <Rectangle  HorizontalAlignment="Center" Margin="-100,0"  Width="{Binding WaferLength}" Height="10" VerticalAlignment="Top"/>
                     
-
-
                 </Grid>
 
                 <!--左边slit door-->

+ 1 - 1
Venus/Venus_Themes/UserControls/DrawGraphicsControl.xaml.cs

@@ -40,7 +40,7 @@ namespace Venus_Themes.UserControls
         private System.Drawing.Pen m_PenData;
         private System.Drawing.Pen m_PenSData;
         private System.Drawing.Pen m_PenASData;
-        private System.Drawing.Pen[] m_PenCollencteions;
+        public System.Drawing.Pen[] m_PenCollencteions;
 
         private bool m_StartMouseMove = false;
         private bool m_MouseMove = false;