FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它

Slides:



Advertisements
Similar presentations
6. 6 Overloading methods and constructors 6
Advertisements

第2章 PLC的结构及编程软件的使用 学习内容 S7-200系列PLC的外部结构 S7-200系列PLC的性能 PLC的编程语言与程序结构
Memory Pool ACM Yanqing Peng.
TIA 博途V12 STEP 7 V12 (LAD, FBD, STL)编程.
交通事故處置 當事人責任與損害賠償 屏東縣政府警察局交通隊.
M340可编程控制器技术培训课程 -编程软件篇.
TQC+ 物件導向程式認證-JAVA.
Profibus Training Course
第3章 S7-200可编程序控制器 3.1 S系列PLC发展概述 3.2 S7-200 PLC系统组成 3.3 编程元件及程序知识
空間向量 朱泰吉 蔡宇翔 張力夫 莊孟霏.
新世代計算機概論 第14章 程式語言.
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
第8章 继电接触控制系统.
可编程序控制器应用 王如松.
9、SIMATIC S7-300 PLC及指令系统 9.1 系统组成 9.2 系统配置 9.3 指令系统简介 9.4 程序结构
7 Intermediate Representation
Introduction to the C Programming Language
第一章 C语言概述.
S and STEP7 Basic V10.5 练习.
Visual Basic 6.0 學習範本 第三章 基本資料型態.
PIC16F1827介紹 以微控器為基礎之電路設計實務-微處理器實驗室.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
冷凍空調自動控制 - 控制系統範例 李達生.
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
电气控制及PLC技术 电气工程学院 自动化系 杨霞 2018年1月.
PLC 的硬件安装和维护 目录 页 目标 …… ……………………………………… …………………. 2
软件调试 目录 页 软件调试的检查表 下装用户程序到 CPU 排除停机错误 系统功能测试的步骤 记录程序的修改 项目文件的归档
组织块 操作系统 OB1 FC FB FB FC SFC SFB OBs 其它 目录 页码
第8章 通信及网络 8.1 通信及网络概述 8.2 通信实现 8.3 网络通信 8.4 自由口通信.
Matlab M檔案 方煒 台大生機系.
VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.
崔坚 西门子自动化与驱动集团 客户支持部CS2 热线电话:
S7-300/400PLC的编程技术 河北机电自动化教研室.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第二章 Modicon Micro PLC 的结构及基本指令
Function.
C 語言簡介 - 2.
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
第5章 S7系列程序结构与程序设计 5.1 编程方式与程序块 5.2 数据块与数据结构 5.3 S7系列PLC程序设计 思考与练习题.
Chapter 2 Basic Elements of Fortran
第七章 故障诊断 PLC是运行在工业环境中的控制器,一般而言可靠性比较高,出现故障的概率较低,但是,出现故障也是难以避免的。一般引发故障的原因有很多,故障的后果也有很多种。 引发故障的原因虽然我们不能完全控制,但是我们可以通过日常的检查和定期的维护来消除多种隐患,把故障率降到最低。故障的后果轻的可能造成设备的停机,影响生产的数量;重的可能造成财产损失和人员伤亡,如果是一些特殊的控制对象,一旦出现故障可能会引发更严重的后果。
第三章 项目设定.
第二章 電腦硬體知識 2-1 電腦的組成與架構 2-2 處理器 2-3 記憶體 2-4 輸入與輸出裝置 2-5 電腦的操作與保養.
电气控制及PLC技术 电气工程学院 自动化系 杨霞 2018年1月.
第六章 软件设计 第一节 硬件定义 第二节 地址定义 第三节 控制策略组态.
6 S7-200可编程控制器 指令集 2019/1/2 PLC指令集.
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
3 S7-200可编程控制器 使用入门 2019/2/17.
第六章 VHDL设计共享.
成品检查报告 Inspection Report
第6章 S7-200系列PLC 通信及网络 本章主要介绍SIMATIC指令集中的常用指令及其使用方法,并以梯形图和语句表两种编程语言为例,讲授指令的结构形式、功能和相关知识。
Horner Tianjin Automation Technology LTD
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
MATLAB 程式設計入門篇 初探MATLAB
位指令 I0.0 I0.1 Q 8.0 Q 8.1 I 1.0 ( MCR< ) (MCRA) Q 8.0 I 0.0 I 1.1
第5章 函 数.
第六章 記憶體.
计算机问题求解 – 论题1-5 - 数据与数据结构 2018年10月16日.
Create and Use the Authorization Objects in ABAP
可编程序控制器(PLC)应用技术 第 5 部分 PLC程序的设计.
符号 目录 页 绝对寻址和符号寻址… 符号寻址- 概述… 打开符号表 编辑:查找和替换…… 查看:过滤器 … 查看:排序…… 符号表:导出
MATLAB 程式設計 程式除錯 方煒 台大生機系.
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
F1-20P PLC简易编程器的使用.
第5章 S7-200 PLC编程软件及应用 5.1 编程软件系统概述 5.2 STEP 7-Micro/WIN 32软件功能
第4章 S7-200的功能指令 4.1 功能指令概述 4.2 数据处理指令 4.3 数学运算指令 4.4 程序控制指令
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
MATLAB 程式設計入門篇 程式除錯 張智星 (Roger Jang)
测试功能 目录 页 程序的状态监视功能 ……………... 2 程序状态监视的模式 …………………………. 3
Presentation transcript:

FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它 目录 页码 IEC 1131 标准........................................................................................................................................ 2-3 SIMATIC 管理器下的项目结构................................................................................................................. 4 STEP7的块 .............................................................................................................................................. 5 块的组成部分............................................................................................................................................ 6 块的结构 .............................................................................................................................................. 7 结构化编程 .............................................................................................................................................. 8 利用局部数据进行控制............................................................................................................................. 9 局部变量 .............................................................................................................................................. 10 临时变量 .............................................................................................................................................. 11 局部数据堆栈的大小 .............…............................................................................................................. 12 块所需要的局部数据区的长度 ............................................................................................................ 13 程序所占用的局部数据区的总长度 ................................................................................................... 14 练习1.1: 使用临时变量.................................………….......................................................................... 15 示例:故障信息指示.............................................................................................................................. 16 可以分配参数的块 ................................................................................................................................. 17 定义形式参数 ......................................................................................................................................... 18 编辑一个可分配参数的块 ...................................................................................................................... 19 调用一个分配了参数的块 .................................................................................................................... 20 在块调用时使用EN/ENO参数 .....................................……….............................................................. 21 练习1.2-3: FC块................................................................................................................................. 22-23 FB块................................................... ................................................................................................... 24 用FB实现的故障信息显示 ............................…….................................................................................. 25 生成背景数据块 ......................................…............................................................................................ 26 多重背景模型 ........................................................................................................................................ 27 练习1.4-5: FB块............................................................................................................................... 28-29 插入/删除块的参数可能遇到的问题 ........................……………............................................................ 30 调用被修改过的块时应做的更正 ..............................……...................................................................... 31 练习1.6-7:风扇监控功能的扩展........................................................................................................ 32-33 练习1.8: 识别变量的类型..................................................................................................................… 34 总结: 块的调用 .............................…………………................................................................................ 35

第三部分:编程语言 IEC 1131 标准 第一部分: 主要信息 定义 PLC 的术语 PLC 的主要功能特点 第二部分: 设备要求 第一部分: 主要信息 定义 PLC 的术语 PLC 的主要功能特点 第二部分: 设备要求 电气, 机械和功能上的要求 制造商需提供的信息 符合标准的规则 (一致性) 第三部分:编程语言 梯形图, 功能方框图,语句表, 顺序功能图和结构化文本 第四部分: 用户指南 系统分析和描述 PLC的选择和应用 安全和保护,安装和维护 第五部分: 通讯 模式,通讯块,与ISO协议的对应关系 介绍 IEC1131标准是一个由PLC生产商、系统制定和管理者协会撰写的文献, 该标准试图建立一个工业自动化领域的标准化和一致性的基础。 第1部分 包括典型的PLC中的一般概念的定义和功能特征。例如,循环处理过 程,过程映象,编程设备之间的分工,PLC和人机接口。 第2部分 具体说明组成各种设备的电气、机械和功能要求,并定义了相关 类型的检验方法。下述各项指标都做了要求:温度,湿度,供电 范围,接口保护,数字量信号的工作范围,以及机械应力。 第3部分 规定编程语言的准则。没有引入新的编程语言,相反,能兼容广泛使用 的其它编程语言,引入新的引导未来方向的元件。除了STL,LAD,和 FBD外,“结构化文本”被作为第4 种编程语言引入。 第4部分 包括PLC用户指南。提供一个工程项目中各阶段的信息:从系统分析开 始,到具体化阶段以及器件选择,直到器件的使用和维护。 第5部分 描述了各种型号PLC的供应商之间的交流以及PLC和其它任意设备之间 的通讯。一个基于MAP标准的PLC通讯协议被定义为 ISO//IEC 9506 - 1/2的补充标准。并介绍了通讯模块以及标准读写访问操作。 Modul: IEC_T1D.

IEC1131 内容 - 第三部分 编译为标准代码的规则 软件模型, 通讯模型, 编程模型 可编程逻辑控制语言中的通用元件 数据类型和变量 功能和功能块 程序和任务 指令表 (IL) (= 语句表 (STL)) 结构化文本 (ST) (= 结构化控制语言 (SCL)) 梯形图(LD) (= LAD) 功能方框图(FBD) 顺序功能图(SFC) (= S7-GRAPH) 附加的语法规则和编程示例 标准化编译 在这部分中定义了PLC系统必须完全满足IEC 1131标准的那些要求。 在文献中必须包含一个符合标准的声明,或者系统必须生成一个这样 的声明。 软件模型 考虑到如下的语言元素,如数据类型,变量、函数,功能块等, 这里定义了一个基本说明。 通用元件 这部分中定义了数据类型,变量和编程语言的其它元件。 IL(STL) 语言语义的定义。这里只定义了20种基本操作。 SCL 这是一种类似PASCAL的高级语言,它将现代高级语言的可能性 与PLC技术的特殊要求结合起来。这种语言尤其适于完成复杂的 计算任务和算法。 LD(LAD) 与已有的梯形图语言相比,引入了一种新的功能,例如边沿检测 或者针对功能/功能块的布尔量输入/输出等。 FDB 标准中这种语言被称为功能方框图语言。 SFC 用于顺序编程。这种标准着眼于表示类型。对于SIMATIC S7, S7-GRAPH是GRAPH5的延续。 Modul: IEC_T1D.

