标识符的定义方式是:
在声明变量时(变量名称)
在声明用户定义的数据类型时
在创建 POU 时(功能、功能块和程序)
除了在定义标识符时要考虑的常规项目外(请参阅变量声明的概述),还需考虑以下事项以使命名尽可能具有唯一性:
要在应用程序和库中命名变量,请尽可能遵循匈牙利命名法。
为每个变量挑选一个有意义的简短描述。这用作基本名称。对于基本名称的每个单词,请使用大写字母。对于其余内容,请使用小写字母(示例:FileSize
)。
数据类型 |
下限 |
上限 |
信息内容 |
前缀 |
注释 |
---|---|---|---|---|---|
BOOL |
FALSE |
TRUE |
1 位 |
|
– |
|
保留 |
||||
BYTE |
– |
– |
8 位 |
|
位字符串,不适用于算术运算 |
WORD |
– |
– |
16 位 |
|
位字符串,不适用于算术运算 |
DWORD |
– |
– |
32 位 |
|
位字符串,不适用于算术运算 |
LWORD |
– |
– |
64 位 |
|
位字符串,不适用于算术运算 |
SINT |
-128 |
127 |
8 位 |
|
算术整数数据类型,8 位 |
USINT |
0 |
255 |
8 位 |
|
算术整数数据类型,8 位 |
INT |
-32,768 |
32,767 |
16 位 |
|
算术整数数据类型,16 位 |
UINT |
0 |
65,535 |
16 位 |
|
算术整数数据类型,16 位 |
DINT |
-2,147,483,648 |
2,147,483,647 |
32 位 |
|
算术整数数据类型,32 位 |
UDINT |
0 |
4,294,967,295 |
32 位 |
|
算术整数数据类型,32 位 |
LINT |
–263 |
263-1 |
64 位 |
|
算术整数数据类型,64 位 |
ULINT |
0 |
264-1 |
64 位 |
|
算术整数数据类型,64 位 |
REAL |
– |
– |
32 位 |
|
算术浮点数据类型,32 位 |
LREAL |
– |
– |
64 位 |
|
算术浮点数据类型,64 位 |
STRING |
– |
– |
– |
|
长度可变的单字节字符串(缺省设置:80 个字符) |
WSTRING |
– |
– |
– |
|
长度可变的双字节字符串(缺省设置:80 个字符) |
TIME |
– |
– |
– |
|
时长,32 位 |
LTIME |
– |
– |
– |
|
时长,64 位 |
|
– |
– |
– |
|
时间,32 位 |
|
– |
– |
– |
|
时间,64 位 |
|
– |
– |
– |
|
日期和时间 |
|
– |
– |
– |
|
– |
DATE |
– |
– |
– |
|
日历日期 |
LDATE |
– |
– |
– |
|
日历日期 |
Enumeration |
– |
– |
– |
|
– |
POINTER |
– |
– |
– |
|
– |
ARRAY |
– |
– |
– |
|
– |
Structure |
– |
– |
– |
|
– |
Function block |
– |
– |
– |
|
– |
Interface |
– |
– |
– |
|
– |
Union |
– |
– |
– |
|
– |
* 针对布尔变量,刻意选择 x 作为前缀以区分 BYTE,也是为了适应 IEC 程序员的认知(请参阅寻址 |
简单声明
简单声明的示例:
bySubIndex: BYTE;
sFileName: STRING;
udiCounter: UDINT;
嵌套声明
嵌套声明的示例(其中的前缀按照声明的顺序彼此连接):
pabyTelegramData: POINTER TO ARRAY [0..7] OF BYTE;
功能块实例以及用户定义数据类型的变量
功能块实例以及用户定义数据类型的变量会获取功能块或数据类型名称的简写作为前缀(例如:stSDO
)。
示例
stSDOReceivedTelegram: ST_SDOTelegram;
TYPE ST_SDOTelegram :
STRUCT
wIndex:WORD;
bySubIndex:BYTE;
byLen:BYTE;
aby: ARRAY [0..3] OF BYTE;
END_STRUCT
END_TYPE
本地常量
本地常量 (c) 以前缀 c
以及紧接的下划线开头,后跟类型前缀和变量名称。
示例
VAR CONSTANT
c_uiSyncID: UINT := 16#80;
END_VAR
全局变量和全局常量
全局变量以 G_
作为前缀 (g_
),全局常量以 Gc_
作为前缀 (gc_
)。
示例
VAR_GLOBAL
G_iTest: INT;
END_VAR
VAR_GLOBAL CONSTANT
Gc_dwExample: DWORD;
END_VAR
结构
基本上,请参阅上述变量名称的描述。在应用程序代码中访问变量时,请使用库命名空间作为前缀。
示例
G_iTest: INT; (declaration)
CAN.G_iTest (implementation, call in an application program
结构
每个结构数据类型的名称由相应的类型前缀(另请参阅 POU 前缀)和结构的简短、有意义的名称(例如 ET_Day
)组成。
示例(在命名空间为 CAL
的库中):
TYPE ET_Day :(
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY);
声明:
etToday: CAL.ET_Day;
在应用程序中使用:
IF etToday = CAL.ET_Day.MONDAY THEN
功能、功能块和程序的名称由相应的类型前缀(另请参阅 POU 前缀)和 POU 的简短的、有意义的名称(例如 FB_SendTelegram
)组成。与变量一样,POU 名称单词的第一个字母应始终是大写字母,而其他字母应为小写字母。例如,使 POU 名称由动词和名词实词组成,可清楚指示功能块的运算。
示例
FUNCTION_BLOCK FB_SendTelegram
在声明部分中,请提供 POU 的简短描述作为注释。此外,还应该为输入和输出提供注释。如果是功能块,请直接在名称后面为设置实例插入关联的前缀。
动作
操作不包含前缀。只有那些仅在内部(即,由 POU 自身)调用的操作才以 prv_
开头。