跳到主要内容

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异步读取true / 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(逗号分隔) 格式(默认 cp949 可能乱码,请注意)
  3. 用文本编辑器打开 CSV 文件,确认单元格内的逗号是否已自动加引号("...")
  4. 将 CSV 正文原样粘贴到 OPC 区域或 TAG 区域

5. 上传流程​

步骤操作
1. 点击 💾 上传POST /connect/csv-upload(body: {opcs, tags} 两个文本)
2. 服务器验证验证表头 / 列数 / 类型 / OPC_ID 匹配
3. 数据库注册pe.app_opc + pe.app_tag upsert(已存在的 TAG_ID 则不更新 —— 跳过)
4. Toast 提示"重启服务器后,将开始创建您注册的 OPC 连接和标签。"

上传后 —— 建议重启,以便网关缓存(OPCAndTagsCache)读取新的 OPC/标签(bin/restart-app.sh,30~90 秒)。通过自动启动(AUTO_COLLECT=true)注册的 OPC 在重启后立即开始采集。


6. 常见陷阱​

症状原因 / 解决方法
上传后 0 条缺少表头 / 列数不一致 / 编码(UTF-8 BOM)
中文乱码Excel 默认 cp949 存储。强制 UTF-8 —— 另存为 → CSV UTF-8
相同的 TAG_ID 未更新正常行为 —— 重复的 TAG_ID 会跳过。如需更改,请先使用 标签注册 界面或 REST PUT /api/v1/tag/{tagId}
OPC 注册成功但看不到 TAGTAG CSV 中的 OPC_ID 与 OPC CSV 中的 OPC_ID 不完全匹配。注意大小写 / 空格
ASYNC、AUTO_COLLECT 被处理为 falseTrue / TRUE 都可行,但若单元格为空则为 false。请显式输入 true
PLC_ADDRESS 列为空注册CSV 中的 单元格内逗号 导致换行。若单元格内有逗号,请用 "..." 引起来
行尾空格(trailing space)→ 列不匹配Excel 转 CSV 时可能添加尾随空格。请在文本编辑器中统一 trim
上传成功但图表无值使用 OPC AUTO_COLLECT=false 注册,但重启后未点击启动。请按 /ui/connect/list 的 ▶ 启动

7. 了解更多​