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