RALSCL功能培训何纯玉hecy@ral.neu.edu.cn东北大学轧制技术及连轧自动化国家重点实验室2014.1.10RAL1、SCL介绍2、SCL安装与程序建立过程3、SCL程序结构定义4、SCL程序结构控制5、SCL变量访问6、SCL变量类型转换7、SCL语句与梯形图对照8、SCL示例1—温度滤波处理9、SCL示例2—阀门按次序延迟打开主要内容RAL1、SCL介绍SCL(结构化文本编程)结构化文本是一种类似于计算机高级语言的编程方式,它的语法规范接近计算机中的PASCAL语言。Step7默认情况下只支持梯形图和指令表编程,但通过安装“S7-SCL”软件包和“S7-Graph”软件包可实现结构化文本和流程图编程。可以简化传统的‘梯形图’编程方式难于实现复杂的控制要求。SCL程序编写完成后,编译生成FC、FB或DB,与梯形图配合使用。系统的总体结构可以由梯形图建立,对一些复杂逻辑可以用SCL编写,编译后得到FC、FB,用梯形图来调用,简化系统的维护难度。RAL2、SCL安装与程序建立过程在Step7中,结构化文本编程被称为结构化控制语言(StructuredControlLanguage),缩写为SCL.Step7V5.3的软件包中已包含了S7-SCL软件包,在安装Step7V5.3时,系统会提示是否要安装S7-SCL,把复选框打钩即可。RAL2、SCL安装与程序建立过程SCL软件包用于以“源文件”的方式编写功能块、函数块。步骤如下:第一步:当Step7中已正确安装SCL软件包后,会有如下界面:RAL2、SCL安装与程序建立过程第二步:进入SCL编程界面,并选择准备编写的程序块的类别RAL2、SCL安装与程序建立过程第三步:编写程序并编译RAL2、SCL安装与程序建立过程用SCL编写的功能块,与普通梯形图编写的一样,可以被别的梯形图调用;SCL源程序,保存在“Sources”文件夹中,随时打开进行修改。RAL3、SCL程序结构定义1、常见数据类型布尔型:bool,1位字节:byte,1个字节整数:int,2个字节长整数:dint,4个字节字:word,2个字节长字:dword,4个字节浮点数:real,4个字节字符:char,1个字节字符串:string[XX],XX+2个字节数组定义:array[X..X]of类型变量定义方法:变量名:变量类型;例如:i:int;r:real;arr_int:array[1..10]ofint;RAL3、SCL程序结构定义2、数据块定义DATA_BLOCKDBxxx////BlockComment...//STRUCTEND_STRUCTBEGINEND_DATA_BLOCKDATA_BLOCKDB150////这是测试的数据块//STRUCTi:INT;r:REAL;c:CHAR;s:STRING[30];arr_r:ARRAY[1..10]OFREAL;END_STRUCTBEGINEND_DATA_BLOCKRAL3、SCL程序结构定义2、数据块定义DATA_BLOCKDB150////这是测试的数据块//STRUCTi:INT;r:REAL;c:CHAR;s:STRING[30];arr_r:ARRAY[1..10]OFREAL;END_STRUCTBEGINEND_DATA_BLOCK注意:数据块中变量访问:DBXXX.变量名RAL3、SCL程序结构定义3、FC定义FUNCTIONFCxxx:INTVAR_TEMP//TemporaryVariablesEND_VAR//StatementSection;FCxxx:=100;END_FUNCTIONFUNCTIONFC150:INTVAR_TEMPi:int;END_VARi:=10;FC150:=i;END_FUNCTION注意:程序每行以“;”结尾;变量赋值以“:=”表示RAL3、SCL程序结构定义3、FC定义FUNCTIONFC150:VOIDVAR_INPUTi1:int;i2:int;END_VARVAR_OUTPUTout:int;END_VARout:=i1+i2;END_FUNCTION定义输入、输出变量VAR_INPUTEND_VARVAR_OUTPUTEND_VARVAR_IN_OUTEND_VARRAL3、SCL程序结构定义3、FB定义FUNCTION_BLOCKFBxxxVAR_TEMP//TemporaryVariablesEND_VARVAR//StaticVariablesEND_VAR//StatementSection;END_FUNCTION_BLOCKFUNCTION_BLOCKFB150VAR_TEMPi:int;END_VARVARv1:int;v2:real;END_VARv1:=v1+1;v2:=v2+2;END_FUNCTION_BLOCKRAL3、SCL程序结构定义3、FB定义FUNCTION_BLOCKFB150VAR_TEMPi:int;END_VARVARv1:int;v2:real;END_VARv1:=v1+1;v2:=v2+2;END_FUNCTION_BLOCKRAL4、SCL程序结构控制1、条件控制IFa=bTHEN//StatementSection_IF;ELSIFa=cTHEN//StatementSection_ELSIF;ELSE//StatementSection_ELSE;END_IF;CASEvalueOF0..3://Statements_0..3;8://Statements_8;ELSE://Statements_ELSE;END_CASE;变量比较:,=,,=,=逻辑符号:and,or,notRAL4、SCL程序结构控制1、循环控制FORControlVariable:=StartTOEndBYIncrementDO//StatementSection;END_FOR;WHILEa=bDO//StatementSection;END_WHILE;REPEAT//StatementSection;UNTILa=bEND_REPEAT;RAL5、SCL变量访问1、内存变量与IO变量直接访问:M0.0,MW100,MD200I0.0,IW100q0.0,qw100寻址访问:M[i,j],MB[i],IW[i],QB[i],MD[i]以上类型缺省为BYTE,WORD,DWORD类型,如果需要INT,DINT,REAL需要提前在符号表中定义,定义后可直接访问。RAL5、SCL变量访问2、数据块变量直接访问:db100.dbx0.0,db100.dbw100,db100.dbd200db100.dbx[i,j],db100.dbw[i],db100.dbd[i]使用变量名访问:db100.b,db100.i,db100.r,db100.arr[i]建议使用SCL定义数据库,再用变量名访问,程序易读。内存变量和数据块中的变量属于全局变量,即赋值后如果不改变会一直保留原来的值。RAL6、SCL变量类型转换SCL要求类型相同才能赋值word_to_int(word_var),int_to_word(int_var)word_to_dword(word_var),dword_to_word(dword_var)int_to_dint(int_var),dint_to_int(dint_var)int_to_real(int_var),real_to_int(real_var)dint_to_real(dint_var),real_to_dint(real_var)byte_to_word(byte_var),word_to_byte(word_var)byte_to_int(byte_var),int_to_byte(int_var)变量类型转换函数属于系统关键字,系统关键字与普通程序会有颜色区别,转换函数如果颜色未发生变化,仔细检查拼写或查询帮助。RAL7、SCL语句与梯形图对照M400.1:=m400.0灵活运用变量类型转换函数,一条语句替代多个梯形图命令。Temp_real:=int_to_real(word_to_int(iw40));变量赋值Temp_int:=real_to_int(Temperature)M100.1:=notm100.0RAL7、SCL语句与梯形图对照if(M100.0)thenM100.1:=true;End_if变量赋值if(M100.0)thenM100.1:=false;End_ifRAL7、SCL语句与梯形图对照FUNCTIONFC150:BOOLVAR_INPUTin_bit:BOOL;END_VARVAR_IN_OUTtmp_bit:BOOL;END_VARIF(in_bitAND(NOTtmp_bit))THENFC150:=true;ELSEFC150:=false;END_IF;tmp_bit:=in_bit;END_FUNCTION上升沿RAL7、SCL语句与梯形图对照FUNCTIONFC151:BOOLVAR_INPUTin_bit:BOOL;END_VARVAR_IN_OUTtmp_bit:BOOL;END_VARIF((NOTin_bit)ANDtmp_bit)THENFC151:=true;ELSEFC151:=false;END_IF;tmp_bit:=in_bit;END_FUNCTION下降沿RAL7、SCL语句与梯形图对照IF(m100.1)THENint1:=10;END_IF;IF(Temp1Temp2)THRNint1:=10;END_IF;逻辑判断RAL7、SCL语句与梯形图对照加法:SCL-“+”,要求类型相同梯形图-ADD_I,ADD_DI,ADD_R减法:SCL-“-”,要求类型相同梯形图-SUB_I,SUB_DI,SUB_R乘法:SCL-“*”,要求类型相同梯形图-MUL_I,MUL_DI,MUL_R除法:SCL-“/”,要求类型相同梯形图-DIV_I,DIV_DI,DIV_R取余:SCL-“mod”,整数梯形图-MOD_DI其它数学函数类似:SIN,COS,TAN,LN,LOG,ASIN,ACOS,ATAN数学运算符号RAL7、SCL语句与梯形图对照直接用函数名称调用,要求输入、输出参数名称写全out_int:=LIMIT(MN:=0,MX:=100,IN:=in_int);函数调用M100.1:=FC151(in_bit:=m100.0,tmp_bit:=M100.2);RAL7、SCL语句与梯形图对照函数调用FUNCTIONFC151:VOIDVAR_INPUTin_bit:BOOL;END_VARVAR_IN_OUTtmp_bit:BOOL;END_VARVAR_OUTPUTout_bit:BOOL;END_VARIF((NOTin_bit)ANDtmp_bit)THENout_bit:=true;ELSEout_bit:=false;END_IF;tmp_bit:=in_bit;END_FUNCTIONFC151(in_bit:=m100.0,tmp_bit:=M100.2,out_bit:=M100.1);RAL8、SCL示例1—温度滤波处理定义DBDATA_BLOCKDB150////温度暂存数据//STRUCTnum:int;Temp:ARRAY[1..10]OFREAL;END_STRUCTBEGINEND_DATA_BLOCK均值滤波:取昀近10个温度采样值,取其平均值作为实际温度输出值,减少表面水等条件的干扰,使测量温度更准确。RAL8、SCL示例1—温度滤波处理IF(db150.num=1ANDdb150.num=10)THENdb150.Temp[db150.num]:=in_Temp;END_IF;IF(db150.num10)THENFORi:=1TO9DOdb150.Temp[i]:=d