ST结构化文本_第1页
ST结构化文本_第2页
ST结构化文本_第3页
ST结构化文本_第4页
ST结构化文本_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、结构化文本语言学习心得一、工程的简介和建立工程1. 工程文件的结构:工程文件的后缀名为pro,在新工程中建立的第一个程序结构单元(ProgramOrga ni zation Un it)将被自动命名为PLC_PRG,这个程序结构单元就类似于 C语言中的主程序。在PLC_PRG中可以调用各种函数及功能块,而函数和功能块都 属于程序结构单元。PLC-1131-3 DS能够区分在同一工程中的不同对象: 程序结构单元(POU)数据类型(data types)资源(resources)2. 工程的设置:1) 首先应该设置PLC的输入输出以保证工程中使用的地址的准确性。2) 接着建立解决问题的程序结构单元

2、3) 选择适当的语言编写程序4) 写好程序之后,对程序进行编译去除程序中的所有错误。3. 工程的测试:当工程之中的所有错误被去除之后激活仿真模式,就是与仿真PLC连接,与此同时将工程下载到PLC中,这样PLC-1131-3 DS就处于在线方式了。现在能以适当的顺序测试工程了,手动改变输入变量的值,观察输出是否正确。用PLC-1131-3DS调试程序当程序发生错误时,你可以设置断点。当处理发生中断时,你就可以及时的在断 点处检查所有工程变量的值。工作在单步方式(si nglestep)下,可以检验程序的逻辑错误。你可以强制输入或输出变量的值。使用流控制(flowcontrol)可以知道哪些程序段

3、已经 执行。采样轨迹(SamplingTrace)显示变量在长时间的变化过程曲线。整个工程可以以文本文件的形式导出。总而言之PLC-1131-3 DS对于PLC编程是一种完善和方便的工具。4. 工程的组成(1) 工程(Project)一个工程包括了 PLC程序中所有的对象,工程中包含了如下对象:错误!未找到 引用源。*程序结构单元 POUs*数据类型 data types* 资源resources* 库函数libraries(2) 程序结构单元(POU)函数(Functions)错误!未找到引用源。,功能块(function blocks)错误!未找到引用源。和 程序(programs都是程序

4、结构单元(错误!未找到引用源。POUs)。每个POU包括了定义变量和程序主体两个部分 错误!未找到引用源。错误!未找到引用 源。程序主体用IEC编程语言编写,其中包括:指令表(IL)结构文本(ST)SFCFBD梯形图(LD).PLC-1131-3 DS支持所有的标准IEC程序结构单元。错误!未找到引用源。错误!未找 到引用源。错误!未找到引用源。POUs之间能够相互调用,但是不允许递归调用.(3) 函数(Function)错误!未找到引用源。当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。二. ST结构化文本编程1 定义"结

5、构"是指高水平的结构化编程能力,象一个"结构化的编程";"文本"是指应用文本而不是梯形图和顺序函功能表的能力。ST语言不能代替其它的语言,每种语言都有它自己的优点和缺点。ST主要的一个优点就是能简化复杂的数学方程。2特点 咼级文本编程语言 结构化的编程 简单的标准结构 快速高效的编程 使用直观灵活与PASCAL类似有计算机编程经验的人可以很容易地使用它 符合IEC 61131-3标准3 功能数字量和模拟量I/O逻辑操作逻辑比较表达式算术运算判断语句机器的状态语句循环语句功能块可选用的动态变量诊断工具 4.结构文本基础IF value <

6、7 THENWHILE value < 8 DOvalue := value + 1;END_WHILE;END_IF;4.1 表达式操作数可以表达式是指返回变量评估值的结构。表达式由操作符和操作数组成是常量,变量,调用函数或其它表达式。例子:b + c(a - b + c) "COS (to)SIN (a) * COS (b)4.2赋值操作符 通过一个表达式和一个值来给变量赋值。赋值语句包括位于左边的变量,赋值操 作符":=",及后边需要计算的表达式。所有的语句,包括赋值语句,必须要以分 号""结尾。当这行程序执行后,变量"V

7、ar 1"的值是变量"Var 2"的两倍。例子:Vari := Var22;Vari 一一 (Var2 * 2)*)图 4 Assignment4.3注释虽然注释经常被删掉,但它们是源代码中非常重要的一部分。它们解释了一部分 代码,使程序更易读懂。注释帮助你或其他人读你的程序,即使过去了很长时 间。注释不被编译,因此不会影响程序的执行。注释应该用一对星号和小括号括 起来"(*comment*)"。例子:(* This is one line comment图.6单行注释P This is more lines conirtient 卡)4.4操

8、作符优先级如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序) 操作符按优先级的顺序来执行。在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符, 等等,直到执行完所有的操作符。具有相同级别的操作符按照书写顺序从左至右 依次执行。操作符符号/语言优先级括号()依次降低函数调用例子Call argume nt(s)LN(A), MAX(X),等:注释*取反NOT乘*除/取模(取除法的余数)MOD加+减-比较V, >, <=, >=等于=不等于<>逻辑与AND逻辑异或XOR逻辑或OR4.5结构文本格式编程格式指令 指令类型赋值(Assi

9、gnment)错误!未找到引用源。错误!未找到引用源。 调用功能块或者函数的返回值(Calli ng a fun cti on block and use of the FB output)错误!未找到引 用源。错误!未找到引用源。返回(RETURN)错误!未找到引用源。错误!未找到引用源。IF (条件)错误!未找到引用源。 错误!未找到引用源。例子A:=B; CV := CV + 1; C:=SIN(X);CMD_TMR(IN := %IX5, PT := 300);A:=CMD_TMR.QCASE(分支)错误!未找到引用 源。错误!未找到引用源。RETURN;D:=B*B;IF D<

