Browse Source

1.增加腔体自学习

JET-YDB\JET-YANGDB 1 week ago
parent
commit
e74a40f753

+ 4 - 4
VirgoRT/Config/IoProviderConfig.xml

@@ -27,8 +27,8 @@
     <Blocks>
       <Block type="di" offset="0" size="200" value_type=""></Block>
       <Block type="do" offset="0" size="200" value_type=""></Block>
-      <Block type="ai" offset="0" size="128" value_type=""></Block>
-      <Block type="ao" offset="0" size="128" value_type=""></Block>
+      <Block type="ai" offset="0" size="200" value_type=""></Block>
+      <Block type="ao" offset="0" size="200" value_type=""></Block>
     </Blocks>
   </IoProvider>
 
@@ -39,8 +39,8 @@
     <Blocks>
       <Block type="di" offset="0" size="200" value_type=""></Block>
       <Block type="do" offset="0" size="200" value_type=""></Block>
-      <Block type="ai" offset="0" size="128" value_type=""></Block>
-      <Block type="ao" offset="0" size="128" value_type=""></Block>
+      <Block type="ai" offset="0" size="200" value_type=""></Block>
+      <Block type="ao" offset="0" size="200" value_type=""></Block>
     </Blocks>
   </IoProvider>
 </IoProviders>

+ 6 - 6
VirgoRT/Config/_ioDefineVirgo.xml

@@ -145,12 +145,12 @@
     <DI_ITEM Index="141" Name="" />
     <DI_ITEM Index="142" Name="" />
     <DI_ITEM Index="143" Name="" />
-    <DI_ITEM Index="144" Name="DI_Substrate_Heat_PID_AT_Star_Fb" Addr="W29.00" Device="" />
-    <DI_ITEM Index="145" Name="DI_Substrate_Heat_PID_AT_Stop_Fb" Addr="W29.01" Device="" />
-    <DI_ITEM Index="146" Name="DI_CHB_Heat_PID_AT_Star_Fb" Addr="W29.02" Device="" />
-    <DI_ITEM Index="147" Name="DI_CHB_Heat_PID_AT_Stop_Fb" Addr="W29.03" Device="" />
-    <DI_ITEM Index="148" Name="DI_Forline_Heat_PID_AT_Star_Fb" Addr="W29.04" Device="" />
-    <DI_ITEM Index="149" Name="DI_Forline_Heat_PID_AT_Stop_Fb" Addr="W29.05" Device="" />
+    <DI_ITEM Index="144" Name="DI_Substrate_Heat_PID_AT_Star_FB" Addr="W29.00" Device="" />
+    <DI_ITEM Index="145" Name="DI_Substrate_Heat_PID_AT_Stop_FB" Addr="W29.01" Device="" />
+    <DI_ITEM Index="146" Name="DI_CHB_Heat_PID_AT_Star_FB" Addr="W29.02" Device="" />
+    <DI_ITEM Index="147" Name="DI_CHB_Heat_PID_AT_Stop_FB" Addr="W29.03" Device="" />
+    <DI_ITEM Index="148" Name="DI_Foreline_Heat_PID_AT_Star_FB" Addr="W29.04" Device="" />
+    <DI_ITEM Index="149" Name="DI_Foreline_Heat_PID_AT_Stop_FB" Addr="W29.05" Device="" />
     <DI_ITEM Index="150" Name="" />
     <DI_ITEM Index="151" Name="" />
     <DI_ITEM Index="152" Name="DI_Substrate_Heat_PID_AT_Running" Addr="W29.08" Device="" />

+ 2 - 0
VirgoUI/Config/Menu.xml

@@ -41,6 +41,7 @@
     <menuItem id="EPDPMA" resKey="EPD" System="PMA"  viewmodel="VirgoUI.Client.Models.PMs.EPDViewModel,VirgoUI" />
     <menuItem id="calibrationPMA" resKey="RF Calibration" System="PMA" viewmodel="VirgoUI.Client.Models.PMs.RFCalibrationViewModel,VirgoUI" />
     <menuItem id="verificationPMA" resKey="MFC Verification" System="PMA" viewmodel="VirgoUI.Client.Models.PMs.MFCVerificationViewModel,VirgoUI" />
