본문으로 건너뛰기

OPC-UA

OPC-UA (OLE for Process Control - Unified Architecture, IEC 62541) 는 산업 자동화 분야의 표준 통신 규약입니다. Kepware, Matrikon, Prosys, Ignition 등 거의 모든 SCADA / 미들웨어 제품이 OPC-UA 서버 기능을 제공합니다.

대부분의 PLC 가 직접 OPC-UA 서버 기능을 갖고 있지 않기 때문에 보통 Kepware 같은 게이트웨이 소프트웨어를 통해 PLC 값을 OPC-UA 로 노출하고, 이 게이트웨이는 그 OPC-UA 서버에 접속해 값을 가져오는 구조입니다.

지원 범위

이 게이트웨이의 OPC-UA 클라이언트는 Eclipse Milo 1.1.8 SDK 기반입니다.

  • Transport: opc.tcp:// (UA Binary encoding)
  • 보안 모드: None · Sign · SignAndEncrypt · 자동 — 아래 보안 연결 참고
  • 보안 정책: 자동 · Aes256_Sha256_RsaPss · Basic256Sha256 · Aes128_Sha256_RsaOaep (낡은 정책 Basic256 · Basic128Rsa15 은 따로 허용해야 함)
  • 사용자 인증: 익명(Anonymous) 또는 사용자 이름 + 비밀번호
  • 읽기 / 쓰기: 둘 다 지원. 읽기는 timecycle 주기 polling 이며 UA 구독(MonitoredItem)은 쓰지 않습니다

DCS·로봇 컨트롤러의 OPC UA 서버에 붙일 때는 DCS 연결하기 · 로봇 연결하기 를 함께 보세요.


등록 폼 입력값​

IP·포트 아래 OPC UA 프로토콜 옵션 묶음의 칸은 서버 이름 · 사용자 · 비밀번호 · 디스커버리, 이 네 개입니다. 채널 암호화는 그 아래 보안 (채널 암호화) 묶음에서 정합니다 — 보안 연결 참고.

입력 칸무엇을 적나요예시
IP 주소OPC-UA 서버 PC 의 IP192.168.0.40
포트OPC-UA 서버 포트49320 (Kepware 기본) / 4840 (표준)
서버 이름 (servername)엔드포인트 URI 의 경로 부분비워 두기, 또는 OPCUAServer · iotgateway 등
사용자 (username)OPC-UA 서버에 등록된 사용자 ID. 익명이면 비움kopens (서버에 따라 다름)
비밀번호 (password)그 사용자의 비밀번호***
디스커버리 (discovery)true 면 연결할 때 노드 트리 전체를 브라우징false (권장)

사용자 / 비밀번호 를 둘 다 적으면 사용자 이름 토큰으로, 하나라도 비어 있으면 익명(Anonymous) 으로 접속합니다. 익명이면 서버에서 익명 접속이 허용되어 있어야 합니다. 보안 모드가 None 이면 계정이 평문 채널로 가므로, 계정을 쓸 때는 SignAndEncrypt 를 권장합니다.

엔드포인트가 정해지는 방식​

  1. 입력값으로 opc.tcp://<IP>:<포트>/<servername> 을 만들어 서버에 엔드포인트 목록을 묻습니다.
  2. 목록에서 보안 모드·보안 정책에 맞는 엔드포인트를 고릅니다.
    • 보안 모드 None — None 엔드포인트 가운데 쓸 사용자 토큰(익명 또는 사용자 이름)을 광고한 것이 우선이고, 없으면 첫 None 엔드포인트입니다.
    • Sign · SignAndEncrypt · 자동 — 고른 모드·정책과 쓸 사용자 토큰을 모두 만족하는 엔드포인트 가운데 가장 강한 정책을 고릅니다. 맞는 것이 없으면 None 으로 내려가지 않고 연결에 실패합니다(OPCUA_NO_MATCHING_ENDPOINT).
  3. 고른 엔드포인트 URL 의 호스트는 입력한 IP 로 바꿔 접속합니다(포트·경로는 서버가 광고한 값). 서버가 자기 호스트명을 광고해도 DNS·hosts 설정이 필요 없습니다.

서버가 어떤 엔드포인트를 광고하는지는 [엔드포인트 조회] 버튼으로 화면에서 바로 볼 수 있습니다 — 엔드포인트 조회 참고.

