1添加真值表XML配置

2添加实时气体流量显示界面,封装单独用户控件
3添加后台数据绑定,添加后台数据
4修改S02数据不显示问题
This commit is contained in:
hanqiangqiang 2026-08-25 14:49:11 +08:00
parent b412ddd3ba
commit cab224c9f9
16 changed files with 3495 additions and 3439 deletions

File diff suppressed because it is too large Load Diff

View File

@ -491,7 +491,7 @@ namespace SicModules.PMs
_pmProcessAbort = new PMProcessAbortRoutine(ModuleHelper.Converter(Module), this); _pmProcessAbort = new PMProcessAbortRoutine(ModuleHelper.Converter(Module), this);
//初始化加载真值表 //初始化加载真值表
//PMGasTrueTable = new PMGasTrueTableInitialize(Module, $"Config\\PM\\{Module}\\RealtimeGasFlow{Module}.xml"); PMGasTrueTable = new PMGasTrueTableInitialize(Module, $"Config\\PM\\{Module}\\RealtimeGasFlow{Module}.xml");
} }

View File

@ -51,7 +51,7 @@ using System.Windows;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: : // 方法是按如下所示使用“*”: :
[assembly: AssemblyVersion("1.1.0.60824")] [assembly: AssemblyVersion("1.1.0.60825")]
[assembly: AssemblyInformationalVersion("MoS2无EFEM")] [assembly: AssemblyInformationalVersion("MoS2无EFEM")]

View File

@ -2750,7 +2750,7 @@
<Label <Label
Canvas.Left="143" Canvas.Left="143"
Canvas.Top="627" Canvas.Top="627"
Content="Mo(CO)6" /> Content="MO(CO)6" />
<controlRT:ValveBig <controlRT:ValveBig
Canvas.Left="143" Canvas.Left="143"
Canvas.Top="426" Canvas.Top="426"

View File

@ -55,6 +55,6 @@ using System.Windows;
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.1.0.60824")] [assembly: AssemblyVersion("1.1.0.60825")]
[assembly: AssemblyInformationalVersion("MoS2无EFEM")] [assembly: AssemblyInformationalVersion("MoS2无EFEM")]

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace MECF.Framework.Common.Aitex.Core.Common.DeviceData
{
public class GasFlowData
{
private const double RUN_LOWER_LIMIT = 2.0;
public string GasName { get; set; }
public double Flow { get; set; }
public double RunFlow { get; set; }
public double VentFlow { get; set; }
public double Mol { get; set; }
public bool IsRun => Flow > RUN_LOWER_LIMIT;
public Visibility RunVisibility => RunFlow > RUN_LOWER_LIMIT ? Visibility.Visible : Visibility.Hidden;
}
}

View File

@ -234,6 +234,7 @@
<Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerRegulationMode.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerRegulationMode.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerWorkMode.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerWorkMode.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\FlowMeterAlarmItem.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\FlowMeterAlarmItem.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\GasFlowData.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\GasFlowSum.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\GasFlowSum.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\IDeviceData.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\IDeviceData.cs" />
<Compile Include="Aitex\Core\Common\DeviceData\IoDevice\AITProcessRunData.cs" /> <Compile Include="Aitex\Core\Common\DeviceData\IoDevice\AITProcessRunData.cs" />

View File

