最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信

2023-03-08 11:24 作者:速學(xué)上位機(jī)開發(fā)  | 我要投稿

前言

算了一下,今年是我跟Modbus相識的第10年,從最開始的簡單應(yīng)用到協(xié)議了解,從協(xié)議開發(fā)到協(xié)議應(yīng)用,這個(gè)陪伴了10年的協(xié)議,它一直沒變,變的只是我對它的理解和認(rèn)識。


我一直認(rèn)為Modbus協(xié)議的存在有它的歷史意義,也就是說即使沒有Modbus,也可能會出一個(gè)ABUS、DBUS之類的協(xié)議,因?yàn)榭刂破髋c控制器之間通信,一個(gè)標(biāo)準(zhǔn)協(xié)議,會大大提供開發(fā)效率。


因此,現(xiàn)在國產(chǎn)的各種品牌PLC,比如臺達(dá)、匯川、信捷等,這些PLC都是支持Modbus協(xié)議,也就是說,學(xué)會了Modbus協(xié)議,我們可以很輕松與這些PLC實(shí)現(xiàn)數(shù)據(jù)通信。


文章有點(diǎn)長,感謝大家耐心閱讀,文末有福利!


Modbus協(xié)議能夠成為工業(yè)領(lǐng)域應(yīng)用最廣泛的協(xié)議,它必須具備以下幾個(gè)特點(diǎn):


1、免費(fèi):這個(gè)是最大的前提,任何產(chǎn)品都是一樣,只有通過免費(fèi)才能獲取到前期最大的使用量。


2、簡單:Modbus協(xié)議幀格式簡單緊湊,用戶容易理解,廠商容易集成。


3、接口:Modbus協(xié)議只是一種規(guī)約,屬于應(yīng)用層的協(xié)議,因此不僅可以應(yīng)用在串口(485/232/422),也可以在以太網(wǎng)、光纖、藍(lán)牙、無線上傳輸。


存儲區(qū)分類


我一般介紹Modbus協(xié)議的時(shí)候,喜歡站在Modbus規(guī)約制定者的角度,結(jié)合一些事物來對比說明,這樣對很多人來說,可能會更加容易理解。


假設(shè)沒有Modbus協(xié)議,我們想要制定一個(gè)協(xié)議,我們首先要明確,協(xié)議的目的是為了數(shù)據(jù)傳輸,因此,為了更好地存儲不同的數(shù)據(jù)類型,我們會將布爾和非布爾的數(shù)據(jù)分開存儲,因此,就有了線圈和寄存器的概念。


線圈和寄存器,這個(gè)經(jīng)常被很多人詬病,認(rèn)為不應(yīng)該這么翻譯,感覺不容易理解。從電氣角度來看,在電氣控制回路中,一般都是靠接觸器或中間繼電器來實(shí)現(xiàn)控制,接觸器或中繼最終靠的是線圈的得電和失電來控制觸點(diǎn)閉合和斷開,因此用線圈表示布爾量;而寄存器在計(jì)算機(jī)中,就是用來存儲數(shù)據(jù)的,因此非布爾的數(shù)據(jù)放在寄存器里。


這個(gè)可以跟PLC的存儲區(qū)來進(jìn)行對比,西門子的I/Q/M都是線圈,V/T/C/DB都是寄存器,三菱的X/Y都是線圈,D/W/H都是寄存器,歐姆龍的CIO是線圈,D/W/H是寄存器。

以西門子為例,雖然I和Q都表示線圈,但是他們的分工是不同的,I表示輸入,Q表示輸出,輸入意味著該存儲區(qū)里的值必須由外部設(shè)備接入,是只讀的,輸出表示輸出結(jié)果給外部設(shè)備,是可讀可寫的。


因此,Modbus的線圈和寄存器應(yīng)該也按照只讀、讀寫來進(jìn)一步細(xì)分,因此這就形成了Modbus的存儲區(qū),如下表所示:

存儲區(qū)代號


然而,上面表格里的存儲區(qū)名稱是一個(gè)全稱,開發(fā)和使用中使用全稱會比較麻煩,因此需要給他們?nèi)€(gè)別名,就像西門子的I/Q/M一樣,這些都是西門子給存儲區(qū)取的一個(gè)代號,所以Modbus也要給這些存儲區(qū)取一個(gè)代號,干脆直接用數(shù)字吧,于是,就有了下面的規(guī)定:


這個(gè)其實(shí)就跟我們的姓名和小名一樣,姓名是正式場合使用,日常場合,我們一般可以使用小名。

