# 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 패턴 그대로) ```csharp 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. 현재 결정 상태 (스텁 유지 + 구현 주석 보존) ```csharp 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)`와 동일 정책이라 일관성은 확보됨.