标识符的定义方式是:
o在声明变量时(变量名称)
o在声明用户定义的数据类型时
o在创建 POU(功能、功能块和程序)
除了在定义标识符时要考虑的常规项目外(请参阅关于变量声明的常规信息),还请考虑以下建议以使命名尽可能地唯一:
o变量名称
要在应用程序和库中命名变量,请尽可能遵循匈牙利命名法。
为每个变量挑选一个有意义的简短描述。这用作基本名称。对于基本名称的每个单词,请使用大写字母。对于其余内容,请使用小写字母(示例:FileSize)。
数据类型 |
下限 |
上限 |
信息内容 |
前缀 |
注释 |
---|---|---|---|---|---|
BOOL |
FALSE |
TRUE |
1 位 |
x* |
– |
b |
保留 |
||||
BYTE |
– |
– |
8 位 |
by |
位字符串,不适用于算术运算 |
WORD |
– |
– |
16 位 |
w |
位字符串,不适用于算术运算 |
DWORD |
– |
– |
32 位 |
dw |
位字符串,不适用于算术运算 |
LWORD |
– |
– |
64 位 |
lw |
不适用于算术运算 |
SINT |
–128 |
127 |
8 位 |
si |
– |
USINT |
0 |
255 |
8 位 |
usi |
– |
INT |
–32,768 |
32,767 |
16 位 |
i |
– |
UINT |
0 |
65,535 |
16 位 |
ui |
– |
DINT |
–2,147,483,648 |
2,147,483,647 |
32 位 |
di |
– |
UDINT |
0 |
4,294,967,295 |
32 位 |
udi |
– |
LINT |
–263 |
263-1 |
64 位 |
li |
– |
ULINT |
0 |
264-1 |
64 位 |
uli |
– |
REAL |
– |
– |
32 位 |
r |
– |
LREAL |
– |
– |
64 位 |
lr |
– |
STRING |
– |
– |
– |
s |
– |
WSTRING |
– |
– |
– |
ws |
– |
TIME |
– |
– |
– |
tim |
– |
TIME_OF_DAY |
– |
– |
– |
tod |
– |
DATE_AND_TIME |
– |
– |
– |
dt |
– |
DATE |
– |
– |
– |
date |
– |
ENUM |
– |
– |
16 位 |
e |
– |
POINTER |
– |
– |
– |
p |
– |
ARRAY |
– |
– |
– |
a |
– |
* 针对布尔变量,故意选择 x 作为前缀以区分 BYTE,也是为了适应 IEC 程序员的认知(请参阅寻址 %IX0.0)。 |
简单声明
简单声明的示例:
bySubIndex: BYTE;
sFileName: STRING;
udiCounter: UDINT;
嵌套声明
嵌套声明的示例(其中的前缀按照声明的顺序彼此连接):
pabyTelegramData: POINTER TO ARRAY [0..7] OF BYTE;
功能块实例以及用户定义数据类型的变量
功能块实例以及用户定义数据类型的变量会获取功能块或数据类型名称的简写作为前缀(例如:sdo)。
示例
cansdoReceivedTelegram: CAN_SDOTelegram;
TYPE CAN_SDOTelegram : (* prefix: sdo *)
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_ 作为前缀,全局常量以 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
结构
每个结构数据类型的名称都包含该结构的简要描述(例如,SDOTelegram)。
示例(在命名空间为 CAL 的库中):
TYPE Day :(
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY);
声明:
eToday: CAL.Day;
在应用程序中使用:
IF eToday = CAL.Day.MONDAY THEN
注意: 使用在库中声明的 DUT 或枚举时,请考虑使用命名空间。
功能、功能块和程序的名称以 POU 的简称作为前缀(例如,SendTelegram)。与变量一样,POU 名称单词的第一个字母应始终是大写字母,而其他字母应为小写字母。建议使用一个动词和一个名词来组成 POU 的名称。
示例
FUNCTION_BLOCK SendTelegram (* prefix: canst *)
在声明部分中,请提供 POU 的简短描述作为注释。此外,还应该为输入和输出提供注释。如果是功能块,请直接在名称后面为设置实例插入关联的前缀。
动作
操作不包含前缀。只有那些仅在内部(即,由 POU 自身)调用的操作才以 prv_ 开头。
结构
对于创建方法名称,适用的规则与创建操作时适用的规则相同。针对方法的可能输入,请输入英语注释。向方法的声明中添加方法的简短描述。以字母 I 作为接口名称的开头;例如,ICANDevice。
注意: 使用在库中声明的 POU 时,请考虑使用命名空间。