+    <menuItem id="pidPMA" resKey="PID" System="IO.PMA" viewmodel="VirgoUI.Client.Models.PMs.PMPIDViewModel,VirgoUI" />
   </menuItem>
   <menuItem id="PMB" resKey="PMB">
     <menuItem id="OverviewPMB" resKey="Overview" System="PMB"  viewmodel="VirgoUI.Client.Models.PMs.PmOverviewViewModel,VirgoUI" />
@@ -53,6 +54,7 @@
     <menuItem id="EPDPMB" resKey="EPD" System="PMB"  viewmodel="VirgoUI.Client.Models.PMs.EPDViewModel,VirgoUI" />
     <menuItem id="calibrationPMB" resKey="RF Calibration" System="PMB" viewmodel="VirgoUI.Client.Models.PMs.RFCalibrationViewModel,VirgoUI" />
     <menuItem id="verificationPMB" resKey="MFC Verification" System="PMB" viewmodel="VirgoUI.Client.Models.PMs.MFCVerificationViewModel,VirgoUI" />
+    <menuItem id="pidPMB" resKey="PID" System="IO.PMB" viewmodel="VirgoUI.Client.Models.PMs.PMPIDViewModel,VirgoUI" />
   </menuItem>
 
 </menu>

+ 275 - 0
VirgoUI/Models/PMs/PMPIDView.xaml

