| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- <UserControl x:Class="TeamAAS.Feeder.UI.DefaultFeederDebugPage"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:hc="https://handyorg.github.io/handycontrol"
- xmlns:sys="clr-namespace:System;assembly=mscorlib"
- xmlns:fe="clr-namespace:TeamAAS.Feeder.Enums"
- xmlns:fm="clr-namespace:TeamAAS.Feeder.Models"
- xmlns:local="clr-namespace:TeamAAS.Feeder.UI"
- xmlns:loc="clr-namespace:TeamAAS.Localization;assembly=TeamAAS.Global">
- <UserControl.Resources>
- <local:EnumDescriptionConverter x:Key="EnumDescriptionConverter"/>
- <BooleanToVisibilityConverter x:Key="BoolToVis"/>
- <ObjectDataProvider x:Key="FeederActionEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
- <ObjectDataProvider.MethodParameters>
- <x:Type TypeName="fe:FeederAction"/>
- </ObjectDataProvider.MethodParameters>
- </ObjectDataProvider>
- <ObjectDataProvider x:Key="SequenceStepTypeEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
- <ObjectDataProvider.MethodParameters>
- <x:Type TypeName="fm:SequenceStepType"/>
- </ObjectDataProvider.MethodParameters>
- </ObjectDataProvider>
- </UserControl.Resources>
- <!-- 主调试区:左面板(方向控制)+ 右面板(参数 Tab)。DataContext = FeederDebugViewModel -->
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="340"/>
- <ColumnDefinition Width="*"/>
- </Grid.ColumnDefinitions>
- <!-- 左面板:方向九宫格 + 功能竖列 -->
- <Border Grid.Column="0" Background="{DynamicResource RegionBrush}" CornerRadius="8" Padding="16" Margin="0,0,6,0">
- <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto"/>
- <ColumnDefinition Width="16"/>
- <ColumnDefinition Width="Auto"/>
- </Grid.ColumnDefinitions>
- <UniformGrid Grid.Column="0" Columns="3" Rows="3">
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="6"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↘" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="G" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="3"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↓" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="D" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="1"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↙" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="B" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="5"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="→" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="F" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="8"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="⛶" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="I" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="0"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="←" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="A" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="7"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↗" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="H" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="4"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↑" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="E" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="2"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Padding="0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="↖" FontSize="24" HorizontalAlignment="Center"/>
- <TextBlock Text="C" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- </UniformGrid>
- <StackPanel Grid.Column="2" VerticalAlignment="Center">
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="9"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Margin="0,3">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="⇔" FontSize="22" HorizontalAlignment="Center"/>
- <TextBlock Text="J" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding FeederDirectionCommand}" CommandParameter="10"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Margin="0,3">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="⇕" FontSize="22" HorizontalAlignment="Center"/>
- <TextBlock Text="K" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding ToggleBacklightCommand}"
- Style="{DynamicResource ButtonDefault}" Width="60" Height="60" Margin="0,3">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock FontSize="22" HorizontalAlignment="Center">
- <TextBlock.Style>
- <Style TargetType="TextBlock">
- <Setter Property="Text" Value="💡"/>
- <Style.Triggers>
- <DataTrigger Binding="{Binding Info.IsBacklightOn}" Value="True">
- <Setter Property="Text" Value="🔆"/>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </TextBlock.Style>
- </TextBlock>
- <TextBlock Text="{loc:Translate '灯'}" FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- <Button Command="{Binding StopFeederActionCommand}"
- Style="{DynamicResource ButtonDanger}" Width="60" Height="60" Margin="0,6,0,0">
- <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
- <TextBlock Text="⏹" FontSize="22" HorizontalAlignment="Center"/>
- <TextBlock Text="{loc:Translate '停'}" FontSize="12" Foreground="White" HorizontalAlignment="Center" Margin="0,2,0,0"/>
- </StackPanel>
- </Button>
- </StackPanel>
- </Grid>
- </Border>
- <!-- 右面板:TabControl -->
- <Border Grid.Column="1" Background="{DynamicResource RegionBrush}" CornerRadius="8" Padding="12">
- <TabControl Background="Transparent" BorderThickness="0">
- <TabItem Header="{loc:Translate '🔧 振动集调试'}" FontSize="13">
- <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
- <Grid Margin="8">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,12">
- <TextBlock Text="{loc:Translate '振动集:'}" VerticalAlignment="Center"/>
- <ComboBox ItemsSource="{Binding VibrationSetList}" SelectedIndex="{Binding SelectedVibrationSetIndex}"
- MinWidth="70" Margin="6,0,16,0" Padding="6,2"/>
- <TextBlock Text="{loc:Translate '动作:'}" VerticalAlignment="Center"/>
- <ComboBox ItemsSource="{Binding ActionLetterList}" SelectedIndex="{Binding SelectedActionIndex}"
- MinWidth="70" Margin="6,0,16,0" Padding="6,2"/>
- <TextBlock Text="{loc:Translate '持续(ms):'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentDuration}" Minimum="0" Maximum="20000" Increment="100" Width="110" Margin="6,0,16,0"/>
- <Button Content="{loc:Translate '▶ 执行'}" Command="{Binding ExecuteActionCommand}"
- Style="{DynamicResource ButtonPrimary}" Margin="0,0,4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '⏹ 停止'}" Command="{Binding StopFeederActionCommand}"
- Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '💾 下载参数'}" Command="{Binding DownloadParamCommand}"
- Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="10,3"/>
- </StackPanel>
- <UniformGrid Grid.Row="1" Columns="2" Rows="2">
- <GroupBox Header="{loc:Translate '马达1'}" Margin="4" Padding="8" FontSize="16">
- <UniformGrid Columns="2">
- <TextBlock Text="{loc:Translate '振幅(%)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor1.Amplitude, Mode=TwoWay}" Minimum="0" Maximum="100" Width="150"/>
- <TextBlock Text="{loc:Translate '频率(Hz)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor1.Frequency, Mode=TwoWay}" Minimum="0" Maximum="250" Width="150"/>
- <TextBlock Text="{loc:Translate '相位(°)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor1.Phase, Mode=TwoWay}" Minimum="0" Maximum="359" Width="150"/>
- <TextBlock Text="{loc:Translate '波形'}" VerticalAlignment="Center"/>
- <hc:ButtonGroup Padding="2">
- <ToggleButton Content="{loc:Translate '不启用'}" IsChecked="{Binding CurrentAction.Motor1.IsWaveNone, Mode=TwoWay}" Padding="4,2"/>
- <ToggleButton Content="∿" IsChecked="{Binding CurrentAction.Motor1.IsWaveSin, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧊" IsChecked="{Binding CurrentAction.Motor1.IsWaveSaw, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧋" IsChecked="{Binding CurrentAction.Motor1.IsWaveTri, Mode=TwoWay}" Padding="6,2"/>
- </hc:ButtonGroup>
- </UniformGrid>
- </GroupBox>
- <GroupBox Header="{loc:Translate '马达2'}" Margin="4" Padding="8">
- <UniformGrid Columns="2">
- <TextBlock Text="{loc:Translate '振幅(%)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor2.Amplitude, Mode=TwoWay}" Minimum="0" Maximum="100" Width="150"/>
- <TextBlock Text="{loc:Translate '频率(Hz)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor2.Frequency, Mode=TwoWay}" Minimum="0" Maximum="250" Width="150"/>
- <TextBlock Text="{loc:Translate '相位(°)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor2.Phase, Mode=TwoWay}" Minimum="0" Maximum="359" Width="150"/>
- <TextBlock Text="{loc:Translate '波形'}" VerticalAlignment="Center"/>
- <hc:ButtonGroup Padding="2">
- <ToggleButton Content="{loc:Translate '不启用'}" IsChecked="{Binding CurrentAction.Motor2.IsWaveNone, Mode=TwoWay}" Padding="4,2"/>
- <ToggleButton Content="∿" IsChecked="{Binding CurrentAction.Motor2.IsWaveSin, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧊" IsChecked="{Binding CurrentAction.Motor2.IsWaveSaw, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧋" IsChecked="{Binding CurrentAction.Motor2.IsWaveTri, Mode=TwoWay}" Padding="6,2"/>
- </hc:ButtonGroup>
- </UniformGrid>
- </GroupBox>
- <GroupBox Header="{loc:Translate '马达3'}" Margin="4" Padding="8">
- <UniformGrid Columns="2">
- <TextBlock Text="{loc:Translate '振幅(%)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor3.Amplitude, Mode=TwoWay}" Minimum="0" Maximum="100" Width="150"/>
- <TextBlock Text="{loc:Translate '频率(Hz)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor3.Frequency, Mode=TwoWay}" Minimum="0" Maximum="250" Width="150"/>
- <TextBlock Text="{loc:Translate '相位(°)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor3.Phase, Mode=TwoWay}" Minimum="0" Maximum="359" Width="150"/>
- <TextBlock Text="{loc:Translate '波形'}" VerticalAlignment="Center"/>
- <hc:ButtonGroup Padding="2">
- <ToggleButton Content="{loc:Translate '不启用'}" IsChecked="{Binding CurrentAction.Motor3.IsWaveNone, Mode=TwoWay}" Padding="4,2"/>
- <ToggleButton Content="∿" IsChecked="{Binding CurrentAction.Motor3.IsWaveSin, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧊" IsChecked="{Binding CurrentAction.Motor3.IsWaveSaw, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧋" IsChecked="{Binding CurrentAction.Motor3.IsWaveTri, Mode=TwoWay}" Padding="6,2"/>
- </hc:ButtonGroup>
- </UniformGrid>
- </GroupBox>
- <GroupBox Header="{loc:Translate '马达4'}" Margin="4" Padding="8">
- <UniformGrid Columns="2">
- <TextBlock Text="{loc:Translate '振幅(%)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor4.Amplitude, Mode=TwoWay}" Minimum="0" Maximum="100" Width="150"/>
- <TextBlock Text="{loc:Translate '频率(Hz)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor4.Frequency, Mode=TwoWay}" Minimum="0" Maximum="250" Width="150"/>
- <TextBlock Text="{loc:Translate '相位(°)'}" VerticalAlignment="Center"/>
- <hc:NumericUpDown Value="{Binding CurrentAction.Motor4.Phase, Mode=TwoWay}" Minimum="0" Maximum="359" Width="150"/>
- <TextBlock Text="{loc:Translate '波形'}" VerticalAlignment="Center"/>
- <hc:ButtonGroup Padding="2">
- <ToggleButton Content="{loc:Translate '不启用'}" IsChecked="{Binding CurrentAction.Motor4.IsWaveNone, Mode=TwoWay}" Padding="4,2"/>
- <ToggleButton Content="∿" IsChecked="{Binding CurrentAction.Motor4.IsWaveSin, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧊" IsChecked="{Binding CurrentAction.Motor4.IsWaveSaw, Mode=TwoWay}" Padding="6,2"/>
- <ToggleButton Content="⧋" IsChecked="{Binding CurrentAction.Motor4.IsWaveTri, Mode=TwoWay}" Padding="6,2"/>
- </hc:ButtonGroup>
- </UniformGrid>
- </GroupBox>
- </UniformGrid>
- <GroupBox Grid.Row="2" Header="{loc:Translate '关于'}" Margin="4,12,4,4" Padding="8">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="100"/>
- <ColumnDefinition Width="*"/>
- </Grid.ColumnDefinitions>
- <StackPanel Grid.Column="0">
- <CheckBox Content="{loc:Translate '同步变化'}" IsChecked="{Binding IsSyncChanging}" Margin="0,4" HorizontalAlignment="Center" VerticalAlignment="Center"/>
- </StackPanel>
- <StackPanel Grid.Column="1" Margin="12,0,0,0">
- <StackPanel Orientation="Horizontal" Margin="0,2">
- <TextBlock Text="{loc:Translate '全局振幅:'}" VerticalAlignment="Center" MinWidth="60"/>
- <Slider Minimum="0" Maximum="100" Value="{Binding GlobalAmplitude}" Width="400" Margin="0,0,8,0"/>
- <TextBlock Text="{Binding GlobalAmplitude}" Width="38" VerticalAlignment="Center"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="0,4">
- <TextBlock Text="{loc:Translate '全局频率:'}" VerticalAlignment="Center" MinWidth="60"/>
- <Slider Minimum="0" Maximum="250" Value="{Binding GlobalFrequency}" Width="400" Margin="0,0,8,0"/>
- <TextBlock Text="{Binding GlobalFrequency}" Width="38" VerticalAlignment="Center"/>
- </StackPanel>
- </StackPanel>
- </Grid>
- </GroupBox>
- </Grid>
- </ScrollViewer>
- </TabItem>
- <TabItem Header="{loc:Translate '📜 序列集(送料流程)'}" FontSize="13">
- <Grid Margin="4">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,4,0,8">
- <TextBlock Text="{loc:Translate '流程:'}" VerticalAlignment="Center"/>
- <ComboBox ItemsSource="{Binding CurrentSequences}" SelectedItem="{Binding SelectedSequence}"
- DisplayMemberPath="Name" MinWidth="140" Margin="6,0" Padding="6,2"/>
- <Button Content="{loc:Translate '➕ 新流程'}" Command="{Binding AddSequenceCommand}"
- Style="{DynamicResource ButtonPrimary}" Margin="0,0,4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '🗑 删流程'}" Command="{Binding DeleteSequenceCommand}"
- Style="{DynamicResource ButtonDanger}" Margin="4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '📝 重命名'}" Command="{Binding RenameSequenceCommand}"
- Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="10,3"/>
- <Rectangle Width="1" Height="22" Fill="{DynamicResource BorderBrush}" Margin="8,0"/>
- <TextBlock Text="{loc:Translate '添加步骤:'}" VerticalAlignment="Center"/>
- <Button Content="{loc:Translate '↔ 方向振动'}" Command="{Binding AddSequenceStepCommand}" CommandParameter="Direction"
- Style="{DynamicResource ButtonDefault}" Margin="6,0,4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '⏱ 延时等待'}" Command="{Binding AddSequenceStepCommand}" CommandParameter="Delay"
- Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="10,3"/>
- <Rectangle Width="1" Height="22" Fill="{DynamicResource BorderBrush}" Margin="8,0"/>
- <Button Content="⬆" Command="{Binding MoveUpStepCommand}" Style="{DynamicResource ButtonDefault}" Margin="0,0,4,0" Padding="8,3" IsEnabled="{Binding HasSelectedStep}"/>
- <Button Content="⬇" Command="{Binding MoveDownStepCommand}" Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="8,3" IsEnabled="{Binding HasSelectedStep}"/>
- <Button Content="🗑" Command="{Binding DeleteStepCommand}" Style="{DynamicResource ButtonDanger}" Margin="4,0" Padding="8,3" IsEnabled="{Binding HasSelectedStep}"/>
- </StackPanel>
- <DataGrid Grid.Row="1" ItemsSource="{Binding CurrentSequenceSteps}" SelectedItem="{Binding SelectedStep}"
- AutoGenerateColumns="False" CanUserAddRows="False"
- AlternatingRowBackground="{DynamicResource SecondaryRegionBrush}">
- <DataGrid.Columns>
- <DataGridTextColumn Header="#" Binding="{Binding Index}" Width="auto" IsReadOnly="True"/>
- <DataGridCheckBoxColumn Header="{loc:Translate '启用'}" Binding="{Binding Enabled}" Width="auto"/>
- <DataGridTemplateColumn Header="{loc:Translate '类型'}" Width="auto">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <ComboBox ItemsSource="{Binding Source={StaticResource SequenceStepTypeEnum}}" SelectedItem="{Binding StepType}">
- <ComboBox.ItemTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}"/>
- </DataTemplate>
- </ComboBox.ItemTemplate>
- </ComboBox>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="{loc:Translate '方向'}" Width="auto">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <ComboBox ItemsSource="{Binding Source={StaticResource FeederActionEnum}}" SelectedItem="{Binding Direction}">
- <ComboBox.ItemTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}"/>
- </DataTemplate>
- </ComboBox.ItemTemplate>
- </ComboBox>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="{loc:Translate '时间(ms)'}" Width="auto">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <hc:NumericUpDown Value="{Binding TimeMs}" Minimum="0" Maximum="30000" Increment="50" Width="80"/>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTextColumn Header="{loc:Translate '备注'}" Binding="{Binding Note}" Width="*"/>
- </DataGrid.Columns>
- </DataGrid>
- <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,8,0,0">
- <Button Content="{loc:Translate '▶ 执行流程'}" Command="{Binding ExecuteSequenceCommand}"
- Style="{DynamicResource ButtonPrimary}" Padding="14,5" Margin="0,0,8,0"/>
- <Button Content="{loc:Translate '⏹ 停止流程'}" Command="{Binding StopSequenceCommand}"
- Style="{DynamicResource ButtonDanger}" Padding="14,5"/>
- <TextBlock Text="{Binding SequenceStatusText}" VerticalAlignment="Center" Margin="20,0,0,0"
- Foreground="{DynamicResource PrimaryBrush}" FontWeight="Bold"/>
- </StackPanel>
- </Grid>
- </TabItem>
- <TabItem Header="{loc:Translate '📥 输入输出'}" FontSize="13">
- <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
- <StackPanel Margin="8">
- <GroupBox Header="{loc:Translate '料斗输出参数'}" Margin="4" Padding="8">
- <StackPanel>
- <StackPanel Orientation="Horizontal" Margin="0,0,0,10">
- <TextBlock Text="{loc:Translate '输出组:'}" VerticalAlignment="Center"/>
- <ComboBox ItemsSource="{Binding HopperGroupList}" SelectedItem="{Binding SelectedHopperGroup}" MinWidth="70" Margin="6,0,12,0" Padding="6,2"/>
- <Button Content="{loc:Translate '⬇ 读取'}" Command="{Binding ReadHopperParamCommand}" Style="{DynamicResource ButtonDefault}" Margin="4,0" Padding="10,3"/>
- <Button Content="{loc:Translate '⬆ 下载'}" Command="{Binding WriteHopperParamCommand}" Style="{DynamicResource ButtonPrimary}" Margin="4,0" Padding="10,3"/>
- </StackPanel>
- <UniformGrid Columns="2">
- <CheckBox Content="{loc:Translate '数字量输出1'}" IsChecked="{Binding HopperParam.HopperDigitalOutput1}" VerticalAlignment="Center" Margin="4,6"/>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '模拟量输出1:'}" VerticalAlignment="Center" MinWidth="90"/>
- <hc:NumericUpDown Value="{Binding HopperParam.HopperAnalogOutput1}" Minimum="0" Maximum="10" Width="120"/>
- </StackPanel>
- <CheckBox Content="{loc:Translate '数字量输出2'}" IsChecked="{Binding HopperParam.HopperDigitalOutput2}" VerticalAlignment="Center" Margin="4,6"/>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '模拟量输出2:'}" VerticalAlignment="Center" MinWidth="90"/>
- <hc:NumericUpDown Value="{Binding HopperParam.HopperAnalogOutput2}" Minimum="0" Maximum="10" Width="120"/>
- </StackPanel>
- </UniformGrid>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '振动持续时间(ms):'}" VerticalAlignment="Center" MinWidth="130"/>
- <hc:NumericUpDown Value="{Binding HopperParam.HopperDuration}" Minimum="0" Maximum="60000" Increment="100" Width="140"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="0,8,0,0">
- <Button Content="{loc:Translate '▶ 执行料斗'}" Command="{Binding RunHopperOutputCommand}" Style="{DynamicResource ButtonPrimary}" Margin="0,0,8,0" Padding="12,4"/>
- <Button Content="{loc:Translate '⏹ 停止料斗'}" Command="{Binding StopHopperOutputCommand}" Style="{DynamicResource ButtonDanger}" Padding="12,4"/>
- </StackPanel>
- </StackPanel>
- </GroupBox>
- <GroupBox Header="{loc:Translate '输入触发(外部信号触发序列)'}" Margin="4,12,4,4" Padding="8">
- <StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '输入1触发序列ID:'}" VerticalAlignment="Center" MinWidth="140"/>
- <hc:NumericUpDown Value="{Binding InputTrigger1}" Minimum="0" Maximum="26" Width="120"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '输入2触发序列ID:'}" VerticalAlignment="Center" MinWidth="140"/>
- <hc:NumericUpDown Value="{Binding InputTrigger2}" Minimum="0" Maximum="26" Width="120"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="0,8,0,0">
- <Button Content="{loc:Translate '⬇ 读取'}" Command="{Binding ReadInputTriggerCommand}" Style="{DynamicResource ButtonDefault}" Margin="0,0,8,0" Padding="12,4"/>
- <Button Content="{loc:Translate '⬆ 写入'}" Command="{Binding WriteInputTriggerCommand}" Style="{DynamicResource ButtonPrimary}" Padding="12,4"/>
- </StackPanel>
- </StackPanel>
- </GroupBox>
- </StackPanel>
- </ScrollViewer>
- </TabItem>
- <TabItem Header="{loc:Translate '⚙ 系统参数(超时)'}" FontSize="13">
- <ScrollViewer VerticalScrollBarVisibility="Auto">
- <StackPanel Margin="8">
- <GroupBox Header="{loc:Translate '振动超时(关键:过短会导致动作被提前中断)'}" Margin="4" Padding="8">
- <StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '平台振动超时(ms):'}" VerticalAlignment="Center" MinWidth="150"/>
- <hc:NumericUpDown Value="{Binding SystemParam.PlatShakeTimeout}" Minimum="1" Maximum="65535" Increment="100" Width="140"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '料斗振动超时(ms):'}" VerticalAlignment="Center" MinWidth="150"/>
- <hc:NumericUpDown Value="{Binding SystemParam.HopperShakeTimeout}" Minimum="1" Maximum="65535" Increment="100" Width="140"/>
- </StackPanel>
- </StackPanel>
- </GroupBox>
- <GroupBox Header="{loc:Translate '背光参数'}" Margin="4,12,4,4" Padding="8">
- <StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '背光超时(ms):'}" VerticalAlignment="Center" MinWidth="150"/>
- <hc:NumericUpDown Value="{Binding SystemParam.LightTimeout}" Minimum="1" Maximum="65535" Increment="100" Width="140"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '光源亮度(%):'}" VerticalAlignment="Center" MinWidth="150"/>
- <hc:NumericUpDown Value="{Binding SystemParam.LightBrightness}" Minimum="1" Maximum="100" Width="140"/>
- </StackPanel>
- <StackPanel Orientation="Horizontal" Margin="4,6">
- <TextBlock Text="{loc:Translate '背光闪烁时间(ms):'}" VerticalAlignment="Center" MinWidth="150"/>
- <hc:NumericUpDown Value="{Binding SystemParam.LightFlashTime}" Minimum="1" Maximum="65535" Increment="100" Width="140"/>
- </StackPanel>
- </StackPanel>
- </GroupBox>
- <StackPanel Orientation="Horizontal" Margin="4,12,0,0">
- <Button Content="{loc:Translate '⬇ 读取系统参数'}" Command="{Binding ReadSystemParamCommand}" Style="{DynamicResource ButtonDefault}" Margin="0,0,8,0" Padding="14,5"/>
- <Button Content="{loc:Translate '⬆ 写入并保存'}" Command="{Binding WriteSystemParamCommand}" Style="{DynamicResource ButtonPrimary}" Padding="14,5"/>
- </StackPanel>
- </StackPanel>
- </ScrollViewer>
- </TabItem>
- </TabControl>
- </Border>
- </Grid>
- </UserControl>
|