【PLC通信原理探祕】大講堂幕後彩蛋之擱淺

專家大講堂《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,這就是真正的數據一致性的大小嗎?如何證明呢?

        這確實又是一個難題,感覺剛剛出發,就在這裏擱淺了,也感覺到解決它,前面一定是海闊天空!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章