LGES-OC5-PtoP-Welder/docs/분석/2026/06/19/122201_ajinio_readdobit_analysis.md
NohDoyeon241104 3b8799aa51 feat/docs: 가이드빔·알람·PLC(MXComponent) 분석 및 현장 임시 수정
- 분석 문서 4종 추가 (docs/분석/2026/06/19):
  알람부 종합 / MX Component PLC 연결 / AjinIO.ReadDoBit / 가이드빔 TruPulse(ExtPilotOnOff 미구현)
- AjinIO.ReadDoBit(int): 스텁(return true) 유지 + 구현(ReadDiBit 패턴) 주석 보존
- SeqComponentTeachingRun: 중알람 인터락 임시 주석 (현장 PLC 미연결 우회, 추후 원복)
- 레시피 Guide Beam: DO 17 read/write + IsConnected 가드 주석 (필요시 주석 토글 운용)
- 작업일지 2026-06-19 정리

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 12:49:08 +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)와 동일 정책이라 일관성은 확보됨.