1.使用 CPU 的内部 DP 接口通讯与使用 CP342-5 通讯之间的不同
当使用 CPU 的内部 PROFIBUS 接口或 CP443-5 EXT 的 PROFIBUS 接口 (参见图 1) 时,可以使用装载/传送命令 (参见图 2) 或系统功能 SFC14/15 来访问数据。

( 53 KB )
图 01:集成 DP 接口作为 DP 主站
注释:
在条目号 689920 的条目“CPU (例如 CPU 315-2 DP) 和 CP 342-5 中的 DP 接口之间的区别”中详细介绍了此主题。

( 54 KB )
图 02:访问 CPU 的内部 DP 接口
如果正在使用 CP342-5,则无法使用 装载/传送命令或位组合操作访问从站上的数据。在这种情况下,I/O 数据通讯分两步进行。首先从 CPU 中传送数据到 CP,然后再从 CP 中传送数据到从站 (对于读操作,顺序相反)。从 CP 到从站的数据传送是自动进行的。用户必须自己处理 CPU 到 CP 的数据传送。此处,有两个特殊功能可用于此操作。

( 60 KB )
图 03:CP 342-5 为 DP 主站
注释:
在将 CP342-5 添加到硬件配置时系统将会给出此信息:

( 20 KB )
图 04:关于使用通讯块的注意事项
CPU 和 CP342-5 之间的通讯是通过 FC 1“DP_SEND”和 FC 2“DP_RECV”实现的。必须为两个函数都分配参数“CPLADDR”,而将参数“SEND”分配给函数 FC 1,将参数“RECV”分配给参数 FC 2。
2.“CPLADDR”输入的含义和参数设置
为参数“CPLADDR”指定通讯处理器的模块起始地址。从硬件配置中获得此 16 字节地址。

( 61 KB )
图 05:CP342-5 的模块地址
此地址的长度 (16 字节) 对于要在此主站系统上运行的从站数,要寻址的 I/O 区域的大小,或者 I/O 数据区将从哪个点开始都没有任何影响。CPU 使用此值来寻址模块 (此处是 CP342-5);但该值与所连接的 DP 从站的 I/O 地址没有任何关系。
必须在“DP_SEND”和“DP_RECV”中指定此地址,因为这样才能在一个 CPU 上运行多个 CP,以及指定用于指示 CP 或 DP 主站系统进行数据交换所使用的块的参数。
在使用此参数时,必须确保从硬件配置 (仅指定的地址区的起始地址与此相关) 中以十六进制格式为“CPLADDR”指定了十进制数值。
下图说明了如何为在图 T2-01 中组态的 CP 342-5 调用通讯块 FC 1 和 FC 2。

