diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml index e2c3bee..c5c15ce 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml @@ -52,10 +52,6 @@ - - - - @@ -72,6 +68,7 @@ + @@ -83,6 +80,16 @@ OnContent="Use Spot Time"/> + + + + + + + diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs index db9340d..8887b7d 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs @@ -69,6 +69,10 @@ namespace WeldingCommon.Views private bool _IsUseLaserAutoOffChecked; 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; public double LaserOnTime { get => _LaserOnTime; set => SetProperty(ref _LaserOnTime, value); } @@ -328,7 +332,9 @@ namespace WeldingCommon.Views _Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth); //_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth); //_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth); - _Scanner.LaserSignalOn(); + if (!IsNoLaser) { + _Scanner.LaserSignalOn(); // No Laser면 발진 신호 생략 → 전압만 인가 + } } } private void PerformCmdLaserShotOnWatt(object obj) @@ -407,7 +413,9 @@ namespace WeldingCommon.Views _Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth); //_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth); //_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth); - _Scanner.LaserSignalOn(); + if (!IsNoLaser) { + _Scanner.LaserSignalOn(); // No Laser면 발진 신호 생략 → 전압만 인가 + } } } private void OnCompleteMarkGrid(SequenceActionResult res) diff --git a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBox.xaml b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBox.xaml index 872c539..8be4b4f 100644 --- a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBox.xaml +++ b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBox.xaml @@ -92,7 +92,6 @@ - @@ -119,10 +118,6 @@ - diff --git a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs index df0b38f..0b86682 100644 --- a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs @@ -76,10 +76,6 @@ namespace WeldingCommon.Views private bool _IsLaserReady; 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 private bool _IsObjectSelectAll; public bool IsObjectSelectAll { get => _IsObjectSelectAll; set => SetProperty(ref _IsObjectSelectAll, value); } @@ -148,7 +144,6 @@ namespace WeldingCommon.Views IsGuidBeam = false; IsLaserReady = false; - IsNoLaser = false; IsObjectSelectAll = true; } @@ -466,10 +461,8 @@ namespace WeldingCommon.Views // 추후 Write bit 파라미터화 해야함 if(toggleIO) { - // IsNoLaser면 레이저 컨트롤러(BIT9/13)를 켜지 않음(false 유지) → 발진 없이 Laser On 가능 - bool ctrlOn = !IsNoLaser; - _IODevice._iOUnit.WriteDoBit(9, ctrlOn); - _IODevice._iOUnit.WriteDoBit(13, ctrlOn); + _IODevice._iOUnit.WriteDoBit(9, true); + _IODevice._iOUnit.WriteDoBit(13, true); toggleIO = false; } else diff --git a/docs/작업일지/2026_06_18.md b/docs/작업일지/2026_06_18.md index 8924fea..0684b80 100644 --- a/docs/작업일지/2026_06_18.md +++ b/docs/작업일지/2026_06_18.md @@ -113,3 +113,12 @@ - 표시 대상은 Power Calibration(dbVoltage)이 아니라 **ScannerLaserControl 화면**으로 확정(요청). LaserSignalOn 발사 동작은 변경 없음(readback만 추가). - AuroraDevices 변경이라 VS Rebuild로 빌드 확인 예정(abstract 추가 → override 3개 모두 구현). - 관련 분석: `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 표시 + 발진 없음.