一台s7-300和多台s7-200mpi无组态通讯怎么编写300侧程序
112.95.251.214
发布于2014-04-16 18:09
1384
0
标签:
使用sfc67和sfc68,多台s7-200,
问题补充:
如果有8台s7-200作为从站,就要在ob1中添加16个网段,调用8次sfc67和sfc68,是这样吗?
佳答案
通过调用sfc67/68实现无组态的mpi的通信,适合s7-400plc、s7-300plc、s7-200plc之间的通信。
以s7-200与s7-300之间的无组态mpi通信为例来说明,一般s7-200与s7-300之间只能采用单边无组态通信方式,即仅在s7-300
在x_put(sfc68)发送数据的指令,通过sfc68将数据写入不在同一个本地s7站的通信伙伴。在通信伙伴上没有相应的sfc68,必须确保由sd(本机的数据区,数据类型为any,在发送cpu上,既s7-300plc上)定义的发送区和由var_addr参数(对方的数据区,数据类型为any,在通信伙伴上,这里是指s7-200)定义的接收区长度相同,并且数据类型相匹配。
一般若对s7-200的v区读写,则在s7-300中定义s7-200的v区,须用db1代替,用指针间接寻址方式进行。如想读出s7-200中vb0以后的30个字节并且放到s7-300的mb20以后的30个字节中,需要调用系统功能sfc67,在参数var_address(对方数据区,指s7-200)中设定s7-200的地址区为:p#db1.dbx0.0byte30,在参数rd(本机的数据区,指s7-300)中设定s7-300的地址区为p#mb20.0byte30.
同样如果将s7-300的mb40以后的70个字节写入7-200中vb31以后的70个字节中,需要调用系统功能sfc68,在参数var_addr中定义s7-200的地址区:p#db1.dbx31.0byte70,在参数sd中设定s7-300d的地址区为p#mb40.0byte70;
一般s7-300/400可以同时作为客户机和服务器,而s7-200只能作为服务器。如果想实现s7-300/400与两个s7-200站通信,在通过req=1调用相应sfc67/68之后,激活读写作业。此后可以继续调用sfc67/68,两套指令的req和cont可以一直为1,直到参数busy=0指示接收到应答为止
具体可以看下面的资料
https://www.ad.siemens.com.cn/download/docmessage.aspx?id=1360&loginid=&srno=&sendtime=