From d1b72117058f1131046b6aa3add8e3ccfae033d8 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 10:36:07 +0800
Subject: [PATCH] docs: CAN 模拟器独立 TCP 服务进程设计规格(统一 CanDeviceDriver + 双工推送协议)
---
Util.ManualDebug/ManualDebug.xaml | 237 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 158 insertions(+), 79 deletions(-)
diff --git a/Util.ManualDebug/ManualDebug.xaml b/Util.ManualDebug/ManualDebug.xaml
index ca818b0..32df8d8 100644
--- a/Util.ManualDebug/ManualDebug.xaml
+++ b/Util.ManualDebug/ManualDebug.xaml
@@ -1,9 +1,10 @@
-<UserControl x:Class="Util.SB.ManualDebug"
+<UserControl x:Class="Util.ManualDebug.ManualDebug"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:Util.SB"
+ xmlns:local="clr-namespace:Util.ManualDebug"
+ xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
mc:Ignorable="d"
x:Name="self"
MinHeight="400" MinWidth="500">
@@ -17,104 +18,149 @@
</UserControl.Resources>
<Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
<Grid Margin="10">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="5"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="5"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <WindowsFormsHost x:Name="host" Visibility="Collapsed"></WindowsFormsHost>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition/>
+ </Grid.ColumnDefinitions>
- <!-- 鎸夐挳鍜岀姸鎬佸尯鍩� -->
- <Border Grid.Row="0" Background="{StaticResource TsPanelBrush}"
+ <Grid x:Name="CellSelectBorder">
+ <Grid.RowDefinitions>
+ <RowDefinition/>
+ <RowDefinition/>
+ </Grid.RowDefinitions>
+
+ <Border Background="{StaticResource TsPanelBrush}" Margin="0,0,10,5"
+BorderBrush="{StaticResource BorderBrush}"
+BorderThickness="1" CornerRadius="4" Padding="15">
+ <StackPanel>
+ <TextBlock Text="绌翠綅閫夋嫨" FontSize="14" FontWeight="SemiBold"
+ Foreground="{StaticResource PrimaryBrush}" Margin="0,0,0,15"/>
+
+ <UniformGrid IsEnabled="False" x:Name="CellGrid" dp:UniformGridHelper.InnerBorder="1" Columns="1"
+ dp:UniformGridHelper.InnerBorderBrush="{StaticResource BorderBrush}">
+
+ </UniformGrid>
+ </StackPanel>
+ </Border>
+
+ <Border Grid.Row="1" Background="{StaticResource TsPanelBrush}" Margin="0,5,10,0"
+BorderBrush="{StaticResource BorderBrush}"
+BorderThickness="1" CornerRadius="4" Padding="15">
+ <StackPanel>
+ <TextBlock Text="绌翠綅娴嬭瘯缁撴灉" FontSize="14" FontWeight="SemiBold"
+ Foreground="{StaticResource PrimaryBrush}" Margin="0,0,0,15"/>
+
+ <UniformGrid IsEnabled="False" x:Name="CellResultGrid" Columns="1" dp:UniformGridHelper.InnerBorder="1"
+ dp:UniformGridHelper.InnerBorderBrush="{StaticResource BorderBrush}">
+
+ </UniformGrid>
+ </StackPanel>
+ </Border>
+ </Grid>
+
+ <Grid Grid.Column="1">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="5"/>
+ <RowDefinition Height="*"/>
+ <RowDefinition Height="5"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+ <WindowsFormsHost x:Name="host" Visibility="Collapsed"></WindowsFormsHost>
+
+ <!-- 鎸夐挳鍜岀姸鎬佸尯鍩� -->
+ <Border Grid.Row="0" Background="{StaticResource TsPanelBrush}"
BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="4" Padding="15">
- <StackPanel>
- <TextBlock Text="鎵嬪姩璋冭瘯鎺у埗" FontSize="14" FontWeight="SemiBold"
+ <StackPanel>
+ <TextBlock Text="鎵嬪姩璋冭瘯鎺у埗" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource PrimaryBrush}" Margin="0,0,0,15"/>
- <WrapPanel x:Name="btnPanel">
+ <WrapPanel x:Name="btnPanel">
- </WrapPanel>
- </StackPanel>
- </Border>
+ </WrapPanel>
+ </StackPanel>
+ </Border>
- <!-- 鍒嗛殧鏉�1 -->
- <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch"
+ <!-- 鍒嗛殧鏉�1 -->
+ <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch"
Background="Transparent" Cursor="SizeNS"/>
- <!-- TX/RX 鏁版嵁鍖哄煙 -->
- <Border Grid.Row="2" Background="{StaticResource TsPanelBrush}"
+ <!-- TX/RX 鏁版嵁鍖哄煙 -->
+ <Border Grid.Row="2" Background="{StaticResource TsPanelBrush}"
BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="4" Padding="10">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
- <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="0,0,0,10">
- <TextBlock Text="娴嬭瘯鏁版嵁" FontSize="14" FontWeight="SemiBold"
+ <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="0,0,0,10">
+ <TextBlock Text="娴嬭瘯鏁版嵁" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource PrimaryBrush}" VerticalAlignment="Center"/>
- <Button Content="娓呯┖" Style="{StaticResource ActionButtonStyle}"
+ <Button Content="娓呯┖" Style="{StaticResource ActionButtonStyle}"
Margin="15,0,0,0" Click="OnClearClick"/>
- </StackPanel>
+ </StackPanel>
- <DataGrid x:Name="DataGridComm" Grid.Row="1"
+ <DataGrid x:Name="DataGridComm" Grid.Row="1"
ItemsSource="{Binding TestData,ElementName=self}">
- <DataGrid.Columns>
- <DataGridTextColumn Header="娴嬭瘯椤�" Binding="{Binding Name}" Width="120" IsReadOnly="True"/>
- <DataGridTextColumn Header="鏀�" Binding="{Binding Receive}" Width="*" IsReadOnly="True"/>
- <DataGridTextColumn Header="鍙�" Binding="{Binding Send}" Width="*" IsReadOnly="True"/>
- <DataGridTextColumn Header="鍗曚綅" Binding="{Binding Unit}" Width="60" IsReadOnly="True"/>
- <DataGridTextColumn Header="涓婇檺" Binding="{Binding UpperLimit}" Width="80" IsReadOnly="True"/>
- <DataGridTextColumn Header="涓嬮檺" Binding="{Binding LowerLimit}" Width="80" IsReadOnly="True"/>
- <DataGridTextColumn Header="缁撴灉" Binding="{Binding Result}" Width="70" IsReadOnly="True"/>
- <DataGridTextColumn Header="鏃堕棿" Binding="{Binding Time}" Width="90" IsReadOnly="True"/>
- </DataGrid.Columns>
- <DataGrid.RowStyle>
- <Style TargetType="DataGridRow">
- <Style.Triggers>
- <DataTrigger Value="True">
- <DataTrigger.Binding>
- <MultiBinding Converter="{x:Static local:ResultFailedConverter.Instance}">
- <Binding Path="Result"/>
- </MultiBinding>
- </DataTrigger.Binding>
- <Setter Property="Background" Value="#FFE0E0"/>
- <Setter Property="Foreground" Value="#C53030"/>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </DataGrid.RowStyle>
- </DataGrid>
- </Grid>
- </Border>
+ <DataGrid.Columns>
+ <DataGridTextColumn Header="娴嬭瘯椤�" Binding="{Binding Name}" Width="120" IsReadOnly="True"/>
+ <DataGridTextColumn Header="鏀�" Binding="{Binding Receive}" Width="*" IsReadOnly="True"/>
+ <DataGridTextColumn Header="鍙�" Binding="{Binding Send}" Width="*" IsReadOnly="True"/>
+ <DataGridTextColumn Header="鍗曚綅" Binding="{Binding Unit}" Width="60" IsReadOnly="True"/>
+ <DataGridTextColumn Header="涓婇檺" Binding="{Binding UpperLimit}" Width="80" IsReadOnly="True"/>
+ <DataGridTextColumn Header="涓嬮檺" Binding="{Binding LowerLimit}" Width="80" IsReadOnly="True"/>
+ <DataGridTextColumn Header="缁撴灉" Binding="{Binding Result}" Width="70" IsReadOnly="True"/>
+ <DataGridTextColumn Header="鏃堕棿" Binding="{Binding Time}" Width="90" IsReadOnly="True"/>
+ </DataGrid.Columns>
+ <DataGrid.RowStyle>
+ <Style TargetType="DataGridRow">
+ <Style.Triggers>
+ <DataTrigger Value="True">
+ <DataTrigger.Binding>
+ <MultiBinding Converter="{x:Static local:ResultFailedConverter.Instance}">
+ <Binding Path="Result"/>
+ </MultiBinding>
+ </DataTrigger.Binding>
+ <Setter Property="Background" Value="#FFE0E0"/>
+ <Setter Property="Foreground" Value="#C53030"/>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </DataGrid.RowStyle>
+ </DataGrid>
+ </Grid>
+ </Border>
- <!-- 鍒嗛殧鏉�2 -->
- <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch"
+ <!-- 鍒嗛殧鏉�2 -->
+ <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch"
Background="Transparent" Cursor="SizeNS"/>
- <!-- 鏃ュ織鍖哄煙 -->
- <Border Grid.Row="4" Background="{StaticResource TsPanelBrush}"
+ <!-- 鏃ュ織鍖哄煙 -->
+ <Border Grid.Row="4" Background="{StaticResource TsPanelBrush}"
BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="4" Padding="10">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
- <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="0,0,0,8">
- <TextBlock Text="鏃ュ織" FontSize="14" FontWeight="SemiBold"
+ <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="0,0,0,8">
+ <TextBlock Text="鏃ュ織" FontSize="14" FontWeight="SemiBold"
Foreground="{StaticResource PrimaryBrush}" VerticalAlignment="Center"/>
- <Button Content="娓呯┖鏃ュ織" Style="{StaticResource ActionButtonStyle}"
+ <Button Content="娓呯┖鏃ュ織" Style="{StaticResource ActionButtonStyle}"
Margin="15,0,0,0" Click="OnClearLogClick"/>
- </StackPanel>
+ </StackPanel>
- <RichTextBox x:Name="LogRichTextBox" Grid.Row="1"
+ <RichTextBox x:Name="LogRichTextBox" Grid.Row="1"
IsReadOnly="True"
VerticalScrollBarVisibility="Auto"
FontFamily="Consolas"
@@ -122,12 +168,45 @@
BorderThickness="1"
BorderBrush="Black"
Padding="4"/>
- </Grid>
+ </Grid>
+ </Border>
+ </Grid>
+ <Border Background="#AAFFFFFF" Grid.ColumnSpan="2" x:Name="mask">
+ <TextBlock Text="鍒濆鍖栦腑..."
+ FontSize="16" FontWeight="Bold" Foreground="{StaticResource PrimaryBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Grid>
- <Border Background="#AAFFFFFF" x:Name="mask">
- <TextBlock Text="鍒濆鍖栦腑..."
- FontSize="16" FontWeight="Bold" Foreground="{StaticResource PrimaryBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
- </Border>
+
+ <StatusBar FontSize="14" Grid.Row="1">
+ <StatusBar.ItemsPanel>
+ <ItemsPanelTemplate>
+ <DockPanel LastChildFill="False"/>
+ </ItemsPanelTemplate>
+ </StatusBar.ItemsPanel>
+
+ <StatusBarItem DockPanel.Dock="Left">
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="8">
+ <StackPanel Orientation="Horizontal">
+ <Ellipse Width="10" Height="10">
+ <Ellipse.Style>
+ <Style TargetType="Ellipse">
+ <Setter Property="Fill" Value="LightGray"/>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding TcpServerStatus,ElementName=self}" Value="ERROR">
+ <Setter Property="Fill" Value="Red"/>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding TcpServerStatus,ElementName=self}" Value="RUNNING">
+ <Setter Property="Fill" Value="Green"/>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Ellipse.Style>
+ </Ellipse>
+ <TextBlock Text="{Binding TcpServerInfo,ElementName=self}"/>
+ <Button Padding="0" Margin="0" BorderThickness="0" Click="Button_Click">馃攧</Button>
+ </StackPanel>
+ </StackPanel>
+ </StatusBarItem>
+ </StatusBar>
</Grid>
</UserControl>
--
Gitblit v1.9.1