ST语言(结构化文本 Structured Text)编程手册_第1页
ST语言(结构化文本 Structured Text)编程手册_第2页
ST语言(结构化文本 Structured Text)编程手册_第3页
ST语言(结构化文本 Structured Text)编程手册_第4页
ST语言(结构化文本 Structured Text)编程手册_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ST语言(结构化文本StructuredText)编程手册依据:IEC61131-3国际标准;适用于Codesys、汇川、倍福、施耐德、欧姆龙、三菱GXWorks、西门子SCL(SCL为ST的厂商实现版本),语法主体通用,仅部分内置库存在厂商差异。面向PLC工程师、自动化工程师,定位为基础语法手册+标准样例+工程规范。一、概述ST(StructuredText,结构化文本)是IEC61131-3定义的文本型PLC编程语言,语法源自Pascal,适合复杂算法、批量运算、数据处理、通信解析、顺控状态机开发;可和LD、FBD、SFC混合编程。优势:可读性强、适合复杂数学逻辑、便于封装FB复用、方便版本管理短板:纯联锁逻辑直观性不如梯形图注意:西门子叫SCL,属于ST的厂商方言;Codesys、汇川、倍福为原生标准ST。二、词法基础2.1注释st

注释写法

//单行注释

(*多行注释

支持换行*)2.2标识符规则字母、数字、下划线,不能以数字开头不区分大小写(标准ST,部分厂商可设置区分)禁止使用关键字:IF、THEN、ELSE、ELSIF、END_IF、CASE、OF、FOR、WHILE、REPEAT、UNTIL、RETURN、EXIT、VAR、FUNCTION、FUNCTION_BLOCK、PROGRAM、TYPE、END_TYPE2.3常量写法st

常用常量

i:=10;//INT

r:=3.14;//REAL

b:=TRUE;//BOOL

s:='HELLOST';//STRING

dt:=DT#2026-10-30T12:00:00;//DATE_AND_TIME三、基础数据类型(IEC标准)类型说明BOOL布尔:TRUE/FALSEBYTE/WORD/DWORD/LWORD8/16/32/64位无符号SINT/INT/DINT/LINT有符号整数USINT/UINT/UDINT/ULINT无符号整数REAL/LREAL单精度/双精度浮点数STRING字符串TIME时间:T#10s、T#5m30sDATE/TIME_OF_DAY/DT日期、时刻、日期时间衍生类型:数组ARRAY、结构体STRUCT、枚举ENUM、指针POINTER、引用REF_TO。四、变量声明(核心)变量块必须成对,以VAR开头、END_VAR结尾。st

变量声明示例

VAR_INPUT

Start:BOOL;

SetSpeed:INT;

END_VAR

VAR_OUTPUT

Run:BOOL;

ActSpeed:INT;

END_VAR

VAR_IN_OUT

SetPoint:REAL;

END_VAR

VAR//内部静态变量(FB静态,OB/FC无记忆)

Timer1:TON;

Count:INT:=0;//初始化赋值

END_VAR

VAR_TEMP//临时变量,每次调用不保存,FC常用

TempCalc:REAL;

END_VAR:=赋值;=>输出参数传递(FB调用)初始化仅在首次上电执行,循环扫描不会重复赋值五、运算符与优先级(从高到低)括号()一元:NOT、-乘除:*、/、MOD加减:+、-比较:>、<、>=、<=、=、<>逻辑与AND逻辑异或XOR逻辑或ORst

运算符示例

Result:=(A+B)*10MOD5;

Flag:=(Speed>50)ANDEnable;六、控制语句(标准语法)6.1IF分支st

IF示例

IFStartANDNOTFaultTHEN

Run:=TRUE;

ELSIFStopTHEN

Run:=FALSE;

ELSE

Run:=Run;//保持

END_IF;关键:关键字是ELSIF(不是ELSEIF),这是ST标准写法。6.2CASE状态机(顺控首选)st

CASE状态机

CASEStepOF

0:

//初始态

IFStartTHENStep:=1;END_IF;

1:

Run:=TRUE;

IFTimer1.QTHENStep:=2;END_IF;

2:

Run:=FALSE;

ELSE

Step:=0;//异常复位

END_CASE;6.3FOR循环(已知次数)st

FOR示例

FORi:=0TO9DO

Buffer[i]:=0;

END_FOR;

//步长STEP

FORi:=0TO100STEP10DO

END_FOR;6.4WHILE(先判断,条件满足才执行)st

WHILE示例

WHILE(i<100)DO

i:=i+1;

END_WHILE;6.5REPEAT(先执行一次,后判断)st

REPEAT示例

REPEAT

i:=i+1;

UNTILi>=100

END_REPEAT;⚠️注意:PLC循环严禁死循环!PLC是周期扫描,死循环会触发看门狗报错停机;循环内尽量加EXIT保护。EXIT跳出当前循环;RETURN直接退出当前FC/FB。st

