连接列表 / 标签列表 (/ui/connect/list) — 列 / 操作完全指南
在同一画面中查看网关已知的全部 OPC(连接)列表 及其中的 标签列表 —— 并完成启动 / 停止 / 编辑 / 删除 / 写值 / 立即读取的全部操作,是运维的核心画面。
主页卡片 已连接列表 (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 | 协议 | 各协议的 logo 图片 — 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)— 排序基准(default 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 时,其下的标签行会一并消失。时序数据(Cassandra tm_tag_point) 在 TTL 到期前仍会保留,但不会再有新的 read 写入。
3.2 连接状态 与 采集状态 的区别
同一 OPC 上两种状态不一致的情形:
| 连接 | 采集 | 含义 |
|---|---|---|
| 🟢 已连接 | 🟢 正常 | 运行正常 |
| 🟢 已连接 | 🟧 异常 | 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 读取。
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)