专家大讲堂《PLC通信原理探秘》系列视频:https://www.ad.siemens.com.cn/service/elearning/series/288.html
连载之一: 【PLC通信原理探秘】大讲堂幕后彩蛋之序言
连载之二: 【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通信原理探秘】系列连载故事汇总