28 西门子工业网络通讯指南 2). 编程
在S7 416的OB35组织块中调用发送块SFC65,具体程序代码为:
表2-2 参数说明
REQ CONT DEST_ID REQ_ID SD 发送请求,该参数为1时发送。 为1时表示发送数据是连续的一个整体。 对方的MPI地址。 表示一包数据的标识符 ,标识符可自定义,例子中两包数据的标识符分别为“1”,“2”。 定义数据发送区,以指针的格式表示。例子中第一包数据为DB1.DBB0开始的连续76个字节,发送区最大为76个字节。 发送状态字。 通讯进程,为1时表示正在发送;为0时表示发送完成。 RET_VAL BUSY 在本例中, M1.1和M1.3为1时,CPU 416将分别发送标识符为“1”和“2”的两包数据发送给CPU 315。
一个CPU可以建立几个这样的连接和CPU的通讯资源有关,这也决定了SFC的调用的次数。即“动态连接” 数。以上例作为说明,M1.1和M1.3为1时,就建立了与4号站的连接;反之4号站发送,2号站接收数据时,同样要建立一个连接,也就是说两个站通讯时,若都需要发送和接收数据,则须占用两个动态连接资源。
MPI通讯 29 通讯连接状态可参考图2-25:
图2-25 通讯连接状态的建立
M1.1和M1.3为0时,此时建立的连接并没有释放,必须调用SFC69来释放连接,在上例中M1.5为1时,与4号站建立的连接将断开,释放连接资源。如图2-26所示。
图2-26 通讯连接的释放
在S7 315的OB1中调用接收块SFC66,具体程序代码为:
30 西门子工业网络通讯指南
表2-3 参数说明
EN_DT RET_VAL REQ_ID NDA RD 表示接收使能 表示接收状态字 为接收数据包的标识符 为1时表示有新的数据包,为0时则表示没有新的数据包 接收区放在DB1中从DBB0 开始的连续76个字节中
接收块只识别数据的标识符,而不管是哪一个CPU发送的。本例中,接收从2号站CPU416发送的两包数据,当标识符为“1” 且M1.3为1时,复制接收区的数据到DB2的前76个字节中(调用SFC20);当标识符为“2” 且M1.4为1时,复制接收区的数据到DB3的前76个字节中。
例子程序参见光盘,项目名为MPI_SFC_SR。
MPI通讯 31 (2). 单边编程通讯方式
与双边编程通讯方式不同,单边编程通讯只在一方编写通讯程序,即客户机与服务器的访问模式。编写程序一方的CPU作为客户机,无需编写程序一方的CPU作为服务器,客户机调用SFC通讯块访问服务器。这种通讯方式适合S7-300/400/200之间的通讯,S7-300/400的CPU可以同时作为客户机和服务器,S7-200只能作服务器。SFC67 (X_GET) 用来将服务器指定数据区中的数据读回并存放到本地的数据区中,SFC68 (X_PUT) 用来将本地数据区中的数据写到服务器中指定的数据区。
? 先介绍S7-300/400之间的通讯。
1). 网络配置图
图2-27 网络配置图
2). 硬件和软件需求 硬件:CPU 315-2DP CPU 416-2DP 软件:STEP 7 V5.2 SP1
3). 新建项目
在STEP 7中创建两个站STATION1和STATION2。其中STATION1的CPU为S7 416, MPI站地址为2,作为客户机; STATION2的CPU为S7 315-2DP , MPI站地址为4,作为服务器。
4). 编程
CPU416调用SFC68, 把本地数据区的数据DB1.DBB0开始的连续76个字节发送到CPU315的DB1.DBB0开始的连续76个字节中; 调用SFC67, CPU416读出CPU315的数据DB1.DBB0开始的连续76个字节,放到本地DB2.DBB0开始的连续76个字节中,例子程序如下:
32 西门子工业网络通讯指南
表2-4 参数说明
DEST_ID VAR_ADDR SD RD 表示对方的MPI地址 表示对方(服务器端)的数据区 表示本地数据区(数据源),当 M1.1为1时,发送该区数据 表示本地数接收区。当M1.3为1时,接收数据放到本区 数据区最大为76个字节。同时在一个CPU中调用SFC67和SFC68将占用一个动态连接。
当M1.5为1时中断通讯并释放该连接。同样S7-300也可以作为客户机,S7-400也可以作为服务器。
例子程序参见光盘,项目名为MPI_SFC_PG300。
? S7-300/400与S7-200之间的通讯
1). 概述
由于在S7-200中不能调用SFC通讯块, 所以S7-200只能作为服务器,只有S7-300/400可以作为客户机。
下面介绍S7-300/400与S7-200之间的通讯过程。
2). 网络配置图