10、0.0 THENC:=A;ELSIF D=0.0 THENC:=B;ELSEC:=D;END_IF;CASE INT1 OF1: BOOL1 := TRUE; 2: BOOL2 := TRUE; ELSEBOOL1 := FALSE;BOOL2 := FALSE;END CASE;J:=101;FOR I:=1 TO 100 BY 2 DOFOR(循环)错误!未找到引用源 错误!未找到引用源。IF ARRI = 70 THENJ:=I;EXIT;END_IF;END_FOR;WHILE(循环)错误!未找到引用J:=1;源。错误!未找到引用源。WHILE J<= 100 AND ARRJ

11、<> 70DO用结构J:=J+2;文本编END_WHILE;程格式REPEAT(重复)错误!未找到引用J:=-1;编写的源。错误!未找到引用源。REPEAT程序与J:=J+2;其它格UNTIL J= 101 OR ARRJ = 70式的编END_REPEAT;程语言EXIT(退出)错误!未找到引用EXIT;相比出源。错误!未找到引用源。错概率Empty in structi on(空指令)J低,编写的程序具有可读性高的特点。错误!未找到引用源。调用功能块(Calling a function block)结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功 能在下面

12、的例子中通过分配参数IN和PT的值调用一定时器功能块,它的结果变量 的值被赋给变量A。CMD_TMR(IN := %IX5, PT := 300);A:=CMD_TMR.Q返回指令(RETURN instruction )错误!未找到引用源。返回指令用来结束函数调用,当条件满足时返回主程序(3)条件指令(IF instruction)使用IF指令检验是否满足条件,当条件满足时执行相应的的指令 语法:IF <布尔表达式_1> THEN<IF_指令>ELSIF <布尔表达式_2> THEN<ELSIF_指令 1>ELSIF <布尔表达式_n&g

13、t; THEN<ELSIF_指令 n-1>ELSE<ELSE_指令 >END_IF;里面的内容是可选的。如果 <布尔表达式1>的返回值为真(TRUE),那么只有<IF_指令被执行,而其它 的指令不执行。否则检验 <布尔表达式2>的返回值是否为真,这样连续判断 <布尔表达式n>的返回值,直到返回值为真时执行对应的指令。如果执行到最后表达式的返 回值也没有为真,那么执行<ELSE_指令>。例:THENELSEIF temp<17heati ng_on := TRUE; heati ng_on := FALSE;EN

14、D_IF;这段程序控制加热功能的开启和关闭, 度时就加热。当温度高于17度时不加热,当温度低于17(4) 分支指令(CASE instruction)错误!未找到引用源。错误!未找到引用源。错 误!未找到引用源。错误!未找到引用源。错误!未找到引用源。使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中语法:CASE < 变量 1> OF<=1>:< 指令 1><=2>:<指令 2>v=n>:<指令 n>ELSE <ELSE 指令 >END_CASE;CASE指令根据下面的模式处理程序:如果变量的

15、值为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<指令In structi ons>使用FOR循环指令可以重

16、复程序处理的过程。语法:整形变量INT_Var :INT;FOR <整形变量 INT_Var>:= < 初始值 INIT_V ALUE> TO < 终止值 END_VALUE> BYEND_FOR;中的内容可选的只要INT_Var中的计数值不大于END_VALUE就重复执行lnstructions中 的指令。在执行指令之前就检验这个条件,如果条件得不到满足就不执行lnstructions中的指令。当指令被执行一次之后 整形变量INT_Var就增加 vStepsize沖的相应值。当得到INT_Var大于END_VALUE匚勺条件时就 停止循环。例:FOR Co

