Download presentation
Presentation is loading. Please wait.
Published byRadomír Král Modified 5年之前
1
功能和功能块 FC FB DB 目录 页码 目标 …………… 局部变量 临时变量 程序所占用的局部数据区的总长度 局部数据堆栈的大小 … 块所需要的局部数据区的长度 练习: 使用临时变量 ………… …… 示例:用输出LED故障信息指示 可以分配参数的块 定义FC 20形式参数 编辑可以分配参数的块 … 调用可以分配参数的块 … 练习:编辑可以分配参数的FC块 练习:调用可以分配参数的FC块 功能块(FB) 用功能块实现的故障信息显示 …… 生成背景数据块 … 之后插入/删除块的参数 …………… …………… 检查块的一致性 … 调用被修改过的块时应做的更正 …… 练习:编辑功能块 … 练习:调用功能块并测试 多重背景模型 练习1.8: 识别变量的类型 … 25 在块调用时使用EN/ENO参数 ……… 总结: 块的调用 ………………… 练习(选作):多台设备的风扇监控功能 练习(选作):风扇监控功能的扩展
2
目标 学习了本章之后,你将 ... ... 熟悉临时变量的用途 ... 能够声明临时变量并在程序中使用 ... 熟悉可赋值参数的块的用途
... 熟悉临时变量的用途 ... 能够声明临时变量并在程序中使用 ... 熟悉可赋值参数的块的用途 ... 能够编程可赋值参数的功能和它们的调用 ... 了解功能(FC)和功能块(FB)之间的差别 ... 熟悉背景模型和多重背景模型 ... 熟悉静态变量的用途 ... 能够声明静态变量并在程序中使用 ... 能够编程可赋值参数的功能块和它们的调用
3
局部变量 局部变量 / 数据 (只在一个块中有效) 全局变量/数据 (在全部程序中有效) • PII / PIQ • I/ O
• M / T / C • DB 区 临时变量 • 当相关块执行完毕后被清除 • 临时存储在 L stack中 • 可在下列块中使用 OB / FC / FB 静态变量 •当相关块执行完毕后仍然 保留 • 永久存储在DB中 • 只能在FB中使用 绝对地址 访问方式 符号地址 概述 到目前为止, 我们程序的输入和输出直接使用实际赋值来编码,这种编程地址区固定,于是它不适合重复的处理 。 块不能被分配参数,这种程序只能用于没有重复的处理的特定的设备。 经常出现的功能最好做成通用的可分配参数的块(功能FC,功能块FB)。这些块使用符号的输入输出参数(局部符号名),当调用时赋给实际参数。 当调用功能或功能块时必须赋值这些操作数。 FC/FB的程序逻辑保持不变并且可以多次使用这些逻辑。 局部变量 到目前为止,我们使用全局变量(标志位和数据块)来存储数据,例如生产数据。在这章中我们将学习如何利用局部变量来存储数据。 局部变量只能由生成它的块来读。由此,局部变量不能用作不同程序块之间的数据接口。 有两种局部变量: 临时和静态 临时变量 临时变量是一种在块执行时,用来暂时存储数据的变量。他们可以被用于所有的块中(OB, FC, FB) 。 静态变量 如果有一些变量在块调用结束后还需保持原值,他们必须被存储为静态变量,静态变量只能被用于FB块中。赋值给FB的背景数据块用作静态变量的存储区。
4
临时变量 概述 临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。
这些临时数据存储在 L stack (局部数据堆栈)中。 L stack 是CPU 中单独的存储器区。 定义方法 在一个块中使用临时变量之前,必须在块的变量声明表中定义,在“temp”行中输入变量名和数据类型,临时变量不能赋予初值。 当完成一“temp”行后, 按“回车”键 , 一个新的“temp”行添加在其后。 L stack的绝对地址由系统赋值并在“Address”栏中显示。 访问 Network 1为一个用符号地址访问临时变量的例子。 减运算的结果被存储在临时变量 #result 中。当然,也可以采用绝对地址来访问临时变量 (T LW0),然而,因为程序更加难读,最好不要采用该方式。 注意 # 不同于来自符号表的显示在程序中带有引号的全局符号(“symbol name”),局部符号之前有一#( #result) 。当没使用 “ ” 且在块的变量声明表中有这个符号名,编辑器自动地在符号前加上# 号。编辑器在检查全局符号表之前先检查块的变量声明 表。
5
程序所占用的局部数据区的总长度 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(诊断缓冲区)中。
6
局部数据堆栈的大小 总容量: 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 字节。 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 事件驱动中断 硬件中断 启动过程中的错误处理中断
7
块所需要的局部数据区的长度 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”。
8
练习: 使用临时变量 替换为临时变量 #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
9
示例:用输出 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
10
可以分配参数的块 不可以 分配参数的块 可以分配参数的块 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 被调用两次并且每次被赋值不同的实际地址。 实际参数
11
定义FC 20形式参数 形式参数 参数类型 定义 使用方法 图形显示 输入参数 in 只能读 在块的左侧 输出参数 out 只能写
在块的右侧 输入/输出 参数 In_out 可读/可写 在块的左侧 形式参数 对于可传递参数的块,在编写程序之前,必须在变量声明表中定义形式参数。 参数的类型 在上面的表中,可以看到可用于该块的三种不同的参数类型。编程人员需要选择每个形式参数的声明类型。 ‘in‘声明类型仅用于在子程序中只被指令读的声明类型。 ‘out‘声明类型仅用于在子程序中只被写的参数。注意,既有读访问(被指令 A, O, L查询) 、又有写访问(由指令 S, R, T赋值)的形式参数,必须将它定义为in/out 型参数。 接口 块的接口构成IN, OUT, 和 IN_OUT参数。 RETURN参数是一个定义的、额外的依据IEC 有特殊名称的参数。该参数仅存在于FC的接口中。 临时变量 – 尽管它列在“接口”下 – 也不是块接口的部件,因为当块调用时它们不可见既在块调用时没有实际参数传送给它。 为声明参数和临时变量,参数或临时变量必须在“接口”中选择(见下图)。然 后,在表右侧,可以编辑名称及数据类型和注释。 以 FC20为例 幻灯片下面的部分,可以看到FC 20 块 “Disturbance Input“ (见前页)的声明表既接口。注意由于形式参数#Report_Memory 和 #Edge_Memory_Bit在FP指令中既要读又要写 ,所以它们被定义为in/out型参数。 注意! 一个块声明的形式参数(IN, OUT 和 IN_OUT, 不包括TEMP) 是它对“外”的接口。也就是,它们是“可见的”或和其他块有关,和调用的块。如果以后通过删除或插入形式参数改变了块的接口,必须刷新调用指令。所有调用该块的块都必须刷 新。
12
编辑可以分配参数的块 注意 形式参数的名称是用大写还是小写字母都没关系。 PG/PC自动在名称之前加入“#”字符。该字符用于指示该参数是本块的变量声明表中定义的局部变量。 当你以 LAD / FBD写程序时,有可能名称不能在一行中完全显示。这由你如何设定程序编辑器决定(Options -> Customize -> "LAD/FBD" tab -> Address Field Width)。 符号 1. 当你编辑一个块时,如果你使用符号名,编辑器首先搜索块的声明表。 如果那里有该符号名,在它之前加上#字符,在程序中作为局部变量接受。 大写和小写字母可能被修改以匹配在声明表中符号输入的方式。 2. 如果作为局部变量符号没被发现,编辑器在程序的符号表搜索全局符号。 如果符号在那里被发现,符号被放在引号中并在程序中作为全局变量接受。 3. 如果你在符号表中同时也在局部声明表中选择了相同的符号名,编辑器总 是插入局部变量。 然而,如果你想用做全局符号,当你输入时你必须把符号名放在引号中。
13
调用可以分配参数的块 编程块调用 通过把所需的块的符号拷贝到调用块的代码部分可以编程可分配参数的块的调 用。为此目的拖拽法很好用。在 LAD/FBD编辑器中的“Program Elements” 浏览器的“FC Blocks” 或 “FB Blocks”文件夹找到该符号。被调用的块的形式参数端上自动显示问号 (??.?) ,应在此处输入实际参数。 注 当调用可分配参数的功能( FC) 时,实际参数必须传送给每一个形式参数。 例外: 在图形编程语言 LAD 和 FBD, EN和ENO参数的赋值,由编辑器自动加入,是可选的。 这里不讨论形式参数,而是条件块调用的可能性。 参数赋值 所有的数据类型对应被调用块的形式参数的全局和局部地址可以作为实际参数被传送。 被传送的实际参数可通过绝对地址或通过符号名对应全局符号表中的或调用块的声明表中的。 参数传送 通常,参数的传送也是可能的。也就是,调用块的形式参数作为实际参数传送到被调用块。然而对复杂的数据类型参数,仅有有限的可能性。在高级课中详细讨论。
14
练习: 编辑可以分配参数的FC块 故障分析的功能 当故障出现时指示灯将开始以2赫兹速率闪烁。当故障被应答时两者之一将出 现。如果故障不再存在该输出将断开或如果它仍然存在则输出将变为稳定光。 任务 将故障显示程序用分配了参数的块FC 20来编写。 FC 20的变量声明表和逻辑代码部分已在上图中给出。 做什么 • 插入FC 20块。 • 如图所示声明形式参数 • 在FC 20 中使用声明的形式参数编写程序 • 保存块并下装到CPU
15
练习: 调用可以分配参数的FC块 第一次调用FC20时 的参数分配 第二次调用FC20时 的参数分配
任务 两个过程故障(模拟器上的两个开关)要被处理既通过模拟器上的LED显示。 编程两次FC 20的调用并如图所示用实际参数给它赋值参数。 做什么 • 编程FC 20 – 在块Disturbance Evaluation FC 17的两个新程序段中调用 • 保存修改的FC 17并下装到CPU • 监视并测试程序 注 使用硬件组态工具在CPU特性中将标志字节MB10定义为时钟标志字节。你应做存储器复位,下装用HW Config 生成的system data 到CPU ,使位存储器M10.3 闪烁。
16
功能块 ( 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" ,将可省略两个形式参数,简化了块的调用。
17
用功能块实现的故障信息显示 FB的声明表 背景数据块
信息显示 在前面的练习中,你编写了一个分配了参数的块FC 20来显示故障信息。 用FB块实现该功能时,采用静态变量来替代FC 20 中用来保存信息和检测边沿的标志位,这些静态变量存储在该FB的背景DB中。 背景数据块的结构 当参照一个FB 生成一个数据块时,STEP7使用该FB的变量声明表的结构生成数据块的数据结构。 数据块保存之后,将生成一个数据块并可用作背景数据块。 背景数据块
18
生成背景数据块 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块被修改后 (添加参数或静态变量), 必须重新生成背景数据块。
19
之后插入/删除块的参数 Save 问题 如果你在程序生成期间或之后调整或增加某个块的接口或代码,可能导致时间标签冲突。反过来,时间标签冲突可能导致在调用的和被调用的或有关的块之间不一致,结果要大幅度的修改。 当一个块已在程序中被调用之后,再增加或删除块的参数,必须更新其他块中的该块的调用。否则,由于在调用时该块新增的参数没有被分配实际参数,则CPU会STOP或者块的功能不能实现。 在本例中,新插入的参数为“Check_lights”,它必须在所有块调用中提供实际参数。 当块的声明表由于插入或删除形式参数被修改之后保存时,将弹出警告信息,提示可能出现的问题。
20
检查块的一致性 用途 功能Check block consistency -> Compile清楚地显示所有时间标签冲突和块不一致。
在其他的块中已经编程了可分配参数的块的调用之后,当该块的接口被修改时接口冲突出现。块不一致也会出现,例如,地址以符号访问,其后在全局符号表中或在数据块中符号<->绝对地址赋值改变。 如图所示,不能自动显示块的一致性(例如接口冲突)并有符号表示(看在线帮助)。然后使用鼠标右键用相应的编辑器这些块可被用户打开并修改(请看下 页)。 树形显示... 树形显示所选的块文件夹的块的逻辑/接口的依赖既关系。 用View -> Reference Tree / Dependency Tree树形显示既可以显示关联树形又可以显示参照树形。 …作为参照树形 参照树形以从左至右的层次显示所有的块的关联既它们的嵌套。只要用 Reference data Program structure,调用路径从左至右从嵌套深度1开始显示。于是,参照树形给出在该程序执行级中嵌套深度的概况。 ...作为关联树形 关联树形以从左至右的层次显示所有的块的关联既它们的嵌套。在这种显示情况下调用路径不是从嵌套深度1而是从该块开始显示。块文件夹的所有块列在最左一级。下一级(向右)显示关联既该块在那里被调用。只要用 Reference data-Cross reference list ,关联树形提供关于其他块调用每一个块的信息。
21
调用被修改过的块时应做的更正 单击鼠标右键 刷新调用 在打开的、调用块(图中OB 1)中不一致的块调用被标为红色(图中FB 20) 。
用鼠标右键点击不一致的块调用方框,在接下来的对话框中选择功能 “Update Block Call ”。一个窗口出现,显示出旧的(故障的)和新的(如图带有新增的参数“Check_Lights”)块调用。用 OK确认后,此时可以给这个形式参数“Check_Lights”分配缺少的实际参数。 如果是FB块,将重新生成背景数据块。
22
练习: 编辑功能块 任务 另一个故障(模拟器上的开关)要被处理。最简单的方法是编程另一次FC 20的调用。
然而,为了使用FB方案的优点,你要编程一个可赋值参数的FB 20处理第三个故障。 静态变量 Edge_Memory 和 Stored_Fault存储在FB的背景DB中。 图中可见FB 20的声明表和程序代码。 做什么 • 在叫做“My Program”的 S7程序中插入 FB 20 • 如图所示声明块的形式参数和静态变量 • 在 FB 20 中编写程序代码。最简单的方法是从已经编程FC 20块拷贝并粘 贴需要的段。 • 保存新块并下装到CPU
23
练习: 调用功能块并测试 添加 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。 • 测试你的程序的功能。
24
多重背景模型 多重背景模型 普通背景模型 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 的参数和静态参数
25
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 有何错误?
26
在块调用时使用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或STL编程,当用LAD/FBD调用该块时,EN和ENO参数也被加在块上。 在STL 中,没有EN/ENO参数。然而可以仿效它们。 无论采用何种语言,必须编写程序来检查错误。 互相连接 在LAD/FBD中,几个功能方框可通过EN / ENO参数串联在一起使用 。 例子 ?? . ? FC 1 EN ENO FC 2 FC 3 =
27
总结: 块的调用 ( 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
28
练习(选作): 多台设备的风扇监控功能 功能 符号 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
29
练习(选作): 风扇监控功能的扩展 功能 符号 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
Similar presentations