From 7fc11f260209c9361343096eefb65272fa40c00f Mon Sep 17 00:00:00 2001 From: to3796zw Date: Sat, 20 Jun 2026 10:14:18 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20AjinIO.IsConnected=20=EB=B0=98=EC=A0=84?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=A0=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AxlGetBoardStatus가 SUCCESS일 때 미연결로 반환하던 반전 버그를 정정(실제 Ajin 연결 시 OnMonitoring 폴링이 스킵되던 원인). 연동해 OnMonitoring 미연결 가드를 앞으로 정리. --- .../AuroraIO/Vendor/AJINEXTEK/AjinIO.cs | 12 +---------- ...cannerObjectTeachingControlBoxViewModel.cs | 18 +++++++---------- docs/작업일지/2026_06_20.md | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs b/AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs index fd2a3ca..d36c2f2 100644 --- a/AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs +++ b/AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs @@ -371,21 +371,11 @@ namespace AuroraIO.AJINEXTEK public override bool IsConnected() { - int err = (int)CAXL.AxlGetBoardStatus(0); - if (err != (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS) - { - return true; - } - else - { - return false; - } - + return err == (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS; } - #endregion public override int GetDoArray(ref bool[] array) diff --git a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs index 0233159..f7483d5 100644 --- a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs @@ -201,24 +201,20 @@ namespace WeldingCommon.Views { // Guide Beam: DI 결선 없음 → 가이드빔 제어 DO 17 명령 비트를 그대로 표시 // (현장 가이드빔 제어선은 DO 17). IO 미연결 시 ReadDO 예외 → 아래 catch 에서 처리(앱 종료 방지) - IsGuidBeam = _IODevice.ReadDO(17); // 시뮬 아님 + IO보드 없음 → _iOUnit == null → ReadDI에서 NRE로 꺼짐. - 현장PC 아닌 경우 개발PC에서 주석 해제 (시뮬안하고 레시피 들어갔을 때 프로그램 종료 방지) // IsConnected()가 _iOUnit null/미연결을 체크하므로, 미연결이면 폴링 스킵(꺼짐 방지). - //if (_IODevice == null || !_IODevice.IsConnected()) - //{ - // IsLaserReady = false; - //} - // 변경 후 (260618: IO 결선 변경 12&24 → 11&15) - if (_IODevice.ReadDI(11) && _IODevice.ReadDI(15)) - { - IsLaserReady = true; - } - else + if (_IODevice == null || !_IODevice.IsConnected()) { + IsGuidBeam = false; IsLaserReady = false; + + return; } + IsGuidBeam = _IODevice.ReadDO(17); + IsLaserReady = _IODevice.ReadDI(11) && _IODevice.ReadDI(15); // 변경 후 (260618: IO 결선 변경 12&24 → 11&15) + } catch (Exception ex) { diff --git a/docs/작업일지/2026_06_20.md b/docs/작업일지/2026_06_20.md index 6f4bfff..8d7a797 100644 --- a/docs/작업일지/2026_06_20.md +++ b/docs/작업일지/2026_06_20.md @@ -16,3 +16,23 @@ - 서브에이전트로 MSBuild 빌드(Debug|x64) — **오류 0개**, 경고 655개(전부 기존·무관) - 빌드 로그에 삭제 속성/변경 DisplayName 관련 오류·잔존 참조 없음 - 빌드 산출물: **WeldingCommon.dll**, **ILSOS_PrismaticRD_PTOP** + +## 11:xx — AjinIO.IsConnected() 반전 로직 정정 + OnMonitoring 가드 정리 + +### 문제 (분석) +- 증상: `OnMonitoring()`의 `_IODevice.IsConnected()` 가드가 **시뮬에선 정상, 실제 Ajin 연결 시 동작 안 함** +- 원인: `AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs`의 `IsConnected()`가 **반대로 반환** + - `AxlGetBoardStatus(0)`이 `AXT_RT_SUCCESS`(정상)면 `false`, 에러면 `true` 반환 (파일 내 다른 호출부 관례와 정반대) + - 시뮬: 보드 없음 → 에러 → 우연히 `true` → 폴링 동작("정상"으로 보임) + - 실연결: 정상(SUCCESS) → `false` → 207줄 가드가 `return`으로 폴링 통째 스킵 → `IsGuidBeam`/`IsLaserReady` 미갱신 + +### 변경 내용 (2파일, 사용자 직접 수정) +- `AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs` + - `IsConnected()` → `return err == (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS;` 로 정정 (SUCCESS=연결) +- `WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs` + - `OnMonitoring()` 정리: 미연결 시 `IsGuidBeam/IsLaserReady=false` 후 `return` 가드를 앞으로 이동 + - 연결 시에만 `ReadDO(17)`·`ReadDI(11)&&ReadDI(15)` 수행 (LaserReady 한 줄로 정리) + +### 비고 +- `AjinIO.cs`는 공용(AuroraIO.dll) — Ajin 보드 쓰는 타 머신에도 영향(반전 정정이 올바른 방향) +- 사용자 요청으로 **빌드 검증 생략**