CoDeSys入门实战一起学习(十九):PLC编程公用元素(二):关键字与常数,程序的“核心词汇与固定值”
如果说字符集和分界符是PLC编程的“基础语法”,那关键字和常数就是编程的“核心词汇”——关键字定义程序结构,常数是程序中不可修改的固定值,二者均为IEC61131-3标准的核心元素,也是CoDeSys等编程软件的通用规范。本文详解关键字的分类与使用禁忌,以及8类常用常数的书写规则。一、关键字:PLC程序的“保留字”,不可挪用的结构定义词
关键字是特征化词法单元,用于定义程序结构、启动/终止软件元素,是编译器识别程序逻辑的关键,核心规则与分类如下:
[*]核心使用禁忌:不可作为变量名、扩展名(如TON、VAR不可用于命名);无空格,为连续字符。
[*]核心分类(CoDeSys常用)
关键字
说明
关键字
说明
PROGRAM
END_PROGRAM
程序段开始程序结束
EN,ENO
使能输入/输出
FUNCTION
END_FUNCTION
函数段开始
函数段结束
TRUE
FALSE
逻辑真
逻辑假
FUNCTION_BLOCK
END_FUNCTION_
BLOCK
功能块段开始
功能块段结束
TYPE
END_TYPE
数据类型段开始,
数据类型段结束
VAR
END_VAR
内部变量段开始变量段结束
STRUCT
END_STRUCT
结构体开始,
结构体结束
VAR_INPUT
END_VAR
输入变量段开始变量段结束
IFTHENEISIF
ELSEEND_IF
IF语句
VAR_OUTPUT
END_VAR
输出变量段开始变量段结束
CASE OFELSE
END_CASE
CASE语句
VAR_IN_OUT
END_VAR
输入输出变量段开始变量段结束
FORTOBYDO
END_FOR
FOR循环语句
VAR_GLOBAL
END_VAR
全局变量段开始变量段结束
REPEAT UNTIL
END_REPEAT
REPEAT循环语句
CONSTANT
常数变量
WHILEDO
END_WHILE
WHILE循环语句
ARRAY OF
数组
RETURN
跳转返回符
AT
直接地址
NOT,AND,OR,XOR
逻辑操作符
[*]程序结构关键字(配对使用):PROGRAM/END_PROGRAM、FUNCTION/END_FUNCTION、FUNCTION_BLOCK/END_FUNCTION_BLOCK(定义程序/函数/功能块范围)。
[*]变量声明关键字(配对使用):VAR/END_VAR(内部)、VAR_INPUT/END_VAR(输入)、VAR_OUTPUT/END_VAR(输出)、VAR_IN_OUT/END_VAR(输入输出)、VAR_GLOBAL/END_VAR(全局)。
[*]数据类型关键字(配对使用):TYPE/END_TYPE、STRUCT/END_STRUCT、ARRAY OF(数组)。
[*]逻辑控制关键字(配对/单独):IF/THEN/ELSE/END_IF、CASE/OF/END_CASE、FOR/TO/DO/END_FOR(循环判断);TRUE/FALSE(逻辑值)、EN/ENO(使能输入输出)。
[*]操作/跳转关键字:NOT/AND/OR/XOR(逻辑运算)、RETURN(跳转返回)、AT(直接地址)。
3.扩展保留关键字:标准数据类型(BOOL、INT、REAL等)、标准函数/功能块名(SIN、TON、RS等)、指令表操作符(LD、ADD、GT等)均为保留关键字。
二、常数:程序中不可修改的固定值,按类型遵循专属书写规则
常数又称数值文字,分为基础数值常数和特殊类型常数,书写格式为<类型>#<数值>(类型可省略,默认最小数据类型),核心要求:数值必须匹配指定数据类型,否则编译器报错。以下为8类高频常数的详细规范:
数值文字类型
表示方法
示例
整数文字
[整数类型名#]符号整数或二(八、十、十六)进制整数
INT#-34,UINT#32
二进制整数
2#0010_0010(34)
八进制整数
8#77(63)
十六进制整数
16#E5(229)
实数
[实数类型名#]符号整数.整数[指数]
REAL#4.94,6.3e-7
符号整数.整数
3.141592
布尔数
[布尔类型名#]0或1,False或True
0,1,True,BOOL#1
[*]数值常数:支持二进制(2#)、十进制(直接写)、十六进制(16#),可加下划线排版(如2#1010_0011);支持整数(INT#-34)和无符号整数(UINT#32)。
[*]BOOL常数:逻辑值,仅TRUE/1(真)、FALSE/0(假),二者等价。
[*]TIME常数:格式T#<时间>(T/t可替换为TIME/time),时间单位按d→h→m→s→ms排序(可省略),如: TIME1:= T#14ms;
TIME2:= T#100S12ms;(*最高单位的值可以超出其限制*)
TIME3:= t#12h34m15s;
[*]DATE常数:格式D#<年-月-日>(D/d可替换为DATE/date),如D#1980-02-29,DATE#1996-05-06 。
[*]TIME_OF_DAY(TOD)常数:格式TOD#<时:分:秒>(秒可为小数),如TOD#05:30:35.28,用于表示一天内的具体时间。
[*]DATE_AND_TIME(DT)常数:日期+时间组合,格式DT#<年-月-日-时:分:秒>,如DT#2025-01-01-08:00:00。
[*]REAL/LREAL常数:浮点数,支持十进制小数(3.14)和指数形式(6.3e-7),采用美国格式(小数点分隔,无千分位)。
[*]STRING常数:格式'<字符内容>',支持空格/特殊字符;$为特殊字符前缀。
[*]两位十六进制数`表示ASCII码。
[*]类型符,对IEC 常数,有可能使用最小的数据类型。如必需使用另一种数据类型。则可借助于类型符而不需要显示地声明常数。为此,常数可使用一个前缀表示,该前缀决定了其类型。
<Type>:指定所要求的数据类型有 BOOL、SINT、USINT、BYTE、INT、UINT、WORD、DINT、UDINT、DWORD、REAL 及LREAL。
<Literal>:指定常数。输入的数据必须与<Type>下指定的数据类型相匹配。
如果常数不能保证在不丢失数据的情况下转换为目标类型,系统将发出一个出错信息。类型符可用于一般常数。
三、实用技巧:类型符的灵活使用
可通过类型符前缀指定常数数据类型(如REAL#4.94、BYTE#255),无需显式声明;若常数无法无损转换为目标类型,系统将触发错误提示,有效避免数据丢失。
文末小结
关键字的核心是**“不挪用、记配对”,常数的核心是“记格式、匹配类型”。新手可先掌握高频关键字(如VAR、TON、IF)和常用常数(TIME、BOOL、数值),后续随编程经验逐步拓展。
页:
[1]