SSPC-Tester/SSPCTester.UI/Views/CurveTestView.xaml

219 lines
14 KiB
Plaintext
Raw Normal View History

<UserControl x:Class="SSPCTester.UI.Views.CurveTestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SSPCTester.UI.ViewModels"
xmlns:ctl="clr-namespace:SSPCTester.UI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=vm:CurveTestViewModel}">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="3*" MinHeight="260" />
<RowDefinition Height="2*" MinHeight="180" />
</Grid.RowDefinitions>
<TextBlock Text="开启与关断曲线(覆盖指标 1.11.6" FontSize="{StaticResource FsH1}" FontWeight="Bold" Margin="0,0,0,12" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 左栏:参数 -->
<Border Style="{StaticResource Card}" Margin="0,0,12,0">
<StackPanel>
<TextBlock Style="{StaticResource CardTitle}" Text="采集参数" />
<TextBlock Style="{StaticResource FieldLabel}" Text="通道" />
<ComboBox ItemsSource="{Binding Channels}" SelectedItem="{Binding SelectedChannel}" Margin="0,0,0,12" />
<TextBlock Style="{StaticResource CardTitle}" Text="合格阈值 (ms)" Margin="0,8,0,12" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
<RowDefinition Height="8" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="开启时间" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Thresholds.MaxOnTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="2" Text="上升时间" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Thresholds.MaxRiseTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="4" Text="关断时间" />
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Thresholds.MaxOffTimeMs}" FontFamily="{StaticResource FontMono}" />
<TextBlock Grid.Row="6" Text="下降时间" />
<TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Thresholds.MaxFallTimeMs}" FontFamily="{StaticResource FontMono}" />
</Grid>
<Button Style="{StaticResource PrimaryButton}" Content="采集开启曲线" Margin="0,16,0,0"
Command="{Binding CaptureRisingCommand}"
IsEnabled="{Binding Busy, Converter={StaticResource InverseBoolConverter}}" />
<Button Style="{StaticResource PrimaryButton}" Content="采集关断曲线" Margin="0,8,0,0"
Command="{Binding CaptureFallingCommand}"
IsEnabled="{Binding Busy, Converter={StaticResource InverseBoolConverter}}" />
<TextBlock Margin="0,12,0,0" TextWrapping="Wrap"
Foreground="{StaticResource TextMutedBrush}"
Text="开启/关断时间以软件发送 Modbus 命令前的标记为基准,包含串口通信延迟,不等同于硬件同步触发精度。" />
</StackPanel>
</Border>
<!-- 右栏:波形 -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Style="{StaticResource Card}" Margin="0,0,0,6">
<DockPanel>
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="开启曲线电压上升90% 阈值)" />
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="起点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding RisingViewStartMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<TextBlock Text="终点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding RisingViewEndMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<Button Content="默认" Width="54" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ResetRisingCurveViewCommand}" />
<Button Content="放大" Width="64" Height="26" Padding="0"
Command="{Binding OpenPopupCommand}"
CommandParameter="Rising" />
</StackPanel>
</Grid>
<ctl:CurvePlotControl Curve="{Binding RisingCurve}" IsRising="True" VMax="{Binding VMax}"
ViewStartMs="{Binding RisingViewStartMs}"
ViewEndMs="{Binding RisingViewEndMs}" />
</DockPanel>
</Border>
<Border Style="{StaticResource Card}" Grid.Row="1" Margin="0,6,0,0">
<DockPanel>
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="关断曲线电压下降10% 阈值)" />
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="起点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding FallingViewStartMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<TextBlock Text="终点" VerticalAlignment="Center" Margin="0,0,4,0" />
<TextBox Width="58" Height="26" Margin="0,0,8,0" Padding="4,0"
Text="{Binding FallingViewEndMs, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}"
FontFamily="{StaticResource FontMono}" />
<Button Content="默认" Width="54" Height="26" Padding="0" Margin="0,0,8,0"
Command="{Binding ResetFallingCurveViewCommand}" />
<Button Content="放大" Width="64" Height="26" Padding="0"
Command="{Binding OpenPopupCommand}"
CommandParameter="Falling" />
</StackPanel>
</Grid>
<ctl:CurvePlotControl Curve="{Binding FallingCurve}" IsRising="False" VMax="{Binding VMax}"
ViewStartMs="{Binding FallingViewStartMs}"
ViewEndMs="{Binding FallingViewEndMs}" />
</DockPanel>
</Border>
</Grid>
</Grid>
<!-- 结果表 -->
<Grid Grid.Row="2" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="576" />
</Grid.ColumnDefinitions>
<Border Style="{StaticResource Card}" Margin="0,0,12,0">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Style="{StaticResource CardTitle}" Text="各通道时间参数" />
<DataGrid ItemsSource="{Binding Rows}"
SelectedItem="{Binding SelectedRow, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="通道" Width="70">
<DataGridTextColumn.Binding>
<Binding Path="Channel" StringFormat="CH{0}" />
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="开启(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="OnTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="上升(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="RiseTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="关断(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="OffTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="下降(ms)" Width="*">
<DataGridTextColumn.Binding>
<Binding Path="FallTimeMs" Converter="{StaticResource NumberOrDash}" ConverterParameter="F3" />
</DataGridTextColumn.Binding>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock" BasedOn="{StaticResource MonoText}" />
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="结果" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Style="{StaticResource StatusBadge}" Background="{Binding Status, Converter={StaticResource StatusToSoftBrush}}">
<TextBlock Text="{Binding Status, Converter={StaticResource StatusToText}}" Foreground="{Binding Status, Converter={StaticResource StatusToBrush}}" FontSize="{StaticResource FsSmall}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Border>
<Border Grid.Column="1" Style="{StaticResource Card}" Padding="14">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource CardTitle}" Text="测试说明" />
<TextBox Grid.Row="1"
Text="{Binding Project.TestFunction.Curve, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
Height="Auto"
MinHeight="126"
Padding="8"
VerticalContentAlignment="Top" />
</Grid>
</Border>
</Grid>
</Grid>
</UserControl>