目前不少的儀表使用Modbus RTU進(jìn)行數(shù)據(jù)傳輸,為了大家全面了解Modbus協(xié)議,昌暉儀表聊聊Modbus RTU協(xié)議存在的讀取數(shù)據(jù)量的限制和不支持寄存器位的寫入的兩個(gè)不足,昌暉儀表聊Modbus RTU協(xié)議的缺點(diǎn),并非否認(rèn)Modbus RTU協(xié)議是好協(xié)議的事實(shí),凡事均有兩面性,僅此而已。

1、讀取數(shù)據(jù)量的限制
下面這張圖表示的是Modbus RTU協(xié)議03功能碼的數(shù)據(jù)格式:

從上圖中可以看到從站返回?cái)?shù)據(jù)的數(shù)據(jù)個(gè)數(shù)(字節(jié)計(jì)數(shù))只占了1個(gè)字節(jié)。由于字節(jié)計(jì)數(shù)只占用1個(gè)字節(jié),導(dǎo)致讀取輸入/保持寄存器時(shí),一次性最多只能讀取127個(gè)寄存器(用代碼去讀),這個(gè)對(duì)于某些數(shù)據(jù)量非常大的場(chǎng)合,就需要讀取多次,才能讀取到所有的數(shù)據(jù),這樣通信效率必然會(huì)降低。
2、不支持寄存器位的寫入
Modbus常用的8個(gè)功能碼當(dāng)中,是沒(méi)有針對(duì)寄存器的位寫入的。所以當(dāng)我們需要給某個(gè)寄存器的某個(gè)位置位或者復(fù)位時(shí),就會(huì)變得非常麻煩。
我們一般的處理方式有兩種:
第一種方式:先讀取這個(gè)寄存器的值,然后再將這個(gè)值的某個(gè)位處理之后,將處理后的值進(jìn)行寫入,相當(dāng)于需要交互兩次才可以實(shí)現(xiàn),并且這種方式從某種角度上來(lái)說(shuō)是不安全的。
第二種方式:用一個(gè)寄存器代替一個(gè)位,寫入1表示為True,寫入0表示為False,這種方式可以單次交互實(shí)現(xiàn),但是會(huì)浪費(fèi)很多內(nèi)存空間。
Modbus RTU協(xié)議是1979年誕生,現(xiàn)在已經(jīng)應(yīng)用在成千上萬(wàn)個(gè)設(shè)備當(dāng)中,相信發(fā)明者肯定也知道這樣的問(wèn)題,但是無(wú)法統(tǒng)一去更改。也有人說(shuō)Modbus RTU協(xié)議的缺點(diǎn)不叫問(wèn)題,認(rèn)為Modbus RTU協(xié)議注定是不會(huì)改了,原因是用它的環(huán)境不會(huì)在乎這些缺點(diǎn),在乎這些缺點(diǎn)場(chǎng)合不會(huì)用這個(gè)協(xié)議。
大家怎么看,歡迎在評(píng)論區(qū)發(fā)表留言。
