PDComm의 구성
PDComm 제품은 같은 방식으로 만들어져 있습니다. 프로토콜마다 독립된 네이티브 라이브러리가 하나 있고, 그 위에 언어 바인딩과 시뮬레이터가 올라갑니다.
네이티브 라이브러리 (C ABI)├── pdcomm_ffi SECS/GEM├── pdcomm_modbus_ffi Modbus└── pdcomm_opcua_ffi OPC UA ▲ ├── C++ 헤더, .NET 바인딩, Qt/MFC 도우미 ◀── 응용 프로그램 └── 시뮬레이터 (GUI, 헤드리스, MCP)네이티브 라이브러리와 C ABI
섹션 제목: “네이티브 라이브러리와 C ABI”프로토콜 구현은 공유 라이브러리 하나에 들어 있습니다. Windows에서는 .dll, Linux에서는 .so, macOS에서는 .dylib입니다. 라이브러리는 C 함수로 기능을 공개합니다. 이 C ABI(application binary interface)가 다른 모든 언어의 기반입니다.
| 제품 | 라이브러리 | C 헤더 |
|---|---|---|
| SECS/GEM | pdcomm_ffi |
pdcomm.h, pdcomm_tcp.h, pdcomm_gem*.h, pdcomm_secs1.h 등 |
| Modbus | pdcomm_modbus_ffi |
pdcomm/modbus/pdcomm_modbus.h |
| OPC UA | pdcomm_opcua_ffi |
pdcomm/opcua/pdcomm_opcua.h |
라이브러리들은 서로 독립적입니다. 필요한 제품의 SDK만 받아 씁니다. 한 응용 프로그램이 여러 라이브러리를 함께 쓸 수도 있습니다.
C ABI는 제품마다 호출 방식이 다릅니다. SECS/GEM은 구조체와 핸들 함수, Modbus는 JSON 명령 하나로 동작을 지정하는 pdcomm_modbus_call, OPC UA는 핸들과 폴링 함수를 씁니다. 공통 규칙도 있습니다.
- 실패할 수 있는 함수는 상태 코드를 돌려줍니다. 0은 성공이고 나머지는 오류입니다.
- 길이가 정해지지 않은 출력은 크기를 먼저 묻고 복사합니다. 버퍼가 작으면 아무것도 쓰지 않고 필요한 크기를 알려 줍니다.
- 만든 핸들은 정해진 해제 함수로 정확히 한 번 해제합니다.
- 라이브러리는 실행 중에 자기 ABI 버전을 알려 줍니다. 응용 프로그램은 시작할 때 버전을 확인합니다.
- 새 통신을 시작하려면 제품 모듈의 PDComm 라이선스가 필요합니다. 각 라이브러리는 자기 라이선스 소스를 확인하며, 이미 실행 중인 연결은 멈추지 않습니다. 라이선스 설치와 확인을 참고합니다.
공통 상태 코드, 버퍼, 진단 로그 함수는 공통 API 레퍼런스에 있습니다. 제품별 규칙은 각 제품의 API 레퍼런스를 참고합니다.
언어 바인딩
섹션 제목: “언어 바인딩”- C++: 헤더만으로 된 래퍼(wrapper)입니다. 핸들을 RAII 객체로 감싸고 오류를 예외로 알립니다.
- .NET: C ABI를 P/Invoke로 부르는 어셈블리(assembly)입니다. SECS/GEM 바인딩은 .NET 10, Modbus와 OPC UA 바인딩은 .NET 8을 대상으로 합니다.
- Qt, MFC: Modbus와 OPC UA에는 Qt와 MFC 응용 프로그램용 도우미 헤더가 있습니다. Qt 도우미는
QJsonObject같은 Qt 형식으로 값을 주고받습니다. 연결이나 요청처럼 오래 걸리는 호출은 GUI 스레드가 아닌 작업 스레드에서 합니다.
시뮬레이터
섹션 제목: “시뮬레이터”각 프로토콜의 시뮬레이터는 같은 네이티브 라이브러리 위에 세 가지 실행 방식을 제공합니다.
| 실행 방식 | 용도 |
|---|---|
| GUI | 화면에서 상대 장비를 흉내 내고 메시지를 관찰합니다. |
| 헤드리스(headless) | 표준 입력의 JSON 명령이나 시나리오 파일로 화면 없이 실행합니다. 자동 시험과 CI에 씁니다. |
| MCP | AI 도구가 MCP(Model Context Protocol)로 시뮬레이터를 조작합니다. |
시뮬레이터는 실제 상대 장비 대신 개발 중인 프로그램과 통신합니다. 개발을 마친 프로그램은 실제 장비와 연결해 수락 시험을 진행합니다.
가상 시리얼 포트는 직렬 통신을 장비 없이 시험하게 합니다. 진단 로그는 SDK와 시뮬레이터의 처리 과정을 기록합니다. pdcomm-docs는 이 문서를 터미널과 AI 도구에서 검색합니다.