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 표시 + 발진 없음.