转换操作
缩放与类型
数据转换是物理世界与数字代码之间的桥梁。掌握模拟信号缩放和数据类型转换。
什么是 TIA Portal 中的转换操作?
转换操作允许将一个数据类型的值转换为另一个数据类型(例如:整数转换为实数)或操作浮点数的精度。它们还包括标准化和缩放工具,这对于处理来自工业传感器的模拟信号至关重要。
TIA Portal 提供现代且高性能的指令,如 SCALE_X 和 NORM_X,它们优于并可取代 S7-300 系统旧有的 SCALE/UNSCALE 块,提供更大的灵活性和更好的数学精度。
类型转换
数值格式的转换与舍入
CONVERT — 转换值
CONV功能
将值从源数据类型转换为目标数据类型。处理整数、实数、字符、时间及字符串之间的转换。
适用场景
通过将整数转换为 Real 来准备复杂的数学计算,或将错误代码转换为 String 以便在 HMI 上显示。
专家提示
在 LAD 中,单击块上的数据类型以选择源和目标。
在 SCL 中:myReal := INT_TO_REAL(myInt);
将大类型转换为短类型时注意精度损失。
ROUND / TRUNC
ROUND功能
ROUND 将浮点数舍入为最接近的整数。TRUNC 仅删除小数部分(截断)。
适用场景
将物理测量值显示为简单整数,或将 Real 计算结果转换为数组索引 (Int)。
专家提示
如果小数部分正好是 .5,ROUND 将舍入到最接近的偶数(IEC 标准)。
如果您只想忽略小数而不进行舍入计算,则首选 TRUNC。
两者都接受 Real/LReal 输入,通常返回 DInt。
CEIL / FLOOR
CEIL功能
CEIL(天花板)生成大于或等于的整数。FLOOR(地板)生成小于或等于的整数。
适用场景
计算所需的箱子数量(始终使用 CEIL 向上舍入)。
专家提示
CEIL(10.1) = 11 ; FLOOR(10.9) = 10。
对于包装和物流算法至关重要。
对于确保数值保持在严格的整数边界内非常有用。
缩放 (Scaling)
模拟信号处理与物理量
NORM_X — 标准化
NORM_X功能
将 [MIN..MAX] 范围内的值转换为 0.0 到 1.0 之间的标准化值。这是模拟量处理的第一步。
适用场景
读取原始模拟输入(例如:0-27648)并将其转换为百分比 (0.0-1.0)。
专家提示
通常紧接着使用 SCALE_X 块。
如果输入超过边界,输出将超过 0.0 或 1.0。
确保 MIN 不同于 MAX。
SCALE_X — 缩放
SCALE_X功能
获取标准化值 [0.0..1.0] 并将其映射到由 MIN 和 MAX 定义的物理范围(例如:0-100°C)。
适用场景
将 NORM_X 的结果转换为操作员可读的工程单位。
专家提示
NORM_X + SCALE_X 组合是西门子现代模拟量缩放的标准方法。
允许在不修改整个程序的情况下轻松更改传感器范围。
也可用于反向:将物理设定值发送到模拟输出。
Legacy 指令
S7-300 兼容性 (FC105 / FC106)
SCALE / UNSCALE
功能
旧版块,通过一个步骤完成整数模拟值与物理实值之间的直接转换。
适用场景
仅在维护从 Step 7 Classic 迁移的程序时使用。
专家提示
SCALE 对应旧库中的 FC105。
使用 BIPOLAR 参数处理负信号(例如:+/- 10V)。
在 S7-1200/1500 的新开发中,系统性地首选 NORM_X/SCALE_X。
转换方法对比
根据您的需求选择正确的指令
| 您想要... | 推荐指令 | 示例 |
|---|---|---|
| 更改类型 (Int -> Real) | CONVERT | 使用计数器进行精确计算 |
| 删除小数 | TRUNC | 简化温度显示 |
| 数学舍入 | ROUND | 统计零件计算 |
| 处理 4-20mA 传感器 | NORM_X + SCALE_X | 0-16 bar 压力传感器 |
| 向上舍入 | CEIL | 托盘数量计算 |
| 旧版 S7-300 代码 | SCALE (FC105) | 机器项目迁移 |
常见问题
为什么使用 NORM_X 和 SCALE_X 而不是单个块?
这种两步分离提供了更大的灵活性。例如,您可以在缩放之前过滤或限制标准化值,或者将同一个标准化值用于几个不同的量程。
西门子模拟量输入的标准输入值是多少?
对于大多数西门子模块 (S7-1200/1500),单极信号(0-10V 或 4-20mA)的数值范围为 0 到 27648。这是您注入到 NORM_X 的 VALUE 参数中的值。
如何将数字转换为字符串 (String)?
CONVERT 指令原生处理向 String 的转换。对于格式化(小数位数)的更多控制,请使用 VAL_STRG 指令。
ROUND 和 TRUNC 有什么区别?
ROUND 舍入到最接近的整数(10.6 变为 11),而 TRUNC 不管数值大小直接截断小数(10.6 变为 10)。