Connection List and Tag List
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.

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
| Button | Action |
|---|---|
| ← (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.
| # | Column | Meaning / Display |
|---|---|---|
| 1 | PLC | Protocol | Logo 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 |
| 2 | Connection Status | Round badge — 🟢 Connected / 🔴 Disconnected / ⬜ Unknown (never started) |
| 3 | OPC ID | Unique ID (e.g., OPC_LS_TEST) — sorting key (default ASC) |
| 4 | OPC Name | User-defined name |
| 5 | Description | Free-form note |
| 6 | PLC IP | The PLC IP this OPC connects to |
| 7 | PLC Port | OPC port (e.g., LS 2004, S7 102, MODBUS 502) |
| 8 | Collection Interval | timecycle (ms) — right-aligned, thousands separator |
| 9 | Auto Start | auto_collect=true → ✓, otherwise - |
| 10 | Async | async=true → ✓, otherwise - |
| 11 | Connected Tag Count | Number of tags registered under this OPC — right-aligned |
| 12 | Collected Count | Cumulative read count (point_count) — large numbers visible via horizontal scroll |
| 13 | Collection Status | Round badge — 🟢 Normal (scan_status=START, rotating sync icon) / 🟧 Abnormal (NOT COLLECT, warning triangle) / ⬜ Stopped (STOP, stop icon) |
| 14 | Actions | ▶ Start / ⏹ Stop / 🔧 Edit / 🗑 Delete (4 icons) |
3.1 Action Icons — In Detail
| Icon | Action | Invocation |
|---|---|---|
▶ Start (fa-play) | Start collection | connect.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 tags | connect.del(opcId&opcType) |
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:
| Connection | Collection | Meaning |
|---|---|---|
| 🟢 Connected | 🟢 Normal | Operating correctly |
| 🟢 Connected | 🟧 Abnormal | TCP connection is alive but read responses aren't arriving within a set time — suspect PLC program / address typo / permissions |
| 🟢 Connected | ⬜ Stopped | User has pressed ⏹ Stop |
| 🔴 Disconnected | ⬜ Stopped | Normal never started state |
| 🔴 Disconnected | 🟧 Abnormal | Ran once but the PLC has dropped — check IP/port/firewall |
| ⬜ Unknown | ⬜ Stopped | New OPC registered but never started |
4. Row Selection → Tag List
When you click an OPC row:
- That row is highlighted with the selected class (other rows deselected)
connect.tag_list(opcId)is invoked → fetches that OPC's tags and renders them in the tag list table below- If that OPC's
opc_typeisMOTOR_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).
| # | Column | Meaning / Display |
|---|---|---|
| 1 | (icon) | Tag icon (fa-tag) |
| 2 | TAG ID | Unique ID (e.g., TAG_LS_TEST_1000) |
| 3 | TAG Name | User-defined name |
| 4 | Description | Free-form note |
| 5 | Data Type | Integer / Boolean / Float / Long / String, etc. |
| 6 | PLC Address | Address per PLC protocol (e.g., D1000, ns=2;s=...) |
| 7 | PLC Data Format | Format option (X / B / W / DW / Float, etc. — used for precise read/write branching per driver) |
| 8 | Calculation | Formula (fomula) — simple arithmetic applied, as in ${VALUE} * 10 |
| 9 | Collected Count | Cumulative read count — right-aligned |
| 10 | Last Value | Recent value — green background with white text. Large text (STRING/array) scrolls horizontally within the cell |
| 11 | Last Update Time | Dark gray background with white text, down to ms |
| 12 | Read Status | 🟢 SUCCESS (green) / 🔴 ERROR (red) |
| 13 | Read Error Message | Only populated when the status is ERROR — red background with white text |
| 14 | Actions | ✏ 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).
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
| Item | Meaning |
|---|---|
| Last Update Time | The most recent data timestamp for the MOTOR_SENSE asset |
| Read Status | SUCCESS / 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
| Symptom | Cause / Resolution |
|---|---|
| Tag table is empty when the row is clicked | No tags registered for that OPC. Go to Edit and add tags |
| Connected but Collection Abnormal | Check address format / data type (format) / PLC write permissions |
| Last value cell hasn't updated for a long time | Collection interval (timecycle) is long, or the PLC value isn't changing — force a read with Immediate Read |
| Read result differs warning after ✏ Write | The PLC program may be overwriting it within 1 second. This can be normal (e.g., lockout coils) |
| Last value too long to read | The cell automatically gets a horizontal scrollbar — scroll left/right within the cell |
| MOTOR_SENSE cards are empty | Asset 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 start | The scan loop hasn't completed its first cycle yet — wait for timecycle + α |
| Re-adding after deletion starts again as Unknown | Normal — if auto_collect is on, it automatically transitions to Connected + Normal |
8. Learn More
- Adding a new connection: Add a New PLC Connection
- Tag registration / editing: Tag Registration
- Viewing as a time series chart: View Collection History
- Testing/demo: Use an external
plantpulse-simulatoror a test tag - MotorSense: Motor Sense
- Working with the same data via code: REST API, Flow (Node-RED)