feat: NoLaser 옵션 - 레이저 컨트롤러 IO(DO9/13) 안 켜고 Laser On 가능

UCScannerObjectTeachingControlBox에 IsNoLaser 추가. Laser Ready 버튼이
CoreLaser_Control(DO9)/RingLaser_Control(DO13)을 켜는 분기에서 ctrlOn=!IsNoLaser
적용 → IsNoLaser=true면 DO9/13을 false로 유지(레이저 컨트롤러 OFF)하여
발진 없이 전압만 인가한 채 Laser On 가능(Cal/전압 측정용).
XAML에 'No Laser' 체크박스 추가. 디바이스 레이어 무변경.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
노도연 2026-06-18 12:12:48 +09:00
parent ad6cf68498
commit 8ec4fd0d62
3 changed files with 36 additions and 2 deletions

View File

@ -92,6 +92,7 @@
<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"/>
@ -118,6 +119,10 @@
<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>

View File

@ -76,6 +76,10 @@ 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); }
@ -144,6 +148,7 @@ namespace WeldingCommon.Views
IsGuidBeam = false; IsGuidBeam = false;
IsLaserReady = false; IsLaserReady = false;
IsNoLaser = false;
IsObjectSelectAll = true; IsObjectSelectAll = true;
} }
@ -461,8 +466,10 @@ namespace WeldingCommon.Views
// 추후 Write bit 파라미터화 해야함 // 추후 Write bit 파라미터화 해야함
if(toggleIO) if(toggleIO)
{ {
_IODevice._iOUnit.WriteDoBit(9, true); // IsNoLaser면 레이저 컨트롤러(BIT9/13)를 켜지 않음(false 유지) → 발진 없이 Laser On 가능
_IODevice._iOUnit.WriteDoBit(13, true); bool ctrlOn = !IsNoLaser;
_IODevice._iOUnit.WriteDoBit(9, ctrlOn);
_IODevice._iOUnit.WriteDoBit(13, ctrlOn);
toggleIO = false; toggleIO = false;
} }
else else

View File

@ -71,3 +71,25 @@
- csproj 빌드 경로 TDC→PTOP (`_out_prismatic_rd_ptop`) - csproj 빌드 경로 TDC→PTOP (`_out_prismatic_rd_ptop`)
- sln에서 Scanner/Gun/CleanLaser 제거, 해당 머신 소스 폴더 삭제, 비-PTOP `_out` 아티팩트 정리 → **Machines에 PTOP만 남김** (참고본과 동일 구조) - sln에서 Scanner/Gun/CleanLaser 제거, 해당 머신 소스 폴더 삭제, 비-PTOP `_out` 아티팩트 정리 → **Machines에 PTOP만 남김** (참고본과 동일 구조)
- **주의:** 이 환경에선 실제 MSBuild 검증 불가 → VS에서 Clean→Rebuild 권장(obj 비워둠). - **주의:** 이 환경에선 실제 MSBuild 검증 불가 → VS에서 Clean→Rebuild 권장(obj 비워둠).
## 11:34
### Manual Laser Power Control — Watt 입력 GroupBox 숨김(Collapsed)
- 마이그레이션 후 빌드 정상 확인 완료.
- `UCScannerLaserControl.xaml`(WeldingCommon)의 Manual Laser Power Control 2영역(%, W) 중 **W 입력 영역은 주로 안 쓰므로** Grid.Row="1"(Watt 기준) GroupBox에 `Visibility="Collapsed"` 추가로 숨김 처리.
- Percent(%) 영역만 노출, 공간도 미차지. ViewModel/바인딩(`CMD_LaserShotOnWatt` 등)은 변경 없음.
- 관련 분석: `docs/분석/2026/06/18/102847_manual_laser_power_control_groupbox_analysis.md`
- 커밋 `ad6cf68`로 커밋·푸시 완료.
## 12:12
### NoLaser 체크 — 레이저 컨트롤러(IO BIT9/13) 안 켜고 Laser On 가능
- 발진(lasing)을 막는 실제 지점은 `LaserSignalOn`(RTC5 게이트)이 아니라 **IO Control DO9(`CoreLaser_Control`)/DO13(`RingLaser_Control`)** 를 true로 주는 부분이었음.
- 위치: `UCScannerObjectTeachingControlBoxViewModel.PerformCmdLaserReadyCheck`(Laser Control GroupBox의 `Laser Ready` 버튼).
- 처음엔 `UCScannerLaserControl`에 Analog Only(IsAnalogOnly)로 `LaserSignalOn` 가드를 넣었으나, 실제 IO는 다른 소스(ObjectTeachingControlBox)라 **그 변경은 원복**하고(Watt 숨김은 유지), 정확한 지점에 다시 구현.
- 구현: ViewModel에 `IsNoLaser` 추가(기본 false). `Laser Ready` 버튼이 DO9/13을 켜는 분기에서 `ctrlOn = !IsNoLaser`로 적용 → **IsNoLaser=true면 DO9/13을 true로 안 켜고 false 유지** → 레이저 컨트롤러 OFF 상태로 Laser On 가능(Cal/전압 측정용).
- XAML: Laser Control GroupBox에 `No Laser (전압만, 발진 안 함)` 체크박스 추가.
- 디바이스 레이어(Scanner/RTC5) 무변경, IO 비트 9/13만 제어.
- 커밋·푸시 진행.