MODBUS協(xié)議軟件開(kāi)發(fā)(modbus協(xié)議實(shí)現(xiàn))
1、相關(guān)話(huà)題:第四次工業(yè)革命
我國(guó)提出了中國(guó)制造2025計(jì)劃,同樣,德國(guó)也提出了工業(yè)4.0計(jì)劃,無(wú)疑,這是當(dāng)前最熱門(mén)的技術(shù)方向之一,甚至有很多人將之稱(chēng)為“第四次工業(yè)革命”。
到現(xiàn)在為止,人類(lèi)歷史上共出現(xiàn)四次工業(yè)革命:
第一次工業(yè)革命:以蒸汽機(jī)的發(fā)明為標(biāo)志,發(fā)源地是英國(guó);第一次工業(yè)革命使得英國(guó)成為全球第一強(qiáng)國(guó);
第二次工業(yè)革命:以內(nèi)燃機(jī)的發(fā)明為標(biāo)志,發(fā)源地是德國(guó);第二次工業(yè)革命使得德國(guó)一躍成為全球強(qiáng)國(guó),美國(guó)也緊緊抓住第二次工業(yè)革命的機(jī)遇,成為全球第一強(qiáng)國(guó);
第三次工業(yè)革命:以計(jì)算機(jī)技術(shù)為標(biāo)志,發(fā)源地是美國(guó);第三次工業(yè)革命讓美國(guó)保持了數(shù)十年全球霸主的地位。
目前全球各國(guó)關(guān)注的第四次工業(yè)革命,普遍的觀點(diǎn)是以“AI 制造”為標(biāo)志,從目前的發(fā)展態(tài)勢(shì)來(lái)看,最可能取得第四次工業(yè)革命成功的國(guó)家是中國(guó)或美國(guó)。
第四次工業(yè)革命方興未艾,使得制造業(yè)的提升成為全球關(guān)注的中心,大量從事軟件開(kāi)發(fā)的工程師,也將目光投向工業(yè)制造,因此PLC與MODBUS也越來(lái)越熱。
2、可編程邏輯控制器PLC
PLC,Programmable Logic Controller,可編程邏輯控制器。
PLC可以被看成用在工業(yè)控制的微處理器,PLC包含CPU、內(nèi)存、I/O、數(shù)模轉(zhuǎn)換單元。
PLC具有穩(wěn)定性高、可擴(kuò)展性強(qiáng),因而在工業(yè)控制領(lǐng)域得到廣泛應(yīng)用。
與此同時(shí),PLC為工程技術(shù)人員提供圖形化編程接口,學(xué)習(xí)起來(lái)非常容易,不需要計(jì)算機(jī)專(zhuān)業(yè)知識(shí)也能進(jìn)行工業(yè)控制的程序編寫(xiě),因此深受工程技術(shù)人員的喜愛(ài)。
3、MODBUS協(xié)議
PLC的應(yīng)用,使得工業(yè)制造的數(shù)字化提升了一大步。如何利用收集的數(shù)據(jù),進(jìn)行分析,然后對(duì)工業(yè)制造過(guò)程進(jìn)行優(yōu)化,是工業(yè)制造能力提升的關(guān)鍵。
MODBUS協(xié)議1979年由德國(guó)施耐德電氣公司(準(zhǔn)確講是施耐德公司的前身Modicon公司)發(fā)表,隨即得到廣泛的關(guān)注與應(yīng)用。
MODBUS協(xié)議的提出,是為了讓擁有PLC能力的自動(dòng)化設(shè)備,進(jìn)一步擁有通信能力。
MODBUS協(xié)議得到廣泛應(yīng)用的原因有:
(1)免費(fèi);
(2)易于使用;
(3)應(yīng)用的可擴(kuò)展能力強(qiáng)。
4、MODBUS協(xié)議
MODBUS協(xié)議很容易獲得,進(jìn)入modbus官網(wǎng),即可下載協(xié)議文檔。
當(dāng)前最新的版本是《Modbus_Application_Protocol_V1_1b3》,僅有50頁(yè),感興趣的讀者可以自行下載和閱讀。
5、MODBUS協(xié)議的層次
MODBUS雖然應(yīng)用于工業(yè)制造領(lǐng)域,但是協(xié)議對(duì)網(wǎng)絡(luò)承載層的適應(yīng)性很強(qiáng)。
從網(wǎng)絡(luò)分層的角度來(lái)看,我們可以把MODBUS看成應(yīng)用層協(xié)議。這兩年來(lái),我接觸過(guò)下面類(lèi)型MODBUS協(xié)議:
MODBUS on TCP
MODBUS on UDP
MODBUS on RS-232
MODBUS on RS-422
MODBUS on RS-485
上述各種MODBUS協(xié)議實(shí)現(xiàn),很容易實(shí)現(xiàn)互聯(lián)互通。
下圖是MODBUS的網(wǎng)絡(luò)分層圖:
6、MODBUS協(xié)議定義
MODBUS協(xié)議有兩種模式:MODBUS RTU和MODBUS ASCII,前者為二進(jìn)制格式,后者為ASCII格式??紤]到MODBUS RTU格式更緊湊,處理起來(lái)速度更快,實(shí)際使用中,主要采用MODBUS RTU。
MODBUS協(xié)議定義了兩個(gè)名詞:
ADU,Application Data Unit,應(yīng)用數(shù)據(jù)單元;
PDU,Protocol Data Unit,協(xié)議數(shù)據(jù)單元;
考慮到MODBUS數(shù)據(jù)報(bào)文幀僅僅由四部分組成,非常緊湊,實(shí)際使用中,大多數(shù)開(kāi)發(fā)人員并不關(guān)心ADU和PDU這兩個(gè)名詞。
MODBUS數(shù)據(jù)報(bào)文幀的格式如下:
MODBUS數(shù)據(jù)報(bào)文幀四個(gè)部分的含義:
Additional addres:附加地址,用于標(biāo)識(shí)終端設(shè)施的地址;使用附加地址,MODBUS支持對(duì)多個(gè)終端通過(guò)總線收集數(shù)據(jù)、設(shè)置參數(shù);
Function code:功能碼,標(biāo)識(shí)對(duì)終端進(jìn)行的操作;
Data:報(bào)文幀包含的數(shù)據(jù)(可以為空);
Error check:CRC16校驗(yàn)碼。
7、MODBUS協(xié)議軟件的開(kāi)發(fā)
由于MODBUS協(xié)議實(shí)在太簡(jiǎn)單,并且由于MODBUS與承載層沒(méi)有相關(guān)性,導(dǎo)致MODBUS的軟件開(kāi)發(fā)特別容易,接到一個(gè)從未做過(guò)的新任務(wù),往往不到一天就可以初步開(kāi)發(fā)完成。
這是我前段時(shí)間寫(xiě)過(guò)的一段代碼,你會(huì)發(fā)現(xiàn),它簡(jiǎn)直簡(jiǎn)單到極點(diǎn):
adubytes[0] = slaveId;aduBytes[1] = FUNCTION_CODE_READ_HOLDING_REGISTERS;aduBytes[2] = (byte)((startAddress >> 8) & 0xFF);aduBytes[3] = (byte)(startAddress & 0xFF);aduBytes[4] = (byte)((registerQuantity >> 8) & 0xFF);aduBytes[5] = (byte)(registerQuantity & 0xFF);long crcValue = CommonUtil.getCrcValue(aduBytes, 0, 6);aduBytes[6] = (byte)(crcValue & 0xFF);aduBytes[7] = (byte)((crcValue >> 8) & 0xFF);
天有點(diǎn)晚了,隨手寫(xiě)了這篇文章,希望對(duì)MODBUS的開(kāi)發(fā)者有用。