添加项目文件。

This commit is contained in:
xyy
2026-06-13 14:16:34 +08:00
parent 9df508aa36
commit 3fb35f5814
23 changed files with 1251 additions and 0 deletions

144
Views/MainWindow.xaml Normal file
View File

@@ -0,0 +1,144 @@
<Window x:Class="AciTester.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:AciTester.ViewModels"
Title="ACI测试系统 - 中国药典2025装置3"
Height="768" Width="1024"
WindowStartupLocation="CenterScreen">
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 状态栏 (Row 0) -->
<StatusBar Grid.Row="0">
<StatusBarItem>
<TextBlock Text="状态:"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock Text="{Binding ConnectionStatus}" Foreground="{Binding IsConnected, Converter={StaticResource BoolToColorConverter}}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="流量:"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock Text="{Binding CurrentFlow, StringFormat='{}{0:F2} L/min'}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="泵状态:"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock Text="{Binding IsPumpRunning, Converter={StaticResource BoolToStringConverter}}"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="倒计时:" Visibility="{Binding IsTesting, Converter={StaticResource BoolToVisibilityConverter}}"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock Text="{Binding RemainingSeconds, StringFormat='{}{0} s'}" Visibility="{Binding IsTesting, Converter={StaticResource BoolToVisibilityConverter}}"/>
</StatusBarItem>
</StatusBar>
<!-- 实时监测参数 (Row 1) -->
<GroupBox Header="实时监测参数" Grid.Row="1" Margin="0,5">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Vertical">
<TextBlock Text="流量 (L/min)" FontWeight="Bold"/>
<TextBlock Text="{Binding RealTime.CalibratedFlow, StringFormat='{}{0:F2}'}" FontSize="18" Foreground="Blue"/>
<TextBlock Text="(目标: 28.3)" FontSize="10" Foreground="Gray"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Vertical">
<TextBlock Text="温度 (℃)" FontWeight="Bold"/>
<TextBlock Text="{Binding RealTime.Temperature, StringFormat='{}{0:F1}'}" FontSize="18"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Vertical">
<TextBlock Text="泵端压力 (kPa)" FontWeight="Bold"/>
<TextBlock Text="{Binding RealTime.PumpPressure, StringFormat='{}{0:F2}'}" FontSize="18"/>
</StackPanel>
<StackPanel Grid.Column="3" Orientation="Vertical">
<TextBlock Text="撞击器端压力 (kPa)" FontWeight="Bold"/>
<TextBlock Text="{Binding RealTime.ImpactorPressure, StringFormat='{}{0:F2}'}" FontSize="18"/>
</StackPanel>
</Grid>
<Separator Margin="0,5"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="压差: " FontWeight="Bold"/>
<TextBlock Text="{Binding RealTime.DifferentialPressure, StringFormat='{}{0:F2} kPa'}" Foreground="DarkRed"/>
</StackPanel>
</StackPanel>
</GroupBox>
<!-- 主内容 (Row 2) -->
<Grid Grid.Row="2" Margin="0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<!-- 左侧控制区 -->
<StackPanel Grid.Column="0" Margin="5">
<GroupBox Header="通讯控制">
<StackPanel>
<Button Command="{Binding ConnectCommand}" Content="连接PLC" Width="100" Margin="5"/>
<Button Command="{Binding DisconnectCommand}" Content="断开连接" Width="100" Margin="5"/>
</StackPanel>
</GroupBox>
<GroupBox Header="采样参数" Margin="0,10">
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="采样时间(秒):" VerticalAlignment="Center" Width="100"/>
<TextBox Text="{Binding SampleTimeSeconds}" Width="60" IsEnabled="{Binding IsTesting, Converter={StaticResource InverseBoolConverter}}"/>
</StackPanel>
<Button Command="{Binding StartTestCommand}" Content="开始测试" Width="100" Margin="5"
IsEnabled="{Binding IsTesting, Converter={StaticResource InverseBoolConverter}}"/>
<TextBlock Text="测试进行中..." Visibility="{Binding IsTesting, Converter={StaticResource BoolToVisibilityConverter}}"/>
</StackPanel>
</GroupBox>
<GroupBox Header="数据分析">
<StackPanel>
<Button Command="{Binding CalculateCommand}" Content="计算结果" Width="100" Margin="5"/>
<Button Command="{Binding ExportReportCommand}" Content="导出报告" Width="100" Margin="5"/>
</StackPanel>
</GroupBox>
</StackPanel>
<!-- 右侧称重数据表格 -->
<ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding Stages}" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="层级" Binding="{Binding StageName}" IsReadOnly="True"/>
<DataGridTextColumn Header="截止直径(μm)" Binding="{Binding CutoffDiameter, StringFormat='{}{0:F1}'}" IsReadOnly="True"/>
<DataGridTextColumn Header="测前质量(g)" Binding="{Binding InitialWeight, StringFormat='{}{0:F4}'}"/>
<DataGridTextColumn Header="测后质量(g)" Binding="{Binding FinalWeight, StringFormat='{}{0:F4}'}"/>
<DataGridTextColumn Header="净重(g)" Binding="{Binding NetWeight, StringFormat='{}{0:F6}'}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
<!-- 结果显示 (Row 3) -->
<Border Grid.Row="3" BorderBrush="Gray" BorderThickness="1" Margin="0,5,0,0" Padding="5">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="微细粒子剂量(FPD): " FontWeight="Bold"/>
<TextBlock Text="{Binding CurrentResult.FineParticleDose, StringFormat='{}{0:F2} mg'}" Margin="5,0,20,0"/>
<TextBlock Text="微细粒子分数(FPF): " FontWeight="Bold"/>
<TextBlock Text="{Binding CurrentResult.FineParticleFraction, StringFormat='{}{0:F2} %'}"/>
</StackPanel>
</Border>
</Grid>
</Window>