From 559890c482f5973f06aafdfec9550fee5ba3c7f2 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 17:02:15 +0800
Subject: [PATCH] feat: CAN 模拟器 TCP 化 + 多设备并发调试 + 后台生命周期管理
---
Plugin.DeviceDebug/DeviceDebugTab.xaml | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 113 insertions(+), 0 deletions(-)
diff --git a/Plugin.DeviceDebug/DeviceDebugTab.xaml b/Plugin.DeviceDebug/DeviceDebugTab.xaml
new file mode 100644
index 0000000..a1ab1e7
--- /dev/null
+++ b/Plugin.DeviceDebug/DeviceDebugTab.xaml
@@ -0,0 +1,113 @@
+<UserControl x:Class="Plugin.DeviceDebug.DeviceDebugTab"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+ xmlns:pw="https://opensource.panuon.com/wpf"
+ xmlns:pu="https://opensource.panuon.com/wpf-ui"
+ xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
+ mc:Ignorable="d"
+ d:DesignHeight="600" d:DesignWidth="1000">
+ <UserControl.Resources>
+ <ResourceDictionary>
+ <ResourceDictionary.MergedDictionaries>
+ <ResourceDictionary Source="/HMI.UI;component/Style/PanuonListView.xaml"/>
+ </ResourceDictionary.MergedDictionaries>
+ <BooleanToVisibilityConverter x:Key="BoolToVis"/>
+ </ResourceDictionary>
+ </UserControl.Resources>
+
+ <Grid dp:GridHelper.Space="8">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+
+ <!-- 璁惧淇℃伅鏍� -->
+ <Border Grid.Row="0" BorderBrush="#CCCCCC" BorderThickness="1" Padding="10,6" Background="#F9F9F9"
+ Visibility="{Binding HasDevice, Converter={StaticResource BoolToVis}}">
+ <WrapPanel dp:StackPanelHelper.ChildSpace="20">
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="璁惧ID:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding CurrentDeviceId}" Style="{StaticResource ListTableTextBlock}"/>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="鍨嬪彿:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding CurrentDeviceKind}" Style="{StaticResource ListTableTextBlock}"/>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="杩炴帴鐘舵��:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding ConnectionStateText}" Foreground="{Binding ConnectionBrush}"/>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="鐗堟湰:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding CurrentEffectiveVersion}" Style="{StaticResource ListTableTextBlock}"/>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="棰勭害鐘舵��:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding ReservationStatusText}" Style="{StaticResource ListTableTextBlock}"/>
+ </StackPanel>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="4">
+ <TextBlock Text="浼氳瘽鐘舵��:" FontWeight="Bold" Foreground="#555"/>
+ <TextBlock Text="{Binding SessionStateText}" Foreground="{Binding SessionStateBrush}" FontWeight="Bold"/>
+ </StackPanel>
+ </WrapPanel>
+ </Border>
+
+ <!-- 鎿嶄綔鎸夐挳鏍� -->
+ <StackPanel Grid.Row="1" Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10"
+ Visibility="{Binding HasDevice, Converter={StaticResource BoolToVis}}">
+ <Button x:Name="enterMaintenanceBtn" Content="杩涘叆缁存姢鎺у埗" Padding="14,6"
+ IsEnabled="{Binding CanEnterMaintenance}"
+ Click="EnterMaintenanceBtn_Click"
+ Background="#2196F3" Foreground="White" BorderThickness="0" Cursor="Hand"/>
+ <Button x:Name="exitMaintenanceBtn" Content="閫�鍑虹淮鎶�" Padding="14,6"
+ IsEnabled="{Binding CanExitMaintenance}"
+ Click="ExitMaintenanceBtn_Click"
+ Background="#FF5722" Foreground="White" BorderThickness="0" Cursor="Hand"/>
+ </StackPanel>
+
+ <!-- 涓讳綋鍖哄煙锛氬乏闈㈡澘 + 鍙虫棩蹇� -->
+ <Grid Grid.Row="2">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*"/>
+ <ColumnDefinition Width="350"/>
+ </Grid.ColumnDefinitions>
+
+ <Border Grid.Column="0" BorderBrush="#DDDDDD" BorderThickness="1" Margin="0,0,8,0">
+ <ContentControl x:Name="panelContainer">
+ <TextBlock Text="姝e湪鍒濆鍖栤��" HorizontalAlignment="Center" VerticalAlignment="Center"
+ FontSize="16" Foreground="#999"/>
+ </ContentControl>
+ </Border>
+
+ <Border Grid.Column="1" BorderBrush="#DDDDDD" BorderThickness="1">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+ <Border Grid.Row="0" Background="#F0F0F0" Padding="8,6">
+ <TextBlock Text="鎿嶄綔鏃ュ織" FontWeight="Bold" FontSize="14"/>
+ </Border>
+ <ListView Grid.Row="1" x:Name="operationLogList"
+ ItemsSource="{Binding OperationLogs}"
+ Style="{StaticResource DefaultListTable}"
+ VirtualizingPanel.IsVirtualizing="True"
+ VirtualizingPanel.VirtualizationMode="Standard">
+ <ListView.View>
+ <GridView AllowsColumnReorder="False">
+ <GridViewColumn Width="60" Header="绫诲瀷" DisplayMemberBinding="{Binding CommandType}"/>
+ <GridViewColumn Width="120" Header="鍙傛暟" DisplayMemberBinding="{Binding Parameters}"/>
+ <GridViewColumn Width="60" Header="缁撴灉" DisplayMemberBinding="{Binding Outcome}"/>
+ <GridViewColumn Width="100" Header="鏃堕棿" DisplayMemberBinding="{Binding Timestamp, StringFormat=HH:mm:ss}"/>
+ </GridView>
+ </ListView.View>
+ </ListView>
+ </Grid>
+ </Border>
+ </Grid>
+ </Grid>
+</UserControl>
--
Gitblit v1.9.1