功能和功能块 FC FB DB 目录 页码 目标 …………… 局部变量 临时变量 程序所占用的局部数据区的总长度 局部数据堆栈的大小 …

Slides:



Advertisements
Similar presentations
3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
Advertisements

冀教版四年级数学上册 本节课我们主要来学习 2 、 3 、 5 的倍数特征,同学们要注意观察 和总结规律,掌握 2 、 3 、 5 的倍 数分别有什么特点,并且能够按 要求找出符合条件的数。
LCD Vender Check Process 笔记本液晶屏供应商的检查方法
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
软件调试 目录 页 软件调试的检查表 下装用户程序到 CPU 排除停机错误 系统功能测试的步骤 记录程序的修改 项目文件的归档
组织块 操作系统 OB1 FC FB FB FC SFC SFB OBs 其它 目录 页码
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
S7-300/400PLC的编程技术 河北机电自动化教研室.
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
把COM口设置到没有使用的 COM1 – COM4
“什么是 口令? ” 源文件编程和用户程序的重新接线 目录 页
走进编程 程序的顺序结构(二).
辅导课程六.
第5章 S7系列程序结构与程序设计 5.1 编程方式与程序块 5.2 数据块与数据结构 5.3 S7系列PLC程序设计 思考与练习题.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
S 数控机床故障诊断与维修.
第二章 Java语言基础.
第一部分 自动线控制部分PLC程序设计.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
姚金宇 MIT SCHEME 使用说明 姚金宇
“什么是 口令? ” 源文件编程和用户程序的重新接线 目录 页
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
项目二:HTML语言基础.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
位指令 I0.0 I0.1 Q 8.0 Q 8.1 I 1.0 ( MCR< ) (MCRA) Q 8.0 I 0.0 I 1.1
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
HSC高速输出例程 HORNER APG.
符号 目录 页 绝对寻址和符号寻址… 符号寻址- 概述… 打开符号表 编辑:查找和替换…… 查看:过滤器 … 查看:排序…… 符号表:导出
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
用户程序的重新接线 目录 页 目标 ………… 概述……… 用SIMATIC 管理器重新接线 …………………
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
RefWorks使用指南 归档、管理个人参考文献.
培训课件 AB 变频器的接线、操作及参数的备份 设备动力科.
测试功能 目录 页 程序的状态监视功能 ……………... 2 程序状态监视的模式 …………………………. 3
DSP技术与应用 电子与信息技术系.
Presentation transcript:

功能和功能块 FC FB DB 目录 页码 目标.......................................................................................…………….............................................. 2 局部变量 .............................................................................................................................................. 3 临时变量 .............................................................................................................................................. 4 程序所占用的局部数据区的总长度 .................................................................................................... 5 局部数据堆栈的大小 .............…............................................................................................................. 6 块所需要的局部数据区的长度 ........................................................................................................... 7 练习: 使用临时变量.................................………….............................…….......................................... 8 示例:用输出LED故障信息指示............................................................................................................ 9 可以分配参数的块 ................................................................................................................................ 10 定义FC 20形式参数 ............................................................................................................................. 11 编辑可以分配参数的块 ...........................................................................….......................................... 12 调用可以分配参数的块 ..........................................................................…......................................... 13 练习:编辑可以分配参数的FC块........................................................................................................... 14 练习:调用可以分配参数的FC块........................................................................................................... 15 功能块(FB)....................................................................................................................................... 16 用功能块实现的故障信息显示 ............................……........................................................................... 17 生成背景数据块 ......................................….......................................................................................... 18 之后插入/删除块的参数 ........................……………..................................……………........................ 19 检查块的一致性 ......................................…......................................................................................... 20 调用被修改过的块时应做的更正 ..............................……................................................................... 21 练习:编辑功能块.................................................................................................…............................ 22 练习:调用功能块并测试...................................................................................................................... 23 多重背景模型 ...................................................................................................................................... 24 练习1.8: 识别变量的类型................................................................................................................… 25 在块调用时使用EN/ENO参数 .....................................………............................................................. 26 总结: 块的调用 .............................…………………............................................................................. 27 练习(选作):多台设备的风扇监控功能............................................................................................. 28 练习(选作):风扇监控功能的扩展.................................................................................................... 29

