1.使用BSEND/BRCV的双向S7通信
使用指令BSEND/BRCV的双向S7通信需要通信双方编程,可以进行快速的、可靠的数据传送。通信方式为同步方式,发送方调用BSEND指令,将数据块安全地发送到通信伙伴的接收缓冲区。接收方调用BRCV指令,将数据复制到指定的接收区,数据传输才结束。使用BSEND/BRCV最多可以传送64KB数据。
新建项目“BSEND_BRCV”(见随书光盘中的同名例程),PLC_1和PLC_2为CPU1511-1PN和CPU 1516-3 PN/DP。它们的PN接口的IP地址分别为192.168.0.1和192.168.0.2,子网掩码为255.255.255.0。
打开网络视图,单击按下左上角的“连接”按钮(见图6-26),用选择框设置连接类型为S7连接。用“拖拽”的方法建立两个CPU的PN接口_1([X1])之间的名为“S7_连接_1”的S7连接,连接ID为16#100。
2.通信程序设计
双方的通信程序基本上相同,首先生成名为“SendData”的DB1和名为“RcvData”的DB2,在数据块中生成有100个整数元素,数据类型为Array[0..99]ofInt的数组。
为了实现周期性的数据传输,组态时启用双方的MB0为时钟存储器字节,用M0.5为BSEND提供发送请求信号REQ。
打开主程序OB1,将指令列表的“通信”窗格的“\S7通信\其他”文件夹中的指令BSEND和BRCV拖拽到工作区(见图6-31)。
图6-31 PLC_1的OB1中的BSEND和BRCV指令
BSEND/BRCV的输入参数ID为连接的标识符,R_ID用于区分同一个连接中不同的数据包传送。同一个数据包的发送方与接收方的R_ID应相同。站点PLC_1发送和接收的数据包的R_ID分别为1和2(见图6-32),站点PLC_2发送和接收的数据包的R_ID分别为2和1。图6-31是站点PLC_1的OB1中的程序。站点PLC_2的OB1中的程序除了R_ID以外,其他参数的实参均与图6-31相同。输入参数R为1时停止发送任务,SD_1和RD_1分别是发送区和接收区。
BSEND的InOut参数LEN是要发送的数据的字节数,数据类型为Word。其实参为MW4,在双方的初始化程序OB100中,用MOVE指令预置它的初始值为200。BRCV的InOut参数LEN为实际接收到的字节数。
(www.xing528.com)
图6-32 数据包传送示意图
在双方的OB100中,将DB1中要发送的100个字分别预置为16#1511和16#1516,将保存接收到的数据的DB2中的100个字清零。在双方的OB1中,用周期为0.5s的时钟存储器位M0.3的上升沿,将要发送的第1个字DB1.DBW0加1。
3.通信的仿真实验
S7-1500可以对使用PUT/GET、BSEND/BRCV和USEND/URCV指令的S7通信仿真。
用6.3.1节所述的仿真方法,选中项目树中的PLC_1,单击工具栏上的“开始仿真”按钮,将程序和组态数据下载到仿真PLC。选中PLC_2,单击工具栏上的“开始仿真”按钮,将程序和组态数据下载到另外一个仿真PLC,下载后CPU被切换到RUN模式。用两台PLC的监控表监控接收到的数据(见图6-33)。在时钟存储器位M0.3的上升沿,通信双方每0.5s发送100个整数数据。可以看到双方接收到的第一个字DB2.DBW0不断增大,DB2中的DBW2和DBW198是通信伙伴首次扫描预置的值。
图6-33 PLC_1与PLC_2的监控表
4.使用USEND/URCV的双向S7通信
将本节的项目“BSEND_BRCV”另存为项目“USEND_URCV”(见随书光盘中的同名例程),删除通信双方OB1中调用的指令BSEND、BRCV,以及项目树的文件夹“\程序块\系统块\系统资源”中的两个背景数据块。打开主程序OB1,将指令列表的“通信”窗格的“\S7通信\其他”文件夹中的指令USEND和URCV拖拽到工作区(见图6-34)。SD_1~SD_4是分别指向4个发送区的指针,RD_1~RD_4是分别指向4个接收区的指针,它们的数据类型为Any。
图6-34 USEND和URCV指令
该项目可以仿真,仿真的方法与仿真的结果与项目“BSEND_BRCV”相同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。