|
今天還有人問(wèn)我modbus的問(wèn)題,就想把著自己對(duì)于這個(gè)簡(jiǎn)單協(xié)議的一點(diǎn)小理解寫(xiě)了出來(lái),一是方便一些朋友查閱,另外也是為了防止遺忘。當(dāng)然水平有限可能有錯(cuò)誤或者不準(zhǔn)確之處,真誠(chéng)的歡迎大家批評(píng)指正,讓我與您共同進(jìn)步。
1. 有了RTU為啥還要ascii?
個(gè)人理解認(rèn)為,ascii主要是為了在終端上使用(想想linux為啥都是在命令行下面就好理解了),方便看到通訊的過(guò)程,經(jīng)常在樓宇等對(duì)控制要求不高的領(lǐng)域會(huì)采用。這也就可以解釋了為啥在ascii有加了頭尾,既然是為了看,那就看的清楚些。
2. Modbus和J-bus以及M-bus分別是什么關(guān)系?
Mobus和JBus是近親,與M-Bus沒(méi)有任何關(guān)系。
J-Bus基本采用了Modbus的幀結(jié)構(gòu)和定義,僅僅是在寄存器的地址方面有些區(qū)別。
M-Bus的全稱(chēng)是Meter-Bus,是儀表總線(xiàn),歐洲使用的較多,幀結(jié)構(gòu)是給予iec60870的,順便提一句,Profibus的幀結(jié)構(gòu)也是給予Iec60870的。
3.Modbus的其實(shí)地址到底是0還是1?
這個(gè)問(wèn)題現(xiàn)在比較混亂,怎么用的都有,這也是Modbus不好的一個(gè)小地方。因?yàn)閙odbus是modicon發(fā)明的,自然他的寄存器地址的排布是從1開(kāi)始的,但是在通訊的時(shí)候又是從0開(kāi)始的,這也是顯然的,0如果不使用,不是浪費(fèi)么。這就導(dǎo)致了混亂,寄存器定義部分和協(xié)議定義部分一致起來(lái),就不會(huì)產(chǎn)生歧義了。如果讀取的都是整個(gè)寄存器,一般很容易發(fā)現(xiàn)錯(cuò)位的問(wèn)題,但是如果都是浮點(diǎn)類(lèi)型,就很難發(fā)現(xiàn)了,本人就見(jiàn)到N多人在這個(gè)問(wèn)題上被卡過(guò)。
4.Modbus的最大缺點(diǎn)是什么?
modbsu的缺點(diǎn)太多(比如幀序號(hào),比如數(shù)據(jù)類(lèi)型太少,還比如輪訓(xùn)效率太低,。。。。。),一時(shí)還真說(shuō)不好哪一個(gè)是最,非要說(shuō)一個(gè)那就是,沒(méi)有幀序號(hào)吧,如果從設(shè)備應(yīng)答的慢了,主設(shè)備讀取下一幀數(shù)據(jù),這個(gè)時(shí)候恰好從設(shè)備回復(fù)上一幀的數(shù)據(jù),就會(huì)導(dǎo)致錯(cuò)誤,這樣的情況是真實(shí)發(fā)生過(guò)的。
5.RTU和TCP有何不同?
基本是相同,主要有兩點(diǎn)。一個(gè)是tcp加了幀序號(hào),是針對(duì)問(wèn)題4的解決辦法(rtu之所以沒(méi)有升級(jí),增加序號(hào),是因?yàn)榘l(fā)生的概率較小,但是在網(wǎng)絡(luò)上這樣的情況是有很大可能性發(fā)生的)
第二個(gè)就是tcp幀本身有了校驗(yàn),就不需要modbus的校驗(yàn)了
6.寄存器地址必須是00001至09999是離散輸出(線(xiàn)圈)
10001至19999是離散輸入(觸點(diǎn))
30001至39999是輸入寄存器(通常是模擬量輸入)
40001至49999是保持寄存器
?
不是的。事實(shí)上modbus是有兩種地址排布模式,也就是“separate block”方式和“one block”方式,前一種很常見(jiàn),很多廠家都采用這樣的方式,后一種也有一些比如一些空調(diào)設(shè)備廠家的就是這樣的。
第一種不同的寄存器是不同的地址;
第二種不同的寄存器實(shí)際上是重疊的。
7.Modbustcp的端口號(hào)?
502,相信很多人都知道,這是唯一分給工業(yè)標(biāo)準(zhǔn)的端口號(hào),自豪去吧。當(dāng)然了,實(shí)際應(yīng)用中不見(jiàn)得非要用這個(gè),只要兩端對(duì)應(yīng)好就可以了。
8.modbus符合Iso/OSI模型么?
其實(shí)我我個(gè)人認(rèn)為不太符合,盡管這兩年modbus基金會(huì),吧他的協(xié)議問(wèn)題都分層分塊了,但是最開(kāi)始設(shè)計(jì)的時(shí)候就不是給予這個(gè)結(jié)構(gòu)考慮的,后往上靠,總讓人覺(jué)得不倫不類(lèi)的。
9.Daniel/enron/OMNI MODBUS是啥?
modbus的擴(kuò)充標(biāo)準(zhǔn),主要是數(shù)據(jù)類(lèi)型做了擴(kuò)充。其實(shí)標(biāo)準(zhǔn)就像是路,走的人多了,路也就成為路了。
10.modbus浮點(diǎn)數(shù)為啥有4個(gè)順序?
因?yàn)橐粋(gè)浮點(diǎn)數(shù)占用4個(gè)字節(jié),2個(gè)寄存器,因?yàn)闃?biāo)準(zhǔn)沒(méi)有規(guī)定浮點(diǎn)數(shù)咋讀取(好像是modbus制定的時(shí)候浮點(diǎn)數(shù)標(biāo)準(zhǔn)還沒(méi)有制定呢),人們?cè)趺刺幚淼亩加校R?jiàn)的就是4個(gè)字節(jié)的處理辦法,但是就算是都用了4個(gè)字節(jié),但是大家的順序還是千奇百怪(說(shuō)是千奇百怪,實(shí)際上就4種)
11.rtps是啥?
寫(xiě)到了這里,發(fā)現(xiàn)題目弄錯(cuò)了,但是也懶得修改了,現(xiàn)今啥都喜歡弄個(gè)十大,咱也就不改了,嘿嘿。
隨著工業(yè)以太網(wǎng)的熱火朝天,modbus -tcp/ip與其他的工業(yè)以太網(wǎng)協(xié)議相比,明顯弱了很多。所以modbus基金會(huì)趕緊制定了rtps,主要是趕上這一波。主要是增加了發(fā)布和訂閱機(jī)制。這里補(bǔ)充說(shuō)明一些,發(fā)布和訂閱機(jī)制已經(jīng)在很多協(xié)議和規(guī)范里面采用了(比如OPC,bacnet, IEC61850.。。。。。),在現(xiàn)今如果說(shuō)一個(gè)以太網(wǎng)的協(xié)議還不支持這個(gè),確實(shí)有點(diǎn)說(shuō)不過(guò)去了。
|
|