西门子S7-300 和S7-400 集成PN 口的S7 通信
1. s7 通信简介
s7 通信是s7 系列plc 基于mpi、profibus、ethernet 网络的一种优化的通信协议,主要用于s7300/400plc 之间的通信。simatic s7- pn cpu 包含一个集成的profinet 接口,该接口除了具有 profinet i/o 功能,还可以进行基于以太网的s7 通信。simatic s7- pn cpu 支持无确认数据交换、确认数据交换和单边访问功能。功能块的调用如图1、图2 所示。
要通过 s7-pn cpu 的 集成profinet 接口实现s7 通信,需要在硬件组态中建立连
接。
2. 硬件及网络组态
cpu 采用两个315-2pn/dp,使用以太网进行通信。在step7 中创建一个新项目,项目名称为pn s7。插入两个s7-300 站,在硬件组态中,分别插入cpu 315-2 pn/dp。如图3 所示。
新建以太网,打开“netpro”设置网络参数,选中cpu,在连接列表中建立新的连接。
如图4 所示。
然后双击该连接,设置连接属性。在“general”属性中块参数id = 1,这个参数即是下面程序中的参数“id”。在simatic 315pn-1 中激活“establish an active connection”,作为client 端,simatic 315pn-2 作为server 端。
3. 软件编程
3.1. 无确认数据交换
sfb/fb 8 "usend" 向类型为“urcv”的远程伙伴sfb/fb 发送数据。执行发送过程而不需要和sfb/fb 伙伴进行协调。也就是说,在进行数据传送时不需要伙伴sfb/fb 进行确认。
s7-300:在req 的上升沿处发送数据。在req 的每个上升沿处传送参数r_id、id 和sd_1。在每个作业结束之后,可以给r_id、id 和sd_1 参数分配新数值。
s7-400:在控制输入req 的上升沿处发送数据。通过参数sd_1 到sd_4 来指向要发送的数据,但并非都需要用到所有四个发送参数。然而,必须确保参数sd_1 到sd_4/sd_1 和rd_1 到rd_4/rd_1 (在相应通讯伙伴sfb/fb "urcv" 上)所定义的区域在以下几个方面保持一致:
• 编号
• 长度
• 数据类型
参数r_id 必须在两个sfb 中完全相同。如果传送成功完成,则通过状态参数done 来表示,此时其逻辑数值为1。
sfb/fb 9 "urcv" 从类型为“usend”的远程伙伴sfb/fb 中异步接收数据,并
把接收到的数据复制到组态的接收区域内。
当程序块准备好接收数据时,en_r 输入处的逻辑值为1。可以通过en_r=0 来取消一个已激活的作业。
s7-300:在en_r 的每个上升沿处应用参数r_id、id 和rd_1。在每个作业结束之后,可以给r_id、id 和rd_1 参数分配新数值。
s7-400:通过参数rd_1 到rd_4 来指向接收数据区。
必须确保参数rd_i/rd_1 和sd_i/sd_1 (在相应通讯伙伴sfb/fb "usend"
上)所定义的区域在以下几个方面保持一致:
• 编号
• 长度
• 数据类型。
通过ndr 状态参数逻辑数值为1 来指示已经成功完成复制处理过程。参数r_id 必须在两个sfb/fb 上完全相同。
打开simatic 315pn-1 的ob1,在ob1 中依次调用fb8,fb9 如图5、图6 所示:
同样,在simatic 315pn-2 的ob1 中,调用fb8/fb9。通信双方的“r_id”均设为0。将simatic 315pn-1 的mb100-mb109 赋值b#16#02,在simatic 315pn-2 中,将fb9的“en_r”置1,然后在simatic 315pn-1 中,将fb8 中“req”设置上升沿信号,此时simatic 315pn-2 的mb110-mb119 接收到b#16#02。如图7 所示。
3.2. 确认数据交换
sfb/fb 12 "bsend" 向类型为“brcv”的远程伙伴sfb/fb 发送数据。通过这种类型的数据传送,更多的数据可以在通讯伙伴之间传输,超过任何其它用于组态的s7 连接的通讯sfb/fb 所能传输的数据量,通过集成pn 口的s7-400 和s7-300 是65534字节。
要发送的数据区是分段的。各个分段单独发送给通讯伙伴。通讯伙伴在接收到后一个分段时对此分段进行确认,该过程与相应sfb/fb "brcv" 的调用无关。在调用块之后,当在控制输入req 上有上升沿时,发送作业被激活。发送用户存储区中的数据与处理用户程序是异步执行的。
由sd_1 指定起始地址和要发送数据的大长度。可以通过len 来确定数据域的作业指定长度。在这种情况下,len 替换sd_1 的长度区域。参数r_id 必须在相应的两个sfb/fb 上完全相同。如果在控制输入r 处有上升沿,则当前数据传送将被取消。如果传送成功完成,则通过将状态参数done 的数值设置为1 来进行指示。如果状态参数done 或error 的数值为1,则在前一个发送处理结束之前,不能处理新的发送作业。
sfb/fb 13 "brcv" 接收来自类型为“bsend”的远程伙伴sfb/fb 的数据。在收到每个数据段后,向伙伴sfb/fb 发送一个确认帧,同时更新len 参数。在块调用完毕,并且在控制输入en_r 数值为1 之后,块准备接收数据。可以通过en_r=0 来取消一个已激活的作业。
由rd_1 指定起始地址和接收区的大长度。由len 指示已接收数据域的长度。
从用户存储区中接收数据与处理用户程序是异步执行的。参数r_id 必须在相应的两个sfb/fb 上完全相同。通过状态参数ndr 的数值为1 来指示所有数据段的无错接收。接收到的数据保持不变,直到通过en_r=1 来重新调用sfb/fb 13 为止。如果在数据的异步接收期间调用块,则将引发一个警告,该警告通过status 参数输出;如果当控制输入en_r数值为0 时进行调用,则接收将被终止,并且sfb/fb 将返回到它的初始状态。
打开simatic 315pn-1 的ob1,在ob1 中依次调用fb12,fb13 如图9、图10 所示:
同样,在simatic 315pn-2 的ob1 中,调用fb12/fb13。通信双方的r_id 设为0,len设为10,将simatic 315pn-1 的mb120-mb129 赋值b#16#04,在simatic 315pn-2中,将fb13 的“en_r”置1,然后在simatic 315pn-1 中,将fb12 中“req”设置上升沿信号,此时simatic 315pn-2 的mb130-mb139 接收到b#16#04。如图11 所示
3.3. 单边访问
可以通过sfb/fb 14 "get",从远程cpu 中读取数据。
s7-300:在req 的上升沿处读取数据。在req 的每个上升沿处传送参数id、addr_1和rd_1。在每个作业结束之后,可以分配新数值给id、addr_1 和rd_1 参数。
s7-400:在控制输入req 的上升沿处启动sfb。在此过程中,将要读取的区域的相关指针(addr_i)发送到伙伴cpu。远程伙伴返回此数据。在下一个sfb/fb 调用处,已接收的数据被复制到组态的接收区(rd_i)中。必须要参数addr_i 和rd_i 定义的区域在长度和数据类型方面要相互匹配。
通过状态参数ndr 数值为1 来指示此作业已完成。只有在前一个作业已经完成之后,才能重新激活读作业。远程cpu 可以处于run 或stop 工作状态。如果正在读取数据时发生访问故障,或如果数据类型检查过程中出错,则出错和警告信息将通过error 和status 输出表示。
通过使用sfb/fb 15 "put",可以将数据写入到远程cpu。
s7-300:在req 的上升沿处发送数据。在req 的每个上升沿处传送参数id、addr_1和sd_1。在每个作业结束之后,可以给id、addr_1 和sd_1 参数分配新数值。
s7-400:在控制输入req 的上升沿处启动sfb。在此过程中,将指向要写入数据的区域(addr_i)的指针和数据(sd_i)发送到伙伴cpu。 远程伙伴将所需要的数据保存在随数据一起提供的地址下面,并返回一个执行确认。必须要参数addr_i 和sd_i 定义的区域在编号、长度和数据类型方面相互匹配。
如果没有产生任何错误,则在下一个sfb/fb 调用时,通过状态参数done 来指示,其数值为1。只有在后一个作业完成之后,才能再次激活写作业。远程cpu 可以处于run或stop 模式。如果正在写入数据时发生访问故障,或如果执行检查过程中出错,则出错和警告信息将通过error 和status 输出表示。
打开simatic 315pn-1 的ob1,在ob1 中依次调用fb14,fb15 如图13、图14 所示:
同样,在simatic 315pn-2 的ob1 中,调用fb14/fb15。将simatic 315pn-2 的mb140-mb149 赋值b#16#06,在simatic 315pn-1 中,将fb14 的“req”置上升沿信号,此时simatic 315pn-1 的mb150-mb159 接收到b#16#06。如图15 所示。
4. 常见问题
• 两个s7-300pn cpu 之间建立s7 连接可有哪些通信方式?
答:可以有确认连接、非确认连接、单边通信
• 使用fb8/9 时,数据已发送,程序块没有错误显示,但是没收到任何数据?
答:发送区与接收缓冲区长度不一致。
• 使用fb12/13 时,发送区与接收缓冲区长度是否必须一致?
答:发送区的大小只要不超过接收缓冲区就可以。
• fb12 发送数据时,发送数据的长度由哪个参数决定?
答:发送长度由 len 决定。但发送数据的起始地址和大长度由sd_1 决定。
展开全文
- 供应商
- 广东湘恒智能科技有限公司
- 联系电话
- 13510737515
- 手机号
- 13185520415
- 在线咨询QQ
- 1695606393
- 联系人
- 董海波
- 所在地
- 惠州大亚湾澳头石化大道中480号太东天地花园2栋二单元9层01号房(仅限办公)