常量和字面量
常量是不可更改值的标识符。您可以在 POU 中本地声明常量,也可以在全局变量列表中全局声明常量。声明段由关键字CONSTANT
扩展。
常量也是字符串,代表一种基本类型的值,如整数或浮点数(例如16#FFFF_FFFF
,T#5s
, 或-1.234 E-5
)。为了区分它们,这些常量也被称为字面常量、字面常量或未命名常量。有逻辑字面量 (TRUE
,FALSE
) 或数字字面量 (3.1415
,T#5s
) ,也有字符串字面量 ('Hello world!'
,"black"
) 。
语法声明
<scope> CONSTANT <identifier> : <data type> := <initial value> ; END_VAR <scope> : VAR | VAR_INPUT | VAR_STAT | VAR_GLOBAL <data type>: <elementary data type | user defined data type | function block > <initial value> : literal value | identifier | expression
允许的初始值:
-
字面意思(例如:
TRUE
,FALSE
,16#FFFF_FFFF
) -
在其他位置声明的已命名常量
-
由字面量组成的简单表达式,也与简单运算符(如 + - *)相结合
输入或函数调用不能指定为初始值。
示例
VAR_GLOBAL CONSTANT g_ciMAX_A : INT := 100; g_ciSPECIAL : INT := g_ciMAX_A - 10; END_VAR
常量仅为声明而定义。需要分配初始值。在实现中,常量只能被读取,因此总是出现在语句中赋值操作符的右边。
编译代码时,常量将被初始值替换。还必须能够在编译时计算初始值。
结构化或用户定义类型的常量要到运行时才能计算。程序或 GVL 中的结构常量在程序启动时计算一次。每次调用函数或方法时,都会计算函数或方法中的结构常量。因此,结构化常量的初始化可能取决于输入或执行函数调用。