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


modbus
Modbus TCP轉Modbus RTU的實現
modbus詳解
什么是Modbus協議?如何寫穩定的Modbus代碼?
Modbus on AT32 MCU
如何快速實現Modbus RTU和Modbus TCP協議轉換?
什么是modbus?modbus庫如何移植到ARM開發板上?如何使用測試程序?

評論