循环保护

FORi:=0TO999DO

IFFaultTHENEXIT;END_IF;

END_FOR;七、FUNCTION/FUNCTION_BLOCK/PROGRAM7.1FUNCTION函数(无记忆,无内部静态变量)st

函数定义

FUNCTIONCalcArea:REAL

VAR_INPUT

Width:REAL;

Height:REAL;

END_VAR

CalcArea:=Width*Height;

END_FUNCTION调用:Area:=CalcArea(Width:=10.0,Height:=20.0);7.2FUNCTION_BLOCK功能块(有状态、有记忆)st

功能块定义

FUNCTION_BLOCKFB_Motor

VAR_INPUT

Start:BOOL;

Stop:BOOL;

END_VAR

VAR_OUTPUT

Run:BOOL;

END_VAR

VAR

T1:TON;

END_VAR

IFStartTHEN

Run:=TRUE;

ELSIFStopTHEN

Run:=FALSE;

END_IF;

T1(IN:=Run,PT:=T#5s);

END_FUNCTION_BLOCK调用(必须实例化):st

功能块调用

VAR

Motor1:FB_Motor;

END_VAR

Motor1(Start:=DI_Start,Stop:=DI_Stop,Run=>DO_Run);7.3PROGRAM程序(OB级,分配给PLC任务周期执行)st

程序定义

PROGRAMMain

VAR

MotorA:FB_Motor;

END_VAR

MotorA(Start:=StartBtn,Stop:=StopBtn);

END_PROGRAM八、自定义类型:数组、结构体、枚举8.1枚举ENUMst

枚举定义

TYPE

State_Enum:(INIT,RUN,STOP,FAULT);

END_TYPE

VAR

Step:State_Enum;

END_VAR8.2结构体STRUCTst

结构体定义

TYPE

MOTOR_STRUCT:

STRUCT

Enable:BOOL;

SetSpeed:INT;

ActSpeed:INT;

Fault:BOOL;

END_STRUCT;

END_TYPE

VAR

M1:MOTOR_STRUCT;

END_VAR

//访问

M1.Enable:=TRUE;8.3数组ARRAYst

数组定义

VAR

DataBuf:ARRAY[0..31]OFINT;

END_VAR

DataBuf[0]:=100;多维数组:ARRAY[0..7,0..15]OFREAL;九、定时器、计数器标准调用样例st

TON与CTU调用

VAR

T_Delay:TON;

C_Up:CTU;

END_VAR

//TON:IN触发,PT预设时间,Q输出

T_Delay(IN:=Run,PT:=T#3s);

Flag_Delay:=T_Delay.Q;

//CTU上升沿计数

C_Up(CU:=RiseSignal,R:=Reset,PV:=100);

Cnt_Val:=C_Up.CV;说明:TON/TOF/TP/CTU/CTD/CTUD是IEC标准FB,各平台均支持,仅个别库命名存在差异。十、编程规范(工程落地强制推荐)变量命名:驼峰/下划线风格,见名知义,禁止a、b、temp1无意义命名每个FB单一职责(单一功能原则),一个FB不要同时做电机+配方+通信状态机优先CASE,不使用大量嵌套IF循环尽量短,大批量数据处理建议拆到多个扫描周期输出变量建议先复位、再置位,避免锁存逻辑混乱所有FB实例必须单独定义,禁止匿名调用注释写为什么,不要重复翻译代码本身故障码、状态码统一用枚举,不要硬编码数字魔法值十一、兼容性与常见坑关键字:标准是ELSIF,不要写ELSEIF(C语言习惯,会编译报错)赋值:=,等于判断=;不等<>,不是!=浮点数比较:禁止直接IFr1=r2THEN,存在浮点误差,用差值判断:st

IFABS(r1-r2)<0.001THEN

END_IF;FB和FC区别:FC无记忆、FB有静态记忆,电机、定时器、带状态逻辑必须用FB字符串:标准STRING有长度限制,LSTRING(Codesys/新IEC)长字符串厂商支持不一西门子SCL:大体兼容,但部分内置函数名、AT寻址写法与标准ST有差异,跨平台移植需单独适配十二、综合完整示例:电机启停+延时故障检测st

FB_Motor_FaultDetect完整示例

FUNCTION_BLOCKFB_Motor_FaultDetect

VAR_INPUT

StartBtn:BOOL;

StopBtn:BOOL;

Feedback:BOOL;//电机反馈

FaultRst:BOOL;

END_VAR

VAR_OUTPUT

RunOut:BOOL;

FaultOut:BOOL;

END_VAR

VAR

RunLatch:BOOL;

T_Fault:TON;

END_VAR

//启停自锁

IFStartBtnTHEN

RunLatch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论