Using the OPC-UA Node Viewer (/ui/opcua)
The gateway itself embeds an OPC-UA server, exposing collected tag values directly to external OPC-UA clients (SCADA, HMI). This page is a viewer that shows that embedded server's connection information and its node tree (tag list + live values + time series) on a single screen.
- Implementation: Eclipse Milo 0.6.16 (Apache 2.0)
- OPC UA spec: 1.04 (IEC 62541:2020)
- Transport: opc.tcp:// (default port 12000) / opc.tcp+TLS (12443)
- Security policies: None / Basic128Rsa15 / Basic256 / Basic256Sha256 / Aes128_Sha256_RsaOaep / Aes256_Sha256_RsaPss
- User token: Anonymous (
opc.ua.server.anonymous=yesdefault) / UserName+Password / X.509 - Encoding: UA Binary
- Profile: Standard 2017 Server
- PubSub MQTT (1.05): Not supported — use Sparkplug B if publishing is required
Go to OPC-UA Viewer in the left menu, or navigate directly to http://<gateway>/ui/opcua.
1. Screen Layout
| Area | Contents |
|---|---|
| Top endpoint panel | TCP / TLS Endpoint URL for external clients, Application Name, Namespace Index, credentials (Username / whether Anonymous is allowed / Password toggle) |
| Left node tree | 사이트 → OPC → 태그 three-level tree. Shows each OPC's connection status (CONNECTED/DISCONNECTED/UNKNOWN), tag count, and each tag's latest value inline |
| Right node details | Metadata + live value of the node selected in the tree + a time series chart (for numeric/boolean tags) |
The copy icon next to the endpoint URL at the top copies it in one click, and clicking the Password field reveals the plaintext (when the session is authenticated).
2. NodeId Convention
Each tag is exposed under an OPC-UA NodeId in the following form.
ns=2;s=<SITE_ID>.<OPC_ID>.<TAG_ID>
Example: ns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042
External clients (UaExpert, KEPServerEX, Ignition, etc.) can subscribe directly using this NodeId. A copy button to the right of the NodeId in the detail panel makes it easy to put on the clipboard.
3. Node Tree — Search / Refresh
- Typing text into the search box at the top of the tree filters tree, OPC, and tag names by live partial match. If a match is found in a descendant, the parent (OPC, site) is expanded automatically.
- The refresh (↻) icon to the right of the search box re-fetches the cached tree/endpoint information. It normally refreshes automatically, so you will rarely need it.
- The ◂/▾ toggle on each row collapses/expands the subtree. While a search is active, nodes expand automatically to reveal matches; clearing the search restores the previous toggle state.
- Automatic truncation of long values (ellipsis) — if a tree node's current value exceeds the column width, it is
…withtext-overflow: ellipsis. Hovering with the mouse shows the full plaintext in a tooltip — a safeguard that keeps JSON / long STRING values from breaking the tree layout.
Values shown in the tree refresh automatically every 2 seconds (/ui/opcua/tree). The tree structure, expansion state, right-hand details, and charts are all preserved.
4. Node Details + Time Series Chart
Clicking a tag row displays the following on the right.
- NodeId (copyable)
- Tag ID / DataType / PLC Address / Alias / Description
- Value (current value + last update time, down to ms)
- Status (
OK/ERROR (메시지))
The chart type changes automatically depending on the value type.
4.1 Numeric / Boolean (ECharts line chart)
If the value is numeric (Integer/Long/Float/Double, etc.) or boolean, an ECharts time series line chart is drawn.
| Chart feature | Description |
|---|---|
| Range selection | Select 1분/5분/10분/30분/1시간(default)/3시간/12시간/24시간 from the combo box at the top right of the chart — historical data from Cassandra (tm_tag_point) is fetched immediately and redrawn |
| dataZoom slider | The gray (light gray) drag bar at the bottom of the chart — horizontal zoom / pan |
| Automatic appending | The 2-second polling cycle appends new values to the chart |
| Tooltip | Mouse-over shows the timestamp to ms plus the value |
| Boolean | Visualizes 0/1 toggling in step end (step) form |
| Sampling | Holds up to 5,000 points; beyond that the oldest points are dropped (lttb downsampling) |
4.2 STRING (vis-timeline box chart)
If the value is a STRING, a vis-timeline range box chart is drawn instead of the ECharts line — consecutive runs of the same value are grouped into a single box, visually emphasizing when the state changed.
| Item | Description |
|---|---|
| Box = run of identical values | Example: if "RUNNING" holds from 12:00 to 12:35, that interval is a single box |
| Box color | Automatic, based on a hash of the value — identical text always gets the same color |
| Box label | The value in plaintext (hover for the full text if long) |
| Time axis zoom/pan | Standard vis interaction (mouse wheel / drag) |
| Refresh | On each poll, the history is sorted ASC and the entire dataset is rebuilt (no flicker when there is little change) |
| On node change | disposeStringTimeline() destroys the instance and regenerates the chart for the new node |
The STRING chart is well suited to viewing non-numeric time series such as state machine logs (
READY → RUNNING → ERROR → IDLE) at a glance. The same approach applies to Viewing tag value trends (tag-view).
5. EDGE System Tags
A single virtual OPC whose name starts with EDGE_<...> appears automatically in the tree. This is a collection of system tags that expose the gateway's own status as OPC-UA nodes.
Representative tags:
| Tag name (Description) | Meaning |
|---|---|
THREAD_COUNT | Java thread count |
TAG_COUNT | Total number of registered tags |
SERVER_STARTED_TIMESTAMP | Server start time (epoch ms) |
OPC_CONNECTED_COUNT | Number of OPCs with a healthy connection |
HEAP_USED_MB | JVM heap usage (MB) |
The connection status of the EDGE system OPC is always shown as CONNECTED (it is the gateway itself, so there is no connection to speak of).
6. Using It with External Clients — Workflow
- Copy the TCP Endpoint from this screen (e.g.
opc.tcp://<gateway>:12000). - In an OPC-UA client such as UaExpert or KEPServerEX, add a new server → enter the URL above.
- Authentication mode:
- If Anonymous is enabled (the top panel shows Anonymous allowed), connect as is.
- Otherwise use Username / Password (the password can be briefly revealed in plaintext by clicking it in the top panel).
- After connecting, subscribe directly to tags in the NodeId format
ns=2;s=....
7. Troubleshooting
| Symptom | Points to check |
|---|---|
| OPC does not appear in the tree | Whether 자주 하는 작업 → 새 PLC 연결 추가 has finished, and whether the gateway has the auto-start collection option enabled for that OPC |
The value next to a tag shows - | That tag has never been updated. Check collection start / OPC connection / Quality |
| Visible in the tree, but the external client cannot find the NodeId | Typo, or the OPC-UA server is disabled. Check opc.ua.server.tcp.enable=true in app.properties |
| Chart is empty | There is no Cassandra history for that tag yet (a tag registered just now) — points will be added shortly |
| Chart looks jagged | Widening the range to 24 hours engages automatic downsampling and smooths it out |
라이센스/CN 인증서 warning (TLS endpoint) | The gateway's self-signed certificate — mark it "Trust" in the client. Contact your operator about applying a corporate certificate |
8. Learn More
- Node-RED (
/ui/flow) — process and forward the same tag values through flows. See자주 하는 작업 → Node-RED 로 자동화 / IIoT 플로우. - REST API — the same data can be fetched directly over HTTP. See
고급 / 통합 파트너용 → REST API. - Driver Technical Reference → OPC-UA — describes the gateway's OPC-UA client side (the path that connects to an external OPC-UA server to retrieve data).