我們先不要直接講Modbus協(xié)議,先聊聊家常,然后趁Modbus不注意,再去學(xué)它,就容易記住了。
Modbus協(xié)議,是1979年,Modicon公司發(fā)明的。而Modicon,也可以說就是現(xiàn)在的施耐德了。
別的設(shè)備支持不支持Modbus不知道,施耐德PLC肯定可以支持Modbus協(xié)議。
那時候網(wǎng)絡(luò),計算機都還不發(fā)達(dá),設(shè)備之間的通信,主要還是基于串口。
那Modbus協(xié)議發(fā)明主要是用來干嘛的呢。
那我們就先看Modicon是干嘛的。
Modicon公司是搞PLC的。那PLC又是什么呢。
接地氣地講,PLC是一種控制器,內(nèi)部可編程。反正就是工業(yè)領(lǐng)域生產(chǎn)非常重要的東西。
像PLC,傳感器等,就會有各種各樣的數(shù)據(jù),比如,門的開和關(guān),燈的亮和滅,溫度,濕度,流量,產(chǎn)量計數(shù),壓力,速度,位移等,各種各樣的數(shù)據(jù)。
往現(xiàn)在來說,你手機上有個APP,APP上有個按鈕,你一操作,你家的燈就開了。
在當(dāng)時來看,一臺控制器怎么知道另一臺控制器的數(shù)據(jù)呢。
總不能這么唐突的去要數(shù)據(jù)吧。
好,如果只是燈的開關(guān),可以用一根電線將兩個控制器接起來,十個開關(guān)就接十根線。
只要這根線有電,說明燈是亮的,線沒有電,燈就是滅的。
但溫度呢,總不能讓一個控制器靠近另一個控制器,你摸一下我燙不燙,冷不冷,渴不渴?
還有壓力值呢,總不能讓一個控制器去踩壓著另一個控制器的背,官人,你看這腳力合適不合適?
這不是有串口么,能不能把這些數(shù)據(jù),都通過這個串口來傳輸呢。
發(fā)明一種協(xié)議,然后可以在串口上進行數(shù)據(jù)交互,
真的是好辦法呀,這樣一來,對于主控制器來說,省事多了,就這么辦吧。
發(fā)明協(xié)議要有儀式感,我們總得給它起個名字吧。我們先開個會討論一下吧。
“要不我們就直接叫它Modicon Modbus吧”
“系不系傻,Modbus這個名字就是我們發(fā)明的,怎么能叫Modicon Modbus呢,再重新討論”
“首先這個是一種總線協(xié)議,肯定得以bus結(jié)尾吧?!?/p>
“嗯,沒錯,那就以bus結(jié)尾吧”
“叫Modicon-bus如何?”
“不行,得有我們老外的風(fēng)格,這名字一看就很中式?!?/p>
“取名字的前半部分?叫Modibus協(xié)議?”
“莫弟拔絲?讀著有點繞口吧?!?/p>
“Modbus呢,莫得拔絲,好寫又好記。”
“同意”
“同意”
“Good”
“大拇指,大拇指,大拇指”。
于是,偉大的Modbus協(xié)議的名字誕生了。
那這個協(xié)議要怎么用呢。
現(xiàn)在擺在面前有兩個設(shè)備,一個是主設(shè)備,一個是從控制器,主設(shè)備和從控制器通過串口接在一起了,所有的數(shù)據(jù)都在從控制器上了。
是從控制器主動把數(shù)據(jù)發(fā)給主設(shè)備呢,還是主設(shè)備來要數(shù)據(jù)呢。
如果是從控制器主動發(fā)數(shù)據(jù),但是好像不知道主設(shè)備到底要啥數(shù)據(jù)呢。
要不就設(shè)計為,由主設(shè)備主動發(fā)起請求來要數(shù)據(jù)。從控制器收到命令之后,再把相應(yīng)的數(shù)據(jù)返回。
所以, Modbus協(xié)議,就設(shè)計為一種基于主站主動請求的協(xié)議了 。
這樣所有的數(shù)據(jù)需求,全部為主設(shè)備進行管理和規(guī)劃,什么時候讀什么數(shù)據(jù)。
就這樣,有了Modbus協(xié)議之后,就解決了各控制器之間的數(shù)據(jù)交互問題。包括之后的HMI,電腦等設(shè)備,也都可以通過Modbus協(xié)議與PLC, 控制器進行數(shù)據(jù)讀取交互。
剛發(fā)明Modbus的時候,那時候主要還是使用串口通信。網(wǎng)絡(luò)還沒有完善的年代,想找一個支持以太網(wǎng)的PLC幾乎不現(xiàn)實。
當(dāng)然,后面隨著TCP/IP的發(fā)展,工業(yè)的進步,出現(xiàn)了網(wǎng)絡(luò)通信。Modbus也可以在以太網(wǎng)上通信了,在以太網(wǎng)上的通信,我們一般叫它Modbus TCP。
既然有TCP,就會有人問,那我能不能走UDP呢。
于是,Modbus UDP也就有了。
其實Modbus TCP和Modbus UDP的報文格式是一樣的。只不過一個走的是TCP,一個走的是UDP。
那串口的Modbus 叫什么名字呢。
一般來說,串口的Modbus 協(xié)議叫Modbus RTU協(xié)議。
RTU,也就是 Remote Terminal Unit。遠(yuǎn)程終端單元。
要知道,在上個世紀(jì)80年代,對于遠(yuǎn)程的概念,可不是像我們這樣天南地北的距離。
兩個設(shè)備,超過一米,都能叫遠(yuǎn)程了。
大概的意思就是,我人在門口,我能通過HMI或者主控制器,對房間里的溫度,燈等進行監(jiān)測和控制,就屬于遠(yuǎn)程操作了。
畢竟每一個事物的存在,都是有它的背景和依據(jù)的。
那為什么串口的協(xié)議,還會有Modbus ASCII協(xié)議呢。
這個我有點編不下去了,容我想一想。
一般來說,數(shù)據(jù)是由位組成的,然后由八個位組成一個字節(jié),兩個字節(jié)組成一個字。
而數(shù)據(jù)傳輸和存儲呢,最小單元為字節(jié)。
然后串口通信,它也很特殊,如果你要發(fā)一個字節(jié),還要加什么起始位,校驗位,停止位等湊夠一定條件,才能滿將一個字節(jié)發(fā)送出去。少一個位都不行。
那ASCII發(fā)明的的其中一個理由是,當(dāng)通信鏈路或者設(shè)備無法滿足RTU模式時,則使用ASCII模式。
我猜測呀,可能當(dāng)時某些特定用途的單片機或CPU,在設(shè)計串口功能的時候,基于種種原因,要拋開起始位,校驗位,停止位之后,完了,少處理了一個位,留給數(shù)據(jù)位只有7個位了。
怎么辦呢,要把7個位改成8個位,芯片都推倒重新來,代價太大了。
難道這個芯片就不能用了么。有什么通信或數(shù)據(jù)只要7個位就夠了的?
還真巧,還真有的,那就是ASCII數(shù)據(jù)。
ASCII,也就是我們常說的字符數(shù)據(jù)。字符嘛,大小寫字母,加上一些常用字符,數(shù)量加起來少于127的。也就是用7個位就可以了。
那是不是可以發(fā)明一種ASCII通信協(xié)議,每一個數(shù)組只占7位。然后Modbus ASCII協(xié)議就出來了。
我們看一下Modbus協(xié)議大概有多少。
-
傳感器
+關(guān)注
關(guān)注
2545文章
50445瀏覽量
751067 -
單片機
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631990 -
PLC控制
+關(guān)注
關(guān)注
9文章
251瀏覽量
27237 -
RTU
+關(guān)注
關(guān)注
0文章
403瀏覽量
28598 -
ModBus通信
+關(guān)注
關(guān)注
0文章
32瀏覽量
2541
發(fā)布評論請先 登錄
相關(guān)推薦
評論