1. 程式人生 > >S7通訊協議之你不知道的事兒

S7通訊協議之你不知道的事兒

在電氣學習的路上,西門子PLC應該是我的啟蒙PLC,從早期的S7-300/400 PLC搭建Profibus-DP網路開始接觸,到後來的S7-200Smart PLC,再到現在的S7-1200/1500 PLC博途軟體,基本上西門子的每款PLC都接觸並使用過。

在上位機開發的路上,西門子PLC也一直是我鍾愛的一個品牌,仍然記得剛開始做的第一個上位機就是基於S7-300 PLC的S7協議。最近又將S7協議鞏固了一遍,發現了一些自己之前都不知道的事,這才發現,西門子S7協議是非常強大的一個協議。

1. S7協議之布林操作

對於布林操作,很多協議都有,但是這裡的布林操作是指暫存器布林,比如DB100.DBX0.0,很多時候,我們都是通過先讀取DB100.DBB0的值,再通過位運算結果,寫入到DB100.DBB0中,實現DB100.DBX0.0的操作,但是這種方式有弊端,第一:每次操作一個布林值都需要與PLC進行兩次資料互動,第二:安全性和穩定性無法保障,你不知道在你讀取和寫入之間,這個位元組的值是否已經發生了改變。

這樣的問題也存在於Modbus協議的暫存器位操作,如40001.05,三菱、歐姆龍的暫存器位操作,如D100.06、W12.04,給上位機開發者帶來很多苦惱。

但是S7協議支援直接位操作,有專門的報文指令實現這樣的功能。

2. S7協議之PDU讀取

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

S7協議的一次性讀取長度是根據PDU計算出來的,這個PDU的值是來自於PLC本身,不同型號的CPU,它的PDU是不一樣的,大家可以通過KepServer結合PLC來測試,如果手頭沒有PLC,可以關注本公眾號的一篇文章《手把手教你搭建西門子PLC模擬環境》。

圖表 1 S7-1200的PDU

圖表 2 S7-1500的PDU

經過研究發現,西門子PLC的PDU大小是和CPU息息相關的,一般會有240、480、960三個檔次,知道PDU之後,那麼一次性讀取的位元組長度,就是在PDU的基礎上減去18,這個18是指包頭包尾會有18個位元組,這樣我們就知道了一般的PLC,一次效能讀取222個位元組(240-18=222),但是對於S7-1516這樣的PLC,我們一次性是可以讀取942個位元組的(960-18=942),這個一次效能讀取的位元組越長,越能提高上位機的通訊效率。

但是剛剛的方式是通過KepServer測試的,實際開發過程中,該怎麼獲取CPU的PDU呢,實際上在建立連線的第二次握手時,返回的報文中就包含PDU的值。

圖表 3 S7-1200 PDU報文

第二次握手返回的報文長度是27個位元組,最後兩個位元組就是PDU的值,上圖展示的是S7-1200 PLC返回的報文,0和240的組合即為240。

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

圖表 4 S7-1500 PDU報文

雖然PDU是由硬體做了限制,但是我們可以通過軟體的方式,實現大量資料的讀取,只需要在底層做一些封裝即可。做了一下測試,針對S7-1200和S7-1500同時讀取M區的8000個位元組的耗時比較,S7-1200耗時800多ms,S7-1500耗時僅需200ms,由此可見,硬體對通訊的重要性。

圖表 5 S7-1200通訊耗時測試

圖表 6 S7-1500通訊耗時測試

1. S7協議之多組讀取

西門子S7協議其中的一個重要體現就在於可以同時讀取很多個不同的儲存區,最大支援19種,總共讀取長度仍然受PDU的限制。

對於很多其他的通訊協議,當我們遇到資料變數比較零散,同時讀取多個儲存區或者一個儲存區多個不同部分的時候,我們只能針對每個儲存區或者每塊區域做一個數據請求,但是西門子S7協議可以解決這樣的問題。

這裡我們仍然以實驗測試為例,體驗多組讀取帶來的美妙體驗。