@ -64,7 +64,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
SC.RegisterValueChangedCallback($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", OnGasFlowRatioSCChanged); SC.RegisterValueChangedCallback($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", OnGasFlowRatioSCChanged);
GasFlowRatioValue = SC.SafeGetValue<double>($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", 1d); GasFlowRatioValue = SC.SafeGetValue<double>($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", 1d);
if (GasName == "PN2_Vent") if (GasName == "O2_Vent")
DATA.Subscribe($"{ModuleName}.GasRealTimeFlow.{GasName}.FeedBackSpecial", () => PN2_VentSpecial, SubscriptionAttribute.FLAG.IgnoreSaveDB);//仅作为显示用,不存储数据库 DATA.Subscribe($"{ModuleName}.GasRealTimeFlow.{GasName}.FeedBackSpecial", () => PN2_VentSpecial, SubscriptionAttribute.FLAG.IgnoreSaveDB);//仅作为显示用,不存储数据库
DATA.Subscribe($"{ModuleName}.GasRealTimeFlow.{GasName}.FeedBack", () => GasFlowFeedBack); DATA.Subscribe($"{ModuleName}.GasRealTimeFlow.{GasName}.FeedBack", () => GasFlowFeedBack);
@ -93,9 +93,9 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
{ {
//PN2是特殊计算 //PN2是特殊计算
if (GasName == "PN2_Run") if (GasName == "O2_Run")
_feedBack += GasTrueTableRowList[i].AccumulationPN2Run(); _feedBack += GasTrueTableRowList[i].AccumulationPN2Run();
else if (GasName == "PN2_Vent") else if (GasName == "O2_Vent")
{ {
double cache = GasTrueTableRowList[i].AccumulationPN2Run(); double cache = GasTrueTableRowList[i].AccumulationPN2Run();
if (i == 2) if (i == 2)

View File

@ -46,7 +46,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
} }
if (GasName.Contains("PN2"))//PN2是特殊计算不能在此初始化 if (GasName=="O2_Run" || GasName == "O2_Vent")//PN2是特殊计算不能在此初始化
return; return;
foreach (var rowOutputs in XMLOutputList) foreach (var rowOutputs in XMLOutputList)
@ -111,13 +111,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
foreach (var rowOutputs in XMLOutputList) foreach (var rowOutputs in XMLOutputList)
{ {
if (rowOutputs.ControlName.Contains("Mfc5")) if (rowOutputs.ControlName.Contains("Mfc6"))
{
//Output配置的单元格
var _mfc = DEVICE.GetDevice<IoMFC>($"{ModuleName}.{rowOutputs.ControlName}");
volue += _mfc.FeedBack * rowOutputs.Value;
}
else if (rowOutputs.ControlName.Contains("Mfc6"))
{ {
//特殊气体流量 //特殊气体流量
var _mfc3 = DEVICE.GetDevice<IoMFC>($"{ModuleName}.Mfc3"); var _mfc3 = DEVICE.GetDevice<IoMFC>($"{ModuleName}.Mfc3");

View File

@ -2,6 +2,7 @@
x:Class="MECF.Framework.UI.Client.CenterViews.Modules.PM.PMProcessView" x:Class="MECF.Framework.UI.Client.CenterViews.Modules.PM.PMProcessView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:color="clr-namespace:MECF.Framework.UI.Client.CenterViews.Maintain"
xmlns:control="clr-namespace:Aitex.Core.UI.Control;assembly=MECF.Framework.UI.Core" xmlns:control="clr-namespace:Aitex.Core.UI.Control;assembly=MECF.Framework.UI.Core"
xmlns:controls="clr-namespace:MECF.Framework.UI.Client.Ctrlib.Controls" xmlns:controls="clr-namespace:MECF.Framework.UI.Client.Ctrlib.Controls"
xmlns:cv="clr-namespace:MECF.Framework.UI.Core.Converters;assembly=MECF.Framework.UI.Core" xmlns:cv="clr-namespace:MECF.Framework.UI.Core.Converters;assembly=MECF.Framework.UI.Core"
@ -14,7 +15,6 @@
xmlns:micro="clr-namespace:Caliburn.Micro" xmlns:micro="clr-namespace:Caliburn.Micro"
xmlns:userControls1="clr-namespace:Sicentury.Core.UserControls;assembly=Sicentury.Core" xmlns:userControls1="clr-namespace:Sicentury.Core.UserControls;assembly=Sicentury.Core"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:color="clr-namespace:MECF.Framework.UI.Client.CenterViews.Maintain"
d:Background="#91b0cd" d:Background="#91b0cd"
d:DesignHeight="750" d:DesignHeight="750"
d:DesignWidth="1920" d:DesignWidth="1920"
@ -23,8 +23,14 @@
lex:ResxLocalizationProvider.DefaultDictionary="lang_pm" lex:ResxLocalizationProvider.DefaultDictionary="lang_pm"
mc:Ignorable="d"> mc:Ignorable="d">
<UserControl.Resources> <UserControl.Resources>
<color:BooleanToUIColorConverter x:Key="boolToUIColorConverter" FalseColor="LawnGreen" TrueColor="Black"/> <color:BooleanToUIColorConverter
<color:BooleanToUIColorConverter x:Key="boolToUIColorConverter2" FalseColor="LawnGreen" TrueColor="White"/> x:Key="boolToUIColorConverter"
FalseColor="LawnGreen"
TrueColor="Black" />
<color:BooleanToUIColorConverter
x:Key="boolToUIColorConverter2"
FalseColor="LawnGreen"
TrueColor="White" />
<cv:BoolVisibilityConverter x:Key="BoolVisibilityConverter" /> <cv:BoolVisibilityConverter x:Key="BoolVisibilityConverter" />
<HierarchicalDataTemplate x:Key="FolderTemplate" ItemsSource="{Binding Files}"> <HierarchicalDataTemplate x:Key="FolderTemplate" ItemsSource="{Binding Files}">
<StackPanel Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=DataContext}"> <StackPanel Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=DataContext}">
@ -141,7 +147,11 @@
<RowDefinition Height="300" /> <RowDefinition Height="300" />
<RowDefinition /> <RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Canvas Grid.Row="1" x:Name="腔体" HorizontalAlignment="Left" Margin="154,-190,0,0"> <Canvas
x:Name="腔体"
Grid.Row="1"
Margin="154,-190,0,0"
HorizontalAlignment="Left">
<Rectangle <Rectangle
Canvas.Top="100" Canvas.Top="100"
Width="360" Width="360"
@ -804,7 +814,6 @@
</Grid> </Grid>
</StackPanel> </StackPanel>
</Canvas> </Canvas>
<Canvas <Canvas
x:Name="反应气体源" x:Name="反应气体源"
Canvas.Left="-61" Canvas.Left="-61"
@ -817,519 +826,53 @@
<Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="HorizontalAlignment" Value="Center" />
</Style> </Style>
</Canvas.Resources> </Canvas.Resources>
<TextBlock <TextBlock
Canvas.Left="-50" Canvas.Left="420"
Canvas.Top="177" Canvas.Top="180"
Text="{lex:Loc ID_TXT_GasMol}" />
<TextBlock
Canvas.Left="500"
Canvas.Top="177"
Text="{lex:Loc ID_TXT_GasMol}" />
<TextBlock
Canvas.Left="415"
Canvas.Top="177"
Text="{lex:Loc ID_TXT_GasSource}" /> Text="{lex:Loc ID_TXT_GasSource}" />
<TextBlock <TextBlock
Canvas.Left="21" Canvas.Left="500"
Canvas.Top="175" Canvas.Top="180"
Text="Vent" />
<TextBlock
Canvas.Left="-60"
Canvas.Top="180"
Text="Vent" />
<TextBlock
Canvas.Left="11"
Canvas.Top="180"
Text="{lex:Loc ID_TXT_GasSource}" /> Text="{lex:Loc ID_TXT_GasSource}" />
<TextBlock <TextBlock
Canvas.Left="350" Canvas.Left="350"
Canvas.Top="177" Canvas.Top="180"
Text="{lex:Loc ID_TXT_GasFlow}" /> Text="Run" />
<TextBlock <TextBlock
Canvas.Left="96" Canvas.Left="90"
Canvas.Top="175" Canvas.Top="180"
Text="{lex:Loc ID_TXT_GasFlow}" /> Text="Run" />
<StackPanel Canvas.Left="264" Canvas.Top="200">
<control:GasFlow FlowData="{Binding H2FlowData}" />
<control:GasFlow FlowData="{Binding N2FlowData}" />
<control:GasFlow FlowData="{Binding H2SFlowData}" />
<control:GasFlow FlowData="{Binding H2SeFlowData}" />
<control:GasFlow FlowData="{Binding CS2FlowData}" />
</StackPanel>
<StackPanel Canvas.Left="-85" Canvas.Top="200">
<control:GasFlow2 FlowData="{Binding O2FlowData}" />
<control:GasFlow2 FlowData="{Binding MOFlowData}" />
<control:GasFlow2 FlowData="{Binding WCO6FlowData}" />
<control:GasFlow2 FlowData="{Binding MOCO6FlowData}" />
<control:GasFlow2 FlowData="{Binding SO2FlowData}" />
</StackPanel>
<control:FlowPipeV2 <control:FlowPipeV2
Canvas.Left="134" Canvas.Left="94"
Canvas.Top="204" Canvas.Top="240"
Width="62" Width="220"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISC2H4Flow}"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="134"
Canvas.Top="204"
Width="62"
Height="9"
Fill="{Binding C2H4FlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISC2H4Flow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="-75"
Canvas.Top="198"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding C2H4Color}" Text="{Binding C2H4Mol, StringFormat=F4}" />
</Border>
<Border
Canvas.Top="198"
Width="75"
Height="26"
Background="Cyan"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding C2H4Color}" Text="{Binding CarbonSource}" />
</Border>
<Border
Canvas.Left="75"
Canvas.Top="198"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding C2H4Color}" Text="{Binding C2H4Flow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="134"
Canvas.Top="228"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISSiH4Flow}"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="134"
Canvas.Top="228"
Width="62"
Height="9"
Fill="{Binding SIH4FlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISSiH4Flow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="-75"
Canvas.Top="223"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding SIH4Color}" Text="{Binding SIH4Mol, StringFormat=N4}" />
</Border>
<Border
Canvas.Top="223"
Width="75"
Height="26"
Background="Cyan"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding SIH4Color}" Text="SiH4" />
</Border>
<Border
Canvas.Left="75"
Canvas.Top="223"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding SIH4Color}" Text="{Binding SiH4Flow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="134"
Canvas.Top="254"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISHCLFlow}"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="134"
Canvas.Top="254"
Width="62"
Height="9"
Fill="{Binding HCLFlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISHCLFlow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="-75"
Canvas.Top="247"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding HCLColor}" Text="{Binding HCLMol, StringFormat=N4}" />
</Border>
<Border
Canvas.Top="247"
Width="75"
Height="26"
Background="Cyan"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding HCLColor}" Text="HCL" />
</Border>
<Border
Canvas.Left="75"
Canvas.Top="247"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding HCLColor}" Text="{Binding HCLFlow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="134"
Canvas.Top="280"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISPN2Flow}"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="134"
Canvas.Top="280"
Width="62"
Height="9"
Fill="{Binding PN2FlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISPN2Flow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="-75"
Canvas.Top="271"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding PN2Color}" Text="{Binding PN2Mol, StringFormat=N4}" />
</Border>
<Border
Canvas.Top="271"
Width="75"
Height="26"
Background="Cyan"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding PN2Color}" Text="PN2" />
</Border>
<Border
Canvas.Left="75"
Canvas.Top="271"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding PN2Color}" Text="{Binding PN2Flow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="264"
Canvas.Top="204"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISH2Flow}"
IsReverse="True"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="264"
Canvas.Top="204"
Width="62"
Height="9"
Fill="Gold"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISH2Flow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="401"
Canvas.Top="197"
Width="75"
Height="26"
Background="Gold"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="H2" />
</Border>
<Border
Canvas.Left="476"
Canvas.Top="197"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding H2Mol, StringFormat=N4}" />
</Border>
<Border
Canvas.Left="326"
Canvas.Top="197"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding H2Flow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="264"
Canvas.Top="228"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISArFlow}"
IsReverse="True"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="264"
Canvas.Top="228"
Width="62"
Height="9"
Fill="Gold"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISArFlow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="401"
Canvas.Top="223"
Width="75"
Height="26"
Background="Gold"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="Ar" />
</Border>
<Border
Canvas.Left="476"
Canvas.Top="223"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding ArMol, StringFormat=N4}" />
</Border>
<Border
Canvas.Left="326"
Canvas.Top="223"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding ArFlow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="264"
Canvas.Top="254"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISTMAFlow}"
IsReverse="True"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="264"
Canvas.Top="254"
Width="62"
Height="9"
Fill="{Binding TMAFlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISTMAFlow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="401"
Canvas.Top="249"
Width="75"
Height="26"
Background="Gold"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TMAColor}" Text="TMA" />
</Border>
<Border
Canvas.Left="476"
Canvas.Top="249"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TMAColor}" Text="{Binding TMAMol, StringFormat=N4}" />
</Border>
<Border
Canvas.Left="326"
Canvas.Top="249"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TMAColor}" Text="{Binding TMAFlow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="264"
Canvas.Top="280"
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="{Binding ISTCSFlow}"
IsReverse="True"
RenderTransformOrigin="0.5,0.5">
<control:FlowPipeV2.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</control:FlowPipeV2.RenderTransform>
</control:FlowPipeV2>
<Rectangle
Canvas.Left="264"
Canvas.Top="280"
Width="62"
Height="9"
Fill="{Binding TCSFlowColor}"
FlowDirection="RightToLeft"
Opacity="0.85"
OverridesDefaultStyle="False"
Stroke="Gray"
Visibility="{Binding ISTCSFlow, Converter={StaticResource BoolVisibilityConverter}}" />
<Border
Canvas.Left="401"
Canvas.Top="275"
Width="75"
Height="26"
Background="Gold"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TCSColor}" Text="TCS" />
</Border>
<Border
Canvas.Left="476"
Canvas.Top="275"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TCSColor}" Text="{Binding TCSMol, StringFormat=N4}" />
</Border>
<Border
Canvas.Left="326"
Canvas.Top="275"
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Foreground="{Binding TCSColor}" Text="{Binding TCSFlow, StringFormat={}{0:f1}}" />
</Border>
<control:FlowPipeV2
Canvas.Left="106"
Canvas.Top="230"
Width="196"
Height="18" Height="18"
FlowOrientation="Vertical" FlowOrientation="Vertical"
IsFlowing="True" IsFlowing="True"
@ -1345,9 +888,9 @@
</control:FlowPipeV2> </control:FlowPipeV2>
<control:FlowPipeV2 <control:FlowPipeV2
Canvas.Left="164" Canvas.Left="152"
Canvas.Top="230" Canvas.Top="240"
Width="196" Width="220"
Height="18" Height="18"
FlowOrientation="Vertical" FlowOrientation="Vertical"
IsFlowing="True" IsFlowing="True"
@ -1365,9 +908,9 @@
Canvas.Left="196" Canvas.Left="196"
Canvas.Top="138" Canvas.Top="138"
Width="15" Width="15"
Height="197" Height="220"
Fill="Cyan" Fill="Cyan"
Opacity="0.85" Opacity="0.8"
OverridesDefaultStyle="False" OverridesDefaultStyle="False"
RenderTransformOrigin="6,0.517" RenderTransformOrigin="6,0.517"
Stroke="Transparent" /> Stroke="Transparent" />
@ -1375,18 +918,22 @@
Canvas.Left="255" Canvas.Left="255"
Canvas.Top="138" Canvas.Top="138"
Width="15" Width="15"
Height="197" Height="220"
Fill="Gold" Fill="Gold"
Opacity="0.85" Opacity="0.8"
OverridesDefaultStyle="False" OverridesDefaultStyle="False"
RenderTransformOrigin="6,0.517" RenderTransformOrigin="6,0.517"
Stroke="Transparent" /> Stroke="Transparent" />
</Canvas> </Canvas>
</Canvas> </Canvas>
<Grid Grid.Row="0" Grid.Column="0" <Grid
Grid.Row="0"
Grid.Column="0"
Margin="0,10,0,0"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Top" Margin="0,10,0,0"> VerticalAlignment="Top">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="24" /> <RowDefinition Height="24" />
<RowDefinition Height="32" /> <RowDefinition Height="32" />
@ -1418,8 +965,8 @@
BorderBrush="{DynamicResource Table_BD}" BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1"> BorderThickness="1,0,1,1">
<TextBlock <TextBlock
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
VerticalAlignment="Center" VerticalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
FontSize="13" FontSize="13"
Foreground="{DynamicResource FG_Black}" Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc {Binding RecipeToolTip2, FallbackValue=Unknown}}" Text="{lex:Loc {Binding RecipeToolTip2, FallbackValue=Unknown}}"
@ -1435,9 +982,9 @@
BorderBrush="{DynamicResource Table_BD}" BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1"> BorderThickness="0,0,1,1">
<TextBlock <TextBlock
MinWidth="50"
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="13" FontSize="13"
MinWidth="50"
Foreground="{Binding ReadRecipeFromLocal, Converter={StaticResource boolToUIColorConverter}}" Foreground="{Binding ReadRecipeFromLocal, Converter={StaticResource boolToUIColorConverter}}"
Text="{Binding DisplayingRecipeName, TargetNullValue=empty}" Text="{Binding DisplayingRecipeName, TargetNullValue=empty}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
@ -1737,7 +1284,7 @@
</Border> </Border>
</Grid> </Grid>
<Grid Grid.Column="1" Grid.RowSpan="2"> <Grid Grid.RowSpan="2" Grid.Column="1">
<TabControl> <TabControl>
<TabItem Header="{lex:Loc ID_TXT_Recipe}" IsSelected="True"> <TabItem Header="{lex:Loc ID_TXT_Recipe}" IsSelected="True">
<Grid> <Grid>
@ -1762,20 +1309,31 @@
Click="BtnLockRecipe_OnClick" Click="BtnLockRecipe_OnClick"
Content="{lex:Loc ID_BTN_LockRecipe_Content}" Content="{lex:Loc ID_BTN_LockRecipe_Content}"
ToolTip="{lex:Loc ID_BTN_LockRecipe_ToolTip}" /> ToolTip="{lex:Loc ID_BTN_LockRecipe_ToolTip}" />
<Border lex:ResxLocalizationProvider.DefaultDictionary="lang_terms" CornerRadius="4" Width="140" Height="40" BorderThickness="2" Margin="3" Background="{Binding ReadRecipeFromLocal,Converter={StaticResource boolToUIColorConverter2}}"> <Border
<TextBlock Text="{lex:Loc {Binding RecipeToolTip2, FallbackValue=Unknown}}" FontSize="16" VerticalAlignment="Center" HorizontalAlignment="Center"/> Width="140"
Height="40"
Margin="3"
lex:ResxLocalizationProvider.DefaultDictionary="lang_terms"
Background="{Binding ReadRecipeFromLocal, Converter={StaticResource boolToUIColorConverter2}}"
BorderThickness="2"
CornerRadius="4">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="16"
Text="{lex:Loc {Binding RecipeToolTip2, FallbackValue=Unknown}}" />
</Border> </Border>
<Button <Button
Width="150" Width="150"
Height="30" Height="30"
Margin="0" Margin="0"
micro:Message.Attach="PushRecipeToCurrentProcess()"
HorizontalAlignment="Left" HorizontalAlignment="Left"
micro:Message.Attach="PushRecipeToCurrentProcess()"
Content="{lex:Loc ID_BTN_UpdateRecipeInProcess_Content}" Content="{lex:Loc ID_BTN_UpdateRecipeInProcess_Content}"
IsEnabled="{Binding IsAllowPush}" IsEnabled="{Binding IsAllowPush}"
Visibility="{Binding AllowRipRecipe}" ToolTip="{lex:Loc ID_BTN_UpdateRecipeInProcess_ToolTip}"
ToolTip="{lex:Loc ID_BTN_UpdateRecipeInProcess_ToolTip}" /> Visibility="{Binding AllowRipRecipe}" />
<!--<Label Margin="5,0" Content="{Binding CurrentRecipe.FullName}" FontSize="15" VerticalAlignment="Center"></Label>--> <!--<Label Margin="5,0" Content="{Binding CurrentRecipe.FullName}" FontSize="15" VerticalAlignment="Center"></Label>-->
</StackPanel> </StackPanel>
@ -1786,16 +1344,33 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- 更新PM正在Run的配方到下表中的配方 --> <!-- 更新PM正在Run的配方到下表中的配方 -->
<Grid Height="40" Grid.Column="1" HorizontalAlignment="Right"> <Grid
Grid.Column="1"
Height="40"
HorizontalAlignment="Right">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="200" /> <ColumnDefinition Width="200" />
<ColumnDefinition Width="140" /> <ColumnDefinition Width="140" />
<ColumnDefinition Width="110" /> <ColumnDefinition Width="110" />
<ColumnDefinition Width="110" /> <ColumnDefinition Width="110" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="{Binding RecipeDifferenceVisiblity}"> <StackPanel
<Image Height="20" Width="20" Source="/MECF.Framework.UI.Client;component/Resources/Images/warning.png" Stretch="Uniform"/> Grid.Column="0"
<TextBlock Foreground="Red" Text="{lex:Loc ID_TXT_Differ_With_Source}" Margin="5" HorizontalAlignment="Right" VerticalAlignment="Center"/> HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Orientation="Horizontal"
Visibility="{Binding RecipeDifferenceVisiblity}">
<Image
Width="20"
Height="20"
Source="/MECF.Framework.UI.Client;component/Resources/Images/warning.png"
Stretch="Uniform" />
<TextBlock
Margin="5"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Foreground="Red"
Text="{lex:Loc ID_TXT_Differ_With_Source}" />
</StackPanel> </StackPanel>
<Border <Border
Grid.Column="1" Grid.Column="1"
@ -1835,8 +1410,8 @@
Height="30" Height="30"
Margin="5,0" Margin="5,0"
micro:Message.Attach="SaveToBaselineRecipe()" micro:Message.Attach="SaveToBaselineRecipe()"
IsEnabled="{Binding IsAllowSave}"
Content="{lex:Loc ID_TXT_SaveToLocal}" Content="{lex:Loc ID_TXT_SaveToLocal}"
IsEnabled="{Binding IsAllowSave}"
ToolTip="{lex:Loc ID_BTN_Save_ToolTip}" ToolTip="{lex:Loc ID_BTN_Save_ToolTip}"
Visibility="{Binding AllowSaveRecipe, Converter={StaticResource BoolVisibilityConverter}}" /> Visibility="{Binding AllowSaveRecipe, Converter={StaticResource BoolVisibilityConverter}}" />
</Border> </Border>
@ -1939,7 +1514,7 @@
<StackPanel Orientation="Vertical" Grid.ColumnSpan="2"> <StackPanel Grid.ColumnSpan="2" Orientation="Vertical">
<StackPanel Width="260" Margin="5,5"> <StackPanel Width="260" Margin="5,5">
<StackPanel.Resources> <StackPanel.Resources>
<Style TargetType="xctk:DateTimeUpDown"> <Style TargetType="xctk:DateTimeUpDown">

