什么是Modbus ,Modbus能做什么。
筆者嘗試用一個系列分多篇文章進行講述肩碟,帶你了解身邊的Modbus强窖。
第一篇我們先來個序言篇,先來聊聊Modbus削祈。
創(chuàng)作不易翅溺,轉(zhuǎn)載請注明出處脑漫。訂閱號諸子?xùn)|(物聯(lián)網(wǎng)諸子?xùn)|)原創(chuàng)作品。
按照筆者的風(fēng)格咙崎,上來自然不會直接講枯燥的概念和協(xié)議优幸,格式等。這些網(wǎng)上一搜一大把的內(nèi)容褪猛,筆者盡量少重復(fù)网杆。
我們先不要直接講Modbus協(xié)議,先聊聊家常伊滋,然后趁Modbus不注意碳却,再去學(xué)它,就容易記住了新啼。
Modbus協(xié)議追城,是1979年,Modicon公司發(fā)明的燥撞。而Modicon,也可以說就是現(xiàn)在的施耐德了迷帜。
別的設(shè)備支持不支持Modbus不知道物舒,施耐德PLC肯定可以支持Modbus協(xié)議。
那時候網(wǎng)絡(luò)戏锹,計算機都還不發(fā)達冠胯,設(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é)議要有儀式感,我們總得給它起個名字吧烦感。我們先開個會討論一下吧巡社。
“要不我們就直接叫它ModiconModbus吧”
“系不系傻,Modbus這個名字就是我們發(fā)明的手趣,怎么能叫Modicon Modbus呢晌该,再重新討論”
“首先這個是一種總線協(xié)議,肯定得以bus結(jié)尾吧绿渣〕海”
“嗯,沒錯中符,那就以bus結(jié)尾吧”
“叫Modicon-bus如何姜胖?”
“不行,得有我們老外的風(fēng)格淀散,這名字一看就很中式右莱。”
“取名字的前半部分吧凉?叫Modibus協(xié)議隧出?”
“莫弟拔絲?讀著有點繞口吧阀捅。”
“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报强。遠程終端單元灸姊。
要知道锻煌,在上個世紀80年代饺汹,對于遠程的概念,可不是像我們這樣天南地北的距離死讹。
兩個設(shè)備召嘶,超過一米父晶,都能叫遠程了。
大概的意思就是弄跌,我人在門口甲喝,我能通過HMI或者主控制器,對房間里的溫度铛只,燈等進行監(jiā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é)議大概有多少奄容。
最后,我們留一道選擇題給大家产徊。
以下哪個配置是有問題的昂勒。
A ?使用modbus ascii?協(xié)議,波特率38400舟铜,數(shù)據(jù)位8戈盈,校驗位為奇,停止為1.
B ?使用modbus rtu?協(xié)議谆刨,波特率19200?塘娶,數(shù)據(jù)位8归斤,校驗位為偶,停止為1.
C ?使用modbus ascii?協(xié)議血柳,波特率57600官册,數(shù)據(jù)位7,校驗位為無难捌,停止位2膝宁。
D ?使用modbus rtu?協(xié)議,波特率115200根吁,數(shù)據(jù)位7员淫,校驗位為偶,停止位1
答案將在下一篇揭曉击敌。
本篇為序言篇介返,筆者會在未來一段里,完成該系列文章的創(chuàng)作沃斤,如果想進一步繼續(xù)了解和學(xué)習(xí)Modbus的同學(xué)圣蝎,朋友,不妨關(guān)注本訂閱號或推薦給你的同學(xué)衡瓶,老表徘公,同事等。
當(dāng)然哮针,Modbus只是第一個按系列寫的关面,后續(xù)也許也會考慮出更多和物聯(lián)網(wǎng)相關(guān)的專題系列進行創(chuàng)作,筆者會盡量秉承通俗十厢,風(fēng)趣的風(fēng)格進行創(chuàng)作等太。
筆者是業(yè)余時間進行的創(chuàng)作,更新速度可能比較慢蛮放,客官可以先回顧下往期文章缩抡。