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
| Button | Action |
|---|---|
| ← (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.
| # | Column | Meaning / Display |
|---|---|---|
| 1 | PLC | Protocol | Logo 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 |
| 2 | Connection Status | Round badge — 🟢 Connected / 🔴 Disconnected / ⬜ Unknown (never started) |
| 3 | OPC ID | Unique ID (e.g. OPC_LS_TEST) — sort key (default ASC) |
| 4 | OPC Name | User-defined name |
| 5 | Description | Free-form memo |
| 6 | PLC IP | IP of the PLC the OPC connects to |
| 7 | PLC Port | OPC port (LS 2004, S7 102, MODBUS 502, etc.) |
| 8 | Collection Interval | timecycle (ms) — right-aligned, thousands separator |
| 9 | Auto Start | ✓ if auto_collect=true, otherwise - |
| 10 | Async | ✓ if async=true, otherwise - |
| 11 | Connected Tag Count | Number of tags registered to this OPC — right-aligned |
| 12 | Collection Count | Cumulative read count (point_count) — large numbers are viewable via horizontal scroll |
| 13 | Collection Status | Round badge — 🟢 Normal (scan_status=START, spinning 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 | Call |
|---|---|---|
▶ Start (fa-play) | Start collection | connect.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 tags | connect.del(opcId&opcType) |
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:
| Connection | Collection | Meaning |
|---|---|---|
| 🟢 Connected | 🟢 Normal | Operating normally |
| 🟢 Connected | 🟧 Abnormal | The 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 | ⬜ Stopped | The user pressed ⏹ Stop |
| 🔴 Disconnected | ⬜ Stopped | Normal not started state |
| 🔴 Disconnected | 🟧 Abnormal | It ran at one point but the PLC dropped — check IP/port/firewall |
| ⬜ Unknown | ⬜ Stopped | A newly registered OPC that has never been started |
4. Row Selection → Tag List
When you click an OPC row:
- That row is highlighted with the selected class (other rows are deselected)
connect.tag_list(opcId)is called → the tags of that OPC are fetched and rendered in the tag list table below- If that OPC's
opc_typeisMOTOR_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).
| # | 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 memo |
| 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 options (X / B / W / DW / Float, etc. — used for fine-grained read/write branching per driver) |
| 8 | Calculation | formula (fomula) — applies simple arithmetic such as ${VALUE} * 10 |
| 9 | Collection Count | Cumulative read count — right-aligned |
| 10 | Last Value | Most recent value — green background + white text. Long text (STRING/array) scrolls horizontally within the cell |
| 11 | Last Update Time | Dark gray background + white text, down to ms |
| 12 | Read Status | 🟢 SUCCESS (green) / 🔴 ERROR (red) |
| 13 | Read Error Message | Filled in only when the status is ERROR — red background + white text |
| 14 | Actions | ✏ 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).
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
| Item | Meaning |
|---|---|
| Last Update Time | Timestamp of the most recent data for the MOTOR_SENSE asset |
| Read Status | SUCCESS / 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
| Symptom | Cause / Resolution |
|---|---|
| The tag table is empty even after clicking a row | No tags are registered to that OPC. Go into Edit and add tags |
| Connected but Collection Abnormal | Check the address format / data type (format) / PLC write permission |
| The last value cell has not refreshed for a long time | The collection interval (timecycle) is long, or the PLC value does not change — force a read with Immediate Read |
| A read result differs warning after ✏ Write | The PLC program overwrote the value itself within 1 second. This may be normal (lockout coil, etc.) |
| The last value is too long to read | A horizontal scrollbar appears automatically in that cell — scroll left/right within the cell |
| The MOTOR_SENSE cards are empty | Asset 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 starting | The scan loop has not completed its first cycle yet — wait for timecycle + α |
| It restarts as Unknown when re-added right after deletion | Normal — if auto_collect is on, it automatically transitions to Connected + Normal |
8. Learn More
- Adding a new connection: Add a New PLC Connection
- Registering / editing tags: Tag Registration
- Viewing as time series charts: View Collection History
- Testing/demo: use an external
plantpulse-simulatoror a test tag - Motor Sense: Motor Sense
- Handling the same data in code: REST API, Flow (Node-RED)