借助网络配置,控制Modbus工具的日志显示,避免卡死界面
智能大石头 authored at 2021-12-11 22:09:19
6.31 KiB
XCoder
<Window xmlns="https://github.com/avaloniaui"
        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"
        mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="700"
        x:Class="XCoderAv.Views.ModbusRtuWindow"
        Title="Modbus RTU 调试" Width="900" Height="700"
        WindowStartupLocation="CenterOwner">
    <Window.Styles>
        <Style Selector="TextBlock.SectionTitle">
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Margin" Value="4,3"/>
            <Setter Property="FontSize" Value="13"/>
        </Style>
        <Style Selector="TextBox.ConfigTextBox">
            <Setter Property="Margin" Value="2"/>
            <Setter Property="Height" Value="26"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="BorderBrush" Value="#D0D0D0"/>
        </Style>
        <Style Selector="Button.ActionButton">
            <Setter Property="Height" Value="30"/>
            <Setter Property="Margin" Value="2"/>
        </Style>
        <Style Selector="Border.GroupBorder">
            <Setter Property="BorderBrush" Value="#D0D0D0"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Margin" Value="0,0,0,6"/>
        </Style>
    </Window.Styles>

    <Grid Margin="6">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- 串口配置 -->
        <Border Grid.Row="0" Classes="GroupBorder">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="串口" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Column="1" ItemsSource="{Binding PortNames}" SelectedItem="{Binding PortName}" Margin="2" Height="28"/>
                <TextBlock Grid.Column="2" Text="波特率" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Column="3" ItemsSource="{Binding BaudRates}" SelectedItem="{Binding BaudRate}" Margin="2" Height="28"/>

                <TextBlock Grid.Row="1" Text="校验位" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding ParityOptions}" SelectedIndex="{Binding ParityIndex}" Margin="2" Height="28"/>
                <TextBlock Grid.Row="1" Grid.Column="2" Text="数据位" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Row="1" Grid.Column="3" ItemsSource="{Binding DataBitsOptions}" SelectedItem="{Binding DataBits}" Margin="2" Height="28"/>

                <TextBlock Grid.Row="2" Text="停止位" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding StopBitsOptions}" SelectedIndex="{Binding StopBitsIndex}" Margin="2" Height="28"/>
                <Button Grid.Row="2" Grid.Column="3" Content="{Binding ConnectButtonText}" Command="{Binding ToggleConnectCommand}" Classes="ActionButton" Width="80"/>
            </Grid>
        </Border>

        <!-- 读写配置 -->
        <Border Grid.Row="1" Classes="GroupBorder">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="80"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="从站" VerticalAlignment="Center" Margin="4,2"/>
                <TextBox Grid.Column="1" Text="{Binding SlaveAddress}" Classes="ConfigTextBox"/>
                <TextBlock Grid.Column="2" Text="功能码" VerticalAlignment="Center" Margin="4,2"/>
                <ComboBox Grid.Column="3" ItemsSource="{Binding FunctionCodes}" SelectedIndex="{Binding FunctionCodeIndex}" Height="28"/>
                <TextBlock Grid.Column="4" Text="起始地址" VerticalAlignment="Center" Margin="4,2"/>
                <TextBox Grid.Column="5" Text="{Binding StartAddress}" Classes="ConfigTextBox"/>
                <TextBlock Grid.Column="6" Text="数量" VerticalAlignment="Center" Margin="4,2"/>
                <TextBox Grid.Column="7" Text="{Binding ReadCount}" Classes="ConfigTextBox"/>

                <TextBlock Grid.Row="1" Text="写入值" VerticalAlignment="Center" Margin="4,2"/>
                <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding WriteValue}" Classes="ConfigTextBox"/>
                <Button Grid.Row="1" Grid.Column="3" Content="执行" Command="{Binding ExecuteCommand}" Classes="ActionButton" Width="80"/>
                <Button Grid.Row="1" Grid.Column="5" Content="清空日志" Command="{Binding ClearLogCommand}" Classes="ActionButton" Width="80"/>
            </Grid>
        </Border>

        <!-- 结果 -->
        <Grid Grid.Row="2">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Text="读取结果" Classes="SectionTitle"/>
            <TextBox Grid.Row="1" Text="{Binding ReadResult}" AcceptsReturn="True"
                     FontFamily="Consolas" FontSize="12"
                     BorderThickness="1" BorderBrush="#D0D0D0" Margin="0,4,0,0"/>
        </Grid>
    </Grid>
</Window>