兴平市论坛

注册

 

发新话题 回复该主题

关于PLC一直说结构化编程,到底什么才是 [复制链接]

1#

西门子全科+博途+EPLAN电气制图视频录像低价打包出售!

创控教育西门子全科班课程介绍

结构化文本编程语言是一种高级语言,类似于Pascal,是一种特别为工业控制应用而开发的一种语言,也是在InoProShop中最常用的一种语言,对于熟悉计算机高级语言开发的人员来说,结构化文本语言更是易学易用,它可以实现选择、迭代、跳转语句等功能。此外,结构化文本语言还易读易理解,特别是当用有实际意义的标识符、批注来注释时,更是这样。在复杂控制系统中,结构化文本可以大大减少其代码量,使复杂系统问题变得简单,缺点是调试不直观,编译速度相对较慢。结构化文本的视图如图所示/p>

结构化文本有以下特点:1、高级文本编程语言2、结构化的编程3、简单的标准结构4、快速高效的编程5、使用直观灵活6、与PASCAL类似7、有计算机编程经验的人可以很容易地使用它8、符合IEC-3标准1.2ST语言的执行顺序使用结构化文本的程序执行顺序根据“行号”依次从上至下开始顺序执行,如图所示。

1.3表达式执行顺序整个ST程序由指令构成,指令由分号“;”分隔。这些指令由关键字和表达式组成。其中,表达式由操作符和操作数组成。一个操作数可以是一个常量,变量,功能调用或其他表达式。常量,例如:20,t#20s,‘test’。变量,例如:iVar,Var1[2,3]。功能调用,值为调用返回值,例如:Fun1(1,2,4)。其它表达式:10+3,var1ORvar2,(x+y)/z,iVar1:=iVar2+22。表达式的求值以特定的操作符优先权定义的顺序,按操作符对操作数进行求值。表达式中具有最高优先权的操作符应首先进行求值,接着是下一个较低优先权的操作符等,从高到低依次求值完成。下表记录了ST语言的操作符及其优先级顺序。

2.关键字关键字是语言元素特征化的词法单元。在IEC-3标准中,关键字作为编程语言的字,被用于定义不同结构或启动和中指特定的软件元素。部分关键字配对使用,如FUNCTION与END_FUNCTION等。部分关键字单独使用,如ABS等。关键字不能用于任何其他目的,如不能作为变量名或扩展名,既不能用TON作为变量名,也不能用VAR作为扩展名。

此外,下列功能模块和函数的标识符也被保留作为关键字:1)标准数据类型:BOOL,REAL,INT等。2)标准函数名和功能块名:SIN,COS,RS,TON等。3)指令表语言中的文本操作符:LD,ST,ADD,GT等4)结构化文本语言中的文本操作符:NOT,MOD,AND等。3.操作符

