CODESYS平台的ST语言笔记
前言:
基于汇川plc软件,底层是CODESYS平台。
这回ST语言正儿八经要用 所以要学,做笔记是为了梳理加深基础要点印象,顺便分享交流学习。
codesys平台包括汇川,英文是不区分大小写。
目录:
一、符号、关键字、操作数、变量介绍
二、声明定义、运算符介绍
三、基本语法介绍
四、高级一点的语句
正文:
一、符号、操作数、变量
1.符号认识
// (* *) :注释,// (* 注释 *)。
‘’ :字符串,‘Hello!$L’。
“” :UNICODE字符串,“中文”。
:= :赋值,a:=b。
; :语句分隔符,QU:=5*(A+B);QD:=4*(A-B);
.. :范围分隔符,ARRAY(1..2,1..3);
=> :输出连接符,
% :直接变量前缀,%QX1.1。
其他符号 :+-#e.,[]()。
时间符号 :T#、TOD#。
运算符号 :NOT、MOD、+、-、*、/、<、>、&、AND、OR、XOR。
2.关键字
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 结构体段
CONSTANT 常数变量
ARRAY OF 数组
AT 直接地址
EN ,ENO 使能输入,使能输出
TRUE ,FALSE 逻辑真,逻辑假
IF THEN EISIF ELSE END_IF IF 语句
CASE OF ELSE END_CASE CASE 语句
FOR TO BY DO END_FOR FOR 循环语句
REPEAT UNTIL END_REPEAT REPEAT 循环语句
WHILE DO END_WHILE WHILE 循环语句
RETURN 跳转返回符
NOT,AND,OR,XOR 逻辑操作符
BOOL,REAL,INT
SIN,COS,RS,TON
LD,ST,ADD,GT
NOT,MOD,AND
VAR_GLOBAL(全局变量),VAR_TEMP(临时变量),
VAR_STAT(静态变量),VAR_CONFIG(配置变量)。
3.常数
常数语法:<类型># <数值>
<类型>指定所需的数据类型;可能 BOOL, SINT, USINT, BYTE, INT, UINT,
WORD, DINT, UDINT, DWORD, REAL, LREAL 该类型必须是书面的大写字母。
举例:
2#0101,10#123,16#FF,BOOL#TURE,BYTE#12,INT#255,T#12h23m30s90ms,
D#2023-06-16
4.操作数
操作数语法: %<存储器区前缀><长度前缀><数字1>.<数字2>
注释:
%:表示操作数。
存储器区前缀: 表示该操作数的存储位置区域:
I:输入区域,物理输入;Q:输出区域,物理输出;M:内存区域。
长度前缀: 表示操作数的长度
X: Bit,一位,X类型变量类型:BOOL
B: Byte,一个字节,B类型变量类型:BYTE,SINT,USINT,BOOL
W: Word,一个字,W类型变量类型:WORD,INT,UINT
D: Double Word,两个字,D类型变量类型:DWORD,DINT,UDINT、REAL
数字1:变量对应内存的偏移地址
数字2:作为BOOL或者word等类型时,偏移地址后的第几位
例如:%IX0.0表示输入存储区域的二进制数第0个字节第0个bit位。
5.变量
变量常数语法:<标识符>:<数据类型> {:=<初值>};
直接地址变量:< 标识符> AT <地址>:<数据类型> {:=<初始化值>};
6.变量类型
变量类型:
VAR 局部变量 --- R/W
VAR_INPUT 输入变量,由外部提供。 R/W R
VAR_OUTPUT 输出变量,有内部变量提供给外部。 W R/W
VAR_IN_OUT 输入-输出变量。 R/W R/W
VAR_GLOBAL 全局变量,能在所有配置、资源内使用。 R/W R/W
VAR_TEMP 临时变量,程序和功能块内部存储使用的变量。 --- R
VAR_STAT 静态变量。
VAR_EXTERNAL 外部变量
变量属性:
RETAIN 保持型变量,用于掉电保持。
PERSISTENT 保持型变量
VAR RETAIN PERSISTENT
VAR PERSISTENT RETAIN两者功能一样,皆为保持性变量,用于掉电保持
CONSTANT 常量
二、声明、运算符
1.声明定义
ST编程支持的数据类型包括:位(BOOL)、字节(BYTE)、整型(INT)、
双字节整型(DINT)、实数(REAL)、字符串(STRING)和时间(TIME)。
声明变量时需要指定其数据类型。
(1)变量声明
格式如下:
VAR 变量名 : 数据类型;END_VAR
举例如下:
VAR //本地变量 a : BOOL; //a定义为布尔型本地变量 b : BYTE; //b定义为字节型本地变量 c : INT; //c定义为整型型本地变量 d : DINT; //d定义为双字节整型本地变量 e : REAL; //e定义为单精度实数浮点本地变量 f : STRING(20); //f定义为字符串本地变量 g : TIME; //g定义为时间本地变量 END_VAR //结束变量声明
2.运算符
ST编程语言支持基本的
算术运算符(+、-、*、/)(求幂EXPT、求负-)
比较运算符(=、<>、>、>=、<、<=),
逻辑运算符(与AND、或OR、异或XOR、求补NOT)
函数调用 函数名(参数列表,由逗号分隔)
还包括特殊的运算符MOD和DIV,
举例如下:
a := b + c; d := e / f; g := h MOD i; IF j <> k THEN P := m; END_IF
三、语法
1.表达式
2.赋值指令
A:=B++; //把左边值赋给右边。 A S=B; //B接通,A被置位。 A R=B; //B接通,A被复位。
3.功能块调用
功能块实例名:(功能块参数1,功能块参数2);
4.return返回语句
RETURN指令表示当前置条件为TRUE时,离开此POU。
5.选择判断语句
①IF-THEN-ELSEIF-ELES-ENDIF完整版 IF <条件1布尔表达式> THEN //如果条件1=1则执行语句1;否则执行语句3. <语句 1>; ELSEIF <条件2布尔表达式> //如果条件2=1则执行语句2; <语句内容 2>; . //可多重嵌套,省略 . . ELSEIF //如果条件n=1则执行语句n; <条件n布尔表达式> <语句内容n>; ELSE //如果条件1=0则执行语句3; <语句内容 3>; END_IF; //结束IF选择语句。 IF控制语句简写版: IF-THEN-IF_END //一个条件一个判断,省略else和再分支。 IF-THEN-ELSEIF-IF_END //一个条件一个判断执行,继续嵌套分支判断执行。 IF-THEN-ELSE-IF_END //一个条件两个判断。 ②CASE语句 CASE <条件变量> OF //条件变量=数值n,就执行对应语句,否则执行语句8,结束case选择控制语句。 <数值 1>: <语句内容 1>; <数值 2>: <语句内容 2>; <数值 3, 数值 4, 数值 5>: <语句内容 3>; <数值 6 .. 数值 10>: <语句内容 4>; ... <数值 n>: <语句内容 n>; ELSE <ELSE 语句内容8>; END_CASE;
6.循环语句
FOR <变量> := <初始值> TO <目标值> {BY <步长>} DO<语句内容> END_FOR;
举例如下:
FOR Counter:=1 TO 5 BY 1 DO //假设Var1初始值为1,循环五次则Var1=1*(2*2*2*2*2)=32。
Var1:=Var1*2;
END_FOR;
Erg:=Var1;
WHILE <布尔表达式><语句内容> ;END_WHILE;
举例如下:
WHILE Counter<>0 DO //假设Var1初始值为1,Counter初始值等于5,
Var1:= Var1*2; //循环一次则Var1翻倍一次,
Counter := Counter-1; //循环一次则Counter减一,
END_WHILE //循环五次则Counter=0,则循环结束Var1=32。
REPEAT <语句内容> UNTIL <布尔表达式> END_REPEAT;
举例如下:
REPEAT
Var1:=Var1*2; //执行循环体语句
Counter:=Counter-1; //执行循环体语句
UNTIL Counter=0; //Counter=0不成立则循环执行循环体语句,直到成立结束循环。
END_REPEAT;
7.跳转语句
(1)EXIT; 用于迭代语句退出循环。 举例如下: FOR i := 0 TO 9 DO //FOR循环开始 IF (Input[i] = TRUE) THEN //条件判断 EXIT; //条件若成立,执行EXIT语句,退出FOR循环控制语句。 END_IF; END_FOR; (2)CONTINUE; 用于迭代语句结束本次循环。 举例如下: //提前结束本轮循环,并重新开始下一轮循环。 FOR Counter:=1 TO 5 BY DO INT1:=INT1/2; IF INT1=0 THEN CONTINUE; END_JF Var:=Var1/UBT1L END_FOR; Erg:=Var1; (3)<标识符>: JMP <标识符>; 任意跳转到标识符位置执行。
8.函数封装声明调用
FUNCTION 函数名 : [返回值数据类型] VAR_INPUT // 输入参数 END_VARVAR_OUTPUT // 输出参数 END_VARVAR // 私有变量 END_VAR // 执行该代码块 END_FUNCTION
9.其他
空语句 ;
注释 多行注释(* *) 单行注释//
四、高级一点的东西
1、结构体:多种数据类型的变量集合。 举例
TYPE St_PointAxis : //轴结构体定义声明 STRUCT //参数如下 //输入 i_xReset : BOOL; //轴复位 i_xSerOn : BOOL; //轴使能 i_xStop : BOOL; //轴停止 i_xHalt : BOOL; //轴暂停 i_xHome : BOOL; //轴回原 //输出 o_xResetDone : BOOL; //轴复位完成 o_xResetErr : BOOL; //轴复位失败 //指针 pAxis : POINTER TO AXIS_REF_ETC_DS402_CS;//轴地址 pServer : POINTER TO ETCSlave;//站地址 END_STRUCT //结构体段结束 END_TYPE //数据段结束
2、枚举:列举一组自定义字符表达常数值。 举例
TYPE Enum_StateMachine ://状态机枚举 ( 未就绪 := 0, 故障 := 1, 初始化中 := 2, 待机 := 3, 手动 := 4, 自动 := 5 ); END_TYPE
3、数组
4、共用体(联合体):
//此集合体的每一个变量共用内存和存储位置,一旦其中一个变量数值发生了变化,其他变量会一致变化。 TYPE <联合体名称>:UNION <变量的声明1> <变量的声明2> END UNION END TYPE
5、别名
6、指针