디스커버리는 엔드포인트 검색이 아닙니다​

discovery=true 는 연결할 때 루트 폴더부터 노드 트리 전체를 브라우징해 게이트웨이 로그에 남깁니다. 엔드포인트를 찾는 기능도, 태그를 자동 등록하는 기능도 아닙니다. 서버가 제공하는 엔드포인트(보안 모드·정책)를 보려면 디스커버리가 아니라 [엔드포인트 조회] 를 쓰세요. 노드가 많은 서버에서는 부하가 크므로 평소에는 false 로 두고, NodeId 는 아래 방법으로 찾으세요.


보안 연결 (채널 암호화)​

연결 화면의 보안 (채널 암호화) 묶음에서 정합니다. None 이 아니면 엣지가 자기 클라이언트 인증서로 보안 채널을 열고, 맞는 엔드포인트가 없어도 None 으로 내려가지 않습니다.

연결 화면의 «보안 (채널 암호화)» 묶음 — 번호는 읽는 순서

번호칸하는 일
①보안 모드None (암호화 없음) · Sign (서명) · SignAndEncrypt (서명+암호화, 권장) · 자동 (Sign·SignAndEncrypt 중 가장 강한 것)
②보안 정책자동 (서버가 제공하는 가장 강한 정책) 또는 Basic256Sha256 · Aes128_Sha256_RsaOaep · Aes256_Sha256_RsaPss 중 하나. 보안 모드가 None 이면 보이지 않습니다
③고급펼치면 낡은 정책 허용 확인란. Basic256 · Basic128Rsa15(폐기된 정책)만 제공하는 옛 서버에 한해 켭니다. 안전하지 않습니다
  • 기본값 — 이미 있던 연결은 None 그대로입니다. 연결 추가 화면의 DCS·로봇 카드로 새로 만드는 연결은 SignAndEncrypt 로 시작합니다.
  • 자동 정책의 순서 — Aes256_Sha256_RsaPss > Basic256Sha256 > Aes128_Sha256_RsaOaep.
  • 바꾼 값은 저장해야 적용됩니다.

엔드포인트 조회​

IP·포트·서버 이름을 넣고 [엔드포인트 조회] 를 누르면, 엣지가 그 서버에 엔드포인트 목록(GetEndpoints)을 물어 표로 보여 줍니다. 세션을 열지 않으므로 계정이 필요 없고, 서버 인증서를 신뢰하기 전에도 됩니다(접속 3초 · 전체 6초 제한).

[엔드포인트 조회] 결과 — 번호는 읽는 순서

번호자리하는 일
①묶음 머리 오른쪽[엔드포인트 조회] — IP 와 포트를 먼저 넣어야 합니다
②표 머리조회한 주소와 열 — 보안 모드 · 보안 정책 · 사용자 인증(Anonymous · UserName · Certificate 등) · 서버 인증서(주체와 SHA-1 지문)
③행 끝[이 설정 사용] — 그 행의 보안 모드·정책을 위 칸에 채웁니다. 저장해야 적용됩니다
  • 정책 칸의 폐기된 정책 배지는 Basic256 · Basic128Rsa15 입니다. 그 행의 [이 설정 사용] 을 누르면 낡은 정책 허용 이 함께 켜지고, 정책 칸은 그 정책이 아니라 자동 이 됩니다.
  • 지원 안 함 배지가 붙은 정책으로는 엣지가 연결하지 못합니다.
  • 사용자 인증 열에 Certificate 가 있어도 엣지는 익명 또는 사용자 이름으로만 로그인합니다 — 지원하지 않는 것 참고.

처음 연결 — 서버 인증서 신뢰​

엣지는 처음 보는 서버 인증서를 자동으로 믿지 않습니다. 보안 모드로 처음 연결하면 서버 인증서가 거절되고, 연결 화면(편집)과 연결 상세 화면의 보안 묶음에 다음 안내가 뜹니다.

서버 인증서를 아직 신뢰하지 않은 상태 — 번호는 읽는 순서

