版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第第頁詳解Modbus通信協(xié)議本文總結關于Modbus相關的知識,淺顯易懂,旨在對Modbus有一個很直觀的了解。如有錯誤,歡迎修改意見和建議。
什么是協(xié)議
在了解什么是Modbus之前,我們先來看下什么是協(xié)議。
協(xié)議是一個漢語詞匯,讀音為xiéyì,意思是共同計議,協(xié)商;經過談判、協(xié)商而制定的共同承認、共同遵守的文件。
簡單地說,在我們的(單片機)之間互相(通信),以及單片機和(上位機)通信中,規(guī)定了不同的內容規(guī)范,這個規(guī)范是通信的雙方都需要遵守的,這樣就可以實現(xiàn)兩者的通信。
而這個協(xié)議規(guī)范可以有很多種,來適應不同的設備以及通信要求等,我們常見的就有IICS(PI)(UART)串口通信協(xié)議等等。而Modbus也是一個串行通信協(xié)議。
什么是(RS-485)(RS)-232
我們在看Modbus的時候,經常會看到485串口,232串口,這些是什么呢?
RS232,RS485是一種電平標準。
數(shù)據(jù)在通信雙方之間傳輸,本質是傳輸物理的電平,比方說傳輸5V的電壓-1V的電壓(信號),這些物理信號在傳輸過程中會受到很多干擾,比方說你傳輸一個5V的電壓,到了接收端可能就變成了4.8V,并且通信的雙方高低電平的參考電壓可能不同。
那么這個時候就需要一個電平標準,來判斷多少V的電壓是高電平1,多少V的電壓是低電平0,這就誕生了RS-485RS-232
RS232:是(電子)(工業(yè))協(xié)會(ElectronicIndustriesAssociation,EIA)制定的異步傳輸標準接口,同時對應著電平標準和通信協(xié)議(時序),其電平標準:+3V~+15V對應0,-3V~-15V對應1。
全雙工
邏輯1:-15V–5V
邏輯0:+3V–+15V
RS485:RS485是一種串口接口標準,為了長距離傳輸采用差分方式傳輸,傳輸?shù)氖遣罘中盘枺垢蓴_能力比RS232強很多。兩線壓差為-2~-6V表示0,兩線壓差為+2~+6V表示1。
半雙工
邏輯1:+2V~+6V
邏輯0:-2V~-6V
注意485的電平指的是485-A和485-B兩根傳輸線,兩線間的電壓差。而不是傳輸線上的電壓。
也就是RS-485電平標準確定傳輸過來的數(shù)據(jù)是0還是1,在此基礎上,這些字節(jié)數(shù)據(jù)根據(jù)modbus通信協(xié)議來進行數(shù)據(jù)的交互傳輸。
(硬件)層協(xié)議:解決0和1的可靠傳輸,常有RS232、RS485、(CAN)、IIC、SPI…
軟件層協(xié)議:解決傳輸目的,常有Modbus、TCP/IP、CANopen…
Modbus協(xié)議說明
Modbus誕生于1979年莫迪康公司后來被施耐德(電氣)公司收購。Modbus提供通用語言用于彼此通信的設備和設備。Modbus已經成為工業(yè)領域通信協(xié)議的業(yè)界標準,并且現(xiàn)在是工業(yè)電子設備之間常用的連接方式。Modbus作為目前工業(yè)領域應用最廣泛的協(xié)議。
最簡單的說,Modbus就是一個總線通信協(xié)議,像IICSPI這種,但是他不依賴于硬件總線。
Modbus之所以使用廣泛,是有他的優(yōu)點的:
Modbus協(xié)議標準開放、公開發(fā)表且無版權要求
Modbus協(xié)議支持多種電氣接口,包括RS232、RS485、TCP/IP等,還可以在各種介質上傳輸,如雙絞線、光纖、(紅外)、無線等
Modbus協(xié)議消息幀格式簡單、緊湊、通俗易懂。用戶理解和使用簡單,廠商容易開發(fā)和集成,方便形成(工業(yè)控制)(網絡)
舉一個簡單的例子,我們常用的IIC通信協(xié)議,需要在物理上連接iic總線,然后加上拉電阻,規(guī)定好物理層的高低電平。
而Modbus協(xié)議是一種應用層報文傳輸協(xié)議,協(xié)議本身并沒有定義物理層,定義了控制器能夠認識和使用的消息結構,不管它們是經過何種網絡進行通信的。所以能夠適應多種電氣接口,因此使用非常廣泛。
Modebus通信過程
注意,Modbus是一主多從的通信協(xié)議。
Modbus通信中只有一個設備可以發(fā)送請求。其他從設備接收主機發(fā)送的數(shù)據(jù)來進行響應,從機是任何外圍設備,如I/O(傳感器),閥門,網絡驅動器,或其他測量類型的設備。從機處理信息后用Modbus將其數(shù)據(jù)發(fā)送給主站。
也就是說,Modbus不能同步進行通信,主機在同一時間內只能向一個從機發(fā)送請求,總線上每次只有一個數(shù)據(jù)進行傳輸。即主機發(fā)送,從機應答,主機不發(fā)送,總線上就沒有數(shù)據(jù)通信。
從機不會自己發(fā)送消息給主機,只能回復主機發(fā)送的消息請求。
并且,Modbus并沒有忙機制判斷,比方說主機給從機發(fā)送命令,從機沒有收到或者正在處理其他東西,這時候就不能響應主機,因為modbus的總線只是傳輸數(shù)據(jù),沒有其他仲裁機制,所以需要通過軟件的方式來判斷是否正常接收。
舉例
現(xiàn)在,我們來探討Modbus數(shù)據(jù)傳輸?shù)姆绞剑梢院唵蔚乩斫獬纱螂娫?。并且是單向通信的打電話?/p>
主機發(fā)送數(shù)據(jù),首先需要從機的電話號碼(區(qū)分每個從機,每個地址必須唯一),告訴從機打電話要干什么事情,然后是需要發(fā)送的內容,最后再問問從機,我說的話你都聽清楚了沒有呀,沒有聽錯吧?
然后從機這里,得到了主機打過來的電話,從機回復主機需要的內容,主機得到從機數(shù)據(jù)。這樣就是一個主機到從機的通信過程。
就好比老師和你打電話,老師撥通了你的電話號,然后老師跟你說,小王呀,我這里需要你給我發(fā)東西,發(fā)的內容是上周的一周總結,你說好的,然后打開你(電腦)的文件夾,把你的周報發(fā)給老師,這就是一個通信過程。
Modbus存儲區(qū)
既然從機存儲數(shù)據(jù),那么肯定要有一個存儲區(qū),那就需要文件操作,我們都知道這文件可以分為只讀(-r)和讀寫(-wr)兩種類型。
并且存儲的數(shù)據(jù)類型可以分為:布爾量和16位(寄存器)。
布爾量,比如IO口的電平高低,燈的開關狀態(tài)等。
16位寄存器,比如傳感器的溫度數(shù)據(jù),存儲的密碼等。
Modbus協(xié)議規(guī)定了4個存儲區(qū)分別是0134區(qū),其中0區(qū)和4區(qū)是可讀可寫,1區(qū)和3區(qū)是只讀。
Modbus還給每個區(qū)都劃分了地址范圍。主機向從機獲取數(shù)據(jù)時,只需要告訴從機數(shù)據(jù)的起始地址,還有獲取多少字節(jié)的數(shù)據(jù),從機就可以發(fā)送數(shù)據(jù)給主機。Modbus數(shù)據(jù)模型規(guī)定了具體的地址范圍,每一個從機,都有實際的物理存儲,跟modbus的存儲區(qū)相對應,主機讀寫從機的存儲區(qū),實際上就是對從機設備對應的實際存儲空間進行讀寫。
Modbus協(xié)議類型
在上面我們已經說明了Modbus可以在各種介質上傳輸,那么他的傳輸模式也分為三種:包括ASCII、RTU(遠程終端(控制系統(tǒng)))、TCP三種報文類型。
串行端口存在多個版本的Modbus協(xié)議,而最常見的是下面四種:
Modbus-Rtu
Modbus-Ascii
Modbus-Tcp
ModbusPlus
ModbusRTU是一種緊湊的,十六進制表示數(shù)據(jù)的方式,ModbusASCII是一種采用Ascii碼表示數(shù)據(jù),并且每個8Bit字節(jié)都作為兩個ASCII字符發(fā)送的表示方式。RTU格式后續(xù)的命令/數(shù)據(jù)帶有循環(huán)冗余校驗的校驗和,而ASCII格式采用縱向冗余校驗的校驗和。
Modbus協(xié)議使用串口傳輸時可以選擇RTU或ASCII模式,并規(guī)定了消息、數(shù)據(jù)結構、命令和應答方式并需要對數(shù)據(jù)進行校驗。ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗。通過(以太網)傳輸時使用TCP,這種模式不使用校驗,因為TCP協(xié)議是一個面向連接的可靠協(xié)議。
當然常用的就是RTU模式,ASCII一般很少
舉一個簡單的例子,如果我們需要發(fā)送一個數(shù)字10那么RTU模式下,只需要發(fā)送0x0A總線上傳輸數(shù)據(jù)形式為:00001010
而ASCII碼模式則將數(shù)據(jù)1和0轉為’1’和’0’,需要發(fā)送0x31(1)0x30(0)兩個字節(jié)數(shù)據(jù)??偩€上傳輸數(shù)據(jù)形式為:0011000100110000
詳細的我們等下再闡述
Modbus-RTU協(xié)議
Modbus報文幀結構
一個報文就是一幀數(shù)據(jù),一個數(shù)據(jù)幀就一個報文:指的是一串完整的指令數(shù)據(jù),本質就是一串數(shù)據(jù)。
Modbus報文是指主機發(fā)送給從機的一幀數(shù)據(jù),其中包含著從機的地址,主機想執(zhí)行的操作,校驗碼等內容。
Modbus協(xié)議在串行鏈路上的報文格式如下所示:
幀結構=從機地址+功能碼+數(shù)據(jù)+校驗
從機地址:每個從機都有唯一地址,占用一個字節(jié),范圍0-255,其中有效范圍是1-247,其中255是廣播地址(廣播就是對所有從機發(fā)送應答)
功能碼:占用一個字節(jié),功能碼的意義就是,知道這個指令是干啥的,比如你可以查詢從機的數(shù)據(jù),也可以修改從機的數(shù)據(jù),所以不同功能碼對應不同功能.
數(shù)據(jù):根據(jù)功能碼不同,有不同功能,比方說功能碼是查詢從機的數(shù)據(jù),這里就是查詢數(shù)據(jù)的地址和查詢字節(jié)數(shù)等。
校驗:在數(shù)據(jù)傳輸過程中可能數(shù)據(jù)會發(fā)生錯誤,CRC檢驗檢測接收的數(shù)據(jù)是否正確。
Modbus功能碼
Modbus規(guī)定了多個功能,那么為了方便的使用這些功能,我們給每個功能都設定一個功能碼,也就是指代碼。
Modbus協(xié)議同時規(guī)定了二十幾種功能碼,但是常用的只有8種,用于對存儲區(qū)的讀寫,如下表所示:
當然我們用的最多的就是03和06一個是讀取數(shù)據(jù),一個是修改數(shù)據(jù)。
CRC校驗
錯誤校驗(CRC)域占用兩個字節(jié)包含了一個16位的二進制值。CRC值由傳輸設備計算出來,然后附加到數(shù)據(jù)幀上,接收設備在接收數(shù)據(jù)時重新計算CRC值,然后與接收到的CRC域中的值進行比較,如果這兩個值不相等,就發(fā)生了錯誤。
比如主機發(fā)出0106000100179804,9804兩個字節(jié)是校驗位,那么從機接收到后要根據(jù)010600010017再計算CRC校驗值,從機判斷自己計算出來的CRC校驗是否與接收的CRC校驗(9804主機計算的)相等,如果不相等那么說明數(shù)據(jù)傳輸有錯誤,這些數(shù)據(jù)就不能要。
CRC校驗流程:
1、預置一個16位寄存器為0FFFFH(全1),稱之為CRC寄存器。2、把數(shù)據(jù)幀中的第一個字節(jié)的8位與CRC寄存器中的低字節(jié)進行異或運算,結果存回CRC寄存器。3、將CRC寄存器向右移一位,最高位填以0,最低位移出并(檢測)。4、如果最低位為0:重復第三步(下一次移位);如果最低位為1:將CRC寄存器與一個預設的固定值(0A001H)進行異或運算。5、重復第三步和第四步直到8次移位。這樣處理完了一個完整的八位。6、重復第2步到第5步來處理下一個八位,直到所有的字節(jié)處理結束。
7、最終CRC寄存器的值就是CRC的值。
此外還有一種利用預設的表格計算CRC的方法,它的主要特點是計算速度快,但是表格需要較大的存儲空間,該方法此處不再闡述。
下面我們來看詳細的發(fā)送和接收數(shù)據(jù):
1、主機對從機讀數(shù)據(jù)操作
主機發(fā)送報文格式如下:
含義:0x01:從機的地址0x03:查詢功能,讀取從機寄存器的數(shù)據(jù)0x000x01:代表讀取的起始寄存器地址.說明從0x0001開始讀取.0x000x01:查詢的寄存器數(shù)量為0x0001個Modbus把數(shù)據(jù)存放在寄存器中,通過查詢寄存器來得到不同變量的值,一個寄存器地址對應2字節(jié)數(shù)據(jù);寄存器地址對應著從機實際的存儲地址
0xD50xCA:循環(huán)冗余校驗CRC
從機回復報文格式如下:
含義:0x01:從機的地址0x03:查詢功能,讀取從機寄存器的數(shù)據(jù)0x02:返回字節(jié)數(shù)為2,一個寄存器2個字節(jié)0x000x17:寄存器的值是0017
0xF80x4A:循環(huán)冗余校驗CRC
2、主機對從機寫數(shù)據(jù)操作
主機發(fā)送報文格式如下:
含義:
0x01:從機的地址0x06:修改功能,修改從機寄存器的數(shù)據(jù)0x000x01:代表修改的起始寄存器地址.說明修改0x0001-0x0003的存儲內容0x000x17:要修改的數(shù)據(jù)值為0017
0x980x04:循環(huán)冗余校驗CRC
從機回復報文格式如下:
含義:0x01:從機的地址0x06:修改功能,修改從機寄存器的數(shù)據(jù)0x000x01:代表修改的起始寄存器地址.說明是0x00000x000x17:修改的值為0017
0x980x04:循環(huán)冗余校驗CRC
從機的回復和主機的發(fā)送是一樣的,如果不一樣說明出現(xiàn)了錯誤。
Modbus-ACSII協(xié)議
在消息中的每個字節(jié)都作為兩個ASCII字符發(fā)送。
十六進制的0-F分別對應ASCII字符的0…9,A…F
也就是0x30~0x3A0x41~0x46
下方是ascii的報文幀
1個字節(jié)起始位
2個字節(jié)地址位
2個字節(jié)功能位
n個數(shù)據(jù)位,最小的有效位先發(fā)送
LRC(縱向冗長檢測)注意校驗方式不同
結束符
可以看到數(shù)據(jù)部分更加繁瑣,正常我們使用都是用RTU格式,ASCII碼格式有了解即可。
總結:
Mo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度儲能電站專用蓄電池銷售及技術支持協(xié)議2篇
- 二零二五年度個人二手房交易全程代辦服務合同
- 二零二五年度專業(yè)汽車租賃服務合同范本(十高端版)2篇
- 二零二五版信報箱工程材料環(huán)保認證協(xié)議3篇
- 2025版物流園區(qū)運營管理長期合同范本2篇
- 二零二五年度個人股權質押借款合同范本正規(guī)范本4篇
- 二零二五年度房地產抵押擔保合同標準范本3篇
- 二零二五年度個人與環(huán)保項目借款合同模板3篇
- 二零二五年度個人房屋抵押短期借款協(xié)議書(限城市住宅)
- 二零二五年度城市土地登記代理服務合同書2篇
- 物流服務項目的投標書
- 地鐵車站低壓配電及照明系統(tǒng)
- C語言程序設計(慕課版 第2版)PPT完整全套教學課件
- 行業(yè)會計比較(第三版)PPT完整全套教學課件
- 值機業(yè)務與行李運輸實務(第3版)高職PPT完整全套教學課件
- 高考英語語法填空專項訓練(含解析)
- 42式太極劍劍譜及動作說明(吳阿敏)
- 危險化學品企業(yè)安全生產標準化課件
- 巨鹿二中骨干教師個人工作業(yè)績材料
- 《美的歷程》導讀課件
- 心電圖 (史上最完美)課件
評論
0/150
提交評論