跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 转换与取整

SCL 转换与取整

西门子 SCL 类型转换与取整:CONVERT 显式转换、ROUND、TRUNC、CEIL、FLOOR,含完整 FB 示例、边界场景和常见坑。

SCL 的转换分成两类:类型转换(INT_TO_REAL、REAL_TO_INT 等)和取整(ROUND/TRUNC/CEIL/FLOOR)。

注意 SCL 里通常没有 CONVERT(IN := ...) 这种调用;转换写成 <源类型>_TO_<目标类型>(值)。

取整默认返回 DINT;ROUND 取最近整数,TRUNC 向零截断,CEIL 向上,FLOOR 向下。

SCL 转换与取整 7

怎么选

需求 指令
类型转换 INT_TO_REAL、REAL_TO_INT 等
四舍五入 ROUND
向零截断 TRUNC
向上取整 CEIL
向下取整 FLOOR
模拟量缩放/归一化 SCALE_X / NORM_X

一个常见的工程量转换

SCL
1#RealValue := INT_TO_REAL(#RawValue) / 27648.0 * 100.0;
2#IntValue  := REAL_TO_INT(#RealValue);   // 四舍五入
3#Truncated := TRUNC(#RealValue);          // 截断

转换前先确认目标范围;REAL_TO_INT 是四舍五入,不是截断。

常见问题

SCL 里 CONVERT 怎么用?

通常写成 `REAL_TO_INT(...)`、`INT_TO_REAL(...)` 这种显式转换,而不是 `CONVERT(IN := ...)`。

ROUND/TRUNC/CEIL/FLOOR 怎么选?

取最近整数用 ROUND,向零截断用 TRUNC,向上用 CEIL,向下用 FLOOR;四者默认都返回 DINT。

REAL_TO_INT 和 ROUND 有什么区别?

REAL_TO_INT 是类型转换,按最近整数取整;ROUND 是显式取整函数。两者都返回整数,具体类型和范围要确认。

转换结果为什么不对?

先检查源/目标类型、目标范围、REAL 精度和取整规则;位串和整数互转要用 WORD_TO_INT/INT_TO_WORD,不能用 MOVE。

← 返回 SCL 指令手册