一、通讯功能块介绍
S7-200 PLC与S7-300 PLC之间采用MPI通讯方式时,S7-200PLC中不需要编写任何与通讯有关的程序,只需要将要交换的数据整理到一个连续的V 存储区当中即可。
S7-300PLC中需要在组织块OB1(或是定时中断组织块OB35)当中调用系统功能X_GET(SFC67)和X_PUT(SFC68),以实现S7-200 PLC与S7-300 PLC之间的通讯。
X_GET(SFC67)读:从本地S7站以外的通信伙伴中读取数据
①a.REQ——激活X_GET(SFC67),通过REQ=1激活读操作。直到BUSY=0指示数据接收完成为止。
② b.CONT——通过此参数可以决定:读操作完成之后是否保持建立与通信伙伴的连接。CONT=0,则在数据传送结束之后将终止连接。然后,连接可重新用于与新通信伙伴进行数据交换。这种方法确保了只在实际使用时才占用连接资源。CONT=1,则在数据传送结束时保持建立连接。这种方法用于,例如,在两个站之间周期性地交换数据。
③ c.DEST_ID——地址参数"目标ID"。通信伙伴的MPI地址。
④ d.VAR_ADDR ——读取服务器CPU上要从中读取数据的区域。必须选择通信伙伴支持的数据类型。
⑤ e.RET_VAL——如果执行功能时发生错误,返回值中将包含相应的错误代码。如果没有出错,RET_VAL包含复制到接收区RD的数据块的长度,它是一个以字节为单位的正数。
⑥ f.BUSY—— BUSY = 1:接收还没有结束。BUSY=0:接收已经结束,或当前没有激活的接收作业。
⑦ g.RD——接收区(接收数据区)。接收区RD必须至少和通信伙伴上要读取的数据区域VAR_ADDR一样长。RD的数据类型还必须和VAR_ADDR的数据类型相同。接收区的最大长度是76个字节。
X_PUT(SFC68) 写: 将数据写入不在本地S7站中的通信伙伴。
SFC67与SFC68不同之处是SFC68将SD中的数据写入VAR_ADDR中。
调用SFC67和SFC68时,VAR_ADDR参数填写S7-200的数据地址区,由于S7-200的数据区为v区,这里需填写 P#DB1.DBX×× BYTE n 对应的就是S7200 V存储区当中VB××到VB(××+n)的数据区。
例如:交换的数据存在S7-200中VB70到VB79这10个字节当中,VAR_ADDR参数应为P#DB1.DBX70.0 BYTE 10。
二、通讯配置
首先根据S7-300的硬件配置,在STEP7当中组态S7-300站并且下载。
注意:S7-200和S7-300出厂默认的MPI地址都是2,所以必须修 改其中一个PLC的站地址。例子程序当中将S7-300 MPI地址设定为2,S7-200地址设定3,另外要分别将S7-300和S7-200的通讯速率设定一致,可设为9.6K,19.2K,187.5K三种波特率,例子程序当中选用了187.5K的速率。
S7-200PLC修改MPI地址可以参考下图:
S7-200 设置MPI地址
S7-300PLC修改MPI地址可以参考下图:(在硬件配置中双击CPU上 MPI/DP弹出如下对话框)
点击属性如下图(选择参数选项卡:在地址右边点击倒三角修改MPI地址)
点击属性弹出如下对话框(选择网络设置选项卡设置波特率)
例子程序在OB1当中调用数据读写功能块SFC67和SFC68的步骤如下图:
三、编写程序
S7-200PLC与S7-300PLC之间采用MPI通讯方式时,S7-200 PLC中不需要编写任何与通讯有关的程序,只在S7-300PLC中编写通讯程序即可。
在S7-200 PLC中要注意的是需要将交换的数据整理到一个连续的V 存储区当中。
详细程序如下图
分别在STEP7 MicroWin32 和STEP7当中监视S7-200和S7-300 PLC当中的数据,数据监视界面
S7-200监控结果如下图
S7-300监控结果如下图