SIMATIC 管理器下的项目结构 项目 硬件站 S7-300 可编程的 CPU S7/M7 程序(分配给硬件的) STL 用户程序源文件 用 S7 块组成的用户程序, OBs, FBs, FCs, DBs, 等 用户程序 STL 源文件 S7/M7 程序(未分配给硬件的) 项目 项目的图标位于最上层。 站 能够建立S7-300和S7-400的站。通过硬件组态工具可以对硬 件进行模块配置和参数设定。 S7/M7程序 相反, S7/M7程序(S7/M7目标)包含着适于各种应用和编程方法 的其它目标程序。 网络 网络图标包含着显示网络的具体信息。 S7 程序 用户程序 源文件 图 符号表 S7块 OBs, FBs, FCs, 等. STL, SCL, GRAPH, HiGraph, 源文件 CFC 图 SFC 图

STEP7的块 块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。 块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。 STEP 7环境支持下列的代码: 逻辑块: OB - 组织块 FC - 功能 FB - 功能块 SFC - 系统功能 SFB - 系统功能块 数据块: DB - 数据块 SDB - 系统数据块 用户自定义的数据类型: UDT VAT VAT(用于监视/修改变量的变量表)不是块,但是存储在用户程 序中。

块的组成部分 变量声明表 代码部分 在你打开一个块进行编辑或查看时,程序编辑器中将出现两个窗 口。一个是属于块的变量声明表,在另一个窗口的则为生成实际 程序的指令部分。 变量声明表 这个表是用来说明块的局部变量的名字和大小。这些变量是与由 系统预定的或由其它模块传递来的值有关的变量。经声明后的变 量分配局部内存给逻辑块。同时也为你指定给功能块的每一个背 景数据块提供数据结构。 局部数据 局部符号在块的声明部分中定义。你可以在不同的块中重复使用 同一个符号,因为它们在每一个块中仅有效一次。 局部符号能被定义为参数,块变量和跳转标志。且不需要符号表。 指令部分 在指令部分,你可以建立你的逻辑序列。为做到这一点,利用梯 形图和语句表,你可以形成网络或回路。在你输入一条指令并指 定一个地址后,程序编译器进行一次语法校验并将不正确的输入 用红色的斜体显示出来。

块的结构 块的首部 (36字节) 块体 变量声明部分 和 程序部分 或 数据 压缩的接口描述 块的首部 一个块的首部包含下列数据: 块的首部 一个块的首部包含下列数据: - 同步采样 - 属性(用户功能块或标准功能块) - 生成语言/块类型 - 块的标号 - 用字节表示的总的块长度 - 口令(预留) - 保护级别(预留) - 时间标记(产生的时刻和上一次修改的时间) - 局部数据的数量和写保护 - 当前版本号等 块体 块体由声明部分和代码块中的程序部分构成,或由数据块中 的数据构成。 调用接口和所有的块变量都在声明部分中定义。程序部分包 含真正的程序代码。(MC7指令) 压缩接口说明 压缩接口说明包括在说明部分中定义的参数:输入参数,输 出参数,输入/输出参数,局部块参数以及临时块参数。对 于数据块,接口声明包括数据类型和格式 ( 例如,整型, 实型等)。这就使得在任何时候都能正确地以所要求的数据 类型进行显示。 压缩的接口描述

结构化编程 OB 1 电机 1 FC 1 电机 2 FC 1 电机 3 FC 1 什是结构化编程 ? 结构化程序把过程要求的类似或相关的功能进行分类,并试图提供可以用于几个 任务的通用解决方案。向指令块提供有关信息(以参数形式),结构化程序能够重复 利用这些通用模块。 这些模块的例子包括: - 传送带系统中所有交流电机的通用逻辑控制的块 - 装配线机械中所有电磁线圈的通用逻辑控制的块 - 造纸机器中所有驱动装置的通用逻辑控制的块 它如何执行? OB1 (或其他块)中的程序调用这些通用执行块。和模块化编程不同,通用的数据 和代码可以共享。 优点和缺点是什么? 不需要重复这些指令,然后对不同的设备代入不同的地址,可以在一个块中写程 序,用程序把参数(例如:要操作的设备或数据的地址)传给程序块。这样,可 以写一个通用模块,更多的设备或过程可以使用此模块。当使用结构化编程方 法时,需要管理程序存储和使用数据。