假設我們的通訊組配置如下:

通訊組01:讀取I區從0開始的1個位元組

通訊組02:讀取Q區從0開始的1個位元組

通訊組03:讀取M區從0開始的200個位元組

通訊組04:讀取M區從500開始的50個位元組

通訊組05:讀取M區從1000開始的60個位元組

通訊組06:讀取DB100從0開始的20個位元組 

通訊組07:讀取DB100從20開始的20個位元組 

通訊組08:讀取DB100從40開始的20個位元組 

通訊組09:讀取DB100從60開始的20個位元組 

 

我們採用常用S7-1200PLC,基於CMS配置軟體實現配置之後,開始通訊測試,首先我們選擇的是單組讀取的方式,就是針對每個組,依次進行讀取,結果如下,耗時大約200ms,這個時間應該相對來說還是比較正常的。

圖表 7 S7-1200PLC單組讀取

緊接著,我將讀取方式改成了多組讀取,再進行測試發現結果如下:

圖表 8 S7-1200PLC多組讀取

通過結果發現,多組讀取對於儲存區較為零散的專案來說,有著非常重要的作用,可以大大提高通訊效率。

歡迎關注微信公眾號:thinger_swj

抖音號請掃碼關注:

相關推薦

S7通訊協議知道事兒

在電氣學習的路上,西門子PLC應該是我的啟蒙PLC,從早期的S7-300/400 PLC搭建Profibus-DP網路開始接觸,到後來的S7-200Smart PLC,再到現在的S7-1200/1500 PLC博途軟體,基本上西門子的每款PLC都接觸並使用過。 在上位機開發的路上,西門子PLC也一直是我鍾愛的

正則表達式知道的replace

執行 兩個 引擎 logs blog 學無止境 div 國慶節 另一個 我們都知道js內置類String提供了一個replace方法,可以把指定字符串替換為另一個字符串,他的基礎用法如下: 1 var str="hello world"; 2 3 var str=str

css知道的元素隱藏

空間 hidden 產生 style ott 渲染 部分 div pre 前言:說到元素隱藏,大部分人會想到display:none和visbility:hidden;但是實際上關於元素隱藏還分多種情況,比如是否占據空間,隱藏之後是否可以觸發點擊事件等情況 css元素隱藏種

JavaScript知道的this

很重要的一句話 只有深諳了this,你才有可能用 JavaScript 建立類似谷歌地圖這樣大型的複雜應用 一、這篇文章出現的背景 1. this在我們開發過程中的重要性(開發場景) -- 通過一段程式碼簡單瞭解this 提供了一種更優雅的方式來隱式”傳遞”一個物件引用, 讓API

python資料分析知道的bra

  曾經,我把目光放在你身體上四分位的地方,發現了世界的美好。。。 之後,山水流轉,時光荏苒,不再從前。。。 此一文,獻給過往。 先上張圖:好奇怪,為什麼是這麼個比例[皺眉] 這篇文章分為兩個部分,python爬蟲和資料分析。爬取京東bra一些資料,並進行分析

知道的HTTPHTTPS

發的 graph 實的 layer 這份 方式 發送 機構 加密 確保web安全的HTTPS   HTTPS=HTTP+ 加密 + 認證 + 完整性保護   1、加密:     1)通信的加密       所謂互聯網,是由能連通到全世界的網絡組成的。無論世界哪個角 落的服務

知道的HTTP首部字段一覽

warning erer 標記 字段 expec 已過期 gpo table 主體 一、HTTP/1.1 首部字段一覽   HTTP 首部字段根據實際用途被分為以下 4 種類型:   1、通用首部字段:請求報文和響應報文兩方都會使用的首部。 首部字段名 說明 Ca

對,飛哥就是做安全建設的,內網安全有知道事兒

