Browse Source

ReleaseNotes2.0.1.0版本,更新PID自加热学习功能。

liujiazhuang 2 days ago
parent
commit
a5e2c90b83

+ 71 - 0
VirgoRT/Config/_ioDefineVirgo.xml

@@ -94,6 +94,29 @@
 		<DI_ITEM Index="87" Name="" />
 		<DI_ITEM Index="88" Name="" />
 		<DI_ITEM Index="89" Name="" />
+    <DI_ITEM Index="90" Name="" />
+    <DI_ITEM Index="91" Name="" />
+    <DI_ITEM Index="92" Name="" />
+    <DI_ITEM Index="93" Name="" />
+    <DI_ITEM Index="94" Name="" />
+    <DI_ITEM Index="95" Name="" />
+    <DI_ITEM Index="96" Name="" />
+    <DI_ITEM Index="97" Name="" />
+    <DI_ITEM Index="98" Name="" />
+    <DI_ITEM Index="99" Name="" />
+    <DI_ITEM Index="100" Name="DI_Foreline_Heat_PID_AT_Star_Fb" Device=""  Addr="w26.04" Note="" />
+    <DI_ITEM Index="101" Name="DI_Foreline_Heat_PID_AT_Stop_Fb" Device=""  Addr="w26.05" Note="" />
+    <DI_ITEM Index="102" Name="DI_Substrate_Heat_PID_AT_Star_Fb" Device=""  Addr="w26.06" Note="" />
+    <DI_ITEM Index="103" Name="DI_Substrate_Heat_PID_AT_Stop_Fb" Device=""  Addr="w26.07" Note="" />
+    <DI_ITEM Index="104" Name="DI_CHB_Heat_PID_AT_Star_Fb" Addr="w26.08" Note="1=On, 0=Off" />
+    <DI_ITEM Index="105" Name="DI_CHB_Heat_PID_AT_Stop_Fb" Addr="w26.09" Note="1=On, 0=Off" />
+
+    <DI_ITEM Index="106" Name="DI_Foreline_Heat_PID_AT_Running" Addr="w26.10" Note="1=On, 0=Off" />
+    <DI_ITEM Index="107" Name="DI_Foreline_Heat_PID_AT_Finished" Addr="w26.11" Note="1=On, 0=Off" />
+    <DI_ITEM Index="108" Name="DI_Substrate_Heat_PID_AT_Running" Addr="w26.12" Note="1=On, 0=Off" />
+    <DI_ITEM Index="109" Name="DI_Substrate_Heat_PID_AT_Finished" Addr="w26.13" Note="1=On, 0=Off" />
+    <DI_ITEM Index="110" Name="DI_CHB_Heat_PID_AT_Running" Addr="w26.14" Note="1=On, 0=Off" />
+    <DI_ITEM Index="111" Name="DI_CHB_Heat_PID_AT_Finished" Addr="w26.15" Note="1=On, 0=Off" />
 	</Dig_In>
 	<Dig_Out>
 		<DO_ITEM Index="0" Name="DO_Soft_Pumping_Valve" Device="" Addr="w0.00" />
@@ -156,6 +179,54 @@
 		<DO_ITEM Index="57" Name="" />
 		<DO_ITEM Index="58" Name="" />
 		<DO_ITEM Index="59" Name="" />