번호자리하는 일
①안내 첫 줄서버 인증서를 아직 신뢰하지 않아 연결하지 않았다는 안내
②인증서 주체 · 지문 (SHA-1)서버가 내민 인증서. 지문을 서버(DCS·컨트롤러) 화면의 인증서 지문과 대조합니다
③[이 인증서 신뢰]확인 창을 엽니다
④인증서 관리OPC UA 서버 › 클라이언트 연결 인증서 탭으로 갑니다

[이 인증서 신뢰] 를 누르면 확인 창이 한 번 더 지문을 보여 줍니다.

서버 인증서 신뢰 확인 창 — 번호는 읽는 순서

번호자리하는 일
①주체 · 지문신뢰할 인증서. 앞의 안내에 뜬 지문과 같은지 다시 봅니다
②안내지문이 서버 화면과 다르면 신뢰하지 않습니다
③[이 인증서 신뢰]신뢰합니다. «신뢰했습니다. 곧 다시 연결합니다.» 가 뜹니다

신뢰하면 그 인증서를 기다리던 연결의 재접속 대기를 풀어 곧 다시 연결합니다. 연결되면 안내가 초록색으로 바뀝니다.

보안 연결 성공 — 번호는 읽는 순서

번호자리하는 일
①상태 줄«보안 연결됨 (SignAndEncrypt)» — 괄호 안은 연결에 설정한 보안 모드입니다(자동이면 auto)

신뢰 목록은 이 엣지의 모든 OPC UA 연결이 함께 씁니다. 같은 서버에 붙는 연결이 여럿이면 한 번만 신뢰하면 됩니다.

서버가 엣지 인증서를 거절할 때​

DCS·컨트롤러도 처음 보는 클라이언트 인증서를 거절하는 경우가 많습니다. 그러면 보안 채널이 거절되고 다음 안내가 뜹니다.

서버가 엣지의 클라이언트 인증서를 거절한 상태 — 번호는 읽는 순서

번호자리하는 일
①안내 첫 줄서버가 보안 채널을 거절했다는 안내 — 대개 서버가 이 엣지 인증서를 아직 신뢰하지 않은 경우
②인증서 주체 · 지문 (SHA-1)엣지의 클라이언트 인증서. 서버의 거절 목록에서 이 지문을 찾습니다
③[클라이언트 인증서 내려받기 (.der)]이 연결의 엣지 인증서를 내려받습니다
④인증서 관리OPC UA 서버 › 클라이언트 연결 인증서 탭으로 갑니다
  1. ③ 으로 인증서(.der)를 내려받습니다. OPC UA 서버 › 클라이언트 연결 인증서 탭의 «엣지의 클라이언트 인증서» 에서도 연결별로 받을 수 있습니다.
  2. DCS·컨트롤러 관리자에게 전달해 서버의 신뢰 목록에 넣습니다(서버의 거절 목록에 이미 있다면 그것을 신뢰로 옮겨도 됩니다). 방법은 서버 제조사 매뉴얼을 따릅니다.
  3. 엣지는 다음 연결 시도에서 다시 붙습니다.

인증서 관리 — OPC UA 서버 › 클라이언트 연결 인증서​

OPC UA 서버 화면(/ui/opcua)의 클라이언트 연결 인증서 탭에서 엣지가 클라이언트로 쓰는 인증서를 한곳에서 봅니다. 엣지가 SCADA 에 제공하는 OPC UA 서버의 인증서(클라이언트 인증서 탭)와는 따로입니다.

클라이언트 연결 인증서 탭 — 번호는 읽는 순서

번호자리하는 일
①탭클라이언트 연결 인증서
②거절된 서버 인증서엣지가 거절한 서버 인증서 — 주체 · Application URI · 지문 · 유효기간 · 기다리는 연결. [신뢰] 또는 [삭제]
③신뢰한 서버 인증서운영자가 신뢰한 서버 인증서. [신뢰 해제] 하면 거절 목록으로 돌아가고, 다음 연결 시도부터 그 서버에 연결하지 않습니다
④엣지의 클라이언트 인증서OPC UA 연결마다 하나 — 연결 · 보안 모드 · Application URI · 지문 · 유효기간. 아직 보안 모드로 연결해 본 적 없는 연결은 «아직 없음»
⑤[내려받기 (.der)]그 연결의 엣지 인증서. 서버의 신뢰 목록에 넣을 때 씁니다
  • [삭제] 한 거절 인증서는 같은 서버에 다시 연결을 시도하면 다시 나타납니다.
  • [신뢰 해제] 해도 이미 열린 연결은 다음 재연결 때 끊깁니다.

