PDComm의 MQTT
PDComm은 MQTT를 OPC UA PubSub의 브로커 전송으로 제공합니다. 이 문서는 MQTT를 쓰는 경로와 연결 방식을 정리합니다.
사용 경로
섹션 제목: “사용 경로”MQTT는 OPC UA 시뮬레이터 프로그램으로 씁니다.
| 경로 | 설명 |
|---|---|
| OPC UA 시뮬레이터 GUI의 PubSub 탭 | Transport에서 UADP over MQTT를 고릅니다. |
헤드리스 시뮬레이터 pdcomm-opcua-headless |
JSON 줄 명령 pubsub_start 등으로 같은 기능을 씁니다. |
MCP 서버 pdcomm-opcua-mcp |
opcua_pubsub_start 등 MCP 도구로 같은 기능을 씁니다. |
세 시뮬레이터 프로그램은 같은 시뮬레이터 서비스를 공유합니다. 그래서 GUI, 헤드리스, MCP 중 어느 것을 써도 MQTT 동작은 같습니다. 시뮬레이터 패키지 설치와 실행은 OPC UA 문서를 따릅니다.
동작 구조
섹션 제목: “동작 구조” OPC UA simulator MQTT broker OPC UA simulator (Role: Publisher) (e.g. Mosquitto) (Role: Subscriber)┌──────────────────┐ PUBLISH ┌──────────────┐ PUBLISH ┌──────────────────┐│ UADP DataSet │ QoS 1 ─▶│ topic │ QoS 1 ─▶│ decode UADP ││ NetworkMessage │◀─PUBACK─│ opcua/uadp/ │─PUBACK─▶│ Received table │└──────────────────┘ │ data/100/... │ └──────────────────┘ └──────────────┘ │ PUBLISH (any subscribed MQTT client, ▼ e.g. mosquitto_sub)Role이 Publisher and subscriber이면 한 시뮬레이터가 발행과 구독을 함께 합니다. 자신이 보낸 메시지를 브로커에서 다시 받으므로 브로커 하나만으로 동작을 확인할 수 있습니다.
MQTT 연결 방식
섹션 제목: “MQTT 연결 방식”| 항목 | 값 |
|---|---|
| MQTT 버전 | 5.0 |
| 전송 | TCP. TLS 브로커에는 TLS 브리지로 연결합니다. |
| 브로커 주소 | IP 주소:포트 형식. 예: 127.0.0.1:1883, [::1]:1883 |
| 인증 | 없음(익명 연결) |
| 클라이언트 식별자 | pdcomm-opcua-sim-<프로세스 ID>-<DataSetWriterId> |
| 세션 | Clean Start 1, Session Expiry Interval 0 |
| Keep Alive | 30초. 브로커의 Server Keep Alive가 있으면 그 값 |
| 발행 | 설정한 토픽에 QoS 1, RETAIN 0 |
| 구독 | 설정한 토픽 이름 하나, QoS 1 |
| 메시지 속성 | Content Type application/opcua+uadp, User Property UAMessageType = ua-data |
| 페이로드 | 서명과 암호화가 없는 UADP NetworkMessage, 필드 1~64개, 최대 64 KiB |
| MQTT 패킷 최대 크기 | 128 KiB. 브로커의 Maximum Packet Size가 더 작으면 그 값 |
| 연결 제한 시간 | Connection & Security 탭 Timeout (ms)(client.timeout_ms), 기본 5,000ms |
| 연결이 끊겼을 때 | PubSub가 멈추고 상태에 마지막 오류가 남습니다. 다시 연결하려면 PubSub를 다시 시작합니다. |
받는 메시지의 조건
섹션 제목: “받는 메시지의 조건”시뮬레이터 구독자는 설정한 토픽의 메시지 중 다음 조건을 모두 만족하는 메시지만 받습니다.
- Content Type이
application/opcua+uadp입니다. - User Property
UAMessageType이ua-data입니다. - 페이로드가 서명과 암호화가 없는 UADP NetworkMessage입니다.
조건을 만족하지 않는 메시지는 rejected(거부)로 셉니다. 상태의 마지막 오류에 이유가 남습니다. 오류 값은 전달 문제에서 설명합니다.
UADP 메시지의 식별자
섹션 제목: “UADP 메시지의 식별자”시뮬레이터가 보내는 NetworkMessage에는 다음 식별자가 들어갑니다.
값은 구성 JSON의 pubsub 항목에서 바꿉니다.
| 구성 키 | 기본값 | UADP 필드 |
|---|---|---|
publisher_id |
77 | PublisherId(UInt16) |
writer_group_id |
1 | WriterGroupId |
dataset_writer_id |
17 | DataSetWriterId |
PublisherId, WriterGroup, DataSetWriter의 뜻은 OPC UA 배경 지식에서 설명합니다.