+    <DO_ITEM Index="60" Name="" />
+    <DO_ITEM Index="61" Name="" />
+    <DO_ITEM Index="62" Name="" />
+    <DO_ITEM Index="63" Name="" />
+    <DO_ITEM Index="64" Name="" />
+    <DO_ITEM Index="65" Name="" />
+    <DO_ITEM Index="66" Name="" />
+    <DO_ITEM Index="67" Name="" />
+    <DO_ITEM Index="68" Name="" />
+    <DO_ITEM Index="69" Name="" />
+    <DO_ITEM Index="70" Name="" />
+    <DO_ITEM Index="71" Name="" />
+    <DO_ITEM Index="72" Name="" />
+    <DO_ITEM Index="73" Name="" />
+    <DO_ITEM Index="74" Name="" />
+    <DO_ITEM Index="75" Name="" />
+    <DO_ITEM Index="76" Name="" />
+    <DO_ITEM Index="77" Name="" />
+    <DO_ITEM Index="78" Name="" />
+    <DO_ITEM Index="79" Name="" />
+    <DO_ITEM Index="80" Name="" />
+    <DO_ITEM Index="81" Name="" />
+    <DO_ITEM Index="82" Name="" />
+    <DO_ITEM Index="83" Name="" />
+    <DO_ITEM Index="84" Name="" />
+    <DO_ITEM Index="85" Name="" />
+    <DO_ITEM Index="86" Name="" />
+    <DO_ITEM Index="87" Name="" />
+    <DO_ITEM Index="88" Name="" />
+    <DO_ITEM Index="89" Name="" />
+    <DO_ITEM Index="90" Name="" />
+    <DO_ITEM Index="91" Name="" />
+    <DO_ITEM Index="92" Name="" />
+    <DO_ITEM Index="93" Name="" />
+    <DO_ITEM Index="94" Name="" />
+    <DO_ITEM Index="95" Name="" />
+    <DO_ITEM Index="96" Name="" />
+    <DO_ITEM Index="97" Name="" />
+    <DO_ITEM Index="98" Name="" />
+    <DO_ITEM Index="99" Name="" />
+    <DO_ITEM Index="100" Name="DO_Foreline_Heat_PID_AT_Star" Device="" Addr="w6.04" Note="DI-100为1,将DO-100置0" />
+    <DO_ITEM Index="101" Name="DO_Foreline_Heat_PID_AT_Stop" Device="" Addr="w6.05" Note="DI-101为1,将DO-101置0" />
+    <DO_ITEM Index="102" Name="DO_Substrate_Heat_PID_AT_Star" Device="" Addr="w6.06" Note="DI-102为1,将DO-102置0" />
+    <DO_ITEM Index="103" Name="DO_Substrate_Heat_PID_AT_Stop" Device="" Addr="w6.07" Note="DI-103为1,将DO-103置0" />
+    <DO_ITEM Index="104" Name="DO_CHB_Heat_PID_AT_Star" Device="" Addr="w6.08" Note="DI-104为1,将DO-104置0" />
+    <DO_ITEM Index="105" Name="DO_CHB_Heat_PID_AT_Stop" Device="" Addr="w6.09" Note="DI-105为1,将DO-105置0" />
+    
+    
 	</Dig_Out>
 	<Ana_Out>
 		<AO_ITEM Index="0" Name="AO_Generator_Power_Setpoint" BufferOffset="0" Device="" Addr="d1000" Note="0-6000W" />

+ 1 - 1
VirgoRT/Properties/AssemblyInfo.cs

@@ -51,5 +51,5 @@ using System.Windows;
 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.0.0.9")]
+[assembly: AssemblyVersion("2.0.1.0")]
 //[assembly: AssemblyFileVersion("1.0.4")]

+ 69 - 0
VirgoSimulator/Config/_ioDefineVirgo.xml

@@ -97,6 +97,29 @@
 		<DI_ITEM Index="87" Name="" />
 		<DI_ITEM Index="88" Name="" />
 		<DI_ITEM Index="89" Name="" />