엣지의 클라이언트 인증서​

항목값
종류자체 서명(self-signed), RSA 2048
유효기간10년. 만료되면 새로 만들어지므로 서버 쪽에 다시 신뢰시켜야 합니다
만들어지는 때그 연결이 보안 모드로 처음 연결을 시도할 때
Application URIurn:plantpulse:edge:<OPC ID> — 연결마다 하나
저장 위치/data1/pp-data/opcua-client ($PE_DATA_DIR/pp-data/opcua-client). 신뢰 목록도 여기 있습니다
  • 연결을 지워도 인증서는 남고, 같은 OPC ID 로 다시 만들면 그 인증서를 다시 씁니다. DCS 에 다시 신뢰시킬 필요가 없습니다.
  • 이 디렉터리는 백업 대상입니다. 복원하면 엣지 인증서와 신뢰 목록이 함께 돌아옵니다.

지원하지 않는 것​

  • X.509 사용자 인증서 로그인 — 사용자 인증은 익명 또는 사용자 이름 + 비밀번호뿐입니다.
  • CA 가 서명한 클라이언트 인증서 — 엣지 인증서는 자체 서명만 씁니다.
  • HA 짝 박스로 신뢰 목록 복제 — 신뢰 목록은 박스마다 따로입니다. HA 구성이면 박스마다 서버 인증서를 신뢰하고, 서버 쪽에도 박스마다 엣지 인증서를 넣으세요.

태그의 PLC 주소 표기​

OPC-UA 의 태그 주소는 보통 NodeId 라고 부르는 다음 형식입니다.

표기설명
ns=2;s=Channel1.Device1.Tag1namespace 2, 문자열 식별자 — Kepware 에서 가장 흔함
ns=2;i=1234namespace 2, 숫자 식별자
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28aGUID 형
  • ns= 는 namespace 번호. 보통 2.
  • s= 다음에 “Channel.Device.Tag” 식의 경로가 들어갑니다 (Kepware 에서 만든 경로 그대로).

NodeId 를 어떻게 알아내나요​

  1. PLC 제조사 / Kepware 제조사 매뉴얼 에 매핑표가 있는 경우가 많습니다.
  2. UA Expert 같은 무료 OPC-UA 클라이언트로 직접 연결해 트리에서 노드를 우클릭하면 NodeId 를 복사할 수 있습니다.
  3. Kepware 자체의 OPC Quick Client 도구로도 같은 일을 할 수 있습니다.

Kepware 빠른 설정​

자주 쓰는 조합인 Kepware 기준 절차입니다.

  1. Kepware Server → Project → 채널 추가 (예: Simulator)
  2. 디바이스 추가 (예: Simulator) → 모델 = 16 Bit Device
  3. 태그 추가 → 이름 Sine1, type Float, scan rate 100ms
  4. Project Properties → OPC UA → Server Endpoint 에서 포트 49320 활성화
  5. 서버 엔드포인트의 보안 정책(Security Policies)을 고릅니다. 보안 연결이면 Basic256Sha256 이상과 Sign and Encrypt 를 켜고, 엣지 인증서를 Kepware 의 신뢰 목록에 넣습니다 — 서버가 엣지 인증서를 거절할 때 참고
  6. 익명 또는 사용자 계정 활성화

이 게이트웨이의 등록 폼에:

칸값
IPKepware 서버 PC 의 IP
포트49320
사용자/비번위에서 만든 계정 (익명이면 비움)
태그 PLC 주소ns=2;s=Simulator.Simulator.Sine1

흔한 문제와 해결​

증상 / 메시지가능한 원인해결
“Connection refused” / 연결 안 됨OPC-UA 서버가 꺼져 있거나 포트 차단OPC-UA 서버가 가동 중인지, IP/포트가 맞는지 확인
“User access denied”사용자/비번 오류, 또는 서버에서 익명 접속 비허용서버에서 사용자 등록하거나 익명 허용
보안 모드 None 인데 연결 실패, 로그에 no SecurityMode=None endpoint서버가 None 엔드포인트를 열어 두지 않음보안 모드를 Sign 또는 SignAndEncrypt 로 바꾸고 [엔드포인트 조회] 로 확인
연결은 되는데 값이 항상 0 또는 null태그 NodeId 오타, namespace 번호 다름UA Expert 등으로 같은 NodeId 가 실제로 동작하는지 검증
끊겼다 붙었다 반복네트워크 불안정, 또는 서버 PC 부하서버 PC 자원 / 케이블 / 스위치 점검

