最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

S7通信協(xié)議之你不知道的事兒

2021-10-18 16:18 作者:新閣教育  | 我要投稿


??????在電氣學(xué)習(xí)的路上,西門子PLC應(yīng)該是我的啟蒙PLC,從早期的S7-300/400PLC搭建Profibus-DP網(wǎng)絡(luò)開始接觸,到后來的S7-200Smart PLC,再到現(xiàn)在的S7-1200/1500 PLC博途軟件,基本上西門子的每款PLC都接觸并使用過。

??????在上位機(jī)開發(fā)的路上,西門子PLC也一直是我鐘愛的一個品牌,仍然記得剛開始做的第一個上位機(jī)就是基于S7-300 PLC的S7協(xié)議。最近又將S7協(xié)議鞏固了一遍,發(fā)現(xiàn)了一些自己之前都不知道的事,這才發(fā)現(xiàn),西門子S7協(xié)議是非常強(qiáng)大的一個協(xié)議。

S7協(xié)議之布爾操作

??????對于布爾操作,很多協(xié)議都有,但是這里的布爾操作是指寄存器布爾,比如DB100.DBX0.0,很多時候,我們都是通過先讀取DB100.DBB0的值,再通過位運(yùn)算結(jié)果,寫入到DB100.DBB0中,實(shí)現(xiàn)DB100.DBX0.0的操作,但是這種方式有弊端,

第一:每次操作一個布爾值都需要與PLC進(jìn)行兩次數(shù)據(jù)交互。

第二:安全性和穩(wěn)定性無法保障,你不知道在你讀取和寫入之間,這個字節(jié)的值是否已經(jīng)發(fā)生了改變。

??????這樣的問題也存在于Modbus協(xié)議的寄存器位操作,如40001.05,三菱、歐姆龍的寄存器位操作,如D100.06、W12.04,給上位機(jī)開發(fā)者帶來很多苦惱。

??????但是S7協(xié)議支持直接位操作,有專門的報(bào)文指令實(shí)現(xiàn)這樣的功能。

S7協(xié)議之PDU讀取

??????大部分人都知道S7協(xié)議一次性讀取有限制,但是具體是多少?怎么計(jì)算出來的?

????? S7協(xié)議的一次性讀取長度是根據(jù)PDU計(jì)算出來的,這個PDU的值是來自于PLC本身,不同型號的CPU,它的PDU是不一樣的,大家可以通過KepServer結(jié)合PLC來測試,如果手頭沒有PLC,可以關(guān)注本公眾號的一篇文章《手把手教你搭建西門子PLC仿真環(huán)境》。

? 經(jīng)過研究發(fā)現(xiàn),西門子PLC的PDU大小是和CPU息息相關(guān)的,一般會有240、480、960三個檔次,知道PDU之后,那么一次性讀取的字節(jié)長度,就是在PDU的基礎(chǔ)上減去18,這個18是指包頭包尾會有18個字節(jié),這樣我們就知道了一般的PLC,一次性能讀取222個字節(jié)(240-18=222),但是對于S7-1516這樣的PLC,我們一次性是可以讀取942個字節(jié)的(960-18=942),這個一次性能讀取的字節(jié)越長,越能提高上位機(jī)的通信效率。

??????但是剛剛的方式是通過KepServer測試的,實(shí)際開發(fā)過程中,該怎么獲取CPU的PDU呢,實(shí)際上在建立連接的第二次握手時,返回的報(bào)文中就包含PDU的值。

圖表 3 S7-1200 PDU報(bào)文

?第二次握手返回的報(bào)文長度是27個字節(jié),最后兩個字節(jié)就是PDU的值,上圖展示的是S7-1200PLC返回的報(bào)文,0和240的組合即為240。

????????對于S7-1500,我這里也做了一下測試,結(jié)果如下,返回結(jié)果為3和192,3和192的組合恰好是960(960=3*256+192)。

圖表 4 S7-1500 PDU報(bào)文

? ? ?雖然PDU是由硬件做了限制,但是我們可以通過軟件的方式,實(shí)現(xiàn)大量數(shù)據(jù)的讀取,只需要在底層做一些封裝即可。做了一下測試,針對S7-1200和S7-1500同時讀取M區(qū)的8000個字節(jié)的耗時比較,S7-1200耗時800多ms,S7-1500耗時僅需200ms,由此可見,硬件對通信的重要性。

圖表 5 S7-1200通信耗時測試
圖表 6 S7-1500通信耗時測試

S7協(xié)議之多組讀取

????? 西門子S7協(xié)議其中的一個重要體現(xiàn)就在于可以同時讀取很多個不同的存儲區(qū),最大支持19種,總共讀取長度仍然受PDU的限制。

??????對于很多其他的通信協(xié)議,當(dāng)我們遇到數(shù)據(jù)變量比較零散,同時讀取多個存儲區(qū)或者一個存儲區(qū)多個不同部分的時候,我們只能針對每個存儲區(qū)或者每塊區(qū)域做一個數(shù)據(jù)請求,但是西門子S7協(xié)議可以解決這樣的問題。

這里我們?nèi)匀灰詫?shí)驗(yàn)測試為例,體驗(yàn)多組讀取帶來的美妙體驗(yàn)。

假設(shè)我們的通信組配置如下:

通信組01:讀取I區(qū)從0開始的1個字節(jié)

通信組02:讀取Q區(qū)從0開始的1個字節(jié)

通信組03:讀取M區(qū)從0開始的200個字節(jié)

通信組04:讀取M區(qū)從500開始的50個字節(jié)

通信組05:讀取M區(qū)從1000開始的60個字節(jié)

通信組06:讀取DB100從0開始的20個字節(jié)?

通信組07:讀取DB100從20開始的20個字節(jié)?

通信組08:讀取DB100從40開始的20個字節(jié)?

通信組09:讀取DB100從60開始的20個字節(jié)


??????我們采用常用S7-1200PLC,基于CMS配置軟件實(shí)現(xiàn)配置之后,開始通信測試,首先我們選擇的是單組讀取的方式,就是針對每個組,依次進(jìn)行讀取,結(jié)果如下,耗時大約200ms,這個時間應(yīng)該相對來說還是比較正常的。

圖表 7 S7-1200PLC單組讀取

接著,將讀取方式改成了多組讀取,再進(jìn)行測試發(fā)現(xiàn)結(jié)果如下:


圖表 8 S7-1200PLC多組讀取

通過結(jié)果發(fā)現(xiàn),多組讀取對于存儲區(qū)較為零散的項(xiàng)目來說,有著非常重要的作用,可以大大提高通信效率。



S7通信協(xié)議之你不知道的事兒的評論 (共 條)

分享到微博請遵守國家法律
定日县| 台东市| 沾化县| 铁力市| 上虞市| 柏乡县| 姜堰市| 青川县| 玛纳斯县| 千阳县| 留坝县| 德江县| 辽源市| 额济纳旗| 新宁县| 安阳县| 安庆市| 宜章县| 明溪县| 淮滨县| 霍林郭勒市| 拜泉县| 遂溪县| 松阳县| 北碚区| 铁岭市| 石河子市| 吉首市| 多伦县| 皮山县| 利津县| 池州市| 高淳县| 临猗县| 阿坝县| 衡水市| 南雄市| 达尔| 漳州市| 邢台县| 历史|