添加配置连接窗口已经相关S7与ModbusTCP连接功能

This commit is contained in:
20492
2026-06-12 08:38:43 +08:00
parent 5d14afcb66
commit 1ff51cbc45
13 changed files with 1785 additions and 105 deletions

View File

@@ -0,0 +1,285 @@
<Window x:Class="MainModule.Views.ConnectionConfigView"
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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:prism="http://prismlibrary.com/"
xmlns:converters="clr-namespace:UIShare.Converters;assembly=UIShare"
Title="设备连接配置"
Width="520"
Height="550"
MinWidth="400"
MinHeight="450"
WindowStartupLocation="CenterOwner"
ResizeMode="CanResize">
<Window.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<Style TargetType="TextBlock" x:Key="LabelStyle">
<Setter Property="FontSize" Value="13"/>
<Setter Property="Foreground" Value="#4A5568"/>
<Setter Property="Margin" Value="0,6,0,2"/>
</Style>
<Style TargetType="TextBox" x:Key="InputStyle">
<Setter Property="Padding" Value="8"/>
<Setter Property="Margin" Value="0,2,0,6"/>
<Setter Property="BorderBrush" Value="#E2E8F0"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FontSize" Value="13"/>
</Style>
<Style TargetType="ComboBox" x:Key="ComboStyle">
<Setter Property="Padding" Value="8"/>
<Setter Property="Margin" Value="0,2,0,6"/>
<Setter Property="BorderBrush" Value="#E2E8F0"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FontSize" Value="13"/>
</Style>
</Window.Resources>
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="设备连接配置" FontSize="18" FontWeight="Bold" Foreground="#2C3E50" Margin="20,20,20,16"/>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Margin="20">
<StackPanel>
<TextBlock Text="选择协议类型" Style="{StaticResource LabelStyle}"/>
<StackPanel Orientation="Horizontal" Margin="0,2,0,6">
<Button Content="S7"
Command="{Binding SelectS7Command}"
Width="80" Height="36"
Margin="0,0,4,0"/>
<Button Content="Modbus TCP"
Command="{Binding SelectModbusTCPCommand}"
Width="100" Height="36"
Margin="0,0,4,0"/>
<Button Content="Modbus RTU"
Command="{Binding SelectModbusRTUCommand}"
Width="100" Height="36"
Margin="0,0,4,0"/>
<Button Content="TCP"
Command="{Binding SelectTCPCommand}"
Width="80" Height="36"
Margin="0,0,4,0"/>
<Button Content="HTTP"
Command="{Binding SelectHTTPCommand}"
Width="80" Height="36"/>
</StackPanel>
<Border Visibility="{Binding IsS7Protocol, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="S7协议配置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="IP地址" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding IpAddress}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="CPU类型" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding CpuTypes}"
SelectedItem="{Binding CpuType}" Style="{StaticResource ComboStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Rack" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding Rack}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Slot" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding Slot}" Style="{StaticResource InputStyle}"/>
</Grid>
</StackPanel>
</Border>
<Border Visibility="{Binding IsModbusTCPProtocol, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="Modbus TCP配置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="IP地址" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding IpAddress}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="端口号" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding Port}" Style="{StaticResource InputStyle}"/>
</Grid>
</StackPanel>
</Border>
<Border Visibility="{Binding IsModbusRTUProtocol, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="Modbus RTU配置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="串口" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding SerialPorts}"
SelectedItem="{Binding SerialPort}" Style="{StaticResource ComboStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="波特率" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding BaudRates}"
SelectedItem="{Binding BaudRate}" Style="{StaticResource ComboStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="数据位" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding DataBitsList}"
SelectedItem="{Binding DataBits}" Style="{StaticResource ComboStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="校验位" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding ParityList}"
SelectedItem="{Binding Parity}" Style="{StaticResource ComboStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="停止位" Style="{StaticResource LabelStyle}"/>
<ComboBox Grid.Column="1" ItemsSource="{Binding StopBitsList}"
SelectedItem="{Binding StopBits}" Style="{StaticResource ComboStyle}"/>
</Grid>
</StackPanel>
</Border>
<Border Visibility="{Binding IsTCPProtocol, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="TCP配置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="IP地址" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding IpAddress}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="端口号" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding Port}" Style="{StaticResource InputStyle}"/>
</Grid>
</StackPanel>
</Border>
<Border Visibility="{Binding IsHTTPProtocol, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="HTTP配置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="IP地址" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding IpAddress}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="端口号" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding Port}" Style="{StaticResource InputStyle}"/>
</Grid>
</StackPanel>
</Border>
<Border BorderBrush="#E2E8F0" BorderThickness="1" CornerRadius="8" Padding="12" Margin="0,0,0,12">
<StackPanel>
<TextBlock Text="超时设置" FontSize="14" FontWeight="Bold" Foreground="#2C3E50" Margin="0,0,0,10"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="发送超时(ms)" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding SendTimeout}" Style="{StaticResource InputStyle}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="接收超时(ms)" Style="{StaticResource LabelStyle}"/>
<TextBox Grid.Column="1" Text="{Binding ReceiveTimeout}" Style="{StaticResource InputStyle}"/>
</Grid>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="20,16,20,20">
<Button Content="取消"
Command="{Binding CancelCommand}"
Width="80" Height="36"
Margin="0,0,8,0"/>
<Button Content="确定"
Command="{Binding ConfirmCommand}"
Width="80" Height="36"/>
</StackPanel>
</Grid>
</Window>

