接続リストとタグリスト
ゲートウェイが認識しているすべての OPC(接続) リスト と、その中の タグリスト を1つの画面で確認し、開始 / 停止 / 編集 / 削除 / 値の書き込み / 即時読み取りまでをすべて処理する運用の核となる画面です。

ホームカード 接続済みリスト (N) → クリック、または http://<gateway>/ui/connect/list から直接。
1. 画面構成
┌────────────────────────────────────────────────────────────────┐
│ ⊙ 연결 목록 [←] [↻] [+ 연결 추가] │
├────────────────────────────────────────────────────────────────┤
│ [OPC 목록 테이블 — 14개 컬럼] │
│ PLC | 프로토콜 연결상태 OPC ID ... 수집상태 액션 │
│ ───────────────────────────────────────────────────────── │
│ (행 클릭 → 아래 태그 테이블 채워짐 / 행 하이라이트) │
├────────────────────────────────────────────────────────────────┤
│ 선택된 연결의 TAG 목록을 표시합니다 │
│ [태그 목록 테이블 — 14개 컬럼] │
│ ▣ TAG ID TAG 명 ... 마지막 값 업데이트시간 액션 │
└────────────────────────────────────────────────────────────────┘
MOTOR_SENSE プロトコルの OPC を選択すると、タグテーブルの代わりに HEALTH INDEX / SIGNAL カードコンテナ が表示されます (別節参照)。
2. 上部バー — ボタン
| ボタン | 動作 |
|---|---|
| ← (バックスペースアイコン) | /ui/main へ移動 |
| ↻ (sync アイコン) | connect.search() — リスト再取得 (自動更新はデータテーブルが行う — 強制リフレッシュ用) |
| + 接続追加 (青ボタン) | /ui/connect/connect 新規接続追加画面へ移動 |
3. OPC リストテーブル (14 カラム)
/connect/opc/list API 結果を DataTables が描画します。
| # | カラム | 意味 / 表示 |
|---|---|---|
| 1 | PLC | プロトコル | プロトコル別ロゴ画像 — 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 | 接続状態 | ラウンドバッジ — 🟢 接続 / 🔴 切断 / ⬜ 不明(一度も開始していない) |
| 3 | OPC ID | 固有 ID (例: OPC_LS_TEST) — ソート基準 (デフォルト ASC) |
| 4 | OPC 名 | ユーザー定義名 |
| 5 | 説明 | 自由メモ |
| 6 | PLC IP | OPC が接続する PLC の IP |
| 7 | PLC ポート | OPC ポート (LS 2004, S7 102, MODBUS 502 など) |
| 8 | 収集周期 | timecycle (ms) — 右揃え、桁区切りカンマ |
| 9 | 自動開始 | auto_collect=true なら ✓、そうでなければ - |
| 10 | 非同期 | async=true なら ✓、そうでなければ - |
| 11 | 接続済みタグ数 | この OPC に登録されているタグ数 — 右揃え |
| 12 | 収集件数 | 累積 read 件数 (point_count) — 大きな数値は横スクロールで表示 |
| 13 | 収集状態 | ラウンドバッジ — 🟢 正常 (scan_status=START、回転 sync アイコン) / 🟧 異常 (NOT COLLECT、警告三角形) / ⬜ 停止 (STOP、停止アイコン) |
| 14 | アクション | ▶ 開始 / ⏹ 停止 / 🔧 編集 / 🗑 削除 (4 アイコン) |
3.1 アクションアイコン — 詳細
| アイコン | 動作 | 呼び出し |
|---|---|---|
▶ 開始 (fa-play) | 収集開始 | connect.start(opcId) → POST /connect/start |
⏹ 停止 (fa-stop) | 収集停止 (TCP 接続は維持) | connect.stop(opcId) → POST /connect/stop |
🔧 編集 (fa-wrench) | OPC 種類別編集画面へ移動 (例: /ui/connect/ls など opc_type に応じて分岐) | connect.edit(opcId&opcType) |
🗑 削除 (fa-trash) | 確認ダイアログ → OPC + 配下タグを一括削除 | connect.del(opcId&opcType) |
OPC 削除時、その下のタグ row も一緒に消えます。時系列データ (Cassandra tm_tag_point) は TTL 期限切れまで残りますが、新しい read は入ってきません。
3.2 接続状態 と 収集状態 の違い
同じ OPC に対して2つの状態が異なる場合:
| 接続 | 収集 | 意味 |
|---|---|---|
| 🟢 接続 | 🟢 正常 | 正常動作 |
| 🟢 接続 | 🟧 異常 | TCP 接続は生きているが、read 応答が一定時間内に来ない — PLC プログラム / アドレス誤記 / 権限を疑う |
| 🟢 接続 | ⬜ 停止 | ユーザーが ⏹ 停止を押した状態 |
| 🔴 切断 | ⬜ 停止 | 正常な 未開始 状態 |
| 🔴 切断 | 🟧 異常 | 一度動作したが PLC が切断 — IP/ポート/ファイアウォールを点検 |
| ⬜ 不明 | ⬜ 停止 | 登録のみで一度も開始していない新規 OPC |
4. 行選択 → タグリスト
OPC 行クリック時:
- その行が selected クラスでハイライト (他の行は解除)
connect.tag_list(opcId)呼び出し → その OPC のタグを取得し、下の タグリストテーブル に描画- その OPC の
opc_typeがMOTOR_SENSEなら、タグテーブルの代わりに HEALTH INDEX / SIGNAL カードコンテナを表示
行選択結果は
window.__connect_list_selected_opc_idに保存 — タグインライン書き込み時に opc_id パラメータとして使用。
5. タグリストテーブル (14 カラム)
選択された OPC 内のタグを表示。最後の値 / 時間 / read 状態がページ内で 周期的に 更新されます (writejs.value() — 別途ポーリング)。
| # | カラム | 意味 / 表示 |
|---|---|---|
| 1 | (アイコン) | タグアイコン (fa-tag) |
| 2 | TAG ID | 固有 ID (例: TAG_LS_TEST_1000) |
| 3 | TAG 名 | ユーザー定義名 |
| 4 | 説明 | 自由メモ |
| 5 | データタイプ | Integer / Boolean / Float / Long / String など |
| 6 | PLC アドレス | PLC プロトコル別アドレス (例: D1000、ns=2;s=...) |
| 7 | PLC データフォーマット | フォーマットオプション (X / B / W / DW / Float など — ドライバごとの read/write の精密分岐に使用) |
| 8 | 計算 | 計算式 (fomula) — ${VALUE} * 10 のような単純な算術を適用 |
| 9 | 収集件数 | 累積 read 件数 — 右揃え |
| 10 | 最後の値 | 最新の値 — 緑背景 + 白文字。大きなテキスト (STRING/配列) はセルが横スクロール |
| 11 | 最終更新時刻 | 暗いグレー背景 + 白文字、ms まで |
| 12 | 読み取り状態 | 🟢 SUCCESS (緑) / 🔴 ERROR (赤) |
| 13 | 読み取りエラーメッセージ | 状態が ERROR の時のみ表示 — 赤背景 + 白文字 |
| 14 | アクション | ✏ 書き込み / 🔄 即時読み取り (2 アイコン) |
5.1 タグアクション — 詳細
✏ 書き込み (fa-pen)
対象タグに一度値を書き込むインラインアクション。
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 후 화면의 마지막 값 셀도 자동 갱신
内部的に ConnectService.tagWriteByTagId() が PLC プロトコルに応じて分岐 (HTTP / OPC-UA / Modbus / MELSEC / S7 / LS / EIP すべて対応)。
実設備タグへ書き込む前に シミュレーター OPC または テストタグ で検証してください。write 権限は運用チームと合意したタグのみに。
🔄 即時読み取り (fa-sync-alt)
収集キャッシュをバイパスし、PLC から 今 直接 read。
GET /api/v1/tag/<TAG_ID>/value?fresh=true
→ 성공: toastr.info "지금 읽기: <TAG_ID> = <VALUE>"
→ 값 없음: toastr.warning "읽음 (값 없음): <TAG_ID>"
→ 실패: toastr.error "읽기 실패: ..."
収集周期が長い PLC (例: 30秒) での 手動更新 用。頻繁に使用すると PLC 負荷が増えます。
6. MOTOR_SENSE 専用領域
opc_type=MOTOR_SENSE OPC を選択すると、タグテーブルの代わりに以下が表示されます。
6.1 状態情報領域
| 項目 | 意味 |
|---|---|
| 最終更新時刻 | MOTOR_SENSE 資産の最新データ時点 |
| 読み取り状態 | SUCCESS / ERROR |
6.2 HEALTH INDEX セクション
❤ アイコン + 資産別カード — 横スクロール。各カードに資産 ID + 測定指標 (level, alarm など)。カード色: 薄い青背景 + 濃い青ボーダー。
6.3 SIGNAL セクション
📶 アイコン + 資産別カード — 横スクロール。時系列シグナルメトリクス。カード色: 薄いグレー。
両セクションとも、資産が多くてもカードが横に無限に伸びるように 縦 スクロールは防ぎ、横 スクロールのみ許可。
7. よくある落とし穴
| 症状 | 原因 / 解決策 |
|---|---|
| 行クリックしてもタグテーブルが空 | その OPC に登録されたタグがない。編集 から入ってタグ追加 |
| 接続 なのに 収集異常 | アドレス形式 / データタイプ (format) / PLC Write 権限を点検 |
| 最後の値セルがなかなか更新されない | 収集周期 (timecycle) が長い、または PLC が変化しない値 — 即時読み取り で強制 read |
| ✏ 書き込み後 読み取り結果が異なる 警告 | PLC プログラムが1秒以内に自ら上書き。正常な場合あり (lockout コイルなど) |
| 最後の値が長すぎて読みにくい | そのセルに横スクロールバーが自動生成 — セル内で左右スクロール |
| MOTOR_SENSE カードが空 | 資産検索がまだ完了していない (/connect/motor-sense/asset-list 未応答) — 少し待つか OPC 再起動 |
| 開始直後に 収集状態 が 不明 | scan loop がまだ最初のサイクルを回していない — timecycle + α 待つ |
| 削除直後に再度追加すると 不明 で再開始 | 正常 — auto_collect が on なら自動で 接続 + 正常 に移行 |
8. 関連情報
- 新規接続追加: 新しい PLC 接続の追加
- タグ登録 / 編集: タグ登録
- 時系列チャートで表示: 収集履歴の表示
- テスト/デモ: 外部
plantpulse-simulatorまたはテストタグを使用 - モーターセンス: モーターセンス (Motor Sense)
- 同じデータをコードで扱う: REST API, フロー (Node-RED)