+    <DI_ITEM Index="90" Name="" />
+    <DI_ITEM Index="91" Name="" />
+    <DI_ITEM Index="92" Name="" />
+    <DI_ITEM Index="93" Name="" />
+    <DI_ITEM Index="94" Name="" />
+    <DI_ITEM Index="95" Name="" />
+    <DI_ITEM Index="96" Name="" />
+    <DI_ITEM Index="97" Name="" />
+    <DI_ITEM Index="98" Name="" />
+    <DI_ITEM Index="99" Name="" />
+    <DI_ITEM Index="100" Name="DI_Foreline_Heat_PID_AT_Star_Fb" Device=""  Addr="w26.04" Note="" />
+    <DI_ITEM Index="101" Name="DI_Foreline_Heat_PID_AT_Stop_Fb" Device=""  Addr="w26.05" Note="" />
+    <DI_ITEM Index="102" Name="DI_Substrate_Heat_PID_AT_Star_Fb" Device=""  Addr="w26.06" Note="" />
+    <DI_ITEM Index="103" Name="DI_Substrate_Heat_PID_AT_Stop_Fb" Device=""  Addr="w26.07" Note="" />
+    <DI_ITEM Index="104" Name="DI_CHB_Heat_PID_AT_Star_Fb" Addr="w26.08" Note="1=On, 0=Off" />
+    <DI_ITEM Index="105" Name="DI_CHB_Heat_PID_AT_Stop_Fb" Addr="w26.09" Note="1=On, 0=Off" />
+
+    <DI_ITEM Index="106" Name="DI_Foreline_Heat_PID_AT_Running" Addr="w26.10" Note="1=On, 0=Off" />
+    <DI_ITEM Index="107" Name="DI_Foreline_Heat_PID_AT_Finished" Addr="w26.11" Note="1=On, 0=Off" />
+    <DI_ITEM Index="108" Name="DI_Substrate_Heat_PID_AT_Running" Addr="w26.12" Note="1=On, 0=Off" />
+    <DI_ITEM Index="109" Name="DI_Substrate_Heat_PID_AT_Finished" Addr="w26.13" Note="1=On, 0=Off" />
+    <DI_ITEM Index="110" Name="DI_CHB_Heat_PID_AT_Running" Addr="w26.14" Note="1=On, 0=Off" />
+    <DI_ITEM Index="111" Name="DI_CHB_Heat_PID_AT_Finished" Addr="w26.15" Note="1=On, 0=Off" />
 	</Dig_In>
 	<Dig_Out>
 		<DO_ITEM Index="0" Name="DO_Soft_Pumping_Valve" Device="" Addr="w0.00" />
@@ -159,6 +182,52 @@
 		<DO_ITEM Index="57" Name="" />
 		<DO_ITEM Index="58" Name="" />
 		<DO_ITEM Index="59" Name="" />
+    <DO_ITEM Index="60" Name="" />
+    <DO_ITEM Index="61" Name="" />
+    <DO_ITEM Index="62" Name="" />
+    <DO_ITEM Index="63" Name="" />
+    <DO_ITEM Index="64" Name="" />
+    <DO_ITEM Index="65" Name="" />
+    <DO_ITEM Index="66" Name="" />
+    <DO_ITEM Index="67" Name="" />
+    <DO_ITEM Index="68" Name="" />
+    <DO_ITEM Index="69" Name="" />
+    <DO_ITEM Index="70" Name="" />
+    <DO_ITEM Index="71" Name="" />
+    <DO_ITEM Index="72" Name="" />
+    <DO_ITEM Index="73" Name="" />
+    <DO_ITEM Index="74" Name="" />
+    <DO_ITEM Index="75" Name="" />
+    <DO_ITEM Index="76" Name="" />
+    <DO_ITEM Index="77" Name="" />
+    <DO_ITEM Index="78" Name="" />
+    <DO_ITEM Index="79" Name="" />
+    <DO_ITEM Index="80" Name="" />
+    <DO_ITEM Index="81" Name="" />
+    <DO_ITEM Index="82" Name="" />
+    <DO_ITEM Index="83" Name="" />
+    <DO_ITEM Index="84" Name="" />
+    <DO_ITEM Index="85" Name="" />
+    <DO_ITEM Index="86" Name="" />
+    <DO_ITEM Index="87" Name="" />
+    <DO_ITEM Index="88" Name="" />
+    <DO_ITEM Index="89" Name="" />
+    <DO_ITEM Index="90" Name="" />
+    <DO_ITEM Index="91" Name="" />
+    <DO_ITEM Index="92" Name="" />
+    <DO_ITEM Index="93" Name="" />
+    <DO_ITEM Index="94" Name="" />
+    <DO_ITEM Index="95" Name="" />
+    <DO_ITEM Index="96" Name="" />
+    <DO_ITEM Index="97" Name="" />
+    <DO_ITEM Index="98" Name="" />
+    <DO_ITEM Index="99" Name="" />
+    <DO_ITEM Index="100" Name="DO_Foreline_Heat_PID_AT_Star" Device="" Addr="w6.04" Note="DI-100为1,将DO-100置0" />
+    <DO_ITEM Index="101" Name="DO_Foreline_Heat_PID_AT_Stop" Device="" Addr="w6.05" Note="DI-101为1,将DO-101置0" />
+    <DO_ITEM Index="102" Name="DO_Substrate_Heat_PID_AT_Star" Device="" Addr="w6.06" Note="DI-102为1,将DO-102置0" />
+    <DO_ITEM Index="103" Name="DO_Substrate_Heat_PID_AT_Stop" Device="" Addr="w6.07" Note="DI-103为1,将DO-103置0" />
+    <DO_ITEM Index="104" Name="DO_CHB_Heat_PID_AT_Star" Device="" Addr="w6.08" Note="DI-104为1,将DO-104置0" />
+    <DO_ITEM Index="105" Name="DO_CHB_Heat_PID_AT_Stop" Device="" Addr="w6.09" Note="DI-105为1,将DO-105置0" />
 	</Dig_Out>
 	<Ana_Out>
 		<AO_ITEM Index="0" Name="AO_Generator_Power_Setpoint" BufferOffset="0" Device="" Addr="d1000" Note="0-6000W" />

