Skip to main content

Connection List and Tag List

🎬 Review your connections · 31초 · 2026.09 기준 화면

This is the operational core screen that lets you see the gateway's complete OPC (connection) list and the tag list within each connection, all in one view — and handle start / stop / edit / delete / write value / immediate read, all from here.

Connection list screen — OPC list on the left, tag list on the right

Click the home card Connected List (N), or go directly to http://<gateway>/ui/connect/list.


1. Screen Layout​

┌────────────────────────────────────────────────────────────────┐
│ ⊙ 연결 목록 [←] [↻] [+ 연결 추가] │
├────────────────────────────────────────────────────────────────┤
│ [OPC 목록 테이블 — 14개 컬럼] │
│ PLC | 프로토콜 연결상태 OPC ID ... 수집상태 액션 │
│ ───────────────────────────────────────────────────────── │
│ (행 클릭 → 아래 태그 테이블 채워짐 / 행 하이라이트) │
├────────────────────────────────────────────────────────────────┤
│ 선택된 연결의 TAG 목록을 표시합니다 │
│ [태그 목록 테이블 — 14개 컬럼] │
│ ▣ TAG ID TAG 명 ... 마지막 값 업데이트시간 액션 │
└────────────────────────────────────────────────────────────────┘

When you select an OPC using the MOTOR_SENSE protocol, the tag table is replaced by a HEALTH INDEX / SIGNAL card container (see the separate section).


2. Top Bar — Buttons​

ButtonAction
← (Backspace icon)Go to /ui/main
↻ (sync icon)connect.search() — Re-query the list (automatic refresh is handled by the data table itself; this is for manual refresh)
+ Add Connection (blue button)Go to the /ui/connect/connect new connection creation screen

3. OPC List Table (14 Columns)​

The /connect/opc/list API results are rendered by DataTables.

#ColumnMeaning / Display
1PLC | ProtocolLogo image for each protocol — MELSEC=mitsubishi.png / S7=siemens.png / MODBUS=modbus.svg / OPCUA=opcua.png / EIP=eip.png / LS=ls.png / GE=ge.png / PROFINET=profinet.png / FINS=fins.png / LOGIX=rockwell.png / CANOPEN=canopen.png / HTTP=http.png / OP=op.png / MOTOR_SENSE=MotorSense_Logo.svg
2Connection StatusRound badge — 🟢 Connected / 🔴 Disconnected / ⬜ Unknown (never started)
3OPC IDUnique ID (e.g., OPC_LS_TEST) — sorting key (default ASC)
4OPC NameUser-defined name
5DescriptionFree-form note
6PLC IPThe PLC IP this OPC connects to
7PLC PortOPC port (e.g., LS 2004, S7 102, MODBUS 502)
8Collection Intervaltimecycle (ms) — right-aligned, thousands separator
9Auto Startauto_collect=true → ✓, otherwise -
10Asyncasync=true → ✓, otherwise -
11Connected Tag CountNumber of tags registered under this OPC — right-aligned
12Collected CountCumulative read count (point_count) — large numbers visible via horizontal scroll
13Collection StatusRound badge — 🟢 Normal (scan_status=START, rotating sync icon) / 🟧 Abnormal (NOT COLLECT, warning triangle) / ⬜ Stopped (STOP, stop icon)
14Actions▶ Start / ⏹ Stop / 🔧 Edit / 🗑 Delete (4 icons)

3.1 Action Icons — In Detail​

IconActionInvocation
▶ Start (fa-play)Start collectionconnect.start(opcId) → POST /connect/start
⏹ Stop (fa-stop)Stop collection (TCP connection is maintained)connect.stop(opcId) → POST /connect/stop
🔧 Edit (fa-wrench)Navigate to the appropriate edit screen based on the OPC type (e.g., /ui/connect/ls, branching per opc_type)connect.edit(opcId&opcType)
🗑 Delete (fa-trash)Confirmation dialog → bulk delete the OPC and all its child tagsconnect.del(opcId&opcType)
Deletion is irreversible

Deleting an OPC removes it along with all tag rows beneath it. Time series data (Cassandra tm_tag_point) remains until its TTL expires, but no new reads will be received.

3.2 Difference Between Connection Status and Collection Status​

Cases where the two statuses differ for the same OPC:

ConnectionCollectionMeaning
🟢 Connected🟢 NormalOperating correctly
🟢 Connected🟧 AbnormalTCP connection is alive but read responses aren't arriving within a set time — suspect PLC program / address typo / permissions
🟢 Connected⬜ StoppedUser has pressed ⏹ Stop
🔴 Disconnected⬜ StoppedNormal never started state
🔴 Disconnected🟧 AbnormalRan once but the PLC has dropped — check IP/port/firewall
⬜ Unknown⬜ StoppedNew OPC registered but never started

4. Row Selection → Tag List​

When you click an OPC row:

  1. That row is highlighted with the selected class (other rows deselected)
  2. connect.tag_list(opcId) is invoked → fetches that OPC's tags and renders them in the tag list table below
  3. If that OPC's opc_type is MOTOR_SENSE, a HEALTH INDEX / SIGNAL card container is displayed instead of the tag table

