产品描述
西门子代理商6SL3225-0BE37-5AA0 西门子代理商6SL3225-0BE37-5AA0
在做完CPU的S7通信测试之后,我想看看CP卡处理S7通信是不是和CPU一样,如果是一样的,我就同时掌握了CPU和CP卡通信行为,心中暗暗窃喜。然而测试的时候却发现了新的问题。
**个问题我发现在Step7中300CP卡通信的功能块和300CPU通信的功能块是不一样的,虽然名称相同,但当调用功能块时来源是不同的,CP卡调用这些通信功能块来自CP通信库;而400PLC通信的这些功能块却是相同的。
*二个问题就是在**个问题的基础上,当右键点开在300CP通信库里的功能块查看属性对话框中的“Calls”,会发现所有的这些功能块都调用SFC58/SFC59。而400PLC对应的功能块却没有。
于是我开始查找功能块手册和在线帮助,去寻找关于SFC58/59的说法。原来这两个功能块是用来读写数据记录用的,就像现在用的SFB52/53一样,去读写设备的数据记录。这就意味着在CPU中调用BSEND/BRECV时,底层调用了SFC58/59去读写CP卡中的数据记录,同时手册中提到了这是同步操作。同步和异步的概念出现了,它们的作用是什么呢?头疼!
于是我又转过头,准备再把同步和异步的概念现弄清楚。根据手册,通信处理可能需要几个循环周期才能处理完毕,这是异步的,那么,那么在一个循环周期处理完毕就是同步的?又查了Prodis上的一些总部上的FAQ,得到一些信息,就是如果需要进行读写数据记录的模板安装在*机架上,使用SFC58/59就是同步,而如果这些模板安装在分布式IO上,那么执行SFC58/59就是异步的。在使用SFC58/59时,异步是有个数限制的,同步时没有限制的。这意味理论上在300*机架上安装使用的CP,FM的数量没有限制,可以占满整个机架,同步就是解释CP/FM数量这样问题的根本原因!这说明同步的操作是随着指令代码的结束而结束的,或者说与CPU的循环周期的轨迹同步执行的。
那么异步呢?那必然是异步的操作不能随着指令代码的结束而结束。例如通过SFC58/59读写分布式IO上的CP341或者FM,这种情况很明确,就是读或写指令从CPU发出后,什么时候能够确认读写操作需要依靠分布式总线的循环周期,而这个周期肯定和CPU的周期不是同步的,那么必然操作没有随着指令代码的结束而结束,而是需要等待对方的确认结果给CPU的程序,这显然是异步的。那么通信处理呢?例如前面描述的S7通信发送400B,发送400个字节,不是一蹴而就的,先是通过数据一致性的大小长度,然后通过ISO/OSI参考模型的通信堆栈进行封装处理,以此类推,依次通过时间片来调度发送这些数据,最后得到对方确认,也就是BSEND的Done置1,这些执行显然不能随着代码的结束而结束。所以这些都是异步的操作。
产品推荐
友情链接