作者 | 主题 |
---|---|
赵欣 官方工程师 经验值:5576 发帖数:387 精华帖:52 |
楼主 2020-03-03 10:57:00
主题:【PLC通信原理探秘】大讲堂幕后彩蛋之破局 专家大讲堂《PLC通信原理探秘》系列视频:https://www.ad.siemens.com.cn/service/elearning/series/288.html
连载之一: 【PLC通信原理探秘】大讲堂幕后彩蛋之序言 连载之二: 【PLC通信原理探秘】大讲堂幕后彩蛋之初探 连载之三: 【PLC通信原理探秘】大讲堂幕后彩蛋之失败 连载之四: 【PLC通信原理探秘】大讲堂幕后彩蛋之曙光
2007年的那个夏季,北京的天气随着强烈的阳光,总是让人觉得有些烦躁。而多日思考的那些问题,依旧没有任何进展,让我更加沮丧。如何能找到一个适当的切入点?心里一片乱麻!
借助外部的工具,例如,交换机和Wireshark已经没有办法证明什么,因为你只能看到网线上的数据,而不知CPU内部是如何处理这些通信数据的。即使翻遍手册,感觉仍无计可施。
于是我还像以往那样,再次重复一遍问题。又思考了一番,s7-300作为PUT/GET服务器,400PLC的GET进行数据接收,此时对于300PLC来说是通过CCP的,因为数据的发送是按照CPU的周期进行的,且AP没有任何相关的S7通信程序。这一切都说明此时300PLC的数据发送发生在CCP。
那么PUT呢?也就是300PLC从400PLC中接收数据呢?如何证明发生在CCP呢?如果数据进入到300PLC中,发生在CCP,意味着什么呢?CCP似乎和PII和PIQ的机制一样,也就意味着数据只在每个周期的开始或者结束才刷新数据,还意味着此数据在300整个循环周期中,始终未变;反之,如果发生在时间片,那么数据在一个周期内可能会存在变化?是吗?想到此,宛如闷热的空气中注入清爽的凉气,让我一下子茅塞顿开。这就是一个切入点!
总是想着如何借助外力去证明这一点,然而我却忽然意识到,判断数据是否在CPU一个周期内变化,通过程序本身就可以解决。打破固有思维,有时也带着一些幸运。
这就有了最令我为之骄傲的程序,虽然简单,也看似无用,但对于理解CCP和时间片概念,以及后续的协议通信理解,乃至整个PLC通信知识体系的建立都起到了至关重要的作用。再次看一下:
L MW10 T MW12 A M100.0 JCN jmp L MW0 Next: T MW2 CALL “WAIT” WT:=10000 L MW2 LOOP next jmp: NOP 0 L LW 10 L LW 12 ==I JC jj SET M100.1 jj: NOP 0
这个程序是和前面的延时程序结合在一起的,原因就是为了看清动作。程序非常简单,首先把MW10中的数据传递给MW12,延时程序前面介绍过了,这里不再赘述。接着判断MW10和MW12是否相等,如果相等,就跳到程序最后;如果不等,则使能M100.1为1。这时,如果大家不理解时间片和CCP的概念时,就会误以为MW10和MW12是永远相等的,M100.1永远不会被置位,因为程序如此。然而当300CPU和400CPU同时运行这个程序,使用PG去修改MW10的数值时,你所看到的试验结果,会让你为之震惊!
----------未完待续---------- 连载之七: 【PLC通信原理探秘】大讲堂幕后彩蛋之扬帆 连载汇总: 【PLC通信原理探秘】系列连载故事汇总
读万卷书 行万里路
|