.

标识符

.
.
标识符指定规则

.变量标识符规则

  • 标识符不得包含空格或特殊字符。
  • 大写将被忽略。例如,VAR1var1引用相同的变量。
  • 识别下划线。例如,A_BCDAB_CD将被视为两个不同的标识符。不允许多个连续的下划线。
  • 标识符的长度不受限制。

.标识符(命名空间)多次使用的规则

  • 标识符不得在本地声明两次。
  • 标识符在全局范围内可以使用多次。如果局部变量与全局变量具有相同的名称,则局部变量在POU中具有优先级。
  • 标识符不得与关键字(例如作用域VAR_Global)相同。
  • 在全局变量列表中声明的变量可以与另一个GVL中定义的变量具有相同的名称。CODESYS提供的功能扩展了变量名称空间或范围的标准:
    • 全局命名空间运算符:
      以点开头的实例路径始终会打开全局命名空间。如果存在与全局变量同名的局部变量(例如ivar),则将全局变量称为.ivar
    • 全局变量列表的名称可以为包含变量唯一地定义名称空间。因此,您可以在不同的全局变量列表中声明具有相同名称的变量,并通过在列表名称前添加唯一引用。
      例如,globlist1.ivar := globlist2.ivar; (* ivar from GVL globlist2 is copied to ivar in GVL globlist1 *)
    • 可以根据以下语法唯一地解决项目中包含的库的全局变量列表中定义的变量:
      <name scope library>.<GVL name>.<variable name>
      例如,globlist1.ivar := lib1.globlist1.ivar (* ivar from GVL globlist1 in library lib1 is copied to ivar in GVL globlist1 *).
  • 插入库时,还可以使用库管​​理器定义名称空间。这样,可以通过<namespace library>.<block name|variable name>对库块和库进行唯一引用。请注意,在嵌套库时,必须连续引用所有库的命名空间
    示例:如果Lib1Lib0引用,那么Lib1中的块func将通过Lib0.Lib1.fun寻址:ivar := Lib0.Lib1.fun(4, 5); (* func的返回值被复制到项目中的变量ivar中 *)

我们建议您除了必须专门考虑变量声明的事项外,还应用以下规则。这样,您将在分配名称时实现最佳的协调。

.
有关变量名的建议

只要有可能,就应在应用程序和库中以匈牙利表示法命名变量。为每个变量找到一个有意义的简短英文名称作为基础名称,该基础名称可以包含多个单词。每个单词的首字母大写,其余字母小写。在基本名称的前面,以小写形式附加前缀以指示变量的数据类型。

示例:iFileSize : INT;

.

数据类型

前缀

描述

BOOL

x

我们强烈推荐使用x作为布尔变量的前缀,以将其与数据类型BYTE的标识符区分开。前缀表示IEC程序员的视图。

 

b

保留

BYTE

by

位字符串;不适用于算术运算

WORD

w

位字符串;不适用于算术运算

DWORD

dw

位字符串;不适用于算术运算

LWORD

lw

位字符串;不适用于算术运算

   

SINT

si

算术整数数据类型,8位

USINT

usi

算术整数数据类型,8位

INT

i

算术整数数据类型,16位

UINT

ui

算术整数数据类型,16位

DINT

di

算术整数数据类型,32位

UDINT

udi

算术整数数据类型,32位

LINT

li

算术整数数据类型,64位

ULINT

uli

算术整数数据类型,64位

   

REAL

r

算术浮点数据类型,32位

LREAL

lr

算术浮点数据类型,64位

   

STRING

s

变量长度的单字节字符串(默认设置:80字符)

WSTRING

ws

变量长度的双字节字符串(默认设置:80字符)

   

TIME

tim

持续时间,32位

LTIME

ltim

持续时间,64位

   
  • TIME_OF_DAY
  • TOD

tod

一天中的时间,32位

  • LTIME_OF_DAY
  • LTOD

ltod

一天中的时间,64位

  • DATE_AND_TIME
  • DT

dt

日期和时间

  • LDATE_AND_TIME
  • LDT

