故事作者:赵欣

最近创作

看看TA的故事

【PLC通信原理探秘】大讲堂幕后彩蛋之搁浅

已锁定

赵欣

官方工程师

  • 帖子

    387
  • 精华

    52
  • 被关注

    149

论坛等级:奇侠

注册时间:2006-07-07

黄金 黄金 如何晋级?

【PLC通信原理探秘】大讲堂幕后彩蛋之搁浅

5841

7

2020-03-19 14:28:01

star star star

专家大讲堂《PLC通信原理探秘》系列视频:https://www.ad.siemens.com.cn/service/elearning/series/288.html


连载之一: 【PLC通信原理探秘】大讲堂幕后彩蛋之序言

连载之二: 【PLC通信原理探秘】大讲堂幕后彩蛋之初探

连载之三: 【PLC通信原理探秘】大讲堂幕后彩蛋之失败

连载之四: 【PLC通信原理探秘】大讲堂幕后彩蛋之曙光

连载之五: 【PLC通信原理探秘】大讲堂幕后彩蛋之黑暗

连载之六: 【PLC通信原理探秘】大讲堂幕后彩蛋之破局

连载之七: 【PLC通信原理探秘】大讲堂幕后彩蛋之扬帆

连载之八: 【PLC通信原理探秘】大讲堂幕后彩蛋之柳暗

连载之九: 【PLC通信原理探秘】大讲堂幕后彩蛋之花明

连载之十: 【PLC通信原理探秘】大讲堂幕后彩蛋之远航


        Wireshark的应用可以让我清晰的看到数据报文的结构,能够充分的理解ISO/OSI参考模型的作用和意义。记得我以前学习Profibus,使用Amprolyzer软件也可以在Profibus上进行抓包,去看报文结构,可是在当时无论从哪个方面来说理解的都不够深入,所以甚少使用这个软件,其实现在想想这个软件绝对不比使用示波器去检测Profibus的故障弱,只是现在应用Profibus的机会越来越少,因为Profibus真的是已经进入夕阳阶段了。而现在是以太网的时代!

        还有,在使用Profibus组态S7通信的时候总能看见TSAP这个术语,虽然在Step7中由两个数字表示,但是在初学Profibus通信的时候也是一头雾水,不知道这个参数到底有什么作用,或者说这个参数如何解释。记得当时并未放在心上,因为组态和编程的时候都与这个参数无关,似乎就是起到了一个显示的作用。

        当我深入理解以太网,学习ISO/OSI参考模型时,这个参数再次浮出水面,使我不得不再次面对它。原来对于ISO/OSI参考模型的层与层之间都是依靠SAP,Service Access Point来进行联系的,也就是说层与层之间的交流依靠SAP,例如TSAP位于Transport Layer和Session Layer之间,取第4层传输层的首字母T和SAP来命名,其它层之间的SAP都是按照这个命名方式来实现的。通过在网上搜索资料来学习,发现ISO/OSI参考模型的TSAP就是TCP/IP模型中的Port。于是这一切都好理解了,反过来再看Profubus的S7通信,它使用的是ISO/OSI的参考模型,所以看到的只能是TSAP。

        再次回到Wireshark所抓到那些S7的报文,发现S7 PDU的大小是240B,而数据的大小肯定是小于240B,因为S7 PDU中还包含了S7 Header,这个S7报文头也占用一些字节。这也好理解,然而我看手册,包括前面提到的S7-300的PUT/GET通信的数据一致性大小是240B,那么我就开始怀疑了,通信数据一致性的大小是240B,而S7 PDU也是240B,那么真正的通信数据肯定小于240B,如果是按照手册所描述的那样,240B肯定是由两个帧中的S7数据构成的,既然是两个帧,不是同一时刻发送的数据,那么数据一致性如何保证呢?通过Step7在线帮助,可以看见当使用集成PN接口的S7-300时PUT/GET的数据一致性分别是212B,222B,再结合Wireshark,PUT和GET的帧中的S7数据确实和在线帮助的数据一致,这时,我觉得豁然开朗,如来如此!同时也说明300CPU手册中的240B的数据一致性的大小描述不准确。

        其实最早接触数据一致性的概念来自PII/PIQ,因为手册上说一个CPU的循环周期,PII/PIQ的数据保持不变,其实这不是某一个地址,而是整个PII/PIQ的地址区域。例如:默认S7-300中的过程映像区的大小是256B。了解数据一致性概念在当时也仅限于此,只是觉得在编程时这个概念很重要,记得以前做轧机项目,自己编写的卷径计算公式需要一些参数,来自于驱动的通信数据,这就要求这些数据要一致的,因为只有这样才能保证公式计算正确。这也说明理解这一概念,对于工程项目的编程肯定是有指导意义的。

        那么BSEND/BRECV的数据一致性也像手册中描述的是240B吗?常看手册,S7-300PLC可以最大进行32k的S7通信,S7-400PLC可以最大进行64k的S7通信,S7-300PLC能够保证240B的数据一致性,如果想要整个通信的数据区中的数据保持一致性,需要使用Done/NDR信号。

        通过Wireshark抓包,看见S7 PDU的大小仍然是240B,那么手册中的240B的数据一致性,是需要两个包来合成一个240B的S7数据吗?如果是这样,PLC是不是做的有些复杂?它在内部如何来保证呢?或者说是不是数据一致性不是240B?虽然Wireshark抓包可以看见S7 data的真实大小,例如S7通信的首包数据长度是204B,这就是真正的数据一致性的大小吗?如何证明呢?

        这确实又是一个难题,感觉刚刚出发,就在这里搁浅了,也感觉到解决它,前面一定是海阔天空!


----------未完待续----------

连载之十二: 【PLC通信原理探秘】大讲堂幕后彩蛋之有谁

连 载 汇 总 : 【PLC通信原理探秘】系列连载故事汇总


【PLC通信原理探秘】大讲堂幕后彩蛋之搁浅 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

西家技术派

共有64条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。