
系统功能sfc14、sfc15.doc
12页PROFIBUS 教程(十三)——系统功能 SFC14 与 SFC15 作者: PLC-CNC 发表于: 现场总线 回复 留言 收藏此帖 发表日期: 2010-06-03 18:14 关键字:PROFIBUS SFC14 SFC15 教程 PROFIBUS 教程 在 STEP7 中的 I/O 存取命令不允许用单字节、单字或双字命令去存取具有 3 个或大于 4 字节的相连续的 DP 数据区域(模块)为了存取这种封闭结构的相连续的数据区域,使用系统功能 DPRD_DAT 和 DPWR_DAT一、系统功能 SFC14 DPRD_DAT为了读一个 DP 从站的相连续的输入数据区域,使用系统功能 SFC14 DPRD_DAT,每个读存取涉及一个专用输入模块如果一个 DP 从站有若干个相连续的输入模块,则必须为所要读的每个输入模块分别安排一个 SFC14 调用表1 列出了你必须定义的 SFC14 的输入和输出参数表 1 SFC14 DPRD_DAT 的参数参数 说明 数据类型 存贮器区域 描述LADDR INPUT WORD I,Q,M,D,L(不变的)用 HW Config 组态的 DP 从站的输入模块开始地址规定(十六进制格式)RET_VAL OUTPUT INT I,Q,M,D,L SFC 的返回值RECORD OUTPUT ANY I,Q,M,D,L 所读用户数据的目的区域参数描述RECORD参数 RECORD 描述在 S7 CPU 上用于从 DP 从站读取的相连续输入数据的目的区域。
在这里你定义的长度必须与用 HW Config 程序为 DP 从站的输入模块所定义的长度相一致请注意,RECORD 参数属于数据类型 ANY-Pointer对于 ANY-Pointer 只允许的数据类型是 BYPERET_VAL表 2 中指出了系统功能 SFC14 的参数 RET_VAL 的出错代码表 2 SFC14 DPRD_DAT 的参数 RET_VAL 返回值出错代码W#16#…说明0000 无错误发生8090 对于指定的逻辑基本地址没有模块被组态或超出对于连续的数据所允许的长度8092 在数据类型 ANY-Pointer 参数中指出类型不是 BYPE8093 由 LADDR 指定的逻辑地址,不存在可以从中读取连续的数据的模块80A0 所选择的模块有缺陷80B0 在外部 DP 接口上从站故障80B1 指定的目的区域的长度与通过 HW Config 指定的用户数据长度不一致808x 对于外部 DP 接口系统出错80B2 对于外部 DP 接口系统出错80B3 ‥ ‥80C0 ‥ ‥80C2 ‥ ‥80Fx ‥ ‥87xy ‥ ‥二、系统功能 SFC15 DPWR_DAT从 S7 CPU 传送一个连续的输出数据到 DP 从站,使用系统功能 SFC15 DPWR_DAT。
每个写存取涉及一个专用的输出模块如果 DP 从站有若干个连续的数据输出模块,则对每个要写入的输出模块必须分别安排一个 SFC15 调用表 3 指出了必须定义的 SFC15 的输入和输出参数表 3 SFC15 DPWR_DAT 的参数参数 说明 数据类型存贮器区域 描述LADDR INPUT WORD I,Q,M,D,L(不 变的 )用 HW Config 组态的 DP从站的输出模块开始地址的规定(十六进制格式)RECORDOUTPUTANY I,Q,M,D,L 所要写的用户数据的源区域RET_VALOUTPUTINT I,Q,M,D,L SFC 的返回值参数描述RECORD参数 RECORD 描述要从 S7 CPU 写入 DP 从站的连续的输出数据的源区域在这里指定的长度必须与用 HW Confi 组态的 DP 从站的输出模块的长度相一致请注意,参数 RECORD 属于数据类型 ANY-Pointer,对于 ANY-Pointer只允许是数据类型 BYTERET_VAL表 4 中列出了 SFC15 的参数 RET_VAL 出错代码表 4 对 SFC15 DPWR_DAT 规定的返回值出错代码W#16#…说明0000 未出现错误8090 对于指定的逻辑基准地址没有模块被组态的模块或超出所允许的连续的数据长度8092 在数据类型 ANY-Pointer 参数中指出类型不是 BYPE8093 由 LADDR 指定的逻辑地址,不存在可以对它写入连续的数据的模块80A1 所选择的模块有缺陷80B0 在外部 DP 接口上从站故障80B1 所指定的源区域的长度与通过 HW Config 组态指定的用户数据长度不一致80B2 对于外部 DP 接口系统出错80B3 对于外部 DP 接口系统出错80C1 在模块上先前写作业的数据还未被模块处理完808x 对外部 DP 接口系统出错80Fx ‥ ‥85xy ‥ ‥80C2 ‥ ‥三、用 I/O 存取命令的数据通信SIMATIC S7 系统的 CPU 通过用 STEP7 程序编写的专用的 I/O 存取命令来寻址分散外围设备模块的 I/O 数据。
这些命令直接调用 I/O 存取或通过过程映象调用 I/O 存取用于读和写分散 I/O 信息的数据格式可以是字节、字或双字图 1 解释用不同数据格式与 DP 从站的 I/O 通信然而,有些 DP 从站模块有更复杂的数据结构它们的输入和输出数据区域有 3 个字节或大于 4 个字节的长度这些数据区域也称谓连续的 I/O 数据区域在使用连续的数据区域的 DP 从站的参数集中,参数“Consistency”必须设置为“All”对于连续的数据,输入和输出数据不能通过过程映象来传送,也不能用通常的 I/O 存取命令来调用数据交换原因在于对 DP 主站上的输入/输出数据的CPU 更新循环DP 输入 /输出数据的更新只能由 DP 主站与 DP 从站间的循环数据交换(总线循环)而确定(见图 2)因此,从 DP 主站来的数据或到 DP 主站的数据可能已经在寻址的 DP 从站 I/O 数据的一条 STEP7 存取指令与下一条 I/O 存取指令之间被更改了由于这个缘故,仅对用户程序用字节、字或双字命令无任何中断地编址的 I/O 结构和区域才能保证数据的连续性 更新 PII(过程映象输入表)传送 PIO(过程映象输出表)到输出。
必须控制复杂功能的 DP 从站,如闭环控制器或电气驱动等,它们通常不能用简单的数据结构来完成这些任务这些 DP 从站需要更大的输入和输出区域,而且在这些 I/O 区域中的信息常常是相连不可分割的因此,它们不能用字节、字和双字的结构来存贮这样的数据区域称之为“连续的”在一个输入/输出模块内,用组态报文可以指定长度可达 64 字节或字(128 字节)的数据区域为了对这些相关的模块读或写信息,必须使用 DP 从站的连续的输入/输出数据区域和特殊的功能在 SIMATI S7 中,系统功能 SFC14 DPRD_DAT 和 SFC15 DPWR_DAT 是为此目的保留的图 3 指出系统功能 SFC14 和 SFC15 的工作原理 SFC 的参数 LADDR 是一个指针,它指向要读出的输入数据区域或指向要写入的输出数据区域在 SFC参数中,所指定的 DP 从站的输入或输出模块的起始地址必须与早先用 HW Config 程序组态时规定的地址相同,而且这些地址用十六进制数表示 四、用 SFC14 DPRD_DAT 和 SFC15 DPWR_DAT 交换连续的数据下面的实例项目解释 SFC14 和 SFC15 的使用。
实例中所使用的硬件与前面教程十的描述相同(S7-300/CPU315-2 DP 作为 I-从站),但此项目限于一个 S7 DP 主站( S7-400)和一个 I-从站(S7-300)因此,必须去掉在前面实例中已组态的 ET200B 和 ET200M 节点用合适的 PROFIBUS 电缆将 S7-300 的 DP 接口与 S7-400 控制器彼此连接,并接通设备的电源此项目基于假定两个可编程控制器均已复位,即它们的工作内存、装载内存和系统内存均被完全清零两个 PLC 都处在 RUN 状态(开关位置 RUN-P)I- 从站的两个连续的输入/输出数据区域每个都有 10 字节长,且参数“Consistency”设置为“All”这就是说,在 I-从站上和 DP 主站的输入/输出数据通信必须使用系统功能 SFC14 和 SFC15用于 I-从站(带 CPU315-2 DP 的 S7-300)的用户程序本实例项目中的 I-从站具有大于 4 字节的连续的输入/ 输出区域因此,正如使用 S7 DP 主站一样,必须使用系统功能 SFC14 和 SFC15 来传送 I/O 数据切记,由 DP 主站用 SFC15 发送的输出数据被 I-从站用 SFC14 来读出并作为其输入数据,反之也适用于从 I-从站来的作为 DP 主站的输入数据。
图 4 对此作了解释SIMATIC S7-300 控制器的 CPU 不识别编址错误因此,对于 CPU315-2 DP,可以将用 SFC 发送的 I/O 数据放在另外的未被占用的过程映象区域中,例如可以用 IB100~IB109 和 QB100~QB109因此在用户程序中,就可以用简单的位、字节、字和双字指令来编址这个数据现在,让我们来生成用于 I-从站所需的用户程序 在 SIMATIC Manager 中,打开项目 S7-PROFIBUS-DP,双击文件夹 SIMATIC 300,再通过文件夹 CPU315-2DP 和 S7-Program 进入 Blocks 文件夹(图 5)双击 Blocks 文件打开它,由 HW Config 生成的组织块 OB1 和系统数据块(SDBs) 已经设置在此文件夹中注意,必须节省并符合 HW Config 中配置的硬件,否则 HW Config 不能生成系统数据,此时将看到无系统数据文件夹·双击 OB1 打开它,自动打开 STEP7 程序 LAD/STL/FBD用 STL 视图为 OB1 编程 ·在程序编辑器中,键入命令“CALL SFC14”,并用 RETURN 键确认。
SF14 DPRD_DAT 显示出输入和输出参数如图 6 所示定义这些输入和输出参数输入装载和发送指令,然后调用 SFC15,再为此系统功能定义输入和输出参数当这两个 SFC 被调用时,用于这些标准功能的相关块的外形就自动地从 STEP7标准库(…\SIE-MENS\STEP7\S7Libs\STDLIB30)中拷贝给命名为 Blocks 的文件夹图 5 带有打开的 Blocks 文件夹的 SIMATIC Manager图 6 带 OB1(用于 CPU315-2 DP 的实例程序)的 STEP7 中的 STL 程序编辑器·为了能容易地监视 DP 主站上的数据通信,用适当的装载和传送指令(见图 6)将所接收的第 1 个数据字节(IB100)转送到要被发送的第 1 个数据字节(QB100)此后,将拷贝来自 I-从站输入数据区域的由 DP 主站发送的第 1 个数据字节立刻返回到 I-从站的输出数据区域,然后返回 DP 主站·用 Save 保留 OB1,并关闭用于 OB1 的程序编辑器(在本例中,即 STL 编辑器)在 Windows 95/NT 的工具条中,转换到 SIMATIC Manager。
现在,这Blocks 文件夹应包含块对象 System data、OB1、SFC14 和 SFC15当 DP 主站改变。
