LGES-OC5-PtoP-Welder/docs/분석/2026/06/19/122201_ajinio_readdobit_analysis.md
NohDoyeon241104 6c435ec04a revert: docs/분석 다시 git 추적 (커밋 포함 유지)
사유: 분석 문서가 다른 PC에서 풀 받을 때 사라지면 안 되어 git에 포함 유지.
- .gitignore의 /docs/분석/ 제외 규칙 제거
- docs/분석 전체 재추적(기존 22 + 금일 신규 3 = 25개)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 14:48:19 +09:00

3.2 KiB

AjinIO.ReadDoBit(int) 미구현 분석 — 2026-06-19

계기: AjinIO.cs의 ReadDoBit(int index)(bool 반환)가 미구현 스텁(return true). DI 패턴 대비 분석 후, 현 상태는 스텁 유지 + 구현 주석 보존으로 결정(현장 반영 예정). 관련: 110333_alarm_subsystem_analysis


1. 현황

  • 파일: AuroraDevices/AuroraIO/Vendor/AJINEXTEK/AjinIO.cs (보호 영역, 신중 수정)
  • DI/DO 오버로드 4종(IOUnit 추상):
    • int ReadDoBit(int, ref bool) (469줄) — CAXD.AxdoReadOutport 사용, 구현됨
    • int ReadDiBit(int, ref bool) (483줄) — CAXD.AxdiReadInport, 구현됨
    • bool ReadDoBit(int) (496줄) — 미구현 스텁(return true) ← 대상
    • bool ReadDiBit(int) (501줄) — CAXD.AxdiReadInport, 구현됨(실패 시 throw)
  • 즉 DO 읽기 API(AxdoReadOutport)는 같은 파일에서 이미 검증됨(469줄·GetDoArray 399줄). bool 반환 오버로드만 DO쪽이 비어 있었음.

2. 구현안 (DI 패턴 그대로)

public override bool ReadDoBit(int index)
{
    uint data = 0;
    int err = (int)CAXD.AxdoReadOutport(index, ref data);
    if (err != (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
        throw new Exception(string.Format("ERR_IO_FAIL_TO_GET_BIT;ERROR CODE:{0}", err));
    return Convert.ToBoolean(data);
}
  • ReadDiBit(int)(501줄)와 완전 동일 구조, API만 AxdiReadInport → AxdoReadOutport.

3. 스텁 의존 호출처 분석 (영향 범위)

bool ReadDoBit(int) 호출처 전수:

호출처 위치 용도
UCInformationPanelViewModel.cs 46, 53, 82, 115, 132 (5곳) ModeKeySolOn / SafetyDoorRelease 상태 표시
  • 5곳 모두 ePDOAddress(PAIX 주소) 사용 → 실제 PAIX 보드에서 실행.
  • PAIX의 ReadDoBit(int)는 정상 구현(PAIXIO.cs:288, GetDoArray로 읽음) → 이 호출처는 이미 정상 동작.
  • (int, ref bool) 오버로드 호출(UCTestDeviceViewModel.cs:264)은 Ajin도 구현돼 있어 무관.
  • 결론: Ajin 스텁(return true)에 실제 의존하는 코드는 사실상 없음. 영향은 "Ajin 보드 장비에서 위 5개 호출이 도는 경우"로 한정되며, 그 경우 오히려 항상 true가 오표시였음(상태 표시용, 안전제어 아님 → 위험 낮음).

4. 현재 결정 상태 (스텁 유지 + 구현 주석 보존)

public override bool ReadDoBit(int index)
{
    //현재 사용하지 않아서 추후 구현
    return true;

    // [추후 구현] return true 스텁 의존 코드 확인 후 아래로 교체 (ReadDiBit(int) 패턴)
    //uint data = 0;
    //int err = (int)CAXD.AxdoReadOutport(index, ref data);
    //if (err != (int)AXT_FUNC_RESULT.AXT_RT_SUCCESS)
    //    throw new Exception(...);
    //return Convert.ToBoolean(data);
}
  • 동작 변화 없음(return true 유지) → 현장 안전. 구현은 주석으로 보존해 추후 활성화 용이.
  • 빌드 산출물: AuroraIO.dll.

5. 후속 (활성화 조건)

  • Ajin 보드 장비에서 DO 상태 표시 정확성이 필요해질 때, 주석 해제 + 위 5개 호출처 회귀 확인.
  • 활성화 시 실패 처리(throw) 영향 검토: ReadDiBit(int)와 동일 정책이라 일관성은 확보됨.