メインコンテンツまでスキップ

CSV一括アップロード

複数のOPC + タグを一括で登録する画面。Excelや外部ツールで定義したタグカタログをそのままインポート。50+タグサイトで最速の方法。

ホーム → プロトコル接続 → 右上の 📥 CSV一括アップロード、または直接 /ui/connect/csv。


1. 画面構成​

📥 CSV 일괄 업로드 [← 뒤로] [💾 업로드]

⚠ 주의사항 패널 (빨강)
- CSV 형식 [,로 구분]
- 빈 공백 금지
- 1행 = 헤더 (절대 삭제 금지)
- OPC: 드라이버명/IP/포트 정확히
- TAG: PLC_ADDRESS 정확히 (잘못 입력 시 수집 실패)
- 이미 등록된 TAG_ID → 업데이트 안 함 (중복 무시)

📊 OPC
────────────────
[CodeMirror 에디터 — 150px]
헤더: OPC_ID,OPC_NAME,OPC_TYPE,OPC_AGENT_IP,OPC_AGENT_PORT,TIMECYCLE,ASYNC,AUTO_COLLECT,DESCRIPTION

🏷 TAG
────────────────
[CodeMirror 에디터 — 400px]
헤더: OPC_ID,TAG_ID,TAG_NAME,DATA_TYPE,PLC_ADDRESS,FORMAT,LINKED_ASSET_ID,ALIAS_NAME,DESCRIPTION

2. OPC CSV カラム (9個)​

順序カラム意味例
1OPC_ID一意の識別子 (英字/数字/_)OPC_LS_LINE1
2OPC_NAMEユーザー表示名라인1 LS PLC
3OPC_TYPEゲートウェイコード (LS / MELSEC / S7 / MODBUS / OPCUA / EIP / LOGIX / HTTP など)LS
4OPC_AGENT_IPPLCのIP192.168.100.50
5OPC_AGENT_PORTTCPポート2004
6TIMECYCLE収集周期(ms)1000
7ASYNC非同期readtrue / false
8AUTO_COLLECTブート後自動収集開始true / false
9DESCRIPTION自由メモ라인1 메인 PLC

OPC_TYPE別のポート / IP 表は PLC種類別ガイド の比較表を参照。


3. TAG CSV カラム (9個)​

順序カラム意味例
1OPC_ID上記OPC表の OPC_ID とマッチングOPC_LS_LINE1
2TAG_ID一意ID (英字/数字/_)TAG_LINE1_TEMP
3TAG_NAMEユーザー表示名라인1 온도
4DATA_TYPEInteger / Long / Float / Double / String / BooleanInteger
5PLC_ADDRESSドライバ別アドレス (例: D00309 LS, DB1.DBW0 S7, holding-register:1 Modbus)D00309
6FORMAT形式補助 (DW / REAL / STR[10] / BIN[3] など)DW
7LINKED_ASSET_ID(任意) アセットマッピングASSET_PUMP_01
8ALIAS_NAME(任意) 外部システム用エイリアスtemp_01
9DESCRIPTION自由メモ라인1 메인 펌프 온도(℃)

PLC_ADDRESS と FORMAT の正確な入力は PLCアドレス入力 (44ドライバ完全ガイド) を参照。


4. 作成例 (実践)​

4.1 OPC 2個 + TAG 5個​

OPC領域 (ヘッダー + 2行):

OPC_ID,OPC_NAME,OPC_TYPE,OPC_AGENT_IP,OPC_AGENT_PORT,TIMECYCLE,ASYNC,AUTO_COLLECT,DESCRIPTION
OPC_LS_LINE1,라인1 LS PLC,LS,192.168.100.50,2004,1000,false,true,라인1 메인 PLC
OPC_S7_LINE2,라인2 S7 PLC,S7,192.168.100.60,102,1000,false,true,라인2 메인 PLC

TAG領域 (ヘッダー + 5行):

OPC_ID,TAG_ID,TAG_NAME,DATA_TYPE,PLC_ADDRESS,FORMAT,LINKED_ASSET_ID,ALIAS_NAME,DESCRIPTION
OPC_LS_LINE1,TAG_LINE1_TEMP,라인1 온도,Float,D00450,REAL,,,라인1 메인 펌프 온도(℃)
OPC_LS_LINE1,TAG_LINE1_QTY,라인1 누적생산량,Integer,D00600,DW,,,32-bit 누적
OPC_LS_LINE1,TAG_LINE1_RUN,라인1 가동상태,Boolean,M02704,,,,
OPC_S7_LINE2,TAG_LINE2_PRESS,라인2 압력,Float,DB1.DBD0,REAL,,,bar
OPC_S7_LINE2,TAG_LINE2_FAULT,라인2 알람,Boolean,DB1.DBX2.0,,,,

,,, は空のカラム — LINKED_ASSET_ID, ALIAS_NAME 未使用。

4.2 Excelで作成する​

  1. Excelに上記の表をそのまま貼り付け (ヘッダー1行 + データ)
  2. 名前を付けて保存 → CSV UTF-8 (カンマ区切り) 形式 (default cp949 韓国語文字化け注意)
  3. CSVファイルをテキストエディタで開き、セル内のカンマが自動引用( "...")されているか確認
  4. CSV本文をそのまま OPC 領域または TAG 領域に貼り付け

5. アップロードフロー​

ステップ動作
1. 💾 アップロード クリックPOST /connect/csv-upload (body: {opcs, tags} の2つのテキスト)
2. サーバー検証ヘッダー / カラム数 / 型 / OPC_ID マッチング検証
3. DB登録pe.app_opc + pe.app_tag upsert (既存のTAG_ID は更新しない — skip)
4. トースト"サーバーを再起動すると、登録されたOPC接続とタグ生成を開始します。"

アップロード後 — ゲートウェイキャッシュ (OPCAndTagsCache) が新しいOPC/タグを読み込むように再起動推奨 (bin/restart-app.sh, 30〜90秒)。自動開始 (AUTO_COLLECT=true) で登録したOPC は再起動後すぐに収集開始。


6. よくある落とし穴​

症状原因 / 解決
アップロード後 0件ヘッダー欠落 / カラム数不一致 / エンコーディング (UTF-8 BOM)
韓国語文字化けExcel default cp949 保存。UTF-8 強制 — 名前を付けて保存 → CSV UTF-8
同じTAG_ID が更新されない正常動作 — 重複TAG_ID は skip。変更するには タグ登録 画面または REST PUT /api/v1/tag/{tagId} で
OPC登録はできたがタグが見えないTAG CSVの OPC_ID が OPC CSVの OPC_ID と正確に一致しない。大文字小文字 / 空白
ASYNC, AUTO_COLLECT が false として処理されるTrue / TRUE はOK だが、空セルなら false。明示的に true を入力
PLC_ADDRESS カラムが空のまま登録されるCSVのセル内カンマが行を分断している。セル内にカンマがある場合は "..." で引用
行末の空白 (trailing space) → カラム不一致Excel → CSV変換時にtrailing space が追加されることがある。テキストエディタで一括trim
アップロードは成功したがチャートに値が入らないOPC AUTO_COLLECT=false で登録したのに再起動後に開始を押していない。/ui/connect/list の ▶ 開始

7. さらに詳しく​