Verbindungsliste / Tag-Liste (/ui/connect/list) — Vollständiger Leitfaden zu Spalten und Aktionen
Zentraler Betriebsbildschirm, auf dem alle dem Gateway bekannten OPC-(Verbindungs-)Listen und die darin enthaltenen Tag-Listen in einer Ansicht dargestellt werden — inklusive Start / Stopp / Bearbeiten / Löschen / Werte schreiben / Sofortlesen.
Über die Startkarte Verbundene Liste (N) → anklicken, oder direkt http://<gateway>/ui/connect/list.
1. Aufbau der Ansicht
┌────────────────────────────────────────────────────────────────┐
│ ⊙ 연결 목록 [←] [↻] [+ 연결 추가] │
├────────────────────────────────────────────────────────────────┤
│ [OPC 목록 테이블 — 14개 컬럼] │
│ PLC | 프로토콜 연결상태 OPC ID ... 수집상태 액션 │
│ ───────────────────────────────────────────────────────── │
│ (행 클릭 → 아래 태그 테이블 채워짐 / 행 하이라이트) │
├────────────────────────────────────────────────────────────────┤
│ 선택된 연결의 TAG 목록을 표시합니다 │
│ [태그 목록 테이블 — 14개 컬럼] │
│ ▣ TAG ID TAG 명 ... 마지막 값 업데이트시간 액션 │
└────────────────────────────────────────────────────────────────┘
Wird ein OPC mit dem Protokoll MOTOR_SENSE ausgewählt, erscheint anstelle der Tag-Tabelle ein HEALTH INDEX / SIGNAL Karten-Container (siehe eigener Abschnitt).
2. Obere Leiste — Schaltflächen
| Schaltfläche | Funktion |
|---|---|
| ← (Backspace-Symbol) | Wechsel zu /ui/main |
| ↻ (Sync-Symbol) | connect.search() — Liste erneut abfragen (die automatische Aktualisierung übernimmt die DataTable — dies dient dem erzwungenen Neuladen) |
| + Verbindung hinzufügen (blaue Schaltfläche) | /ui/connect/connect Wechsel zur Ansicht für das Anlegen einer neuen Verbindung |
3. OPC-Listentabelle (14 Spalten)
Die Ergebnisse der /connect/opc/list API werden von DataTables gerendert.
| # | Spalte | Bedeutung / Anzeige |
|---|---|---|
| 1 | PLC | Protokoll | Logobild je Protokoll — 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 | Verbindungsstatus | Abgerundetes Badge — 🟢 Verbunden / 🔴 Getrennt / ⬜ Unbekannt (noch nie gestartet) |
| 3 | OPC ID | Eindeutige ID (z. B. OPC_LS_TEST) — Sortierkriterium (Standard ASC) |
| 4 | OPC-Name | Benutzerdefinierter Name |
| 5 | Beschreibung | Freie Notiz |
| 6 | PLC IP | IP der SPS, mit der sich das OPC verbindet |
| 7 | PLC-Port | OPC-Port (LS 2004, S7 102, MODBUS 502 usw.) |
| 8 | Erfassungsintervall | timecycle (ms) — rechtsbündig, Tausendertrennzeichen |
| 9 | Autostart | Bei auto_collect=true ✓, sonst - |
| 10 | Asynchron | Bei async=true ✓, sonst - |
| 11 | Anzahl verbundener Tags | Anzahl der für dieses OPC registrierten Tags — rechtsbündig |
| 12 | Erfassungsanzahl | Kumulierte Anzahl der Lesevorgänge (point_count) — große Zahlen werden per horizontalem Scrollen sichtbar |
| 13 | Erfassungsstatus | Abgerundetes Badge — 🟢 Normal (scan_status=START, rotierendes Sync-Symbol) / 🟧 Störung (NOT COLLECT, Warndreieck) / ⬜ Gestoppt (STOP, Stopp-Symbol) |
| 14 | Aktionen | ▶ Start / ⏹ Stopp / 🔧 Bearbeiten / 🗑 Löschen (4 Symbole) |
3.1 Aktionssymbole — im Detail
| Symbol | Funktion | Aufruf |
|---|---|---|
▶ Start (fa-play) | Erfassung starten | connect.start(opcId) → POST /connect/start |
⏹ Stopp (fa-stop) | Erfassung stoppen (TCP-Verbindung bleibt bestehen) | connect.stop(opcId) → POST /connect/stop |
🔧 Bearbeiten (fa-wrench) | Wechsel zur Bearbeitungsansicht je OPC-Typ (z. B. /ui/connect/ls usw., Verzweigung gemäß opc_type) | connect.edit(opcId&opcType) |
🗑 Löschen (fa-trash) | Bestätigungsdialog → OPC + untergeordnete Tags werden gesammelt gelöscht | connect.del(opcId&opcType) |
Beim Löschen eines OPC verschwinden auch die darunterliegenden Tag-Zeilen. Die Zeitreihendaten (Cassandra tm_tag_point) bleiben bis zum Ablauf der TTL erhalten, es kommen jedoch keine neuen Lesewerte mehr hinzu.
3.2 Unterschied zwischen Verbindungsstatus und Erfassungsstatus
Fälle, in denen beide Zustände für dasselbe OPC voneinander abweichen:
| Verbindung | Erfassung | Bedeutung |
|---|---|---|
| 🟢 Verbunden | 🟢 Normal | Normalbetrieb |
| 🟢 Verbunden | 🟧 Störung | TCP-Verbindung besteht, aber innerhalb einer bestimmten Zeit kommt keine Leseantwort — SPS-Programm / Tippfehler in der Adresse / Berechtigungen prüfen |
| 🟢 Verbunden | ⬜ Gestoppt | Benutzer hat ⏹ Stopp gedrückt |
| 🔴 Getrennt | ⬜ Gestoppt | Normaler Zustand nicht gestartet |
| 🔴 Getrennt | 🟧 Störung | Lief einmal, die SPS hat die Verbindung aber getrennt — IP/Port/Firewall prüfen |
| ⬜ Unbekannt | ⬜ Gestoppt | Neues OPC, nur registriert und noch nie gestartet |
4. Zeilenauswahl → Tag-Liste
Beim Klick auf eine OPC-Zeile:
- Die Zeile wird mit der Klasse selected hervorgehoben (andere Zeilen werden abgewählt)
- Aufruf von
connect.tag_list(opcId)→ die Tags dieses OPC werden geladen und in der unteren Tag-Listentabelle dargestellt - Ist
opc_typedieses OPC gleichMOTOR_SENSE, wird anstelle der Tag-Tabelle der HEALTH INDEX / SIGNAL Karten-Container angezeigt
Das Ergebnis der Zeilenauswahl wird in
window.__connect_list_selected_opc_idgespeichert — beim Inline-Schreiben eines Tags wird es als Parameter opc_id verwendet.
5. Tag-Listentabelle (14 Spalten)
Zeigt die Tags innerhalb des ausgewählten OPC. Letzter Wert / Zeitstempel / Lesestatus werden innerhalb der Seite periodisch aktualisiert (writejs.value() — separates Polling).
| # | Spalte | Bedeutung / Anzeige |
|---|---|---|
| 1 | (Symbol) | Tag-Symbol (fa-tag) |
| 2 | TAG ID | Eindeutige ID (z. B. TAG_LS_TEST_1000) |
| 3 | TAG-Name | Benutzerdefinierter Name |
| 4 | Beschreibung | Freie Notiz |
| 5 | Datentyp | Integer / Boolean / Float / Long / String usw. |
| 6 | PLC-Adresse | Adresse je SPS-Protokoll (z. B. D1000, ns=2;s=...) |
| 7 | PLC-Datenformat | Formatoptionen (X / B / W / DW / Float usw. — dienen der genauen Verzweigung von Lese-/Schreibvorgängen je Treiber) |
| 8 | Berechnung | Formel (fomula) — einfache Arithmetik wie ${VALUE} * 10 wird angewendet |
| 9 | Erfassungsanzahl | Kumulierte Anzahl der Lesevorgänge — rechtsbündig |
| 10 | Letzter Wert | Aktuellster Wert — grüner Hintergrund + weiße Schrift. Bei langem Text (STRING/Array) scrollt die Zelle horizontal |
| 11 | Zeitpunkt der letzten Aktualisierung | Dunkelgrauer Hintergrund + weiße Schrift, mit Millisekunden |
| 12 | Lesestatus | 🟢 SUCCESS (grün) / 🔴 ERROR (rot) |
| 13 | Lesefehlermeldung | Nur bei Status ERROR gefüllt — roter Hintergrund + weiße Schrift |
| 14 | Aktionen | ✏ Schreiben / 🔄 Sofortlesen (2 Symbole) |
5.1 Tag-Aktionen — im Detail
✏ Schreiben (fa-pen)
Inline-Aktion, die einmalig einen Wert auf das jeweilige Tag schreibt.
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 후 화면의 마지막 값 셀도 자동 갱신
Intern verzweigt ConnectService.tagWriteByTagId() je nach SPS-Protokoll (HTTP / OPC-UA / Modbus / MELSEC / S7 / LS / EIP werden alle unterstützt).
Prüfen Sie den Schreibvorgang vor dem Einsatz an Tags realer Anlagen mit einem Simulator-OPC oder einem Test-Tag. Schreibrechte nur für Tags, die mit dem Betriebsteam abgestimmt sind.
🔄 Sofortlesen (fa-sync-alt)
Umgeht den Cache des Erfassungsmoduls und liest jetzt direkt aus der SPS.
GET /api/v1/tag/<TAG_ID>/value?fresh=true
→ 성공: toastr.info "지금 읽기: <TAG_ID> = <VALUE>"
→ 값 없음: toastr.warning "읽음 (값 없음): <TAG_ID>"
→ 실패: toastr.error "읽기 실패: ..."
Gedacht für die manuelle Aktualisierung bei SPS mit langem Erfassungsintervall (z. B. 30 Sekunden). Häufige Nutzung erhöht die Last der SPS.
6. Bereich exklusiv für MOTOR_SENSE
Bei Auswahl eines opc_type=MOTOR_SENSE OPC wird anstelle der Tag-Tabelle Folgendes angezeigt.
6.1 Bereich Statusinformationen
| Element | Bedeutung |
|---|---|
| Zeitpunkt der letzten Aktualisierung | Zeitpunkt der aktuellsten Daten des MOTOR_SENSE-Assets |
| Lesestatus | SUCCESS / ERROR |
6.2 Abschnitt HEALTH INDEX
❤ Symbol + Karten je Asset — horizontal scrollbar. Jede Karte enthält die Asset-ID + Messgrößen (level, alarm usw.). Kartenfarbe: hellblauer Hintergrund + dunkelblauer Rahmen.
6.3 Abschnitt SIGNAL
📶 Symbol + Karten je Asset — horizontal scrollbar. Zeitreihen-Signalmetriken. Kartenfarbe: hellgrau.
In beiden Abschnitten ist vertikales Scrollen gesperrt und nur horizontales Scrollen erlaubt, damit sich die Karten auch bei vielen Assets beliebig weit nach rechts erstrecken können.
7. Häufige Stolperfallen
| Symptom | Ursache / Lösung |
|---|---|
| Tag-Tabelle bleibt nach Zeilenklick leer | Für dieses OPC sind keine Tags registriert. Über Bearbeiten öffnen und Tags hinzufügen |
| Verbunden, aber Erfassungsstörung | Adressformat / Datentyp (format) / SPS-Schreibrechte prüfen |
| Zelle „Letzter Wert" wird lange nicht aktualisiert | Erfassungsintervall (timecycle) ist lang oder der Wert in der SPS ändert sich nicht — mit Sofortlesen einen Lesevorgang erzwingen |
| Warnung Leseergebnis weicht ab nach ✏ Schreiben | Das SPS-Programm überschreibt den Wert innerhalb einer Sekunde selbst. Kann normal sein (z. B. Lockout-Spulen) |
| Letzter Wert zu lang und schlecht lesbar | In der Zelle erscheint automatisch eine horizontale Scrollleiste — innerhalb der Zelle nach links/rechts scrollen |
| MOTOR_SENSE-Karten sind leer | Die Asset-Suche ist noch nicht abgeschlossen (/connect/motor-sense/asset-list antwortet nicht) — kurz warten oder OPC neu starten |
| Erfassungsstatus direkt nach dem Start Unbekannt | Die Scan-Loop hat den ersten Zyklus noch nicht durchlaufen — timecycle + α abwarten |
| Nach Löschen und erneutem Hinzufügen startet es wieder als Unbekannt | Normal — ist auto_collect aktiviert, wechselt der Status automatisch zu Verbunden + Normal |
8. Weiterführende Informationen
- Neue Verbindung hinzufügen: Neue SPS-Verbindung hinzufügen
- Tags registrieren / bearbeiten: Tag registrieren
- Als Zeitreihendiagramm anzeigen: Erfassungshistorie anzeigen
- Test/Demo: externes
plantpulse-simulatoroder Test-Tag verwenden - Motor Sense: Motor Sense
- Dieselben Daten per Code verarbeiten: REST API, Flow (Node-RED)