4.常用ST指令介绍4.1赋值指令赋值指令用于变量赋值,也就是赋值关键字的左边是变量,右侧为要赋的值,通过赋值关键字进行赋值。例如:Var1:=Var2*10;完成执行后,Var1值为Var2的10倍。其中的赋值关键字包含三种:“:=”、“S=”、“R=”。(1)“:=”为一般赋值,右值直接赋给左值,左值和右值相等。(2)“S=”为置位赋值,表示如果右值为TRUE,左值变量变为TRUE(置位),直到调用R=命令来初始化。(3)“R=”为复位赋值,表示如果右值为TRUE,左值变量变为FALSE(复位)。用于复位S=指令置位的变量。例如:aS=b;一旦b为TRUE后,a会保持TRUE,即使b变为FALSE后。4.2功能块的调用语法:FB实例名(FB输入变量:=值和地址

,更多FB输入变量:=值和地址

...更多FB输入变量);下列中,一个延时功能块(TON)被调用,参数IN和PT被分配。那么结果变量Q被分配到变量A。延时FB通过"TMRON"实例化。FBinstancename,FBvariableMR(IN:=%IX5,PT:=);A:=TMR.Q;4.3RETUTN指令RETURN指令表示当前置条件为TRUE时,离开此POU。语法:RETURN;示例IFb=TRUETHENRETURN;END_IF;a:=a+1;如果b是TRUE,语句a:=a+1;不会被执行,POU会立即被返回。4.4IF指令通过IF关键字,可以判断执行条件,根据执行条件,执行相应的指令。语法:IF布尔表达式1THENIF_指令{ELSIF布尔表达式2THENELSIF_指令1ELSIF布尔表达式nTHENELSIF_指令-1ELSEELSE_指令}END_IF;其中,{}内部分是可选的,如果布尔表达式1为TRUE,那么只有IF_指令被执行,其它不被执行,否则,从布尔表达式2开始,一个一个计算布尔条件表达式直到其中一个表达式值为TRUE,然后执行此表达式对应的指令,如果没有表达式值为TRUE,那么执行ELSE_指令对应的指令。示例IFtemp17THENheating_on:=TRUE;ELSEheating_on:=FALSE;END_IF;这里,当温度低于17度时,加热打开,否则它保持关闭。4.5CASE指令使用CASE指令,可以根据一个条件变量,根据其对应的多个值罗列处理对应的命令。条件变量只能是整数。语法:CASEVar1OFvalue1:Instruction1value2:Instruction2value3,value4,value5:Instruction3value6..value10:Instruction4...valuen:InstructionnELSEELSEInstructionEND_CASE;CASE指令根据以下流程处理:*如果变量Var1的值为valueI,那么InstructionI会被执行*如果Var1没有匹配任何一个值,那么ELSEInstruction被执行*如果同一个指令在几个变量值时执行,那么可以把这些值一个接一个的写出来,用逗号隔开,因此共同执行*如果同一个指令会在一个变量范围内执行,可以写上初始值和结束值,中间用两个点隔开。你可以把这些情况合一。4.6WHILE循环WHILE循环和FOR循环一样可以作为循环处理使用,但和FOR循环不同是循环条件可以是任意布尔表达式。一旦循环条件满足,循环就执行,否则退出循环。语法:WHILEbooleanexpressionDOinstructionsEND_WHILE;当Boolean_expression值为TRUE时,Instructions指令开始执行,直到Boolean_expression值为FALSE。Boolean_expression在第一次值为FALSE,那么Instructions永不会被执行。如果Boolean_expression永远不会为FALSE,那么Instructions重复执行不停,这叫做死循环,编程时一定确保不要出现死循环。示例WHILECounter0DOVar1:=Var1*2;Counter:=Counter-1;END_WHILE在一定意义上来说,WHILE循环和REPEAT循环比FOR循环功能更强大,因为不需要在执行循环之前计算循环次数。因此,在有些情况下,用WHILE循环和REPEAT循环两种循环就可以了。然而,如果清楚知道循环次数,那么FOR循环更好。4.7REPEATREPEAT循环不同于WHILE循环,因为循环条件是在循环指令执行后才检查的,这意味着,循环至少执行一次,不管循环条件值如何。语法:REPEATinstructionsUNTILBooleanexpressionEND_REPEAT;执行逻辑为:Instructions一直执行直到Booleanexpression值为TRUE。如果Booleanexpression在第一次值TRUE,那么Instructions只被执行一遍。如果Boolean_expression值永远不是TRUE,那么Instructions永远执行不停,导致死循环。示例REPEATVar1:=Var1*2;Counter:=Counter-1;UNTILCounter=0;END_REPEAT;4.8CONTINUE语句CONTINUE指令在FOR,WHILE和REPEAT循环中使用,用于提前结束本轮循环,并重新开始下一轮循环。示例FORCounter:=1TO5BYDOINT1:=INT1/2;IFINT1=0THENCONTINUE;END_JFVar:=Var1/UBT1LEND_FOR;Erg:=Var1;4.9FOR循环通过FOR循环,可以编写重复处理逻辑。语法:FORINT_Var:=INIT_VALUETOEND_VALUE{BYStepsize}DOinstructionsEND_FOR;{}内的部分是可选的。INT_Var是计数器,是整数类型,只要计数器INT_Var不大于END_VALUE,Instructions会被执行。在执行Instructions之前首先要检查该条件,如果INIT_VALUE大于END_VALUE,instructions不会被执行。当Instructions执行一次后,INT_Var自动增加Stepsize。Stepsize可以是任意整数值,如果不写此参数,默认值为1。当INT_Var大于END_VALUE时,循环停止。示例FORCounter:=1TO5BY1DOVar1:=Var1*2;END_FOR;Erg:=Var1;我们假设Var1默认值是2,经过FOR循环后,它的值是32。4.10注释在结构化文本中有两种写注释的方法。多行注释,用“(*”开始,“*)”结束。这允许注释跨行注释。例如:"(*Thisisa

分享 转发
TOP
发新话题 回复该主题