quote:以下是引用凡烨在2011-04-18 09:37:45的发言:quote:以下是引用www123456在2011-04-15 18:24:32的发言:quote:以下是引用四书五经在2011-04-15 14:29:26的发言:
再仔细看了下S7通讯手册,背板总线(backplane bus)的速率是187.5 kBit/s 或者 10.5MBit/s。S7300的背板总线速度应该是187.5kbit/s,而且在CPU与CP,FM之间通讯采用异步SFC调用(一次调用需要多个扫描周期),并且SFC的调用个数有限制。
S7400的背板通讯速度应该是10.5MBit/s,而且CPU与CP,FM之间采和同步SFC调用,并且SFC的调用个数没有限制。
谢谢四书五经,又了解了一些知识.
所以,不一定是发送频率越高数据传送越快,因为300CPU同CP的通讯是异步的(400同CP之间的通讯应该也是异步的),一个调用要几个OB1扫描周期,所以如果发送频率过高,前一个过程还没有结束,就进行新的发送请求,由于"负担过重",要出现错误.所以发送前要检测当前循环中通讯完成情况及状态。 必要时利用完成状态被置位后作为前提条件(数据发送并被应答接收后),具备后再可以进行一个新的发送.例如DONE=0,ERROR=0,STATUS=0000H操作无错已经完成。
另外 ,编程时接收一方的确数据长度要不小于发送一方的数据长度(非TCP/IP连接),而对于TCP/IP连接来说,接收和发送方数据长度一定要相等,否则数据可能丢失或出错.
非常感谢大家的积极参与!
这里异步和同步的概念,我来给大家说一下,首先要求同步和异步是相对于哪一个参照物来说的,这个参照物应该是CPU的循环周期的时钟。典型的异步功能块操作就是读写数据记录,使用SFB52/SFB53,数据记录位于分布式IO的接口模板或IO模板上,试想一下,CPU执行SFB52时,要求读取分布式IO的数据记录,如果PB或PN的总线周期为200ms(假设),那么CPU读到数据记录的最大时间需要大于200ms,这就是异步模式,而不在于执行多少个OB周期,仅是CPU执行完SFB52的程序代码而没有获取真正的数据,这里的例子可能OB1执行了多次,但也可能仅在一个OB1的周期内数据就能读取到。同步则恰恰是等待数据读取后才向下执行其它代码。
S7-300的CPU通过CP做数据通信时,例如S7通信,那么使用BSEND和BRECV,通过点击这两个功能块的属性,点击Calls,可以看见SFC58/SFC59,这意味着CPU和CP之间的数据交换通过SFC58/SFC59,这里是同步的,这也是在中央机架上使用SFC58/59没有限制的原因。那么数据交换CPU和CP的周期,取决于CPU的OB1的周期时间(OB35类似),如果OB1的周期为20ms,那么读写CP卡的周期也是20ms,这里不能控制CP卡进行S7通信的频率,CP卡有着自己的周期来处理S7通信。如果使用集成口,例如PN来进行S7通信,Ob1的周期是可以控制S7通信的周期的。
S7-400的CPU和cP的数据交换是直接数据交换的方式,都是同步完成的。
谢谢指正,但以前看过SIEMENS的S7培训的PPT文件里面描述如下:
“一个CPU可以带多少个CP/FM?
S7-300 CPU:与同时调用的负责异步数据区通信的SFC个数
有关。(SFC58、SFC59、SFC51)
S7-400 CPU :与S7连接资源和槽号有关。”
从上面的描述我的理解是S7300与CP,FM之间是异步通讯,并且调用SFC58,SFC59有限制。
不知道理解的对不对?