1、西门子 S7-300 中 FB 功能块的使用方法:1.创建功能块 FB1 准备完成如下功能:将“整型”变量转换成“ 实型”变量2.打开功能块 FB1 3.在功能块 FB1中添加入口参数、出口参数、静态变量 入口参数IN0 - 整型 (INT) 出口参数OUT1 - 实型 (REAL) 静态变量STAT2 - 整型 (INT) 局部变量TEMP3 - 长整型(DINT) 4.创建背景数据块 DB2 5.打开 DB2背景数据块,可以看到系统默认建立了三个数据 IN0 - 入口参数(整型) OUT1 - 出口参数(实型) STAT2- 静态变量(整型) 6.打开 FB1功能块,编写如下代码,实现将“
2、整型”变量转换成“实型”变量 同时再编写一段静态变量自加 1代码 7.打开 OB1主程序,添加 FB1功能块 如何确定程序参数类型的块编号并传送给 FC ?介绍使用以下程序代码可确定参数类型(BLOCK_FC, BLOCK_FB, TIMER or COUNTER)的编号。 例 1 :FB 块FB1 变量声明中定义了“ Timer” 类型的变量“ Time_1” ,在 FB2 中调用 FB1,将定时器“T5”传递给变量“ Time_1”。如图 01 所示程序代码中数值 5 表示“T5” 。 图. 01 例 2 FCFC1 变量声明中定义了“ Timer” 类型的变量“ Time_1” ,在 F
3、C2 中调用 FC1,将定时器“T8”传递给变量“ Time_1”。如图 02 所示程序代码中数值 8 表示“T8” 。 图. 02 在使用多重实例时,需要在图 01 所示程序中增加以下代码: TAR2 /多重实例偏移地址LAR1 P#Time_1+AR1 /多重实例偏移地址与当前地址相加L WAR1,P#0.0T MW00 “BLOCK_DB”类型参数在调用 FC 时不可以直接传送给 FC 。如果在调用功能时试图使用此参数类型,将产生如下的错误消息: “非法的参数传输” “BLOCK_DB”类型参数仅在 FB 被调用(从一个 FB 或 FC 中)时可被传送。 “BLOCK_DB”类型参数不可
4、以在 FC 被调用(从一个 FB 或 FC 中)时可被传送。相关详细信息可参考 STEP7 在线帮助中“合法的传输参数类型”。 然而,如果希望将 BLOCK_DB 参数类型传送给 FC, DB 块的编号可以通过基本数据类型(例如 WORD)传送。 在下面的例子中,FB100 拥有一个“BLOCK_DB” 的输入参数类型。为了在调用 FC101 时将参数传送给它,“BLOCK_DB”中的 DB 块编号被传送给 WORD 临时变量(DB_No)。当 FC 被调用,数据块序号以一个 WORD 参数类型替代 BLOCK_DB 参数类型。 图. 03 如果 FB 的接口参数能被定义成 WORD 参数类型
5、来传送 DB 块编号,当 FC 被调用时,此参数可以被直接传送给 FC。 如何生成和更新多重背景?显示订货号 说明: 如果在结构化编程时经常使用功能块,那么在每次调用 FB 时都要为其指定一个单独的背景数据块。对于非常小的 FB, 它的背景数据块经常由很少的几个字组成。当频繁调用和指定背景数据块给这些小的 FB 时,程序会变得非常不清晰,或者 DB 块的数量会达到 CPU 所支持的最大数量。 由于一个背景数据块可以长于 FB 实际需要的长度,因此多个背景数据块可以合并成一个多重背景。但是,这种合并必须在一个 FB 中通过编程完成。 1. 表 1:编程多重背景和更新修改过的背景 2. 表 2:
6、对已经存在的 FB 多重背景能力的后续声明表 1:编程多重背景和更新修改过的背景步骤过程:1 在 SIMATIC Manager 中,打开你希望生成多重背景的 FB。在静态变量定义部分,输入多重背景的名字,数据类型为 FB 或 SFB。 图 12 在程序中调用多重背景,可以在多重背景中的目录中选择托拽它到 NETWORK 中,也可以用 CALL 指令 调用它。 图 2 在 STEP 7 V5.4 SP2 中请注意: 如果在 LAD/FBD 编辑器的目录视图中多重背景未被列出,推荐在静态变量声明中先插入一个功能块,然后再删除它。这样多重背景就再次可以被选择。3 现在设置程序块的输入和输出并保存。
7、就可以在程序(例如 OB1)中使用多重背景来调用 FB。创建一个背景数据块以供监控。 注意:当生成多重背景时,如其在 FB 中作为一个多重背景被调用,注意要首先生成它,然后再指定一个多重背景调用。如果不遵从这个顺序,程序中将会出现不一致的情况,这种不一致的情况也有可能在修改多重背景后出现。4 一旦修改过了多重背景,并打开调用它的功能块。当功能块被打开时,会出现一个消息显示在 FB 接口声明中有一个 UDT 或本地标签的被修改,并显示在功能块调用中至少有一个时间标签冲突。确认此信息,修改过的背景调用在 LAD/STL/FBD 编辑器中将会以亮红色显示。 为了更新功能块调用,右击功能块,然后在弹出
8、菜单中选择“Update Block Call.”。 图 35 在后续的对话框中,点击 OK 来执行接口更新。 图 4 在 STEP 7 V5.3 中的注意事项: 当尝试通过“File Check and Update Accesses”来更新程序块调用时, STEP7 V5.3 不能发现变量间的唯一分配,调用还是保持红颜色,也无法通过“Edit Call Update”改正调用错误。更新调用的唯一办法是删除调用,在声明中更新接口,然后再以多重背景方式调用功能块。如果已经删除了 FB 接口中的变量,应该通过“Edit Call Update”来改正所有的多重背景调用,而不需使用前面的“Chec
9、k and Update Accesses”功能。一旦已经更新了这些多重背景,就又可以与平时一样使用“Check and Update Accesses”功能了。6 推荐在更新功能块调用后进行一致性检查。在 SIMATIC Manager 中,右击 S7 program 文件夹,选择“Check block consistency.”功能,系统会显示 S7 程序的结构。 通过工具栏中的第二个按钮或者“Program Compile All”功能编译程序。在编译后,STEP 7 程序一致性将统一。 图 5当新生成一个新的功能块,在功能块属性中多重背景功能默认被选择(图 6)。也可以改变此设置:
10、图 6 一旦已经生成了功能块,多重背景功能就不可以被重新设置,是否具有多重背景的属性只可以显示,除非按照一个冗长的过程来修改它。 表 2 描述了如何声明一个已经生成的 FB 是否具有多重背景的能力:步骤过程:1 为了声明一个已经生成的 FB 是否具有多重背景的能力,打开 LAD/STD/FBD 编辑器,通过“File Generate source.”在对话框中生成一个 FB 的源文件。在后续的对话框中选择项目并存储源文件到 S7 程序的源文件目录。2 在“Generate source ”对话框中(图),在左边列表中选择你希望使能或取消多重背景能力的功能块,然后点击箭头将其添加到右边的列表中
11、。点击“OK”关闭对话框。 图 73 关闭 LAD/FBD/STL 编辑器,打开在 SIMATIC Manager 生成的源文件。多重背景的能力依赖于在“Version : 0.1”后面输入的代码。 图 8 如果希望 FB 具备多重背景的能力,删除“CODE_VERSION1”属性。 如果希望 FB 不具备多重背景的能力,按照图 8 中添加“CODE_VERSION1”属性。保存并编译源文件,现在功能块即被使能或取消了多重背景的能力。4 在使能或取消了多重背景能力之后,现在不得不重新编译所有的在 FB ,为了这个工作,我们推荐执行一致性检查(见表 1,步骤 6)数据块初始值与实际值的含义显示订
12、货号 描述在数据块的变量声明表中可以定义变量的名称、数据类型、注释和变量初始值。初始值为纯粹的组态值,当由 UDT 生成数据块或在全局数据块中生成新变量时,组态的初始值被用作为实际值。 可以通过菜单命令 “View Data view” 来查看实际值。 初始值对于数据块或新声明的变量数据块来说,组态的有效次数仅为一次。如果变量已经存在,实际值将不会随着初始值的变化而发生改变。对于 CPU 来说,操作的数值为实际值,初始值虽也可以下载到 CPU 中并可在线监控,但不会被 CPU 采用。 有以下两种方法可以将初始值传送给 CPU 作为实际值: 1. 切换到数据浏览状态 “View Data vie
13、w”,在“Actual value” 栏输入新的初始值。 2. 进入声明浏览状态 “View Declaration view ”,在“Actual value” 栏输入新的初始值;然后,切换到“Data view” 状态,执行菜单命令 “Edit Initialize Data Block”将所有“Intial value”栏的数值传送至 “Actual value”栏。然后将数据块下载至 CPU 中。 由于初始值仅使用一次,因而没有必要将实际值装载至初始值, 如装载“Actual value” 栏到“Initial value”栏。 STEP 7 中没有与之相关的菜单命令。 但是一些特殊应
14、用需要将实际值保存为初始值。这一过程可通过 STL 源文件或 Excel 来实现,以下将分别介绍其操作步骤。 在 STL 源文件中,将数据块的实际值直接保存为初始值当生成 STL 源文件后,实际值可以逐行拷贝至 STL 源程序中的声明语句中。No. 步骤1 在 SIMATIC Manager 选择菜单指令 “View Online“ ,在线打开要执行操作的数据块。选择菜单命令 “File Save” 或点击软盘图标保存该数据块。2 通过菜单命令 “File Generate Source.”生成此数据块的源文件。3 打开生成的源文件,该文件位于 SIMATIC Manager 的 Source
15、 文件夹。4 在 STL 源文件中,将位于 “BEGIN”和 “END_DATA_BLOCK”语句之间的实际值逐行复制到相应的声明行(初始值)及相应的数据类型之中。 图 01 如图 01 所示,通配符“:=”也必须和实际值一起复制到初始值的声明行。以下是声明行定义的一个示例: Data_1 : BYTE := B#16#AA;5 保存编译 STL 源程序 File Save File Compile此时,实际值被用作初始值使用 Excel 将数据块的实际值保存为初始值(便利方法)数据块的实际值也能在 Excel 中被存为初始值。当数据量较大时,推荐使用 Excel 进行操作,这是因为此时数据是
16、逐块而不是逐行被复制到声明区域的。 下述表格介绍了如何导入/ 导出 STL 源文件及将其保存在 Excel 中。No. 步骤1 在 SIMATIC Manager 选择菜单指令 “View Online“ ,在线打开要执行操作的数据块。选择菜单命令 “File Save” 或点击软盘图标保存该数据块。2 通过菜单命令 “File Generate Source.”生成此数据块的源文件。3 Mark the generated source in the source in the SIMATIC Manager and right-click it. Then select the “Expo
17、rt Source.“ command in the pop-up menu.4 在 “Export source”对话框中确定源文件导出文件加后,选择“STL source (*.awl)” 作为文件类型且文件名中必须包含扩展名“.AWL ”,例如 “Source_DB2.AWL”,然后点击“Save”按钮。 图 025 启动 Microsoft Excel,通过 “文件 打开.” 打开刚才导出的 STL 源文件,出现“ 文本导入向导”对话框。 注意为了保证在“Open”对话框中可以找到该 STL 源文件,需要选择“All files (*.*)”作为打开文件类型。6 在文本倒入向导第一步,
18、使能“Delimited“ 格式选项。 图 03 然后单击 “Next” 按钮。7 在下一个文本倒入向导的对话框中,选择“tab“ 或 “space“ 作为分隔符。 图 04 然后单击 “Next” 按钮。8 在第三步文本倒入向导中,选择”standard” 作为;栏数据格式。 图 05 然后单击“Finish”按钮。 转化的 STL 源在 Excel 中打开。9 选中所有属于 STL source 的单元格后点击右键。 在弹出菜单中选择“设置单元格格式.”。图 0610 在“对齐” 页签中将水平对齐设置为“靠右”或“ 靠右(缩进)”点击确定。 图 0711 选择位于“BEGIN”和“END_
19、DATA_BLOCK”之间的实际值以及通配符“:=”,将数据复制到“STRUCT”和 “END_STRUCT”之间声明区域的相应数据类型之后,如图 08 所示。 图 0812 复制完成后检查语法格式是否正确,例如: STRUCTData_1 : BYTE := B#16#AA;.END_STRUCT; 图 0913 在 Excel 中保存文件,“ 文件 另存为.” 并选择 带格式文本文件(空格分隔)(*.prn) 作为文件类型。.注意 执行上述操作后,文件保存为“Source_DB2.AWL”。但是,如果文件以另一文件名保存,如“Source_DB20.AWL”,系统会将其保存为“Source
20、_DB20.AWL.PRN”文件。 此文件需通过删除扩展文件名 PRN 将“Source_DB20.AWL.PRN” 转换为“Source_DB20.AWL”。PRN 扩展名是系统自动添加的,这种情况发生在保存文件时已输入过一次以 AWL 结尾的文件名。14 在 SIMATIC Manager 中选择菜单命令 “Import External Source.”将 Excel 中处理完成的 STL 源文件导入至 STEP 7 项目下的 source 文件夹。15 选择导入的源文件后点击右键,在弹出菜单中选择 “Compile.”命令进行编译。编译完成后,实际值便保存为初始值。 图 10注意如果数
21、据块中有 UDT 类型的数据,使用时有限制:不能将实际值附着在变量后作为初始值。虽然 UDT 可以被导出,但其初始值的改变将会影响到所有使用该 UDT 的数据块,因此无法做到在不同数据块中的差别化应用。 关键词:编成帮助,初始化,初始值,系统行为 全局数据块和背景数据块的区别在使用全局数据块的情况下,所有的程序块 (FB,FC 和 OB)可以读写数据块中的数据。背景数据块被分配到特定的功能块,包含所分配的 FB 的本地数据。 全局数据块 o 可以增加变量,改变初始值和当前值。 o 在数据块中添加,删除,改变变量。 背景数据块 o 不能添加或删除变量,不能改变变量的初始值和当前值。 o 在相关连
22、的功能块中添加,删除,改变变量。图 01 不同 FB 的数据可以存储在单个背景数据块中 (多重背景)。图 02 给出了一个例子,说明了在 FB1 中 FB5 和 FB6 如何作为多重背景的。两个 FB 将它们的背景数据保存在调用它们的 FB1 的背景数据块 DB1 中。在 FB1 的声明中,多重背景块保存为静态变量。 图 02 更多信息可以参考 STEP 7 在线帮助以下部分 “背景数据块” “创建数据块 (DB)” “数据块 (DB) 的结构” “使用多重背景”从 STEP 7 V4.02 升级到 V5.x 需要注意当升级 STEP 7 V4.02 到 V5.x 版本时,在 LAD/STL/FBD 编辑器中可能会在调用 CALL 功能时出现红色。这种现象的原因是块中调用的一个背景数据块已经在符号表里被声明为全局数据块。在 STEP7 编程规则中这是不允许的,并且在 STEP7 V5.x 版本中也是不能被接受的。补救措施可以按照下列步骤来修改发生错误的数据块