+ 1 - 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" />

+ 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>
+        <!--Foreline PID Study-->
+        <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" HorizontalAlignment="Center" Height="26" VerticalAlignment="Center">
+                <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="118" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Center">
+                <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="75" Canvas.Top="233" Width="100" HorizontalAlignment="Left" Height="26" VerticalAlignment="Center">
+                <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="275" Canvas.Top="233" Width="100" HorizontalAlignment="Left" Height="26" VerticalAlignment="Center">
+                <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="169" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Top">
+                <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="561" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding ForelineControlTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="561" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="{Binding ForelineMonitorTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="561" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="561" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="561" Canvas.Top="238">
+
+            </TextBlock>
+        </Canvas>
+        <!--Substrate PID Study-->
+        <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="132" Width="70" HorizontalAlignment="Center" Height="26" VerticalAlignment="Top">
+                <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="118" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Center">
+                <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="80" Canvas.Top="234" Width="100" Height="26" HorizontalAlignment="Left" VerticalAlignment="Center">
+                <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="279" Canvas.Top="234" Width="100" Height="26" HorizontalAlignment="Left" VerticalAlignment="Center">
+                <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="169" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Top">
+                <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="561" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding LE1ControlTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="561" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="{Binding LE1MonitorTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="561" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="561" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="561" Canvas.Top="238">
+
+            </TextBlock>
+        </Canvas>
+        <!--CHB PID Study-->
+        <Canvas Background="#FFC5D0D8" Width="800" Height="300" Grid.Row="1" Grid.Column="0">
+            <TextBlock Text="CHB 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="340" Canvas.Top="132" Width="70" HorizontalAlignment="Center" Height="26" VerticalAlignment="Center">
+                <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="442" Canvas.Top="118" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Center">
+                <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="75" Canvas.Top="233" Width="100" HorizontalAlignment="Left" Height="26" VerticalAlignment="Center">
+                <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="275" Canvas.Top="233" Width="100" HorizontalAlignment="Left" Height="26" VerticalAlignment="Center">
+                <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="442" Canvas.Top="169" Width="80" HorizontalAlignment="Center" Height="26" VerticalAlignment="Top">
+                <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="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="561" Canvas.Top="118">
+
+            </TextBlock>
+            <TextBlock Text="{Binding CHBControlTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="118">
+
+            </TextBlock>
+
+            <TextBlock Text="Monitor TC:" FontSize="16"  Canvas.Left="561" Canvas.Top="148" HorizontalAlignment="Left" VerticalAlignment="Center">
+
+            </TextBlock>
+            <TextBlock Text="{Binding CHBMonitorTCTemp}" FontSize="16"  Canvas.Left="701" Canvas.Top="148">
+
+            </TextBlock>
+            <TextBlock Text="Heating" FontSize="16"  Canvas.Left="561" Canvas.Top="178">
+
+            </TextBlock>
+            <TextBlock Text="Learning" FontSize="16"  Canvas.Left="561" Canvas.Top="208">
+
+            </TextBlock>
+            <TextBlock Text="Finish" FontSize="16"  Canvas.Left="561" 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();
+        }
+    }
+}

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

