fix: AjinIO.IsConnected 반전 로직 정정

AxlGetBoardStatus가 SUCCESS일 때 미연결로 반환하던 반전 버그를
정정(실제 Ajin 연결 시 OnMonitoring 폴링이 스킵되던 원인).
연동해 OnMonitoring 미연결 가드를 앞으로 정리.
This commit is contained in:
to3796zw 2026-06-20 10:14:18 +09:00
parent 00cdd8ac9b
commit 7fc11f2602
3 changed files with 28 additions and 22 deletions

View File

@ -371,21 +371,11 @@ namespace AuroraIO.AJINEXTEK
public override bool IsConnected() public override bool IsConnected()
{ {
int err = (int)CAXL.AxlGetBoardStatus(0); int err = (int)CAXL.AxlGetBoardStatus(0);
if (err != (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS) return err == (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS;
{
return true;
}
else
{
return false;
}
} }
#endregion #endregion
public override int GetDoArray(ref bool[] array) public override int GetDoArray(ref bool[] array)

View File

@ -201,24 +201,20 @@ namespace WeldingCommon.Views
{ {
// Guide Beam: DI 결선 없음 → 가이드빔 제어 DO 17 명령 비트를 그대로 표시 // Guide Beam: DI 결선 없음 → 가이드빔 제어 DO 17 명령 비트를 그대로 표시
// (현장 가이드빔 제어선은 DO 17). IO 미연결 시 ReadDO 예외 → 아래 catch 에서 처리(앱 종료 방지) // (현장 가이드빔 제어선은 DO 17). IO 미연결 시 ReadDO 예외 → 아래 catch 에서 처리(앱 종료 방지)
IsGuidBeam = _IODevice.ReadDO(17);
// 시뮬 아님 + IO보드 없음 → _iOUnit == null → ReadDI에서 NRE로 꺼짐. - 현장PC 아닌 경우 개발PC에서 주석 해제 (시뮬안하고 레시피 들어갔을 때 프로그램 종료 방지) // 시뮬 아님 + IO보드 없음 → _iOUnit == null → ReadDI에서 NRE로 꺼짐. - 현장PC 아닌 경우 개발PC에서 주석 해제 (시뮬안하고 레시피 들어갔을 때 프로그램 종료 방지)
// IsConnected()가 _iOUnit null/미연결을 체크하므로, 미연결이면 폴링 스킵(꺼짐 방지). // IsConnected()가 _iOUnit null/미연결을 체크하므로, 미연결이면 폴링 스킵(꺼짐 방지).
//if (_IODevice == null || !_IODevice.IsConnected()) if (_IODevice == null || !_IODevice.IsConnected())
//{
// IsLaserReady = false;
//}
// 변경 후 (260618: IO 결선 변경 12&24 → 11&15)
if (_IODevice.ReadDI(11) && _IODevice.ReadDI(15))
{
IsLaserReady = true;
}
else
{ {
IsGuidBeam = false;
IsLaserReady = false; IsLaserReady = false;
return;
} }
IsGuidBeam = _IODevice.ReadDO(17);
IsLaserReady = _IODevice.ReadDI(11) && _IODevice.ReadDI(15); // 변경 후 (260618: IO 결선 변경 12&24 → 11&15)
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -16,3 +16,23 @@
- 서브에이전트로 MSBuild 빌드(Debug|x64) — **오류 0개**, 경고 655개(전부 기존·무관) - 서브에이전트로 MSBuild 빌드(Debug|x64) — **오류 0개**, 경고 655개(전부 기존·무관)
- 빌드 로그에 삭제 속성/변경 DisplayName 관련 오류·잔존 참조 없음 - 빌드 로그에 삭제 속성/변경 DisplayName 관련 오류·잔존 참조 없음
- 빌드 산출물: **WeldingCommon.dll**, **ILSOS_PrismaticRD_PTOP** - 빌드 산출물: **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 보드 쓰는 타 머신에도 영향(반전 정정이 올바른 방향)
- 사용자 요청으로 **빌드 검증 생략**