跳到主要内容

1.3 语言元素

1.3.1 字符集

  • 通用编码字符集包括了其他所有字符集。它保证了与其他字符集的双向兼容,即,如果你将任何文本字符串转换为UCS格式,然后再转换回原编码,你不会丢失任何信息。UCS包含了已知语言的所有字符。
  • 根据国家标准的 GB/T15969.3-2005,可编程控制器使用的文本和图形类编程语言中的文本元 素应依据国家标准 GB1988 字符的“基本代码表”的 3-7 列字符组成,并根据 GB2312-1980《信 息交换用汉字编辑字符集基本集》来表示汉字。
  • 除了注释、字符串字面量和字符串变量值以外,字母的大小写具有相同的意义。例如,Control 与 CONTROL 是相同的变量名或标识符。

1.3.2 标识符

  • 标识符:由字母、数字和下划线字符的一个串,并以字母或下划线字符开头。但是不允许下划线结尾,在标识符中字母的字体和大小写没有意义。同时,标识符不允许以多个下划线开头或多个内嵌的连续下划线。天行PLC中,命名空间,变量,GVS,PU,FB,FC等均遵守此规范。
  • 用于命名各种变量、程序、配置、资源等。
序号特性描述举例
1大写字母和数字W4;
ER8;
RT8
2大写和小写字母、数字、内嵌的下划线Var2;
Var2_int;
Var2_int_9;
var1,var_int
3大写和小写字母、数字、前导或内嵌的下划线_Var2;
_12_int

1.3.3 注释

  • 提高代码的可读性:注释可以帮助其他开发人员更好的理解代码的逻辑和意图,节省阅读代码的时间。

  • 方便代码维护:随着项目的迭代,代码可能会发生更改和修复。良好的注释可以帮助开发人员更容易定位问题和进行修改。

  • 注释相关说明如下表所示:

注释描述举例
单行注释//...x:=12;
//给变量x赋值为12
多行注释(*....*)(*a:=10;
b:=true;*)
将这两行代码注释掉
多行注释/*....*//*a:=10;
b:=true;*/
将这两行代码注释掉
嵌套注释用(*..(*..*)..*)(*(*b:=true;*)*)
完成嵌套注释
嵌套注释用/*../*..*/..*//*/*b:=true;*/*/
完成嵌套注释

1.3.4 字面量(常数)

  • 字面量:字面量就是一个值,表示某些常数的值,有三种类型:数字直接量,字符串直接量,时间直接量。在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。
  • 数字直接量:定义为十进制数或基底数。在一个给定执行中,每种数字直接量的最大位数足以表示该直接量所表示的所有数据类型的值的整个范围。
  • 数字直接量分为两类:整数直接量和实数直接量。整数直接量基底为十进制,也能以2或16为基底表示。对于基底是16的整数直接量,使用由A至F组成的一组扩展数字,这组数字代表十进制的10至15。基底数不应包含前置符“+”或“-”。他们被解释为位串直接量。实数数值以小数点的存在来区分。
  • 数字直接量的特性和举例如下表
序号描述举例说明
1整型直接量-12
123_4
+986
123_4 等于 1234
2实数直接量0.0
0.369
3.141592_6
3.1415926 等于 3.141592_6
3实数直接量扩展-1.34E-12,-1.34e-12
1.0E+6,1.0e+6
1.334E6,1.334e6
 e(E)不分大小写
