From 2ef276e0937bd7a00ff1a7cb28618ad663787a47 Mon Sep 17 00:00:00 2001 From: NohDoyeon241104 Date: Thu, 27 Aug 2026 09:27:25 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Laser=20Ready=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9D=84=20DO=20=EB=90=98=EC=9D=BD=EA=B8=B0=20=ED=86=A0?= =?UTF-8?q?=EA=B8=80=EB=A1=9C=20=EC=A0=84=ED=99=98=20(ISSUE-260826-03)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 증상: 버튼을 한 번 눌러도 반응이 없고 두 번 눌러야 Laser_REMOTE 가 켜진다(현장 확인). 원인: toggleIO 가 "다음에 쓸 값"을 VM 이 기억하는 방식이라 실제 DO 와 어긋난다. SeqAutoRunPTOP 가 같은 DO 를 쓰면서 toggleIO 를 갱신하지 않기 때문 — :1220 용접시작 true / :1243 용접종료 false / :1701 정지 false 어긋나면 버튼이 같은 값을 다시 써서 아무 변화가 없다. 조치: 현재 DO 를 읽어 반전한다(바로 위 PerformCmdLaserGuideBeam :607-608 과 동일 패턴). - 버튼 1회 입력에 TRUE/FALSE 가 정확히 기록된다 - 누가 중간에 DO 를 건드려도 항상 현재 상태 기준으로 동작한다 - 표시(OnMonitoring 의 IsLaserReady = ReadDO(Laser_REMOTE))와 1:1 로 맞는다 - AC_KEY(DO 8)는 전원 투입 계층이라 건드리지 않는다 toggleIO 필드는 원복 대비로 남겨둔다(주석 블록 2개가 참조). 외부 참조·XAML 바인딩 없음. 원복: "260826 이전 원본" region 을 살리고 아래 2줄을 제거. 부수 확인: "뷰 전환 시 REMOTE 꺼짐" 은 VisibleChanged(:251-260)에 DO 쓰기가 없고 시퀀스가 끄는 정상 동작이라 별도 조치하지 않는다. --- ...cannerObjectTeachingControlBoxViewModel.cs | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs index 7167131..4303bbe 100644 --- a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs @@ -174,6 +174,8 @@ namespace WeldingCommon.Views private WinSequenceDiagram _WinSequenceDiagramScoutFlyingVision; private WinSequenceDiagram _WinSequenceDiagramTeachingRun; private WinSequenceDiagram _WinSequenceDiagramComponentTeachingRun; + // 260826 현재 미사용 — PerformCmdLaserReadyCheck 가 DO 되읽기 방식으로 바뀌었다. + // 해당 메서드의 "260824/260826 이전 원본" 주석 블록이 이 필드를 참조하므로 원복 대비로 남겨둔다. public bool toggleIO = true; public UCScannerObjectTeachingControlBoxViewModel(IAuroraEnvironment aurora) { @@ -633,18 +635,31 @@ namespace WeldingCommon.Views //} #endregion - // 260824 본 레이저 단일 발진기 — 제어권(REMOTE) 1발 토글 + #region 260826 이전 원본 (toggleIO 필드 토글 — 원복 시 이 블록을 살리고 아래 2줄을 제거) + //// 260824 본 레이저 단일 발진기 — 제어권(REMOTE) 1발 토글 + //// ※ AC_KEY(DO 8)는 전원 투입 계층이라 여기서 건드리지 않는다(반 하드와이어 여부 미확정, Q3). + //if (toggleIO) + //{ + // _IODevice._iOUnit.WriteDoBit((int)ePrismaticDOAddress.Laser_REMOTE, true); + // toggleIO = false; + //} + //else + //{ + // _IODevice._iOUnit.WriteDoBit((int)ePrismaticDOAddress.Laser_REMOTE, false); + // toggleIO = true; + //} + #endregion + + // 260826 현재 DO 를 읽어 반전하는 방식으로 전환 (바로 위 PerformCmdLaserGuideBeam :607-608 과 동일 패턴). + // 기존 toggleIO 는 "다음에 쓸 값"을 VM 이 기억하는 방식이라 실제 DO 와 어긋났다. + // SeqAutoRunPTOP 가 같은 DO 를 쓰면서 toggleIO 를 갱신하지 않기 때문 — + // :1220 용접시작 true / :1243 용접종료 false / :1701 정지 false + // 어긋나면 버튼을 눌러도 같은 값을 다시 써서 아무 변화가 없다(= 두 번 눌러야 반응. 현장 확인 260826). + // 현재 DO 를 읽어 반전하면 누가 중간에 건드려도 1회 입력에 TRUE/FALSE 가 정확히 기록되고, + // 표시(OnMonitoring 의 IsLaserReady = ReadDO(Laser_REMOTE))와도 1:1 로 맞는다. // ※ AC_KEY(DO 8)는 전원 투입 계층이라 여기서 건드리지 않는다(반 하드와이어 여부 미확정, Q3). - if (toggleIO) - { - _IODevice._iOUnit.WriteDoBit((int)ePrismaticDOAddress.Laser_REMOTE, true); - toggleIO = false; - } - else - { - _IODevice._iOUnit.WriteDoBit((int)ePrismaticDOAddress.Laser_REMOTE, false); - toggleIO = true; - } + bool curRemote = _IODevice.ReadDO((int)ePrismaticDOAddress.Laser_REMOTE); + _IODevice._iOUnit.WriteDoBit((int)ePrismaticDOAddress.Laser_REMOTE, !curRemote); } private void PerformCmdToggleScannerCamView(object obj)