@@ -0,0 +1,274 @@
+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_Forline_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_Forline_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
+
+        #region CHB
+        public float CHBTemperatureSetpoint { get; set; }
+        public void CHBSetHeaterOn()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Wall_Heater_On", true);
+        }
+        public void CHBSetHeaterOff()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Wall_Heater_On", false);
+        }
+        public void CHBSetTemperature(object oj)
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetAoValue32", $"{SystemName.Split('.')[1]}.AO_CHB_Wall_Temperature_Setpoint", CHBTemperatureSetpoint);
+        }
+        public void CHBHeatPIDATStop()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Star", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Stop", true);
+        }
+        public void CHBHeatPIDATStart()
+        {
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Stop", false);
+            InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Star", true);
+        }
+
+
+        [Subscription("DI_CHB_Wall_Heater_On_FB")]
+        public bool CHBHeaterOn { get; set; }
+        [Subscription("DI_CHB_Heat_PID_AT_Running")]
+        public bool CHBHeaterPIDATRunning { get; set; }
+        [Subscription("DI_CHB_Heat_PID_AT_Finished")]
+        public bool CHBHeaterPIDATFinished { get; set; }
+
+        private bool _chbHeaterPIDATStarFB;
+        [Subscription("DI_CHB_Heat_PID_AT_Star_Fb")]
+        public bool CHBHeaterPIDATStarFB
+        {
+            get
+            {
+                return _chbHeaterPIDATStarFB;
+            }
+            set
+            {
+                _chbHeaterPIDATStarFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Star", false);
+                }
+            }
+        }
+
+        private bool _chbHeaterPIDATStopFB;
+        [Subscription("DI_CHB_Heat_PID_AT_Stop_Fb")]
+        public bool CHBHeaterPIDATStopFB
+        {
+            get
+            {
+                return _chbHeaterPIDATStopFB;
+            }
+            set
+            {
+                _chbHeaterPIDATStopFB = value;
+                if (value)
+                {
+                    InvokeClient.Instance.Service.DoOperation("System.SetDoValue", $"{SystemName.Split('.')[1]}.DO_CHB_Heat_PID_AT_Stop", false);
+                }
+            }
+        }
+
+        public float CHBControlTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_CHB_Wall_Control_TC_Temp");
+            }
+        }
+
+        public float CHBMonitorTCTemp
+        {
+            get
+            {
+                return (float)QueryDataClient.Instance.Service.GetData($"IO32.{SystemName.Split('.')[1]}.AI_CHB_Wall_Monitor_TC_Temp");
+            }
+        }
+        #endregion
+    }
+}

+ 1 - 1
VirgoUI/Properties/AssemblyInfo.cs

@@ -51,5 +51,5 @@ using System.Windows;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.0.0.9")]
+[assembly: AssemblyVersion("2.0.1.0")]
 //[assembly: AssemblyFileVersion("1.0.0.0")]

+ 8 - 0
VirgoUI/VirgoUI.csproj

@@ -399,6 +399,10 @@
     </Compile>
     <Compile Include="Models\PMs\PmOverviewViewModel.cs" />
     <Compile Include="Models\PMs\PMParameter.cs" />
+    <Compile Include="Models\PMs\PMPIDView.xaml.cs">
+      <DependentUpon>PMPIDView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Models\PMs\PMPIDViewModel.cs" />
     <Compile Include="Models\PMs\PMTemplateSelector.cs" />
     <Compile Include="Models\PMs\RecipeEditorView.xaml.cs">
       <DependentUpon>RecipeEditorView.xaml</DependentUpon>
@@ -727,6 +731,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Models\PMs\PMPIDView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Models\PMs\RecipeEditorView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>