PLC—PLC 之间的MPI 通讯----调用系统功能的通讯方式

已锁定

liwenqun

  • 帖子

    5351
  • 精华

    25
  • 被关注

    8

论坛等级:奇侠

注册时间:2003-06-06

普通 普通 如何晋级?

PLC—PLC 之间的MPI 通讯----调用系统功能的通讯方式

984

4

2005-04-24 02:21:14

文件上传不了 奇怪!

西门子PLC—PLC 之间的MPI 通讯
----调用系统功能的通讯方式
全局数据包通讯的组态必须是在一个项目下,非常不灵活,有一些用户喜欢调用系统功能(SFC65-69)来实现PLC 之间的MPI 的通讯,这种通讯方式适合于S7-300,S7-400 和S7-200 之间的通讯,一些非常老的S7-300/400CPU 不含有SFC65-69,所以不能用这种方式通讯,只能用全局数据包的方式来通讯,判断一个CPU 是否含有通讯用的SFC,可以在联机的情况下,在线查看所用的程序块,看一看是否包含有通讯用的SFC65-69。通过调用SFC 来实现的MPI 通讯又可分为两种方式:双向通讯方式和单向通讯方式。调用系统功能通讯方式不能和全局数据通讯方式混合使用。
本例中所需硬件:CPU315-2DP,CPU416-2DP。
所需软件:STEP7 V5.2 SP1。
1). 双向通讯方式――在通讯的双方都需要调用通讯块,一方调用发送块,另一方就要调用接收块来接收数据。这种通讯方式适用S7-300/400 之间通讯,发送块是SFC65(X_SEND),接收块是SFC66(X_RCV)。下面我们将以举例的形式说明怎样调用系统功能来实现通讯:在STEP7 中创建两个站STATION1, CPU 为S7- 416, MPI 站地址为2; STATION2, CPU 为S7-315-2DP , MPI 站号为4,2号站发送2 包数据给4 号站,4 号站判断后放在相应的数据区中。在2 号站OB35 中须调用SFC65,如果扫描时间太短,发送频率太块,对方没有响应,将加重CPU 的负荷,在OB35 中调用发送块,发送任务将间隔100MS执行一次,编写发送程序如下:

参数中REQ 为发送请求,该参数为1 时发送。
CONT 为1 时表示发送数据是连续的一个整体。
DEST_ID 表示对方的MPI 地址。
REQ_ID 表示一包数据的标识符 ,标识符自己定义,例子中两包数据的标识符
分别为“1”,“2”。
SD 表示发送区,以指针的格式表示,例子中第一包数据为DB1 中从DBX0.0
(DBB0) 以后的76 个字节数据,发送区最大为76 个字节。
RET_VAL 表示发送的状态
BUSY 为1 时表示发送中止。
在这个例子中, M1.1,M1.3 为1 时,CPU416 将发送标识符为“1”和“2”的两包数据给4 号站的CPU315-2DP。用户可能会问:一个CPU 究竟可以和能几个CPU 通讯? 这和CPU 的通讯资源有关系,这也决定SFC 的调用的次数,在选项手册中,常常可以看到“动态连接”的术语,这个术语与SFC 的调用有关,以上例作说明,M1.1,M1.3 为1时,与4 号站的连接就建立起来了,反之4 号站发送,2 号站接收同样要建立一个连接,也就是说两个站通讯时,若都需要发送和接收数据,则须占用两个动态连接。
具体可参考下图:

连接建立。

M1.1,M1.3 为0 时,此时建立的连接并没有释放,必须调用SFC69 来释放连接,在上例中M1.5 为1 时,与4 号站建立的连接断开,如下图:

连接释放。

有的用户编写多个连接时,由于CPU 的资源有限,而不能通讯,可以用这种方法试一试。

在4 号站编写接收程序如下:


在OB1 中调用SFC66 (X_RCV),参数EN_DT 表示接收使能,RET_VAL 表示接收状态字,REQ_ID 为接收数据包的标识符,NDA 为1 时表示有新的数据包,为0 时则表示没有新的数据包,RD 表示接收区,接收区放在DB1 中从DBB0 以后76 个字节中。例子中,接收块只识别数据的标识符,而不管是哪一个CPU 发送的,接收从2 号站CPU416 发送的两包数据,当标识符为“1” 且M1.3 为1时,复制接收区的数据到DB2 的前76 个字节中(调用SFC20),当标识符为“2” 时,M1.4 为1,复制接收区的数据到DB3 的前76 个字节中。
2). 单向通讯
与双向通讯时两方都需要编写发送和接收块不同,单向通讯只在一方编写通讯程序,这也是客户机与服务器的关系,编写程序一方的CPU 作为客户机,没有编写程序一方的CPU 作为服务器,客户机调用SFC 通讯块对服务器的数据进行读写操作,这种通讯方式适合S7-300/400/200 之间通讯,S7-300/400 的CPU 可以同时作为客户机和服务器,S7-200 只能作服务器。SFC67 (X_GET) 用来读回服务器指定数据区中的数据并存放到本地的数据区中,SFC68 (X_PUT)用来写本地数据区中的数据到服务器中指定的数据区中,我们以举例的方式说明怎样调用SFC 通讯块来实现单向通讯,先介绍S7-300/400 之间的通讯,与上例一样,建立两个S7 站,STATION1, CPU 为S7-416-2 ,MPI 地址为2 作为客户机; STATION2 ,CPU 为S7315-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 和SFC68 将占用一个动态连接,当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/400 与S7-200 之间的通讯的过程,所需硬件: S7-300 CPU315-2DP,S7-200 CPU224 和通讯卡CP5611; 所需软件:STEP7 V5.2 SP1,MICROWIN V3.2。首先要设定各PLC 的MPI 的站地址和通讯速率,S7-300 的MPI 的站地址为2,S7-200 的MPI 的站地址为4,通讯速率为187.5K/S,在S7-300 侧:打开STEP7,插入一个新的S7-300 站,组态站地址及通讯速率并下载到CPU 中,在S7-200 侧:打开MICROWIN,在“SYSTEM BLOCK”中设定S7-200 的站地址和通讯速率,具体参照下图:


然后把组态数据下载到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 BYTE 16。在参数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 的MPI 地址就可以了,在S7-200 侧,用拨码开关设定EM277 的站地址而不用软件下载设定,连接好以后,从新上电通讯速率就可以自动匹配。

PLC—PLC 之间的MPI 通讯----调用系统功能的通讯方式 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54043条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。