点位检索 (/ui/point) — 时序数据查询
按时间范围查询特定标签的已采集时序数据,并将结果以表格 / CSV 形式下载的界面。适用于操作员快速执行诸如确认昨天 09 时 ~ 11 时之间 PLC 值是否处于正常范围之类的巡检。
点击左侧边栏的数据库图标(fa-database)→ 或直接访问 http://<gateway>/ui/point。
1. 界面结构
┌────────────────────────────────────────────────────────────────┐
│ ⊙ 포인트 검색 — 시계열 데이터 조회 · TM_TAG_POINT [←] [↻] │
├────────────────────┬───────────────────────────────────────────┤
│ [검색 조건] │ [포인트 목록 — 최신 순] [CSV 다운로드] │
│ ─ 검색 기간 │ ┌──────────────────────────────────────┐ │
│ ─ OPC ID * │ │ 시각 │ 태그 ID │ 값 │ 타입 │ 품질 │ 에러 │ │
│ ─ 태그 ID * │ └──────────────────────────────────────┘ │
│ [검색] │ … │
└────────────────────┴───────────────────────────────────────────┘
左侧面板宽度比标准的 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字母升序排序 - 标签格式:
OPC_ID (OPC_NAME)— 若 name 为空则仅显示OPC_ID - 更改选择后,下方的标签 ID 下拉框会重新加载该 OPC 所属的标签
3.3 标签 ID(必填)
- 选择 OPC 前:
disabled+ 提示选项 — 选择 OPC 后加载 — - 选择 OPC 后以
POST /connect/tag/list { opc_id }的结果填充 — 按tag_id升序排序 - 标签格式:
TAG_ID (TAG_NAME)— 若 name 为空则仅显示TAG_ID - 加载失败时显示 — 加载失败 — 选项 + 弹出错误提示
未选择标签就点击检索时
将弹出 "请先选择 OPC 与标签。" 模态框(bootbox alert) — 这是防止因无数据而返回空结果、白白浪费时间的保护措施。
4. 结果表格(6 列)
由 DataTables 渲染 GET /point/search 的响应。默认排序为时刻 desc(从最新开始)。
| # | 列 | 宽度 | 排序 | 显示 / 含义 |
|---|---|---|---|---|
| 1 | 时刻 | 180px | 默认 desc | timestamp.iso 或原始 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()。
- 本地 export — 将最后一次检索结果(
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)聚簇 — 短时间范围的检索较快。一次性拉取一个月以上的数据可能导致响应变慢,建议以数十分钟 ~ 数小时为单位检索。
7. 运维技巧
- 异常值追踪:将报警发生的时刻纳入检索期间并查询该标签 — 可发现突发 spike / 0 值 / quality 变化
- PLC 通信中断:若同一标签的错误列在一段时间内持续显示红色代码,即为 PLC 响应失败区间 — 可在
/ui/connect/list中与采集状态交叉确认 - CSV 后用 Excel:在 Excel/LibreOffice 中打开下载的 CSV,用值列绘制趋势图即可快速可视化 — 正式图表请使用实时值查看或标签值趋势查看
8. 相关文档
- 实时值查看 (
/ui/connect/tag-view) — 单个标签 1 秒轮询 + 实时图表 - 采集历史查看
- REST API —
GET /api/v1/tag/{tag_id}/value— 使用 X-API-Key 从外部系统直接查询相同数据