Skip to main content

Connection List / Tag List (/ui/connect/list) — Complete Column / Action Guide

This is the core operations screen where you can view every OPC (connection) list the gateway knows about along with the tag list inside each one — and handle start / stop / edit / delete / value write / immediate read, all from one place.

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


1. Screen Structure

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

If you select an OPC using the MOTOR_SENSE protocol, a HEALTH INDEX / SIGNAL card container is displayed instead of the tag table (see the separate section).


2. Top Bar — Buttons

ButtonAction
← (backspace icon)Go to /ui/main
↻ (sync icon)connect.search() — re-query the list (the data table refreshes itself automatically — this is for a forced refresh)
+ Add Connection (blue button)/ui/connect/connect Go to the new connection screen

3. OPC List Table (14 Columns)

DataTables renders the /connect/opc/list API result.

#ColumnMeaning / Display
1PLC | ProtocolLogo image per 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) — sort key (default ASC)
4OPC NameUser-defined name
5DescriptionFree-form memo
6PLC IPIP of the PLC the OPC connects to
7PLC PortOPC port (LS 2004, S7 102, MODBUS 502, etc.)
8Collection Intervaltimecycle (ms) — right-aligned, thousands separator
9Auto Start✓ if auto_collect=true, otherwise -
10Async✓ if async=true, otherwise -
11Connected Tag CountNumber of tags registered to this OPC — right-aligned
12Collection CountCumulative read count (point_count) — large numbers are viewable via horizontal scroll
13Collection StatusRound badge — 🟢 Normal (scan_status=START, spinning sync icon) / 🟧 Abnormal (NOT COLLECT, warning triangle) / ⬜ Stopped (STOP, stop icon)
14Actions▶ Start / ⏹ Stop / 🔧 Edit / 🗑 Delete (4 icons)

3.1 Action Icons — In Detail

IconActionCall
Start (fa-play)Start collectionconnect.start(opcId)POST /connect/start
Stop (fa-stop)Stop collection (the TCP connection is kept)connect.stop(opcId)POST /connect/stop
🔧 Edit (fa-wrench)Go to the edit screen for that OPC type (e.g. /ui/connect/ls — branches according to opc_type)connect.edit(opcId&opcType)
🗑 Delete (fa-trash)Confirmation dialog → deletes the OPC together with all its tagsconnect.del(opcId&opcType)
Deletion cannot be undone

Deleting an OPC also removes all tag rows beneath it. The time series data (Cassandra tm_tag_point) remains until the TTL expires, but no new reads will arrive.

3.2 Difference Between Connection Status and Collection Status

Cases where the two statuses differ for the same OPC:

ConnectionCollectionMeaning
🟢 Connected🟢 NormalOperating normally
🟢 Connected🟧 AbnormalThe TCP connection is alive but no read response has arrived for some time — suspect the PLC program, a typo in the address, or permissions
🟢 Connected⬜ StoppedThe user pressed ⏹ Stop
🔴 Disconnected⬜ StoppedNormal not started state
🔴 Disconnected🟧 AbnormalIt ran at one point but the PLC dropped — check IP/port/firewall
⬜ Unknown⬜ StoppedA newly registered OPC that has never been started

4. Row Selection → Tag List

When you click an OPC row:

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

The row selection result is stored in window.__connect_list_selected_opc_id — used as the opc_id parameter for inline tag writes.


5. Tag List Table (14 Columns)

Displays the tags inside the selected OPC. The last value / time / read status are refreshed 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 memo
5Data TypeInteger / Boolean / Float / Long / String, etc.
6PLC AddressAddress per PLC protocol (e.g. D1000, ns=2;s=...)
7PLC Data FormatFormat options (X / B / W / DW / Float, etc. — used for fine-grained read/write branching per driver)
8Calculationformula (fomula) — applies simple arithmetic such as ${VALUE} * 10
9Collection CountCumulative read count — right-aligned
10Last ValueMost recent value — green background + white text. Long text (STRING/array) scrolls horizontally within the cell
11Last Update TimeDark gray background + white text, down to ms
12Read Status🟢 SUCCESS (green) / 🔴 ERROR (red)
13Read Error MessageFilled in only when the status is ERROR — red background + white text
14Actions✏ Write / 🔄 Immediate Read (2 icons)

5.1 Tag Actions — In Detail

✏ Write (fa-pen)

An inline action that writes a value to the 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 according to the PLC protocol (HTTP / OPC-UA / Modbus / MELSEC / S7 / LS / EIP are all supported).

Writing is risky

Verify with a simulator OPC or a test tag before writing to a live equipment tag. Grant write permission only for tags agreed upon with the operations team.

🔄 Immediate Read (fa-sync-alt)

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

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

Useful for manual refresh on PLCs with a long collection interval (e.g. 30 seconds). Frequent use increases PLC load.


6. MOTOR_SENSE-Specific Area

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

6.1 Status Information Area

ItemMeaning
Last Update TimeTimestamp of the most recent data for the MOTOR_SENSE asset
Read StatusSUCCESS / ERROR

6.2 HEALTH INDEX Section

❤ icon + one card per asset — horizontal scroll. Each card shows the asset ID + measured metrics (level, alarm, etc.). Card colors: light blue background + dark blue border.

6.3 SIGNAL Section

📶 icon + one card per asset — horizontal scroll. Time series signal metrics. Card color: light gray.

In both sections, vertical scrolling is blocked and only horizontal scrolling is allowed, so cards can extend sideways indefinitely no matter how many assets there are.


7. Common Pitfalls

SymptomCause / Resolution
The tag table is empty even after clicking a rowNo tags are registered to that OPC. Go into Edit and add tags
Connected but Collection AbnormalCheck the address format / data type (format) / PLC write permission
The last value cell has not refreshed for a long timeThe collection interval (timecycle) is long, or the PLC value does not change — force a read with Immediate Read
A read result differs warning after ✏ WriteThe PLC program overwrote the value itself within 1 second. This may be normal (lockout coil, etc.)
The last value is too long to readA horizontal scrollbar appears automatically in that cell — scroll left/right within the cell
The MOTOR_SENSE cards are emptyAsset discovery has not completed yet (/connect/motor-sense/asset-list not responding) — wait a moment or restart the OPC
Collection Status shows Unknown right after startingThe scan loop has not completed its first cycle yet — wait for timecycle + α
It restarts as Unknown when re-added right after deletionNormal — if auto_collect is on, it automatically transitions to Connected + Normal

8. Learn More