https://www.ad.siemens.com.cn/service/elearning/series/288.html
连载之八: 【PLC通信原理探秘】大讲堂幕后彩蛋之柳暗
连载之九: 【PLC通信原理探秘】大讲堂幕后彩蛋之花明
连载之十: 【PLC通信原理探秘】大讲堂幕后彩蛋之远航
连载之十一: 【PLC通信原理探秘】大讲堂幕后彩蛋之搁浅
连载之十二: 【PLC通信原理探秘】大讲堂幕后彩蛋之有谁
在做完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,这些执行显然不能随着代码的结束而结束。所以这些都是异步的操作。
这时我长吁一声,又一个概念搞定了,值得高兴!而手册中提到使用异步操作是要占用CPU资源的,所以有数量限制,那么这个有问题也好理解,既然占用资源,那么必然存在数量限制。可是占用资源是什么样的?是什么样的资源被占用了?还有前面的两个问题,哎,又一阵头疼!~~
----------未完待续----------
连载之十四: 【PLC通信原理探秘】大讲堂幕后彩蛋之求助
连 载 汇 总: 【PLC通信原理探秘】系列连载故事汇总