ldt

 

DATE

  • dat
  • d

日历时间

LDATE

  • ldat
  • ld

日历时间

   

POINTER

p

 

ARRAY

a

 

枚举

e

 
.

.例如


VAR
    bySubIndix: BYTE;
    xFlag: BOOL;
    udiCounter: UDINT;
END_VAR
 
.

标识符

描述

例如

嵌套声明

前缀按声明一次附加。

pabyTelegramData: POINTER TO ARRAY [0..7] OF BYTE;

功能块实例

用户定义数据类型的变量

前缀功能块或数据类型名称的缩写

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_,后跟类型前缀和变量名

VAR CONSTANT

c_uiSyncID: UINT := 16#80;

END_VAR

全局变量

库前缀附加了一个附加前缀。

g_

VAR_GLOBAL

CAN_g_iTest: INT;

END_VAR

全局常数

全局常数变量

库前缀附加了一个附加前缀。

gc_

VAR_GLOBAL CONSTANT

CAN_gc_dwExample: DWORD;

END_VAR

.
变量名CODESYS V3.x库的建议
.

标识符

描述

例如

变量

对应于变量名的描述,但全局变量和常量不需要库前缀,因为名称空间会替换函数。

g_iTest: INT; // Declaration

CAN.g_iTest; // Implementation; call in the program

.
用户定义数据类型(DUT)标识符的建议
.

标识符的

描述

例如

结构体

库前缀,后跟一个下划线和对该结构的简短说明。此结构的已创建变量的关联前缀应在冒号之后作为注释。

TYPE CAN_SDOTelegram : (* prefix: sdo *)

STRUCT

wIndex : WORD;

bySubIndex : BYTE;

byLen : BYTE;

abyData: ARRAY [0..3] OF BYTE;

END_STRUCT

END_TYPE

枚举

库前缀,后跟一个下划线和大写标识符。

注意: 在以前的CODESYS版本中,枚举值> 16#7FFF会导致错误,因为它们不会自动转换为INT。因此,枚举应始终使用正确的INT值声明。

TYPE CAL_Day :

(

CAL_MONDAY,

CAL_TUESDAY,

CAL_WEDNESDAY,

CAL_THURSDAY,

CAL_FRIDAY,

CAL_SATURDAY,

CAL_SUNDAY

);

声明:

eToday: CAL_Day;

.
CODESYS V3库中有关用户定义数据类型(DUT)标识符的建议
.

标识符的

描述

例如

CODESYS V3库中的DUT名称

命名空间取代了对库前缀的需要。因此,将其省略。枚举值也定义为没有库前缀。

具有命名空间CAL的库

TYPE DAY :

(

MONDAY

TUESDAY,

WEDNESDAY,

THURSDAY,

FRIDAY,

SATURDAY,

SUNDAY

);

声明:

eToday: CAL.Day;

应用程序中的使用

IF eToday = CAL.Day.MONDAY THEN

.
有关POU,功能,功能块,程序的标识符的建议
.

标识符的

描述

例如

POUs: 功能,功能块,程序

库前缀,后跟一个下划线和简短的,内容丰富的POU名称。与变量一样,每个单词的首字母大写,其他所有字母均为小写。我们建议您从动词和名词组成POU名称。

对于功能块,创建的实例的关联前缀应在名称后加上注释。

FUNCTION_BLOCK CAN_SendTelegram (* prefix: canst *)

动作

操作仅由块本身调用的操作,以prv_开头。否则,动作不包含前缀。

 
.
CODESYSV3库中有关POU的标识符的建议
.

标识符的

描述

示例

POU

由于名称空间替换了库前缀的功能,库前缀被省略。

FUNCTION_BLOCK SendTelegram (* prefix: canst *)

方法

仅由块本身调用的方法,以prv_开头。

否则,方法不包含前缀。

 

接口

接口

I

ICANDevice

.
可视化标识符的建议

提示!

请注意,可视化与项目中的另一个块的名称不同,因为这可能会在更改可视化时引起问题。