( 53 KB )
图 06:FC 1 和 FC 2 的参数设置
3.“SEND”和“RECV”输入的参数设置
对于“SEND”参数,需要指定包含要传送到从站的数据的数据区。在此处仅指定数据源。“RECV”参数的情况正好相反。此处仅指定要用于存储来自从站的数据的数据区域。对于如何将数据写入 I/O 或者如何从那里得到数据将会在第 5 节中介绍。
“SEND”和“RECV”参数需要以“ANY”格式 (例如“P#DB1.DBX3.0 BYTE 37”) 指定一个指针。在此实例中,该指针指向数据块 DB1 的字节 3 的 第 0 位。“BYTE 37”以字节为单位指定要传送的数据域的长度。
“ANY”格式原则上允许其它长度格式。但是,对于“DP_SEND”和“DP_RECV”函数,则必须以字节为单位指定。

( 53 KB )
图 07:FC 1 和 FC 2 的参数设置
4.评估函数 FC 1 和 FC 2 的反馈值
“DP_SEND”函数具有参数“DONE”、“ERROR”和“STATUS”,用于指示数据传送的状态和是否成功。“DP_RECV”函数具有参数“NDR”、“ERROR”、“STATUS”和“DPSTATUS”,用于指示数据传送的状态和是否成功。因此,应该分配相关变量给这些参数,以便能够评估状态。在图 8 中,这些参数被链接到存储器区域。但是,也可以将这些参数链接到数据块中的存储区域 (参见第 5 节中的图 10 和图 11)。

( 57 KB )
图 08:FC 1 和 FC 2 的参数设置
下列要点适用于这两个函数:
只有在“ERROR”参数数值为“False”,“STATUS”参数 数值为“Zero”,而“DONE”或“NDR”参数数值为“True”时,数据传送才成功完成。
注意事项:
由于函数是循环调用的,如果没有错误发生,“STATUS”参数的数值会在 0 和 8180H 之间变化。当“STATUS”参数的数值为 8180H 时,“DONE”参数也会变成数值“False”。
如果数据传送没有成功完成,则不论数据是否与该从站有关,都不会有从站与 DP 主站进行数据交换。当通讯发生故障时,此 DP 主站系统的整个 I/O 区域 - 即,所连接的所有 DP 从站 - 都会失效。
关于各个状态的详细信息,可以在 STEP 7 在线帮助 (在块容器中选中 FC 1/FC 2 块 > 按下“F1”健) 中找到。
5.CPU、CP 和 DP 从站的 I/O 区域之间的数据通讯
不论是使用“DP_SEND”函数,还是使用“DP_RECV”函数,都无法指定要从中读取数据或要往其中写入数据的从站。不能使用 CP342-5 直接访问单个从站。
CP 自身有一个内部数据存储区,用于存储从站的 I 和 O 区域的数据;在最新的 CP 中,每个区域最大可达 2160 个字节 (此处还可以参见 STEP 7 在线帮助)。系统会周期性地将此数据区域复制到整个 I/O 处理器区,或者读取整个 I/O 处理器区。因此,对于 2160 个字节的数据区来讲,可以在 I/O 处理区域中预设的最大地址是 2159。
可以使用函数“DP_SEND”和“DP_RECV”获得对此内部数据存储区的读取和写入访问。
在设置指针的参数时,指定要传送的数据区的长度。数据区从 I/O 地址 0 开始,通过 CP 的内部数据存储区写入到 I/O 地址区,或者从中读取数据。
指针的初始值的变化并不影响在 CP 的内部数据存储区中的存储,因此并不会影响在所连接的 DP 从站的 I/O 数据区中的存储。通过使用“DP_SEND”函数,将 P#DB2.DBX3.0 BYTE 17 区域的数据传送到 I/O 处理区域 0 到 6,从 P#DB2.DBX32.0 BYTE 17 中读取数据与此相同。因此,无法寻址一个指定 DP 从站的 I/O 区。这样,始终会更新从地址 0 开始,加上在指针上指定长度的 I/O 地址区。
通常来讲,有下列一些结论成立:
所组态的 DP 从站的最高 I/O 地址 + 1 便是通过指针为“SEND”和“RECV”参数指定的数据区的长度。
实例:
有一个 DP 从站 (例如,带有 16 DI 和 16 DO 的 ET200M),它的 Q 地址占用区域 200 到 201。在这种情况下,必须在指针上指定长度为 202 (0...201) 个字节的数据区 (例如,P#DB88.DBX13.0 BYTE 202);即使只有 2 个字节要传送到从站也是如此。
要使用 CP342-5 获得在图 2 中给出的功能,需要在图 9 中给出的程序。

( 51 KB )
图 09:访问 CPU 的外部 DP 接口 CP 342-5
下列两图 (图 10 和图 11) 给出了所使用的数据块 DB1 和 DB2 的结构。这些数据块包含了函数的反馈值和所使用的 I/O 地址区。

( 47 KB )
图 10:用于接收数据的 DB

( 49 KB )
图 11:用于发送数据的 DB
编程建议
创建两个数据块。第一个数据块覆盖输入地址的数据区,而第二个数据块覆盖所连接的从站的输出地址区。首先调用函数“DP_SEND”,接着立即调用“DP_RECV”函数,以指定这两个数据块。指定第一个位 (例如,P#dB*.DBX0.0 BYTE *) 作为指针的起始值。然后,在程序处理期间,只要数据块是处理 I/O 的地址,便可以使用 装载/传送命令访问数据块的区域。
实例:DB1 - I 地址区;DB2 - Q 地址区
L DB1.DBB0 便对应 L IB0
而
T DB2.DBB0 便对应 T QB0
在 (图 10 和图 11) 中给出的数据块内有一个偏移量,这用于存储反馈值。但是,也可以在标记区域中,在其它数据块内,或者在“I/O data block”的末尾存储反馈值,这样区域便从“0”开始。
6.在 CP342-5 作为 DP 主站时组态 DP 从站
CP 342-5 仅支持 DP V0 从站。在 STEP 7 硬件配置中,要在 CP 342-5 上操作的 DP 从站只能从目录文件夹“PROFIBUS DP > DP V0 Slaves”中配置。
如果已经通过 GSD 文件在系统中集成了 DP V0 从站,则必须从目录文件夹“PROFIBUS-DP > Other Field Devices”中配置。
7.与 FB 125 / FC 125 的兼容性
CP 342-5 与用于 PROFIBUS DP 的诊断包 FB125 / FC125 不兼容。