趋势图
监控表只能看瞬时值,想看变化过程要用趋势图。适合调 PID、分析抖动、查问题。

新建趋势
项目浏览器 → 趋势 → 新建,进入趋势配置页:
- 点 添加变量,选要画曲线的变量(支持多个)
- 设置采样周期(10ms / 100ms / 1s)
- 设置数据保留时长(1 分钟 / 1 小时 / 1 天)
- 选择显示方式(线图/点图/区域图)
运行时查看
在线连接后,趋势图实时滚动刷新。操作:
| 操作 | 效果 |
|---|---|
| 滚轮 | 缩放时间轴 |
| 拖动 | 平移 |
| 双击 | 回到最新 |
| 十字光标 | 显示指定时刻的所有变量值 |
| 右键 → 暂停 | 停止刷新,定格分析 |
多变量对比
同一图里画多条曲线,颜色区分。常见组合:
- PID:设定值 + 实际值 + 输出 三条一起画
- 振动分析:主轴 X/Y/Z 三轴同时看
- 节拍分析:工位 1/2/3 的完成信号对比
数据导出
右键 → 导出 CSV,带时间戳,可导入 Excel / Python 分析。

长周期记录
如果要连续记录数天/数周, 建议用数据库模块(见 数据库通讯)把数据存到 SQL 或时序库, 趋势图只做实时显示。
实时趋势 vs 历史趋势
两种趋势模式:
| 模式 | 数据源 | 使用场景 |
|---|---|---|
| 实时趋势 | 当前运行中的 Runtime | 在线观察波形 |
| 历史趋势 | 已保存的数据库记录 | 回溯已结束的问题 |
历史趋势可选数据源:
- SQLite (默认): 本地
%AppData%/DarraPLC/trends.db - PostgreSQL / MySQL: 企业级集中存储
- InfluxDB / TimescaleDB: 专业时序数据库, 支持 PB 级
- CSV 归档: 直接读取 CSV 文件
采样策略
趋势数据采样方式:
1. 定时采样
固定周期采样 (推荐):
| 采样周期 | 适用 | 1 小时数据量 |
|---|---|---|
| 1ms | 运动控制 / 高速抓拍 | 3.6M 点 / 变量 |
| 10ms | 电机转速 / PID | 360K 点 |
| 100ms | 温度 / 流量 (默认) | 36K 点 |
| 1s | 慢动态 (反应釜) | 3.6K 点 |
| 10s | 长周期 (仓储温度) | 360 点 |
2. 变化采样 (Change Triggered)
只在值变化超过阈值时采样, 节省存储:
rTemp 变化阈值 0.1 °C:
时刻 t=0s, 值 25.0 → 记录
时刻 t=5s, 值 25.05 → 跳过 (变化<0.1)
时刻 t=7s, 值 25.2 → 记录 (变化>0.1)
适合慢变量或尖峰捕捉。
3. 事件采样 (Event Triggered)
特定事件发生时开始记录一段数据:
触发条件: R_TRIG(bFault)
前触发: 2 秒 (记录事件前的数据)
后触发: 10 秒 (记录事件后)
故障诊断最有用, 可以看到故障前后 12 秒的完整波形。
4. 混合模式
平时变化采样 (省空间), 异常时切高频定时采样 (保留细节):
IF rError > 1.0 THEN
TrendSwitchToHighFreq(10ms); // 问题期间 10ms 采样
ELSE
TrendSwitchToLowFreq(1s); // 正常时 1s 采样
END_IF;
触发条件
触发表达式支持完整 ST 语法:
边沿触发: R_TRIG(bFault)
值阈值: rTemp > 80.0
偏差阈值: ABS(rSetpoint - rActual) > 5.0
组合条件: bRun AND (rError > 2.0 OR bAlarm)
频率条件: TIME() % T#100ms = 0 (每 100ms)
复合表达式: rPressure > 10.0 AND tonTimeout.Q
多变量对比
一张趋势图同时显示多条曲线, 颜色 / 线型 / 刻度独立:
┌─ 趋势: PID 调参 ──────────────────────────────┐
│ │
│ 80 ┤ ╱╲ │ ← 设定值 (红)
│ 75 ┤ ╱ ╲ ╱‾‾‾‾ │
│ 70 ┤ ╱ ╲╱ │ ← 反馈值 (蓝)
│ 65 ┤ ╱ │
│ 60 ┤ ╱ │
│ └─────────────────────────────────────────┘
│ │
│ 100 ┤ ▁▂▄▆█▇▅▄▃▂▁ │ ← PID 输出 (绿)
│ 50 ┤ │
│ 0 └─────────────────────────────────────────┘
│ 0s 5s 10s 15s 20s 25s │
└───────────────────────────────────────────────┘
双 Y 轴
不同单位的变量用不同 Y 轴:
- 左 Y 轴: 温度 0-200°C
- 右 Y 轴: 压力 0-10 bar
光标 (Cursor)
按 X 键开启十字光标:
时刻: t = 12.345s
rSetpoint = 75.0 °C
rActual = 73.8 °C
rError = 1.2 °C
fbPID.rOutput = 68.5 %
所有曲线在同一时刻的值同步显示, 便于逐点分析。
光标差 (Delta)
按 D 键放两个光标计算时间差和数值差:
Δt = 2.5 s
Δ(rActual) = +1.7 °C
斜率 = 0.68 °C/s
常用于:
- 测量响应时间 (阶跃响应 10%→90%)
- 测量过冲 (peak - steady)
- 测量振荡周期
缓冲区管理
每条曲线都有循环缓冲区, 满了自动覆盖最旧数据:
| 缓冲大小 | 1 小时覆盖 | 1 天覆盖 |
|---|---|---|
| 1K 点 | 1 秒 | — |
| 10K 点 | 10 秒 | — |
| 100K 点 | 1.7 分钟 | — |
| 1M 点 (默认) | 17 分钟 | — |
| 10M 点 | 2.8 小时 | — |
超过缓冲时:
- 覆盖旧: 先进先出 (默认)
- 停止: 达到上限后停止记录
- 归档: 自动转储到数据库, 缓冲继续滚动
导出数据
多种导出格式:
CSV
标准时间戳 + 列式数据:
Timestamp,rSetpoint,rActual,rOutput
2026-04-18T10:32:05.100,75.0,73.8,68.5
2026-04-18T10:32:05.200,75.0,73.9,67.8
2026-04-18T10:32:05.300,75.0,74.0,67.2
...
Excel (XLSX)
带图表模板, 直接打开看曲线。
MAT (MATLAB)
用于 MATLAB / Simulink 分析:
load('trend_data.mat');
plot(data.time, data.rActual);
JSON / Parquet
机器学习友好格式:
import pandas as pd
df = pd.read_parquet('trend_data.parquet')
df.plot()
导出范围
- 全部缓冲
- 当前可见区间
- 两光标之间
- 指定时间段
录制模式 (Recording)
24 小时连续录制:
- 新建趋势 → 录制模式
- 设置数据库 (SQLite / InfluxDB)
- 采样策略 (定时 + 事件组合)
- 启动录制, 后台持续写入
- 问题发生后, 历史趋势回放
典型场景: 生产线偶发故障, 每月出 1 次, 录制 30 天等复现, 然后回放分析。
趋势图与 PID 调参
PID 调参的标准流程依赖趋势图:
- 趋势图加入:
rSetpoint,rActual,rError,rOutput,rPIntegral,rDiff - 采样 10~100ms
- 给阶跃:
rSetpoint = 50.0 → 75.0 - 观察曲线:
- 上升时间: 10% → 90% 所用时间
- 超调: peak / steady - 1
- 稳定时间: 进入 ±2% 区间的时间
- 稳态误差: 长期平均
rError
- 按 PID 调参经验调 Kp/Ki/Kd
- 再给阶跃, 对比前后趋势
排错表
| 问题 | 原因 | 解决 |
|---|---|---|
| 曲线不动 | 采样周期未启动 | 确认趋势已启动 |
| 曲线丢帧 | 采样周期小于实际采样能力 | 加大采样周期 |
| 数据导出空 | 缓冲被清 | 启动录制模式到数据库 |
| 多变量刻度不一致 | 未用双 Y 轴 | 右键曲线 → 分配 Y 轴 |
| 光标位置不对齐 | 采样时间戳不一致 | 确认所有变量同一采样源 |
| 趋势图闪烁 | 刷新频率与系统冲突 | 调整 Refresh 为 200ms |
最佳实践
- 关键变量打包: 按分析主题建独立趋势 (PID 调参 / 运动轨迹 / 通讯质量)
- 采样周期匹配动态: 系统时间常数的 1/10 ~ 1/20
- 事件触发录制: 把故障前后数据保存下来最关键
- 长期录制转数据库: 别留在 RAM 缓冲, 宕机就丢
- 导出归档: 调试完成保存一份 CSV, 纳入项目版本控制
- 光标对比: 永远用两光标量化差异, 别只用眼睛看
- 注释时间戳: 在趋势图打标签 (如"换型开始"), 便于回顾