描绘

在数学运算中,不主张将已界说数据类型和未界说数据类型的常数进行混合运算。这或许导致不必要的隐性转化,然后导致不正确的值。

下 面的比如给出了一条指令运算来解说这种过错的发作。在这里,将已界说数据类型的常数 ("int#1") 和未界说数据类型的常数 ("50000") 相加。在这种情况下,已界说数据类型的常数决议了这个加法的履行方法。数值 50000 首要被转化成 Int 数据类型,这将发生一个负的十进制数值 ("-15536")。然后运算成果 ("-15535") 被转化成 DInt 数据类型,再被分配给变量 "dint_var"。

  • dint_var := int#1 + 50000;

运用菜单指令 "Software (rebuild all blocks)" 编译之后,这个加法成果会得到信息 “常数值超出答应规模”。

处理

在指令中改动常数的数据类型,要么都是未界说数据类型,要么都是界说数据类型。在未界说 数据类型的条件下,这些常数会被界说成当时 CPU 最常用的数据类型 (例如 S7-1500 中常用"LInt" ) 。随后履行加法,假如必要就转化为 DInt 类型。假如都界说了数据类型,最常用的数据格局决议了运算成果。所以在这个比如中,Int#1 首要被转化成 DInt#1,然后依照 DInt 进行运算。

举例

  • dint_var := 1 + 50000;
  • dint_var := Int#1 + dint#50000;

图 01 显现了三个加法的成果。

图 01

上述运算成果也能够运用一个整数变量和一个未界说数据类型的常数。数值 50000 转化成一个整数 (成果是 -15535),以 "int_var" 格局相加再转化为 "dint_var"。

图 02

推荐阅读