View File

@ -1585,102 +1585,6 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
public bool IsTCSRunMode => V53.IsOpen; public bool IsTCSRunMode => V53.IsOpen;
public bool IsTMARunMode => V41.IsOpen && !V42.IsOpen; public bool IsTMARunMode => V41.IsOpen && !V42.IsOpen;
[Subscription("GasRealTimeFlow.Ar_Run.FeedBack")]
public double ArFlow_Run { get; set; }
[Subscription("GasRealTimeFlow.Ar_Vent.FeedBack")]
public double ArFlow_Vent { get; set; }
public double ArFlow => ArFlow_Run > 0 ? ArFlow_Run : ArFlow_Vent;
public double ArMol => GetMol(ArFlow_Run);
[Subscription("GasRealTimeFlow.H2_Run.FeedBack")]
public double H2_Run { get; set; }
[Subscription("GasRealTimeFlow.H2_Vent.FeedBack")]
public double H2_Vent { get; set; }
public double H2Flow => H2_Run > 0 ? H2_Run : H2_Vent;
public double H2Mol => GetMol(H2_Run);
[Subscription("GasRealTimeFlow.PN2_Run.FeedBack")]
public double PN2_Run { get; set; }
[Subscription("GasRealTimeFlow.PN2_Vent.FeedBackSpecial")]
public double PN2_Vent { get; set; }
public double PN2Flow => PN2_Run + PN2_Vent;//=> GetPN2MFCFlow(IsPN2RunMode) * _pn2FlowRatio;
public double PN2Mol => GetMol(PN2Flow);
[Subscription("GasRealTimeFlow.HCL_Run.FeedBack")]
public double HCL_Run { get; set; }
[Subscription("GasRealTimeFlow.HCL_Vent.FeedBack")]
public double HCL_Vent { get; set; }
public double HCLFlow => HCL_Run + HCL_Vent;
public double HCLMol => GetMol(HCLFlow);
[Subscription("GasRealTimeFlow.SiH4_Run.FeedBack")]
public double SiH4_Run { get; set; }
[Subscription("GasRealTimeFlow.SiH4_Vent.FeedBack")]
public double SiH4_Vent { get; set; }
public double SiH4Flow => SiH4_Run + SiH4_Vent;
public double SIH4Mol => GetMol(SiH4Flow);
[Subscription("GasRealTimeFlow.C2H4_Run.FeedBack")]
public double C2H4_Run { get; set; }
[Subscription("GasRealTimeFlow.C2H4_Vent.FeedBack")]
public double C2H4_Vent { get; set; }
public double C2H4Flow => C2H4_Run + C2H4_Vent;
public double C2H4Mol => GetMol(C2H4Flow);
[Subscription("GasRealTimeFlow.TCS_Run.FeedBack")]
public double TCS_Run { get; set; }
[Subscription("GasRealTimeFlow.TCS_Vent.FeedBack")]
public double TCS_Vent { get; set; }
public double TCSFlow => TCS_Run + TCS_Vent;
public double TCSMol => GetMol(TCSFlow);
[Subscription("GasRealTimeFlow.TMA_Run.FeedBack")]
public double TMA_Run { get; set; }
[Subscription("GasRealTimeFlow.TMA_Vent.FeedBack")]
public double TMA_Vent { get; set; }
public double TMAFlow => TMA_Run + TMA_Vent;
public double TMAMol => GetMol(TMAFlow);
public bool ISPN2Flow => PN2Flow > 0 && IsPN2RunMode;
public bool ISHCLFlow => HCLFlow > 0 && IsHCLRunMode;
public bool ISSiH4Flow => SiH4Flow > 0 && IsSiH4RunMode;
public bool ISC2H4Flow => C2H4Flow > 0 && IsC2H4RunMode;
public bool ISArFlow => ArFlow_Run > 0;
public bool ISH2Flow => H2_Run > 0;
public bool ISTCSFlow => TCSFlow > 0 && IsTCSRunMode;
public bool ISTMAFlow => TMAFlow > 0 && IsTMARunMode;
private double GetMol(double fedback)
{
return fedback / 1000 / 22.4141;
}
#region Process Data Statistic #region Process Data Statistic
[Subscription("ProcessDataStat.RealtimeList")] [Subscription("ProcessDataStat.RealtimeList")]
@ -1689,6 +1593,38 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
#endregion #endregion
#region #region
public GasFlowData H2FlowData => GetFlow("H2");
public GasFlowData N2FlowData => GetFlow("N2");
public GasFlowData WCO6FlowData => GetFlow("WCO6");
public GasFlowData MOFlowData => GetFlow("MO");
public GasFlowData MOCO6FlowData => GetFlow("MOCO6");
public GasFlowData CS2FlowData => GetFlow("CS2");
public GasFlowData O2FlowData => GetFlow("O2");
public GasFlowData H2SeFlowData => GetFlow("H2Se");
public GasFlowData SO2FlowData => GetFlow("SO2");
public GasFlowData H2SFlowData => GetFlow("H2S");
private GasFlowData GetFlow(string gasName)
{
var run = (double)QueryDataClient.Instance.Service.GetData($"{SystemName}.GasRealTimeFlow.{gasName}_Run.FeedBack");
var vent = (double)QueryDataClient.Instance.Service.GetData($"{SystemName}.GasRealTimeFlow.{gasName}_Vent.FeedBack");
GasFlowData flow = new GasFlowData
{
GasName = gasName,
RunFlow = run,
VentFlow = vent,
Flow = run + vent,
Mol = GetMol(run)
};
return flow;
}
private double GetMol(double fedback)
{
return fedback / 1000 / 22.4141;
}
/// <summary> /// <summary>
/// 返回ViewModel绑定的视图对象。 /// 返回ViewModel绑定的视图对象。
/// </summary> /// </summary>

