检测对整数变量的操作,在这些操作中,截断值可能被分配给REAL
数据类型变量
理由当整数计算结果分配给REAL
或LREAL
变量时,静态分析会出错。程序员应警惕对此类赋值可能出现的错误解释:lrealvar := dintvar1 * dintvar2
。由于LREAL
的取值范围大于DINT
的取值范围,我们可以认为计算结果总是可以用LREAL
来表示。但事实并非如此。处理器将乘法结果计算为整数,然后将结果投到LREAL
。整数计算中的溢出将丢失。为了解决这个问题,计算必须作为REAL
操作进行:lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
。
重要性:高
示例
PROGRAM PLC_PRG VAR rx : LREAL; di : DINT; END_VAR rx := di * di // SA0020 rx := TO_LREAL(di) * TO_LREAL(di) // No message --> SA0020: Possibly assignment of truncated value to REAL variable