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.TsExecution/TsExecution.xaml | 320 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 217 insertions(+), 103 deletions(-)
diff --git a/Plugin.TsExecution/TsExecution.xaml b/Plugin.TsExecution/TsExecution.xaml
index c6373ff..ee28281 100644
--- a/Plugin.TsExecution/TsExecution.xaml
+++ b/Plugin.TsExecution/TsExecution.xaml
@@ -1,53 +1,187 @@
-锘�<hb:PluginControl x:Class="Plugin.TsExecution.TsExecution"
+锘�<hb:PluginMaskControl x:Class="Plugin.TsExecution.TsExecution"
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:local="clr-namespace:Plugin.TsExecution"
- xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
- xmlns:uic="clr-namespace:HMI.UI.Converter;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"
- xmlns:ScottPlot="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"
mc:Ignorable="d"
- Padding="10"
+ xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+ xmlns:uic="clr-namespace:HMI.UI.Converter;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"
+ xmlns:ScottPlot="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"
+ xmlns:sys="clr-namespace:System;assembly=mscorlib"
+ xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+ Padding="2,5,2,5"
Loaded="PluginControl_Loaded"
- SizeChanged="PluginControl_SizeChanged"
- Background="{StaticResource WorkspaceBackground}"
+ SizeChanged="PluginControl_SizeChanged"
+ Background="{DynamicResource WorkspaceBackground}"
d:DesignHeight="450" d:DesignWidth="800">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="8*"/>
- <ColumnDefinition Width="2*"/>
- </Grid.ColumnDefinitions>
- <WindowsFormsHost x:Name="host" Visibility="Collapsed"></WindowsFormsHost>
+ <UserControl.Resources>
+ <ResourceDictionary>
+ <sys:Double x:Key="tableFontSize">20</sys:Double>
+ <Style x:Key="FormComboxStyle" TargetType="ComboBox" BasedOn="{StaticResource FormComboxStyle}">
+ <Setter Property="Height" Value="28"/>
+ </Style>
+ </ResourceDictionary>
+ </UserControl.Resources>
+ <Grid>
<Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition />
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+
<Grid.RowDefinitions>
- <RowDefinition/>
<RowDefinition Height="Auto"/>
+ <RowDefinition/>
</Grid.RowDefinitions>
- <UniformGrid x:Name="panel" Columns="2" dp:UniformGridHelper.InnerBorder="1"
+ <WindowsFormsHost x:Name="host" Visibility="Collapsed"></WindowsFormsHost>
+
+ <DockPanel Grid.Row="0" Grid.ColumnSpan="2" Margin="5,0,5,0" LastChildFill="False">
+ <DockPanel.Resources>
+ <Style TargetType="CheckBox">
+ <Setter Property="FontSize" Value="20"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"/>
+ </Style>
+ </DockPanel.Resources>
+
+ <StackPanel Orientation="Horizontal" VerticalAlignment="Center" dp:StackPanelHelper.ChildSpace="10">
+ <pu:FormGroup HeaderHeight="Auto" HeaderPadding="0" x:Name="selectModelPanel">
+ <pu:FormGroup.Header>
+ <TextBlock FontSize="20" Foreground="#000" Text="{DynamicResource Ts.SelectProductModel}"/>
+ </pu:FormGroup.Header>
+ <ComboBox Style="{StaticResource FormComboxStyle}" MinWidth="180" ItemsSource="{Binding Products}"
+DisplayMemberPath="Name" SelectedValuePath="Name"
+SelectedItem="{Binding SelectedProduct}" x:Name="CbProduct"/>
+ </pu:FormGroup>
+
+ <pu:FormGroup HeaderHeight="Auto" HeaderPadding="0" x:Name="autoModelPanel" Visibility="Collapsed">
+ <pu:FormGroup.Header>
+ <TextBlock FontSize="20" Foreground="#000" Text="褰撳墠浜у搧"/>
+ </pu:FormGroup.Header>
+ <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True" MinWidth="180" Text="{Binding CurrentProductModel}"/>
+ </pu:FormGroup>
+
+ <CheckBox x:Name="CbEnableMes"
+ IsChecked="{Binding EnableMes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+ Content="{DynamicResource Ts.EnableMes}"
+ />
+ <CheckBox x:Name="CbEnableNGPause"
+ IsChecked="{Binding EnableNGPause,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+ Content="{DynamicResource Ts.EnableNGPause}"
+ />
+ <CheckBox x:Name="CbEnableDebugMode"
+ IsChecked="{Binding EnableDebugMode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+ Content="{DynamicResource Ts.DebugMode}"/>
+
+ <CheckBox x:Name="CbDisableScanner"
+IsChecked="{Binding DisableScanner,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+Content="{DynamicResource Ts.BlockScanner}"/>
+
+ <CheckBox x:Name="CbEnableSimpleMode"
+IsChecked="{Binding EnableSimpleMode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+Content="{DynamicResource Ts.EnableSimpleMode}"/>
+
+ <CheckBox x:Name="CbUI_ShowInfoDock"
+IsChecked="{Binding UI_ShowInfoDock,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+Content="{DynamicResource Ts.UI_ShowInfoDock}"/>
+
+ <CheckBox FontSize="20" x:Name="Cb_ManualDebug" Visibility="Collapsed"
+ IsChecked="{Binding EnableManualDebug,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
+ VerticalContentAlignment="Center" Content="鎵嬪姩璋冭瘯" />
+
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="5">
+ <Label FontSize="20" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Padding="0"
+ Content="{DynamicResource HMI.User.Code}" />
+ <Label FontSize="20" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Padding="0"
+ Content="{Binding CurrentUserCode}" />
+ </StackPanel>
+
+
+ <Label x:Name="workorderPanel" VerticalContentAlignment="Center" Visibility="Collapsed" Padding="0" Margin="0" MouseDoubleClick="Label_MouseDoubleClick">
+ <StackPanel Orientation="Horizontal"
+ dp:StackPanelHelper.ChildSpace="5">
+ <Label FontSize="20" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Padding="0"
+ Content="{DynamicResource Ts.WorkOrder}"/>
+ <TextBlock x:Name="TbWorkOrder" FontSize="20" MinWidth="50" Text="{Binding CurrentWorkorder}"/>
+ <!--<ui:EditBox FontSize="20" x:Name="workOrderEditor" MinWidth="50"
+ CanEdit="True"
+ ShowEmpty="True"
+ PreEditing="RequirePassword"
+ Value="{Binding CurrentWorkorder,Mode=TwoWay}"/>-->
+ </StackPanel>
+ </Label>
+
+ <!--<StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="5">
+ <Label FontSize="20" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Padding="0" Content="瀛椾綋澶у皬"/>
+ <ComboBox Name="CbFontSize" Width="60" ItemsSource="{Binding FontSizeSource}"
+ SelectionChanged="CbFontSize_SelectionChanged"/>
+ </StackPanel>-->
+ </StackPanel>
+
+
+
+ <StackPanel DockPanel.Dock="Right" Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10">
+ <Button Style="{StaticResource SuccessButton}"
+x:Name="BtnStartSeq" Click="Button_Click"
+Content="{DynamicResource Ts.BtnStartSeq}"/>
+ <Button Grid.Row="1" Style="{StaticResource DangerButton}" IsEnabled="False"
+x:Name="BtnStopSeq" Click="Button_Click"
+Content="{DynamicResource Ts.BtnStopSeq}"/>
+ <Button Grid.Row="2" Style="{StaticResource PrimaryButton}"
+x:Name="BtnClearNum" Click="Button_Click"
+Content="{DynamicResource Ts.BtnClearNum}"/>
+ <Button Grid.Row="3"
+x:Name="BtnSample" Click="Button_Click">
+ <Button.Style>
+ <Style TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding SampleStatus}" Value="True">
+ <Setter Property="Content" Value="{DynamicResource Ts.BtnIsSample}"/>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding SampleStatus}" Value="False">
+ <Setter Property="Content" Value="{DynamicResource Ts.BtnNotSample}"/>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Button.Style>
+ </Button>
+ </StackPanel>
+ </DockPanel>
+
+ <Grid dp:GridHelper.Space="5" Grid.Row="1">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+
+
+ <UniformGrid x:Name="panel" Grid.Row="1" Columns="2" dp:UniformGridHelper.InnerBorder="1"
dp:UniformGridHelper.InnerBorderBrush="#3a3a3a">
- </UniformGrid>
- <Border Grid.Row="1" Visibility="{Binding AlarmVisiable,Converter={StaticResource vbConverter}}"
- Height="50" Background="Red"/>
- </Grid>
+
+ </UniformGrid>
+ <!--<Border x:Name="alarmPanel" Height="80" VerticalAlignment="Bottom" Visibility="Visible" Background="Red"/>
+ <Border Grid.Row="1" x:Name="alarmPanel" Visibility="{Binding AlarmVisiable,Converter={StaticResource vbConverter}}"
+ Height="50" Background="Red"/>-->
+ </Grid>
- <Grid Grid.Column="1">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="Auto"/>
- <RowDefinition />
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
+ <Grid Grid.Row="1" Grid.Column="1" x:Name="detailPanel">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition />
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
- <GroupBox>
+ <!--<GroupBox>
<pu:FormGroup Orientation="Vertical"
HeaderHeight="Auto"
HeaderPadding="0" Header="{DynamicResource Ts.SelectProductModel}">
@@ -57,59 +191,59 @@
SelectedItem="{Binding SelectedProduct}"
x:Name="CbProduct"/>
</pu:FormGroup>
- </GroupBox>
+ </GroupBox>-->
- <GroupBox Grid.Row="2">
- <StackPanel>
- <pu:FormGroup Header="{DynamicResource Ts.MesStatus}" GroupName="Number">
- <Label Grid.Row="1">
- <Label.Style>
- <Style TargetType="Label">
- <Setter Property="Foreground" Value="#FFF"/>
- <Setter Property="HorizontalContentAlignment" Value="Center"/>
- <Setter Property="FontSize" Value="16"/>
- <Setter Property="FontWeight" Value="Bold"/>
- <Style.Triggers>
- <DataTrigger Binding="{Binding EnableMes}" Value="True">
- <Setter Property="Background" Value="Green"/>
- <Setter Property="Content" Value="{DynamicResource Ts.MesStatus.Enable}"/>
- </DataTrigger>
- <DataTrigger Binding="{Binding EnableMes}" Value="False">
- <Setter Property="Background" Value="Red"/>
- <Setter Property="Content" Value="{DynamicResource Ts.MesStatus.Disable}"/>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </Label.Style>
- </Label>
- </pu:FormGroup>
- <pu:FormGroup Header="{DynamicResource Ts.Total}" GroupName="Number">
- <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
+ <GroupBox Grid.Row="2">
+ <StackPanel>
+ <pu:FormGroup Header="{DynamicResource Ts.MesStatus}" GroupName="Number">
+ <Label Grid.Row="1">
+ <Label.Style>
+ <Style TargetType="Label">
+ <Setter Property="Foreground" Value="#FFF"/>
+ <Setter Property="HorizontalContentAlignment" Value="Center"/>
+ <Setter Property="FontSize" Value="16"/>
+ <Setter Property="FontWeight" Value="Bold"/>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding EnableMes}" Value="True">
+ <Setter Property="Background" Value="Green"/>
+ <Setter Property="Content" Value="{DynamicResource Ts.MesStatus.Enable}"/>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding EnableMes}" Value="False">
+ <Setter Property="Background" Value="Red"/>
+ <Setter Property="Content" Value="{DynamicResource Ts.MesStatus.Disable}"/>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Label.Style>
+ </Label>
+ </pu:FormGroup>
+ <pu:FormGroup Header="{DynamicResource Ts.Total}" GroupName="Number">
+ <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
x:Name="TbTotal"/>
- </pu:FormGroup>
- <pu:FormGroup Header="{DynamicResource Ts.Pass}" GroupName="Number">
- <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
+ </pu:FormGroup>
+ <pu:FormGroup Header="{DynamicResource Ts.Pass}" GroupName="Number">
+ <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
x:Name="TbPass"/>
- </pu:FormGroup>
- <pu:FormGroup Header="{DynamicResource Ts.Fail}" GroupName="Number">
- <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
+ </pu:FormGroup>
+ <pu:FormGroup Header="{DynamicResource Ts.Fail}" GroupName="Number">
+ <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
x:Name="TbFail"/>
- </pu:FormGroup>
- <pu:FormGroup Header="{DynamicResource Ts.PassRate}" GroupName="Number">
- <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
+ </pu:FormGroup>
+ <pu:FormGroup Header="{DynamicResource Ts.PassRate}" GroupName="Number">
+ <TextBox Style="{StaticResource EditorTextBoxStyle}" IsReadOnly="True"
x:Name="TbPassRate"/>
- </pu:FormGroup>
- </StackPanel>
- </GroupBox>
+ </pu:FormGroup>
+ </StackPanel>
+ </GroupBox>
- <GroupBox Grid.Row="3">
- <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
- <ScottPlot:WpfPlot Background="Transparent" x:Name="pieChart" MinWidth="300" MinHeight="300"
+ <GroupBox Grid.Row="3">
+ <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
+ <ScottPlot:WpfPlot Background="Transparent" x:Name="pieChart" MinWidth="300" MinHeight="300"
SizeChanged="PluginControl_SizeChanged"/>
- </ScrollViewer>
- </GroupBox>
+ </ScrollViewer>
+ </GroupBox>
- <GroupBox Grid.Row="4">
+ <!-- <GroupBox Grid.Row="4">
<Grid dp:GridHelper.Space="20">
<Grid.RowDefinitions>
<RowDefinition/>
@@ -143,28 +277,8 @@
</Button.Style>
</Button>
- <!--<Grid Grid.Row="4" dp:GridHelper.Space="20" dp:GridHelper.SpaceIgnore="ALL">
- <Grid.ColumnDefinitions>
- <ColumnDefinition/>
- <ColumnDefinition/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
-
- <CheckBox
- IsChecked="{Binding EnableMes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
- Content="{DynamicResource Ts.EnableMes}"
- />
- <CheckBox Grid.Column="1"
- IsChecked="{Binding EnableCanLog,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
- Content="{DynamicResource Ts.EnableCanLog}"
- />
- <CheckBox Grid.Column="2"
- IsChecked="{Binding EnableDebugMode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
- Content="{DynamicResource Ts.DebugMode}"/>
- </Grid>-->
-
- <!--<pu:Switch Grid.Row="3" BoxWidth="120"
- CheckedBackground="{StaticResource PrimaryColor}"
+ <pu:Switch Grid.Row="3" BoxWidth="120"
+ CheckedBackground="{DynamicResource PrimaryColor}"
CheckedBorderBrush="#36abff"
ToggleBrush="#030303"
CheckedForeground="White"
@@ -183,15 +297,15 @@
Value="True">
<Setter TargetName="text" Property="Text"
Value="{Binding Converter={StaticResource lc},ConverterParameter='Ts.BtnIsSample'}"/>
- <Setter TargetName="text" Property="Foreground" Value="{StaticResource PrimaryColorContract}"/>
+ <Setter TargetName="text" Property="Foreground" Value="{DynamicResource PrimaryColorContract}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</pu:Switch.BoxTemplate>
- </pu:Switch>-->
+ </pu:Switch>
</Grid>
- </GroupBox>
+ </GroupBox> -->
+ </Grid>
</Grid>
-
</Grid>
-</hb:PluginControl>
+</hb:PluginMaskControl>
--
Gitblit v1.9.1