n
配置注意事项
本条目描述了在将 CP342-5 组态为 DP 主站时应该注意的问题,并解释了为什么 CPU 需要调用 FC1 "DP_SEND" 和 FC2 "DP_RECV" 来传输数据。n
本条目分为如下部分:n
- 通过CPU集成的 PROFIBUS 接口或 CP443-5 EXT通信
- 通过 CP342-5通信
- 参数化 FC1 "DP_SEND" 和 FC2 "DP_RECV" n
- 评估 FC1 和 FC2的返回值
- CPU, CP342-5 和 DP 从站 I/O 区的数据通信
- 推荐的编程方式
1. 通过CPU集成的 PROFIBUS 接口或 CP443-5 EXT通信
当使用 CPU 的内部 PROFIBUS 接口或 CP443-5 EXT 的 PROFIBUS 接口时,可以使用装载/传送命令或系统功能 SFC14/15 来访问DP从站数据。n
图. 01n
图. 02n
2. 通过 CP342-5通信
如果使用 CP342-5作为主站,则无法使用装载/传送命令或位组合操作访问从站上的数据。n
图. 03n
I/O 数据的读写分两步进行:n
- 写数据时数据由CPU传送至CP342-5模块,然后 CP342-5 将数据发送给 DP 从站。n
- 读数据时数据从DP 从站发送给CP342-5模块,然后CP342-5再发送给CPU。
CPU 和 CP342-5 的通信通过 FC1 "DP_SEND" 和 FC2 "DP_RECV" 实现。CP342-5 和 DP 从站的数据交换是自动的。n
在硬件组态时如果给CP342-5添加 ROFIBUS DP 主站系统,系统消息提示在CPU的用户程序中必须调用 FC1 "DP_SEND" 和 FC2 "DP_RECV" 来实现与DP从站的数据交换。
图. 04n
提示
S7-300 CPU 的集成 PROFIBUS 接口与 CP342-5 之间的区别参见条目689920.n
3. 参数化 FC1 "DP_SEND" 和 FC2 "DP_RECV"
FC1 "DP_SEND" 和 FC2 "DP_RECV" 具有如下输入参数:n
- CPLADDRn
- SEND 或 RECV
输入参数 "CPLADDR" 的设置
在输入参数"CPLADDR"处输入通信模块CP342-5的启始地址。在硬件组态中可以找到该16字节的地址。双击 CP342-5 打开属性对话框。模块启始地址在 "Addresses" 标签里。n
图. 05n
模块的启始地址 (16 bytes) 对下列内容没有影响:n
- 运行在此DP主站系统下的DP从站数量n
- 需要寻址的IO数据长度n
- IO数据的起始点
该值用于 CPU 寻址 CP342-5 ,并不影响所连接DP从站的IO地址。n
因为可以在一个CPU上运行多个CP,所以需要为 FC1 "DP_SEND" 和 FC2 "DP_RECV" 指定模块的起始地址。该参数表明了与通信块进行数据交换的CP或DP主站系统。n
提示
模板的起始地址在硬件组态中是十进制,而在程序中输入参数 "CPLADDR" 处需要转换为16进制。n
下图演示了在CPU中调用 FC1 "DP_SEND" 和 FC2 "DP_RECV" 建立CPU和CP342-5之间的通信并在DP主站系统和DP从站间进行数据交换。n
图. 06n
输入参数 "SEND" 和 "RECV"的设置
输入参数 "SEND" 指定要发送数据的地址和长度。它们由CPU传送至CP342-5 然后由 CP342-5 至DP从站。n
输入参数 "RECV" 指定接收到的数据的存放地址(接收缓冲)。CP342-5 将从DP从站读取到的数据传送至定入好的CPU的接收缓冲区。n
参数"SEND" 和 "RECV"的发送和接收数据区通过 "ANY" 格式的指针定义 (如,"P#DB1.DBX3.0 BYTE 37")。 本例中接收了37 字节并存储至 DB1中从字节3开始的地址里。n
提示
FC1 "DP_SEND" 和 FC2 "DP_RECV" 中,"ANY" 格式指针中的长度必须以字节指定。 "ANY" 格式允许其它长度格式。n
图. 07n
4. 评估 FC1 和 FC2的返回值
FC1 "DP_SEND" 通过输出参数 "DONE", "ERROR" 和 "STATUS".“DP_SEND” 表征数据传输状态。n
FC2 "DP_RECV" 通过输出参数"NDR", "ERROR", "STATUS" 和 "DPSTATUS" 表征数据传输状态。n
给输出参数指定相关变量来评估传输状态。本例中输出参数存储在M区中。n
当下列条件完全满足时,数据传送块 FC1 "DP_SEND" 成功完成:n
- 输出参数值 "ERROR" = False 且n
- 输出参数值 "STATUS" = 0 且n
- 输出参数值 "DONE" = True
当下列条件完全满足时,数据传送块 FC2 "DP_RECV" 成功完成:n
- 输出参数值"ERROR" = False 且n
- 输出参数值 "STATUS" = 0 且n
- 输出参数值 "NDR" = True
图. 08n
由于FC1"DP_SEND" 和 FC2 "DP_RECV"是循环调用的,如果没有错误发生,“STATUS”参数的数值会在 0 和 8180H 之间变化。当“STATUS”参数的数值为 8180H 时,“DONE”参数也会变成数值“False”。n
如果数据传送没有成功完成,则不论数据是否与该从站有关,都不会有从站与 DP 主站进行数据交换。当通讯发生故障时,此 DP 主站系统的整个 I/O 区域 - 即,连接的所有 DP 从站 - 都会失效。n
附加信息
关于 FC1 "DP_SEND" 和 FC2 "DP_RECV" 参数及状态的更多信息参见手册 "SIMATIC NET, SIMATIC NET S7 CP 程序块, 编程手册" 条目号30564821
5. CPU, CP342-5 和 DP 从站 I/O 区的数据通信
不论是使用“DP_SEND”,还是使用“DP_RECV”,都无法指定要从中读取数据或要往其中写入数据的具体从站。不能使用 CP342-5 直接访问单个从站。
CP342-5 自身有一个内部数据存储区,用于存储从站的 I 和 O 区域的数据。作为主站 CP342-5 具有 2160 个字节输入输出。系统循环的将此数据区域复制到整个 I/O 处理器区,或者读取整个 I/O 处理器区 至此数据区。对于 2160 个字节的数据区来讲,可以在 I/O 处理区域中预设的最大地址是 2159。
可以使用FC1“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 到 16,与从 P#DB2.DBX32.0 BYTE 17 中传送数据相同。因此,无法寻址一个指定 DP 从站的 I/O 区。这样,更新始终会从IO地址 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 中给出的程序。
图. 09
下图给出了数据块 DB1结构。该数据块包含了FC2 "DP_RECV" 的反馈值和所使用的 I/O 地址区。
图. 10
下图给出了数据块 DB2结构。该数据块包含了 FC1 "DP_SEND" 的反馈值和所使用的 I/O 地址区。
图. 11
提示
在 DB1 和 DB2 中由于存储了反馈值所以有一个偏移量。也可以使用M区或其它DB块来存储.反馈值,这样可以从起始地址0来存储输入输出的数据。
如果要在同一个数据块中存储反馈值和输入输出地址区,可以将输入输出数据从超始地址0开始,然后根据用户数据长度来存储反馈值。
6. 推荐的编程方式
创建两个数据块。
第一个数据块如DB1,覆盖所连接DP从站的输入地址区。
第二个数据块如DB2,覆盖所连接DP从站的输出地址区。
首先调用FC1“DP_SEND”,接着立即调用FC2“DP_RECV”函数.。
在 FC1 "DB_SEND" 的输入参数 SEND 处指定覆盖输出地址区的数据块,如DB2.
在 FC2 "DB_RECV" 的输入参数 RECV 处指定覆盖输入地址区的数所块,如DB1.
如果指定数据块的第一位 (例如,P#dB*.DBX0.0 BYTE *) 作为指针的起始值 ,那么可以使用装载/传送命令访问数据块的区域因为DB块的地址与过程IO的地址就好像是一样的。
- L DB1.DBB0 对应于 L IB0
- T DB2.DBB0 对应于 T QB0
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc330625.html