利用局部数据进行控制 OB1 FC1 (数学功能) I0.5 FC1 MW5 Input1 Output_A QW12 3369 TEMP1 int sample measure 1 0.0 in FC1 2.0 in int constant 4.0 in MW5 int offset Input1 Output_A QW12 6.0 out int result 3369 Input2 8.0 temp int intermediate MW10 Input3 ADD_I IN1 IN2 M5.0 O #TEMP1 #INPUT1 #INPUT2 M5.1 SUB_I IN1 IN2 ( ) I0.5 O #Output_A FC1 #TEMP1 #INPUT3 MW2 Input1 Output_A QW20 6869 Input2 为了在FC或FB中使用局部内存,使用的名字和大小必须在块的声明部分中确定。 当FC或 FB被 调用时,实参被传递到局部内存区。如果你希望使用这个真实值,可以在代码部分中使用局部 符号名。 在上面的例子中,有一个根据I0.5状态从OB1对FC1的条件调用。不同的值被传递给FC1,同时输 出值返回给OB1。 MW16 Input3 带有实际参数 的调用块 局部声明区 (定义形式参数) 被调用块的代码 部分,使用来自 局部内存区的值

局部变量 局部变量 / 数据 (只在一个块中有效) 全局变量/数据 (在全部程序中有效) • PII / PIQ • I/ O • M / T / C • DB areas 临时变量 • 当相关块执行完毕后被清除 • 临时存储在 L stack中 • 可在下列块中使用 OBs / FCs / FBs 静态变量 •当相关块执行完毕后仍然 保留 • 永久存储在DBs中 • 只能在FBs中使用 绝对地址 访问方式 符号地址 概述 到目前为止, 我们使用实际参数来访问瓶子灌装生产线的输入和输出,块不能被分配参数,这样你编辑的程序只能用于特定的设备。 但是,在很多情况下一个大的程序要多次调用某一个功能,这时应建立通用的可分配参数的块(FC, FB)。这些块的输入输出使用形式参数,当调用时赋给实际参数。 上述两种块的区别在于块调用时的是否有参数的传递,其内部功能没有变化。 局部变量 到目前为止,我们使用全局变量(标志位和数据块)来存储数据,例如生产数据。在这章中我们将学习如何利用局部变量来存储数据。 临时变量 临时变量是一种在块执行时,用来暂时存储数据的变量。他们可以被用于所有的块中。 静态变量 如果有一些变量在块调用结束后还需保持原值,他们必须被存储为静态变量,静态变量只能被用于FB块中。

临时变量 概述 临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。这些临时数据存储在 L stack (局部数据堆栈)中。 定义方法 临时变量是在块的变量声明表中定义的,在“temp”行中输入变量名和数据类型,注意临时变量不能赋予初值。当块保存后,“Address”栏中将显示其在L stack 中的位置。 访问方法 Network 1为一个用符号地址访问临时变量的例子。减运算的结果被存储在临时变量“result”中。当然,也可以采用绝对地址来访问临时变量 (T LW0),然而,为了使程序更加易读,最好不要采用该方式。 注意 程序编辑器可以自动地在局部变量名前加上# 号来标识它们,局部变量只能在变量表中对它们定义过的块中使用。

局部数据堆栈的大小 总容量: 1.5 Kbyte (CPU 313..316) 执行的程序 对于 S7-300: 优先级 局部堆栈大小 启动程序 (只执行一次) 27 256 bytes 循环扫描程序 1 256 bytes 12 3 2 时间中断 日时钟中断 延时处理中断 循环处理中断 局部数据堆栈 局部数据堆栈(L stack)是用来存储临时变量的内存区域。 局部数据堆栈的大小 当操作系统执行一个OB时(不论优先级如何),将打开一个256 字节大小的局部堆栈区,供该OB及其中所调用的块使用 。 313..316 CPUs中局部堆栈区的总容量为1536字节 (1.5kByte)。 OB的优先级 S7-300中共有8个优先级,同时激活的优先级不能超过6个。详细介绍见 “组织块”一章。 S7-400 对于 S7-400 CPUs, 可以通过组态工具来定义每一个优先级所对应的局部堆栈的大小。还可以不选无用的优先级,为其他优先级保留更多的局部数据。 循环扫描中的错误处理中断 256 bytes 16 28 26 事件驱动中断 硬件中断 启动过程中的错误处理中断

块所需要的局部数据区的长度 rechts 显示所需字节数 在块的属性中,我们可以看到块所需要的局部数据区的字节数。 显示所需字节数 在块的属性中,我们可以看到块所需要的局部数据区的字节数。 操作步骤 1. 在SIMATIC Manager中, 用鼠标右键选中块,然后在菜单中选择 -> Object Properties。或 2. 在SIMATIC Manager中,用鼠标左键选中块,然后选择菜单功能Edit -> Object Properties。 注意 对于S7-300,操作系统分配给每一个OB的局部数据区的最大数量为 256 字节。 OB的调用自己占去 20或22字节,则还剩下最多 234字节可分配给FC或FB。 如果块中定义的局部数据的数量大于256字节,该块将不能下装到CPU中。在下装过程中将出现错误提示:“The block could not be copied”。如果单击错误信息框中的“Details”按钮,将弹出帮助信息:“Incorrect local data length”。

