萬泉河
WX:ZHO6371995,歡迎+
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 129 個
工控威望: 245 點
下載積分: 829 分
在線時間: 11(小時)
注冊時間: 2021-06-11
最后登錄: 2024-09-08
查看萬泉河的 主題 / 回貼
樓主  發(fā)表于: 2022-10-26 23:00
1026 【萬泉河】優(yōu)雅到極致的MODBUS庫函數(shù)計劃

在工控行業(yè),無論使用哪一個品牌平臺的PLC, MODBUS都是其中最重頭的通訊協(xié)議。 而因為MODBUS通訊協(xié)議性質(zhì)本身,實現(xiàn)通訊有一定的難度。 而且每做一個新項目,通訊程序都還要重新再調(diào)試一遍,所以比較頭疼。 這是因為MODBUS的輪尋機制是必須在程序中編程實現(xiàn)。

比如一個COM端口, 一條485總線上面掛了N個MODBUS設(shè)備, 那么就需要做循環(huán),對每個設(shè)備的每個數(shù)據(jù)區(qū)輪番做READ或者WRITE查詢。而如果設(shè)備的類型不同, 還需要每個單獨處理數(shù)據(jù)區(qū)和數(shù)據(jù)。

這一點在自動化項目時非常令人頭疼。 所以,大家伙在入門之后,就不滿足于僅僅能實現(xiàn)通訊功能了, 紛紛摸索實現(xiàn)模塊化的方法,以期實現(xiàn)MODBUS通訊的優(yōu)雅實現(xiàn)。

然而,最優(yōu)雅的MODBUS通訊見過沒?

最理想的優(yōu)雅到極致的模塊化的實現(xiàn)方式應(yīng)該是:

比如485網(wǎng)絡(luò)上有一臺MODBUS通訊的DANFOSS變頻器,那么只需要一個完全定制封裝好的FB庫函數(shù):

拖到OB1程序來,管腳參數(shù)中標明這臺變頻器的MODBUS地址,然后就可以實現(xiàn)以通信方式的控制了。

當然不是指一定要直接在OB1中,而是指在OB1架構(gòu)下,只需要這一個模塊的一個調(diào)用。 除此之外所有類似于初始化,通訊握手等的指令,一概不需要做了。 因為全部在這一個模塊內(nèi)部實現(xiàn)了。

而如果有多個站,也只不過是再拖入調(diào)用多個實例。

而如果485總線上有多個類型的站點, 那么通過設(shè)計不同設(shè)備類型的FB, 也是同樣拖入,即可實現(xiàn)通訊功能。

這是在面向?qū)ο蠹軜?gòu),把設(shè)備全部都作為對象處理的情況下。 本人專著《PLC標準化編程原理與方法》中P149頁開始的2個節(jié)有介紹過。

書中介紹的變頻器是ABB,而本文中發(fā)的是DANFOSS。即,其實我們在后期隨著工程應(yīng)用的需要,已經(jīng)把這2個品牌型號的變頻器的通訊控制都做成了庫函數(shù)。

而在非面向?qū)ο蟮募軜?gòu)下, 比如文章《0905 【萬泉河】80模擬量例子程序升級版V2.0》中介紹的使用MODBUS通訊的遠程IO, 則可以使用低一層的封裝塊:


其中數(shù)據(jù)區(qū)BUFF,指向了一個定義好的全局數(shù)據(jù)塊:

這樣數(shù)據(jù)塊中的數(shù)組內(nèi)的數(shù)值4X[1]就直接代表了此站點模塊的40001通道的數(shù)值,就可以直接在程序中使用了。

注意看到上面的FB的管腳都有一個SUBNET, 含義是如果1個PLC系統(tǒng)內(nèi)有多條485的總線,也是可以的。 比如需要通信的站點比較多,在一個總線上面輪詢的周期太長, 數(shù)據(jù)刷新不夠快的情況下,可以通過增加PTP模塊或者MODBUS TCP轉(zhuǎn)RTU網(wǎng)關(guān)的方式,增加到多條總線。

而在設(shè)備的參數(shù)部分,只需要輸入總線編號和站地址,就可以區(qū)分了。

前面的介紹沒有區(qū)分MODBUS RTU和TCP, 其實這兩者都是需要輪詢的。 即便是TCP,理論上講可以使用多個端口同時通訊,但在實際操作中,PLC系統(tǒng)分配給TCP通訊的通訊資源是有限制的。 如果要同時通訊, 一個站點的讀和寫就要分別占用了2個端口,資源會快速耗盡。

而在MODBUS TCP的協(xié)議定義中,也仍然有站地址的標記,我們現(xiàn)在知道了,是為了TCP/RTU的網(wǎng)關(guān)設(shè)計的,即當使用網(wǎng)關(guān)把485總線轉(zhuǎn)換為以太網(wǎng)之后,報文中仍然需要有站地址的區(qū)分, 以實現(xiàn)一整條485總線上的所有從站的數(shù)據(jù),都可以有區(qū)分地被主站讀取。

我們設(shè)計的SUBNET網(wǎng)絡(luò)的定義,在100以下為RTU,而100以上為TCP,由此實現(xiàn)了通用兼容。

這些功能,在書中只是做了介紹,但并沒有直接講解實現(xiàn)的代碼。 因為這些是屬于底層的搭建庫的需要,書中只是介紹方法,具體的設(shè)計工作仍然需要工程師各自實現(xiàn)。

甚至對煙臺方法的學員,這部分的庫和代碼也并沒有提供。 煙臺方法提供的只是思想架構(gòu)方法,并不提供程序代碼,更不承擔代碼正確的責任。 這是煙臺方法和市面上的制作庫函數(shù)售賣或者分享的一些個人不同。因為做的是完全不同的事情。

