1、第五章 程序结构三种编程方法:(一)线性编程线性编程将整个用户程序写在一个指令连续的块中,处理器线性地或顺序地扫描程序的每条指令。(二)分部编程分部式编程将用户程序分成相对独立的指令块、每个块包含给定的部件组或作业组的控制逻辑。(三)结构化编程结构化编程要求用户程序提供一些通用的指令块,以便控制一类相似或相同的部件,给通用指令提供的参数进一步说明各部件的控制差异。为了支持结构化程序设计,STEP 7 将用户程序分类归并为不同的块,根据程序要求,可选用组织块(OB) 、功能块(FB) 、或功能(FC)三种类型的逻辑块,而数据块(DB)或(DI)则用来存储执行用户程序时所需的数据。5.1 数据块及
2、其数据结构5.1.1 数据块用户程序运行所需的大量数据或变量存储在数据块中,数据块也是实现各逻辑块之间交换、传递和共享数据的重要途径。对于 CPU 314,用作数据块的存储器最多 8KB,用户定义的数据总量不能超过这个限制。对于数据块必须遵循先定义后使用的原则。1. 定义数据块定义内容包括数据块号及块中的变量(包括:变量符号名,数据类型以及初始值等) 。数据块在使用前,必须作为用户程序的一部分下载到CPU中。2. 访问数据块访问时需要明确数据块号和数据块中的数据类型与位置。根据明确数据块号的不同方法,可以用以多种方法访问数据块中的数据。(一)直接在访问指令中写明数据块号,如:L DB10.DB
3、W 0L DB10.DBW 2XOWT DB10.DBW 4(二) “先打开后访问”OPN DB 5L DBW 10OPN DB 10T DBW 20由于有两个数据块寄存器(DB 和 DI 寄存器) ,所以,最多可以同时打开两个数据块。一个作为背景数据块,数据块的起始地址存储在 DI 寄存器中;另一个作为共享数据块,数据块的起始地址存储在 DB 寄存器中。打开背景数据块,在调用 FB 时可以自动实现,由于调用 FB 时使用 DI寄存器,所以,一般不在 FB 程序中用 OPN DI n 指令打开数据块。3. 背景数据块和共享数据块任何 FB、FC 或 OB 均可读写存放在共享数据块中的数据。背景
4、数据块是 FB 运行时的工作存储区,它存放 FB 的部分运行变量。调用 FB 时,必须指定一个相关的背景数据块。作为规则,只有 FB 块才能访问存放在背景数据块中的数据。一般情况下,每个 FB 都有一个对应的背景数据块,一个 FB 也可以使用不同的背景数据块。如果几个 FB 需要的背景数据完全相同,为节省存储器,则可以定义成一个背景数据块,供它们分别使用。5.1.2 数据结构基本数据类型数据结构形式 复式数据类型复式数据类型名称 类型 说明日期-时间DATE_AND_TIME长度 8Byte字符串 STRING 占用 256Byte数组 ARRAY 可定义 6 维数组构造 STRUCT 由多种
5、数据类型组成的数据集合5.1.3 用户数据类型STEP 7 允许将基本或复式组合成“用户”自已定义的数据类型,这种类型称为用户数据类型(UDT) 。用户数据类型必须首先单独建立,并存放在称为 UDT 的特殊数据块中。建立用户数据类型的目的,是为了将 UDT 作为一种数据类型使用,以方便定义多个结构相同的构造变量。5.2 功能块编程及调用一个程序由许多部分(子程序)组成,STEP 7 将这些部分称为逻辑块,并允许块间相互调用。功能块由两个主要部分组成:一部分是每个功能块的变量声明表,变量声表声明此块的局部数据;另一部分是逻辑指令组成的程序,程序要用到变量声明表中给出的局部数据。当调用功能块时,需
6、要提供块执行时要用到的数据或变量,也就是将外部数据传递给功能块,这称为参数传递。5.2.1 变量声明表(局部数据)局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。参数是在调用块和被调用块间传递的数据。静态变量和临时变量是仅供逻辑块本身使用的数据。局部数据类型变量名 类型 说明输入参数In 由调用逻辑块的块提供数据,输入给逻辑块的指令输出参数Out 向调用逻辑块的块返回参数,即从逻辑块输出结果数据IO 参数In_Out 参数的值由调用块的块提供,由逻辑块处理修改,然后返回静态变量Stat 静态变量存储在背景数据块中,块调用结束后,其内容被保留状态变量Temp
7、临时变量存储在 L 堆栈中,块执行结束变量的值因被其它内容覆盖而丢失5.2.2 逻辑块局部数据的数据类型在变量声明表中,要明确局部数据的数据类型,这样操作系统才能给变量分配确定的存储空间。局部数据可以是基本数据类型或是复式数据类型,也可以是专门用于参数传递的所谓“参数类型” 。参数类型 大小 说明定时器 2 Byte 在功能块中定义一个定时器形参,调用时赋予定时器实参计数器 2 Byte 在功能块中定义一个计数器形参,调用时赋予定时器实参块:Block_FBBlock_FCBlock_DBBlock_SDB2 Byte 在功能块中定义一个功能块或数据块形参变量,调用时给功能块类或数据块类形参赋
8、予实际的功能块或数据块编号指针 6 Byte 在功能块中定义一个形参,该形参说明的是内存的地址指针。例如,调用时可给形参赋予实参:PM50.0,以访问内存 M500.0ANY 10 Byte 当实参的数据未知时,可以使用该类型STEP 7 对分配给块局部数据(在变量声明表中)的数据类型(基本、复式、参数)是有一定限制的。声明类型基本类型复式类型参数类型定时器 计数器 块 指针 ANYOB 局部变量有效的数据类型Temp 可以 可以 可以FB 局部变量有效的数据类型In 可以 可以 可以 可以 可以 可以 可以Out 可以 可以In-Out 可以 可以Stat 可以 可以Temp 可以 可以 可
9、以FC 局部变量有效的数据类型In 可以 可以 可以 可以 可以 可以 可以Out 可以 可以 可以 可以In-Out 可以 可以 可以 可以Temp 可以 可以 可以STEP 7 允许用物理地址(绝对地址)或符号地址或常数等形式作为实参给形参赋值,但对于不同的形参类型,STEP 7 限制了赋值形式。声明类型 绝对地址 符号地址 块局部符号常数基本数据类型In 可以 可以 可以 可以Out 可以 可以 可以 不可In-Out 可以 可以 可以 不可复式数据类型In 不可 可以 可以 不可Out 不可 可以 可以 不可In-Out 不可 可以 可以 不可5.2.3 功能块编程与调用举例对功能块编
10、程分两步进行:第一步工作是定义局部变量(填写局部变量表) ;第二步是编写要执行的程序。写功能块程序时,可以两种方式使用局部变量:使用变量名,此时变量名前缀“” ,以区别于在符号表中定义的符号地址,增量方式下,前缀会自动产生;直接使用局部变量的地址,这种方式只对背景数据块和 L堆栈有效。例一 二分频器二分频器是一种具有一个输入端和一个输出端的功能单元,输出频率为输入频率的一半。(1)FC1 的变量声明表(2)FC1 梯形图程序(3)OB1 调用梯形图程序例二 时钟脉冲发生器使用定时器实现自由设定时钟脉冲发生器功能(脉冲占空系数 1:1)。(1)FC1 变量声明表(2)FC1 梯形图程序(3)OB1 调用梯形图程序第六章 可编程序控制器应用设计PLC 系统设计步骤:西门子自动化产品在城市供水中的应用城市供水作为城市管理工程的一个主要设施,它直接影响着一个城市正常的生产和生活,随着科学的发展与进步,人们对饮用水的要求越来越高,相应对供水系统的自动化程度要求也越来越高,所以,近几年来自动化产品在供水行业中的应用较为普及。一、工艺描述安徽省六安市第二自来水厂座落在该项市南郊的淠河旁边,因第一自来水厂已经停用,所以该厂目前成为六安市唯一的供水厂。该厂原设计供水能力 10 万吨/天,通过扩建改造达到 14 万吨/天。同大部分水厂一样,其工艺流程图如下图所示: