콘텐츠로 이동
무료 평가 시작

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 버전 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를 다시 시작합니다.

시뮬레이터 구독자는 설정한 토픽의 메시지 중 다음 조건을 모두 만족하는 메시지만 받습니다.

  1. Content Type이 application/opcua+uadp입니다.
  2. User Property UAMessageType이 ua-data입니다.
  3. 페이로드가 서명과 암호화가 없는 UADP NetworkMessage입니다.

조건을 만족하지 않는 메시지는 rejected(거부)로 셉니다. 상태의 마지막 오류에 이유가 남습니다. 오류 값은 전달 문제에서 설명합니다.

시뮬레이터가 보내는 NetworkMessage에는 다음 식별자가 들어갑니다. 값은 구성 JSON의 pubsub 항목에서 바꿉니다.

구성 키 기본값 UADP 필드
publisher_id 77 PublisherId(UInt16)
writer_group_id 1 WriterGroupId
dataset_writer_id 17 DataSetWriterId

PublisherId, WriterGroup, DataSetWriter의 뜻은 OPC UA 배경 지식에서 설명합니다.