2026-06-05 13:44:39 +09:00

307 lines
22 KiB
XML

<UserControl x:Class="ILSOS_PrismaticGun.Views.UCMainAutoRun"
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:ILSOS_PrismaticGun.Views"
xmlns:common="clr-namespace:WeldingCommon.Views;assembly=WeldingCommon"
xmlns:behavior="http://schemas.microsoft.com/xaml/behaviors"
xmlns:view="clr-namespace:Aurora.View;assembly=Aurora"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:aurorauicomponent="clr-namespace:AuroraUIComponent;assembly=AuroraUIComponent"
xmlns:usercontrols="clr-namespace:AuroraUIComponent.UserControls;assembly=AuroraUIComponent"
xmlns:canvas="clr-namespace:ILSOS_PrismaticGun.WeldingCanvas" xmlns:main="clr-namespace:ILSOS_PrismaticGun.Views.Main"
d:DataContext="{d:DesignInstance Type=local:UCMainAutoRunViewModel}"
mc:Ignorable="d"
d:DesignHeight="1000" d:DesignWidth="1200" x:Name="uc" IsVisibleChanged="uc_IsVisibleChanged">
<UserControl.Resources>
<view:BoolConverter x:Key="convSequenceStatusColor" TrueValue="ForestGreen" FalseValue="#3E3E42"/>
<view:BoolConverter x:Key="convAlarmStatusColor" TrueValue="Red" FalseValue="ForestGreen"/>
<view:BoolConverter x:Key="convSequenceStatus" TrueValue="Process Running" FalseValue="Process Stop" />
<view:BoolConverter x:Key="convAlarmStatus" TrueValue="Alarm Error" FalseValue="No Alarm" />
</UserControl.Resources>
<behavior:Interaction.Triggers>
<behavior:PropertyChangedTrigger Binding="{Binding IsVisible, ElementName=uc}">
<behavior:InvokeCommandAction Command="{Binding CMD_VisibleChanged}" CommandParameter="{Binding IsVisible, ElementName=uc}"/>
</behavior:PropertyChangedTrigger>
</behavior:Interaction.Triggers>
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="1.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" Grid.ColumnSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="0.3*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="0.3*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="Working State" Margin="5 0 0 0">
<main:UCWorkState DataContext="{Binding UCStageBWorkState}"/>
</GroupBox>
<GroupBox Grid.Row="1" Header="Stage B" Margin="0 5 0 0">
<Grid Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition/>
<ColumnDefinition Width="0.4*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="1">
<usercontrols:UCBoolianValue KeyText="Unload Request" LightOn="{Binding PLCIOStageB.UnloadRequest}"/>
<usercontrols:UCBoolianValue KeyText="Unload Request Ack" LightOn="{Binding PLCIOStageB.UnloadRequestAck}"/>
<usercontrols:UCBoolianValue KeyText="Unload Comp" LightOn="{Binding PLCIOStageB.UnloadComp}"/>
<usercontrols:UCBoolianValue KeyText="Unload Comp Ack" LightOn="{Binding PLCIOStageB.UnloadCompAck}"/>
<Grid/>
<Grid/>
<usercontrols:UCBoolianValue KeyText="PLC -> PC Unload Enable" LightOn="{Binding PLCIOStageB.UnloadEnableFromPLC}"/>
<usercontrols:UCBoolianValue KeyText="PC -> PLC Unload Enable" LightOn="{Binding PLCIOStageB.UnloadEnableFromPC}"/>
</UniformGrid>
<canvas:WeldingCanvas Grid.Column="1" x:Name="CanvasStageB" Background="DarkGray"
MainRcp="{Binding ActivatedRecipeStageB}"
IsFlipY="False"
PalletInfo ="{Binding PalletInfoStageB}"/>
<UniformGrid Grid.Column="2" Columns="1">
<usercontrols:UCBoolianValue KeyText="Load Request" LightOn="{Binding PLCIOStageB.LoadRequest}"/>
<usercontrols:UCBoolianValue KeyText="Load Request Ack" LightOn="{Binding PLCIOStageB.LoadRequestAck}"/>
<usercontrols:UCBoolianValue KeyText="Load Comp" LightOn="{Binding PLCIOStageB.LoadComp}"/>
<usercontrols:UCBoolianValue KeyText="Load Comp Ack" LightOn="{Binding PLCIOStageB.LoadCompAck}"/>
<Grid/>
<Grid/>
<usercontrols:UCBoolianValue KeyText="PLC -> PC Load Enable" LightOn="{Binding PLCIOStageB.LoadEnableFromPLC}"/>
<usercontrols:UCBoolianValue KeyText="PC -> PLC Load Enable" LightOn="{Binding PLCIOStageB.LoadEnableFromPC}"/>
</UniformGrid>
</Grid>
</GroupBox>
<GroupBox Grid.Row="2" Header="Working State" Margin="5 0 0 0">
<main:UCWorkState DataContext="{Binding UCStageAWorkState}"/>
</GroupBox>
<GroupBox Grid.Row="3" Header="Stage A" Margin="0 5 0 0">
<Grid Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition/>
<ColumnDefinition Width="0.4*"/>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="1">
<usercontrols:UCBoolianValue KeyText="Unload Request" LightOn="{Binding PLCIOStageA.UnloadRequest}"/>
<usercontrols:UCBoolianValue KeyText="Unload Request Ack" LightOn="{Binding PLCIOStageA.UnloadRequestAck}"/>
<usercontrols:UCBoolianValue KeyText="Unload Comp" LightOn="{Binding PLCIOStageA.UnloadComp}"/>
<usercontrols:UCBoolianValue KeyText="Unload Comp Ack" LightOn="{Binding PLCIOStageA.UnloadCompAck}"/>
<Grid/>
<Grid/>
<usercontrols:UCBoolianValue KeyText="PLC -> PC Unload Enable" LightOn="{Binding PLCIOStageA.UnloadEnableFromPLC}"/>
<usercontrols:UCBoolianValue KeyText="PC -> PLC Unload Enable" LightOn="{Binding PLCIOStageA.UnloadEnableFromPC}"/>
</UniformGrid>
<canvas:WeldingCanvas Grid.Column="1" x:Name="CanvasStageA" Background="DarkGray"
MainRcp="{Binding ActivatedRecipeStageA}"
IsFlipY="True"
PalletInfo ="{Binding PalletInfoStageA}"/>
<UniformGrid Grid.Column="2" Columns="1">
<usercontrols:UCBoolianValue KeyText="Load Request" LightOn="{Binding PLCIOStageA.LoadRequest}"/>
<usercontrols:UCBoolianValue KeyText="Load Request Ack" LightOn="{Binding PLCIOStageA.LoadRequestAck}"/>
<usercontrols:UCBoolianValue KeyText="Load Comp" LightOn="{Binding PLCIOStageA.LoadComp}"/>
<usercontrols:UCBoolianValue KeyText="Load Comp Ack" LightOn="{Binding PLCIOStageA.LoadCompAck}"/>
<Grid/>
<Grid/>
<usercontrols:UCBoolianValue KeyText="PLC -> PC Load Enable" LightOn="{Binding PLCIOStageA.LoadEnableFromPLC}"/>
<usercontrols:UCBoolianValue KeyText="PC -> PLC Load Enable" LightOn="{Binding PLCIOStageA.LoadEnableFromPC}"/>
</UniformGrid>
</Grid>
</GroupBox>
</Grid>
<Grid Grid.Row="0" Grid.RowSpan="3" Grid.Column="2" Margin="5 0 0 0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <!-- Manual Control -->
<RowDefinition Height="Auto"/> <!-- Equipment Status -->
<RowDefinition Height="*"/> <!-- Stage B Info: 스크롤 영역 1 -->
<RowDefinition Height="Auto"/> <!-- (빈 공간 또는 다른 Auto) -->
<RowDefinition Height="*"/> <!-- Stage A Info: 스크롤 영역 2 -->
<RowDefinition Height="Auto"/> <!-- MFC Setting -->
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="Manual Control" Margin="0 0 0 0">
<Grid Height="50" Margin="0 0 0 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="3 0 3 2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_RunSequenceAutoRun}" Content="Run AutoRun" IsEnabled="{Binding IsSequenceRunning_AutoRun, Converter={StaticResource convReverse}}"/>
<Button Grid.Column="1" Margin="3 0 3 2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_StopSequenceAutoRun}" Content="Stop" IsEnabled="{Binding IsSequenceRunning_AutoRun}"/>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1" Header="Equipment Status" Margin="0 5 0 0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="1" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="AutoRun Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="2" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding IsSequenceRunning_AutoRun, Converter={StaticResource convSequenceStatus}}" Background="{Binding IsSequenceRunning_AutoRun, Converter={StaticResource convSequenceStatusColor}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Border Grid.Row="1" Grid.Column="1" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Alarm Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="1" Grid.Column="2" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding IsAlarm, Converter={StaticResource convAlarmStatus}}" Background="{Binding IsAlarm, Converter={StaticResource convAlarmStatusColor}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
</Grid>
</GroupBox>
<GroupBox Grid.Row="2" Header="Stage B Info" Margin="0 5 0 0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Total Product" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="1" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding PalletInfoStageB.weldingData.TotalProduct}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="0" Grid.Column="2" Margin="3" Command="{Binding CMD_ResetTotal}" Content="Reset" CommandParameter="B" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}" />
<Border Grid.Row="0" Grid.Column="3" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Today Product" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="4" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding PalletInfoStageB.weldingData.TodayProduct}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="0" Grid.Column="5" Margin="3" Command="{Binding CMD_ResetToday}" Content="Reset" CommandParameter="B" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}" />
<DataGrid Grid.Row="1" Grid.ColumnSpan="6" Grid.RowSpan="3"
ItemsSource="{Binding HistoryB}"
AutoGenerateColumns="False"
IsReadOnly="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.ScrollUnit="Item"
EnableRowVirtualization="True">
<DataGrid.Columns>
<DataGridTextColumn Header="LoadTime" Binding="{Binding LoadStartTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="WeldingCoreTime" Binding="{Binding TactTime_Welding, StringFormat={}{0:hh\\:mm\\:ss\\.fff}}"/>
<DataGridTextColumn Header="UnloadTime" Binding="{Binding UnloadStartTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="CellId" Binding="{Binding CellId}"/>
<DataGridTextColumn Header="CellExist" Binding="{Binding IsCellExist}"/>
<DataGridTextColumn Header="AlreadyWelding" Binding="{Binding IsAlreadyWelding}"/>
<DataGridTextColumn Header="NG" Binding="{Binding NgReason}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>
<GroupBox Grid.Row="4" Grid.RowSpan="2" Header="Stage A Info" Margin="0 5 0 0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.3*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Total Product" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="1" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding PalletInfoStageA.weldingData.TotalProduct}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="0" Grid.Column="2" Margin="3" Command="{Binding CMD_ResetTotal}" Content="Reset" CommandParameter="A" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}" />
<Border Grid.Row="0" Grid.Column="3" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Today Product" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="4" BorderThickness="1" BorderBrush="Gray" Margin="2">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding PalletInfoStageA.weldingData.TodayProduct}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="0" Grid.Column="5" Margin="3" Command="{Binding CMD_ResetToday}" Content="Reset" CommandParameter="A" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}" />
<DataGrid Grid.Row="1" Grid.ColumnSpan="6" Grid.RowSpan="3"
ItemsSource="{Binding HistoryA}"
AutoGenerateColumns="False"
IsReadOnly="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.ScrollUnit="Item"
EnableRowVirtualization="True">
<DataGrid.Columns>
<DataGridTextColumn Header="LoadTime" Binding="{Binding LoadStartTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="WeldingCoreTime" Binding="{Binding TactTime_Welding, StringFormat={}{0:hh\\:mm\\:ss\\.fff}}"/>
<DataGridTextColumn Header="UnloadTime" Binding="{Binding UnloadStartTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"/>
<DataGridTextColumn Header="CellId" Binding="{Binding CellId}"/>
<DataGridTextColumn Header="CellExist" Binding="{Binding IsCellExist}"/>
<DataGridTextColumn Header="AlreadyWelding" Binding="{Binding IsAlreadyWelding}"/>
<DataGridTextColumn Header="NG" Binding="{Binding NgReason}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>
<GroupBox Grid.Row="5" Header="MFC Setting" Margin="0 5 0 0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Margin="5 0 5 0">
<UniformGrid Columns="1">
<Grid Margin="0 2 0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontSize="13" HorizontalAlignment="Center" Text="StageA Current"/>
<TextBox Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" IsReadOnly="True" Text="{Binding MFCCurrentStageA, StringFormat={}{0:0.000}}"/>
</Grid>
</UniformGrid>
</Border>
<Border Grid.Column="1" Margin="5 0 5 0">
<UniformGrid Columns="1">
<Grid Margin="0 2 0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontSize="13" HorizontalAlignment="Center" Text="StageB Current"/>
<TextBox Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" IsReadOnly="True" Text="{Binding MFCCurrentStageB, StringFormat={}{0:0.000}}"/>
</Grid>
</UniformGrid>
</Border>
</Grid>
</GroupBox>
</Grid>
</Grid>
</UserControl>