View File

@ -0,0 +1,64 @@
<UserControl
x:Class="Aitex.Core.UI.Control.GasFlow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control="clr-namespace:Aitex.Core.UI.Control;assembly=MECF.Framework.UI.Core"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Aitex.Core.UI.Control"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:Background="#91b0cd"
d:DesignHeight="26"
d:DesignWidth="287"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal">
<Grid Visibility="{Binding FlowData.RunVisibility, RelativeSource={RelativeSource AncestorType=UserControl}}">
<local:FlowPipeV2
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="True"
RenderTransformOrigin="0.5,0.5">
<local:FlowPipeV2.RenderTransform>
<TransformGroup>
<RotateTransform Angle="180" />
</TransformGroup>
</local:FlowPipeV2.RenderTransform>
</local:FlowPipeV2>
<Border
Width="62"
Height="9"
Background="Gold"
Opacity="0.8" />
</Grid>
<Border
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding FlowData.RunFlow, StringFormat={}{0:f1}, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
<Border
Width="75"
Height="26"
Background="Gold"
BorderBrush="Gray"
BorderThickness="1"
Opacity="0.8">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding FlowData.GasName, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
<Border
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding FlowData.VentFlow, StringFormat={}{0:f1}, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
</StackPanel>
</UserControl>

View File

