您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Siemens-SCL语句详解
结构化文本ST编程,西门子PLC编程语言中叫SCL,其它任何PLC控制器编程语言还是叫结构化编程ST。西门子SCL语言第一章IF:条件执行IF分支IF条件THEN指令END_IF;如果满足该条件,则将执行THEN后编写的指令。如果不满足该条件,则程序将从END_IF后的下一条指令开始继续执行。IF和ELSE分支IF条件THEN指令1ELSE指令0;END_IF;如果满足该条件,则将执行THEN后编写的指令。如果不满足该条件,则将执行ELSE后编写的指令。程序将从END_IF后的下一条指令开始继续执行。IF、ELSIF和ELSE分支IF条件1THEN指令1ELSIF条件2THEN指令2ELSE指令0;END_IF;如果满足第一个条件(条件1),则将执行THEN后的指令(指令1)。执行这些指令后,程序将从END_IF后继续执行。如果不满足第一个条件,则将检查第二个条件(条件2)。如果满足第二个条件(条件2),则将执行THEN后的指令(指令2)。执行这些指令后,程序将从END_IF后继续执行。如果不满足任何条件,则先执行ELSE后的指令(指令0),再执行END_IF后的程序部分。在IF指令内可以嵌套任意多个ELSIF和THEN组合。可以选择对ELSE分支进行编程。IFTag_1=1THENTag_Value:=10;ELSIFTag_2=1THENTag_Value:=20;ELSIFTag_3=1THENTag_Value:=30;ELSETag_Value:=0;END_IF;IF案例如下:FUNCTION_BLOCKIFTITLE='IFStatement'//IF...THEN...ELSE...END_IFVAR_INPUTStart:BOOL;Manual:BOOL;ActVal:INT;END_VARVARManual_FM:BOOL;over:BOOL;under:BOOL;equal_to:BOOL;Setpoint_man:INT:=1000;Setpoint:INT;Deviation:INT;y_index:INT:=12;Total:INT;END_VARVAR_TEMPi:INT;END_VARBEGIN//SimpleIFbranchIFStartTHENSetpoint:=1200;END_IF;IFManualTHENSetpoint:=Setpoint_man;Q4.0:=TRUE;END_IF;//BranchwithTHEN...ELSEIFActValSetpointTHENDeviation:=ActVal-Setpoint;ELSEDeviation:=Setpoint-ActVal;END_IF;//BranchwithELSIFIFActValSetpointTHENover:=TRUE;under:=FALSE;equal_to:=FALSE;ELSIFActValSetpointTHENunder:=TRUE;over:=FALSE;equal_to:=FALSE;ELSEequal_to:=TRUE;over:=FALSE;under:=FALSE;END_IF;//Edgeevalaution(risingedge)IFManualANDNOTManual_FMTHEN(*risingedge*);END_IF;Manual_FM:=Manual;//Correctedgememorybit//Countingbitssetto1Total:=0;FORi:=1TO32DOIFM[y_index,i]=TRUETHENTotal:=Total+1;END_IF;END_FOR;END_FUNCTION_BLOCK第二章CASE:创建多路分支说明:使用“创建多路分支”指令,可以根据数字表达式的值执行多个指令序列中的一个。表达式的值必须为整数。执行该指令时,会将表达式的值与多个常数的值进行比较。如果表达式的值等于某个常数的值,则将执行紧跟在该常数后编写的指令。常数可以为以下值:·整数(例如,5)·整数范围(例如,15到20)·由整数和范围组成的枚举(例如,10、11、15到20)CASE表达式OF常量1:指令1常量2:指令2常量X:指令X;//X=3ELSE指令0;END_CASE;例子CASE#aOF0:Tag_1:=1;1,3,5:Tag_2:=1;6...10:Tag_3:=1;16,17,20...25:Tag_4:=1;ELSETag_5:=1;END_CASE;CASEOF案例小程序:FUNCTION_BLOCKCASETITLE='CASEStatements'VARExpression1:INT;Expression2:INT;Expression3:INT;Day_of_the_week:STRING[12];Dat:DATE;ID:INT;Error_number:INT;END_VARVAR_TEMPReturn_jump:INT;END_VARLABELSubroutine;M_1;M_2;M_3;End;END_LABELBEGIN//CASEwithsimplewaitinglistCASEExpression1OF1:Q4.1:=TRUE;2:Q4.2:=TRUE;3:Q4.3:=TRUE;END_CASE;//CASEwithvalueareasCASEExpression2OF1,2:Q4.4:=TRUE;2,3:Q4.5:=TRUE;ELSE:QB4:=0;END_CASE;//CASEwithgapsinthevalueareasCASEExpression3OF1..4:Q5.1:=TRUE;7..9:Q5.2:=TRUE;12..16:Q5.3:=TRUE;ELSE:QB5:=0;END_CASE;//DeterminingthedayoftheweekfromtheDATEformatCASEDINT_TO_INT(DATE_TO_DINT(Dat)MOD7)+1OF1:Day_of_the_week:='Monday';2:Day_of_the_week:='Tuesday';3:Day_of_the_week:='Wednesday';4:Day_of_the_week:='Thursday';5:Day_of_the_week:='Friday';6:Day_of_the_week:='Saturday';7:Day_of_the_week:='Sunday';END_CASE;//AssigninganerrornumberCASEIDOF0:Error_number:=0;1,3,5:Error_number:=ID+128;6..10:Error_number:=ID;ELSE:Error_number:=16#7F;END_CASE;//SubroutinesIFI1.0THENReturn_jump:=1;GOTOsubroutine;END_IF;M_1:(*Returnjumpfromsubroutine*);//...IFI1.1THENReturn_jump:=2;GOTOsubroutine;END_IF;M_2:(*Returnjumpfromsubroutine*);//...IFI1.2THENReturn_jump:=3;GOTOsubroutine;END_IF;M_3:(*Returnjumpfromsubroutine*);//...GOTOEnd;//JumpoversubroutineSubroutine:;//Jumptosubroutine//...Statemen//SelectionforthereturnjumpCASEreturn_jumpOF1:GOTOM_1;2:GOTOM_2;3:GOTOM_3;END_CASE;//*********************************************************End:;END_FUNCTION_BLOCK第三章FOR:在计数循环中执行说明使用“在计数循环中执行”指令,重复执行程序循环,直至运行变量不在指定的取值范围内。也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。通过指令“复查循环条件”(CONTINUE),可以终止当前连续运行的程序循环。通过指令“立即退出循环”(EXIT)终止整个循环的执行。FORi:=2TO8BY2DOa_array:=Tag_Value*b_array;END_FOR;FOR指令案例FUNCTION_BLOCKFORTITLE='FORStatement'//FOR...TO...BY...DO...END_FOR//CONTINUE...EXITNAME:C28FORFAMILY:SCL_BookAUTHOR:BergerVERSION:'1.0'VARindex1:INT:=4;index2:INT:=6;index3:INT:=8;END_VARVAR_TEMPRuntime_variable:INT;i,k:INT;END_VARBEGIN//SimpleFORloopFORRuntime_variable:=0TO7DOM[index1,Runtime_variable]:=TRUE;END_FOR;FORRuntime_variable:=0TO15BY2DOM[index2+Runtime_variableMOD8,Runtime_variable]:=TRUE;END_FOR;MD[index1]:=0;MD[index2]:=0;(*Setmemorybits*)FORi:=2TO23DOM[iDIV8,iMOD8]:=TRUE;END_FOR;MD[index2]:=MD[index1];//NestedFORloops(*Resetmemorybits*)FORi:=0TO2DOFORk:=0TO7DOIF(k2ANDi=0)THENCONTINUE;END_IF;IF(i=2ANDk5)THENEXIT;END_IF;M[i,K]:=FALSE;END_FOR;END_FOR;MW[index3]:=INT_TO_WORD(i);MW[index3+2]:=INT_TO_WORD(k);//FORloopwithstepwidth1FORi:=128TO142BY2DOMW:=PIW;END_FOR;//AbortFORloopsFORRuntime_variable:=0TO15DOM[index2,Runtime_variable]:=TRUE;IFRuntime_variable=7THENCONTINUE;ELSIFRuntime_variable=8THENCONTINUE;END_IF;IFRuntime_variable=10THENEXIT;END_IF;M[index2+1,Runtime_variable]:=TRUE;END_FOR;MD[index2]:=0;END_FUNCTION_BLOCK第四章WHILE:满足条件时执行说明使用“满足条件时执行”指令可以重复执行程序循环,直至不满足执行条件为止。该条件是结果为布尔值(TRUE或FALSE)的表达式。可以将逻辑表达式或比较表达式作为条件。执行该指令时,将对指定的表达式进行运算。如果表达式的值为TRUE,则表示满足该条件;如果其值为FALSE,则表示不满足该条件。也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。通过指令“复查循环条件”(CONTINUE),可以终止当前连续运行的程序循环。通过指令“立即退出循环”(EXIT)终止整个循环的执行。WHILETag_Value1Tag_Value2DOTa
本文标题:Siemens-SCL语句详解
链接地址:https://www.777doc.com/doc-6851224 .html