PDComm Modbus 지원 기능
PDComm Modbus SDK는 SECS/GEM SDK와 독립된 라이브러리(pdcomm_modbus_ffi)와 실행 파일로 제공됩니다. 한 엔드포인트(endpoint)는 클라이언트, 서버, 게이트웨이 중 하나로 동작하며 모든 조작을 JSON 명령으로 합니다.
구성 요소
섹션 제목: “구성 요소”| 구성 요소 | 설명 |
|---|---|
| C ABI | include/pdcomm/modbus/pdcomm_modbus.h. pdcomm_modbus_call에 JSON 명령을 넘깁니다. |
| C++ 래퍼 | pdcomm_modbus.hpp의 Endpoint. 헤더만으로 씁니다. |
| Qt·MFC 어댑터 | bindings/qt의 QtEndpoint, bindings/mfc의 MfcEndpoint |
| .NET 바인딩 | bindings/dotnet/PDComm.Modbus의 Endpoint |
| 시뮬레이터 GUI | PDComm Modbus Simulator. 6개 작업 탭으로 서버, 클라이언트, 게이트웨이를 시험합니다. |
| 헤드리스 시뮬레이터 | pdcomm-modbus-headless. 표준 입출력 JSON과 시나리오 파일로 동작합니다. |
| MCP 서버 | pdcomm-modbus-mcp. AI 도구가 같은 명령을 MCP 도구로 호출합니다. |
GUI, 헤드리스, MCP, SDK는 같은 서비스 코드와 같은 명령, 모델, 프로젝트 형식을 씁니다. 다만 프로세스마다 독립된 세션입니다. MCP 서버를 시작해도 이미 켜 둔 GUI에 붙지 않습니다.
지원 기능
섹션 제목: “지원 기능”| 영역 | 지원 내용 |
|---|---|
| 전송 | Modbus TCP, RTU, ASCII |
| 역할 | 클라이언트, 서버, TCP→RTU/ASCII 게이트웨이 |
| 기능 코드 | 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 20, 21, 22, 23, 24, 43(MEI 14) |
| 진단 하위 기능 | 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20 |
| 보안 | Modbus/TCP Security: encrypted, authentication_only, 역할 기반 권한, CRL |
| 서버 데이터 모델 | 네 테이블, 파일 레코드, FIFO 큐, 장치 식별 객체, 서버 ID, 예외 상태 |
| 관찰 | 최근 1000개 요청·프레임 기록(trace), 합성 프레임 해석(fault), 진단 카운터 |
| 프로젝트 | 구성과 데이터 모델을 pdcomm.modbus.project 버전 1 JSON으로 저장·복원 |
| 진단 로그 | 선택형 JSON Lines 로그(PDCOMM_LOG), 기본 꺼짐 |
크기와 시간 값
섹션 제목: “크기와 시간 값”| 항목 | 값 |
|---|---|
| PDU | 253바이트 |
| ADU | TCP 260바이트, RTU 256바이트, ASCII 513자 |
| 유닛 주소(구성) | 1~247 |
timeout_ms |
1~60000 |
ascii_timeout_ms |
1~60000, 기본 1000 |
turnaround_ms |
0~60000, 기본 100 |
| JSON 명령 | SDK 호출 최대 16MiB, 헤드리스·MCP 한 줄 최대 1MiB |
trace |
최근 1000개 |
fault 입력 |
4096바이트 |
| TCP 서버 연결 | 동시 32개, 120초 무통신 시 종료 |
| 게이트웨이 대기열 | 64개, 넘치면 예외 06 |
엔드포인트 동작
섹션 제목: “엔드포인트 동작”| 항목 | 동작 |
|---|---|
| TCP 프레임 | TCP 전송은 MBAP 헤더를 씁니다. |
| 주소 | address에는 IP:포트를 씁니다. 호스트 이름은 애플리케이션이 IP 주소로 바꿔 넘깁니다. |
| 요청 전송 | 요청은 한 번 보냅니다. 시간이 초과된 요청을 다시 보낼지는 애플리케이션이 정합니다. 쓰기 요청은 장비 상태를 확인한 뒤 다시 보냅니다. |
| 서버 유닛 | 서버 엔드포인트는 구성의 unit에 응답합니다. |
| 스레드 | SDK는 애플리케이션의 스레드에서 동작합니다. 서버와 게이트웨이는 애플리케이션이 poll을 반복하는 동안 응답합니다. |
| 레지스터 값 | 레지스터는 16비트 정수입니다. 32비트 값은 애플리케이션이 두 레지스터를 묶어 해석합니다. |
| 기본 서버의 예외 응답 | MEI 13(CANopen)과 사용자 정의 기능 코드(65 |
| RS-485 방향 제어 | 송수신 방향 전환은 운영체제와 어댑터가 합니다. |
빌드별 기능 확인
섹션 제목: “빌드별 기능 확인”SDK는 제공 프로파일에 따라 TCP, RTU, ASCII, Security 중 일부만 포함할 수 있습니다. 빌드에 없는 전송이나 보안을 구성하면 Protocol is excluded from this build 오류가 납니다. 시작할 때 다음 중 하나로 확인합니다.
- C:
pdcomm_modbus_capabilities가pdcomm_modbus_capability비트의 OR를 돌려줍니다. TCP 1, RTU 2, ASCII 4, Security 8이며 전체 빌드는 15입니다. - C:
pdcomm_modbus_abi_version은 이 헤더 기준0x00010001을 돌려줍니다. 애플리케이션을 빌드한 헤더와 다르면 멈춥니다. - JSON:
{"action":"capabilities"}가 전송별true/false와 기능 코드, 진단 목록을 돌려줍니다.
{"ok":true,"result":{"ascii":true,"canopen":false,"diagnostic_logging":true,"diagnostics":[0,1,2,3,4,10,11,12,13,14,15,16,17,18,20],"functions":[1,2,3,4,5,6,7,8,11,12,15,16,17,20,21,22,23,24,43],"logging_schema_version":1,"mei13":"opaque_extension","project_version":1,"protocol":"modbus","rtu":true,"security":true,"tcp":true}}연결할 장비가 지원하는 기능 코드와 주소는 장비 매뉴얼에서 확인합니다.