目标 学习了本章之后,你将 ... ... 熟悉临时变量的用途 ... 能够声明临时变量并在程序中使用 ... 熟悉可赋值参数的块的用途 ... 熟悉临时变量的用途 ... 能够声明临时变量并在程序中使用 ... 熟悉可赋值参数的块的用途 ... 能够编程可赋值参数的功能和它们的调用 ... 了解功能(FC)和功能块(FB)之间的差别 ... 熟悉背景模型和多重背景模型 ... 熟悉静态变量的用途 ... 能够声明静态变量并在程序中使用 ... 能够编程可赋值参数的功能块和它们的调用

局部变量 局部变量 / 数据 (只在一个块中有效) 全局变量/数据 (在全部程序中有效) • PII / PIQ • I/ O • M / T / C • DB 区 临时变量 • 当相关块执行完毕后被清除 • 临时存储在 L stack中 • 可在下列块中使用 OB / FC / FB 静态变量 •当相关块执行完毕后仍然 保留 • 永久存储在DB中 • 只能在FB中使用 绝对地址 访问方式 符号地址 概述 到目前为止, 我们程序的输入和输出直接使用实际赋值来编码,这种编程地址区固定,于是它不适合重复的处理 。 块不能被分配参数,这种程序只能用于没有重复的处理的特定的设备。 经常出现的功能最好做成通用的可分配参数的块(功能FC,功能块FB)。这些块使用符号的输入输出参数(局部符号名),当调用时赋给实际参数。 当调用功能或功能块时必须赋值这些操作数。 FC/FB的程序逻辑保持不变并且可以多次使用这些逻辑。 局部变量 到目前为止,我们使用全局变量(标志位和数据块)来存储数据,例如生产数据。在这章中我们将学习如何利用局部变量来存储数据。 局部变量只能由生成它的块来读。由此,局部变量不能用作不同程序块之间的数据接口。 有两种局部变量: 临时和静态 临时变量 临时变量是一种在块执行时,用来暂时存储数据的变量。他们可以被用于所有的块中(OB, FC, FB) 。 静态变量 如果有一些变量在块调用结束后还需保持原值,他们必须被存储为静态变量,静态变量只能被用于FB块中。赋值给FB的背景数据块用作静态变量的存储区。

临时变量 概述 临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。 这些临时数据存储在 L stack (局部数据堆栈)中。 L stack 是CPU 中单独的存储器区。 定义方法 在一个块中使用临时变量之前,必须在块的变量声明表中定义,在“temp”行中输入变量名和数据类型,临时变量不能赋予初值。 当完成一“temp”行后, 按“回车”键 , 一个新的“temp”行添加在其后。 L stack的绝对地址由系统赋值并在“Address”栏中显示。 访问 Network 1为一个用符号地址访问临时变量的例子。 减运算的结果被存储在临时变量 #result 中。当然,也可以采用绝对地址来访问临时变量 (T LW0),然而,因为程序更加难读,最好不要采用该方式。 注意 # 不同于来自符号表的显示在程序中带有引号的全局符号(“symbol name”),局部符号之前有一#( #result) 。当没使用 “ ” 且在块的变量声明表中有这个符号名,编辑器自动地在符号前加上# 号。编辑器在检查全局符号表之前先检查块的变量声明 表。

程序所占用的局部数据区的总长度 OB 1 FC 17 FC 20 FC 20 事件 所占用的 L stack OB1 操作系统 有临时 变量 256 Bytes 事件 所占用的 L stack 1 OB1 OB 1 操作系统 FC 17 有临时 变量 2 OB1 FC17 FC 20 有临时 变量 OB1 FC20 FC17 3 OB1 FC17 4 FC 20 有临时 变量 OB1 FC20 FC17 5 7 OB1 OB1 FC17 6 局部数据堆栈的占用情况 每个程序处理级(例如OB1 和它的所有嵌套的块) ,占用L stack 的特定区 域。 这个区域有容量限制。例如, CPU 314可使用L stack 中的256 字节, 这意味着OB1 和OB1调用的所有嵌套的块的局部变量,可使用256 字节。 利用“Reference Data”工具可查看程序所占用的局部数据堆栈的字节数。 “故障诊断”一章你会熟悉, 屏幕显示局部数据堆栈总的占用字节数和每次调用所占用的字节数。 操作步骤 在SIMATIC Manager中选中block文件夹,然后选择菜单功能 Options -> Reference Data -> Display -> Program Structure 注意 在程序执行过程中,如果所使用的局部数据超出了最大限额,则CPU进入 Stop 模式,并将错误信息“STOP caused by error when allocating local data”记入 diagnostics buffer(诊断缓冲区)中。

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

