发布时间:2019-08-24 来源:众智博远
与双向通信两方都需要编写发送和接收块不同,单向通信只在一方编写通信程序,这也是客户机与服务器的关系,编写程序一方的CPU 作为客户机,没有编写程序一方的CPU 作为服务器,客户机调用SFC 通信块对服务器的数据进行读写操作,这种通信方式适合S7-300/400/200 之间通信,S7-300/400 的CPU 可以同时作为客户机和服务器,S7-200 只能作服务器。SFC67 (X_GET) 用来读回服务器指定数据区的数据并存放到本地的数据区中,SFC68 (X_PUT) 用来写本地数据区的数据到服务器中指定的数据区中,以举例的方式说明怎样调用SFC 通信块实现通信,先介绍S7-300/400 通信,与上例一样,建立两个站,STATION1 CPU416-2 MPI 地址为2 作为客户机,STATION2 CPU315-2DP MPI 地址为4作为服务器,调用SFC68,CPU416 把本地数据区的数据DB1.DBB0 以后76 个字节存储在CPU315 DB1.DBB0 以后76 个字节中,调用SFC67, CPU416 读出CPU315 的数据DB1.DBB0 以后76 个字节,放到本地DB2.DBB0 以后76 个字节中,例子程序如下:
参数DEST_ID 表示对方MPI 地址,VAR_ADDR 指定服务器的数据区,SD 本地数据区(数据源) M1.1 为1 时,CPU416 将数据区的数据DB1.DBB0 以后的76 个字节存放到CPU315 的数据区DB1.DBB0 以后的76 个字节中。RD 本地数接收区,M1.3 为1 时CPU416 将CPU315 数据DB1.DBB0 以后76 个字节的数据存放到本地数据区DB2.DBB0 以后76 个字节中。数据区为76 个字节。同时在一个CPU 中调用SFC67,68 占用一个动态连接,M1.5 为1 时中断通信释放连接。同样S7-300CPU 也可以作为客户机,S7-400CPU 也可以作为服务器。S7-300/400 与S7-200 通信时在S7-200 中不能调用SFC 通信块,只能在S7-300/400 中调用,所以只有S7-300/400 可以作为客户机,S7-200 只能作为服务器。下面将以举例的方式介绍实现通信的过程,例子使用的硬件为S7-300 CPU315-2DP,S7-200 CPU224,通信卡CP5611;使用的软件为STEP7 V5.2 SP1,MICROWIN V3.2。首先要设定站号和通信速率,S7-300 为2 号站,S7-200 为4 号站,通信速率为187.5K/S,在S7-300 侧:打开STEP7,插入一个S7-300 站,组态站号及通信速率并下载到CPU 中,在S7-200 侧:打开MICROWIN,在“SYSTEM BLOCK”中设定S7-200 的站号和通信速率,如图3 所示:
然后把组态数据下载到S7-200CPU 中,这样所有的硬件组态作完了,接下来的工作是在S7-300CPU 中编写通信程序,在OB1 中调用SFC68 和SFC67。程序如下:
M1.1 为1 时把S7-300 的输入信号IB0 发送到S7-200 的QB0 中,同时M1.4 为1 时把S7-200 的输入信号IB0 方到S7-300 的输出信号QB0 中。如果需要与S7-200 的V 区通信,在S7-300CPU 中相对应的是DB1,例如读出S7-200 中VB100 以后16 个字节并且放到S7-300 MB20 以后的16 个字节中,需要调用系统功能SFC67(X_GET),在参数VAR_ADDR 写入S7-200 的地址区如:P#DB1.DBX100.0 BYTE16。在参数RD:写入S7-300 的地址区如:P#MB20.0 BYTE 16,这样就可以完成通信了。另外还可以通过S7-200 的PROFIBUS-DP 模块EM277 与S7-300/400 的MPI 口通信,设置更为简单,在S7-300/400 侧调用SFC67/68,与上例参数同,地址变成S7-200 EM277的地址就可以了,在S7-200 侧,用拨码开关设定EM277 的站号而不用软件下载设定,连接好以后,从新上电通信速率就可以自适应。