@@ -0,0 +1,275 @@
+<UserControl x:Class="VirgoUI.Client.Models.PMs.PMPIDView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
+             xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation"
+             xmlns:cal="http://www.caliburn.org"
+             xmlns:deviceControl="clr-namespace:Aitex.Core.UI.DeviceControl;assembly=MECF.Framework.UI.Core"
+             xmlns:control="clr-namespace:Aitex.Core.UI.Control;assembly=MECF.Framework.UI.Core"
+             xmlns:parts="clr-namespace:VirgoUI.Controls.Parts"
+             xmlns:pMs="clr-namespace:VirgoUI.Client.Models.PMs"
+             xmlns:converters="clr-namespace:Aitex.Core.UI.Converters;assembly=MECF.Framework.UI.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="770" d:DesignWidth="1920">
+    <Grid  Margin="10,20,10,10" >
+        <Grid.RowDefinitions>
+            <RowDefinition Height="380"/>
+            <RowDefinition Height="380"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="940"/>
+            <ColumnDefinition Width="950"/>
+        </Grid.ColumnDefinitions>
+
+        <!--<Canvas Background="#FFC5D0D8" Width="800" Height="300" Grid.Row="0" Grid.Column="0">
+            <TextBlock Text="CHB Wall PID Study" FontSize="30"  Canvas.Left="254" Canvas.Top="13">
+
+            </TextBlock>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding CHBHeaterOn}" Canvas.Left="700" Canvas.Top="180"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding CHBHeaterPIDATRunning}" Canvas.Left="700" Canvas.Top="210"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding CHBHeaterPIDATFinished}" Canvas.Left="700" Canvas.Top="240"/>
+            <Button Content="Set" Canvas.Left="341" Canvas.Top="132" Width="70">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="CHBSetTemperature">
+                            <cal:Parameter Value="{Binding}"></cal:Parameter>
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater On" Canvas.Left="448" Canvas.Top="124" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="CHBSetHeaterOn">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID Start" Canvas.Left="59" Canvas.Top="233" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="CHBHeatPIDATStart">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID End" Canvas.Left="251" Canvas.Top="233" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="CHBHeatPIDATStop">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater Off" Canvas.Left="448" Canvas.Top="173" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="CHBSetHeaterOff">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <TextBox Text="{Binding CHBTemperatureSetpoint, UpdateSourceTrigger=PropertyChanged}" Width="95" Canvas.Left="236" Canvas.Top="132" Height="26">
+
+            </TextBox>
+            <TextBlock Text="Temperature Setpoint:" FontSize="16"  Canvas.Left="52" Canvas.Top="134">
+
+            </TextBlock>
+            <TextBlock Text="Control TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding CHBControlTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="{Binding CHBMonitorTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="541" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="541" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="541" Canvas.Top="238">
+
+            </TextBlock>
+        </Canvas>-->
+
+        <Canvas Background="#FFC5D0D8" Width="800" Height="300" Grid.Row="0" Grid.Column="1">
+            <TextBlock Text="Foreline PID Study" FontSize="30"  Canvas.Left="254" Canvas.Top="13">
+
+            </TextBlock>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding ForelineHeaterOn}" Canvas.Left="700" Canvas.Top="180"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding ForelineHeaterPIDATRunning}" Canvas.Left="700" Canvas.Top="210"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding ForelineHeaterPIDATFinished}" Canvas.Left="700" Canvas.Top="240"/>
+            <Button Content="Set" Canvas.Left="340" Canvas.Top="132" Width="70">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="ForelineSetTemperature">
+                            <cal:Parameter Value="{Binding}"></cal:Parameter>
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater On" Canvas.Left="442" Canvas.Top="124" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="ForelineSetHeaterOn">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID Start" Canvas.Left="71" Canvas.Top="233" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="ForelineHeatPIDATStart">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID End" Canvas.Left="230" Canvas.Top="233" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="ForelineHeatPIDATStop">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater Off" Canvas.Left="442" Canvas.Top="173" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="ForelineSetHeaterOff">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <TextBox Text="{Binding ForelineTemperatureSetpoint, UpdateSourceTrigger=PropertyChanged}" Width="95" Canvas.Left="222" Canvas.Top="132" Height="26">
+
+            </TextBox>
+            <TextBlock Text="Temperature Setpoint:" FontSize="16"  Canvas.Left="46" Canvas.Top="134">
+
+            </TextBlock>
+            <TextBlock Text="Control TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding ForelineControlTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="{Binding ForelineMonitorTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="541" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="541" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="541" Canvas.Top="238">
+
+            </TextBlock>
+        </Canvas>
+
+        <Canvas Background="#FFC5D0D8" Width="800" Height="300" Grid.Row="0" Grid.Column="0">
+            <TextBlock Text="Substrate PID Study" FontSize="30"  Canvas.Left="254" Canvas.Top="13">
+
+            </TextBlock>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding LE1HeaterOn}" Canvas.Left="700" Canvas.Top="180"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding LE1HeaterPIDATRunning}" Canvas.Left="700" Canvas.Top="210"/>
+            <deviceControl:AITSensor GreenColor="True" LightOnValue="{Binding LE1HeaterPIDATFinished}" Canvas.Left="700" Canvas.Top="240"/>
+            <Button Content="Set" Canvas.Left="344" Canvas.Top="135" Width="70">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="LE1SetTemperature">
+                            <cal:Parameter Value="{Binding}"></cal:Parameter>
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater On" Canvas.Left="446" Canvas.Top="124" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="LE1SetHeaterOn">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID Start" Canvas.Left="64" Canvas.Top="234" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="LE1HeatPIDATStart">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="PID End" Canvas.Left="254" Canvas.Top="237" Width="100">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="LE1HeatPIDATStop">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <Button Content="Heater Off" Canvas.Left="446" Canvas.Top="173" Width="80">
+                <i:Interaction.Triggers>
+                    <i:EventTrigger EventName="Click">
+                        <cal:ActionMessage MethodName="LE1SetHeaterOff">
+                        </cal:ActionMessage>
+                    </i:EventTrigger>
+                </i:Interaction.Triggers>
+
+            </Button>
+            <TextBox Text="{Binding LE1TemperatureSetpoint, UpdateSourceTrigger=PropertyChanged}" Width="95" Canvas.Left="234" Canvas.Top="132" Height="26">
+
+            </TextBox>
+            <TextBlock Text="Temperature Setpoint:" FontSize="16"  Canvas.Left="52" Canvas.Top="134">
+
+            </TextBlock>
+            <TextBlock Text="Control TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding LE1ControlTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="541" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="{Binding LE1MonitorTCTemp}" FontSize="16"  Canvas.Left="671" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="541" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="541" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="541" Canvas.Top="238">
+
+            </TextBlock>
+        </Canvas>
+    </Grid>
+</UserControl>