+ 可以省略
4二进制直接量2#1111_1111
2#1110_0000
二进制全1,代表十进制255
二进制111代表十进制224
516进制直接量16#FF 或者16#ff
16#E0或者16#e0
16进制FF代表十进制255
16进制E0代表十进制224
6布尔0或1数字0或1
7布尔真或假TRUE FALSE
8类型直接量INT#-12
WORD#16#AFF
WORD#1234
1234=16#4D2
UINT#16#89AF
CHAR#‘A'
BOOL#0  
BOOL#1  
BOOL#FALSE  
BOOL#TRUE
  • 字符串直接量

    • 单字节:占一个字,单字节的字符串直接量是零个或多个字符的序列,并以单引号字符开头或结尾。在单字节的字符串中,美元符号与随后的2个十六进制数字的三字符组合可理解为8位字符码的十六进制表示。
    • 单字节字符串直接量如下表所示:
    序号描述举例
    1空字符(长度为零)''
    2单个Char'a'
    3空格' '
    4单引号'$''
    5美元符号'$$'
    7换行,输入行'$L' or '$l'
    8新行'$N' or '$n'
    9换页,输入页'$P' or '$p'
    10回车'$R' or '$r'
    11TAB跳格键'$T' or '$t'
    12支持带有$字符和两个16进制字符的单个字节'$0A'
    13字符串类型STRING#'OK'
    14字符类型CHAR#'X'
  • 时间直接量

  • 持续时间数据应由关键字T#、TIME#或LTIME#在左边界定。持续时间数据要支持按天、小时、分、秒和毫秒(LTIME#支持纳秒)以及它们的任意组合表示,单位允许带下划线字符分隔,时间单位如秒、毫秒等可用大写或小写字母表示。

  • 关于时间直接量固有元素如下表所示:

序号描述举例
1d
2h小时
3m分钟
4s
5ms毫秒
6us微秒
7ns纳秒
  • 时间直接量长短前缀常见表示如下表所示:
序号描述举例
1短前缀T#14ms T#-14ms LT#14.7s T#14.7m
T#14.7h t#14.7d t#25h15m
t#5d14h12m18s35ms
lt#12h4m34ms230us400ns
2短前缀(单位带有下划线字符分隔)t#25h_15m
t#5d_14h_12m_18s_35ms
3长前缀TIME#14msTIME#-14ms
time#14.7s
LTIME#5m30s500ms100.1us
4长前缀(单位带有下划线字符分隔)TIME#25h_15m
ltime#5d_14h_12m_18s_3.5ms
LTIME#34s_345ns
  • 时间和日期直接量长短前缀常见表示如下表所示:
序号描述举例
1日期(长前缀)DATE#1984-06-25
date#2010-09-22
2日期(短前缀)D#1984-06-25
3时间(长前缀)TIME_OF_DAY#12:36:45.32
4时间(短前缀)TOD#15:15:15.36
5时间和日期(长前缀)DATE_AND_TIME#1956-03-14-12:56:22
6时间和日期(短前缀)DT#2021-03-25-14:56:23
注意

只有最小单位不支持浮点数

1.3.5 关键字

  • 关键字是位移字符组合,它被用作单独的语法元素。

  • 包括:基本数据类型,语言元素等。

  • 关键字如下表所示:

序号说明关键字
1布尔BOOL
2字节BYTE
3WORD
4双字DWORD
5长字LWORD
6短整型SINT
7无符号整型UINT
8整型INT
9无符号整型UINT
10双整型DINT
11无符号双整型UDINT
12长整型LINT
13无符号长整型ULINT
14实数REAL
15长实数LREAL
16单字节字符CHAR
17字符串STRING
20持续时间(ms)TIME
21日期DATE
22日时TIME_OF_DAY
23日时TOD
24日期和时间DATE_AND_TIME
25日期和时间DT
26长持续时间LTIME
32用户自定义类型TYPE
33类型结束定义END_TYPE
34数组ARRAY ARRAY
35数组或CASE语句  OFOF
58逻辑真TRUE
59逻辑假FALSE
60GVS内变量段开始GLOBAL VARIABLE
61PU内变量段开始VAR
62PU内临时变量段开始TEMP
63输入变量段开始INPUT
64输出变量段开始OUTPUT
65输入输出变量段开始INOUT
66GVS内变量段开始GLOBAL CONSTANT
67常量LOCAL CONSTANT
68掉电保存变量RETAIN
69取反(求反码)NOT
70模运算(表示a除以b的余数)MOD
71“与”运算AND
72“异或”运算XOR
73“或”运算OR
74引入 IF 指令IF
75引入 IF指令的指令部分THEN
76IF 指令的选择条件ELSIF
77IF 和 CASE 语句中的选择分支ELSE
78结束 IF 指令END_IF
79引入 CASE 语句CASE  
80结束 CASE 语句END_CASE
81引入 FOR 语句FOR
82定义 FOR 语句的整个范围值TO
83FOR 循环的增量BY
84在 FOR 和 WHILE 指令中引入 指令部分DO
85结束 FOR 语句END_FOR
86引入 REPEAT语句 REPEAT
87结束 REPEAT语句的指令部分 UNTIL
88结束 REPEAT 语句END_REPEAT
89引入 WHILE 指令WHILE
90结束 WHILE 指令END_WHILE
91循环中终止当前程序通道,进入下一次循环CONTINUE
92退出循环的指令EXIT
93引入 GOTO 语句GOTO
94退出本程序单元RETURN