17、u nter:=1 TO 5 BY 1 DOVar1:=Var1*2;END_FOR;Res:=Var1;我们假设Var1的初始值为1,那么循环结束时变量 Var1的值为32。(6) 循环指令(WHILE loop)WHILE循环指令的用法与FOR循环指令相似,它们的不同之处在于 WHILE循环 的判断条件有些不同,它可以是任何布尔表达式。也就是说只要满足你给定的条 件时,就执行循环指令。语法:WHILE 布尔表达式指令END_WHILE;只要布尔表达式的返回值为真TRUE,也就是条件满足的时候, 指令将重复 执行,直到 布尔表达式的返回值为假FALSE0如果在第一次判断条件时就不满足,那么没

18、有执行一次指令循环就结束了。当布尔表达式的返回值始终为真时,指令就无限的循环执行下去,进入死循环状 态。这在编程时要尽量避免。例:WHILE cou nter0 DOVar1 := Var1*2;Coun ter := Coun ter-1;END_WHILEWHILE循环和REPEAT循环在某种意义上来说比FOR循环更实用,因为在某种情 况下我们不能确定循环的次数,在这种情况下只能用WHILE循环指令或者REPEAT循环指令。但是FOR循环指令的循环次数是一定的,所以用 FOR循环指 令编程可以避免死循环的出现。(7) 循环指令(REPEAT loop)REPEAT循环指令不同于WHILE循

19、环指令的地方在于指令执行条件的判定顺序, REPEAT循环指令在判断条件之前就执行指令,也就是说 REPEAT循环指令至少 可以执行一次而不考虑判定条件。 WHILE循环指令就不同,可能指令一次也不 执行就终止循环。语法:REPEAT指令UNTIL 布尔表达式END_REPEAT;当 布尔表达式的返回值为真时,就是说判定条件满足的时候就终止循环。 如果 布尔表达式在第一次检验的时候满足条件,那么整个循环只执行一 次。如果条件始终得不到满足,进入死循环状态,编程时需尽量避免这种情况的 发生。例:REPEATVari := Var1*2;Coun ter := Coun ter-1;UNTILCo

20、un ter=OEND_REPEAT;(8)退出指令(EXIT instruction)如果EXIT指令出现在FOR、WHILE、REPET循环指令里面的时候,循环将不考 虑中断条件是否满足就无条件中断正在进行中的循环。4.6布尔逻辑操作操作数不需要是BOOL类型。布尔逻辑操作:错误!未找到引用源符号逻辑操作例子NOT取反a:=NOT b;AND逻辑与a:=b AND c;OR逻辑或a:=b OR c;XOR异或A:=b XOR c;这些操作符可以形成一个逻辑表达式和条件语句,结果是真(TRUE)或(FALSE)4.7算术运算4.7.1基本的算术运算ST为应用程序提供了以下基本的算术运算符号算

21、术操作例子赋值a:=b;+加a :=b + c;-减a :=b -c;*乘a :=b * c;/除a :=b / c;MOD取模(显示余数)a :=b mod c;数据类型是非常重要的参数,结果也依赖于语法和数据类型。表达式左边的数据 类型应该等同于(或大于)右边的数据类型。4.7.2隐形数据类型转换该类型的转换由编译器完成。编译器将表达式中低的数据类型转换成高的数据类 型。如果有两种或多个类型的变量参与运算, 那么必须将它们转换成相同的类型 以便执行运算。数据类型BOOLSINTINTDINTUSINTUINTUDINTREALBOOL HBOOLp'SINTINTDINTUSINT

22、UINTUDINTREALINTSINTDINTUSINTUINTUDINTREALdint nSINTHNTUSINTUINTUDINT 1REAL 1USINTSINTINTDINTUINTUDINTREALUINTSINTINTDINTUSINTUDINTREALUDINTSINTHNTDINTUSINTUINTREAL 1REALSINTINTDINTUSINTUINTUDINT4.7.3显性数据类型转换当两个变量在计算时,所得结果超过了某一类型数据所表示的范围,只是就需要显示的进行数据转换。4.7.4比较操作高级编程语言ST或以允许比较操作的简单结构分枝。比较的结果是真(TRUE或假

23、(FALSE。符号逻辑比较含义例子=等于If a=b the n<>不等于If a<>b the n>大于If a>b the n>=不小于If a>=b the n<小于If a<b the n<=不大于If a<=b the n比较操作作为一个逻辑条件用在IF, ELSE, WHILE和UNTIL语句中.4.8调用功能模块ST中调用功能块的方法:写出功能块的名称,并在括号中给的需的输入参数分 配变量名。在调用功能块之前,需要给输入参数分配所需的值。功能块调用放在一行里,以 分号结束。在调用功能块之后才能读取 FB俞出值。首先是功能块的名称,接着是位于括号里的输入参数。输入参数用逗号隔开。功 能块调用以分号结束。4.9指针和动态变量在运行时,系统给动态变量 PV分配了一个内存地址,这个过程叫做动态变量的寻参或初始化。当一个

温馨提示

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

评论

0/150

提交评论