为什么在 SCL 编程时 DInt 格式的加法运算结果不能够正确显示?

描述

在数学运算中,不建议将已定义数据类型和未定义数据类型的常数进行混合运算。这可能导致不必要的隐性转换,从而导致不正确的值。

下面的例子给出了一条指令运算来解释这种错误的发生。在这里,将已定义数据类型的常数("int1+50000;

使用菜单命令"Software(rebuildallblocks)"编译之后,这个加法结果会得到信息“常数值超出允许范围”。

解决

在指令中改变常数的数据类型,要么都是未定义数据类型,要么都是定义数据类型。在未定义数据类型的条件下,这些常数会被定义成当前CPU最常用的数据类型(例如S7-1500中常用"LInt")。随后执行加法,如果必要就转换为DInt类型。如果都定义了数据类型,最常用的数据格式决定了运算结果。所以在这个例子中,Int1,然后按照DInt进行运算。

举例

dint_var:=1+50000;

dint_var:=Int50000;

图01显示了三个加法的结果。


图01

上述运算结果也可以使用一个整数变量和一个未定义数据类型的常数。数值50000转换成一个整数(结果是-15535),以"int_var"格式相加再转化为"dint_var"。


图02

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系