SCL SCALE_X — 缩放到范围
把 0.0~1.0 的浮点数映射到 MIN~MAX;模拟量标定常用。
SCL 的转换分成两类:类型转换(INT_TO_REAL、REAL_TO_INT 等)和取整(ROUND/TRUNC/CEIL/FLOOR)。
注意 SCL 里通常没有 CONVERT(IN := ...) 这种调用;转换写成 <源类型>_TO_<目标类型>(值)。
取整默认返回 DINT;ROUND 取最近整数,TRUNC 向零截断,CEIL 向上,FLOOR 向下。
| 需求 | 指令 |
|---|---|
| 类型转换 | INT_TO_REAL、REAL_TO_INT 等 |
| 四舍五入 | ROUND |
| 向零截断 | TRUNC |
| 向上取整 | CEIL |
| 向下取整 | FLOOR |
| 模拟量缩放/归一化 | SCALE_X / NORM_X |
1#RealValue := INT_TO_REAL(#RawValue) / 27648.0 * 100.0;
2#IntValue := REAL_TO_INT(#RealValue); // 四舍五入
3#Truncated := TRUNC(#RealValue); // 截断
转换前先确认目标范围;REAL_TO_INT 是四舍五入,不是截断。
通常写成 `REAL_TO_INT(...)`、`INT_TO_REAL(...)` 这种显式转换,而不是 `CONVERT(IN := ...)`。
取最近整数用 ROUND,向零截断用 TRUNC,向上用 CEIL,向下用 FLOOR;四者默认都返回 DINT。
REAL_TO_INT 是类型转换,按最近整数取整;ROUND 是显式取整函数。两者都返回整数,具体类型和范围要确认。
先检查源/目标类型、目标范围、REAL 精度和取整规则;位串和整数互转要用 WORD_TO_INT/INT_TO_WORD,不能用 MOVE。