feat: NoLaser 옵션을 Manual(ScannerLaserControl)로 이동, Recipe NoLaser 제거
- Manual: IsNoLaser 추가, Laser On 직접 분기(Percent/Watt)의 LaserSignalOn을 if(!IsNoLaser)로 가드 → 체크 시 발진 없이 전압만 인가 - Manual XAML: Use Spot Time과 동일 ToggleSwitch 디자인의 'No Laser(전압만)' 토글 추가 (Timer Set: UseSpotTime → Time(체크시) → NoLaser → DA1/DA2 Voltage) - Recipe(UCScannerObjectTeachingControlBox): NoLaser 완전 제거(원래 의도가 Manual), PerformCmdLaserReadyCheck를 WriteDoBit(9/13,true)로 환원. DI 11&15 변경은 유지. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
166d1bd2f0
commit
accffdd94a
@ -52,10 +52,6 @@
|
|||||||
<usercontrols:UCKeyValue KeyText="Frequency" Value="{Binding LaserPeriod}" DecimalPlaces="0" Unit="kHz" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" />
|
<usercontrols:UCKeyValue KeyText="Frequency" Value="{Binding LaserPeriod}" DecimalPlaces="0" Unit="kHz" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" />
|
||||||
<usercontrols:UCKeyValue KeyText="Pulse Width" Value="{Binding LaserPulseWidth}" DecimalPlaces="0" Unit="us" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" />
|
<usercontrols:UCKeyValue KeyText="Pulse Width" Value="{Binding LaserPulseWidth}" DecimalPlaces="0" Unit="us" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" />
|
||||||
</UniformGrid>
|
</UniformGrid>
|
||||||
<UniformGrid Grid.Row="1" Rows="2" VerticalAlignment="Top" Margin="0 5 0 0">
|
|
||||||
<usercontrols:UCKeyValue KeyText="DA1 Voltage" Value="{Binding AnalogOut1Voltage}" DecimalPlaces="3" Unit="V" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" IsReadOnly="True" />
|
|
||||||
<usercontrols:UCKeyValue KeyText="DA2 Voltage" Value="{Binding AnalogOut2Voltage}" DecimalPlaces="3" Unit="V" KeyHorizontalAlignment="Right" KeyTextWidth="0.5*" IsReadOnly="True" />
|
|
||||||
</UniformGrid>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
|
||||||
@ -72,6 +68,7 @@
|
|||||||
<GroupBox Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Header="Timer Set" Style="{StaticResource StGroupBox4th}">
|
<GroupBox Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Header="Timer Set" Style="{StaticResource StGroupBox4th}">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="auto"></RowDefinition>
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="auto"></RowDefinition>
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="1*"></RowDefinition>
|
<RowDefinition Height="1*"></RowDefinition>
|
||||||
@ -83,6 +80,16 @@
|
|||||||
OnContent="Use Spot Time"/>
|
OnContent="Use Spot Time"/>
|
||||||
</Border>
|
</Border>
|
||||||
<usercontrols:UCKeyValue Grid.Row="1" KeyText="Time" Value="{Binding LaserOnTime}" DecimalPlaces="0" Unit="ms" KeyHorizontalAlignment="Right" KeyTextWidth="0.9*" Visibility="{Binding IsUseLaserAutoOffChecked, Converter={StaticResource convTrueVisible}}" />
|
<usercontrols:UCKeyValue Grid.Row="1" KeyText="Time" Value="{Binding LaserOnTime}" DecimalPlaces="0" Unit="ms" KeyHorizontalAlignment="Right" KeyTextWidth="0.9*" Visibility="{Binding IsUseLaserAutoOffChecked, Converter={StaticResource convTrueVisible}}" />
|
||||||
|
<Border Grid.Row="2" BorderBrush="Gray" BorderThickness="0.5" Margin="0 3 0 0">
|
||||||
|
<mah:ToggleSwitch HorizontalAlignment="Center" FontSize="12" FontWeight="Bold"
|
||||||
|
IsOn="{Binding IsNoLaser}"
|
||||||
|
OffContent="Laser Fire"
|
||||||
|
OnContent="No Laser (전압만)"/>
|
||||||
|
</Border>
|
||||||
|
<UniformGrid Grid.Row="3" Rows="2" VerticalAlignment="Top" Margin="0 5 0 0">
|
||||||
|
<usercontrols:UCKeyValue KeyText="DA1 Voltage" Value="{Binding AnalogOut1Voltage}" DecimalPlaces="3" Unit="V" KeyHorizontalAlignment="Right" KeyTextWidth="0.9*" IsReadOnly="True" />
|
||||||
|
<usercontrols:UCKeyValue KeyText="DA2 Voltage" Value="{Binding AnalogOut2Voltage}" DecimalPlaces="3" Unit="V" KeyHorizontalAlignment="Right" KeyTextWidth="0.9*" IsReadOnly="True" />
|
||||||
|
</UniformGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Grid.Row="0" Grid.Column="1" Header="Laser Shot Result" Style="{StaticResource StGroupBox4th}">
|
<GroupBox Grid.Row="0" Grid.Column="1" Header="Laser Shot Result" Style="{StaticResource StGroupBox4th}">
|
||||||
|
|||||||
@ -69,6 +69,10 @@ namespace WeldingCommon.Views
|
|||||||
|
|
||||||
private bool _IsUseLaserAutoOffChecked;
|
private bool _IsUseLaserAutoOffChecked;
|
||||||
public bool IsUseLaserAutoOffChecked { get => _IsUseLaserAutoOffChecked; set => SetProperty(ref _IsUseLaserAutoOffChecked, value); }
|
public bool IsUseLaserAutoOffChecked { get => _IsUseLaserAutoOffChecked; set => SetProperty(ref _IsUseLaserAutoOffChecked, value); }
|
||||||
|
|
||||||
|
// No Laser 모드: 체크 시 Laser On 눌러도 LaserSignalOn(발진) 생략 → 전압만 인가(전압 readback 표시용)
|
||||||
|
private bool _IsNoLaser;
|
||||||
|
public bool IsNoLaser { get => _IsNoLaser; set => SetProperty(ref _IsNoLaser, value); }
|
||||||
private double _LaserOnTime;
|
private double _LaserOnTime;
|
||||||
public double LaserOnTime { get => _LaserOnTime; set => SetProperty(ref _LaserOnTime, value); }
|
public double LaserOnTime { get => _LaserOnTime; set => SetProperty(ref _LaserOnTime, value); }
|
||||||
|
|
||||||
@ -328,7 +332,9 @@ namespace WeldingCommon.Views
|
|||||||
_Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth);
|
_Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth);
|
||||||
//_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth);
|
//_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth);
|
||||||
//_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth);
|
//_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth);
|
||||||
_Scanner.LaserSignalOn();
|
if (!IsNoLaser) {
|
||||||
|
_Scanner.LaserSignalOn(); // No Laser면 발진 신호 생략 → 전압만 인가
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void PerformCmdLaserShotOnWatt(object obj)
|
private void PerformCmdLaserShotOnWatt(object obj)
|
||||||
@ -407,7 +413,9 @@ namespace WeldingCommon.Views
|
|||||||
_Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth);
|
_Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth);
|
||||||
//_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth);
|
//_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth);
|
||||||
//_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth);
|
//_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth);
|
||||||
_Scanner.LaserSignalOn();
|
if (!IsNoLaser) {
|
||||||
|
_Scanner.LaserSignalOn(); // No Laser면 발진 신호 생략 → 전압만 인가
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void OnCompleteMarkGrid(SequenceActionResult res)
|
private void OnCompleteMarkGrid(SequenceActionResult res)
|
||||||
|
|||||||
@ -92,7 +92,6 @@
|
|||||||
<RowDefinition Height="auto"></RowDefinition>
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="auto"></RowDefinition>
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="auto"></RowDefinition>
|
<RowDefinition Height="auto"></RowDefinition>
|
||||||
<RowDefinition Height="auto"></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
|
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
|
||||||
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Guid Beam Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
|
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Guid Beam Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
|
||||||
@ -119,10 +118,6 @@
|
|||||||
<TextBlock Text="Laser Ready"/>
|
<TextBlock Text="Laser Ready"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<CheckBox Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="5 6 0 0"
|
|
||||||
FontSize="12" FontWeight="Bold" Foreground="#FFBBBBBB"
|
|
||||||
IsChecked="{Binding IsNoLaser}"
|
|
||||||
Content="No Laser (전압만, 발진 안 함)"/>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
|
||||||
|
|||||||
@ -76,10 +76,6 @@ namespace WeldingCommon.Views
|
|||||||
private bool _IsLaserReady;
|
private bool _IsLaserReady;
|
||||||
public bool IsLaserReady { get => _IsLaserReady; set => SetProperty(ref _IsLaserReady, value); }
|
public bool IsLaserReady { get => _IsLaserReady; set => SetProperty(ref _IsLaserReady, value); }
|
||||||
|
|
||||||
// NoLaser 모드: true면 Laser Control(BIT9/13)을 켜지 않음(false 유지) → 레이저 컨트롤러 OFF 상태로 Laser On 가능 (Cal/전압 측정용)
|
|
||||||
private bool _IsNoLaser;
|
|
||||||
public bool IsNoLaser { get => _IsNoLaser; set => SetProperty(ref _IsNoLaser, value); }
|
|
||||||
|
|
||||||
// Object Select Type
|
// Object Select Type
|
||||||
private bool _IsObjectSelectAll;
|
private bool _IsObjectSelectAll;
|
||||||
public bool IsObjectSelectAll { get => _IsObjectSelectAll; set => SetProperty(ref _IsObjectSelectAll, value); }
|
public bool IsObjectSelectAll { get => _IsObjectSelectAll; set => SetProperty(ref _IsObjectSelectAll, value); }
|
||||||
@ -148,7 +144,6 @@ namespace WeldingCommon.Views
|
|||||||
|
|
||||||
IsGuidBeam = false;
|
IsGuidBeam = false;
|
||||||
IsLaserReady = false;
|
IsLaserReady = false;
|
||||||
IsNoLaser = false;
|
|
||||||
|
|
||||||
IsObjectSelectAll = true;
|
IsObjectSelectAll = true;
|
||||||
}
|
}
|
||||||
@ -466,10 +461,8 @@ namespace WeldingCommon.Views
|
|||||||
// 추후 Write bit 파라미터화 해야함
|
// 추후 Write bit 파라미터화 해야함
|
||||||
if(toggleIO)
|
if(toggleIO)
|
||||||
{
|
{
|
||||||
// IsNoLaser면 레이저 컨트롤러(BIT9/13)를 켜지 않음(false 유지) → 발진 없이 Laser On 가능
|
_IODevice._iOUnit.WriteDoBit(9, true);
|
||||||
bool ctrlOn = !IsNoLaser;
|
_IODevice._iOUnit.WriteDoBit(13, true);
|
||||||
_IODevice._iOUnit.WriteDoBit(9, ctrlOn);
|
|
||||||
_IODevice._iOUnit.WriteDoBit(13, ctrlOn);
|
|
||||||
toggleIO = false;
|
toggleIO = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -113,3 +113,12 @@
|
|||||||
- 표시 대상은 Power Calibration(dbVoltage)이 아니라 **ScannerLaserControl 화면**으로 확정(요청). LaserSignalOn 발사 동작은 변경 없음(readback만 추가).
|
- 표시 대상은 Power Calibration(dbVoltage)이 아니라 **ScannerLaserControl 화면**으로 확정(요청). LaserSignalOn 발사 동작은 변경 없음(readback만 추가).
|
||||||
- AuroraDevices 변경이라 VS Rebuild로 빌드 확인 예정(abstract 추가 → override 3개 모두 구현).
|
- AuroraDevices 변경이라 VS Rebuild로 빌드 확인 예정(abstract 추가 → override 3개 모두 구현).
|
||||||
- 관련 분석: `docs/분석/2026/06/18/122432_laser_on_no_emission_analysis.md`
|
- 관련 분석: `docs/분석/2026/06/18/122432_laser_on_no_emission_analysis.md`
|
||||||
|
|
||||||
|
## 14:14
|
||||||
|
|
||||||
|
### NoLaser를 Manual(ScannerLaserControl)로 이동 + Recipe NoLaser 제거
|
||||||
|
|
||||||
|
- 어제/오늘 Recipe(UCScannerObjectTeachingControlBox)에 만들었던 NoLaser는 **원래 의도가 Manual 화면**이었음 → Recipe에서 **완전 제거**(속성/InitVariable/체크박스/RowDefinition/`PerformCmdLaserReadyCheck`의 `ctrlOn` 원복하여 `WriteDoBit(9/13,true)`로 환원). **DI 11&15 변경은 유지.**
|
||||||
|
- **Manual**(`UCScannerLaserControlViewModel`): `IsNoLaser` 추가, Laser On 직접 분기(Percent/Watt 두 곳)의 `LaserSignalOn()`을 `if(!IsNoLaser)`로 가드 → 체크 시 발진 없이 전압만 인가.
|
||||||
|
- **Manual XAML**(`UCScannerLaserControl.xaml`): Use Spot Time 토글과 **같은 ToggleSwitch 디자인**의 `No Laser (전압만)` 토글 추가. Timer Set 영역 배치 = Use Spot Time → Time(체크 시만) → No Laser → DA1/DA2 Voltage 순.
|
||||||
|
- 이 NoLaser는 RTC5 발진 게이트(`LaserSignalOn`)를 막는 방식이라 **이 화면만으로 자기완결**(DO9/13 별도 화면 불필요). No Use Spot Time + No Laser + Laser On → 전압 readback 표시 + 발진 없음.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user