存儲區(qū)范圍

無論是什么存儲區(qū),都會有一個(gè)范圍的限制,就像西門子的M區(qū)可能最大到8192,三菱的X區(qū)最大到2048,Modbus的每個(gè)存儲區(qū)也應(yīng)該規(guī)定一個(gè)范圍,不能無限制使用。


Modbus是這么規(guī)定的,每個(gè)存儲區(qū)的最大范圍是65536,這個(gè)范圍是很大的。


我們再以三菱的X區(qū)為例,如果最大范圍是2048,那么意味著我們只能訪問X0-X2047這些地址,我們這里說的X0、X2047,就是我們常說的PLC地址,那么這個(gè)地址是怎么組成的呢?它是由存儲區(qū)編號加上一個(gè)地址索引組成,我們把這樣的PLC地址,理解為絕對地址,后面的地址索引,理解為相對地址。


所謂絕對地址,就是我們僅僅通過一個(gè)地址名稱,就能知道是什么存儲區(qū)的第幾個(gè)數(shù)據(jù),而這個(gè)第幾個(gè),就是我們說的相對地址,因此絕對地址是唯一的,相對地址,每個(gè)存儲區(qū)都有。


那么對于Modbus來說,我們的絕對地址和相對地址是怎么樣的呢?


我們?nèi)匀蛔駨墓剑航^對地址=區(qū)號+相對地址。


但是也會有一些不一樣的地方,以保持型寄存器為例,第一個(gè)絕對地址是400001,這個(gè)地方不是400000,這個(gè)是由Modbus規(guī)約決定的,其它存儲區(qū)也是類似的。


因此,Modbus存儲區(qū)范圍如下圖所示:


正如上文所說,65536這個(gè)范圍是很大的,但在實(shí)際使用中,我們一般用不了這么多地址,一般情況下,10000以內(nèi)就已經(jīng)足夠我們使用了,因此,為了方便起見,我們有一種短的地址模型,如下圖所示:


功能碼

功能碼這個(gè)概念,我們可以這么去理解,先回到我們的初衷,協(xié)議的目的是為了數(shù)據(jù)傳輸,也就是為了讀取數(shù)據(jù)和寫入數(shù)據(jù),我們已經(jīng)確定好4個(gè)存儲區(qū),存儲不同的數(shù)據(jù)類型,那么接下來我們就要對這些存儲區(qū)進(jìn)行讀寫,那么可能會產(chǎn)生很多種不同的行為,比如讀取輸入線圈存儲區(qū)、讀取輸出線圈存儲區(qū),這就是兩種不同的行為,同樣的,如果用讀取輸入線圈存儲區(qū)、讀取輸出線圈存儲區(qū),會比較麻煩,那么我們干脆給每種形成指定一個(gè)代號,那么這種代號就是功能碼。


我們再來探討一下,究竟有多少種不同的行為呢?


讀取和寫入是2種行為,存儲區(qū)有4個(gè),但是我們知道輸入線圈和輸入寄存器是只讀的,因此不能進(jìn)行寫入,除去這2種的話,應(yīng)該會產(chǎn)生6種不同的行為,如下圖所示:

然而,Modbus規(guī)約將寫入輸出線圈和寫入保持寄存器這2種行為,又進(jìn)一步做了細(xì)分,包括寫入單個(gè)和寫入多個(gè),因此原來的6種行為就變成了8種行為,同時(shí)給每種行為設(shè)置一個(gè)代號,就形成了下圖所示的功能碼列表:


Modbus規(guī)約中的功能碼其實(shí)不止這8個(gè),還有一些功能碼是用于診斷或異常碼,但是一般很少使用,這8種功能碼是最主要的核心功能碼。

協(xié)議分類

Modbus嚴(yán)格來說,是一個(gè)標(biāo)準(zhǔn)化的規(guī)約,而不是一個(gè)具體協(xié)議。我們常說的設(shè)備A和設(shè)備B之間通過Modbus協(xié)議來通信,這句話其實(shí)是不嚴(yán)謹(jǐn)?shù)摹?br>


Modbus規(guī)約上有三種不同的協(xié)議報(bào)文幀,分別是ModbusRtu、ModbusAscii、ModbusTcp。


一般來說,ModbusRtu和ModbusAscii是運(yùn)行在串口上的協(xié)議,ModbusTcp是運(yùn)行

