您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 第4章-S7系列结构化程序设计
第4章S7系列结构化程序设计重点与难点S7系列结构化程序的概念、功能块(功能)的编程及调用、数据块与数据结构。基本要求1.理解S7系列结构化程序的概念;2.掌握功能块(功能)的编程及调用;3.熟悉数据块与数据结构;4.熟练进行S7-300的结构化程序设计。本章内容1.S7系列结构化程序设计简介;2.功能块(功能)的编程及调用;3.数据块与数据结构;4.程序设计应用举例;5.S7-PLC模拟软件S7-PLCSIM。功能块(功能)的编程及调用4.2数据块与数据结构4.3结构化编程4.1程序设计应用举例4.4本章小结4.6S7-PLC模拟软件S7-PLCSIM4.54.1结构化编程STEP7编程语言有以下三种编程方法。1.线性化编程线性化编程就是将用户程序连续放置在一个指令块内,即一个简单的程序块内包含系统的所有指令。2.分部编程分部式编程是把一项控制任务分成若干个独立的块,每个块用于控制一套设备或一系列工作的逻辑指令,而这些块的运行靠组织块OB内指令来调用。3.结构化编程结构化程序把过程要求的类似或相关的功能进行分类,并试图提供可以用于几个任务的通用解决方案。为支持结构化程序设计,STEP7用户程序通常由组织块(OB)、功能块(FB)或功能(FC)等三种类型的逻辑块和数据块(DB)组成。STEP7以文件块的形式管理用户编写的程序及程序运行所需的数据,组成结构化的用户程序。这样,PLC的程序组织明确,结构清晰,易于修改。由整个任务分解而产生的单个任务被分配给块,这些块中存储了用于解决这些单个问题所必需的算法和数据。结构化编程具有如下一些优点。(1)各单个任务块的创建和测试可以相互独立地进行。(2)通过使用参数,可将块设计得十分灵活。比如,可以创建一钻孔循环,其坐标和钻孔深度可以通过参数传递进来。(3)块可以根据需要在不同的地方以不同的参数数据记录进行调用,也就是说,这些块能够被再利用。(4)在预先设计的库中,能够提供用于特殊任务的“可重用”块。STEP7中的块从其功能、结构及其应用角度来看,是用户程序的一部分。根据内容,可以将STEP7块划分为以下两类。用户块系统块表4-1STEP7中的块(1)组织块(OB)图4-1S7-300的程序调用结构(2)功能块(FB)(3)功能(FC)(4)数据块(DB)(5)系统功能(SFC)(6)系统功能块(SFB)(7)系统数据块(SDB)图4-2OB1调用过程示意图图4-3STEP7调用过程示意图4.2功能块(功能)的编程及调用1.功能(FC)功能(FC)属于用户自己编程的块。功能是“无存储区”的逻辑块。FC的临时变量存储在局域数据堆栈中。当FC执行结束后,这些数据就丢失了。要将这些数据永久存储,功能也可以使用共享数据块。由于FC没有它自己的存储区,所以用户必须为它指定实际参数。不能够为一个FC的局域数据分配初始值。一个FC包含一个程序部分,当FC被不同的逻辑块调用时,这些程序总会被执行。可为以下目的使用功能。(1)为调用块返回一个功能值(例如:数学功能)。(2)要执行一个工艺功能(例如:使用位逻辑操作的单控制功能)。形式参数是“实际”参数的虚名称。当该功能调用时,用实际参数替代形式参数。对于FC来说,形式参数总是必须赋给实际参数(例如:将实参“I3.6”赋值给形参“Start”)。在FC中使用的参数类型中,输入、输出和输入/输出参数存做指针,指向调用FC的逻辑块的实际参数。2.功能块(FB)功能块(FB)属于用户自己编程的块。功能块是具有“存储功能”的块。用数据块作为功能块的存储器(背景数据块)。传递给FB的参数和静态变量存在背景数据块中。临时变量存在本地数据堆栈中。当FB执行结束时,存在背景DB中的数据不会丢失。可是,当FB的执行结束时、存在本地数据堆栈中的数据将丢失。FB中所含的程序总是当不同的逻辑块调用该FB时执行。功能块使得对于经常使用的功能、复杂功能的编程变得容易。每次功能块的调用都将赋给一个背景数据块,用于传递参数。在STEP7中,对于FB通常不是必须将实际参数赋值给形参。不过下列情况除外,对以下形参必须赋实参。(1)对于复杂数据类型(2)对于所有的参数类型3.FC和FB输出参数的主要区别在功能块中,当访问参数时使用背景数据块中的实际参数的拷贝参数。当调用FB时,如果没有传送输入参数或没有写输出参数,则背景数据块中将始终使用以前的值。FC没有存储器,与FB对比,不可以选择对FC的形参赋值。当数据块的一个地址或调用块的局部变量作为实际参数时,则将一个复制的实际参数存储到调用块的局部数据区,用它来传送数据。注意,在这种情况下,如果没有向FC的输出参数写入一个数据,则将输出一个随机值。由于作为复制数据所保留的调用块的局部数据区没有赋值到输出参数,所有该区没有写入任何数据。因此将输出存储在该区域的随机值,因为局部数据不能自动地设置为0。功能块(FB)为用户程序块,代表具有存储器的逻辑块。可以由OB,FB和FC调用。功能块可以根据需要具有足够多的输入参数、输出参数和输入/输出参数,以及静态和临时变量。与FC不同的是,FB是背景化了的块,也就是说,FB可以由其私有数据区域的数据进行赋值,在其私有数据区域中,FB可以“记住”调用时的过程状态。最简单的形式为:该专用数据区便是FB的自有DB,也就是所谓的背景DB。4.2.1功能块组成功能块由两个主要部分组成:一部分是每个功能块的变量声明表,该表声明此块的局部数据;另一部分是逻辑指令组成的程序,程序要用到变量声明表中给出的局部数据。当调用功能块时,需要提供块执行时要用到的数据或变量,也就是将外部数据传递给功能块,这称为参数传递。参数传递的方式使得功能块具有通用性,它可被其他的块调用,以完成多个类似的控制任务。一个程序由许多部分(子程序)组成,STEP7将这些部分称为逻辑块,并允许块间相互调用。调用过程如图4-4所示。图4-4功能块的调用过程4.2.2功能块局部变量声明通常,对功能块编程分两步进行:第一步是定义局部变量(填写局部变量表);第二步是编写要执行的程序,并在编程过程中使用定义了的局部变量(数据)。定义局部变量包括以下工作内容。(1)分别定义形参、静态变量和临时变量(FC块中不包括静态变量)。(2)确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(DataType),还要为变量设置初始值(InitialValue)(尽管对有些变量初始值不一定有意义)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP7将自动产生局部变量地址(Address)。写功能块程序时,可以用以下两种方式使用局部变量。(1)使用变量名,此时变量名前加前缀“#”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。(2)直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。每个逻辑块前部都有一个变量声明表,在变量声明表中定义逻辑块用到的局部数据。局部数据类型如表4-2所示。表4-2局部数据类型①形参②静态变量③临时变量表4-3变量声明表表4-4参数类型变量4.2.3功能块的调用及内存分配CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息。当发生块调用或有来自更高优先级的中断时,就有相关的块信息存储在B堆栈里,并影响部分内存和寄存器。图4-5所示为调用块时B堆栈与L堆栈的变化。图4-6所示为关于STEP7的块调用情况。图4-5堆栈与L堆栈图4-6调用指令对CPU内存的影响(1)B堆栈与L堆栈(2)调用功能块FB(3)调用功能(FC)4.2.4功能块(功能)的编程举例1.二分频器假设FC10是二分频器产生程序,功能是对不同的输入位进行二分频处理。以下给出了FC10的变量声明表和语句表程序。在程序中使用了跳变沿检测指令。(1)FC10的变量声明表表4-5FC10的变量声明表(2)语句表程序2.读模拟输入量程序一些S7-300的应用系统中,使用8通道模拟量模块采集信号,当模块数量较多时,读模拟输入量就很繁琐。下面给出一个通用程序FC100,利用它可以方便地把模拟量读回并顺序存入数据块,因为模入模块的起始地址、通道数、存储数据块号及数据在数据块中的存储起始位置均是可变的,所以可在调用FC100时灵活确定。(1)FC100的变量声明表(如表4-6所示)表4-6FC100的变量声明表(2)语句表程序3.应用举例4.3数据块与数据结构除逻辑块外,用户程序还包括数据,这些数据存储过程状态和信号的信息,所存储的数据在用户程序中进行处理。数据块用来存储用户程序的逻辑块的值。与暂时数据不同,当逻辑块执行结束时或数据块关闭时,数据块中的数据不被覆盖。数据块用来保存用户数据。和逻辑块一样,数据块占用用户存储器的空间。数据块包含用户程序中使用的变量数据(如:数值)。用户程序以位、字节、字或双字操作访问数据块中的数据,可以使用符号或绝对地址。图4-7数据块数据块中的数据类型如下。(1)基本数据类型(2)复合数据类型(3)数组(4)结构(5)用户定义数据类型表4-7参数类型变量表4-8FC100的变量声明表续表表4-9FC100的变量声明表4.3.1数据块数据块定义在S7CPU存储器中,用户可在存储器中建立一个或多个数据块。每个数据块可大可小,但CPU对数据块数量及数据总量有限制,如对于CPU314,用作数据块的存储器最多为8KB(8192Byte),用户定义的数据总量不能超出这个限制。对数据块必须遵循先定义后使用的原则,否则,将造成系统错误。1.定义数据块在编程阶段和运行程序中都能定义数据块。大多数数据块是在编程阶段用STEP7开发软件包定义的。定义内容包括数据块号及块中的变量(包括变量符号名、数据类型以及初始值等),定义完成后,数据块中变量的顺序及类型决定了数据块的数据结构,变量的数量决定了数据块的大小。数据块在使用前,必须作为用户程序的一部分下载到CPU中。2.访问数据块访问时需要明确数据块号和数据块中的数据类型与位置。根据明确数据块号的不同方法,可以用多种方法访问数据块中的数据。一种是直接在访问指令中写明数据块号。【例4-1】3.背景数据块和共享数据块背景数据块和共享数据块有不同的用途。任何FB、FC或OB均可读写存放在共享数据块中的数据。背景数据块是FB运行时的工作存储区,它存放FB的部分运行变量。调用FB时,必须指定一个相关的背景数据块。作为规则,只有FB才能访问存放在背景数据块中的数据。如果CPU中没有足够的内部存储位来保存所有数据,可将一些指定的数据存储到一个共享数据块中。存储在共享数据块中的数据可以被其他的任意一个块使用。而一个背景数据块被指定给一个特定的功能块,它的数据只在这个功能块中有效。与背景数据块相反,在符号表中共享数据块的数据类型总是绝对地址。对于背景数据块,相应的功能块总是指定的数据类型。下面介绍几个数据块指令。(1)打开数据块指令格式:OPNdatablock说明:打开一个数据块作为shared数据块(DB)或者作为instance数据块(DI)。可以同时打开一个shared数据块和一个instance数据块。【例4-3】(2)交换shared数据块和instance数据块指令格式:CDB说明:交换shared数据块和instance数据块。(3)装shared数据块的长度到累加器1指令格式:LDBLG说明:将shared数据块的长度装到累加器1。(4)装shared数据块的数目到累加器1指令格式:LDBNO说明:将shared数据块的数目装到累加器1。(5)装instance数据块的长度到累加器1指令格式:LDILG说明:将instance数据块的长度装到累加器1。(6)装instance数据块的数目到累加器1指令格式:LDINO说明:将instance数据块的数目装到累加器1。4.3.2数据块的数据结构STEP7数据块中的数据结构形式比较丰富,数据块中的数据既可以是基本数据类型,又可以是复式数据类型。STEP7允许将基本或复式组合成“用户”自己定义的数据类型,这种类型称为用户数据类型(UDT)
本文标题:第4章-S7系列结构化程序设计
链接地址:https://www.777doc.com/doc-3799088 .html