程序所占用的局部数据区的总长度 OB 1 FC 1 FC 2 FC 3 事件 所占用的 L stack OB1 操作系统 有临时 变量 256 Bytes 事件 所占用的 L stack 1 OB1 OB 1 操作系统 FC 1 有临时 变量 2 OB1 FC1 FC 2 有临时 变量 OB1 FC2 FC1 3 OB1 FC1 4 FC 3 有临时 变量 OB1 FC3 FC1 5 7 OB1 OB1 FC1 6 局部数据区的 利用“Reference Data”工具(详见“故障检测和排除”一章),可查看程序 占用情况 所占用的局部数据区的字节数(包括总的字节数和每次调用所占的字节数)。 操作步骤 在SIMATIC Manager中选中block文件夹,然后选择菜单功能 Options -> Reference Data -> Display. 注意 在程序执行过程中,如果所使用的局部数据超出了最大限额,则CPU进入 Stop 模式,并将错误信息“STOP caused by error when allocating local data”记入 diagnostics buffer(诊断缓冲区)中。

练习1.1: 使用临时变量 替换为临时变量 QW6 目的 了解如何使用临时变量。 目的 了解如何使用临时变量。 要求 在S7 程序“Fill”的FC 19块中,用临时变量代替标志字来暂存数据。 在上图LAD或 FBD形式的程序中, 标志字被用来连接除法器的输出和数制转换器的输入。 如果你用STL来写程序则不需要标志字,直接插入临时变量来存储中间结果。 步骤 • 打开S7 程序“FILL”中的FC 19 。 • 在变量声明表中定义一个临时变量 “Packages”,其类型为“Integer”。 • 在程序里将包装的数量保存在临时变量“packages”中。 • 将修改后的程序下装并调试。

示例:故障信息指示 Disturbance Acknowledge Report Memory LED 要求 Edge Mem. Bit Disturb. Input Acknowl. Flash Freq. Display RS & = >=1 Q S R P Report Memory 解决方案 控制要求 故障信号disturbance 出现时,在操作面板上用一个LED来指示。 故障出现后(I1.3=1) ,LED (Q4.3)以2Hz的频率闪烁。用应答输入I 1.2来检测故障,如果故障已排除,则 LED停止闪烁;如果故障仍然存在,则 LED转换为常亮状态直到故障被排除。 程序说明 即使故障信号出现的时间很短也应该记录,所以采用置位指令来将该信号锁存在故障标志位M40.0 中。 在置位指令之前,对故障信号做RLO边沿检测处理,这样在故障应答信号输入后可立即复位故障标志位。 如果故障标志被置位(且该信息未被应答),则利用上面的AND逻辑指令使LED闪烁。 AND逻辑指令的一个输入端为时钟信号标志位M10.3, 另一输入端为故障标志位,用来决定时钟信号是否输出。 下面的AND逻辑指令的作用是,当应答过后故障仍然存在时,令LED常亮。

可以分配参数的块 不可以 分配参数的块 可以分配参数的块 程序 调用 FC 20 A i 1.2 R m 40.0 A i 1.3 Fp m 40.1 S m 40.0 A m 40.0 A m 10.3 O Anm 40.0 = Q 4.3 A #Acknowledge R #Report memory A #Disturb_input FP #Edge_mem_bit S #Report_memory A #Report_memory A #Flash_freq O AN #Report_memory = #Display I 1.3 Disturb_ input Display Q 4.3 I 1.2 Acknowledge M 10.3 Flash_freq M 40.0 Edge_ mem_bit Report_ memory M 40.1 形式参数 引言 当需要对程序的某部分频繁调用时,可以使用分配了参数的块,这样做有下列优点: • 程序只需生成一次 • 该块只在用户存储器中保存一次,却可以被程序任意次调用。 • 该块采用形式参数( input, output 或 in/out参数)编程,当用户程序调用该块 时,要用实际地址(实际参数)给这些参数赋值。 参数传递举例 当上面的块被执行时,操作系统扫描语句“A Disturb_input”时要给形式参数 “Disturb_input”分配实际地址。例如, 实际地址为I 1.3,则将执行如下语句: “A I 1.3” 。 FC / FB 可以分配参数的块为 FC 或 FB。 可传递参数的块FC20 在本例中,故障显示功能在控制系统中将被使用10次,所以将该功能用可传递参数的块FC 20来编写,在程序中用不同的参数对其调用10次。 实际参数

定义形式参数 形式参数 参数类型 定义 使用方法 图形显示 FC 20 的变量声明表 输入参数 in 只能读 在块的左侧 输出参数 out 只能写 在块的右侧 输入/输出 参数 In_out 可读/可写 在块的左侧 FC 20 的变量声明表 形式参数 对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。 参数的类型 在上面的表中,列举了三种类型的参数及定义方法。 注意,当需对某个参数做读、写访问时,必须将它定义为in/out 型参数。 以 FC20为例 幻灯片下面的表为该块的变量声明表。因为对故障信息标志位既要读(扫描)又要写 (set/reset),所以它被定义为in/out型参数。 说明 在最初的声明表中,每一种参数只占一行。如果需要定义多个参数,可以用“Return”键来增加新的参数定义行。另一种方法是:选中一个定义行后,用菜单功能 Insert -> Declaration Row -> Before Selection / After Selection 来插入一个新的参数定义行。 注意! 当块已被调用后,再插入或删除定义行,必须重新编写调用指令。