块所需要的局部数据区的长度 Right Click 显示所需字节数 在块的属性中,我们可以看到块所需要的局部数据区的字节数。 显示所需字节数 在块的属性中,我们可以看到块所需要的局部数据区的字节数。 操作步骤 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”。

练习: 使用临时变量 替换为临时变量 #Setpoint #Setpoint 到现在的FC 18 • 在自动模式传送的零件一旦它们到达传送带终端既穿过光栅要被计数( 用 变量“DB_Parts”.ACT_Number_of_parts的加法 )。 • 传送的零件(ACT Number of parts)显示在BCD数字显示。 • 多少零件要被传送的设定值可以通过BCD拨轮按钮设定。当给出的零件的 设定值达到时,在传送带终端的“L_ACTUAL=SETPOINT”(红色的LED Q 8.4)上显示。 • 当系统断开(Q 4.1 = ´0 ´)时或当应答“L_ACTUAL=SETPOINT”(红色的LED Q 8.4)信息既通过传送带终端的暂态开关可以复位传送的零件数 (变量"DB_Parts".ACT_Number_of_parts) 。 • 只要“L_ACTUAL=SETPOINT“(红色的LED)信息存在,不可能启动下一传送 功能( 在FC 16中封锁) 。 任务 在FC 18中所编程的功能不变。然而,使用局部、临时变量Setpoint做从BCD 到 INT转换的设定数量的中间存储。 做什么 1. 在FC 18中,声明临时变量Setpoint INT类型。 2. 用新声明的Setpoint变量替代用作中间存储辅助标志。 3. 下装并监视程序。 #Setpoint

示例:用输出 LED故障信息指示 Fault_Signal Acknowledge Stored_Fault Display 要求 解决方案 Flash_Frequency Display R RS Q 举例 根据上述问题, 我们给出可重复使用的逻辑的实际例子。这一结果给出如何创建可分配参数的块并在我们的程序中调用它。 描述 操作面板上的一个LED来指示出现故障 。当故障出现时,LED 以2Hz的频率闪 烁。故障已排除之后,如果按应答按钮,则 LED停止闪烁并熄灭;如果按应答按钮时故障仍然存在,则 LED停止闪烁转换为常亮状态直到故障被排除。已应答的故障排除之后,则 LED熄灭。 程序 对故障信号做RLO边沿检测处理,采用置位指令来将该信号锁存在故障标志位(Stored_Fault)中。在故障应答信号输入后可复位故障标志位。 如果故障标志被置位(且该信息未被应答),则利用上面的逻辑使LED闪烁。 标志位M10.3和故障标志位相与,用来决定LED闪烁。使用硬件组态在CPU中定义标志字节MB 10为时钟标志。 下面的逻辑的作用是,当应答过后故障仍然存在时,令LED常亮。 调用 在我们的程序中调用这一故障子程序多次。上述的功能将用于检测不同故障。注意这样编程可以减少我们的工作。与输入整个逻辑两次相比,我们只须编写子程序一次。然后我们可以调用子程序无数次。 Fault_Signal Edge_Memory P S Fault_Signal Stored_Fault