內網安全who am i 各位博友見置頂博客第一章。信息安全從業7年,帽子沒有白過,也沒有在烏雲等src留過名,但是各位hacker的動機和大事我也關註過,一直從事於企業安全防護工作,識別內網資產的脆弱性,讓hacker小哥哥們不是那麽特別輕易拿下數據和網絡及站點。熱愛生活,熱愛自由。一路走來,沒有敵人,都是

阿裏,京東,淘寶,美團,那些知道事兒

大眾 商業 business 抽象 模式 運營 公司 銷售 tom B2B即business to business,2是to的諧音,即企業與企業之間,商家與商家之間,通過互聯網進行產品、服務及信息的交換。 交易的供需雙方都是商家(或企業、公司)。如:阿裏巴巴就是這種模式的

【JS】《知道的JavaScript》 物件

簡單基本型別(string、boolean、number、null、undefined)本身並不是物件,但是typeof null時會返回字串‘object’。但實際上,null本身是基本型別。 原理是這樣的。不同的物件在底層都表示二進位制,在js中二進位制前三位都為0的話會被判斷為object

知道的js組合函式

組合函式:自己喜歡把他理解成複合函式,多個功能的呼叫。(對一個數據多次回撥處理) 不廢話,上程式碼 function compose(f, g) { return function (x) { return f(g(x)) } } func

知道的 JavaScript(上中下卷)》pdf附網盤下載連結+(附一個菜鳥的java學習路)

技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

知道的css標籤選擇器效果

今天自己在學習的時候無意間發現CSS的世界是神奇的。 總有一些實用的CSS技巧,來解決我們在實際專案開發中遇到的的問題。 不知什麼原因,在很多專案中,實現諸如單選,複選等(類似)功能(包括如圖

C++知道的那些事兒—C++語言的15個晦澀特性

這個列表收集了 C++ 語言的一些晦澀(Obscure)特性,是我經年累月研究這門語言的各個方面收集起來的。C++非常龐大,我總是能學到一些新知識。即使你對C++已瞭如指掌,也希望你能從列表中學到一些東西。下面列舉的特性,根據晦澀程度由淺入深進行排序。 1. 方括號的真正含義 2. 最煩人的解析 3

知道的js隱式強制型別轉換

你不知道的js之隱式強制型別轉換 1.| |和&& 注: undefined null false +0 -0 NaN ” ” 以上為假值,其餘都是boolean真值 &a

迴圈與閉包 for迴圈經典問題解釋 / 結合《知道的JS》與《高程》案例

案例一 for (var i = 1; i <= 5; i++) { setTimeout( function timer() { console.log(i); }, i*1000) } 輸出結果: 當時間是固定的數,如0、1

[Android 美] 那些知道的APK 瘦身,讓的APK更小

[Android 之美] APK 瘦身,減少APK的大小 讓我們的apk檔案儘可能更小,移除那些未使用的程式碼和資原始檔。本章節介紹瞭如何做到讓APK更小,效能更好,下載轉化率會更高,以及如何指定在構建APK過程中保留或移除專案中的程式碼和資源,在我們還

知道:提高編譯速度

大專案中稍不注意,編譯連結速度就逐漸變慢。如果沒人關心這個問題(就像我現在這個公司),專案開發效率就會降低,軟體質量下降。程式設計師有充足的理由怠工和玩手機(因為正在編譯),這些精力本應該投入到對軟體的思考上去的。如果專案經理繼續忽略這個問題,這個問題早晚會爆發出來,可能是

Android50個知道的使用竅門

今天給大家分享下安卓系統的安卓手機的使用技巧方法,以時下最為普遍最主流的Android 2.3系統為例,不過大部分使用技巧在其他版本的安卓系統上同樣適用。   1.使用Android電源管理widget從Android2.1系統開始內建了一個非常強大的帶能源管理widget

關於 Android N 那些知道事兒

今年3月,Google 破天荒提前半年釋出了 Android N 開發者預覽版。當然,作為一個不合格的穀粉並沒有第一時間體驗安裝,因為至今仍然能夠回憶起來去年今日此門中(霧)興沖沖刷了 Android M Preview 的時候發現各種 Crash 就連微信也(