STSTSTST语语语语言言言言概概概概述述述述ST语言在图形编程中和其它图形编程语言组合使用。实现了IEC1131-3标准的一个子集。使用方法使用方法使用方法使用方法在工程中加入ST语言段落。可以在梯形图和功能块图中插入文本代码模块。在模块中用ST语言编程。可以在顺控图中的步的操作中使用=操作限定词,然后可以用ST语言编程。在顺控图的转换条件中可以使用ST语言的逻辑表达式来指定条件。在SFC编辑器中,当指定转换条件时可以使用ST语言逻辑表达式。在操作中用=操作符可以使用ST的语句,双击该条操作即可弹出编辑界面。注意注意注意注意:使用循环语句会明显增加编译时间,为获得更快的编译速度建议尽可能不使用WHILE语句并且少使REPEAT/FOR语句。STSTSTST语语语语言言言言语语语语法法法法ST语言在图形编程软件中和其它图形编程语言组合使用。实现了IEC61131-3标准的一个子集。支持多种数据类型,支持函数、结构和数组,可以操作各种系统变量。表表表表达达达达式式式式 表达式为变量、操作符、常量、函数的组合,求值结果为单个值。 表达式的求值按运算符的优先级进行,优先级高的运算符先被处理。相同优先级的运算符按从左到右的顺序执行。 以下为几个合法的表达式举例: A+B*(C-3)+FUNC1(2,D) B1 FUNC1()使用方法使用方法使用方法使用方法变量、函数等标识符的命名必须满足下列条件:以英文字母开头;Page1of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htm续以英文字母、数字或下划线;字符长度最多为24个字符。标识符包括变量、函数、功能块、常数。关键关键关键关键字字字字运运运运算符算符算符算符按运算优先级从高到低有:关键字描述CASE…OF…ELSE…END_CASECASE语句BOOLWORDDWORDINTLONGUINTULONGSFLOATFLOAT数据类型EXIT终止循环FALSE逻辑假FOR…TO…BY…DO…END_FORFOR语句FUNCTION…END_FUNCTION函数定义FUNCTION_BLOCKEND_FUNCTION_BLOCK功能块定义IF…THEN…ELSEIF…ELSE…END_IFIF语句ON逻辑真OFF逻辑假REPEAT…UNTIL…END_REPEATREPEAT语句RETURN函数返回TRUE逻辑真VAR…END_VARVAR_INPUT…END_VARVAR_OUTPUT…END_VAR变量定义WHILE…DO…END_WHILEWHILE语句运算符描述类型优先级()表达式运算 9.取结构成员 8[]取数组成员 8-单目负 7NOT取反逻辑运算7Page2of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htm语语语语句句句句以下为允许的语句列表。*(MUL)乘算术运算6/(DIV)除算术运算6MOD取余算术运算6+(ADD)加算术运算5-(SUB)减算术运算5大于比较运算4=大于等于比较运算4=小于等于比较运算4小于比较运算4=等于比较运算4不等于比较运算4AND与逻辑运算3XOR异或逻辑运算2OR或逻辑运算1No.语句例子1赋值语句A=B;A=B+1;2函数调用、功能块调用A=FUNC(P1,P2);FB1(IN1,OUT1,OUT2);3RETURNA=FUNC(P1,P2);RETURNA;4IFIFA0THENB=1;ELSEIFA-5THENB=2;ELSEB=3;END_IF;5CASETW=FUNC1();CASETWOF1:I=1;2:I=2;Page3of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htm赋赋赋赋值值值值语语语语句句句句赋值语句将“=”右边表达式的值赋给左边的变量。函函函函数数数数调调调调用用用用语语语语句句句句函数和功能块的调用包括函数名或功能块名加小括号对,括号内为参数,参数间由逗号隔开。函数的调用规则:ELSEI=3;END_CASE;6FORJ=10;FORI=1TO100BY2DOIFB1THENJ=1;EXIT;END_IF;END_FOR;7WHILEJ=1;WHILEJ=100ANDB1DOJ=J+2;END_WHILE;8REPEATJ=1;REPEATJ=J+2;UNTILJ=101ORB1END_REPEAT;9EXITJ=1;WHILEJ=100ANDB1DOJ=J+2;IFJ=50THENEXIT; END_IF;END_WHILE;10EMPTYFORI=1TO100BY2DO ;END_FOR;Page4of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htmret=Func(in1,in2); (*作为表达式返回值*)Func(in1,in2);(*作为子程序处理*)功能块的调用规则:调用功能块时要严格按照输入输出顺序,先输入输入参数,再输入输出参数,参数顺序按照定义时的顺序。输出参数必须是变量: FuncBlock(in1,in2,out1,out2)。STSTSTST语语语语言函言函言函言函数数数数和功能和功能和功能和功能块块块块函函函函数数数数定定定定义义义义 只有一个输出(变量类型可以自行确定),根据输入可以唯一确定输出。功能功能功能功能块块块块定定定定义义义义 有多个输出,或输出不但和当前输入有关还和上次内部状态有关。除系统内部的函数和功能块外,用户可以自定义函数和功能块。自定义的函数和功能块可以在工程内LD/FBD段落中调用。函函函函数数数数的的的的调调调调用用用用规则规则规则规则 ret=Func(in1,in2); (*作为表达式返回值*) Func(in1,in2);(*作为子程序处理*)功能功能功能功能块块块块的的的的调调调调用用用用规则规则规则规则 调用功能块时要严格按照输入输出顺序,先输入输入参数,再输入输出参数,参数顺序按照定义时的顺序。 输出参数必须是变量。 FuncBlock(in1,in2,out1,out2);使用限制使用限制使用限制使用限制ST的FUNCTIONFUNCTIONFUNCTIONFUNCTION模块可以调用其它STFUNCTION,允许嵌套可以调用标准函数ST的FUNCTION_BLOCKFUNCTION_BLOCKFUNCTION_BLOCKFUNCTION_BLOCK模块可以调用STFUNCTION可以调用其它STFUNCTION_BLOCK,但是所调用的FUNCTION_BLOCK不允许嵌套Page5of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htm可以调用标准函数TEXTCODETEXTCODETEXTCODETEXTCODE模块可以调用STFUNCTION可以调用STFUNCTION_BLOCK可以调用标准函数可以调用各种编程语言生成的功能块编译编译编译编译速度速度速度速度由于当前SCControl所使用的ARM编译器(SDT251)的缘故,使用循环语句,尤其是其中的WHILE语句,会明显增加编译时间,为获得更快的编译速度建议尽可能不使用WHILE语句以及少使用REPEAT/FOR语句。FUNCTIONFUNCTIONFUNCTIONFUNCTIONFUNCTIONFUNC3:BOOLVAR_INPUT IN1:BOOL;END_VARVAR TEMP1:BOOL;END_VAR FUNC3:=DoSomething();END_FUNCTION 说说说说明明明明:VAR_INPUT/END_VAR用于说明功能块的输入变量;VAR/END_VAR用于说明功能块内部的临时变量(临时变量存储在系统堆栈中,不能维持状态到下一周期);各类变量声明的次序不能颠倒;调用时要严格按照声明的先后次序。FUNCTION_BLOCKFUNCTION_BLOCKFUNCTION_BLOCKFUNCTION_BLOCKPage6of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htmFUNCTION_BLOCKFB3VAR_INPUT IN1:BOOL;END_VAR VAR_OUTPUT OUT1:BOOL;END_VAR VAR TEMP1:BOOL;END_VAR DoSomething(); END_FUNCTION_BLOCK说说说说明明明明:VAR_INPUT/END_VAR用于说明功能块的输入变量;VAR_OUTPUT/END_VAR用于说明功能块的输出变量;VAR/END_VAR用于说明功能块内部的临时变量(临时变量存储在系统堆栈中,不能维持状态到下一周期);各类变量声明的次序不能颠倒;不能对输出变量进行自操作;功能块调用时要严格按照声明的先后次序。STSTSTST语语语语言程序言程序言程序言程序实实实实例例例例赋赋赋赋值值值值语语语语句句句句Page7of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htm赋值语句将“=”右边表达式的值赋给左边的变量。 A=B; A=B+C; A=B*C+D; A=BANDCANDDORE; A= AND_DWORD(B,C);IFIFIFIF语语语语句句句句IF(AAND(BC)OR(EF+1)) THEN AA=BB;ELSEIF(BG) THEN AA=CC;ELSE AA=DD;END_IF;IF语句规定了一组语句在规定的逻辑表达式为TRUE时执行。当逻辑表达式为FALSE时,这些语句不被执行,或在ELSE(ELSEIF)中规定的另一组语句被执行。CASECASECASECASE语语语语句句句句 CASE A OF1: AA=BB;2: AA=CC;3: AA=DD;ELSE AA=EE;END_CASE;Page8of302011-9-20file://C:\DocumentsandSettings\Administrator\LocalSettings\Temp\~hh557.htmCASE语句规定了整数类型的选择项,以及选择项在不同的值时的几组语句组。当选择项等于某个规定的值时,相应的语句组被执行,当没有规定的值符合时在ELSE中的语句组将被执行(在CASE语句中定义了ELSE分支)。FORFORFORFOR语语语语句句句句FORI=1TO100BY2DO DOSOMETHING();END_FOR;在以上FOR语句中,I为控制变量,1为初始值,100为终止值,2为步进值。在FOR语句中控制变量的初始值、终止值、步进值必须是相同的整型。步进值缺省为1。终止条件的判断一开始就进行,当初始值大于终止值时,规定的语句