ポイント検索
特定タグの収集された時系列データを期間で照会し、結果を表 / CSVでダウンロードする画面です。オペレーターが昨日の9時〜11時の間、PLC値が正常範囲だったかといった点検を素早く行う際に使用します。

トップバーのデータベースアイコン(fa-database、左から6番目) → クリック、または直接 http://<gateway>/ui/point。
1. 画面構成
┌────────────────────────────────────────────────────────────────┐
│ ⊙ 포인트 검색 — 시계열 데이터 조회 · TM_TAG_POINT [←] [↻] │
├────────────────────┬───────────────────────────────────────────┤
│ [검색 조건] │ [포인트 목록 — 최신 순] [CSV 다운로드] │
│ ─ 검색 기간 │ ┌──────────────────────────────────────┐ │
│ ─ OPC ID * │ │ 시각 │ 태그 ID │ 값 │ 타입 │ 품질 │ 에러 │ │
│ ─ 태그 ID * │ └──────────────────────────────────────┘ │
│ [검색] │ … │
└────────────────────┴───────────────────────────────────────────┘
左パネルのwidthは標準の col-md-2 より+50px広くして、ラベル/コンボボックスの切れを防止します。
2. 上部バー
| ボタン | 動作 |
|---|---|
← (fa-arrow-left) | /ui/main に戻る |
↻ (fa-sync) | point.search() を再呼び出し (既存条件を維持、更新用) |
3. 検索条件 (左パネル)
3.1 検索期間 (s_date_range)
- daterangepicker ベース — 形式
YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm - 画面表示時は直近1時間が自動設定されます (
moment().subtract(1, 'hours')〜moment()) - クリック → カレンダー + 時間選択ポップアップ
3.2 OPC ID (必須)
POST /connect/opc/listの結果でコンボボックスを充填 —opc_idアルファベットASC整列- ラベル形式:
OPC_ID (OPC_NAME)— nameが空の場合はOPC_IDのみ表示 - 選択を変更すると、下のタグIDコンボがそのOPC所属タグで再ロードされます
3.3 タグID (必須)
- OPC選択前:
disabled+ 案内オプション — OPC選択後にロード — - OPC選択後
POST /connect/tag/list { opc_id }の結果で充填 —tag_idASC整列 - ラベル形式:
TAG_ID (TAG_NAME)— nameが空の場合はTAG_IDのみ - ロード失敗時 — ロード失敗 — オプション表示 + トーストエラー
タグを選ばずに検索を押すと
「OPCとタグを先に選択してください。」 モーダルが表示されます (bootbox alert) — データ不足による空結果と時間の浪費を防ぐガードです。
4. 結果テーブル (6カラム)
GET /point/search 応答を DataTables が描画します。デフォルトソートは時刻 desc (最新から)。
| # | カラム | 幅 | ソート | 表示 / 意味 |
|---|---|---|---|---|
| 1 | 時刻 | 180px | desc default | timestamp.iso または raw timestamp — 中央揃え |
| 2 | タグID | 180px | — | 検索したタグID — 中央揃え |
| 3 | 値 | * (可変) | — | タイプによってソートが異なります — integer/long/float/double は右揃え、boolean/string などは中央 (UI-DESIGNの表値整列ルール) — 太字 |
| 4 | タイプ | 100px | — | formatTypeBadge() で作成した色バッジ (例: STRING / INT / DOUBLE / BOOL) |
| 5 | 品質 | 70px | — | OPC quality code (例: 192=Good)。空の場合は空欄 |
| 6 | エラー | 70px | — | error_code が0/nullの場合は — (グレー)、それ以外は赤コード表示 |
ページ長: 10 / 20 / 50 / 100 / 1000 — デフォルト100。韓国語インターフェース (Korean.json)。
5. CSVダウンロード
右上のCSVダウンロードボタン — point.csv() 呼び出し。
- ローカルエクスポート — 最後の検索結果 (
point._lastData) をクライアント側でCSVに変換 → 即時ダウンロード。サーバー追加呼び出しなし - ファイル名:
point_<TAG_ID>_<TIMESTAMP>.csv形式 (例:point_TAG_LS_XBC_0001_20260510_1530.csv) - カラム: 時刻 / タグID / 値 / タイプ / 品質 / エラー — UI表と同じ
検索結果がないのにCSVを押すと
「先に検索してください。」 案内モーダル — 空CSVの発行を防止。
6. データ出所
画面が照会するバックエンドフロー:
PLC → Collector → PointProcessor → Cassandra: tm_tag_point (TTL = edge.ttl 일)
↑
/point/search?tag_id&from&to
- TTL が切れたデータはもはや照会されません。
app.propertiesのedge.ttlデフォルト30日。 tm_tag_pointのrowは(tag_id, time_bucket, time)クラスタリング — 短い期間の検索は高速です。1ヶ月以上を一度に取得すると応答が遅くなる可能性があるため数十分〜数時間単位を推奨。
7. 運用ヒント
- 異常値追跡: アラームが出た時刻を検索期間に設定してそのタグを照会 — 突然のスパイク / 0値 / 品質変化が見えます
- PLC通信断: 同タグのエラーカラムが一定時間赤コードで埋まっている場合、PLC応答失敗区間 —
/ui/connect/listで収集状態と相互確認 - CSV後Excel: ダウンロードしたCSVをExcel/LibreOfficeで開き、値カラムでトレンドチャートを描くと高速な可視化 — 本格的なチャートはリアルタイム値表示またはタグ値推移表示を利用
8. 関連ドキュメント
- リアルタイム値表示 (
/ui/connect/tag-view) — 単一タグを1秒ポーリング + ライブチャート - 収集履歴表示
- REST API —
GET /api/v1/tag/{tag_id}/value— X-API-Key で外部システムから同一データを直接照会