보안 연결 오류 (화면 문구)​

보안 연결이 실패하면 연결 화면과 연결 상세 화면의 보안 묶음에 아래 문구가 뜹니다. 화면은 한국어·영어로 나옵니다.

코드화면 문구 (ko)화면 문구 (en)해결
OPCUA_SERVER_CERT_UNTRUSTED서버 인증서를 아직 신뢰하지 않아 연결하지 않았습니다. 지문을 서버(DCS·컨트롤러) 쪽 인증서와 대조한 뒤 신뢰하세요.Not connected: the server certificate is not trusted yet. Compare the thumbprint with the server's (DCS / controller) certificate, then trust it.지문을 대조하고 [이 인증서 신뢰]
OPCUA_SERVER_CERT_INVALID신뢰한 서버 인증서가 유효하지 않습니다(만료·폐기·용도 불일치). 서버 쪽 인증서를 확인하세요.The trusted server certificate is not valid (expired, revoked or wrong usage). Check the server's certificate.서버 인증서를 새로 발급받은 뒤 새 지문을 신뢰
OPCUA_CLIENT_CERT_REJECTED서버가 보안 채널을 거절했습니다. 대개 서버가 이 엣지의 클라이언트 인증서를 아직 신뢰하지 않은 경우입니다 — 인증서를 내려받아 서버의 신뢰 목록에 넣으세요.The server refused the secure channel - usually it does not trust this edge's client certificate yet. Download it and add it to the server's trust list.엣지 인증서(.der)를 서버의 신뢰 목록에 넣음
OPCUA_PKI_DIR_MISSING엣지의 클라이언트 인증서 저장소를 찾지 못했습니다(데이터 볼륨 PE_DATA_DIR 를 확인하세요).The edge's client certificate store is missing (check the data volume PE_DATA_DIR).데이터 볼륨(/data1)이 마운트됐는지 확인
OPCUA_PKI_ERROR엣지의 클라이언트 인증서 저장소를 읽거나 만들지 못했습니다. 서버 로그를 확인하세요.The edge's client certificate store could not be read or created. See the server log./data1/pp-data/opcua-client 권한·디스크 공간 확인
OPCUA_SECURITY_CONFIG_INVALID보안 모드·정책 설정이 올바르지 않습니다(폐기된 정책은 '낡은 정책 허용'을 켜야 합니다).The security mode / policy setting is invalid (a deprecated policy needs 'Allow deprecated policies').보안 모드·정책 값 확인. 폐기된 정책이면 «낡은 정책 허용»
OPCUA_NO_MATCHING_ENDPOINT서버가 설정한 보안 모드·정책·인증 방식에 맞는 엔드포인트를 제공하지 않습니다. [엔드포인트 조회]로 확인하세요.The server offers no endpoint with this security mode, policy and user token. Check with [Find endpoints].[엔드포인트 조회] 에서 서버가 주는 조합을 골라 [이 설정 사용]
OPCUA_CONNECT_FAILED연결하지 못했습니다(네트워크·시간 초과·세션).Could not connect (network, timeout or session).IP·포트·방화벽, 서버 가동 상태 확인

자주 쓰는 데이터 형식​

PLC 의 값데이터 형식형식 보조PLC 주소 예
켜짐/꺼짐Boolean(비움)ns=2;s=Pump.Status
정수Integer(비움)ns=2;s=Counter
큰 정수Long(비움)ns=2;s=Total
실수 (32-bit)Float(비움)ns=2;s=Pressure
실수 (64-bit, 정밀)Double(비움)ns=2;s=PrecisionTemp
문자열String(비움)ns=2;s=Recipe.Name

OPC-UA 의 경우 format 칸은 보통 비워둡니다 (서버가 데이터 타입을 알려줍니다).


더 자세한 예제 / 자동화 등록​

스크립트 / API 로 자동 등록하시려면 고급 — REST API 페이지의 OPC-UA 예제를 참고하세요.