@ -0,0 +1,28 @@
using MECF.Framework.Common.Aitex.Core.Common.DeviceData;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Aitex.Core.UI.Control
{
/// <summary>
/// GasFlow.xaml 的交互逻辑
/// </summary>
public partial class GasFlow : UserControl
{
public GasFlow()
{
InitializeComponent();
}
public GasFlowData FlowData
{
get => (GasFlowData)GetValue(FlowDataProperty);
set => SetValue(FlowDataProperty, value);
}
public static readonly DependencyProperty FlowDataProperty =
DependencyProperty.Register(nameof(FlowData), typeof(GasFlowData), typeof(GasFlow), new PropertyMetadata(null));
}
}

View File

@ -0,0 +1,57 @@
<UserControl
x:Class="Aitex.Core.UI.Control.GasFlow2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Aitex.Core.UI.Control"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:Background="#91b0cd"
d:DesignHeight="26"
d:DesignWidth="287"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal">
<Border
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding FlowData.VentFlow, StringFormat={}{0:f1}, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
<Border
Width="75"
Height="26"
Background="Cyan"
BorderBrush="Gray"
BorderThickness="1"
Opacity="0.8">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding FlowData.GasName, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
<Border
Width="75"
Height="26"
Background="LightGray"
BorderBrush="Gray"
BorderThickness="1">
<TextBlock Text="{Binding FlowData.RunFlow, StringFormat={}{0:f1}, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</Border>
<Grid Visibility="{Binding FlowData.RunVisibility, RelativeSource={RelativeSource AncestorType=UserControl}}">
<local:FlowPipeV2
Width="62"
Height="9"
FlowOrientation="Horizontal"
GasType="Slow"
IsFlowing="True"
RenderTransformOrigin="0.5,0.5" />
<Border
Width="62"
Height="9"
Background="Cyan"
Opacity="0.8" />
</Grid>
</StackPanel>
</UserControl>

