标示符的命名建议
. 标示符由变量 (变量名) 中的声明, 用户自定义数据类型 以及建立POUs (功能,功能块,程序)来定义。除了定义的标识符,为了使命名尽可能的唯一性,你可能会考虑遵循一些建议。
变量名称
在 CODESYS V3 库中的变量名称
用户定义数据类型 (DUT)
在 CODESYS V3 库中的用户定义属性类型(DUTs)
功能,功能块,程序 (POU), 动作
在 CODESYS V3库中的 POUs
可视化名称
(1)变量名
程序和库中的变量命名尽可能遵循 匈牙利标记法:
对于每一个变量,都需在 基础名中含有有意义的简短的描述。
基础命名的每个单词 的首字母必须大写,其他字母小写(例如: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 | -2^63 | 2^63 - 1 | 64 位 | li |
|
ULINT | 0 | 2^64 - 1 | 64 位 | uli |
|
|
|
|
|
|
|
REAL |
|
| 32 位 | r |
|
LREAL |
|
| 64 位 | lr |
|
|
|
|
|
|
|
STRING |
|
|
| s |
|
|
|
|
|
|
|
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;
功能块示例和用户自定义类型的变量 作为前缀,可使用FB-resp的快捷键。数据类型名(例如: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
CAN_g_iTest: INT;
END_VAR
VAR_GLOBAL CONSTANT
CAN_gc_dwExample: DWORD;
END_VAR
(2) CODESYS V3.x 库中的变量名称
一般遵循(1)中的规则,以下情况例外:全局变量和常量不需要库前缀,因为使 命名空间代替了前缀的功能。
例子:
g_iTest: INT; (声明)
CAN.g_iTest (补充, 在应用程序中调用)
(3)用户自定义数据类型(DUT)
结构: 每个结构数据类型的名称包含一个库前缀(例如:CAN)、一个下划线和结
例子:
TYPE CAN_SDOTelegram : (* prefix: sdo *)
STRUCT
wIndex:WORD;
bySubIndex:BYTE;
byLen:BYTE;
abyData: ARRAY [0..3] OF BYTE;
END_STRUCT
END_TYPE
枚举 由库前缀开头(例如:CAL),后加下划线和大写的标识符。
请注意,在以前版本的 CODESYS 中的ENUM 值> 16#7FFF 有不一致的地方,因为他们没有自动转换为INT值。出于这个原因,应以正确的INT值定义ENUM。
例子:
TYPE CAL_Day :(
CAL_MONDAY,
CAL_TUESDAY,
CAL_WEDNESDAY,
CAL_THIRSDAY,
CAL_FRIDAY,
CAL_SATURDAY,
CAL_SUNDAY);
声明:
eToday: CAL_Day;
(4)CODESYS V3库中用户定义的数据类型(DUT)
在 CODESYS V3库中DUT名没有库前缀,因为使用命名空间代替了前缀的功能。枚举定义组 件也没有库前缀。
例子 (在库中的命名空间 CAL):
TYPE Day :(
MONDAY,
TUESDAY,
WEDNESDAY,
THIRSDAY,
FRIDAY,
SATURDAY,
SUNDAY);
声明:
eToday: CAL.Day;
在应用中的使用:
IF eToday = CAL.Day.MONDAY THEN
(5)功能,功能块,程序(POU),动作
功能,功能块和程序的名称包括 库前缀 (例子: CAN), 下划线 和 POU的缩写简称 (如: SendTelegram),就像POU变量名称的每一个词的第一个字母都应该是大写字母,其他的应该是小字母。建POU名称由一个动词 和一个 实词组成。
例子:
FUNCTION_BLOCK CAN_SendTelegram (* prefix: canst *)
在声明部分,需要包含POU的简介,并以此作为一个说明。另外,所有的输入和输出都必须要有说明。如果有功能块,建立实例的相关前缀需要加在名称后面。
动作没有前缀;只有仅在内部由POU自身调动的动作,是以prv_为前缀的。
为了与之前的CODESYS版本作对比,每个 功能 至少要包含一个参数。外部功能 不能使用结构作为返回值。
(6) CODESYS V3库中的POU
CODESYS V3 库中的POU名称不含库前缀,因为使用命名空间代替前缀的功能。创建路径名称的规则与动作相同。可能的路径输入需要有英文的批注。另外,也需要在声明中添加简短说明。接口名称以“I”开头,例如:ICANDevice.
(7)可视化名称
| 提示! 目前,请尽量避免可视化的名称与其他项目中的对象重复,因为如果这样会在改变可视化的时候出现问题。 |