opcua
opcua 모듈은 JSH 애플리케이션에서 OPC UA 서버에 읽기/쓰기를 수행하는 클라이언트 API를 제공합니다.
Client
OPC UA 클라이언트 객체입니다.
생성
new Client(options)- 반환값:
Client options를 생략하면 예외(missing client options)가 발생합니다.
옵션
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| endpoint | string | "" | OPC UA 서버 엔드포인트 (opc.tcp://host:port) |
| readRetryInterval | number | 100 (100ms 미만이면 100으로 보정) | read() 재시도 간격(밀리초) |
| messageSecurityMode | number | MessageSecurityMode.None | 보안 모드. MessageSecurityMode 참고 |
사용 예시
| |
close()
클라이언트 연결을 종료합니다.
사용 형식
close()- 반환값: 성공 시
null
read()
지정한 노드 목록을 읽습니다.
사용 형식
read(readRequest)매개변수
readRequest(object): ReadRequest
반환값
object[]: ReadResult 배열
오류 동작:
nodes가 없거나 비어 있으면 예외가 발생합니다.
write()
하나 이상의 노드 값을 기록합니다.
사용 형식
write(...writeRequest)매개변수
writeRequest(object, 가변 인자): WriteRequest
반환값
object: WriteResult
오류 동작:
- 인자가 없으면 예외(
missing argument)
사용 예시
| |
browse()
하나 이상의 노드에 대한 참조를 탐색합니다.
사용 형식
browse(browseRequest)매개변수
browseRequest(object): BrowseRequest
반환값
object[]: BrowseResult 배열
오류 동작:
nodes가 없거나 비어 있으면 예외가 발생합니다.
사용 예시
| |
browseNext()
browse() 또는 browseNext()가 반환한 continuation point를 사용해 다음 페이지를 계속 조회합니다.
사용 형식
browseNext(browseNextRequest)매개변수
browseNextRequest(object): BrowseNextRequest
반환값
object[]: BrowseResult 배열
오류 동작:
continuationPoints가 없거나 비어 있으면 예외가 발생합니다.
사용 예시
| |
children()
지정한 노드의 직접 자식 참조를 반환합니다.
사용 형식
children(childrenRequest)매개변수
childrenRequest(object): ChildrenRequest
반환값
object[]: ChildrenResult 배열
오류 동작:
node가 없거나 비어 있으면 예외가 발생합니다.
사용 예시
| |
ReadRequest
| 프로퍼티 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| nodes | string[] | 읽을 OPC UA 노드 ID 목록 | |
| maxAge | number | 0 | 허용 가능한 캐시 연령(밀리초) |
| timestampsToReturn | number | TimestampsToReturn.Neither | 타임스탬프 반환 정책 |
ReadResult
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| status | number | OPC UA 상태 코드(uint32) |
| statusText | string | 상태 텍스트 |
| statusCode | string | 상태 코드 이름(예: StatusGood) |
| value | any | 읽은 값 |
| type | string | 값 타입 이름(예: Boolean, Int32, Double) |
| sourceTimestamp | number | 소스 타임스탬프(Unix epoch milliseconds) |
| serverTimestamp | number | 서버 타임스탬프(Unix epoch milliseconds) |
WriteRequest
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| node | string | 기록 대상 노드 ID |
| value | any | 기록할 값 |
WriteResult
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| error | Error|null | 요청 처리 오류 |
| timestamp | number | 응답 타임스탬프(Unix epoch milliseconds) |
| requestHandle | number | OPC UA 요청 핸들 |
| serviceResult | number | OPC UA 서비스 결과 코드 |
| stringTable | string[] | OPC UA 문자열 테이블 |
| results | number[] | 노드별 상태 코드 배열 |
BrowseRequest
| 프로퍼티 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| nodes | string[] | 탐색할 OPC UA 노드 ID 목록 | |
| browseDirection | number | BrowseDirection.Forward | 탐색 방향 |
| referenceTypeId | string | 모든 reference | 따라갈 참조 타입 노드 ID |
| includeSubtypes | boolean | true | referenceTypeId의 하위 타입 포함 여부 |
| nodeClassMask | number | 0 | 포함할 노드 클래스 비트마스크 |
| resultMask | number | BrowseResultMask.All | 반환할 필드 비트마스크 |
| requestedMaxReferencesPerNode | number | 0 | 서버가 노드별 최대 참조 수를 나누어 반환하도록 요청하는 힌트 |
BrowseNextRequest
| 프로퍼티 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| continuationPoints | string[] | browse() 또는 browseNext()가 반환한 base64 continuation point 목록 | |
| releaseContinuationPoints | boolean | false | 다음 참조를 요청하지 않고 서버 측 continuation point를 해제할지 여부 |
BrowseResult
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| status | number | OPC UA 상태 코드(uint32) |
| statusText | string | 상태 텍스트 |
| continuationPoint | string | base64 continuation point. 다음 페이지가 없으면 빈 문자열 |
| references | object[] | BrowseReference 배열 |
BrowseReference
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| referenceTypeId | string | 참조 타입 노드 ID |
| isForward | boolean | 정방향 참조 여부 |
| nodeId | string | 대상 노드 ID |
| browseName | string | Browse 이름 |
| displayName | string | Display 이름 |
| nodeClass | number | OPC UA 노드 클래스 값 |
| typeDefinition | string | 타입 정의 노드 ID |
ChildrenRequest
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| node | string | 부모 노드 ID |
| nodeClassMask | number | 포함할 노드 클래스 비트마스크 |
ChildrenResult
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| referenceTypeId | string | 참조 타입 노드 ID |
| isForward | boolean | 정방향 참조 여부 |
| nodeId | string | 자식 노드 ID |
| browseName | string | Browse 이름 |
| displayName | string | Display 이름 |
| nodeClass | number | OPC UA 노드 클래스 값 |
| typeDefinition | string | 타입 정의 노드 ID |
BrowseDirection
BrowseDirection.ForwardBrowseDirection.InverseBrowseDirection.BothBrowseDirection.Invalid
NodeClass
NodeClass.UnspecifiedNodeClass.ObjectNodeClass.VariableNodeClass.MethodNodeClass.ObjectTypeNodeClass.VariableTypeNodeClass.ReferenceTypeNodeClass.DataTypeNodeClass.View
BrowseResultMask
BrowseResultMask.NoneBrowseResultMask.ReferenceTypeIdBrowseResultMask.IsForwardBrowseResultMask.NodeClassBrowseResultMask.BrowseNameBrowseResultMask.DisplayNameBrowseResultMask.TypeDefinitionBrowseResultMask.AllBrowseResultMask.ReferenceTypeInfoBrowseResultMask.TargetInfo
MessageSecurityMode
MessageSecurityMode.NoneMessageSecurityMode.SignMessageSecurityMode.SignAndEncryptMessageSecurityMode.Invalid
TimestampsToReturn
TimestampsToReturn.SourceTimestampsToReturn.ServerTimestampsToReturn.BothTimestampsToReturn.NeitherTimestampsToReturn.Invalid
OPCUA 클라이언트
이 예제는 OPC UA 서버에 연결해 시스템 지표를 읽고 데이터베이스에 저장하는 수집기를 구현합니다.
동작 흐름
- OPC UA 연동:
opcua모듈을 사용해opc.tcp://localhost:4840서버에 연결하고sys_cpu,sys_mem,load1등 노드 값을 조회합니다. - 주기 수집:
setInterval()을 활용해 10초마다 데이터를 읽습니다. - 데이터 적재: 수집한 값은
EXAMPLE테이블에name,time,value컬럼으로 저장합니다.
데이터 수집기
스크립트를 opcua-client.js로 저장한 뒤 JSH 터미널에서 백그라운드로 실행하십시오.
jsh / > opcua-client
jsh / > ps
┌──────┬──────┬──────┬──────────────────┬────────┐
│ PID │ PPID │ USER │ NAME │ UPTIME │
├──────┼──────┼──────┼──────────────────┼────────┤
│ 1044 │ 1 │ sys │ /opcua-client.js │ 13s │
│ 1045 │ 1025 │ sys │ ps │ 0s │
└──────┴──────┴──────┴──────────────────┴────────┘ - opcua-client.js
| |
시뮬레이터 서버
opcua-client.js를 시험하려면 필요한 시스템 지표 노드를 제공하는 OPC UA 서버가 필요합니다.
실환경이 없다면 아래 저장소에서 제공하는 시뮬레이터를 사용해 주십시오.
sys_cpu, sys_mem, load1, load5, load15 등의 샘플 데이터를 제공하여 수집기 및 시각화 흐름을 검증하실 수 있습니다.
설정 방법은 저장소의 안내를 따르시면 됩니다.
https://github.com/machbase/neo-server/tree/main/jsh/native/opcua/test_server
시뮬레이터를 실행한 뒤 opcua-client.js를 가동하면 OPC UA 클라이언트가 정상적으로 연결되어 데이터를 수집합니다.