资源描述:
第5章S7程序结构与程序设计,5.1S7CPU中的程序5.2数据块中的数据存储5.3逻辑块(FC和FB)的结构及编程5.4编辑并调用无参功能(FC)分部程序设计5.5编辑并调用有参功能(FC)结构化程序设计5.6编辑并调用无静态参数的功能块(FB)5.7编辑并调用有静态参数的功能块(FB)5.8使用多重背景结构化程序设计5.9思考与练习,返回首页,5.1S7CPU中的程序,5.1.1用户程序中的块结构5.1.2用户程序结构5.1.3I/O过程映像5.1.4程序循环执行,返回本章,5.1.1用户程序中的块结构,返回本节,5.1.2用户程序结构,线性程序(线性编程)分部式程序(分部编程、分块编程)结构化程序(结构化编程或模块化编程),返回本节,1.线性程序(线性编程),所谓线性程序结构,就是将整个用户程序连续放置在一个循环程序块(OB1)中,块中的程序按顺序执行,CPU通过反复执行OB1来实现自动化控制任务。这种结构和PLC所代替的硬接线继电器控制类似,CPU逐条地处理指令。事实上所有的程序都可以用线性结构实现,不过,线性结构一般适用于相对简单的程序编写。,返回上级,2.分部式程序(分部编程、分块编程),所谓分部程序,就是将整个程序按任务分成若干个部分,并分别放置在不同的功能(FC)、功能块(FB)及组织块中,在一个块中可以进一步分解成段。在组织块OB1中包含按顺序调用其他块的指令,并控制程序执行。在分部程序中,既无数据交换,也不存在重复利用的程序代码。功能(FC)和功能块(FB)不传递也不接收参数,分部程序结构的编程效率比线性程序有所提高,程序测试也较方便,对程序员的要求也不太高。对不太复杂的控制程序可考虑采用这种程序结构。,返回上级,3.结构化程序(结构化编程或模块化编程),所谓结构化程序,就是处理复杂自动化控制任务的过程中,为了使任务更易于控制,常把过程要求类似或相关的功能进行分类,分割为可用于几个任务的通用解决方案的小任务,这些小任务以相应的程序段表示,称为块(FC或FB)。OB1通过调用这些程序块来完成整个自动化控制任务。结构化程序的特点是每个块(FC或FB)在OB1中可能会被多次调用,以完成具有相同过程工艺要求的不同控制对象。这种结构可简化程序设计过程、减小代码长度、提高编程效率,比较适合于较复杂自动化控制任务的设计。,返回上级,5.1.3I/O过程映像,返回本节,5.1.4程序循环执行,返回本节,5.2数据块中的数据存储,5.2.1数据存储区5.2.2数据块5.2.3数据块的数据结构5.2.4建立数据块5.2.5访问数据块,返回本章,5.2.1数据存储区,数据以用户程序变量的形式存储,且具有唯一性。数据可以存储在输入过程映像存储器(PII)、输出过程映像存储器(PIQ)、位存储器(M)、局部数据堆栈(L堆栈)及数据块(DB)中。可以采用基本数据类型、复杂数据类型或参数类型。根据访问方式的不同,这些数据可以在全局符号表或共享数据块中声明,称为全局变量;也可以在OB、FC和FB的变量声明表中声明,称为局部变量。当块被执行时,变量将固定地存储在过程映像区(PII或PIQ)、位存储器区(M)、数据块(DB)或局部堆栈(L)中。,返回本节,5.2.2数据块,数据块定义在S7CPU的存储器中,用户可在存储器中建立一个或多个数据块。每个数据块可大可小,但CPU对数据块数量及数据总量有限制。数据块(DB)可用来存储用户程序中逻辑块的变量数据(如数值)。与临时数据不同,当逻辑块执行结束或数据块关闭时,数据块中的数据保持不变。用户程序可以位、字节、字或双字操作访问数据块中的数据,可以使用符号或绝对地址。,返回本节,1.数据块的分类,共享数据块又称全局数据块。用于存储全局数据,所有逻辑块(OB、FC、FB)都可以访问共享数据块存储的信。背景数据块用作“私有存储器区”,即用作功能块(FB)的“存储器”。FB的参数和静态变量安排在它的背景数据块中。背景数据块不是由用户编辑的,而是由编辑器生成的。用户定义数据块(DBofType)是以UDT为模板所生成的数据块。创建用户定义数据块(DBofType)之前,必须先创建一个用户定义数据类型,如UDT1,并在LAD/STL/FBDS7程序编辑器内定义。,返回上级,2.数据块寄存器,CPU有两个数据块寄存器DB和DI寄存器。这样,可以同时打开两个数据块。,返回上级,5.2.3数据块的数据结构,在STEP7中数据块的数据类型可以采用基本数据类型、复杂数据类型或用户定义数据类型(UDT)。基本数据类型复杂数据类型用户定义数据类型,返回本节,基本数据类型根据IEC1131-3定义,长度不超过32位,可利用STEP7基本指令处理,能完全装入S7处理器的累加器中。基本数据类型包括位数据类型BOOL、BYTE、WORD、DWORD、CHAR数字数据类型INT、DINT、REAL定时器类型S5TIME、TIME、DATE、TIME_OF_DAY,返回上级,复杂数据类型复杂数据类型只能结合共享数据块的变量声明使用。复杂数据类型可大于32位,用装入指令不能把复杂数据类型完全装入累加器,一般利用库中的标准块(“IEC”S7程序)处理复杂数据类型。复杂数据类型包括时间(DATE_AND_TIME)类型矩阵(ARRAY)类型结构(STRUCT)类型字符串(STRING)类型,返回上级,用户定义数据类型(UDT)STEP7允许利用数据块编辑器,将基本数据类型和复杂数据类型组合成长度大于32位用户定义数据类型(UDTUser-DefineddataType)。用户定义数据类型不能存储在PLC中,只能存放在硬盘上的UDT块中。可以用用户定义数据类型作“模板”建立数据块,以节省录入时间。可用于建立结构化数据块、建立包含几个相同单元的矩阵、在带有给定结构的FC和FB中建立局部变量。,返回上级,【5-2-1】创建用户定义数据类型UDT1。,创建一个名称为UDT1的用户定义数据类型,数据结构如下,则可按以下几个步骤完成。,返回上级,【5-2-1】,,创建用户定义数据类型,返回上级,【5-2-1】,,编辑UDT1,返回上级,5.2.4建立数据块,在STEP7中,为了避免出现系统错误,在使用数据块之前,必须先建立数据块,并在块中定义变量(包括变量符号名、数据类型以及初始值等)。数据块中变量的顺序及类型决定了数据块的数据结构,变量的数量决定了数据块的大小。数据块建立后,还必须同程序块一起下载到CPU中,才能被程序块访问。建立数据块定义变量并下载数据块,返回本节,方法1用SIMATICManager创建数据块。,返回上级,方法2用LAD/STL/FBDS7程序编辑器创建数据块。,返回上级,新DB类型选择窗口,返回上级,编辑数据块(变量定义),变量定义完成后,应单击保存按钮保存并编译(测试)。如果没有错误则需要单击下载按钮,像逻辑块一样,将数据块下载到CPU。,返回上级,5.2.5访问数据块,在用户程序中可能存在多个数据块,而每个数据块的数据结构并不完全相同,因此在访问数据块时,必须指明数据块的编号、数据类型与位置。如果访问不存在的数据单元或数据块,而且没有编写错误处理OB块,CPU将进入STOP模式。寻址数据块访问数据块直接访问数据块,返回本节,寻址数据块,返回上级,访问数据块,在STEP7中可以采用传统访问方式,即先打开后访问;也可以采用完全表示的直接访问方式。【例5-2-2】打开并访问共享数据块。,返回上级,访问数据块,用指令“OPNDB...”打开共享数据块(自动关闭之前打开的共享数据块),如果DB已经打开,则可用装入(L)或传送(T)指令访问数据块。【例5-2-3】打开并访问背景数据块。,返回上级,直接访问数据块所谓直接访问数据块,就是在指令中同时给出数据块的编号和数据在数据块中的地址。可以用绝对地址,也可以用符号地址直接访问数据块。用绝对地址直接访问数据块,如,用符号地址直接访问数据块,如,返回上级,功能(FC)、功能块(FB)和组织块(OB)统称为逻辑块(或程序块)。功能块(FB)有一个数据结构与该功能块的参数完全相同的数据块,称为背景数据块,背景数据块依附于功能块,它随着功能块的调用而打开,随着功能块的结束而关闭。存放在背景数据块中的数据在功能块结束时继续保持。而功能(FC)则不需要背景数据块,功能调用结束后数据不能保持。组织块(OB)是由操作系统直接调用的逻辑块。5.3.1逻辑块(FC和FB)的结构5.3.1逻辑块(FC和FB)的编程,5.3逻辑块(FC和FB)的结构及编程,返回本章,逻辑块(OB、FB、FC)由变量声明表、代码段及其属性等几部分组成。局部变量声明表(局部数据)逻辑块局部变量的数据类型逻辑块的调用过程及内存分配,5.3.1逻辑块(FC和FB)的结构,返回本节,每个逻辑块前部都有一个变量声明表,称为局部变量声明表。,1.局部变量声明表,局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。,返回上级,对于功能块(FB),操作系统为参数及静态变量分配的存储空间是背景数据块。这样参数变量在背景数据块中留有运行结果备份。在调用FB时,若没有提供实参,则功能块使用背景数据块中的数值。操作系统在L堆栈中给FB的临时变量分配存储空间。对于功能(FC),操作系统在L堆栈中给FC的临时变量分配存储空间。由于没有背景数据块,因而FC不能使用静态变量。输入、输出、I/O参数以指向实参的指针形式存储在操作系统为参数传递而保留的额外空间中。对于组织块(OB)来说,其调用是由操作系统管理的,用户不能参与。因此,OB只有定义在L堆栈中的临时变量。,返回上级,局部变量可以是基本数据类型或复式数据类型,也可以是专门用于参数传递的所谓的“参数类型”。参数类型包括定时器、计数器、块的地址或指针等。,2.逻辑块局部变量的数据类型,返回上级,CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息。,3.逻辑块的调用过程及内存分配,返回上级,局部数据堆栈简称L堆栈,是CPU中单独的存储器区,可用来存储逻辑块的局部变量(包括OB的起始信息)、调用功能(FC)时要传递的实际参数、梯形图程序中的中间逻辑结果等。可以按位、字节、字和双字来存取。块堆栈简称B堆栈,是CPU系统内存中的一部分,用来存储被中断的块的类型、编号、优先级和返回地址;中断时打开的共享数据块和背景数据块的编号;临时变量的指针(被中断块的L堆栈地址)。中断堆栈简称I堆栈,用来存储当前累加器和地址寄存器的内容、数据块寄存器DB和DI的内容、局域数据的指针、状态字、MCR(主控继电器)寄存器和B堆栈的指针。,用户程序使用的堆栈,返回上级,当调用功能块(FB)时,会有以下事件发生①调用块的地址和返回位置存储在块堆栈中,调用块的临时变量压入L堆栈;②数据块DB寄存器内容与DI寄存器内容交换;③新的数据块地址装入DI寄存器;④被调用块的实参装入DB和L堆栈上部;⑤当功能块FB结束时,先前块的现场信息从块堆栈中弹出,临时变量弹出L堆栈;⑥DB和DI寄存器内容交换。当调用功能块(FB)时,STEP7并不一定要求给FB形参赋予实参,除非参数是复式数据类型的I/O形参或参数类型形参。如果没有给FB的形参赋予实参,则功能块(FB)就调用背景数据块内的数值,该数值是在功能块(FB)的变量声明表或背景数据块内为形参所设置初始数值。,调用功能块(FB)时的堆栈操作,返回上级,当调用功能(FC)时会有以下事件发生功能(FC)实参的指针存到调用块的L堆栈;调用块的地址和返回位置存储在块堆栈,调用块的局部数据压入L堆栈;功能(FC)存储临时变量的L堆栈区被推入L堆栈上部;当被调用功能(FC)结束时,先前块的信息存储在块堆栈中,临时变量弹出L堆栈。因为功能(FC)不用背景数据块,不能分配初始数值给功能(FC)的局部数据,所以必须给功能(FC)提供实参。,调用功能(FC)时的堆栈操作,返回上级,以功能(FC)调用为例,L堆栈操作示意如图所示。,调用功能(FC)时的堆栈操作,返回上级,对逻辑块编程时必须编辑下列三个部分变量声明分别定义形参、静态变量和临时变量(FC块中不包括静态变量);确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(DataType),还要为变量设置初始值(InitialValue)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP7将自动产生局部变量地址(Address)。代码段对将要由PLC进行处理的块代码进行编程。块属性块属性包含了其它附加的信息,例如由系统输入的时间标志或路径。此外,也可输入相关详细资料。,5.3.2逻辑块(FC和FB)的编程,返回本节,1.临时变量的定义和使用,返回上级,2.查看局部数据堆栈的占用,返回上级,3.查看块所需字节数,返回上级,4.定义形式参数,返回上级,编写逻辑块(FC和FB)程序时,可以用以下两种方式使用局部变量①使用变量名,此时变量名前加前缀“”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。②直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。在调用FB块时,要说明其背景数据块。背景数据块应在调用前生成,其顺序格式与变量声明表必须保持一致。,5.编写控制程序,返回上级,所谓无参功能(FC),是指在编辑功能(FC)时,在局部变量声明表不进行形式参数的定义,在功能(FC)中直接使用绝对地址完成控制程序的编程。这种方式一般应用于分部式结构的程序编写,每个功能(FC)实现整个控制任务的一部分,不重复调用。5.4.1编辑无参功能(FC)5.4.2在OB1中调用无参功能(FC),5.4编辑并调用无参功能(FC)分部程序设计,返回本章,【例5-4-1】搅拌控制系统程序设计使用开关量。,返回本节,控制说明如图所示为一搅拌控制系统,由3个开关量液位传感器,分别检测液位的高、中和低。现要求对A、B两种液体原料按等比例混合,请编写控制程序。要求按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A→中液位传感器动作后,则关闭进料泵1,打开进料泵2,开始加入液料B→高液位传感器动作后,关闭进料泵2,起动搅拌器→搅拌10s后,关闭搅拌器,开启放料泵→当低液位传感器动作后,延时5s后关闭放料泵。按停止按钮,系统应立即停止运行。,返回上级,1.创建S7项目按照第3章所介绍的方法,创建S7项目,并命名为“无参FC”,项目包含组织块OB1和OB100。2.硬件配置在“无参FC”项目内打开“SIMATIC300Station”文件夹,打开硬件配置窗口,并完成硬件配置。,5.4.1编辑无参功能(FC),返回本节,3.编辑符号表,返回上级,4.规划程序结构,返回上级,5.编辑功能(FC),在“无参FC”项目内选择“Blocks”文件夹,然后反复执行菜单命令【Insert】→【S7Block】→【Function】,分别创建4个功能(FC)FC1、FC2、FC3和FC4。由于在符号表内已经为FC1~FC4定义了符号名,因此在创建FC的属性对话框内系统会自动添加符号名。FC1控制程序FC2控制程序FC3控制程序FC4控制程序OB100控制程序,返回上级,FC1的控制程序,FC2的控制程序,返回上级,FC3的控制程序,返回上级,FC4的控制程序,返回上级,OB100的控制程序,返回上级,5.4.2在OB1中调用无参功能(FC),返回本节,OB1的控制程序,返回上级,所谓有参功能(FC),是指编辑功能(FC)时,在局部变量声明表内定义了形式参数,在功能(FC)中使用了虚拟的符号地址完成控制程序的编程,以便在其他块中能重复调用有参功能(FC)。这种方式一般应用于结构化程序编写。5.5.1编辑有参功能(FC)5.5.2在OB1中调用有参功能(FC),5.5编辑并调用有参功能(FC)结构化程序设计,返回本章,【例5-5-1】多级分频器控制程序设计。本例拟在功能FC1中编写二分频器控制程序,然后在OB1中通过调用FC1实现多级分频器的功能。多级分频器的时序关系如图所示。其中I0.0为多级分频器的脉冲输入端;Q4.0~Q4.3分别为2、4、8、16分频的脉冲输出端;Q4.4~Q4.7分别为2、4、8、16分频指示灯驱动输出端。,返回本节,5.5.1编辑有参功能(FC),创建多级分频器的S7项目硬件配置编写符号表规划程序结构创建有参功能FC1,返回本节,1.创建多级分频器的S7项目使用菜单【File】→【“NewProject”Wizard】创建多级分频器的S7项目,并命名为“有参FC”。2.硬件配置打开“SIMATIC300Station”文件夹,双击硬件配置图标打开硬件配置窗口,并按图所示完成硬件配置。,返回上级,3.编写符号表,,返回上级,4.规划程序结构,,返回上级,5.创建有参FC1,选择“有参FC”项目的“Blocks”文件夹,然后执行菜单命令【Insert】→【S7Block】→【Function】,在块文件夹内创建一个功能,并命名为“FC1”。编辑FC1的变量声明表在FC1的变量声明表内,声明4个参数,见下表。,返回上级,编辑FC1的控制程序,二分频器的时序如图所示。分析二分频器的时序图可以看到,输入信号每出现一个上升沿,输出便改变一次状态,据此可采用上跳沿检测指令实现。,,如果输入信号S_IN出现上升沿,则对S_OUT取反,然后将S_OUT的信号状态送LED显示;否则,程序直接跳转到LP1,将S_OUT的信号状态送LED显示。,返回上级,FC1的控制程序,返回上级,5.5.2在OB1中调用有参功能(FC),,使用绝对地址,使用符号地址,返回本节,功能块(FB)在程序的体系结构中位于组织块之下。它包含程序的一部分,这部分程序在OB1中可以多次调用。功能块的所有形参和静态数据都存储在一个单独的、被指定给该功能块的数据块(DB)中,该数据块被称为背景数据块。当调用FB时,该背景数据块会自动打开,实际参数的值被存储在背景数据块中;当块退出时,背景数据块中的数据仍然保持。5.6.1编辑无静态参数的功能块(FB)5.6.2在OB1中调用无静态参数的功能块(FB),5.6编辑无静参的功能块(FB),返回本章,【例5-6-1】水箱水位控制系统程序设计。,,返回本节,【例5-6-1】系统有3个贮水箱,每个水箱有2个液位传感器,UH1,UH2,UH3为高液位传感器,“1”有效;UL1,UL2,UL3为低液位传感器,“0”有效。Y1、Y3、Y5分别为3个贮水水箱进水电磁阀;Y2、Y4、Y6分别为3个贮水水箱放水电磁阀。SB1、SB3、SB5分别为3个贮水水箱放水电磁阀手动开启按钮;SB2、SB4、SB6分别为3个贮水箱放水电磁阀手动关闭按钮。控制要求SB1、SB3、SB5在PLC外部操作设定,通过人为的方式,按随机的顺序将水箱放空。只要检测到水箱“空”的信号,系统就自动地向水箱注水,直到检测到水箱“满”信号为止。水箱注水的顺序要与水箱放空的顺序相同,每次只能对一个水箱进行注水操作。,返回上级,5.6.1编辑无静态参数的功能块(FB),创建S7项目硬件配置编写符号表规划程序结构编辑功能块(FB)建立背景数据块(DI)编辑启动组织块OB100,返回本节,1.创建S7项目使用菜单【File】→【“NewProject”Wizard】创建水箱水位控制系统的S7项目,并命名为“无静参FB”。项目包含组织块OB1和OB100。2.硬件配置在“无静参FB”项目内打开“SIMATIC300Station”文件夹,打开硬件配置窗口,并按图所示完成硬件配置。,返回上级,3.编写符号表,,返回上级,4.规划程序结构,返回上级,5.编辑功能(FB1),在“无静参FB”项目内选择“Blocks”文件夹,执行菜单命令【Insert】→【S7Block】→【FunctionBlock】,创建功能块FB1。由于在符号表内已经为FB1定义了符号名,因此在FB1的属性对话框内系统会自动添加符号名“水箱控制”。定义局部变量声明表编写程序代码,返回上级,定义局部变量声明表,与功能(FC)不同,在功能块(FB)参数表内还有扩展地址(Exclusionaddress)和结束地址(Terminationaddress)选项。,返回上级,编写程序代码,返回上级,6.建立背景数据块DB1、DB2、DB3,,返回上级,7.编辑启动组织块OB100,,,返回上级,5.6.2在OB1中调用无静态参数的功能块(FB),,,,返回本节,OB1控制程序,,,,,返回上级,【例5-6-2】搅拌控制系统程序设计使用模拟量。,返回上级,上图所示为一搅拌控制系统,由一个模拟量液位传感器-变送器来检测液位的高低,并进行液位显示。现要求对A、B两种液体原料按等比例混合,请编写控制程序,控制要求如下按起动按钮后系统自动运行,首先打开进料泵1,开始加入液料A→当液位达到50后,则关闭进料泵1,打开进料泵2,开始加入液料B→当液位达到100后,则关闭进料泵2,起动搅拌器→搅拌10s后,关闭搅拌器,开启放料泵→当液料放空后,延时5s后关闭放料泵。按停止按钮,系统应立即停止运行。,返回上级,1.创建S7项目使用菜单【File】→【“NewProject”Wizard】创建搅拌控制系统的S7项目,并命名为“FC与FB”。2.硬件配置在“FC与FB”项目内打开“SIMATIC300Station”文件夹,打开硬件配置窗口,并按图下完成硬件配置。,,返回上级,修改模块的模拟量输入通道和输出通道的起始地址均为256。,,返回上级,3.编辑符号表,返回上级,4.规划程序结构,OB1为主循环组织块;OB100为启动组织块;FC1实现搅拌控制;FC2实现放料控制;FB1通过调用DB1和DB2实现液料A和液料B的进料控制;DB1和DB2为液料A和液料B进料控制的背景数据块,在调用FB1时为FB1提供实际参数,并保存过程结果。,返回上级,5.创建无参功能(FC1、FC2)1/2,FC1控制程序,返回上级,5.创建无参功能(FC1、FC2)2/2,FC2控制程序,返回上级,6.创建无静态参数的功能块(FB1),定义FB1的局部变量声明表,编写FB1控制程序,返回上级,7.建立背景数据块(DB1、DB2),在“FC与FB”项目内选择“Blocks”文件夹,执行菜单命令【Insert】→【S7Block】→【DataBlock】,创建与FB1相关联的背景数据块DB1和DB2。STEP7自动为DB1和DB2构建了与FB1完全相同的数据结构,如下图所示。,返回上级,8.在OB1中调用FC1、FC2和FB1,OB1的控制程序,返回上级,OB1的控制程序,返回上级,OB1的控制程序,返回上级,9.编写启动组织块OB100的控制程序,,返回上级,5.7编辑并调用有静态参数的功能块,,在编辑功能块(FB)时,如果程序中需要特定数据的参数,可以考虑将该特定数据定义为静态参数,并在FB的声明表内STAT处声明。下面以交通信号灯控制系统的设计为例,介绍如何编辑和调用有静态参数的功能块。5.7.1编辑有静态参数的功能块(FB)5.7.2在OB1中调用有静态参数的功能块(FB),返回本章,【例5-7-1】交通信号灯控制系统程序设计。,,返回本节,上图所示为双干道交通信号灯设置示意图。信号灯的动作受开关总体控制,按一下起动按钮,信号灯系统开始工作,并周而复始地循环动作;按一下停止按钮,所有信号灯都熄灭。信号灯控制的具体要求见下表,试编写信号灯控制程序。,返回上级,根据十字路口交通信号灯的控制要求,可画出信号灯的控制时序图。,返回上级,5.7.1编辑有静态参数的功能块(FB),创建S7项目硬件配置编写符号表规划程序结构编辑功能块(FB)建立背景数据块(DI)编辑启动组织块OB100,返回本节,1.创建S7项目使用菜单【File】→【“NewProject”Wizard】创建交通信号灯控制系统的S7项目,并命名为“有静参FB”。项目包含组织块OB1和OB100。2.硬件配置在“有静参FB”项目内打开“SIMATIC300Station”文件夹,打开硬件配置窗口,并按下图所示完成硬件配置。,返回上级,3.编写符号表,返回上级,4.规划程序结构,OB1为主循环组织块、OB100初始化程序、FB1为单向红绿灯控制程序、DB1为东西数据块、DB2为南北数据块。,返回上级,5.编辑功能块(FB),定义局部变量声明表,返回上级,编写程序代码,返回上级,6.建立背景数据块(DI),由于在创建DB1和DB2之前,已经完成了FB1的变量声明,建立了相应的数据结构,所以在创建与FB1相关联的DB1和DB2时,STEP7自动完成了数据块的数据结构。,,返回上级,7.编辑启动组织块OB100,返回上级,5.7.2在OB1中调用有静态参数的功能块(FB),,返回本节,5.8使用多重背景结构化程序设计,使用多重背景可以有效地减少数据块的数量,其编程思想是创建一个比FB1级别更高的功能块,如FB10,将未作任何修改的FB1作为一个“局部背景”,在FB10中调用。对于FB1的每一个调用,都将数据存储在FB10的背景数据块DB10中。5.8.1创建多重背景的S7项目5.8.2编辑功能(FC)5.8.3编辑共享数据块5.8.4编辑功能块(FB)5.8.5生成多重背景数据块DB105.8.6在OB1中调用功能FC及上层功能块FB,返回本章,5.8.1创建多重背景的S7项目,【例5-8-1】发动机组控制系统设计使用多重背景。设某发动机组由1台汽油发动机和1台柴油发动机组成,现要求用PLC控制发动机组,使各台发动机的转速稳定在设定的速度上,并控制散热风扇的起动和延时关闭。每台发动机均设置一个起动按钮和一个停止按钮。创建S7项目硬件配置编写符号表规划程序结构,返回本节,1.创建S7项目使用菜单【File】→【“NewProject”Wizard】创建发动机组控制系统的S7项目,并命名为“多重背景”。CPU选择CPU315-2DP,项目包含组织块OB1。2.硬件配置在“多重背景”项目内打开“SIMATIC300Station”文件夹,打开硬件配置窗口,并按下图所示完成硬件配置。,返回上级,3.编辑符号表,,返回上级,4.规划程序结构,FB10为上层功能块,它把FB1作为其“局部实例”,通过二次调用本地实例,分别实现对汽油机和柴油机的控制。这种调用不占用数据块DB1和DB2,它将每次调用(对于每个调用实例)的数据存储到体系的上层功能块FB10的背景数据块DB10中。,,返回上级,5.8.2编辑功能(FC),1.定义局部变量声明表FC1用来实现发动机(汽油机或柴油机)的风扇控制,按照控制要求,当发动机起动时,风扇应立即起动;当发动机停机后,风扇应延时关闭。因此FC1需要一个发动机起动信号、一个风扇控制信号和一个延时定时器。,返回本节,2.编辑FC1的控制程序,FC1所实现的控制要求发动机起动时风扇起动,当发动机再次关闭后,风扇继续运行4s,然后停止。定时器采用断电延时定时器,控制程序如下图所示。,,返回上级,5.8.3编辑共享数据块,共享数据块DB3可为FB10保存发动机(汽油机和柴油机)的实际转速,当发动机转速都达到预设速度时,还可以保存该状态的标志数据。,,返回本节,5.8.4编辑功能块(FB),在该系统的程序结构内,有2个功能块FB1和FB10。FB1为底层功能块,所以应首先创建并编辑;FB10为上层功能块,可以调用FB1。编辑底层功能块FB1编辑上层功能块FB10,,返回本节,1.编辑底层功能块FB1,在“多重背景”项目内创建FB1,符号名“Engine”。定义功能块FB1的变量声明表,,返回上级,编写功能块FB1的控制程序,,,FB1主要实现发动机的起停控制及速度监视功能,其控制程序如下图所示。,返回上级,2.编辑上层功能块FB10,,,在“多重背景”项目内创建FB10,符号名“Engines”。在FB10的属性对话框内激活“Multi-instancecapable”选项。,,返回上级,定义功能块FB10的变量声明表,,,要将FB1作为FB10的一个“局部背景”调用,需要在FB10的变量声明表中为FB1的调用声明不同名称的静态变量,数据类型为FB1(或使用符号名“Engine”)。,,返回上级,编写功能块FB10的控制程序,在变量声明表内完成FB1类型的局部实例“Petrol_Engine”和“Diesel_Engine”的声明以后,在程序元素目录的“MultipleInstances”目录中就会出现所声明的多重实例,如图所示。接下来可在FB10的代码区,调用FB1的“局部实例”。,返回上级,编写功能块FB10的控制程序,调用FB1局部实例时,不再使用独立的背景数据块,FB1的实例数据位于FB10的实例数据块DB10中。发动机的实际转速可直接从共享数据块中得到,如DB3.DBW2(符号地址为,S_Data“.PE_Actual_Speed)。,返回上级,5.8.5生成多重背景数据块DB10,在“多重背景”项目内创建一个与FB10相关联的多重背景数据块DB10,符号名“Engine_Data”。,返回本节,5.8.6在OB1中调用功能FC及上层功能块FB,返回本节,5.9思考与练习,一、思考题1.STEP7中有哪些逻辑块2.功能FC和功能块FB有何区别3.系统功能SFC和系统功能块有何区别4.共享数据块和背景数据块有何区别5.什么是符号地址采用符号地址有哪些好处6.组织块可否调用其他组织块7.B堆栈与L堆栈有何不同8.在变量声明表内,所声明的静态变量和临时变量有何区别,返回本章,二、编程题1.用I0.0控制接在Q4.0~Q4.7上的8个彩灯循环移位,用T37定时,每0.5s移1位,首次扫描时给Q4.0~Q4.7置初值,用I0.1控制彩灯移位的方向,试设计语句表程序。2.有一工业用洗衣机,控制要求如下①按起动按钮后给水阀就开始给水→当水满传感器动作时就停止给水→波轮正转5s,再反转5s,然后再正转5s如此反复转动5分钟→出水阀开始出水→出水10s后停止出水,同时声光报警器报警,叫工作人员来取衣服。②按停止按钮声光报警器停止,并结束工作过程。要求分配I/O口,设计梯形图。,返回本节,3.车辆出入库管理。如图5-76所示为车辆入库管理设备布置图,编制一个用PLC控制的车辆出入库管理梯形图控制程序,控制要求如下①入库车辆前进时,经过1传感器→2传感器后计数器加1,后退时经过2传感器→1传感器后计数器减1,单经过一个传感器则计数器不动。②出库车辆前进时经过2传感器→1传感器后计数器减1,后退时经过1传感器→2传感器后计数器加1,单经过一个传感器则计数器不动作。,③设计一个由两位数码管及相应的辅助元件组成的显示电路,显示车库内车辆的实际数量。,图5-76车辆入库管理,返回本节,4.液体自动混合箱如图5-77所示,设计要求如下按下起动按钮SB1,电磁阀K1打开,液体A流入箱中,当液面到达L2处时,K1阀关闭,同时K2阀打开,液体B流入箱中,当液面到达L1处时,Y2阀关闭,停止供液,电炉H开始加热,当液体到达指定温度时,温度传感器T动作,电炉停止加热,搅拌机M开始搅拌液体,5分钟后停止搅拌,K3阀打开,将加热并混合好的液体放出,当液面底于L3时,再经过10s,K3阀关,图5-77液体自动混合箱,闭,此时箱内液体已放空。此时,电磁阀K1打开,液体A流入箱中,开始下一周期循环。按下停止按钮SB2,系统停止操作(停在初始状态上)。,返回本节,5.如图5-78所示为精密滚柱直径筛选系统,当被测滚柱落下后,由气缸推秆推到限位挡板位置,然后钨钢测头开始测试滚柱直径,并将测量值送相敏检波放大器处理,再送电压放大器放大,最后将与直径成正比的电压值送PLC模拟量输入模块,经PLC判断后,根据直径大小来决定具体打开哪一个翻版,然后由电磁机构将限位,图5-78滚柱直径筛选系统,挡板抽离,滚柱自然落入相应的容器中。试设计PLC控制程序,实现对滚柱的筛选。,返回本节,5.有一工业用洗衣机,控制要求如下①按起动按钮后给水阀就开始给水→当水满传感器动作时就停止给水→波轮正转5s,再反转5s,然后再正转5s如此反复转动5分钟→出水阀开始出水→出水10s后停止出水,同时声光报警器报警,叫工作人员来取衣服。②按停止按钮声光报警器停止,并结束整个工作过程。要求分配I/O口,设计梯形图。6.使用传送机,将大、小球分类后分别传送的系统。左上为原点,按起动按钮SB1后,其动作顺序为下降→吸球(延时1s)上升→右行→下降→放球(延时1s)→上升→左行。其中LS1左限位;LS3上限位;LS4小球右限位;LS5大球右限位;LS2大球下限位;LS0小球下限位。机械壁下降时,吸住大球,则下限位LS2接通,然后将大球放到大球容器中。若吸住小球,则下限位LS0接通,然后将小球放到小球容器中。试分配I/O,设计画梯形图。,返回本节,
展开阅读全文