主题
模拟量与工程量例程
传感器送来的是原始读数(4~20mA、0~4000 这类),要先换算成工程量(℃、%、kPa)才能比较和显示。 本页覆盖采集链路上的每一环:变换 → 限幅 → 取整 → 多路取舍 → 工况切换 → 状态字 → 运行时间累计。
返回 例程总览。
这一页的主角
一条标准采集链:原始读数 → 线性变换(换算工程量) → 限值运算(夹住异常) → 取位取整(写进 D)。 跳过第一步直接比较,是最常见的"温度显示 4000 度"事故。
例程 1:4~20mA 温度变送器换算(线性变换)
场景:温度变送器送来 4~20(mA 对应的原始值),要变成 -40~70℃ 参与控制和显示。
软元件
| 软元件 | 作用 |
|---|---|
D100 | 原始读数(4~20) |
D110 | 换算后的温度(℃) |
块图(照着拖即可)
对应的 ddc.json(点「生成 JSON」得到的就是它;也可存成 .ddc.json 导入)
json
{
"version": 1,
"name": "温度线性变换",
"scan_ms": 200,
"lines": [
{
"op": "assign",
"target": {"op":"ref","device":"D","addr":110},
"expr": {
"op": "linear",
"args": [
{"op":"ref","device":"D","addr":100},
{"op":"const","value":4},
{"op":"const","value":20},
{"op":"const","value":-40},
{"op":"const","value":70}
]
}
}
]
}要点
- 线性变换填 4 个数:输入下限、输入上限、输出下限、输出上限,块内部按比例映射,不用自己写公式。
- 换算结果带小数,可以直接参与比较;要写进 D 寄存器显示时再取整(见例程 2)。
- 换成百分比也一样:0~4000 的原始读数 → 0~100%。
验证:D100 写 12(量程中点)→ D110 = 15℃;写 4 → -40;写 20 → 70。
注意事项
- 输入上下限填反(写成 20~4):映射方向倒过来,温度越高读数越低,控制动作全是反的。
- 拿原始读数和工程量阈值比较:D100 = 4000 时永远"超温",程序一直动作。
- 输入超出量程时会外推(2mA 算出 -71℃),断线、超量程的数据要靠限值夹住或判掉线。
其余例程(各自一页)
- 模拟量与工程量例程 2:限幅 + 取整(夹住异常值再写进 D)
- 模拟量与工程量例程 3:多路温度取最高 / 最低
- 模拟量与工程量例程 4:白天 / 夜间 / 周末三套设定值(工况切换)
- 模拟量与工程量例程 5:状态字拆分与合并(取位 / 合并位)
- 模拟量与工程量例程 6:运行小时累计与保养提醒(保持寄存器)
相关文档
- 2.4 计算类功能块(算术、限值、线性变换、取位合并、累计时间)
- 2.2 数据类功能块(取变量、常量、系统时钟、通信变量)
- 基础控制例程 / 时序与定时例程 / HVAC 暖通例程
- 3.2 常见问题(数量限制速查)