1添加真值表XML配置
2添加实时气体流量显示界面,封装单独用户控件 3添加后台数据绑定,添加后台数据 4修改S02数据不显示问题
This commit is contained in:
parent
b412ddd3ba
commit
cab224c9f9
File diff suppressed because it is too large
Load Diff
@ -491,7 +491,7 @@ namespace SicModules.PMs
|
||||
_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");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -51,7 +51,7 @@ using System.Windows;
|
||||
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||
// 方法是按如下所示使用“*”: :
|
||||
|
||||
[assembly: AssemblyVersion("1.1.0.60824")]
|
||||
[assembly: AssemblyVersion("1.1.0.60825")]
|
||||
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
||||
|
||||
|
||||
|
||||
@ -2750,7 +2750,7 @@
|
||||
<Label
|
||||
Canvas.Left="143"
|
||||
Canvas.Top="627"
|
||||
Content="Mo(CO)6" />
|
||||
Content="MO(CO)6" />
|
||||
<controlRT:ValveBig
|
||||
Canvas.Left="143"
|
||||
Canvas.Top="426"
|
||||
|
||||
@ -55,6 +55,6 @@ using System.Windows;
|
||||
// by using the '*' as shown below:
|
||||
|
||||
|
||||
[assembly: AssemblyVersion("1.1.0.60824")]
|
||||
[assembly: AssemblyVersion("1.1.0.60825")]
|
||||
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -234,6 +234,7 @@
|
||||
<Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerRegulationMode.cs" />
|
||||
<Compile Include="Aitex\Core\Common\DeviceData\EnumRfPowerWorkMode.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\IDeviceData.cs" />
|
||||
<Compile Include="Aitex\Core\Common\DeviceData\IoDevice\AITProcessRunData.cs" />
|
||||
|
||||
@ -64,7 +64,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
|
||||
SC.RegisterValueChangedCallback($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", OnGasFlowRatioSCChanged);
|
||||
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}.FeedBack", () => GasFlowFeedBack);
|
||||
@ -93,9 +93,9 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
|
||||
{
|
||||
|
||||
//PN2是特殊计算
|
||||
if (GasName == "PN2_Run")
|
||||
if (GasName == "O2_Run")
|
||||
_feedBack += GasTrueTableRowList[i].AccumulationPN2Run();
|
||||
else if (GasName == "PN2_Vent")
|
||||
else if (GasName == "O2_Vent")
|
||||
{
|
||||
double cache = GasTrueTableRowList[i].AccumulationPN2Run();
|
||||
if (i == 2)
|
||||
|
||||
@ -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;
|
||||
|
||||
foreach (var rowOutputs in XMLOutputList)
|
||||
@ -111,13 +111,7 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
|
||||
|
||||
foreach (var rowOutputs in XMLOutputList)
|
||||
{
|
||||
if (rowOutputs.ControlName.Contains("Mfc5"))
|
||||
{
|
||||
//Output配置的单元格
|
||||
var _mfc = DEVICE.GetDevice<IoMFC>($"{ModuleName}.{rowOutputs.ControlName}");
|
||||
volue += _mfc.FeedBack * rowOutputs.Value;
|
||||
}
|
||||
else if (rowOutputs.ControlName.Contains("Mfc6"))
|
||||
if (rowOutputs.ControlName.Contains("Mfc6"))
|
||||
{
|
||||
//特殊气体流量
|
||||
var _mfc3 = DEVICE.GetDevice<IoMFC>($"{ModuleName}.Mfc3");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1585,102 +1585,6 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
|
||||
public bool IsTCSRunMode => V53.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
|
||||
|
||||
[Subscription("ProcessDataStat.RealtimeList")]
|
||||
@ -1689,6 +1593,38 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
|
||||
#endregion
|
||||
|
||||
#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>
|
||||
/// 返回ViewModel绑定的视图对象。
|
||||
/// </summary>
|
||||
|
||||
64
Framework/MECF.Framework.UI.Core/Control/GasFlow.xaml
Normal file
64
Framework/MECF.Framework.UI.Core/Control/GasFlow.xaml
Normal 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>
|
||||
28
Framework/MECF.Framework.UI.Core/Control/GasFlow.xaml.cs
Normal file
28
Framework/MECF.Framework.UI.Core/Control/GasFlow.xaml.cs
Normal 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));
|
||||
|
||||
}
|
||||
}
|
||||
57
Framework/MECF.Framework.UI.Core/Control/GasFlow2.xaml
Normal file
57
Framework/MECF.Framework.UI.Core/Control/GasFlow2.xaml
Normal 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>
|
||||
28
Framework/MECF.Framework.UI.Core/Control/GasFlow2.xaml.cs
Normal file
28
Framework/MECF.Framework.UI.Core/Control/GasFlow2.xaml.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
@ -108,6 +108,12 @@
|
||||
<DependentUpon>CheckValue2.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<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">
|
||||
<DependentUpon>GasSplitterControl.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@ -449,6 +455,14 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<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">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user