OPC UA
다른 회사의 서버에 접속하는 OPC UA 클라이언트이며, 인증서로 신뢰를 가르고 노드 id로 주소를 적으며 주소 공간을 훑어 장치를 검색합니다.
OPC UA 드라이버는 다른 회사의 OPC UA 서버에 접속하는 클라이언트입니다. PLC, 게이트웨이, 히스토리안, 다른 SCADA 시스템이 상대이며 opc.tcp로 이야기합니다. 이 드라이버는 이 스테이션 자신의 주소 공간을 공개하는 내장 OPC UA 서버(설정에서 설명합니다)의 나가는 쪽 짝입니다. 둘은 스테이션의 애플리케이션 신원을 함께 쓰지만, 상대를 신뢰하는 일은 각자 따로 합니다.
장치
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 호스트 | 서버의 DNS 이름, IPv4 주소, IPv6 주소. | 비워 두면 localhost |
| 포트 | 엔드포인트의 TCP 포트. | 4840(0으로 설정하면 4840으로 되돌아갑니다) |
| 리소스 경로 | 어떤 서버가 호스트와 포트 뒤에 요구하는 엔드포인트 경로이며, opc.tcp://host:port/path를 만듭니다. 서버가 뿌리에서 답하면 비워 두십시오. |
비어 있음 |
| 세션 보안 | 꺼 두면 세션은 서명되고 암호화되며, 그보다 나은 것을 제공하지 않는 장비는 거부됩니다. 보안 없는 세션 허용을 켜면, 안전한 엔드포인트를 광고하지 않는 장비에도 평문 그대로 세션을 엽니다. | 꺼짐 |
| 사용자 이름 / 비밀번호 | 세션의 사용자 신원입니다. 사용자 이름이 비어 있으면 익명 세션입니다. 비밀번호는 저장될 때 사용자별 Windows DPAPI로 보호되며, 그것을 입력한 그 기기와 그 Windows 계정에서만 읽을 수 있습니다. | 익명 |
| 읽기 주기 (ms) | 스스로 값을 정하지 않은 태그의 기본 읽기 주기. | 1000 |
보안과 인증서
접속은 서버의 엔드포인트 목록에서 시작합니다. 클라이언트는 서버가 광고하는 가장 안전한 엔드포인트를 고르고, 이 스테이션 자신의 인증서로 애플리케이션을 인증합니다. 내장 서버가 쓰는 것과 같은 OPC UA 애플리케이션 신원입니다. 많은 서버가 세션을 받아들이기 전에 그 인증서를 자기 쪽에서 신뢰하도록 요구하며, 그 단계는 장비에서 이루어집니다.
보안 없는 엔드포인트보다 나은 것을 광고하지 않는 장비는 거부되고, 장치가 그 이유를 말합니다. 그런 세션은 측정값과 자격 증명을 평문으로 실어 나르고 장비의 신원을 전혀 증명하지 못하므로, 그 장치에서 그렇게 요청한 곳에서만 열립니다. 연결 카드의 세션 보안, 보안 없는 세션 허용입니다. 이 선택은 그 장치의 것이고, 그 장치의 주소에 ?security=none으로 실려 다니며, 읽기 세션에도 검색의 훑기에도 똑같이 적용됩니다. 이것을 켜도 보안을 제공하는 장비가 낮춰지는 일은 없습니다. 광고된 것 중 가장 안전한 엔드포인트가 그대로 선택됩니다.
반대 방향에서 신뢰는 닫힌 채로 실패하며 명시적입니다. 장비의 인증서는 세션이 열리기 전에 확인됩니다.
- 이 스테이션이 한 번도 승인한 적 없는 인증서는 거부되고 검토를 위해 기록되며, 장치 패널은 무엇의 승인을 기다리는지 밝히는 알림을 보여 줍니다. 그 장치는 "오프라인"이 아니라 결정을 기다리고 있는 것입니다.
- 인증서는 설정 > 현장 장비 접근에서 검토합니다. 인증서 신뢰의 나가는 쪽 절반입니다. 기록된 인증서는 승인 대기 중에 놓여, 사용자가 승인하거나(새 세션이 열릴 수 있게 됩니다) 차단할 때까지(같은 물음을 되풀이하지 않고 거부합니다) 그 자리에 있습니다. 이것은 현장 장비 목록입니다. 같은 페이지의 클라이언트 접근은 반대 방향, 곧 누가 이 스테이션 자신의 서버로 들어오는 연결을 맺을 수 있는지입니다.
- 승인된 행의 승인 철회는 그 인증서로 도는 실시간 세션을 닫고 인증서를 검토 목록으로 되돌리므로, 다음 연결에서 다시 묻습니다.
- 인증서를 전혀 내놓지 않는 장비는 누가 응답했는지 아무것도 증명하지 못합니다. 승인할 것이 없으므로 그 세션은 주소를 일지에 적은 뒤 거부됩니다. 같은 보안 없는 세션 허용 아래에서만 연결되며, 그때는 그 선택이 승인을 대신합니다.
장비 서버를 승인하는 일은 그 인증서가 이 스테이션 자신의 서버로 들어오는 연결을 맺도록 허락하는 일이 결코 아닙니다. 두 방향은 일부러 서로 다른 저장소를 씁니다.
세션의 동작
태그는 주기적으로 읽습니다. 읽을 때마다 서버에 그 노드의 현재 값을 묻습니다. 서버 자신의 판정이 표본마다 함께 실려 옵니다. Bad나 Uncertain이 찍힌 값은 거부되고 태그는 품질이 나쁜 것으로 읽히므로, 의심스러운 신호원이 정상 읽기로 세탁되는 일은 없습니다. 서버에 더 이상 없는 노드는 장치 전체를 실패시키는 대신 값 없음으로 읽힙니다.
세션은 킵얼라이브로 감시합니다. 킵얼라이브를 세 번 놓치면 클라이언트가 저절로 다시 연결하기 시작하고 하던 일을 이어 갑니다. 처음 연결하는 일은 애플리케이션의 배경 재시도 고리가 맡으므로, 닿지 않는 서버는 시작할 때 아무 비용도 들이지 않습니다.
태그 주소 지정
태그의 주소는 노드 id로 적으며, 자유 입력으로 쓰고 그대로 보냅니다. 받아들이는 형태는 표준 OPC UA 표기입니다.
| 예 | 뜻 |
|---|---|
ns=2;s=Temperature |
네임스페이스 색인 2의 문자열 식별자 |
i=2258 |
네임스페이스 0의 숫자 식별자(여기에서는 서버의 CurrentTime) |
ns=3;i=1042 |
네임스페이스 색인 3의 숫자 식별자 |
nsu=urn:vendor:app;s=Line1.Speed |
색인 대신 URI로 네임스페이스를 부르는 확장 형태이며, 다시 시작할 때 색인이 바뀌어도 흔들리지 않습니다 |
태그는 노드의 Value 특성을 읽고 씁니다.
값 형식
| 제시되는 형식 |
|---|
| Boolean, Byte, Int16, Int32, Int64, Float, Double, 그리고 String |
값은 스칼라만 다룹니다. 배열과 구조체와 그 밖의 복합 값은 오해를 부르는 숫자 하나로 눌러 담는 대신 읽을 수 없는 것으로 거부되고, 태그는 품질이 나쁜 것으로 읽힙니다. 그런 태그는 자기만 실패합니다. 그 장치의 다른 태그는 계속 읽히고, 그것 때문에 다시 연결되는 일도 없습니다. 빈 문자열은 실패가 아니라 하나의 값입니다. 제시되는 집합 밖의 형식(부호 없는 너비들, DateTime, Guid, ByteString)은 이 드라이버에서 쓸 수 없습니다.
그러므로 서버를 스캔하면 서버가 담고 있는 것보다 적은 채널이 제시됩니다. 값의 목록을 선언하는 노드와, 형식이 제시되는 집합 밖에 있는 노드는 빠집니다. 그렇다고 조용히 버려지지는 않습니다. 스캔은 그것을 세고 마무리 메시지에서 몇 개가 어떤 형식이었는지 말합니다. 예를 들어 "채널 5개가 빠졌습니다. UInt32 형식 3개, 값 하나가 아니라 값의 목록을 담는 것 2개."입니다. 그래서 짧은 목록이 텅 빈 컨트롤러가 아니라 짧은 목록으로 읽힙니다.
쓰기
쓸 수 있는 태그는 OPC UA Write 서비스로 노드의 Value 특성에 씁니다. 서버의 응답이 판정입니다. 거부된 쓰기는 실패로 드러나고, 캐시된 값은 받아들여졌을 때에만 앞으로 나아갑니다. 어디에서나 그렇듯 쓰기 칸은 공학값을 받으며, 원시값이 나가기 전에 값 변환 경로가 거꾸로 적용됩니다.
장치 검색
장치 검색 명령은 그 옆 칸에서 대상을 받습니다. opc.tcp://plc-host:4840 같은 OPC UA 서버 주소입니다. 스캔은 두 단계이며, 진행 줄이 지금 도는 단계를 밝힙니다.
- 엔드포인트: 대상의 표준 검색 서비스에 묻고, 광고된 모든 검색 URL이 후보 엔드포인트가 됩니다. 별도의 포트와 서버 경로는 후보의 연결 칸으로 그대로 옮겨 옵니다.
- 채널: 후보마다 Objects 폴더에서 아래로 주소 공간을 훑고, 읽을 수 있는 변수를 모두 형식과 접근과 함께 후보 태그로 나열합니다. 서버의 진단 영역은 건너뜁니다.
훑기는 익명으로 로그인합니다(가장 안전한 엔드포인트를 고르는 같은 방식, 보안 없는 세션에 대한 같은 거부, 같은 장비 인증서 관문을 씁니다). 익명 세션을 거부하는 서버, 안전한 엔드포인트를 광고하지 않는 서버, 어떤 이유로든 실패한 훑기에서도 엔드포인트는 태그 0개로 추가할 수 있게 남습니다. 추가한 다음 장치에 자격 증명과 세션 보안을 정하고 태그를 손으로 설정하십시오. 후보를 추가하기 전까지는 아무것도 저장되지 않으며, 취소해도 이미 완성된 후보는 남습니다.
알아 둘 만한 한계
- 읽기는 Value 특성을 주기적으로 묻는 일입니다. 드라이버는 원격 서버에 구독을 만들지 않습니다.
- 스칼라 값만 다룹니다. 태그가 배열의 한 원소나 구조체의 한 필드를 가리킬 수는 없습니다.
- 승인 관문은 인증서마다 적용됩니다. 인증서를 바꾸는 장비는 검토 목록으로 돌아가 새 결정을 기다립니다.