![施耐德Unity_Pro结构化文本[ST]_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/aaf6a57d-fb72-4353-81ef-9319f50975f9/aaf6a57d-fb72-4353-81ef-9319f50975f91.gif)
![施耐德Unity_Pro结构化文本[ST]_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/aaf6a57d-fb72-4353-81ef-9319f50975f9/aaf6a57d-fb72-4353-81ef-9319f50975f92.gif)
![施耐德Unity_Pro结构化文本[ST]_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/aaf6a57d-fb72-4353-81ef-9319f50975f9/aaf6a57d-fb72-4353-81ef-9319f50975f93.gif)
![施耐德Unity_Pro结构化文本[ST]_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/aaf6a57d-fb72-4353-81ef-9319f50975f9/aaf6a57d-fb72-4353-81ef-9319f50975f94.gif)
![施耐德Unity_Pro结构化文本[ST]_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/11/aaf6a57d-fb72-4353-81ef-9319f50975f9/aaf6a57d-fb72-4353-81ef-9319f50975f95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、word格式文档结构化文本(STD目录结构化文本(ST) 1概述 21 .结构化文本 ST简介 31 .结构化文本ST简介 32 .操作数 53 .操作符 82 .指令151 .指令152 .赋值163 .选择指令IFTHENEND_IF184 .选择指令 ELSE195 .选择指令 ELSE - THEN206 .选择指令 CASE OFEND_CASE227 .重复指令 FORTOBYDOEND_FOR238 .重复指令 WHILE DOEND_WHILE259 .重复指令 REPEAT UNTIL D_REPEAT2610 .重复指令2611 . 子程序调用 2712 . RETURN2
2、813 .空指令2914 .标签和跳转2915 .注释303 .调用基本功能、基本功能块、导出的功能块和过程 311 .调用基本功能312 .调用基本功能块和导出的功能块基本功能块 373 .过程47专业整理概述本章介绍符合IEC 61131的编程语言结构化文本 ST本章包含了哪些内容?本章包含了以下部分: 结构化文本ST简介 调用基本功能、基本功能块、导出的功能块和过程一.结构化文本 ST简介概述本节包含结构化文本ST的概述。本节包含了哪些内容?本节包含了以下主题: 结构化文本ST简介 操作数 操作符1.结构化文本ST简介简介使用结构化文本(ST)的编程语言,可以执行多种操作,例如调用功能块
3、、执行功能和赋值、有 条件地执行指令和重复任务。表达式ST编程语言使用"表达式"。表达式是由操作符和操作数组成的结构,在执行表达式时会返回值。操作符操作符是表示要执行的操作的符号。操作数操作符供操作数使用。操作数为变量、数值、FFB输入/输出等。说明指令用于将表达式返回的值赋给实际参数,并构造和控制表达式。ST段的表示形式word格式文档ST段的表示形式:操作符 操作数指令指令D 尸 B*B - 4*A*C ;IFD<0,0THENNROOTS : = 0 ,ELS1FD = CL。THENNROOTS := 1 ;XI :=-B/(2.0+A);表达式ELSENRO
4、yr江 2 ;XI .kB+56RT(DR/QO*A):X2 k(B£QRT(D)fO&);END IF;段大小指令行的长度不应超过300个字符ST段的长度在编程环境中没有限制。ST段的长度仅受PLC存储器大小的限制语法标识符和关键字不区分大小写例外:不允许使用空格和制表符 关键字 数值 值 标识符 变量和 限制符组合例如用于注释的(*执行顺序计算表达式时将根据操作符的优先级所定义的顺序将操作符应用于操作数(请参见操作符表)首先执行表达式中具有最高优先级的操作符,接着执行具有次优先级的操作符,依此类推,直到专业整理word格式文档完成整个计算过程。优先级相同的操作符将根据它们
5、在表达式中的书写顺序从左至右执行。可使 用括号更改此顺序。例如,如果A、B、C和D的值分别为1、2、3和4,并按以下方式计算:A+B-C*D结果则为-9。在下面的计算中:(A+B-C)*D结果则为0o如果操作符包含两个操作数,则先执行左边的操作数,例如在表达式SIN(A)*COS(B)中,先计算表达式 SIN(A),后计算COS(B),然后计算它们的乘积。错误行为下面的情况在执行表达式时作为错误处理: 尝试除以00 操作数包含的数据类型不适合对应的运算。 数字运算的结果超出了其数据类型的值范围。如果执行运算的过程中出现错误,则会设置相应的系统位(S)(如果使用的PLC支持这一设置)。IEC遵从
6、性有关针对ST编程语言的IEC遵从性的描述,请参见IEC遵从性。2 .操作数简介操作数可以是: 地址 数值 变量 多元素变量 多元素变量的元素 功能调用 FFB输出数据类型处理操作数的指令中的数据类型必须相同。如果需要处理不同类型的操作数,则必须预先执行类型转换。在下面的示例中,整数变量i1在添加到实数变量r4中之前会先转换为实数变量。r3 := r4 + SIN(INT_TO_REAL(i1);此规则的例外情况是,数据类型为 TIME的变量可乘以或除以数据类型为 INT DINT UINT或UDINT的变量。允许的运算: timeVarl := timeVar2 / dintVarl; ti
7、meVar1 := timeVar2 * intVarl; timeVar := 10 * time#10s;此功能由IEC 61131-3作为"不希望”的服务列出直接使用地址地址可直接使用(无需事先声明)。在本例中,地址数据类型是直接分配的。该数据类型的分配通过使用“大前缀”进行。下表列出了不同的大前缀:大前缀/#示例数据类型无前缀%I10、CH203.MOD、CH203.MOD.ERRBOOLX%MX20BOOLB%QB102.3BYTEW%KW43JNTD%QD100DINTF%MF100REAL使用其他数据类型要将其他数据类型指定为地址的缺省数据类型,必须通过显式声明进行。使
8、用变量编辑器可方便地完成变量的声明。地址的数据类型不能在ST段中直接声明(例如,不允许声明AT %MW1:UINT)。例如,在变量编辑器中声明以下变量:UnlocVI: ARRAY 1.10 OF INT;LocVI:ARRAY 1.10 OF INT AT %MW100;LocV2:TIME AT %MW100;下面的调用具有正确的语法:%MW200 := 5;UnlocV12 := LocV1%MW200;LocV2 := t#3s;访问字段变量访问字段变量(ARRAY)时,只有数值和数据类型为INT、UINT、DINT以及UDINT的变量才允许用于索引项。如果范围的阈值下限为负数,则 A
9、RRAY元素的索引也可为负数。示例:使用字段变量var1i := 8 ;var2.otto4 := var3 ;var41+i+j*5 := 4 ;3 .操作符简介操作符是一种符号,它表示: 要执行的算术运算,或 要执行的逻辑运算 功能编辑(调用)操作符是泛型的,即,它们自动适应操作数的数据类型操作符表操作符根据优先级按顺序执行,另请参见 执行顺序ST编程语言操作符表:操作符含义优先级适用的操作数描述()使用1 (最高)表iA式括号用于改变操作符的执行顺序。示例:如果操作数A、B、C和D的值分别为1、2、3 和 4,A+B-C*D 的结果则为-9,而(A+B-C)*D的结果则为0oFUNCNA
10、ME(实际参数-list)函数处理(调用)2表达式、数值、变量、地址(所有数据类型)函数处理用于执行函数(请参见调用基本功能)。-取反3数据类型为 INT>DINT 或 REAL 的表达式、数值、变量或地址取反(-)时,操作数值的符号会反转。示例:本示例中,如果IN1为4,则OUT为-4。OUT := - IN1 ;NOT反码3数据类型为BOOL、 BYTE、进彳T NOT运算时,操作数将逐位反转。示例:本示例中,如果 IN1为1100110011 ,则OUT 为 0011001100 。OUT := NOT IN1 ;WORD或DWORD 的表达式、数值、变量或地址*幕4数据类型为RE
11、AL(底数)和 JNT>DINT、UINT、UDINT 或REAL (指数)的 表达式、数值、变量或地址求嘉(*)运算时,将以第一个操作数为底数,第二个操作数为指数进行求幕。示例:该示例中,如果IN1为5.0, IN2为4.0,则 OUT 为 625.0。OUT := IN1 * IN2 ;*乘法5数据类型为 INT>DINT、UINT、UDINT或 REAL的表达式、数值、变量或地址乘法(*)运算时,将用第一个操作数的值乘以第二个操作数(指数)的值。示例:该示例中,如果IN1为5.0, IN2为4.0,则 OUT 为 20.0。OUT := IN1 * IN2 ;注:先期库中的
12、MULTIME函数可用于涉及数据类型Time的乘法。/除法5数据类型为 INT>DINT、UINT、UDINT或 REAL的表达式、数值、变量或地址除法(/)运算时,将用第一个操作数的值除以第二个操作数的值。示例:该示例中,如果IN1为20.0, IN2为5.0,则 OUT 为 4.0。OUT := IN1 / IN2 ;注:先期库中的DIVTIME函数可用于涉及数据类型Time的除法。MOD模数5数据类型为 JNT>DINT、 UINT 或UDINT的表达式、数值、变量或地址执行MOD时,将用第一个操作数的值除以第二个操作数的值,除法的余数(模数)显示为结果。示例:本示例中 如果
13、IN1为7, IN2为2,则OUT为1。 如果IN1为7, IN2为-2,则OUT为1。 如果IN1为-7, IN2为2,则OUT为-1。 如果 IN1 为-7, IN2 为-2,则 OUT 为-1。OUT := IN1 MOD IN2 ;数据类型为更、加法(+)运算时,将用第一个操作数的值加上第二DINT、UINT、UDINT、个操作数的值。+加法6REAL 或 TIME 的示例:本示例中表达式、数值、变量如果IN1为7, IN2为2,则 OUT为9或地址OUT := IN1 + IN2 ;数据类型为 INT>减法(-)运算时,将用第一个操作数的值减去第二DINT、UINT、UDINT
14、、个操作数的值。-减法6REAL 或 TIME 的示例:该示例中,如果IN1为10, IN2为4,则表达式、数值、变量OUT 为 6。或地址OUT := IN1 - IN2 ;数据类型为使用 < 将第一个操作数的值与第二个操作数的值BOOL、BYTE INT>进行比较。如果第一个操作数的值小于第二个操作DINT、UINT、UDINT、数的值,则结果为布尔值 1。如果第一个操作数的小于REAL、 TIME、值大于或等于第二个操作数的值,则结果为布尔值<7比较WORD、DWORD、00STRING DT> DATE示例:本示例中,如果IN1小于10,则OUT为1,或TOD的
15、表达式、否则为00数值、变量或地址OUT := IN1 < 10 ;数据类型为使用 > 将第一个操作数的值与第二个操作数的值BOOL、BYTE INT、进行比较。如果第一个操作数的值大于第二个操作>7DINT、UINT、UDINT、数的值,则结果为布尔值 1。如果第一个操作数的比较REAL、 TIME、值小于或等于第二个操作数的值,则结果为布尔值WORD、DWORD、00STRING DT、DATE或TOD的表达式、数值、变量或地址小例:本小例中,如果IN1大于10,则 OUT为1,如果IN1小于10则为00OUT := IN1 > 10 ;数据类型为使用 <二将
16、第一个操作数的值与第二个操作数的值BOOL、BYTE INT>进行比较。如果第一个操作数的值小于或等于第二小于DINT、UINT、UDINT、个操作数的值,则结果为布尔值 1。如果第一个操或等REAL、 TIME、作数的值大于第二个操作数的值,则结果为布尔值<二7于比WORD、DWORD、00较STRING DT> DATE示例:本示例中,如果IN1小于或等于10,则OUT或TOD的表达式、为1 ,否则为0o数值、变量或地址OUT := IN1 <= 10 ;数据类型为使用 >=将第一个操作数的值与第二个操作数的值BOOL、BYTE INT、进行比较。如果第一个操
17、作数的值大于或等于第二DINT、UINT、UDINT、个操作数的值,则结果为布尔值 1。如果第一个操或等REAL、 TIME、作数的值小于第二个操作数的值,则结果为布尔值>=7于比WORD、DWORD、00较STRING DT> DATE示例:本示例中,如果IN1大于或等于10,则OUT或TOD的表达式、为1 ,否则为0o数值、变量或地址OUT := IN1 >= 10 ;数据类型为使用=将第一个操作数的值与第二个操作数的值8BOOL、BYTE INT>进行比较。如果第一个操作数的值等于第二个操作寺丁DINT、UINT、UDINT、数的值,则结果为布尔值 1。如果第一个
18、操作数的REAL、 TIME、值/、等于第二个操作数的值,则结果为布尔值0。WORD、DWORD、示例:本示例中,如果IN1等于10,则OUT为1,否则为00OUT := IN1 = 10 ;STRING DT DATE或TOD的表达式、数值、变量或地址<>不等于8数据类型为BOOL、BYTE INT、使用 <> 将第一个操作数的值与第二个操作数的值进行比较。如果第一个操作数的值/、等于第二个操作数的值,则结果为布尔值1。如果第一个操作数的值等于第二个操作数的值,则结果为布尔值0。示例:本示例中,如果IN1不等于10,则OUT为1 ,否则为00OUT := IN1 &l
19、t;> 10 ;DINT、UINT、UDINT、REAL、 TIME、WORD、DWORD、STRING DT、DATE或TOD的表达式、数值、变量或地址&逻辑与9数据类型为BOOL、 BYTE、WORD或DWORD 的表达式、数值、变量或地址对于&,操作数之间存在逻辑与美联。对于 BYTEWORD和DWORD数据类型,此关联是逐位进行 的。示例:本示例中,如果IN1、IN2和IN3均为1, 则OUT为1。OUT := IN1 & IN2 & IN3 ;AND逻辑与9数据类型为BOOL、 BYTE、WORD或DWORD 的表达式、数值、变量或地对于 AND
20、 ,操作数之间存在逻辑与美联。对于BYTE WORD和DWORD 数据类型,此关联是逐位进行的。示例:本示例中,如果IN1、IN2和IN3均为1,则OUT为1。址OUT k IN1 AND IN2 AND IN3 ;XOR逻辑异或10数据类型为BOOL、 BYTE、WORD或对于XOR,操作数之间存在逻辑异或关联。对于BYTE WORD和DWORD 数据类型,此关联是逐 位进行的。示例:本示例中,如果IN1和IN2不相等,则OUT 为1。如果 A和B的状态相同(均为 0或均为 1),则D为0。OUT := IN1 XOR IN2 ;如果将两个以上的操作数进行关联,当状态为1的操作数个数不是偶数
21、时结果为 1 ,而当状态为1的操作数个数是偶数时结果为 0。示例:本示例中,如果有1个或3个操作数为1 , 则OUT为1 ,如果有0、2或4个操作数为1 , 则OUT为00OUT := IN1 XOR IN2 XOR IN3 XOR IN4 ;DWORD 的表达式、数值、变量或地址OR逻辑或11 (最低)数据类型为BOOL、 BYTE、WORD或DWORD 的表达式、数值、变量或地址对于OR ,操作数之间存在逻辑或美联。对于BYTEWORD和DWORD数据类型,此关联是逐位进行 的。示例:本示例中,如果IN1、IN2或IN3为1 ,则OUT 为 1。OUT := IN1 OR IN2 OR I
22、N3 ;二.指令概述本节描述结构化文本ST编程语言的指令。本节包含了哪些内容?本节包含了以下主题: 心 K 选择指令IFTHENEND IF 选择指令ELSE 选择指令ELSIFTHEN 选择指令 CASE.OFEND CASE 重复指令 FOR.TOBY.DOEND FOR 重复指令WHILEDOEND WHILE 重复指令 REPEATUNTILEND REPEAT 重复指令EXIT,子程序调用 RETURN 空指令. 标签和跳转 注释1 .指令描述指令是ST编程语言的“命令"。指令必须以分号结尾。一行中可以有多个指令(由分号分隔)单个分号表示空指令。2 .赋值简介执行赋值时,单
23、元素或多元素变量的当前值会替换为表达式的计算结果。赋值表达式的结构为:左边是变量名称,之后是赋值操作符尸,然后是要求值的表达式。两个变量(分别位于赋值操作符的左侧和右侧)的数据类型必须相同。数组是个特例。显式启用后,也可对长度不同的两个数组执行赋值操作。将一个变量的值赋给另一个变量赋值用于将一个变量的值赋给另一个变量。例如,指令A := B ;用于将变量A的值替换为变量B的当前值。如果A和B是基本数据类型,则B的单个值会传递给Ao如果A和B是导出的数据类型,则所有 B元素的值都传递给 Ao将数值赋给变量赋值用于将数值赋给变量。指令C := 25 ;用于将值25赋给变量Co将运算值赋给变量赋值用
24、于将运算结果赋给变量。例如,指令X := (A+B-C)*D ;用于将(A+B-C)*D的运算结果赋给变量 X。将FFB的值赋给变量赋值用于将功能或功能块返回的值赋给变量。例如,指令B := MOD(C,A);用于调用MOD (模数)功能并将计算结果赋给变量Bo例如,指令A := MY_TON.Q ;用于将MY_TON功能块(TON功能块的实例)的 Q输出值赋给变量 A。(这不是功能块调用)多重赋值多重赋值是对IEC 61131-3的补充,必须显式启用。即使已经启用,下列情况下也不能进行多重赋值:在功能块调用的参数列表中在用于初始化结构化变量的元素列表中指令X := Y := Z是允许的指令F
25、B(in1 := 1, In2 := In3 := 2);和strucVar := (compl := 1, comp2 := comp3 := 2);是不允许的。数组与WORD-/DWORD 变量之间的赋值数组和WORD-/DWORD 变量之间进行赋值时必须先执行类型转换,例如:%Q3.0:16 := INT_TO_AR_BOOL(%MW20);提供了下面的转换功能(常规库,Array系列):, MOVE_BOOL_AREBOOL MOVE_WORD_ARWORD MOVE_DWORD_ARDWORD MOVE_INT_ARINT MOVE_DINT_ARDINT, MOVE_REAL_AR
26、REAL3.选择指令 IF:- THEN- END_IF描述IF指令只有确定其相关布尔表达式的值为1 (真)时,才会执行指令或一组指令。如果条件为0(假),将不会执行该指令或指令组。THEN指令标识条件的结尾和指令的开头。END_IF指令标记指令的结尾。注意:可以嵌套任何数量的IFTHENEND_IF指令,以生成复杂的选择指令。专业整理word格式文档示例IFTHENEND_IF该条件可以使用布尔变量表达。如果FLAG为1,将执行指令;如果 FLAG为0,则不会执行。IF FLAG THENC:=SIN(A) * COS(B);B:=C - A ;END_IF ;该条件可使用返回布尔结果的操作
27、表达。如果A大于B,将会执行指令;如果 A小于或等于B,则不会执行IF A>B THENC:=SIN(A) * COS(B);B:=C - A ;END_IF ;示例 IF NOTTHENEND_IF该条件可使用NOT反转(为0时执行这两个指令)。IF NOT FLAG THENC:=SIN_REAL(A) * COS_REAL(B);B:=C - A ;END_IF ;另请参见ELSEELSIF描述ELSE指令始终出现在IFTHEN ELSIFTHEN或 CASE指令后面。如果ELSE指令出现在IF或ELSIF指令后面,则仅当IF和ELSIF指令的关联布尔表达式为 0 (假)时,才会执
28、行该指令或指令组。如果 IF或ELSIF指令的条件为1 (真),则不会执行该指令或指令组。如果ELSE指令出现在CASE后面,则仅当所有标签都不包含选择器的值时,才会执行该指令或指令组。如果某个标识包含选择器的值,则不会执行该指令或指令组。注意:可以嵌套任何数量的IFTHENELSEEND_IF指令,以生成复杂的选择指令。示例ELSEIF A>B THENC:=SIN(A) * COS(B);B:=C - A ;ELSEC:=A + B ;B:=C * A ;END_IF ;另请参见IFELSIFCASE5 .选择指令ELSEE- THEN描述ELSE指令始终出现在IFTHEN指令后面。
29、ELSIF指令确定仅当IF指令的关联布尔表达式的值为0 (假)并且ELSIF指令的关联布尔表达式的值为 1 (真)时,才会执行指令或指令组。如果IF指令的条件为1 (真)或者ELSIF指令的条件为0 (假),则不会执行该命令或命令组。THEN指令标识ELSIF条件的结尾和指令的开头。注意:可以嵌套任何数量的IFTHENELSIFTHENEND_IF指令,以生成复杂的选择指令。示例 ELSIF.THENIF A>B THENC:=SIN(A) * COS(B);B:=SUB(C,A);ELSIFA=B THENC:=ADD(A,B);B:=MUL(C,A);END_IF ;例如嵌套指令IF
30、 A>B THENIF B=C THENC:=SIN(A) * COS(B);ELSEB:=SUB(C,A);END_IF ;ELSIFA=B THENC:=ADD(A,B);B:=MUL(C,A);ELSEC:=DIV(A,B);END_IF ;另请参见IFELSE6 .选择指令 CASE - OF - END_CASE描述CASE指令包含一个INT数据类型的表达式(选择器)和一个指令组列表。每组都具有一个包含一个或多个整数(INT、DINT、UINT或UDINT)或整数值范围的标签。将执行的指令为其标签中包含选择器计算出的值的第一组指令。否则,将不执行任何标签对应的指令。OF指令指示
31、标签的开头。所有标签都不包含选择器的值时,才会在 CASE指令内执行ELSE指令。END_CASE指令标记指令的结尾。示例 CASE.OFEND_CASE示例 CASE.OFEND_CASE选择器 CASE SELECT OF /L5: C:=SIN(A) * CC6(B);标笔 £2:B:=C - A ;怀量 6 一 1。: C:=C * A : ELSE8: =C * A ;C:-A / E ; ENELCASE ;另请参见ELSE7 .重复指令FORTOBYDOEND_FOR描述FOR指令用于在发生次数可预先确定的情况下。否则可使用WHILE或REPEATFOR指令会重复执行指
32、令序列,直到遇到END_FOR指令为止。发生次数由起始值、结束值和控制变量决定。控制变量、起始值和结束值必须具有相同的数据类型( DINT或INT)。控制变量、起始值和结束值可由重复指令进行更改。这是对 IEC 61131-3的补充。FOR指令以控制变量值为步幅递增起始值,直到达到结束值。增量值的缺省值为1。如果要使用其他值,则可以指定显式增量值(变量或常量)。每个新的循环之前都要检查控制变量值。如 果它位于起始值和结束值的范围之外,则将离开循环。首次运行循环之前,会进行检查以确定从初始值开始的控制变量递增是否是朝着结束值的方向。如果不是(例如,起始值 < 结束值并且增量为负值),则不会
33、对循环进行处理。控制变量值不 是在循环外定义的。DO指令标识重复定义的结尾和指令的开头。可以使用EXIT提前终止循环。END_FOR指令标记指令的结尾。示例:增量为1的FOR增量为1的FOR控制变量起始值 结束值C:= C * 005(B);END_FOR ;增量不为1的FOR如果要使用的增量不为1,这可由BY定义。增量、初始值、结束值和控制变量必须具有相同的BY表达式的符号决定。如果此表达式数据类型(DINT或INT)。处理方向(向前或向后)由为正,则循环正向进行;如果为负,则循环反向进行。示例:步幅为2的正向计数步幅为2的正向计数控制变量起始值 结束值 递增FCR i:= 1 TO 10
34、BY 2 DO (* BY > 0 : Forwards.loop *) C: = C * 006(E) ; (* Loop is 5 k executed *)END FOR ;示例:反向计数反向计数FOR i:= 10 TO 1 BY -1 DO (* BY < 0 : Backwards.loop *)C:= C * COS(B) ; (* Instruction is executed 10 x *)END_FOR ;示例:"唯一"循环本示例中的循环正好执行一次,原因是初始值 =结束值。此种情况下,增量为正还是负没有关系。FOR i:= 10 TO 10
35、 DO (* Unique Loop *)C:= C * COS(B);END_FOR ;或FOR i:= 10 TO 10 BY -1 DO (* Unique Loop *)C:= C * COS(B);END_FOR ;示例:临界循环如果本示例中增量j > 0,将执行指令。如果j < 0,将不会执行指令,因为条件初始值< 仅允许结束值的增量 > 0。如果j = 0,将执行指令并且会创建一个无限循环,因为增量为 0时永远都不会达到结束值。FOR i:= 1 TO 10 BY j DOC:= C * COS(B);END_FOR ;8 .重复指令 WHILE -DO
36、END_WHILE说明WHILE指令可使一个指令序列重复执行,直到其相关布尔表达式为0 (假)。如果从一开始该表达式就为假,则根本不会执行该指令组。DO指令标识重复定义的结尾和指令的开头。可以使用EXIT提前终止循环。END_WHILE指令标记指令的结尾。下列情况下不应使用 WHILE,因为它可能导致无限循环,从而造成程序崩溃: WHILE不能用于过程之间的同步,例如,不能用作具有外部定义的结束条件的“等待循 环”。 WHILE不能用在算法中,因为无法确保完成循环结束条件或执行EXIT指令。示例 WHILEDOEND_WHILEx := 1; WHILE x <= 100 DO x :=
37、 x + 4; END_WHILE ;另请参见EXIT9 .重复指令 REPEAF UNTIL END_REPEAT描述REPEAT指令可使一个指令序列重复执行(至少执行一次),直到相关布尔条件为 1 (真) UNTIL指令标记结束条件。可以使用EXIT提前终止循环。END_REPEAT指令标记指令的结尾。下列情况下不应使用 REPEAT,因为它可能导致无限循环,从而造成程序崩溃: REPEAT不能用于进程之间的同步,例如,不能用作具有外部定义的结束条件的“等待循 环”。 REPEAT不能用在算法中,例如无法确保完成循环结束条件或执行EXIT指令。示例 REPEATUNTILEND_REPEA
38、Tx := -1;REPEAT x := x + 2;UNTIL x >= 101END_REPEAT;另请参见EXIT10 .重复指令描述或 REPEAT)EXIT所在的循环)。接下来, 后的第一个指令。EXIT指令用于在满足结束条件前终止重复指令(FOR、WHILE如果EXIT指令位于嵌套的重复指令内,则会离开最里面的循环(将执行循环结尾(END_FOR、 END_WHILE 或 END_REPEAP示例EXIT如果FLAG的值为0,执行指令后SUM将为15。如果FLAG的值为1,执行指令后SUM将为6。SUM: = 0;FOR I := 1 TO 3 DOFOR J := 1 TO
39、 2 DOIF FLAG=1 THEN EXIT;END_IF ;SUM := SUM + J ;END_FOR ;SUM := SUM + I ;END_FOR另请参见CASEWHILEREPEAT11 .子程序调用子程序调用子程序调用由子程序段名称后跟空参数列表组成。子程序调用不返回值。待调用的子程序必须与调用的 ST段位于同一任务中。也可以从子程序中调用子程序。例如:SubroutineName ();子程序调用是对IEC 61131-3的补充,且必须显式启用。在SFC动作段中,仅当启用了多令牌操作时才允许子程序调用。12 . RETURN描述RETURN指令可用于DFB (导出功能块)
40、和 SR (子程序)中。RETURN指令不可用于主程序中。在DFB中,RETURN指令强制返回称为 DFB的程序。不执行包含 RETURN指令的剩余DFB段。也不执行DFB的下一段。从DFB返回后,将执行称为 DFB的程序如果另一个DFB调用了此DFB,将在返回后执行调用 DFB在SR中,RETURN指令强制返回称为SR的程序。不执行包含 RETURN指令的剩余SR。从SR返回后,将执行称为 SR的程序。13.空指令描述单个分号;表示空指令。例如:IF x THEN ; ELSE .在此示例中,THEN指令后面就跟着一个空指令。这意味着,只要 IF条件为1,程序就会立即退出IF指令。14 .标
41、签和跳转简介标签用作跳转的目标。ST中的跳转和标签是对IEC 61131-3的补充,且必须显式启用。标签属性标签属性: 标签必须始终是行中的第一个元素。 标签只能出现在第一级指令前(不能在循环中)。 其名称在整个目录中都必须明确,并且不区分大小写。 标签必须符合一般命名约定。 标签用冒号:与后面的指令分隔。跳转属性跳转属性 可在程序和DFB段中进行跳转 只能在当前段中进行跳转。示例IF varl THEN JMP START;二START:15 .注释描述在ST编辑器中,注释总是以字符串(*开始,以字符用*)结束。在这两个字符串之间可以输 入任何注释。可在 ST编辑器的任何位置输入注释,但不能
42、在关键字、数值、标识符和变量中输入注释。IEC 61131-3不允许嵌套注释。如果已经嵌套了注释,则必须显式启用。专业整理三.调用基本功能、基本功能块、导生的功能块和过程概述使用ST编程语言调用基本功能、基本功能块、导出的功能块和过程。本节包含了哪些内容?本节包含了以下主题: 调用基本功能 调用基本功能块和导出的功能块 业1.调用基本功能基本功能基本功能以库的形式提供。功能的逻辑是使用编程语言C创建的,不能在ST编辑器中进行修改。功能没有内部状态。如果输入值相同,则每次执行该功能后输出的值都相同。例如,每次执行两个值相加后都能得到相同的结果。有些基本功能可扩展为具有 2个以上的输入。基本功能只
43、具有一个返回值(输出)。参数将值传入或传出功能需要“输入”和一个“输出”。这些输入 /输出称为形式参数。当前过程状态传递给形式参数。这些参数称为实际参数。以下各项可用作功能输入的实际参数:*变量地址数值ST表达式以下各项可用作功能输出的实际参数:变量地址实际参数的数据类型必须与形式参数的数据类型匹配。唯一的例外是泛型形式参数,其数据类型 由实际参数决定。处理泛型ANY BIT形式参数时,可使用数据类型为 INT或DINT (不是UINT和UDINT)的实 际参数。这是对IEC 61131-3的补充,且必须显式启用。示例:允许:AND (AnyBitParam := IntVarl, AnyBi
44、tParam2 := IntVar2);不允许:AND_WORD (WordParam1 := IntVar1, WordParam2 := IntVar2);(在这种情况下,必须使用 AND_INT 。)AND_ARRAY_WORD (ArrayInt, .);(在这种情况下,必须使用INT_ARR_TO_WORD_ARR (.);执行显式类型转换。).并非所有形式参数都必须赋值。必须赋值的形式参数类型可参见此表:参数类型EDTSTRINGARRAYANY_ARRAYIODDTSTRUCTFBANYInput-+-+-VAR_IN_OUT+/+Output-/-+需要实际参数-不需要实际参数
45、/不适用如果没有为形式参数赋值,则会使用初始值执行功能块。如果尚未定义初始值,则使用缺省值(0)编程说明请注意以下信息:所有通用功能都被过载。这意味着调用功能时是否输入数据类型无关紧要例如i1 := ADD (i2, 3);等同于i1 := ADD_INT (i2, 3); 功能可以嵌套(另请参见二). 仅当输入EN = 1或未使用EN输入时,才会执行功能(另请参见 EN和ENO). 有两种调用功能的方式:形式调用(使用形式参数名称调用功能)word格式文档非形式调用(不使用形式参数名称调用功能)形式调用对于形式调用(带形式参数名称的调用),调用所使用的指令序列为:实际输出参数,后跟赋值 指令
46、尸,然后是功能名称,之后是用括号括起的列表(其中为实际参数对形式参数的赋值)。形 式参数在功能调用中的列出顺序无关紧要.EN和ENO可用于此类型的调用。使用形式参数名称调用功能:实际参数(输出)花式参数LIMITMH中时QI班乂使用FBD调用相同的功能:o vui J +vu 对于形式调用,没有必要为所有形式参数赋值(另请参见gm).out:=LIMIT (MN:=0, IN:=var1);使用FBD调用相同的功能:lihii6 BinOTIvui DTM3C非形式调用对于非形式调用(不带形式参数名称的调用),调用所使用的指令序列为:实际输出参数,后跟 赋值指令符号尸,然后是功能名称,之后是用
47、括号括起的输入实际参数的列表。实际参数在功能 调用中的列出顺序非常重要.专业整理word格式文档EN和ENO不能用于此类型的调用不使用形式参数名称调用功能:实际参数(输出)out :=LIMIT irarl, 5 + var)/ /功能名称实际参数(输入)使用FBD调用相同的功能:Lnm0 MHuai DJ J +iai MK对于非形式调用,没有必要为所有形式参数赋值(另请参见参数).这是对IEC 61131-3的补充,且必须显式启用。空参数字段用于跳过参数。带空参数字段的调用:LnmMNout:=LIMIT ( ,var1,5 + var);使用FBD调用相同的功能:如果忽略位于末尾的形式参
48、数,则无需使用空参数字段out:=LIMIT (0, varl);使用FBD调用相同的功能:01MHLHC!qbuul1INMX嵌套功能功能调用可包含进一步的功能调用。嵌套深度不受限制。嵌套调用数组功能:out:=LIMIT (MN:=4, IN:=MUL(IN1:=var1, IN2:=var2), MX:=5);使用FBD调用相同的功能:返回值为ANY_ARRAY数据类型的函数不能 在功能调用内 使用。专业整理未授权嵌套,数据类型为ANY_ARRAY:ANY_ ARRAY7out:LIMIT (MN: = 4, IN: =EXAHPINI: =varl, IN2:=var2), HX:=5
49、);ANY_ARRAY允许用作调用的功能的返回值或嵌套功能的参数。授权嵌套,数据类型为ANY_ARRAY:ANY_ARRAYANY_ARRAYANY_ARRAY7 77out: =EXAMP (JDJ: =4, IK: =EXAMP (INI; =varl r IN2 : =var2), MX: =var 3)EN 和 ENO所有功能都可以配置一个EN输入和一个ENO输出。0”如果调用功能时EN的值为“ 0”,则不会执行该功能所定义的算法,并且ENO设置为如果调用功能时EN的值为“ 1”则执行该功能所定义的算法。成功执行这些算法之后,ENO的值设置为“1”。如果在执行这些算法的过程中出错,则E
50、NO将设置为“ 0”。如果EN引脚未赋值,则在调用 FFB时,会执行FFB所定义的算法(与EN等于“ 1”时的情 况相同)。如果ENO设置为“ 0” (由企N=0或执行过程中出错),则功能的输出设置为“0”功能的输出行为不依赖于调用功能时是未使用EN/ENO还是EN=1.如果使用了 EN/ENO ,则功能调用必须是形式调用。out:=LIMIT (EN:=1, MN:=0, IN:=var1, MX:=5, ENO=>var2);使用FBD调用相同的功能:2.调用基本功能块和导出的功能块基本功能块基本功能块具有内部状态。即使输入值不变,每次操作的输出值也可以不同。例如,计数器的输出值是递
51、增的。功能块可有多个输出值(输出)。导出的功能块导出的功能块(DFB)具有与基本功能块相同的特性。用户可以采用编程语言FBD、LD、IL和/或ST创建这类功能块。参数将值传入或传出功能块需要“输入和输出”。这些输入 /输出称为形式参数。以下各项可用作功能块输入的实际参数: 变量 地址 数值以下各项可用作功能块输出的实际参数: 变量 地址实际参数的数据类型必须与形式参数的数据类型匹配。唯一的例外是泛型形式参数,其数据类型 由实际参数决定。处理泛型 ANY BIT形式参数时,可使用数据类型为 INT或DINT (不是UINT和UDINT)的实 际参数。这是对IEC 61131-3的补充,且必须显式启用。示例:允许:AND (AnyBitParam := IntVarl, AnyBitParam2 := IntVar2);不允许:AND_WORD (WordParam1 := IntVar1, WordParam2 := IntVar2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 种子繁育员职业测评试题及答案
- 游泳救生员优先考核内容试题及答案
- 裁判员在比赛中的行为规范与约束试题及答案
- 2024游泳救生员常见误区与试题及答案
- 实际飞行案例研究的试题及答案
- 2025年中国勾子连靠垫市场调查研究报告
- 2025年中国全自动气雾剂灌装机市场调查研究报告
- 2025年中国偏心异径接头市场调查研究报告
- 学习专家分享的足球裁判员考试备考秘籍试题及答案
- 2025年中国三氟醋酸钠市场调查研究报告
- 中远集团养老保险工作管理程序
- 缺血缺氧性脑病详解课件
- 自动打铃控制器plc课程设计
- 最新司法鉴定程序通则课件来源于司法部司法鉴定局
- 变电站第二种工作票
- 机电一体化专业毕业论文43973
- 基于PLC的变频中央空调温度控制系统的毕业设计
- 门禁系统调试报告(共4页)
- 北师大版一年级英语下册期中测试卷
- 档案学概论重点知识梳理
- 地下连续墙钢筋笼起重吊装专项施工方案
评论
0/150
提交评论