在以太網(wǎng)上的協(xié)議,但是這并非絕對的,我們也可以將ModbusRtu、ModbusAscii運(yùn)行在以太網(wǎng)或光纖上使用,同樣的,在串口網(wǎng)絡(luò)里,我們也可以使用ModbusTcp的協(xié)議,因?yàn)閰f(xié)議只是一種規(guī)范,并不限制通信介質(zhì)。


報(bào)文格式

前面我們說了Modbus有三種不同的協(xié)議,分別是ModbusRtu、ModbusAscii、ModbusTcp,那么這三種協(xié)議的報(bào)文格式也是不同的,下面分別對這三種協(xié)議的報(bào)文格式進(jìn)行說明:


  1. ModbusRtu的報(bào)文格式如下:


第一部分:從站地址,占1個(gè)字節(jié)

第二部分:功能碼,占1個(gè)字節(jié)

第三部分:數(shù)據(jù)部分,占N個(gè)字節(jié)

第四部分:校驗(yàn)部分,CRC校驗(yàn),占2個(gè)字節(jié)


2.?ModbusAscii的報(bào)文格式如下:


第一部分:開始字符(:)

第二部分:從站地址,占2個(gè)字節(jié)

第三部分:功能碼,占2個(gè)字節(jié)

第四部分:數(shù)據(jù)部分,占N個(gè)字節(jié)

第五部分:校驗(yàn)部分,LRC校驗(yàn),占2個(gè)字節(jié)

第六部分:結(jié)束字符(CR LF)


3.?ModbusTcp的報(bào)文格式如下:


第一部分:事務(wù)處理標(biāo)識符,占2個(gè)字節(jié)

第二部分:協(xié)議標(biāo)識符,占2個(gè)字節(jié)

第三部分:長度,占2個(gè)字節(jié)

第四部分:單元標(biāo)識符,占1個(gè)字節(jié)

第五部分:功能碼,占1個(gè)字節(jié)

第六部分:數(shù)據(jù)部分,占N個(gè)字節(jié)


調(diào)試軟件


Modbus學(xué)習(xí)成本很低,因?yàn)閰f(xié)議是公開免費(fèi)的,我們可以直接獲取到《Modbus中文協(xié)議文檔》。


同時(shí),也有很多調(diào)試軟件可以進(jìn)行仿真調(diào)試,因此我們可以在不購買任何硬件的情況下,就把Modbus協(xié)議學(xué)好。


Modbus調(diào)試軟件可以通關(guān)注UP領(lǐng)取。同時(shí)附贈文檔資料


Modbus 學(xué)習(xí)必須要配合相關(guān)的調(diào)試軟件,可以達(dá)到事半功倍的效果,Modbus

學(xué)習(xí)必備的三大神器分別是 ModbusPoll、ModbusSlave 及 VSPD,ModbusPoll 軟件主要用于仿真 Modbus主站或 Modbus 客戶端,ModbusSlave 軟件主要用于仿真 Modbus 從站或 Modbus 服務(wù)器,而 VSPD 全稱 Configure Virtual Serial Port Driver,是用來給電腦創(chuàng)建虛擬串口使用的。


即使我們想要結(jié)合硬件,支持Modbus協(xié)議的設(shè)備也有很多,各種品牌PLC、各種品牌的儀表、各種溫濕度傳感器、流量計(jì)等都可以很好地支持Modbus協(xié)議。


深入學(xué)習(xí)


紙上得來終覺淺,絕知此事要躬行。


當(dāng)我們已經(jīng)掌握了Modbus協(xié)議之后,可能更加關(guān)注如何在上位機(jī)實(shí)戰(zhàn)開發(fā)中使用Modbus通信,多多關(guān)注UP后面更給大家?guī)砀S富的學(xué)習(xí)知識?。。?/p>


上位機(jī)實(shí)戰(zhàn)應(yīng)用之Modbus通信的評論 (共 條)

分享到微博請遵守國家法律
济阳县| 罗定市| 惠水县| 柞水县| 永泰县| 开江县| 陆良县| 日喀则市| 崇文区| 天门市| 博罗县| 屏东县| 崇阳县| 九寨沟县| 巴林右旗| 新蔡县| 阜宁县| 墨脱县| 阳东县| 潮安县| 韶关市| 宜兴市| 孝感市| 金坛市| 渝中区| 雷州市| 凉城县| 弥勒县| 靖宇县| 福安市| 汝南县| 宣汉县| 高阳县| 藁城市| 茂名市| 宜章县| 许昌市| 光泽县| 昌宁县| 南川市| 彰武县|