1.3.6 分界符

  • 用在“说明”或语句中起隔离、标识等作用,逗号用于隔开多个变量;分号表示ST中一天语句的结束;
  • 星号+括号(**)之间存放对程序和语句的解释部分;冒号加等号表示ST编程语句中的赋值等。
  • 常用分解符合集如下表所示:
分界符应用场合备注和示例
空格可以再PLC程序中任何位置插入空格不允许再关键字、文字、标识符和枚举值中直接插入空格
TAB可以再PLC程序中任何位置插入TAB不允许在关键字、文字、标识符和枚举值中直接插入TAB
+十进制的前缀符号(正数);
加操作符
+456、+147;
22+78
-十进制数的前缀符号(负数);
年-月-日的分隔符 ;
减操作符
-753;
D#2024-05-13;
15-2
#基底数的分隔符;
数据类型分隔符;
时间文字的分隔符
2#1110;
SINT15;
T#20ms
.正数和小数的分隔符;
分级寻址地址符;
结构元素分隔符;
功能块实例结构分隔符;
全局命名空间;
命名空间分隔符
3.14;IABC.3//IBC是位串数据类型;
Channel[0].type/abc.number;
TON1.Q;
SYS.SR
E/e指数分界符1.0e+6
' '字符串开始/结束符'HelloWorld'
$串中特殊字符的开始'$L'表示换行;
'$R'表示回车
时刻文字分割符;
变量/类型分隔符
TOD#12:41:21.11;
Test:INT
:=输入变量连接操作符;
赋值操作符
INT_1(SINGLE:=Z2,PRIORITY:=1)
()子范围分节符;
初始化重复因子;
指令表修正符;
函数自变量;
子表达式分级;
功能块输入表分界符
DATA:INT(-100..100);
ARRAY[1..2,1..3] OF INT:=1,2,3(4),6;
(A>B);
ARlimit(Var1);
(a
(b-c)+d);
TON_1(IN:=a,PT:=T#5m)
[]数组下标分界符ARRAY[1..2,1..3] OF INT;
MMOD_5_CFG.CH[5].Range:=BI_10V
数组下角标分隔符;
功能块初始值分隔符;
功能块输入表分隔符;
函数自变量表分隔符;
Case至表分隔符
ARRAY[1..2,1..3] OF INT := 1,2,3(4),6;
TON_1(IN:A,pt:=50ms)
SR_1(S1:=A,REAL:=B);
LIMIT(MN:=4,IN=A,MX:=20)
CASETEP OF 1,5:DISPLAY:=FALSE
;语句分隔符
a:=15
..数组范围分隔符;
子范围;
Case范围分隔符
ARRAR[1..2];
DATA:INT(-1000..1000);
CASETEPOF(1..5):display:=FALSE
%直接表示变量的前缀%IW0
=>输出连接操作符C10(CU:=iNPUT,Q=>Out)