+ 28 - 0
VirgoUI/Models/PMs/PMPIDView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace VirgoUI.Client.Models.PMs
+{
+    /// <summary>
+    /// PMPIDView.xaml 的交互逻辑
+    /// </summary>
+    public partial class PMPIDView : UserControl
+    {
+        public PMPIDView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 188 - 0
VirgoUI/Models/PMs/PMPIDViewModel.cs

@@ -0,0 +1,188 @@
+using Aitex.Core.Util;
+using MECF.Framework.Common.DataCenter;
+using MECF.Framework.Common.OperationCenter;
+using OpenSEMI.ClientBase;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using VirgoUI.Client.Models.Sys;
+
+namespace VirgoUI.Client.Models.PMs
+{
+    public class PMPIDViewModel : ModuleUiViewModelBase, ISupportMultipleSystem
+    {
+        #region Foreline
+        public float ForelineTemperatureSetpoint { get; set; }
+        public void ForelineSetHeaterOn()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Forline_Heater_On", true);
+        }
+        public void ForelineSetHeaterOff()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Forline_Heater_On", false);
+        }
+        public void ForelineSetTemperature(object oj)
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetAoValue32", $"{SystemName.Split('.')[1]}.AO_Foreline_Temperature_Setpoint", ForelineTemperatureSetpoint);
+        }
+        public void ForelineHeatPIDATStop()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Star", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Stop", true);
+        }
+        public void ForelineHeatPIDATStart()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Stop", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Star", true);
+        }
+
+
+        [Subscription("DI_Foreline_Heater_On_FB")]
+        public bool ForelineHeaterOn { get; set; }
+        [Subscription("DI_Foreline_Heat_PID_AT_Running")]
+        public bool ForelineHeaterPIDATRunning { get; set; }
+        [Subscription("DI_Foreline_Heat_PID_AT_Finished")]
+        public bool ForelineHeaterPIDATFinished { get; set; }
+
+        private bool _forelineHeaterPIDATStarFB;
+        [Subscription("DI_Foreline_Heat_PID_AT_Star_FB")]
+        public bool ForelineHeaterPIDATStarFB
+        {
+            get
+            {
+                return _forelineHeaterPIDATStarFB;
+            }
+            set
+            {
+                _forelineHeaterPIDATStarFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Star", false);
+                }
+            }
+        }
+
+        private bool _forelineHeaterPIDATStopFB;
+        [Subscription("DI_Foreline_Heat_PID_AT_Stop_FB")]
+        public bool ForelineHeaterPIDATStopFB
+        {
+            get
+            {
+                return _forelineHeaterPIDATStopFB;
+            }
+            set
+            {
+                _forelineHeaterPIDATStopFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Foreline_Heat_PID_AT_Stop", false);
+                }
+            }
+        }
+
+        public float ForelineControlTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_Foreline_Control_TC_Temp");
+            }
+        }
+
+        public float ForelineMonitorTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_Foreline_Monitor_TC_Temp");
+            }
+        }
+        #endregion
+
+        #region 1_LE
+        public float LE1TemperatureSetpoint { get; set; }
+        public void LE1SetHeaterOn()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heater_On", true);
+        }
+        public void LE1SetHeaterOff()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heater_On", false);
+        }
+        public void LE1SetTemperature(object oj)
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetAoValue32", $"{SystemName.Split('.')[1]}.AO_Substrate_Temperature_Setpoint", LE1TemperatureSetpoint);
+        }
+        public void LE1HeatPIDATStop()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Star", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Stop", true);
+        }
+        public void LE1HeatPIDATStart()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Stop", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Star", true);
+        }
+
+        [Subscription("DI_Substrate_Heater_On_FB")]
+        public bool LE1HeaterOn { get; set; }
+        [Subscription("DI_Substrate_Heat_PID_AT_Running")]
+        public bool LE1HeaterPIDATRunning { get; set; }
+        [Subscription("DI_Substrate_Heat_PID_AT_Finished")]
+        public bool LE1HeaterPIDATFinished { get; set; }
+
+        private bool _substrateHeaterPIDATStarFB;
+        [Subscription("DI_Substrate_Heat_PID_AT_Star_FB")]
+        public bool SubstrateHeaterPIDATStarFB
+        {
+            get
+            {
+                return _substrateHeaterPIDATStarFB;
+            }
+            set
+            {
+                _substrateHeaterPIDATStarFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Star", false);
+                }
+            }
+        }
+
+        private bool _substrateHeaterPIDATStopFB;
+        [Subscription("DI_Substrate_Heat_PID_AT_Stop_FB")]
+        public bool SubstrateHeaterPIDATStopFB
+        {
+            get
+            {
+                return _substrateHeaterPIDATStopFB;
+            }
+            set
+            {
+                _substrateHeaterPIDATStopFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_Substrate_Heat_PID_AT_Stop", false);
+                }
+            }
+        }
+
+
+        public float LE1ControlTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_Substrate_Control_TC_Temp");
+            }
+        }
+
+        public float LE1MonitorTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_Substrate_Monitor_TC_Temp");
+            }
+        }
+        #endregion
+    }
+}