编辑一个可分配参数的块 对于无参数分配的块,此处可能是: • 绝对地址: I1.3 • 符号地址: “End_left” 说明 形式参数名称用大、小写字母没有区别。编程器可自动地在其前面加“#”号,以表示该参数为局部变量,是在块的变量声明表中定义的。 当采用LAD / FBD 语言编写程序时,参数的名称在一行中可能显示不全。这取决于程序编辑器的习惯设置 (Options -> Customize -> "LAD/FBD" tab -> Width of address field)。 符号名 1. 如果在编程一个块时使用符号名,编辑器将在该块的变量声明表查找该符号 名。 如果该符号名存在,编辑器将把它当作局部变量,并在符号名前加 “#”号。 2. 如果它不属于局部变量,则编辑器将在全局符号表中搜索。如果找到该符号 名,编辑器将把它当作全局变量,并在符号名上加引号。 3. 如果在全局变量表和变量声明表中使用了相同的符号名,编辑器将始终把它 当作局部变量。然而,如果输入该符号名时加了引号,则可成为全局变量。 对于无参数分配的块,此处可能是: • 绝对地址: I1.3 • 符号地址: “End_left”

调用一个分配了参数的块 绝对的 寻址方式 符号的 符号 Network 3: First Call .... Disturb_input Acknowledge Flash_freq Report_memory Edge_mem_bit Display ENO EN FC20 “End left” “Position error” 绝对的 “Acknow.button” M10.3 M40.0 寻址方式 M40.1 Network 4: Second Call Q4.1 EN 符号的 FC20 “End right” Disturb_input Display Q5.4 符号表 全局符号 “Acknow.button” Acknowledge M10.3 Flash_freq 调用 在 LAD/FBD方式下, 可以从“Program Elements” 浏览器中选择要调用的块。块的参数端上显示为问号 (??.?) ,应在此处输入实际参数。 说明 调用分配了参数的 FC 块时,必须输入所有的参数 ( EN和ENO除外)。 M40.2 Edge_mem_bit ENO M40.3 Report_memory 符号 局部符号 -->形式参数

在块调用时使用EN/ENO参数 LAD/FBD STL FC 1 无条件调用 ?? . ? EN ENO CALL FC 1 NOP 0 A I 0.1 JNB _001 CALL FC 1 _001: A BR = Q 5.0 FC 1 EN ENO I 0.1 = Q 5.0 条件调用 标准FC 标准FC 执行时将遵循下列规则: • 如果EN=0, 块不被执行且ENO=0。 • 如果EN=1, 块被执行,执行过程中如果不出现错误则ENO=1,如果出现错误 ENO=0。 用户FC 当用LAD/FBD调用块时,EN和ENO参数也被加在块上,这样可根据RLO来调用该块。 在STL 中,没有EN/ENO参数。可以用跳转指令来仿效它们。 无论采用何种语言,必须编写程序来检查错误。 互相连接 在LAD/FBD中,几个功能方框可通过EN / ENO参数串联在一起使用 例子 ?? . ? FC 1 EN ENO FC 2 FC 3 =

练习1.2: 生成一个分配了参数的FC块 1. FC 20 的变量声明表 无参数的块 分配了参数的块 FC 20 A I 1.2 R M 40.0 A I 1.3 FP M 40.1 S M 40.0 A M 40.0 A M 10.3 O AN M 40.0 = Q 5.3 A #Acknowledge R #Report_memory A #Disturb... : 2. 要求 将故障显示程序用分配了参数的块来编写。变量声明表和程序的开头部分已在幻灯片中给出。 步骤 • 在S7 程序“My Program”中插入FC 20 • 在FC 20 中编写程序 • 保存FC 20

练习1.3: 调用一个分配了参数的FC块 FC 20 I 1.3 Disturb_input I 1.2 Acknowledge Display Q 5.3 第一次调用FC20时 的参数分配 M 10.3 Flash_freq M 40.0 Edge_mem_bit M 40.1 Report_memory FC 20 I 1.4 Disturb_input I 1.2 第二次调用FC20时 的参数分配 Acknowledge Display Q 5.4 要求 在OB 1中用不同的参数两次调用FC 20,并测试该程序。 步骤 • 在S7程序“My Program”的OB 1中插入两个程序段 • 按幻灯片所示,两次调用FC 20 • 下装FC20和OB 1 • 调试程序 说明: 在硬件组态时,将MB10定义为时钟存储字节。然后下装硬件组态,使M10.3 闪烁。 M 10.3 Flash_freq M 40.2 Edge_mem_bit M 40.3 Report_memory

