当前位置:文档之家› ST结构化文本

ST结构化文本

结构化文本语言学习心得一、工程的简介和建立工程1.工程文件的结构:工程文件的后缀名为pro,在新工程中建立的第一个程序结构单元(Program Organization Unit)将被自动命名为PLC_PRG,这个程序结构单元就类似于C语言中的主程序。

在PLC_PRG中可以调用各种函数及功能块,而函数和功能块都属于程序结构单元。

PLC-1131-3 DS能够区分在同一工程中的不同对象:程序结构单元(POU)数据类型(data types)资源(resources)2.工程的设置:1) 首先应该设置PLC的输入输出以保证工程中使用的地址的准确性。

2)接着建立解决问题的程序结构单元3) 选择适当的语言编写程序4) 写好程序之后,对程序进行编译去除程序中的所有错误。

3.工程的测试:当工程之中的所有错误被去除之后激活仿真模式,就是与仿真PLC连接,与此同时将工程下载到PLC中,这样PLC-1131-3 DS就处于在线方式了。

现在能以适当的顺序测试工程了,手动改变输入变量的值,观察输出是否正确。

用PLC-1131-3DS调试程序当程序发生错误时,你可以设置断点。

当处理发生中断时,你就可以及时的在断点处检查所有工程变量的值。

工作在单步方式(singlestep)下,可以检验程序的逻辑错误。

你可以强制输入或输出变量的值。

使用流控制(flowcontrol)可以知道哪些程序段已经执行。

采样轨迹(SamplingTrace)显示变量在长时间的变化过程曲线。

整个工程可以以文本文件的形式导出。

总而言之PLC-1131-3 DS对于PLC编程是一种完善和方便的工具。

4.工程的组成(1)工程(Project)一个工程包括了PLC程序中所有的对象,工程中包含了如下对象:错误!未找到引用源。

∙程序结构单元POUs∙数据类型data types∙资源resources∙库函数libraries(2)程序结构单元(POU)函数 (Functions)错误!未找到引用源。

, 功能块(function blocks)错误!未找到引用源。

和程序(programs)都是程序结构单元(错误!未找到引用源。

POUs)。

每个POU包括了定义变量和程序主体两个部分错误!未找到引用源。

错误!未找到引用源。

程序主体用IEC编程语言编写,其中包括:指令表(IL)结构文本(ST)SFCFBD梯形图(LD).PLC-1131-3 DS 支持所有的标准IEC程序结构单元。

错误!未找到引用源。

错误!未找到引用源。

错误!未找到引用源。

POUs之间能够相互调用,但是不允许递归调用.(3)函数(Function)错误!未找到引用源。

当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。

二.ST结构化文本编程1.定义"结构"是指高水平的结构化编程能力,象一个"结构化的编程";"文本"是指应用文本而不是梯形图和顺序函功能表的能力。

ST语言不能代替其它的语言,每种语言都有它自己的优点和缺点。

ST主要的一个优点就是能简化复杂的数学方程。

2.特点高级文本编程语言结构化的编程简单的标准结构快速高效的编程使用直观灵活与PASCAL类似有计算机编程经验的人可以很容易地使用它符合IEC 61131-3 标准3.功能数字量和模拟量I/O逻辑操作逻辑比较表达式算术运算判断语句机器的状态语句循环语句功能块可选用的动态变量诊断工具4.结构文本基础IF value < 7 THENWHILE value < 8 DOvalue := value + 1;END_WHILE;END_IF;4.1表达式表达式是指返回变量评估值的结构。

表达式由操作符和操作数组成。

操作数可以是常量,变量,调用函数或其它表达式。

4.2赋值操作符通过一个表达式和一个值来给变量赋值。

赋值语句包括位于左边的变量,赋值操 作符":=",及后边需要计算的表达式。

所有的语句,包括赋值语句,必须要以分 号";"结尾。

当这行程序执行后,变量"Var 1"的值是变量"Var 2"的两倍。

4.3注释虽然注释经常被删掉,但它们是源代码中非常重要的一部分。

它们解释了一部分 代码,使程序更易读懂。

注释帮助你或其他人读你的程序,即使过去了很长时 间。

注释不被编译,因此不会影响程序的执行。

注释应该用一对星号和小括号括 起来"(*comment*)"。

4.4操作符优先级如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序)。

操作符按优先级的顺序来执行。

在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符, 等等,直到执行完所有的操作符。

具有相同级别的操作符按照书写顺序从左至右 依次执行。

操作符 符号/语言 优先级括号 ()依次降低函数调用例子 Call argument(s) LN(A), MAX(X), 等 注释 ** 取反 NOT乘 *除 /取模(取除法的余数) MOD加+减-比较<, >, <=, >=等于=不等于<>逻辑与AND逻辑异或XOR逻辑或OR4.5结构文本格式编程格式指令指令类型例子赋值(Assignment) 错误!未找到引用源。

