您现在的位置是:首页 > PLC技术 > PLC技术

需要双方编程的S7基本通信

来源:艾特贸易2017-12-20

简介S7 基本通信不用组态静态连接,也不用在全局数据表中组态。 例程“ MPI_UC_1 ”用 S7 基本通信在两台 CPU315 -2DP 之间交换数据。要求将它们的 DB 1 中 76B 的数据发送到对方的 DB 2 中。在

    S7基本通信不用组态静态连接,也不用在全局数据表中组态。

    例程“MPI_UC_1”用S7基本通信在两台CPU315 -2DP之间交换数据。要求将它们的DB 176B的数据发送到对方的DB 2中。在STEP 7中创建一个项目,生成两个站,CPU均为CPU 315 -2 DP(见图9-12),将它们连接到MPI网络上,它们的MPI站地址分别为23。通信的双方都需要调用通信块,一方调用X_SEND来发送数据,另一方调用X_RCV来接收数据二这种通信方式适用于S7 - 300/400之间的通信。

    如果在OB1中调用SFC 65X_SEND”,发送的频率太快,将加重CPU的负荷,因此在循环中断组织块OB35中调用SFC 65,每隔一定的时间间隔(默认值为100 ms)调用一次SFC 65。下面是2号站的OB35中的程序:

 SIMATIC管理器

    9-12    SIMATIC管理器

    程序段1:准备要发送的数据

   L    DB1DBW    0

   +    1

   T    DB1DBW    0    //100 msDB1DBW1

   L    IW    0

   T    DB1DBW  2    //用本站的IW0控制对方的QW4

    程序段2:通过MPI发送数据

   CALL“X_SEND”    //SFC 65

   REQ    =M1.0    //发送请求,该参数为1时发送

    CONT    =TRUE    //发送完成后保持连接

   DEST_ID=W#16#3    //接收方的MPI地址

   REQ_ID  =DW#16#1    //数据包标识符

   SD    =P#DB1DBX0.0 BYTE76    //存放要发送的数据的地址区,每次发送76B

   RET_VAL=MW10    //状态字,返回的故障信息

   BUSY    =M1.1    //1时正在发送,为0时发送完成

    下面是2号站的OB1中接收数据的程序:

    程序段1:从MPI接收数据

   CALL    “X_RCV”    //SFC 66

   EN_DT    =M0.0    //接收使能位

   RET_VAL=MW2    //状态字,返回的错误代码

   REQ_ID  =MD4    //接收到的数据包的标识符

   NDA    =M0.1    //1时表示有新的数据包

   RD    =P#DB2DBX0.0 BYTE76    //存放接收数据的地址区

   L    DB2DBW  2

   T    QW  4    //用对方的IWO控制本站的QW4

    程序段2:断开连接

   CALL  “X_ABORT”    //SFC 69

   REQ    =M0.2    //使能信号

   DEST_ID  : = W#16#3    //对方的MPI地址

   RET_VAL=MW8    //返回的错误信息

   BUSY    =M0.3    //1表示操作未完成

    3号站的程序与2号站的相同,只是将SFC中的DEST_IDW#16#3改为W#16#2

    2号站的初始化程序OB100中,调用SFC 21,将存放发送数据的DB 1的各个字预置为16#2222,将接收数据的DB 2的各个字清零。3号站的OB100基本上相同,区别在于将DB1的各个字预置为16#3333

    在运行时,用变量表监视通信双方接收的DB 1的第1个字DBW0和最后一个字DBW74(见图9-13)。为了观察数据传输的动态效果,将发送站的JW0送到DB1. DBW2,对方将接收到的对应的DB2DBW2传送到QW4,相当于用发送站的IW0控制对方的QW4。在运行时改变IW0的状态,观察对方的QW4是否随之而变。

3号站的变量表

    9-13    3号站的变量表

    在变量表中,通过修改M1.0M0.0M0.2的值,来控制数据的发送、接收和断开连接。发送使能位M1.0和对方的接收使能位M0.0必须同时为1状态,才能传送数据。

    在每100 ms执行一次的OB35中,将发送的第1个字DB1DBW01。在运行时同时打开两个站的变量表,观察接收到的DB2. DBW0的值是否不断增大。

    因为SFC 65的参数CONT1(TRUE),即使发送请求位M1.0变为0状态,连接仍然保持。可以通过置位M0.2来使能SFC 69,断开已建立的连接。断开连接后,可以看到接收到的DB2. DBW0停止变化。

    本例因为每个站既要发送,也要接收,一共占用了两个连接。进入在线模式后,可以在CPU的模块信息对话框的“通讯”选项卡中,查看“其他通讯”(S7基本通信)的连接个数。

    如果需要发送的数据超过76B,可以将数据分为若干个数据包来发送,即多次调用SFC65X_SEND”。每次调用的接收方的MPI地址DEST_ID相同,但是数据包标识符REQ_ID不同。接收方调用SFC 66X_RCV”,根据接收到的数据包的标识符REQ_ID判别收到的是哪一包数据,并分别存放到不同的地址区。

(部分原创文章应编辑稿费需求,每篇需要收取2元的稿费,如需查看全文请联系客服索取,谢谢理解!在线客服:艾特贸易网客服为您服务