FB块 OB 1 DB 2 FB 2 EN Disturb. input Acknowledge Display Flash freq. ENO FB块的变量声明表 FB块的特点 与FC块不同,FB块 (Function Blocks) 带有一个存储区。也就是说,有一个局部数据块被分配给FB块,这个数据块被称为背景数据块(instance data block )。 当调用FB时,必须指定背景数据块的号码, 该数据块会自动打开。 背景数据块可以保存静态变量,所以静态变量只能用于FB块中,并在其变量声明表中定义。当块退出时,它们仍然保持。 保存参数 当FB块被调用时,实际参数的值被存储在它的背景数据块中。 如果在块调用时,没有实际参数分配给形式参数,在程序执行中将采用上一次存储在背景数据块中的参数值。 每次调用FB时可以指定不同的实际参数。当块退出时,背景数据块中的数据仍然保持。 FB 的优点 • 当编写FC的程序时,用户必须寻找空的标志区或数据区来存储需保持的数据, 并且要自己编写程序来保存它们。而FB的静态变量可由STEP 7的软件来自 动保存。 • 使用静态变量可避免两次分配同一存储区的危险。 • 如果用FB块实现FC20的功能, 并用静态变量“Report memory”和“Edge memory marker”来代替原来的形式参数,将可省略两个形式参数,简化了块 的调用。

用FB实现的故障信息显示 FB的声明表 背景数据块 故障信息显示 在前面的练习中,我们编写了一个分配了参数的块FC 20来显示故障信息。 用FB块实现该功能时,采用静态变量来替代FC 20 中用来保存信息和检测边沿的标志位,这些静态变量存储在该FB的背景数据块中。 背景数据块的结构 当参照一个FB 生成一个数据块时,STEP7将参照该FB的变量声明表生成数据块的结构。 数据块保存之后,将生成一个背景数据块。

生成背景数据块 1. 在FB调用时生成背景数据块 2. 创建一个新的背景数据块 如何生成背景数据块 生成一个新的背景数据块有两种方法: • 在调用FB时,为它指定一个背景数据块后, 如果该数据块并不存在,则弹出以 下提示信息: “Instance data block DB x does not exist. Do you want to generate it?”. 单击“Yes”按钮可自动生成一个新的背景数据块。 • 创建一个新的数据块时,选择其属性为 “Data block referencing a function block”。 注意 一个背景数据块只能归属于一个FB块,而一个FB块在每次调用时可以使用不同的背景数据块。 FB块被修改后 (添加参数或静态变量), 必须重新生成背景数据块。

多重背景模型 多重背景模型 普通背景模型 OB 1 DB10 FB 100 DB100 Call FB100, DB100 OB 1 stat Dist_1 FB20 Dist_2 Call FB20, DB10 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= FB20 DB11 FB20 Call FB20, DB11 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Call Dist_1 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Parameters and static variables of the 1st. call of FB20 多重背景模型 到目前为止,每次调用一个FB块时都使用不同的背景数据块。 由于数据块的数量有限,所以在此介绍一种方法,允许多次FB调用都使用同一个背景数据块。多重背景模型允许多次FB调用都使用同一个背景数据块,为此需增加一个FB块用来管理背景数据。 针对每次的FB调用 (FB 20), 要先在上层的FB块 (FB 100) 中定义一个静态变量,用来存储这一次调用时的背景数据。这样用符号名调用该块时(Call Dist_1) ,就不须为其指定背景数据块了。 上层的FB (FB 100) 被调用时(例如,在OB1中调用它),将只生成一个公用的背景数据块 (DB 100) 。 说明 多重背景数据块将在高级编程课中继续讨论。 DB12 FB20 Call FB20, DB12 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Call Dist_2 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Parameters and static variables of the 2nd. call of FB20

练习1.4: 编写一个FB块 1. FB 20 的变量声明表 A #Acknowledge 2. R #Report memory A #Disturb. ... : 2. 要求 前面练习中的故障信息显示程序,在本练习中要求用FB块来完成。将边沿检测标志和故障信号标志用静态变量来表示,这样,将不需要任何全局标志位来存储信息。 该块的变量声明表和程序的开头如幻灯片所示。 步骤 • 在S7程序“My Program”中插入 FB 20 • 在 FB 20 中编写程序 • 保存 FB 20

练习1.5: 调用FB并调试 步骤 在S7程序“My Program”中: • 删除所有调用FC20的指令。 • 下装 FB20, DB20, DB21和OB1 • 调试程序 FC -> FB 在本练习中,尽管FB20与前面完成的FC20具有相同的内容,但由于程序比较简单,我们仍然重新编写FB20。 如果一个包含复杂程序的 FC 块要转化为FB块,采取如下方法更为简便: 第一种方法: • 插入一个新的 FB • 将原FC块中的声明表拷入FB中并做修正 • 将程序段从FC拷入FB • 保存FB 第二种方法: • 从FC块生成源程序 • 在源程序中做适当修改 • 从源程序生成FB块(见第二章)

