西门子S7-SCL编程与应用第一章SCL语言概述-2-文件操作程序结构S7-SCL与SIMATICManager软件安装SCL语言1.1SCL语言-3-概述SCL(结构化控制语言)是一种用于S7-300/400和C7等自动化系统的高级文本编程语言。借助SCL,可以简化控制技术领域复杂的计算、算法、数据管理和数据组织等编程工作。IFNew_valueOld_valueTHENindex:=(indexmodmax_values)+1;measurement_values[index]:=INT_TO_REAL(measurement);ENDIF;SCL编程语言1.1SCL语言-4-编程标准SCL符合语言标准DINEN-61131Part3(国际标准IEC1131-3)。DINEN-61131Part3(国际标准IEC1131-3)对可编程控制器的编程语言实现了标准化。SCL的基础是该标准中的ST“结构化文本”部分。SCL类似于Pascal,具备高级标称语言的所有优势。SCL除了有清晰的控制结构和丰富的数据概念,还拥有例如过程和函数等重要内容。因此采用了SCL,可以编制结构清洗,易读性好的程序。1.1SCL语言-5-应用领域复杂的数学函数功能,例如:调节器数据管理配方管理具有大量分支和循环结构的程序特点易于掌握可短时间开发易读性更好的程序可间接地描述复杂的算法支持S7中的块和数据类型等概念与S7语言(LAD、FBD、STL)实现系统集成1.2软件安装-6-概述S7-SCL选件包需单独进行安装。将选件包存放在英文目录下,双节setup.exe,即可开始执行安装程序。1.2软件安装-7-软件验证当S7-SCL选件包安装后,可以在STEP7Manager中插入SCL源文件。源文件插入1.3S7-SCL与SIMATICManager-8-软件架构S7-SCL的程序以源文件的格式出现在Source文件夹中,通过编译器将程序块编译,生成执行块并保存在Block文件夹内。源文件存放位置执行程序存放位置共用符号表1.3S7-SCL与SIMATICManager-9-设置在使用SCL之前,需要检查并调整某些个性化设置。在SCL编程界面中,通过点击Option-Customize进行软件设置。1.3S7-SCL与SIMATICManager-10-设置生成块设置编译设置编辑设置必选1.4程序结构-11-概述一个SCL程序可以由一个或多个SCL源文件构成。采用SCL编辑器可以编辑这些源文件。采用一个还是多个源文件取决于具体目标。若需要多个独立的块,则应选用每个块一个源文件的方式。如果需要创建一个完整的程序或者某个程序的一个组成部分,则可以在一个源文件中包含多个块。OB1FC2背景DBFB9程序调用顺序:OB1→FC2→FB91.4程序结构-12-结构图.FB9..FC2..OB1.SCL源文件一个源文件构成一个完成程序OB1、FC2、FB9与背景DBOB1源文件FC2源文件FB9源文件多个源文件构成一个完成程序1.4程序结构-13-调用顺序在SCL程序编写时,必须要注意源程序的块调用顺序。例如:在OB1先调用FC2,再调用FB9,则必须先编译FB9,再编译FC2,最后编译OB1。这意味着,在源文件中,FB9必须在FC2之前,FC2必须在OB1之前OB1FC2背景DBFB9程序调用顺序:OB1→FC2→FB9.FB9..FC2..OB1.SCL源文件OB1、FC2、FB9与背景DB同一个源文件中的程序编写次序,注意先后编译次序:FB9→FC2→OB11.4程序结构-14-SCL控制文件一个SCL程序可以由多个SCL源文件组成。SCL控制文件根据调用编译时各个源文件的编译顺序依次编译各文件。OB1FC3FC5OB32FC17FB22DB2DB3FC771.4程序结构-15-SCL控制文件SCL源文件3SCL源文件2SCL源文件1SCL控制文件用于SCL编译器的控制文件如果在SCL源文件2中调用SCL源文件3内包含的块,则在SCL控制文件中,SCL源文件3必须在SCL源文件2的前面。源文件1源文件2源文件2多个源文件构成一个完成程序1.4程序结构-16-块库在源文件中将需要调用库中的块复制到Block程序块中。程序库程序库文件1.5文件操作-17-导入源文件右击插入新对象-外部源文件用于外部程序导入1.5文件操作-18-导出源文件右击源文件-导出源文件用于源文件导出操作1.5文件操作-19-编译源文件编译按键1.5文件操作-20-下载与帮助编译结果出错E:错误W:警告按F1进入帮助下载按键第二章创建和调用块-21-数据块的结构功能块(FB/SFB)的结构函数(FC/SFC)的结构组织块(OB)的结构源文件结构第二章创建和调用块-22-数据块结构与用户自定义数据类型结构功能块(FB/SFB)的结构函数(FC/SFC)的结构组织块(OB)的结构用户自定义数据类型结构2.1源文件结构-23-概述一个SCL源文件可以包含任意个块:如OB块、FB块、FC块、DB块和UDT块。SCL源文件中的每一个独立的块,都有一个用于构建该块的标准描述符(表示块开始和块结束)。标准描述符取决于块类型,块本身则由一个声明部分和一个指令部分组成。2.1源文件结构-24-文件结构DB5FB10FC62FC61OB1FUNCTION_BOLCKFB10属性声明部分指令部分END_FUNCTION_BLOCK2.1源文件结构-25-源文件编译顺序为了使SCL源文件可以顺利地编译成功,涉及编译顺序,需注意:被调用块必须始终先于调用他们的块完成声明;用户自定义数据类型(UDT)必须先于使用该数据类型的所有块之前完成声明;全局数据块必须先于访问该全局数据块的所有块之前完成声明如果源文件创建了OB1块,则该块通常位于顺序的末尾;背景数据块由编译器自动创建。2.1源文件结构-26-块的开始和结束块的各种源文本,根据具体的块类型,由表示块的开始和结束的标准描述符和块描述符引入。块名称可以采用绝对方式(例如FB10),也可以采用符号方式(例如motor)进行声明。使用符号声明时,符号表中必须有一个相应的条目。UDTDBFBTYPEudt_name:END_TYPEDATA_BLOCKdb_name:END_DATA_BLOCKFUNCTION_BLOCKfb_name:END_FUNCTION_BLOCKFCOBFUNCTIONfc_name:function_type:END_FUNCTIONORGAINZATION_BOLCKob_name:END_ORGAINZATION_BOLCK块的开始和结束定义2.1源文件结构-27-块模块块模块包含块的开始和结束部分。在SCL编辑器中,通过菜单项insert-BOLCKTemplate-OB、FB、FC、DB和UDT,对源文件中的块进行插入。块模块插入2.1源文件结构-28-块属性块属性包含标题、版本、块保护属性、作者等块信息。FUNCTION_BOLCKFB10属性声明部分指令部分END_FUNCTION_BLOCK标题=‘Controller’版本:’2.1’KNOW_HOW_PROTECT作者:Training名字:Motor2.1源文件结构-29-声明部分声明部分用于定义局部和全局变量、块参数、常量和跳转标志。声明部分可分成各个声明块,每个声明块有自己的关键字作为标志。常量跳转标志临时变量静态变量CONST声明表END_CONSTLABEL声明表END_LABELVAR_TEMP声明表END_VARVAR声明表END_VAR输入参数输出参数输入/输出参数结构体VAR_INPUT声明表END_VARVAR_OUTPUT声明表END_VARVAR_IN_OUT声明表END_VARSTRUCT生明表END_STRUCT块的声明格式2.1源文件结构-30-声明部分FUNCTION_BOLCKFB10属性声明部分指令部分END_FUNCTION_BLOCKCONSTFIX_VALUE:=5;P_Part:=0.8;END_CONSTVARValue1,Value2:INT;END_VARVAR_INPUTIN1,IN2:BOOL;END_VARVAR_OUTPUTQ01:BOOL;Display:INT;END_VAR2.1源文件结构-31-声明数据声明数据可以通过insert-BlockTemplate-Constant、Parameter进行插入模板。声明数据插入2.1源文件结构-32-指令部分程序段(OB、FB、FC)被调用后,块的指令部分包含的指令将被执行。这些指令的作用是处理数据和地址。对于数据块,指令还可以将某些值保存在数据块中。各种指令可以归纳为赋值、控制指令、子程序处理三类:赋值:用来将某个表达式或某个值赋给某个变量;控制指令:用来在程序中实现分支或重复执行指令;子程序处理:用来调用函数和功能。2.1源文件结构-33-指令部分FUNCTION_BOLCKFB10属性声明部分指令部分END_FUNCTION_BLOCKBEGIN//位运算、算法实例Q0.0:=I0.0ANDI0.1;MW20:=MW22+MW24;//赋值实例Measured_Value:=0;//控制指令IFI1.1THENN:=0;SUM:=0.0;ELSEIFSTART=TRUETHENN:=N+1;SUM:=SUM+IN;ELSEOK:=FALSE;END_IF;//子程序调用实例FB10.DB2(Pa:=10,Pa2:=MW2)Result:=DB2.MVAL8;2.1源文件结构-34-指令部分注意事项采用指令进行编程时,需要注意:指令部分以关键词BEGIN为开始,以块结束关键词为结束;每一个指令都以一个分号为结束;指令部分中使用的全部标识符都必须在声明部分定义或在符号表中定义。2.1源文件结构-35-指令插入可以通过insert-Controlstructure-IF,CASE,FOR,WHILE,REPEAT对控制结构模块进行插入。控制结构插入2.2组织块(OB)的结构-36-概述组织块只能由操作系统调用,循环调用或在出现特定事件时调用。通常在组织中调用含有实际程序代码的FC和FB。为了能够正常地运行,每一个组织块基本上都要求有20字节的局部数据。需要指出的是,也可以声明其他更多的局部数据。OB编号用途OB编号用途OB1循环程序OB83插入/删除中断OB10-17时钟中断OB84CPU硬件故障OB20-23延迟中断OB85程序顺序错误OB30-38循环中断OB86DP故障OB40-47硬件中断OB87通信错误OB80时间错误OB100-102启动组织块OB81电源故障OB121编程错误OB82诊断中断OB122IO访问错误2.2组织块(OB)的结构-37-组织块结构FUNCTONFC62:BOOLVAR_INPUTIN1:Bool;IN2:Bool;END_VARBEGIN….FC62:=IN1ANDIN2;END_FUNCTIONFUNCTONFC61:VOIDBEGIN….Q0.0:=I0.0ANDI0.1;END_FUNCTIONORGANIZATION_BLOCKOB1VAR_TEMPinfo:ARRAY[0..19]OFBYTE;END_VARBEGINFC61();Q4.0:=FC62(IN1:=I4.0,IN2:=I4.1)Q4.1:=M10.4END_ORGANIZATION_BLOCKOB1可替换成符号表中的符号必须声明20个字节的局部数据,也可以声明其他临时性的局部变量调用FC61,无输入输出和返回值调用FC62,有输入输出和返回值一般赋值指令操作2.3函数(FC/SFC)的结构-38-概述FC是一个程序段,该程序段中可以使用所有的S7和SCL指令。用户可以访问CPU存储区,如输入输出、数据块、时间、计数器等。这种方式可以以绝对方式或符号方式进行。为了保证FC的通用性,FC不应直接访问