본문으로 건너뛰기

OPC-UA 노드 자세히 사용하기

node-red-contrib-opcua 같은 커뮤니티 노드를 통해 외부 OPC-UA 서버 (Kepware, Ignition, 다른 게이트웨이) 와 직접 통신할 수 있습니다. 게이트웨이 자체의 OPC-UA 서버에 접속하는 데도 동일한 노드를 씁니다 (opc.tcp://127.0.0.1:12000, NodeId ns=2;s=...).

내장 OPC-UA 서버에 접속할 땐

화면 메뉴 OPC-UA 뷰어 에서 TCP Endpoint URLNodeId 를 그대로 복사해서 사용. 자세한 건 OPC-UA 노드 뷰어 사용하기 참고.


1. 노드 종류 (node-red-contrib-opcua)

노드용도
OpcUa-Endpoint서버 접속 정보 (host/port/security/auth) — 한 번 만들고 다른 노드에서 공유
OpcUa-Item단건 노드 정의 — nodeId 를 입력으로 변환
OpcUa-ClientRead / Write / Browse / Method call 의 메인 동작 노드
OpcUa-Subscribe변경 이벤트(MonitoredItem) 구독 — 폴링 없이 push 로 받기
OpcUa-EventOPC-UA Alarm & Event 구독

2. Endpoint 만들기

OpcUa-Client 노드 더블클릭 → Endpoint 칸 옆 연필 → 새 endpoint:

항목값 (게이트웨이 내장 서버 기준)
Endpointopc.tcp://127.0.0.1:12000
Security PolicyNone (내부) 또는 Basic256Sha256 (외부 운영)
Security ModeNone / Sign / Sign & Encrypt
LoginOPC-UA 뷰어 화면의 Username/Password 또는 Anonymous (허용 시)

3. Read / Write 패턴

inject ─▶ OpcUa-Item (nodeId, msg.payload type) ─▶ OpcUa-Client (READ/WRITE) ─▶ debug

OpcUa-Item:

항목
Itemns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042
DataTypeInt32 (실제 태그 데이터타입과 맞춰야 함 — 안 맞으면 BadTypeMismatch)

OpcUa-Client:

항목
ActionREAD 또는 WRITE
Endpoint위에서 만든 endpoint

WRITE 시 OpcUa-Item 노드 앞에 changemsg.payload = 9999 같이 값을 채우세요.


4. Subscribe — 폴링 없이 변경만 받기

폴링(주기 read) 보다 Subscribe 가 훨씬 효율적입니다. 변경이 없으면 트래픽도 없고, 마이크로초 단위로 도착합니다.

inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function

OpcUa-Subscribe:

항목
ActionSUBSCRIBE
Interval100 ms 권장 (서버가 클라이언트에게 알릴 최소 주기)
Queue size10 (서버 폭주 시 버퍼)

들어오는 메시지에는 msg.payload(값) + msg.topic(NodeId) + msg.timestamp 가 포함됩니다.


5. Browse — 노드 트리 자동 탐색

KEPServerEX 처럼 노드가 수백/수천 개인 환경에서 “어떤 NodeId 가 있는지” 알 때.

inject ─▶ OpcUa-Client (action=BROWSE, msg.payload="ns=2;i=85") ─▶ debug

응답은 자식 노드들의 [ {nodeId, browseName, displayName, ...} ] 배열. 이걸 function 으로 가공해 자동 등록 플로우를 만들 수도 있습니다.


6. 자주 빠지는 함정

증상원인 / 해결
BadIdentityTokenInvalid사용자/비밀번호 또는 인증서 미신뢰. 서버 콘솔에서 클라이언트 인증서 Trust 처리
BadTypeMismatchOpcUa-Item 의 DataType 이 실제 노드 타입과 다름
매번 연결 끊김 메시지Endpoint URL 의 호스트 도메인이 인증서 CN 과 다름 — 인증서 재발급 또는 URL 의 호스트 를 인증서 CN 과 맞추기
Subscribe 가 한 번만 발화OpcUa-Subscribe 는 한 번만 “등록” 하면 됩니다. inject 의 once after deploy 옵션 1번만 사용

7. 다음 단계