错误!未找到引用源。

A:=B; CV := CV + 1; C:=SIN(X);调用功能块或者函数的返回值(Calling a function block and use of the FB output)错误!未找到引用源。

错误!未找到引用源。

CMD_TMR(IN := %IX5, PT := 300); A:=CMD_TMR.Q返回(RETURN) 错误!未找到引用源。

错误!未找到引用源。

RETURN;IF (条件)错误!未找到引用源。

错误!未找到引用源。

D:=B*B;IF D<0.0 THEN C:=A;ELSIF D=0.0 THEN C:=B;ELSEC:=D;END_IF;CASE(分支)错误!未找到引用源。

错误!未找到引用源。

CASE INT1 OF1: BOOL1 := TRUE; 2: BOOL2 := TRUE; ELSEBOOL1 := FALSE;BOOL2 := FALSE; END_CASE;FOR(循环)错误!未找到引用源。

错误!未找到引用源。

J:=101;FOR I:=1 TO 100 BY 2 DO IF ARR[I] = 70 THENJ:=I;EXIT;END_IF;END_FOR;用结构文本编程格式编写的程序与其它格式的编程语言相比出错概率低,编写的程序具有可读性高的特点。

错误!未找到引用源。

(1)调用功能块(Calling a function block )结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功能在下面的例子中通过分配参数IN 和PT 的值调用一定时器功能块,它的结果变量的值被赋给变量A 。

CMD_TMR(IN := %IX5, PT := 300);A:=CMD_TMR.Q(2)返回指令(RETURN instruction )错误!未找到引用源。

返回指令用来结束函数调用,当条件满足时返回主程序(3)条件指令(IF instruction)使用IF 指令检验是否满足条件,当条件满足时执行相应的的指令语法:IF <布尔表达式_1> THEN<IF_ 指令>{ELSIF <布尔表达式_2> THEN<ELSIF_指令1>..ELSIF <布尔表达式_n> THEN<ELSIF_指令 n-1>ELSE<ELSE_指令>}END_IF;{}里面的内容是可选的 。

如果<布尔表达式1>的返回值为真 (TRUE),那么只有<IF_指令>被执行,而其它的指令不执行。

否则检验<布尔表达式2>的返回值是否为真,这样连续判断<布尔表达WHILE(循环)错误!未找到引用源。

错误!未找到引用源。

J:=1; WHILE J<= 100 AND ARR[J] <> 70 DO J:=J+2; END_WHILE; REPEAT(重复)错误!未找到引用源。

错误!未找到引用源。

J:=-1; REPEAT J:=J+2; UNTIL J= 101 OR ARR[J] = 70 END_REPEAT; EXIT(退出)错误!未找到引用源。

错误!未找到引用源。

EXIT; Empty instruction(空指令) ;式n>的返回值,直到返回值为真时执行对应的指令。

如果执行到最后表达式的返回值也没有为真,那么执行<ELSE_指令>。

例:IF temp<17THEN heating_on := TRUE;ELSE heating_on := FALSE;END_IF;这段程序控制加热功能的开启和关闭,当温度高于17度时不加热,当温度低于17度时就加热。

(4)分支指令(CASE instruction) 错误!未找到引用源。

错误!未找到引用源。

错误!未找到引用源。

错误!未找到引用源。

错误!未找到引用源。

使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中语法:CASE <变量1> OF<=1>: <指令1><=2>: <指令2>...<=n>: <指令n>ELSE <ELSE 指令>END_CASE;CASE指令根据下面的模式处理程序:如果变量的值为i,那么执行<指令i>中的指令。

如果没有相应的变量的值,那么执行ELSE 指令如果需要几个不同的变量值执行相同的指令,那么可以将几个变量值写在一起用逗号隔开,后面接需要执行的指令。

例:CASE INT1 OF1, 5:BOOL1 := TRUE;BOOL3 := FALSE;2: BOOL2 := FALSE;BOOL3 := TRUE;ELSEBOOL1 := NOT BOOL1;BOOL2 := BOOL1 OR BOOL2;END_CASE;(5)循环指令(FOR)<步长Step size>} DO<指令Instructions>使用FOR循环指令可以重复程序处理的过程。

语法:整形变量INT_Var :INT;FOR <整形变量INT_Var>:= <初始值INIT_V ALUE> TO <终止值END_V ALUE> {BYEND_FOR;{}中的内容可选的.只要<INT_Var>中的计数值不大于<END_V ALUE>就重复执行<Instructions> 中的指令。

相关主题