甚至, 我也鼓勵一些學員可以嘗試使用各種各樣的現(xiàn)成的庫函數(shù)來做自己公司的標準化項目。那些庫函數(shù),在標準化煙臺方法的眼里,都是基石,可以選擇用來蓋房子的磚頭。 而煙臺方法是幫助工程師搭建房子的順序方法,每個公司各自的企業(yè)標準就是所謂的房子。

那么,這套MODBUS的庫函數(shù),本質(zhì)上也是磚頭。 是用來實現(xiàn)標準化的模塊。當然是有相關(guān)功能需求的公司才需要,而沒有用到MODBUS的公司則不需要。

這套庫函數(shù),我已經(jīng)開發(fā)完成將近三年了。 而三年中,我們自己的項目在不斷使用,并打磨,逐漸升級完善。 而對外,則只是一小段時間內(nèi)做過小范圍的出售。 大部分時間里則是雪藏的。并沒有過多宣傳,也沒有推廣。

最近,有學員和網(wǎng)友來咨詢在西門子之外的PLC平臺實現(xiàn)的方法,加上我自己正在編著《三菱PLC標準化編程煙臺方法》的專著,對MODBUS部分庫的欠缺,也有些焦慮。

所以,有計劃把這套庫函數(shù)再次拿出來,以低成本的方式分享給同行。

分享的目的主要是為了擴展。通過擴展,建立一個比較龐大齊全的生態(tài)社區(qū)。

擴展分兩個維度。

首先是設(shè)備的類型,比如支持MODBUS的各種現(xiàn)場設(shè)備如變頻器,儀表等等,都需要封裝成專用的庫函數(shù)。做好了之后需要的時候, 從目錄中找到對應(yīng)型號的庫函數(shù),直接拖入使用即可。

這部分的技術(shù)難度比較小。 比如從ABB變頻器到DANFOSS變頻器,只不過是各自的參數(shù)地址不同, 控制字和狀態(tài)字的定義不同,制作時只需要照貓畫虎,在原有的庫函數(shù)基礎(chǔ)上改一改,參數(shù)部分改好了, 經(jīng)過實際應(yīng)用檢驗通過了,就可以反饋加入到列表中,這樣再有人需要的時候,就可以直接使用了。而不需要再去翻手冊找參數(shù),調(diào)試實驗通訊。

另一個維度的擴展是不同的PLC品牌和型號,這部分的難度比較大。 我目前已經(jīng)做了2個系列,分別是SIEMENS S7-1200/1500和S7-200 SMART。 而其它的品牌的PLC, 我雖然大都已經(jīng)開發(fā)了標準化方法,但MODBUS通訊部分, 目前基本空白。 甚至,大部分品牌的基本的MODBUS 通信我都不會,因為沒做過。

當然,主要還是我個人目前為止,這兩個維度上的需求都沒有。 而要擴展到那么多的自動化產(chǎn)品廠家,工作量也是巨大的。

所以,希望的是群策群力,大家一同貢獻, 一同分享的模式。 所有有能力有興趣的同行一起來做這件事,大家一起貢獻,同時又可以都有回報。

這就需要一個比較完善的分享和貢獻回饋機制,而不是簡單一個免費分享能做到的。

具體的分享方法,會在近期整理推出,當然也不會一次性固化,先搞一個基本的架構(gòu)做起來,以后再持續(xù)完善。

在此期間, 也歡迎同行給我私信提供寶貴建議。

我預(yù)期的是,將來實現(xiàn)MODBUS通訊的人工調(diào)試成本大幅度降低。 比如有人要做某個PLC與某個設(shè)備的MODBUS通訊,只需要來我們這里翻一翻庫里的目錄,選擇好,拿去直接使用,一次性使用費用在幾十元以內(nèi),如果有多個類型的設(shè)備,加起來也不過幾百元。 比起個人摳摳搜搜搭臺子做實驗,要簡便和高效地多。 尤其不需要個人獨立面對通訊失敗的糟糕局面了。 購買之后,有相應(yīng)的開發(fā)者在后臺輔助服務(wù)。

我在剛開始做這套庫函數(shù)的開發(fā)的時候,寫過文章《【萬泉河】MODBUS并行通訊實現(xiàn)》
https://mp.weixin.qq.com/s/PZX-E3PKicYADcA_yzNlIg
然后就有看不懂的杠子手來杠我不懂常識, MODBUS跑的物理介質(zhì)都是485總線是串行的, 并不能并行,指責我怎么可以并行通訊。

廢話, 如果它天生支持并行,就沒我什么事了。 恰恰因為他底層是串行,我們才可以通過自己的努力,在應(yīng)用層面實現(xiàn)一個貌似的并行,哪怕是偽并行,也是我們能做到的貢獻。

那么,我們以后就為這套庫機制專門起個名字,就叫優(yōu)雅MODBUS庫好了。 翻譯到英文,我稱其為Grace Modbus Library ,簡稱GML。優(yōu)雅庫為優(yōu)雅煙臺方法服務(wù),也可以為未使用煙臺方法的同行服務(wù)。

有老外做過一個開源的REXHIP項目,我研究過也分享過。 但我對他的實現(xiàn)方法不滿意。 認為比我現(xiàn)在做到的優(yōu)雅程度還差許多。所以不贊成加入他們的開源貢獻計劃, 而是搞一套我們中國人自己的庫。
附件: 1026 【萬泉河】優(yōu)雅到極致的MODBUS庫函數(shù)計劃.pdf (204 K) 下載次數(shù):68
網(wǎng)站提示: 請不要用迅雷下載附件,容易出錯