PLC_ST语言


PLC—ST语言基础

语言标准 IEC 61131

  1. IEC 61131-1: 通用信息
  2. IEC 61131-2: 装置要求与测试
  3. IEC 61131-3: 编程语言
  4. IEC 61131-4: 用户导则
  5. IEC 61131-5: 通信服务规范
  6. IEC 61131-6: 功能安全
  7. IEC 61131-7: 模糊控制编程软件工具实施
  8. IEC 61131-8: IEC 61131-3 语言的应用和现实导则
  9. IEC 61131-9: 小型传感器和执行器的单点数字通信接口技术
  10. IEC 61131-10: 可编程逻辑控制器开放XML交换格式

变量

变量命名规则

  1. 以字母/下划线开头,以字母/数字结尾
  2. 不区分字母大小写
  3. 不存在两个/两个以上连续下划线
  4. 不含空格
  5. 不使用ST语言关键字
  6. 一般不超过32字符
  7. 尽量不使用与物理地址相似的变量名

变量属性

|PLC常见属性|
变量属性属性说明变量属性属性说明
VAR局部变量VAR_OUT输出变量
VAR_GLOBAL全局变量VAR_IN输入变量
VAR_RETAIN保持型变量VAR_TEMP临时变量
VAR_CONSTANT常量VAR_STAT静态变量
VAR_IN_OUT输入输出变量
VAR_变量A 变量B组合变量:不冲突可任意组合

变量定义:

VAR_Global CONSTANT
    PI : REAL := 3.1415926
END_VAR

常见变量类型

|数据类型|
变量类型类型名称变量类型类型名称
BOOL布尔WORD字型(16位)
DWORD双字(32位)INT整型(16位)
DINT双整型(32位)REAL实型(32位)
USINT无符号短整型(8位)UDINT无符号双整型(32位)
UINT无符号整型(16位)LINT长整型(64位)
BYTE字节(8位)SINT短整型(8位)
LWORD长字(64位)

|字符串类型|

变量类型类型名称变量类型类型名称
CHAR字符型WCHAR宽字符型
STRING字符串WSTRING宽字符串型

|常见转义字符|

转义字符意义转义字符意义
$$美元$ R回车符
$ L换行符$ T制表符
$ N新行符$ P换页符

时间数据类型

|时间标识符|

标识符含义标识符含义
ms毫秒s
mh
d

|时间数据类型表|

含义类型名称语法结构存储空间
时间型TIMET#1h1m1s32位(时基ms)
时刻型TIME_OF_DATETOD#1:1:132位(表示一天中某时刻)
日期型DATEDT#2025-1-132位(表示日期后可加时刻)

扩展数据类型

数组
VAR
    ARR1 : ARRAY[0..9] OF REAL;                 //一维数组
    ARR2 : ARRAY[0..9, 2..5] OF INT;            //二维数组
    ARR3 : ARRAY[0..9, 2..5, 3..8] OF WORD      //三维数组
END_VAR
指针
Pointer(6字节)
Pointer存储区代码编号
存储区代码(16#)存储区说明
B#16#1PIS7-1500 外设输入
B#16#2PQS7-1500 外设输出
B#16#81I过程输入映像区
B#16#82Q过程输出映像区
B#16#83M位存储区
B#16#84DB全局数据块
B#16#85DI背景数据块
B#16#86L局部数据存储区
B#16#87V先前局部数据存储区

自定义数据类型

结构体 (STRUCT)
TYPE 类型名 :
    STRUCT
    属性变量 : 类型
    END_STRUCT
END_TYPE

数据类型转换

  1. 隐式转换 (PLC内部自动执行)
  2. 显式转换 (使用TO关键字组合两类型的方法实现)
VAR
    DATA1 : INT := -12;
    DATA2 : WORD := 65524;
END_VAR

DATA2 := INT_TO_WORD(DATA1)

流程控制

条件选择

条件

IF 条件 THEN
    分支;
ELSIF 条件1 THEN
    分支1;
ELSE
    分支2;
END_IF;

选择

CACE 变量 OF
    变量值1:分支1;
    变量值2:分支2;
END_CACE;

循环

FOR

FOR 循环变量 := init_V TO end_V BY 步长 DO
    循环内容;
END_FOR;

WHILE

WHILE 语句 DO
    循环内容;
END_WHILE;

REPEAT

REPEAT
    循环内容;
UNTIL 条件
END_REAPEAT;

退出和继续流程块

EXIT     退出
CONTINUE 继续

ST基础指令

边沿指令

指令原型含义指令原型含义
”R_TRIG_DB”(CLK:= bool_in, Q=> bool_out);上升沿”F_TRIG_DB”(CLK:= bool_in, Q=> bool_out);下降沿

定时器指令

指令原型含义
TP(IN:=bool_in, PT:=time_in, Q=>bool_out, ET=>time_out);脉冲定时器
TON(IN:=bool_in, PT:=time_in, Q=>bool_out, ET=>time_out);延时接通定时器
TOF(IN:=bool_in, PT:=time_in, Q=>bool_out, ET=>time_out);延时断开定时器
TONR(IN:=bool_in, R:=bool_in, PT:=time_in, Q=>bool_out, ET=>time_out);保持型延时接通定时器
RESET_TIMER(ICE_TIMER_IN);复位定时器
PRESET_TIMER(PT:=time_in, TIMER:=ICE_TIMER_IN);定时器预设值设置

计数器指令

指令原型含义
CTU(CU:=bool_in, R:=bool_in, PV:=in, Q=>bool_out, CV=>out);加计数
CTD(CD:=bool_in, LD:=bool_in, PV:=in, Q=>bool_out, CV=>out);减计数
CTUD(CU:=bool_in, CD:=bool_in, R:=bool_in, LD:=bool_in, PV:=in, QU=>bool_out, QD=>bool_out, CV=>out);加减计数

数学指令

指令原型含义指令原型含义
SIN()正弦COS()余弦
SQR()平方MAX()最大值
MIN()最小值

读写存储器指令

指令原型含义
PEEK(area:=byte_in, dbNumber:=dint_in, byteOffset:=dint_in)存储器读指令
PEEK_BOOL(area:=byte_in, dbNumber:=dint_in, byteOffset:=dint_in, bitOffset:=int_in)存储器位读指令
POKE(area:=byte_in, dbNumber:=dint_in, byteOffset:=dint_in, value:=byte_in)存储器写指令
POKE_BOOL(area:=byte_in, dbNumber:=dint_in, byteOffset:=dint_in, bitOffset:=int_in, value:=bool_in)存储器位写指令
POKE_BLK(area_src:=byte_in, dbNumber:=dint_in, byteOffset_src:=dint_in, area_dest:=byte_in, dbNumber_dest:=dint_in, byteOffset_dest:=dint_in, count:=dint_in)存储器块写指令