可以分配参数的块 不可以 分配参数的块 可以分配参数的块 FC 20 的 STL程序 调用FC 20 (e.g. in OB 1) A( A I 1.0 R M 40.0 A I 1.1 FP M 40.1 S M 40.0 A M 40.0 ) A M 10.3 O A I 1.1 AN M 40.0 = Q 5.1 A( A #Acknowledge R #Stored_Fault A #Fault_Signal FP #Edge_Memory S #Stored_Fault A #Stored_Fault ) A #Flash_Freq. O A #Fault_Signal AN #Stored_Fault = #Display I 1.3 Fault_Signal Display Q 5.1 I 1.0 Acknowledge M 10.3 Flash_freq M 40.0 Stored_Fault Edge_Memory M 40.1 形式参数 应用 当需要对程序的某部分频繁调用时,可以使用分配了参数的块,这样做有下列优点: • 程序只需生成一次, 它显著地减少了编程时间。 • 该块只在用户存储器中保存一次,它显著地降低了存储器用量。 • 该块可以被程序任意次调用,每次使用不同的地址 。该块采用形式参数 ( input, output 或 in/out参数)编程,当用户程序调用该块时,要用实际地 址(实际参数)给这些参数赋值。 程序执行 在上例所示的语句表语言易于跟踪程序的执行。上述的 STL程序代码和前例执行相同的故障显示逻辑。语句表编程语言将在高级课中讨论。 当上例所示的块被执行并且语句“A #Acknowledge”被处理时,参数Acknowledge被块调用时给出的实际参数替代。如果输入 I 1.0被给出作为参数Acknowledge的实际参数,于是替代“A #Acknowledge”,在 FC20程序块中所看到的逻辑,语句“A I 1.0”被处理。 参数可赋值 你可以编程 FC 或 FB块为可分配参数的块。你不能编程组织块为可分配参数的块因为它们直接由操作系统调用。由于在用户程序中不出现块调用,不可能传送实际参数。 本例 即使故障显示子程序在控制系统中将被使用两次,你也只需用可传递参数的块FC 20编程一次。 FC 20 被调用两次并且每次被赋值不同的实际地址。 实际参数

定义FC 20形式参数 形式参数 参数类型 定义 使用方法 图形显示 输入参数 in 只能读 在块的左侧 输出参数 out 只能写 在块的右侧 输入/输出 参数 In_out 可读/可写 在块的左侧 形式参数 对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。 参数的类型 在上面的表中,可以看到可用于该块的三种不同的参数类型。编程人员需要选择每个形式参数的声明类型。 ‘in‘声明类型仅用于在子程序中只被指令读的声明类型。 ‘out‘声明类型仅用于在子程序中只被写的参数。注意,既有读访问(被指令 A, O, L查询) 、又有写访问(由指令 S, R, T赋值)的形式参数,必须将它定义为in/out 型参数。 接口 块的接口构成IN, OUT, 和 IN_OUT参数。 RETURN参数是一个定义的、额外的依据IEC 61131-3有特殊名称的参数。该参数仅存在于FC的接口中。 临时变量 – 尽管它列在“接口”下 – 也不是块接口的部件,因为当块调用时它们不可见既在块调用时没有实际参数传送给它。 为声明参数和临时变量,参数或临时变量必须在“接口”中选择(见下图)。然 后,在表右侧,可以编辑名称及数据类型和注释。 以 FC20为例 幻灯片下面的部分,可以看到FC 20 块 “Disturbance Input“ (见前页)的声明表既接口。注意由于形式参数#Report_Memory 和 #Edge_Memory_Bit在FP指令中既要读又要写 ,所以它们被定义为in/out型参数。 注意! 一个块声明的形式参数(IN, OUT 和 IN_OUT, 不包括TEMP) 是它对“外”的接口。也就是,它们是“可见的”或和其他块有关,和调用的块。如果以后通过删除或插入形式参数改变了块的接口,必须刷新调用指令。所有调用该块的块都必须刷 新。

编辑可以分配参数的块 注意 形式参数的名称是用大写还是小写字母都没关系。 PG/PC自动在名称之前加入“#”字符。该字符用于指示该参数是本块的变量声明表中定义的局部变量。 当你以 LAD / FBD写程序时,有可能名称不能在一行中完全显示。这由你如何设定程序编辑器决定(Options -> Customize -> "LAD/FBD" tab -> Address Field Width)。 符号 1. 当你编辑一个块时,如果你使用符号名,编辑器首先搜索块的声明表。 如果那里有该符号名,在它之前加上#字符,在程序中作为局部变量接受。 大写和小写字母可能被修改以匹配在声明表中符号输入的方式。 2. 如果作为局部变量符号没被发现,编辑器在程序的符号表搜索全局符号。 如果符号在那里被发现,符号被放在引号中并在程序中作为全局变量接受。 3. 如果你在符号表中同时也在局部声明表中选择了相同的符号名,编辑器总 是插入局部变量。 然而,如果你想用做全局符号,当你输入时你必须把符号名放在引号中。

调用可以分配参数的块 编程块调用 通过把所需的块的符号拷贝到调用块的代码部分可以编程可分配参数的块的调 用。为此目的拖拽法很好用。在 LAD/FBD编辑器中的“Program Elements” 浏览器的“FC Blocks” 或 “FB Blocks”文件夹找到该符号。被调用的块的形式参数端上自动显示问号 (??.?) ,应在此处输入实际参数。 注 当调用可分配参数的功能( FC) 时,实际参数必须传送给每一个形式参数。 例外: 在图形编程语言 LAD 和 FBD, EN和ENO参数的赋值,由编辑器自动加入,是可选的。 这里不讨论形式参数,而是条件块调用的可能性。 参数赋值 所有的数据类型对应被调用块的形式参数的全局和局部地址可以作为实际参数被传送。 被传送的实际参数可通过绝对地址或通过符号名对应全局符号表中的或调用块的声明表中的。 参数传送 通常,参数的传送也是可能的。也就是,调用块的形式参数作为实际参数传送到被调用块。然而对复杂的数据类型参数,仅有有限的可能性。在高级课中详细讨论。

练习: 编辑可以分配参数的FC块 故障分析的功能 当故障出现时指示灯将开始以2赫兹速率闪烁。当故障被应答时两者之一将出 现。如果故障不再存在该输出将断开或如果它仍然存在则输出将变为稳定光。 任务 将故障显示程序用分配了参数的块FC 20来编写。 FC 20的变量声明表和逻辑代码部分已在上图中给出。 做什么 • 插入FC 20块。 • 如图所示声明形式参数 • 在FC 20 中使用声明的形式参数编写程序 • 保存块并下装到CPU

练习: 调用可以分配参数的FC块 第一次调用FC20时 的参数分配 第二次调用FC20时 的参数分配 任务 两个过程故障(模拟器上的两个开关)要被处理既通过模拟器上的LED显示。 编程两次FC 20的调用并如图所示用实际参数给它赋值参数。 做什么 • 编程FC 20 – 在块Disturbance Evaluation FC 17的两个新程序段中调用 • 保存修改的FC 17并下装到CPU • 监视并测试程序 注 使用硬件组态工具在CPU特性中将标志字节MB10定义为时钟标志字节。你应做存储器复位,下装用HW Config 生成的system data 到CPU ,使位存储器M10.3 闪烁。

功能块 ( FB ) OB 1 DB 2 FB 20 EN Fault_Signal Acknowledge Display Flash_Frequency ENO FB块的变量声明表 FB块的特点 与功能(FC)不同,功能块 (FB) 带有(调用)一个存储区。也就是说,有一个局部数据块被分配给功能块,它被称为背景数据块(instance data block )。 当调用FB时,必须指定背景DB的号码, 该数据块会自动打开。 背景DB可以保存静态变量,这些局部变量只能用于FB块中,并在其变量声明表中定义。当块退出时,它们仍然保持。 扩展地址和结束地址 通过激活该选项,可以选择FB参数和静态变量的特性,它们只与连接过程诊断有关。 参数 当FB块被调用时,实际参数的值被存储在它的背景数据块中。 如果在块调用时,没有实际参数分配给形式参数,在程序执行中将采用上一次存储在背景DB中的参数值。 每次调用FB时可以指定不同的实际参数。 当块退出时,背景数据块中的数据仍然保持。 静态变量 静态局部变量存储不访问功能块外部的块特殊数据。换句话说该变量作为形式参数不传送块的in 或 out 。 FB 的优点 • 当编写FC的程序时,你必须寻找空的标志区或数据区来存储需保持的数据, 并且你自己必须保存它们。而FB的静态变量可由STEP 7的软件来保存。 • 使用静态变量可避免两次分配同一标志地址区或数据区的危险。 • 如果用FB块实现FC20的功能, 并用FB的静态变量“Stored_Fault”和 “Edge_Memory”来代替原来FC20的形式参数“Report memory” 和 "Edge memory bit" ,将可省略两个形式参数,简化了块的调用。

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

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

之后插入/删除块的参数 Save 问题 如果你在程序生成期间或之后调整或增加某个块的接口或代码,可能导致时间标签冲突。反过来,时间标签冲突可能导致在调用的和被调用的或有关的块之间不一致,结果要大幅度的修改。 当一个块已在程序中被调用之后,再增加或删除块的参数,必须更新其他块中的该块的调用。否则,由于在调用时该块新增的参数没有被分配实际参数,则CPU会STOP或者块的功能不能实现。 在本例中,新插入的参数为“Check_lights”,它必须在所有块调用中提供实际参数。 当块的声明表由于插入或删除形式参数被修改之后保存时,将弹出警告信息,提示可能出现的问题。

检查块的一致性 用途 功能Check block consistency -> Compile清楚地显示所有时间标签冲突和块不一致。 在其他的块中已经编程了可分配参数的块的调用之后,当该块的接口被修改时接口冲突出现。块不一致也会出现,例如,地址以符号访问,其后在全局符号表中或在数据块中符号<->绝对地址赋值改变。 如图所示,不能自动显示块的一致性(例如接口冲突)并有符号表示(看在线帮助)。然后使用鼠标右键用相应的编辑器这些块可被用户打开并修改(请看下 页)。 树形显示... 树形显示所选的块文件夹的块的逻辑/接口的依赖既关系。 用View -> Reference Tree / Dependency Tree树形显示既可以显示关联树形又可以显示参照树形。 …作为参照树形 参照树形以从左至右的层次显示所有的块的关联既它们的嵌套。只要用 Reference data Program structure,调用路径从左至右从嵌套深度1开始显示。于是,参照树形给出在该程序执行级中嵌套深度的概况。 ...作为关联树形 关联树形以从左至右的层次显示所有的块的关联既它们的嵌套。在这种显示情况下调用路径不是从嵌套深度1而是从该块开始显示。块文件夹的所有块列在最左一级。下一级(向右)显示关联既该块在那里被调用。只要用 Reference data-Cross reference list ,关联树形提供关于其他块调用每一个块的信息。

调用被修改过的块时应做的更正 单击鼠标右键 刷新调用 在打开的、调用块(图中OB 1)中不一致的块调用被标为红色(图中FB 20) 。 用鼠标右键点击不一致的块调用方框,在接下来的对话框中选择功能 “Update Block Call ”。一个窗口出现,显示出旧的(故障的)和新的(如图带有新增的参数“Check_Lights”)块调用。用 OK确认后,此时可以给这个形式参数“Check_Lights”分配缺少的实际参数。 如果是FB块,将重新生成背景数据块。

练习: 编辑功能块 任务 另一个故障(模拟器上的开关)要被处理。最简单的方法是编程另一次FC 20的调用。 然而,为了使用FB方案的优点,你要编程一个可赋值参数的FB 20处理第三个故障。 静态变量 Edge_Memory 和 Stored_Fault存储在FB的背景DB中。 图中可见FB 20的声明表和程序代码。 做什么 • 在叫做“My Program”的 S7程序中插入 FB 20 • 如图所示声明块的形式参数和静态变量 • 在 FB 20 中编写程序代码。最简单的方法是从已经编程FC 20块拷贝并粘 贴需要的段。 • 保存新块并下装到CPU

练习: 调用功能块并测试 添加 Network 2 & 3 删除 Network 2 任务 在FC 17中的第二次FC 20的调用将被删除。可赋值参数的FB 20将被调用两次,第一次替代 FC 20的第二次调用处理 Fault # 2,第二次处理Fault # 3 。 每次FB 20的调用赋值不同的背景数据块 。 做什么 • 在FC 17中删除第二次FC 20的调用,因为处理 Fault # 2接着加入FB 20 。 • 在FC 17的两个新段中如图所示编程FB 20的两次调用。让编辑器生成 背景DB 2 和 3。 • 此时仅离线保存修改过的FC 17 • 从SIMATIC® Manager先下装生成的背景DB 2 和 3到CPU ,然后下装修改 过的FC 17。 • 测试你的程序的功能。

多重背景模型 多重背景模型 普通背景模型 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:= 第一次调用 FB20 的参数和静态参数 多重背景模型 到目前为止,每次调用一个功能块时都使用不同的背景数据块。 然而数据块的数量有限,为此原因有一种方法,允许多次FB调用都使用同一个背景数据块。 多重背景模型允许多次FB调用都使用同一个背景DB 。 为此需增加一个FB块用来管理背景数据。 针对每次的FB调用 (FB 20), 要先在上层的FB块 (FB 100) 中定义一个静态变量。用块调用Call Dist_1 ,就不须为其指定背景DB了。 上层的FB (FB 100) 被调用时,例如,在OB1中调用它,将只生成一个公用的背景DB (DB 100) 。 注 多重背景数据块将在高级编程课中继续讨论。 DB12 FB20 Call FB20, DB12 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Call Dist_2 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= 第二次调用 FB20 的参数和静态参数

TYPE OF VARIABLE 练习: 识别变量的类型 L #Number_1 T #Maximum_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 有何错误? ....................................................................................................................... .......................................................................................................................

在块调用时使用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或STL编程,当用LAD/FBD调用该块时,EN和ENO参数也被加在块上。 在STL 中,没有EN/ENO参数。然而可以仿效它们。 无论采用何种语言,必须编写程序来检查错误。 互相连接 在LAD/FBD中,几个功能方框可通过EN / ENO参数串联在一起使用 。 例子 ?? . ? FC 1 EN ENO FC 2 FC 3 =

总结: 块的调用 ( 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 无参数 无参数,无静态参数 • UC FC1 • CC FC1 • CALL FC1 • UC FB1 • CC FB1 • CALL FB1, DB2 STL FC1 ( CALL ) DB2 FC1 EN ENO FB1 EN ENO LAD FC1 调用 “CALL”指令用于调用程序块(FC, FB, SFC, SFB)。在图形编程语言 LAD 和 FBD,使用调用方框的 EN输入,块调用可以依靠条件(RLO) 。在STL编程语言块调用是绝对的,而与RLO无关。 如果用“CALL”来调用FB或SFB,则必须指定背景DB 。可以使用块的绝对或符号名。 例如:“CALL FB2, DB2”或“CALL valve, level”。 UC “UC”指令是类型FC或FB的无条件块调用。 UC指令仅允许如果被调用的FC或FB不是参数分配的。在使用 UC调用的FB 中也不能声明静态变量。 CC “CC”指令是类型FC或FB的条件块调用。 CC指令仅允许如果被调用的FC或FB不是参数分配的。在使用 CC调用的FB 中也不能声明静态变量。 注 用UC 和 CC指令的FB调用不能转换为梯形图或功能块图表达。另外,程序编辑器也允许可分配参数的块调用UC 或 CC 。当下装程序时”AREA ERROR when Reading”系统故障会出现。 参数 在块的声明表中声明的形式参数是块的接口。当调用可分配参数的FC时, 实际参数必须传送给每一个形式参数。当调用FB 时参数的传送不是强制的。 静态和临时变量不是参数并且不是块的接口部分。结果,在块调用中没有静态和临时变量的参数传送。 CALL DB2 FC1 EN ENO FB1 EN ENO FBD

练习(选作): 多台设备的风扇监控功能 功能 符号 SIG FC 8 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) 按上图的要求编写带有参数的程序块FC 8,使之成为一个可实现风 扇监控功能的“标准功能”。 (2) 编制程序,对两台设备的风扇进行监控。在OB1中用不同的参数对 FC 8无条件地调用两次,以实现对两台设备的监控功能。两台设备 的实际监控参数如下表所示。 (3)调试程序 B & SIG C FLT 参数 A B C ACKN TIMER_NO TV FLT SIG 设备1 I1.6 I1.5 I1.4 I 0.0 T10 S5T#5S Q5.5 M20.0 设备2 I1.2 I1.1 I1.0 I 0.0 T11 S5T#5S Q5.1 M20.1

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