有几个问题想求助大侠们。S7-300是CPU315-2DP。S7-200是CPU 224XP-CN REL 02.01
1.MPI的硬件连接是用DP紫电缆加DP头的。除了两边终端要把同组红绿线接到DP头的进、终端电阻打ON位置外(即主站S7-300与末尾的S7-200)。中间的几台S7-200的PLC上是串的两组DP线,请问不分进出可以吗?因为3脚 8脚和DP头同色两个进口 出口都是通的。还是只能由S7-300过来的这端接到S7-200的进、S7-200的出连到下一台S7-200的进、然后该台S7200的出连到下一台S7200的进。。一直循环到最后一台S7200的进口?
2.S7-300的MPI地址不设2,设其它的可以吗?
3.S7-300同时还做着DP主站挂着几台变频器,DP通讯是正常的。请问对与S7-200的MPI通讯有影响吗?DP的地址我设的是1-5.MPI这边是11-20。CPU315-2DP可以同时做DP的主站与MPI的主站吗?
4.我看到有人说SFC67 SFC68最多只能交换8字节VAR_ADDR=p#db1.dbx0.0 byte 8。可以多写吗?最大可以BYTE=多少?
5.调用一次SFC67 SFC68时DEST_ID=12、VAR_ADDR=p#db1.dbx0.0 byte 8 那DB1.DBB0-7对应的是地址为12的S7200的VB0-7吗?
如果再调用SFC67 SFC68时DEST_ID=13、VAR_ADDR=p#db2.dbx0.0 byte 8 那DB2.DBB0-7对应的是地址为13的S7200的VB0-7吗?
6.通讯时、REQ与CONT要一直强制为1吗?或者要怎么做?REQ脉冲触发?一直触发?CONT呢?
字有点多。希望哪位好心人能帮助一下 谢谢了
楼主最近还看过
1、严格按照标准,两段是进,其他的安顺序,进-出;
2、MPI地址只要不和网络上的重复就行了,不一定是2;
3、DP通讯和MPI通讯没影响;
4、5、6、
你参考这本书,《西门子工业网络通讯指南》
http://www.beichen-automation.com/p01.aspx?cateid=180&ProductsCateID=180
1.DP头的安装只要遵循两头ON 中间OFF的原则就行了
2.地址应该可以更改的吧
3,个人感觉是可以的
关于第4.5.个问题。,我给你找了点资料
转载—— 对于单向基本通信,使用系统功能 SFC67 (X_GET)从一个被动站读取数据,使用系统功能SFC68(X_PUT)将数据写入一个被动站(服务器)。这些块只有在主动站中才调用。对于一个双向基本通信,调用站中的系统功能SFC65 (X_SEND),在该站中想将数据发送到另一个主动站。在同样为主动的主动接收站中,数据将通过系统功能SFC66 (X_RCV)记录。 http://www2.ad.siemens.com.cn/Download/Upload/MC/application/A0054.pdf ? OB35中的程序: Network2:用SFC 67 读取对方(B站)的数据到本站(A站) 全局数据通信是PLC之间进行的不需要编程通过MPI接口在CPU间循环地交换少量数据,当过程映像被刷新时,在循环扫描检测点上进行数据交换;而无组态的连接的MPI通信(编程通信)通过调用SFC67和SFC68来实现,MPI无组态连接就是MPI通信时,不需要组态,只要编写通信程序即可实现通信,PLC之间可以采用双边编程通信和单边编程通信方式,你这里应该是采用单边编程通信方式,因为CPU313C需要从老系统上用MpI通讯读取一个模拟量和16个数字量的数据,只要在CPU313C上进行编程就可以实现数据交换,编程通信要比全局数据传输的数据量要大,速度更快; X_PUT(SFC68)为发送数据的指令,通过此指令将数据写入不在同一个本地S7站中的通信伙伴,其中DEST_ID为对方的MPI地址(这里指你的老系统PLC的MPI地址)和VAR_ADDR为对方的数据区,SD为本地数据区,必须保证SD参数定义的数据长度和数据类型与通信伙伴上VAR_ADDR一致; X_GET(SFC67)为接收数据的指令,可以从本地站S7站以外的通信伙伴(这里指老系统上PLC站)中读取数据,其中参数DEST_ID和VAR_ADDR分别指对方的MPI地址和对方的数据区,RD为本机的数据区必须保证RD参数定义的接收区(CPU313C)至少和由VAR_ADDR参数定义的要读取的区域一样大,而且类型必须相匹配。
两种类型的基本通信中,每次块调用可以处理最多 76 字节的用户数据。对于S7-300 CPU,数据传送的数据一致性是 8 个字节,对于S7-400 CPU则是全长。 如果连接到S7-200,必须考虑到S7-200只能用作一个被动站。
详见《SIMOTION _XSEND/_XRECEIVE 通信函数使用入门》:
首先要建立一个项目,对两个PLC的MPI网络组态。假设A站和B站的MPI地址分别为2和3。使用 SFC68“X_PUT” 和 SFC67“X_GET” 发送和接收数据。
发送和接收程序可以放于一个站的循环中断组织块OB35中, 或者发送程序放于OB35中,接收程序放于OB1中。? 例如在A站(2号站)的PLC的定时循环中断组织块OB35中编写发送程序和接收程序。首先利用SFC 68 把A站中的MB40?MB49中的10B数据发送到B站(3号站)中的MB50?MB59中。完成A站向B站写入数据。然后利用SFC 67 把B站中的MB60?MB69中的10B数据读入到A站中的MB70?MB79中。完成A站读取B站的数据。
注意:SFC 69 “X_ABORT” 可以中断一个由“X_PUT” ? “X_GET”建立的连接。如果SFC 68?SFC 67的工作已经完成(BUSY=0),调用SFC 69 “X_ABORT”后,通信双方的连接资源被断开。
Network1:用SFC 68发送数据本站(A站)的数据到对方(B站)CALL "X_PUT" //调用SFC 68
REQ :=TRUE //激活发送请求(BOOL 1有效)
CONT :=TRUE //发送完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#3 //接收方的MPI地址(WORD)
VAR_ADDR:=P#M 50.0 BYTE 10 //对方的数据接收区(ANY)为M50?M59的10个字节
SD :=P#M 40.0 BYTE 10 //本地的数据发送区(ANY)为M40?M49的10个字节
RET_VAL :=LW2 //返回的故障信息(WORD)
BUSY :=L2.1 //发送状态(ANY 1为发送中)
CALL "X_GET" //调用SFC 67
REQ :=TRUE //激活读取请求(BOOL 1有效)
CONT :=TRUE //接收完成后保持连接(BOOL 1连续)
DEST_ID :=W#16#3 //对方(B站)的MPI地址(WORD)
VAR_ADDR:=P#M 60.0 BYTE 10 //要读取的对方的数据接收区(ANY)为M60?M59的10个字节
RET_VAL :=LW4 //返回的故障信息(WORD)
BUSY :=L2.2 //发送状态(ANY 1为发送中)
RD :=P#M 70.0 BYTE 10 //本地的数据接收区(ANY)为M70?M79的10个字节
你首先必须把两个PLC之间的MPI端口连接起来,设定主站CPU313C的MPI通信参数(波特率187.5kbit/s)和主站的MP地址如“3”,不能与老的PLC的MPI地址重复,把两个站的波特率设定一样,各自下载到PLC中;因为你只想老系统上用MpI通讯读取一个模拟量和16个数字量的数据,在CPU313C中单边编程,在读取数据区只要指定对方的PLC的MPI地址和数据区就可以了。
回复内容:
对:东山脚下-骑士军团关于1.DP头的安装只要遵循两头ON 中间OFF的原则就行了2.地址应该可以更改的吧3,个人感觉是可以的关于第4.5.个问题。内容的回复:
是什么意思?是指S7-400CPU p#db1.dbx0.0 byte 最大可以写76?然后S7-300CPU调用一次SFC67 68时候只能是BYTE 8?还是指S7-300CPU数据传送是8字节的倍数?8 16 32最多写BYTE=72满足8的倍数? 如果需要更多数据呢?再次调用?