Download presentation
Presentation is loading. Please wait.
1
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
目录 页码 IEC 1131 标准 SIMATIC 管理器下的项目结构 STEP7的块 块的组成部分 块的结构 结构化编程 利用局部数据进行控制 局部变量 临时变量 局部数据堆栈的大小 … 块所需要的局部数据区的长度 程序所占用的局部数据区的总长度 练习1.1: 使用临时变量 ………… 示例:故障信息指示 可以分配参数的块 定义形式参数 编辑一个可分配参数的块 调用一个分配了参数的块 在块调用时使用EN/ENO参数 ……… 练习1.2-3: FC块 FB块 用FB实现的故障信息显示 …… 生成背景数据块 … 多重背景模型 练习1.4-5: FB块 插入/删除块的参数可能遇到的问题 …………… 调用被修改过的块时应做的更正 …… 练习1.6-7:风扇监控功能的扩展 练习1.8: 识别变量的类型 … 34 总结: 块的调用 …………………
2
第三部分:编程语言 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 1/2的补充标准。并介绍了通讯模块以及标准读写访问操作。 Modul: IEC_T1D.
3
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.
4
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 图
5
STEP7的块 块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。
块 块是用户程序中真正有用的部分。它们在功能,使用方法和结 构上各不相同。块表示了程序的执行代码。 STEP 7环境支持下列的代码: 逻辑块: OB - 组织块 FC - 功能 FB - 功能块 SFC - 系统功能 SFB - 系统功能块 数据块: DB - 数据块 SDB - 系统数据块 用户自定义的数据类型: UDT VAT VAT(用于监视/修改变量的变量表)不是块,但是存储在用户程 序中。
6
块的组成部分 变量声明表 代码部分 在你打开一个块进行编辑或查看时,程序编辑器中将出现两个窗
口。一个是属于块的变量声明表,在另一个窗口的则为生成实际 程序的指令部分。 变量声明表 这个表是用来说明块的局部变量的名字和大小。这些变量是与由 系统预定的或由其它模块传递来的值有关的变量。经声明后的变 量分配局部内存给逻辑块。同时也为你指定给功能块的每一个背 景数据块提供数据结构。 局部数据 局部符号在块的声明部分中定义。你可以在不同的块中重复使用 同一个符号,因为它们在每一个块中仅有效一次。 局部符号能被定义为参数,块变量和跳转标志。且不需要符号表。 指令部分 在指令部分,你可以建立你的逻辑序列。为做到这一点,利用梯 形图和语句表,你可以形成网络或回路。在你输入一条指令并指 定一个地址后,程序编译器进行一次语法校验并将不正确的输入 用红色的斜体显示出来。
7
块的结构 块的首部 (36字节) 块体 变量声明部分 和 程序部分 或 数据 压缩的接口描述 块的首部 一个块的首部包含下列数据:
块的首部 一个块的首部包含下列数据: - 同步采样 - 属性(用户功能块或标准功能块) - 生成语言/块类型 - 块的标号 - 用字节表示的总的块长度 - 口令(预留) - 保护级别(预留) - 时间标记(产生的时刻和上一次修改的时间) - 局部数据的数量和写保护 - 当前版本号等 块体 块体由声明部分和代码块中的程序部分构成,或由数据块中 的数据构成。 调用接口和所有的块变量都在声明部分中定义。程序部分包 含真正的程序代码。(MC7指令) 压缩接口说明 压缩接口说明包括在说明部分中定义的参数:输入参数,输 出参数,输入/输出参数,局部块参数以及临时块参数。对 于数据块,接口声明包括数据类型和格式 ( 例如,整型, 实型等)。这就使得在任何时候都能正确地以所要求的数据 类型进行显示。 压缩的接口描述
8
结构化编程 OB 1 电机 1 FC 1 电机 2 FC 1 电机 3 FC 1 什是结构化编程 ? 结构化程序把过程要求的类似或相关的功能进行分类,并试图提供可以用于几个 任务的通用解决方案。向指令块提供有关信息(以参数形式),结构化程序能够重复 利用这些通用模块。 这些模块的例子包括: - 传送带系统中所有交流电机的通用逻辑控制的块 - 装配线机械中所有电磁线圈的通用逻辑控制的块 - 造纸机器中所有驱动装置的通用逻辑控制的块 它如何执行? OB1 (或其他块)中的程序调用这些通用执行块。和模块化编程不同,通用的数据 和代码可以共享。 优点和缺点是什么? 不需要重复这些指令,然后对不同的设备代入不同的地址,可以在一个块中写程 序,用程序把参数(例如:要操作的设备或数据的地址)传给程序块。这样,可 以写一个通用模块,更多的设备或过程可以使用此模块。当使用结构化编程方 法时,需要管理程序存储和使用数据。
9
利用局部数据进行控制 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 带有实际参数 的调用块 局部声明区 (定义形式参数) 被调用块的代码 部分,使用来自 局部内存区的值
10
局部变量 局部变量 / 数据 (只在一个块中有效) 全局变量/数据 (在全部程序中有效) • PII / PIQ • I/ O
• M / T / C • DB areas 临时变量 • 当相关块执行完毕后被清除 • 临时存储在 L stack中 • 可在下列块中使用 OBs / FCs / FBs 静态变量 •当相关块执行完毕后仍然 保留 • 永久存储在DBs中 • 只能在FBs中使用 绝对地址 访问方式 符号地址 概述 到目前为止, 我们使用实际参数来访问瓶子灌装生产线的输入和输出,块不能被分配参数,这样你编辑的程序只能用于特定的设备。 但是,在很多情况下一个大的程序要多次调用某一个功能,这时应建立通用的可分配参数的块(FC, FB)。这些块的输入输出使用形式参数,当调用时赋给实际参数。 上述两种块的区别在于块调用时的是否有参数的传递,其内部功能没有变化。 局部变量 到目前为止,我们使用全局变量(标志位和数据块)来存储数据,例如生产数据。在这章中我们将学习如何利用局部变量来存储数据。 临时变量 临时变量是一种在块执行时,用来暂时存储数据的变量。他们可以被用于所有的块中。 静态变量 如果有一些变量在块调用结束后还需保持原值,他们必须被存储为静态变量,静态变量只能被用于FB块中。
11
临时变量 概述 临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。这些临时数据存储在 L stack (局部数据堆栈)中。 定义方法 临时变量是在块的变量声明表中定义的,在“temp”行中输入变量名和数据类型,注意临时变量不能赋予初值。当块保存后,“Address”栏中将显示其在L stack 中的位置。 访问方法 Network 1为一个用符号地址访问临时变量的例子。减运算的结果被存储在临时变量“result”中。当然,也可以采用绝对地址来访问临时变量 (T LW0),然而,为了使程序更加易读,最好不要采用该方式。 注意 程序编辑器可以自动地在局部变量名前加上# 号来标识它们,局部变量只能在变量表中对它们定义过的块中使用。
12
局部数据堆栈的大小 总容量: 1.5 Kbyte (CPU 313..316) 执行的程序 对于 S7-300: 优先级 局部堆栈大小
启动程序 (只执行一次) 27 256 bytes 循环扫描程序 1 256 bytes 12 3 2 时间中断 日时钟中断 延时处理中断 循环处理中断 局部数据堆栈 局部数据堆栈(L stack)是用来存储临时变量的内存区域。 局部数据堆栈的大小 当操作系统执行一个OB时(不论优先级如何),将打开一个256 字节大小的局部堆栈区,供该OB及其中所调用的块使用 。 CPUs中局部堆栈区的总容量为1536字节 (1.5kByte)。 OB的优先级 S7-300中共有8个优先级,同时激活的优先级不能超过6个。详细介绍见 “组织块”一章。 S7-400 对于 S7-400 CPUs, 可以通过组态工具来定义每一个优先级所对应的局部堆栈的大小。还可以不选无用的优先级,为其他优先级保留更多的局部数据。 循环扫描中的错误处理中断 256 bytes 16 28 26 事件驱动中断 硬件中断 启动过程中的错误处理中断
13
块所需要的局部数据区的长度 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”。
14
程序所占用的局部数据区的总长度 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(诊断缓冲区)中。
15
练习1.1: 使用临时变量 替换为临时变量 QW6 目的 了解如何使用临时变量。
目的 了解如何使用临时变量。 要求 在S7 程序“Fill”的FC 19块中,用临时变量代替标志字来暂存数据。 在上图LAD或 FBD形式的程序中, 标志字被用来连接除法器的输出和数制转换器的输入。 如果你用STL来写程序则不需要标志字,直接插入临时变量来存储中间结果。 步骤 • 打开S7 程序“FILL”中的FC 19 。 • 在变量声明表中定义一个临时变量 “Packages”,其类型为“Integer”。 • 在程序里将包装的数量保存在临时变量“packages”中。 • 将修改后的程序下装并调试。
16
示例:故障信息指示 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常亮。
17
可以分配参数的块 不可以 分配参数的块 可以分配参数的块 程序 调用 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次。 实际参数
18
定义形式参数 形式参数 参数类型 定义 使用方法 图形显示 FC 20 的变量声明表 输入参数 in 只能读 在块的左侧 输出参数 out
只能写 在块的右侧 输入/输出 参数 In_out 可读/可写 在块的左侧 FC 20 的变量声明表 形式参数 对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。 参数的类型 在上面的表中,列举了三种类型的参数及定义方法。 注意,当需对某个参数做读、写访问时,必须将它定义为in/out 型参数。 以 FC20为例 幻灯片下面的表为该块的变量声明表。因为对故障信息标志位既要读(扫描)又要写 (set/reset),所以它被定义为in/out型参数。 说明 在最初的声明表中,每一种参数只占一行。如果需要定义多个参数,可以用“Return”键来增加新的参数定义行。另一种方法是:选中一个定义行后,用菜单功能 Insert -> Declaration Row -> Before Selection / After Selection 来插入一个新的参数定义行。 注意! 当块已被调用后,再插入或删除定义行,必须重新编写调用指令。
19
编辑一个可分配参数的块 对于无参数分配的块,此处可能是: • 绝对地址: I1.3 • 符号地址: “End_left”
说明 形式参数名称用大、小写字母没有区别。编程器可自动地在其前面加“#”号,以表示该参数为局部变量,是在块的变量声明表中定义的。 当采用LAD / FBD 语言编写程序时,参数的名称在一行中可能显示不全。这取决于程序编辑器的习惯设置 (Options -> Customize -> "LAD/FBD" tab -> Width of address field)。 符号名 1. 如果在编程一个块时使用符号名,编辑器将在该块的变量声明表查找该符号 名。 如果该符号名存在,编辑器将把它当作局部变量,并在符号名前加 “#”号。 2. 如果它不属于局部变量,则编辑器将在全局符号表中搜索。如果找到该符号 名,编辑器将把它当作全局变量,并在符号名上加引号。 3. 如果在全局变量表和变量声明表中使用了相同的符号名,编辑器将始终把它 当作局部变量。然而,如果输入该符号名时加了引号,则可成为全局变量。 对于无参数分配的块,此处可能是: • 绝对地址: I1.3 • 符号地址: “End_left”
20
调用一个分配了参数的块 绝对的 寻址方式 符号的 符号 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 符号 局部符号 -->形式参数
21
在块调用时使用EN/ENO参数 LAD/FBD STL FC 1 无条件调用 ?? . ? EN ENO CALL FC 1 NOP 0
A I JNB _ CALL FC _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 =
22
练习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
23
练习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
24
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”来代替原来的形式参数,将可省略两个形式参数,简化了块 的调用。
25
用FB实现的故障信息显示 FB的声明表 背景数据块
故障信息显示 在前面的练习中,我们编写了一个分配了参数的块FC 20来显示故障信息。 用FB块实现该功能时,采用静态变量来替代FC 20 中用来保存信息和检测边沿的标志位,这些静态变量存储在该FB的背景数据块中。 背景数据块的结构 当参照一个FB 生成一个数据块时,STEP7将参照该FB的变量声明表生成数据块的结构。 数据块保存之后,将生成一个背景数据块。
26
生成背景数据块 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块被修改后 (添加参数或静态变量), 必须重新生成背景数据块。
27
多重背景模型 多重背景模型 普通背景模型 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
28
练习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
29
练习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块(见第二章)
30
插入/删除块的参数可能遇到的问题 Save
可能遇到的问题 当块已在程序中被调用之后,再增加块的参数,必须更新块的调用指令。 否则,在程序执行中,由于该块新增的参数没有被分配实际参数,则CPU会停机或者块的功能不能实现。 在本例中,新插入的参数为“Check_lights”。 更新块的调用 当块的声明表被修改之后保存时,将弹出警告信息,提示可能出现的问题。
31
调用被修改过的块时应做的更正 当调用块被打开时: 单击鼠标右键
对调用指令的更正 当打开调用块时,将弹出如下信息:“Time stamp conflict with at least one block call”,且调用语句变为红色。用鼠标右键点击调用方框并选择菜单功能 “Update Call”。之后调用方框被重新显示,在本例中,将包含新增的输入参数“Check_light”。此时可以给这个新参数分配地址,如果是FB块,将重新生成背景数据块。
32
练习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
33
练习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
34
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 有何错误?
35
总结: 块的调用 ( 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
Similar presentations