The row selection result is stored in window.__connect_list_selected_opc_id — used as the opc_id parameter when writing tag values inline.


5. Tag List Table (14 Columns)​

Displays the tags within the selected OPC. The last value / time / read status refresh periodically within the page (writejs.value() — separate polling).

#ColumnMeaning / Display
1(icon)Tag icon (fa-tag)
2TAG IDUnique ID (e.g., TAG_LS_TEST_1000)
3TAG NameUser-defined name
4DescriptionFree-form note
5Data TypeInteger / Boolean / Float / Long / String, etc.
6PLC AddressAddress per PLC protocol (e.g., D1000, ns=2;s=...)
7PLC Data FormatFormat option (X / B / W / DW / Float, etc. — used for precise read/write branching per driver)
8CalculationFormula (fomula) — simple arithmetic applied, as in ${VALUE} * 10
9Collected CountCumulative read count — right-aligned
10Last ValueRecent value — green background with white text. Large text (STRING/array) scrolls horizontally within the cell
11Last Update TimeDark gray background with white text, down to ms
12Read Status🟢 SUCCESS (green) / 🔴 ERROR (red)
13Read Error MessageOnly populated when the status is ERROR — red background with white text
14Actions✏ Write / 🔄 Immediate Read (2 icons)

5.1 Tag Actions — In Detail​

✏ Write (fa-pen)​

An inline action to write a value to that tag once.

1. 클릭 → prompt 창: "태그 [<TAG_ID>] 에 쓸 값을 입력하세요"
2. 값 입력 후 OK → confirm: "<OPC_ID> / <TAG_ID> 에 [<VALUE>] 쓰기?"
3. POST /connect/write { tag_id, opc_id, value }
4. 성공 시 toastr: "쓰기 완료: <TAG_ID> = <VALUE>"
5. 서버가 write 직후 같은 connection 으로 즉시 read 한 결과를 함께 반환:
- 동일 ↔ 동일하지 않음 비교 후 추가 안내
"읽기 확인" (info) — 같음 → 정상
"읽기 결과 다름" (warning) — PLC 자체 프로그램이 즉시 덮어쓴 가능성
6. 약 800ms 후 화면의 마지막 값 셀도 자동 갱신

Internally, ConnectService.tagWriteByTagId() branches based on the PLC protocol (supports HTTP / OPC-UA / Modbus / MELSEC / S7 / LS / EIP).

Writing is risky

Before writing to a live equipment tag, validate with a simulator OPC or test tag. Grant write permissions only to tags agreed upon with the operations team.

🔄 Immediate Read (fa-sync-alt)​

Bypasses the collector cache and reads directly from the PLC now.

GET /api/v1/tag/<TAG_ID>/value?fresh=true
→ 성공: toastr.info "지금 읽기: <TAG_ID> = <VALUE>"
→ 값 없음: toastr.warning "읽음 (값 없음): <TAG_ID>"
→ 실패: toastr.error "읽기 실패: ..."

Use for manual refresh on PLCs with long collection intervals (e.g., 30 seconds). Frequent use increases PLC load.


6. MOTOR_SENSE-Specific Area​

When you select an opc_type=MOTOR_SENSE OPC, the following is displayed instead of the tag table.

6.1 Status Information Area​

ItemMeaning
Last Update TimeThe most recent data timestamp for the MOTOR_SENSE asset
Read StatusSUCCESS / ERROR

6.2 HEALTH INDEX Section​

❤ icon + asset-specific cards — horizontal scroll. Each card shows the asset ID + measurement metrics (level, alarm, etc.). Card color: light blue background with a dark blue border.

6.3 SIGNAL Section​

📶 icon + asset-specific cards — horizontal scroll. Time series signal metrics. Card color: light gray.

Both sections allow cards to extend infinitely sideways, vertically scrolling is prevented and only horizontal scrolling is allowed, even with many assets.


7. Common Pitfalls​

SymptomCause / Resolution
Tag table is empty when the row is clickedNo tags registered for that OPC. Go to Edit and add tags
Connected but Collection AbnormalCheck address format / data type (format) / PLC write permissions
Last value cell hasn't updated for a long timeCollection interval (timecycle) is long, or the PLC value isn't changing — force a read with Immediate Read
Read result differs warning after ✏ WriteThe PLC program may be overwriting it within 1 second. This can be normal (e.g., lockout coils)
Last value too long to readThe cell automatically gets a horizontal scrollbar — scroll left/right within the cell
MOTOR_SENSE cards are emptyAsset search hasn't completed yet (/connect/motor-sense/asset-list not responding) — wait a moment, or restart the OPC
Collection Status shows Unknown right after startThe scan loop hasn't completed its first cycle yet — wait for timecycle + α
Re-adding after deletion starts again as UnknownNormal — if auto_collect is on, it automatically transitions to Connected + Normal

8. Learn More​