View File

@ -0,0 +1,28 @@
using MECF.Framework.Common.Aitex.Core.Common.DeviceData;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Aitex.Core.UI.Control
{
/// <summary>
/// GasFlow2.xaml 的交互逻辑
/// </summary>
public partial class GasFlow2 : UserControl
{
public GasFlow2()
{
InitializeComponent();
}
public GasFlowData FlowData
{
get => (GasFlowData)GetValue(FlowDataProperty);
set => SetValue(FlowDataProperty, value);
}
public static readonly DependencyProperty FlowDataProperty =
DependencyProperty.Register(nameof(FlowData), typeof(GasFlowData), typeof(GasFlow2), new PropertyMetadata(null));
}
}

View File

@ -108,6 +108,12 @@
<DependentUpon>CheckValue2.xaml</DependentUpon> <DependentUpon>CheckValue2.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Control\ColorPicker.xaml.cs" /> <Compile Include="Control\ColorPicker.xaml.cs" />
<Compile Include="Control\GasFlow.xaml.cs">
<DependentUpon>GasFlow.xaml</DependentUpon>
</Compile>
<Compile Include="Control\GasFlow2.xaml.cs">
<DependentUpon>GasFlow2.xaml</DependentUpon>
</Compile>
<Compile Include="Control\GasSplitterControl.xaml.cs"> <Compile Include="Control\GasSplitterControl.xaml.cs">
<DependentUpon>GasSplitterControl.xaml</DependentUpon> <DependentUpon>GasSplitterControl.xaml</DependentUpon>
</Compile> </Compile>
@ -449,6 +455,14 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Control\ColorPicker.xaml" /> <Page Include="Control\ColorPicker.xaml" />
<Page Include="Control\GasFlow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Control\GasFlow2.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Control\GasSplitterControl.xaml"> <Page Include="Control\GasSplitterControl.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>