opcua
opcua 모듈은 JSH 애플리케이션에서 OPC UA 서버에 읽기/쓰기를 수행하는 클라이언트 API를 제공합니다.
Client
OPC UA 클라이언트 객체입니다.
생성
new Client(options)- 반환값:
Client options를 생략하면 예외(missing arguments)가 발생합니다.
옵션
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| endpoint | string | "" | OPC UA 서버 엔드포인트 (opc.tcp://host:port) |
| readRetryInterval | number | 100 (100ms 미만이면 100으로 보정) | read() 재시도 간격(밀리초) |
| messageSecurityMode | number | MessageSecurityMode.None | 보안 모드. MessageSecurityMode 참고 |
사용 예시
| |
close()
클라이언트 연결을 종료합니다.
사용 형식
close()- 반환값: 없음 (
undefined)
read()
지정한 노드 목록을 읽습니다.
사용 형식
read(readRequest)매개변수
readRequest(object): ReadRequest
반환값
object[]: ReadResult 배열
오류 동작:
- 인자가 없거나 1개가 아니면 예외(
missing argument) nodes가 비어 있으면 예외(missing nodes)
write()
하나 이상의 노드 값을 기록합니다.
사용 형식
write(...writeRequest)매개변수
writeRequest(object, 가변 인자): WriteRequest
반환값
object: WriteResult
오류 동작:
- 인자가 없으면 예외(
missing argument)
사용 예시
| |
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[] | 노드별 상태 코드 배열 |
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 클라이언트가 정상적으로 연결되어 데이터를 수집합니다.
최근 업데이트