View File

@@ -0,0 +1,18 @@
using MainModule.ViewModels;
using System.Windows;
namespace MainModule.Views
{
public partial class ConnectionConfigView : Window
{
public ConnectionConfigView()
{
InitializeComponent();
}
public ConnectionConfigView(ConnectionConfigViewModel viewModel) : this()
{
DataContext = viewModel;
}
}
}

View File

@@ -1,4 +1,4 @@
<UserControl x:Class="MainModule.Views.MainView"
<UserControl x:Class="MainModule.Views.MainView"
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"
@@ -21,7 +21,45 @@
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="环境箱监控状态面板" FontSize="20" FontWeight="Bold" Foreground="#2C3E50" Margin="12,4,0,16"/>
<DockPanel Grid.Row="0" Margin="12,4,12,16">
<TextBlock Text="环境箱监控状态面板" FontSize="20" FontWeight="Bold" Foreground="#2C3E50" VerticalAlignment="Center"/>
<!-- 顶部工具栏按钮 -->
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
<!-- 配置连接按钮 -->
<Button Content="配置连接"
Command="{Binding ConfigCommand}"
Style="{StaticResource MaterialDesignFlatButton}"
Foreground="#805AD5"
FontSize="13"
Margin="0,0,8,0"
ToolTip="配置设备连接参数"/>
<!-- 连接/断开按钮 -->
<Button Content="{Binding ConnectButtonText}"
Command="{Binding ConnectCommand}"
Style="{StaticResource MaterialDesignFlatButton}"
Foreground="#3182CE"
FontSize="13"
Margin="0,0,8,0"
ToolTip="点击连接/断开设备">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="连接设备" Command="{Binding ConnectCommand}"/>
<MenuItem Header="断开连接" Command="{Binding DisconnectCommand}"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
<!-- 刷新按钮 -->
<Button Content="刷新数据"
Command="{Binding RefreshCommand}"
Style="{StaticResource MaterialDesignFlatButton}"
Foreground="#38A169"
FontSize="13"
ToolTip="手动刷新设备数据"/>
</StackPanel>
</DockPanel>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Chambers}">
<ItemsControl.ItemsPanel>
@@ -40,6 +78,7 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" LastChildFill="False">
@@ -95,10 +134,30 @@
</StackPanel>
</StackPanel>
</UniformGrid>
<!-- 连接按钮 -->
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,16,0,0">
<Button Content="{Binding ConnectButtonText}"
Command="{Binding DataContext.ConnectDeviceCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding}"
Width="100"
Height="36">
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource MaterialDesignFlatButton}">
<Setter Property="Foreground" Value="#3182CE"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="True">
<Setter Property="Foreground" Value="#E53E3E"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
</UserControl>