插入/删除块的参数可能遇到的问题 Save 可能遇到的问题 当块已在程序中被调用之后,再增加块的参数,必须更新块的调用指令。 否则,在程序执行中,由于该块新增的参数没有被分配实际参数,则CPU会停机或者块的功能不能实现。 在本例中,新插入的参数为“Check_lights”。 更新块的调用 当块的声明表被修改之后保存时,将弹出警告信息,提示可能出现的问题。

调用被修改过的块时应做的更正 当调用块被打开时: 单击鼠标右键 对调用指令的更正 当打开调用块时,将弹出如下信息:“Time stamp conflict with at least one block call”,且调用语句变为红色。用鼠标右键点击调用方框并选择菜单功能 “Update Call”。之后调用方框被重新显示,在本例中,将包含新增的输入参数“Check_light”。此时可以给这个新参数分配地址,如果是FB块,将重新生成背景数据块。

练习1.6: 多台设备的风扇监控功能 功能 符号 SIG FC101 ACKN R REPORT A TIMER_NO B =1 A FLT S_ODT C B S Q >=1 C ACKN TIMER_NO A TV 任务要求 在一组设备中,每个设备中都有三个冷却风扇,设它们的运行指示信号为A、B和C(为“1”表示正常运行)。正常情况下,只要设备运行其中两个风扇就转,另一个备用。这些设备对风扇的监控要求相同,如下所示: (1)如果一个风扇坏了,而备用风扇在5秒种内还未接通,在FLT端显示故障信号(FLT=1)。 (2)一旦三个风扇都坏了,故障信号立即显示。 (3)当设备恢复正常运行时,用ACKN端输入的“1”信号清除故障信息(FLT=0) 。 将风扇的监控功能作成一个带参数的“标准功能”,在每个设备的控制程序中分别调用,可提高编程的效率,同时使程序更加简明。 练习步骤 (1)按上图的要求编写带有参数的程序块FC101,使之成为一个可实现风扇监控功能的“标准功能”。 (2)编制程序,对两台设备的风扇进行监控。在OB1中用不同的参数对FC101无条件地调用两次,以实现对两台设备的监控功能。两台设备的实际监控参数如下表所示。 (3)调试程序 B & SIG C FLT 参数 A B C ACKN TIME TV FLT SIG 设备1 I1.6 I1.5 I1.4 I0.0 T10 S5T#5S Q5.5 M20.0 设备2 I1.2 I1.1 I1.0 I0.0 T11 S5T#5S Q5.1 M20.1

练习1.7: 风扇监控功能的扩展 功能 符号 SIG FC101 ACKN R REPORT A TIMER_NO B =1 A S_ 练习1.7: 风扇监控功能的扩展 功能 符号 SIG FC101 ACKN R REPORT A TIMER_NO B =1 A S_ ODT FLT C B >=1 S Q C & ENAB ENAB ACKN A 任务要求 程序块FC101要扩展一个使能输入ENAB(见上图),之后只有当被监视的装置处于工作状态时(ENAB=1),才允许输出故障信号。 注意 在程序块FC的变量声明表中增加参数后,需重新修改调用语句。 练习步骤 (1)在FC101变量声明表中A、B、C三个参数后插入新参数ENAB,然后在FC101及OB1中完成相应的修改,设使能输入ENAB的实际地址为I1.7。 (2)重新调试程序。 TIMER_NO B & TV C FLT SIG ENAB

TYPE OF VARIABLE 练习1.8: 识别变量的类型 L #Number_1 T #Max_value T MW 40 Statement L #Number_2 L #Intermediate_result L “Number_1” T #Number_2 TYPE OF VARIABLE Global Local Absolute Symbolic Temporary Static Parameter 目的 掌握各种变量的区别。 步骤 在表中变量的相关数据类型上标上 X号。 回答下列问题: 语句 T#Number_2 有何错误? .................................................................................

总结: 块的调用 ( CALL ) FC FB • CALL FC2 Par1: ... Par2: ... Par3: ... 语言 有参数 • CALL FC2 Par1: ... Par2: ... Par3: ... FC2 EN ENO Par3 Par1 Par2 有参数,有背景数据块 • CALL FB2, DB3 Par1: ... Par2: ... Par3: ... FB2 EN ENO Par3 Par1 Par2 DB3 无参数 无参数,无背景数据块 • CALL FC1 • UC FC1 • CC FC1 • UC FB1 • CC FB1 STL FC1 ( CALL ) FC1 EN ENO LAD FC1 调用 “CALL”指令用于调用程序块(FC, FB, SFC, SFB), 而与RLO或其他条件无关。 如果用“CALL”来调用FB或SFB,则必须指定背景数据块。 可以使用块的绝对或符号名,例如:“CALL FB2, DB2”或“CALL valve, level”。“CALL”操作保存返回地址,解除对MCR的依赖,并生成块调用所需的局部数据区。 UC “UC”为无参数分配的无条件块调用指令(针对FC或FB),其它与“CALL” 一致。 CC “CC”指令在RLO=1.时调用 FC或FB,其它与“CALL”一致。 参数 在声明表中列出的为“形式参数”,在调用时分配给块的地址或数值为“实际参数”。 静态和临时变量不出现在调用指令中。 CALL FC1 EN ENO FBD