사유: 분석 문서가 다른 PC에서 풀 받을 때 사라지면 안 되어 git에 포함 유지. - .gitignore의 /docs/분석/ 제외 규칙 제거 - docs/분석 전체 재추적(기존 22 + 금일 신규 3 = 25개) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.2 KiB
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줄·GetDoArray399줄). 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)와 동일 정책이라 일관성은 확보됨.