S7-300程序设计技巧.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 S7系列程序结构与程序设计;5.1 编程方式与程序块;图5.1 STEP 7调用过程示意图; 功能块(FB、FC)实际上是用户子程序,分为带“记忆”的功能块FB和不带“记忆”的功能块FC。FB带有背景数据块(Instance Data Block),在FB块结束时继续保持,即被“记忆”。功能块FC没有背景数据块。 数据块(DB)是用户定义的用于存取数据的存储区,可以被打开或关闭。DB可以是属于某个FB的情景数据块,也可以是通用的全局数据块,用于FB或FC。;5.1.2 功能块编程及调用 功能块由两个主要部分组成: 当调用功能块时,需要参数传递。参数传递的方式使得功能块具有通用性,它可被其它的块调用,以完成多个类似的控制任务。; 1. 变量声明表(局部数据) 每个逻辑块前部都有一个变量声明表,在变量声明表中定义逻辑块用到的局部数据。表5.1给出了局部数据声明类型。; 1) 形参 为保证功能块对同一类设备控制的通用性,应使用这类设备的抽象地址参数,这些抽象参数称为形式参数,简称形参。功能块在运行时将该设备的相应实际存储区地址参数(简称实参)替代形参,从而实现功能块的通用性。; 2) 静态变量 静态变量在PLC运行期间始终被存储。S7将静态变量定义在背景数据块中,因此只能为FB定义静态变量。功能块FC不能有静态变量。 ; 2. 逻辑块局部数据的数据类型 在变量声明表中,要明确局部数据的数据类型,这样操作系统才能给变量分配确定的存储空间。局部数据可以是基本数据类型或复式数据类型,也可以是专门用于参数传递 的所谓的“参数类型”。参数类型包括定时器、计数器、块的地址或指针等,见表5.2。;表5.2 参数类型变量; 3. 块调用过程及内存分配 CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息。当发生块调用或有来自更高优先级的中断时,就有相关的块信息存储在B堆栈里,并影响部分内存和寄存器。图5.2显示了调用块时B堆栈与L堆栈的变化。图5.3提供了关于STEP 7的块调用情况。;图5.2 堆栈与L堆栈;图5.3 调用指令对CPU内存的影响; 1) B堆栈与L堆栈 B堆栈存储以下被中断块的数据: (1) 块号、块类型、优先级、被中断块的返回地址; (2) 块寄存器DB、DI被中断前的内容; (3) 临时变量的指针(被中断块的L堆栈地址)。; 2) 调用功能块FB 当调用功能块FB时,会有以下事件发生: (1) 调用块的地址和返回位置存储在块堆栈中,调用块的临时变量压入L堆栈; (2) 数据块DB寄存器内容与DI寄存器内容交换; (3) 新的数据块地址装入DI寄存器; (4) 被调用块的实参装入DB和L堆栈上部; (5) 当功能块FB结束时,先前块的现场信息从块堆栈中弹出,临时变量弹出L堆栈; (6) DB和DI寄存器内容交换。; 3) 调用功能块FC 当调用功能块FC时会有以下事件发生: (1) 功能块FC实参的指针存到调用块的L堆栈; (2) 调用块的地址和返回位置存储在块堆栈,调用块的局部数据压入L堆栈; (3) 功能块存储临时变量的L堆栈区被推入L堆栈上部; (4) 当被调用功能块FC结束时,先前块的信息存储在块堆栈中,临时变量弹出L堆栈。 因为功能块FC不用背景数据块,不能分配初始数值给功能块FC的局部数据,所以必须给功能块FC提供实参。;5.1.3 功能块编程与调用举例 对功能块编程分两步进行:;定义局部变量的工作内容包括: 分别定义形参、静态变量和临时变量(FC块中不包括静态变量); (2) 确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(Data Type),还要为变量设置初始值(Initial Value)(尽管对有些变量初始值不一定有意义)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP 7将自动产生局部变量地址(Address)。; 写功能块程序时,可以用以下两种方式使用局部变量: 使用变量名,此时变量名前加前缀“#”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。 直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。

文档评论(0)

金不换 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档