萬(wàn)泉河
WX:ZHO6371995,歡迎+
級(jí)別: 略有小成
|
1026 【萬(wàn)泉河】?jī)?yōu)雅到極致的MODBUS庫(kù)函數(shù)計(jì)劃 在工控行業(yè),無(wú)論使用哪一個(gè)品牌平臺(tái)的PLC, MODBUS都是其中最重頭的通訊協(xié)議。 而因?yàn)镸ODBUS通訊協(xié)議性質(zhì)本身,實(shí)現(xiàn)通訊有一定的難度。 而且每做一個(gè)新項(xiàng)目,通訊程序都還要重新再調(diào)試一遍,所以比較頭疼。 這是因?yàn)镸ODBUS的輪尋機(jī)制是必須在程序中編程實(shí)現(xiàn)。 比如一個(gè)COM端口, 一條485總線上面掛了N個(gè)MODBUS設(shè)備, 那么就需要做循環(huán),對(duì)每個(gè)設(shè)備的每個(gè)數(shù)據(jù)區(qū)輪番做READ或者WRITE查詢。而如果設(shè)備的類型不同, 還需要每個(gè)單獨(dú)處理數(shù)據(jù)區(qū)和數(shù)據(jù)。 這一點(diǎn)在自動(dòng)化項(xiàng)目時(shí)非常令人頭疼。 所以,大家伙在入門之后,就不滿足于僅僅能實(shí)現(xiàn)通訊功能了, 紛紛摸索實(shí)現(xiàn)模塊化的方法,以期實(shí)現(xiàn)MODBUS通訊的優(yōu)雅實(shí)現(xiàn)。 然而,最優(yōu)雅的MODBUS通訊見過沒? 最理想的優(yōu)雅到極致的模塊化的實(shí)現(xiàn)方式應(yīng)該是: 比如485網(wǎng)絡(luò)上有一臺(tái)MODBUS通訊的DANFOSS變頻器,那么只需要一個(gè)完全定制封裝好的FB庫(kù)函數(shù): 拖到OB1程序來(lái),管腳參數(shù)中標(biāo)明這臺(tái)變頻器的MODBUS地址,然后就可以實(shí)現(xiàn)以通信方式的控制了。 當(dāng)然不是指一定要直接在OB1中,而是指在OB1架構(gòu)下,只需要這一個(gè)模塊的一個(gè)調(diào)用。 除此之外所有類似于初始化,通訊握手等的指令,一概不需要做了。 因?yàn)槿吭谶@一個(gè)模塊內(nèi)部實(shí)現(xiàn)了。 而如果有多個(gè)站,也只不過是再拖入調(diào)用多個(gè)實(shí)例。 而如果485總線上有多個(gè)類型的站點(diǎn), 那么通過設(shè)計(jì)不同設(shè)備類型的FB, 也是同樣拖入,即可實(shí)現(xiàn)通訊功能。 這是在面向?qū)ο蠹軜?gòu),把設(shè)備全部都作為對(duì)象處理的情況下。 本人專著《PLC標(biāo)準(zhǔn)化編程原理與方法》中P149頁(yè)開始的2個(gè)節(jié)有介紹過。 書中介紹的變頻器是ABB,而本文中發(fā)的是DANFOSS。即,其實(shí)我們?cè)诤笃陔S著工程應(yīng)用的需要,已經(jīng)把這2個(gè)品牌型號(hào)的變頻器的通訊控制都做成了庫(kù)函數(shù)。 而在非面向?qū)ο蟮募軜?gòu)下, 比如文章《0905 【萬(wàn)泉河】80模擬量例子程序升級(jí)版V2.0》中介紹的使用MODBUS通訊的遠(yuǎn)程IO, 則可以使用低一層的封裝塊: 其中數(shù)據(jù)區(qū)BUFF,指向了一個(gè)定義好的全局?jǐn)?shù)據(jù)塊: 這樣數(shù)據(jù)塊中的數(shù)組內(nèi)的數(shù)值4X[1]就直接代表了此站點(diǎn)模塊的40001通道的數(shù)值,就可以直接在程序中使用了。 注意看到上面的FB的管腳都有一個(gè)SUBNET, 含義是如果1個(gè)PLC系統(tǒng)內(nèi)有多條485的總線,也是可以的。 比如需要通信的站點(diǎn)比較多,在一個(gè)總線上面輪詢的周期太長(zhǎng), 數(shù)據(jù)刷新不夠快的情況下,可以通過增加PTP模塊或者M(jìn)ODBUS TCP轉(zhuǎn)RTU網(wǎng)關(guān)的方式,增加到多條總線。 而在設(shè)備的參數(shù)部分,只需要輸入總線編號(hào)和站地址,就可以區(qū)分了。 前面的介紹沒有區(qū)分MODBUS RTU和TCP, 其實(shí)這兩者都是需要輪詢的。 即便是TCP,理論上講可以使用多個(gè)端口同時(shí)通訊,但在實(shí)際操作中,PLC系統(tǒng)分配給TCP通訊的通訊資源是有限制的。 如果要同時(shí)通訊, 一個(gè)站點(diǎn)的讀和寫就要分別占用了2個(gè)端口,資源會(huì)快速耗盡。 而在MODBUS TCP的協(xié)議定義中,也仍然有站地址的標(biāo)記,我們現(xiàn)在知道了,是為了TCP/RTU的網(wǎng)關(guān)設(shè)計(jì)的,即當(dāng)使用網(wǎng)關(guān)把485總線轉(zhuǎn)換為以太網(wǎng)之后,報(bào)文中仍然需要有站地址的區(qū)分, 以實(shí)現(xiàn)一整條485總線上的所有從站的數(shù)據(jù),都可以有區(qū)分地被主站讀取。 我們?cè)O(shè)計(jì)的SUBNET網(wǎng)絡(luò)的定義,在100以下為RTU,而100以上為TCP,由此實(shí)現(xiàn)了通用兼容。 這些功能,在書中只是做了介紹,但并沒有直接講解實(shí)現(xiàn)的代碼。 因?yàn)檫@些是屬于底層的搭建庫(kù)的需要,書中只是介紹方法,具體的設(shè)計(jì)工作仍然需要工程師各自實(shí)現(xiàn)。 甚至對(duì)煙臺(tái)方法的學(xué)員,這部分的庫(kù)和代碼也并沒有提供。 煙臺(tái)方法提供的只是思想架構(gòu)方法,并不提供程序代碼,更不承擔(dān)代碼正確的責(zé)任。 這是煙臺(tái)方法和市面上的制作庫(kù)函數(shù)售賣或者分享的一些個(gè)人不同。因?yàn)樽龅氖峭耆煌氖虑椤? 甚至, 我也鼓勵(lì)一些學(xué)員可以嘗試使用各種各樣的現(xiàn)成的庫(kù)函數(shù)來(lái)做自己公司的標(biāo)準(zhǔn)化項(xiàng)目。那些庫(kù)函數(shù),在標(biāo)準(zhǔn)化煙臺(tái)方法的眼里,都是基石,可以選擇用來(lái)蓋房子的磚頭。 而煙臺(tái)方法是幫助工程師搭建房子的順序方法,每個(gè)公司各自的企業(yè)標(biāo)準(zhǔn)就是所謂的房子。 那么,這套MODBUS的庫(kù)函數(shù),本質(zhì)上也是磚頭。 是用來(lái)實(shí)現(xiàn)標(biāo)準(zhǔn)化的模塊。當(dāng)然是有相關(guān)功能需求的公司才需要,而沒有用到MODBUS的公司則不需要。 這套庫(kù)函數(shù),我已經(jīng)開發(fā)完成將近三年了。 而三年中,我們自己的項(xiàng)目在不斷使用,并打磨,逐漸升級(jí)完善。 而對(duì)外,則只是一小段時(shí)間內(nèi)做過小范圍的出售。 大部分時(shí)間里則是雪藏的。并沒有過多宣傳,也沒有推廣。 最近,有學(xué)員和網(wǎng)友來(lái)咨詢?cè)谖鏖T子之外的PLC平臺(tái)實(shí)現(xiàn)的方法,加上我自己正在編著《三菱PLC標(biāo)準(zhǔn)化編程煙臺(tái)方法》的專著,對(duì)MODBUS部分庫(kù)的欠缺,也有些焦慮。 所以,有計(jì)劃把這套庫(kù)函數(shù)再次拿出來(lái),以低成本的方式分享給同行。 分享的目的主要是為了擴(kuò)展。通過擴(kuò)展,建立一個(gè)比較龐大齊全的生態(tài)社區(qū)。 擴(kuò)展分兩個(gè)維度。 首先是設(shè)備的類型,比如支持MODBUS的各種現(xiàn)場(chǎng)設(shè)備如變頻器,儀表等等,都需要封裝成專用的庫(kù)函數(shù)。做好了之后需要的時(shí)候, 從目錄中找到對(duì)應(yīng)型號(hào)的庫(kù)函數(shù),直接拖入使用即可。 這部分的技術(shù)難度比較小。 比如從ABB變頻器到DANFOSS變頻器,只不過是各自的參數(shù)地址不同, 控制字和狀態(tài)字的定義不同,制作時(shí)只需要照貓畫虎,在原有的庫(kù)函數(shù)基礎(chǔ)上改一改,參數(shù)部分改好了, 經(jīng)過實(shí)際應(yīng)用檢驗(yàn)通過了,就可以反饋加入到列表中,這樣再有人需要的時(shí)候,就可以直接使用了。而不需要再去翻手冊(cè)找參數(shù),調(diào)試實(shí)驗(yàn)通訊。 另一個(gè)維度的擴(kuò)展是不同的PLC品牌和型號(hào),這部分的難度比較大。 我目前已經(jīng)做了2個(gè)系列,分別是SIEMENS S7-1200/1500和S7-200 SMART。 而其它的品牌的PLC, 我雖然大都已經(jīng)開發(fā)了標(biāo)準(zhǔn)化方法,但MODBUS通訊部分, 目前基本空白。 甚至,大部分品牌的基本的MODBUS 通信我都不會(huì),因?yàn)闆]做過。 當(dāng)然,主要還是我個(gè)人目前為止,這兩個(gè)維度上的需求都沒有。 而要擴(kuò)展到那么多的自動(dòng)化產(chǎn)品廠家,工作量也是巨大的。 所以,希望的是群策群力,大家一同貢獻(xiàn), 一同分享的模式。 所有有能力有興趣的同行一起來(lái)做這件事,大家一起貢獻(xiàn),同時(shí)又可以都有回報(bào)。 這就需要一個(gè)比較完善的分享和貢獻(xiàn)回饋機(jī)制,而不是簡(jiǎn)單一個(gè)免費(fèi)分享能做到的。 具體的分享方法,會(huì)在近期整理推出,當(dāng)然也不會(huì)一次性固化,先搞一個(gè)基本的架構(gòu)做起來(lái),以后再持續(xù)完善。 在此期間, 也歡迎同行給我私信提供寶貴建議。 我預(yù)期的是,將來(lái)實(shí)現(xiàn)MODBUS通訊的人工調(diào)試成本大幅度降低。 比如有人要做某個(gè)PLC與某個(gè)設(shè)備的MODBUS通訊,只需要來(lái)我們這里翻一翻庫(kù)里的目錄,選擇好,拿去直接使用,一次性使用費(fèi)用在幾十元以內(nèi),如果有多個(gè)類型的設(shè)備,加起來(lái)也不過幾百元。 比起個(gè)人摳摳搜搜搭臺(tái)子做實(shí)驗(yàn),要簡(jiǎn)便和高效地多。 尤其不需要個(gè)人獨(dú)立面對(duì)通訊失敗的糟糕局面了。 購(gòu)買之后,有相應(yīng)的開發(fā)者在后臺(tái)輔助服務(wù)。 我在剛開始做這套庫(kù)函數(shù)的開發(fā)的時(shí)候,寫過文章《【萬(wàn)泉河】MODBUS并行通訊實(shí)現(xiàn)》 https://mp.weixin.qq.com/s/PZX-E3PKicYADcA_yzNlIg 然后就有看不懂的杠子手來(lái)杠我不懂常識(shí), MODBUS跑的物理介質(zhì)都是485總線是串行的, 并不能并行,指責(zé)我怎么可以并行通訊。 廢話, 如果它天生支持并行,就沒我什么事了。 恰恰因?yàn)樗讓邮谴校覀儾趴梢酝ㄟ^自己的努力,在應(yīng)用層面實(shí)現(xiàn)一個(gè)貌似的并行,哪怕是偽并行,也是我們能做到的貢獻(xiàn)。 那么,我們以后就為這套庫(kù)機(jī)制專門起個(gè)名字,就叫優(yōu)雅MODBUS庫(kù)好了。 翻譯到英文,我稱其為Grace Modbus Library ,簡(jiǎn)稱GML。優(yōu)雅庫(kù)為優(yōu)雅煙臺(tái)方法服務(wù),也可以為未使用煙臺(tái)方法的同行服務(wù)。 有老外做過一個(gè)開源的REXHIP項(xiàng)目,我研究過也分享過。 但我對(duì)他的實(shí)現(xiàn)方法不滿意。 認(rèn)為比我現(xiàn)在做到的優(yōu)雅程度還差許多。所以不贊成加入他們的開源貢獻(xiàn)計(jì)劃, 而是搞一套我們中國(guó)人自己的庫(kù)。 |
---|---|
附件: 1026 【萬(wàn)泉河】?jī)?yōu)雅到極致的MODBUS庫(kù)函數(shù)計(jì)劃.pdf (204 K) 下載次數(shù):70
網(wǎng)站提示: 請(qǐng)不要用迅雷下載附件,容易出錯(cuò) |