在大家通讀Modbus協(xié)議時(shí),總是會(huì)碰到一些容易混淆的名詞,從而導(dǎo)致對(duì)于協(xié)議的解讀出現(xiàn)問(wèn)題,在本文中,我們對(duì)于Modbus協(xié)議中可能會(huì)給大家造成困惑的名詞作相關(guān)的解釋。
1.功能碼:功能碼在modbus協(xié)議用于表示信息幀的功能,常用的功能碼有03,04,06,16等,其中03功能碼的作用是讀保持寄存器內(nèi)容,04功能碼的作用是讀輸入寄存器內(nèi)容(輸入寄存器和保持寄存器的區(qū)別看下文),06功能碼的內(nèi)容是預(yù)置單個(gè)保持寄存器,16功能碼的內(nèi)容則是預(yù)置多個(gè)保持寄存器。
2.輸入寄存器和保持寄存器:04功能碼的作用就是讀輸入寄存器,而03功能碼的作用則是讀保持寄存器,很多人在看到這兩個(gè)功能碼的時(shí)候總是希望找到這兩個(gè)功能碼的區(qū)別,保持寄存器和輸入寄存器到底是什么區(qū)別,modbus協(xié)議最開始是用來(lái)解決PLC的通信協(xié)議問(wèn)題的,主要用于輸入輸出數(shù)字量信號(hào)以及模擬量信號(hào),所謂的輸入寄存器就是從模擬量信號(hào)輸入引申出來(lái)的,即輸入寄存器只能從模擬量信號(hào)輸入端改變寄存器,而主機(jī)則不能通過(guò)下發(fā)指令改變輸入寄存器的數(shù)據(jù),而保持寄存器則是用于輸出模擬量信號(hào)的,主機(jī)是可以改變寄存器數(shù)據(jù),也就是說(shuō)對(duì)于主機(jī)而言,輸入寄存器是只讀的,而保持寄存器是可以讀寫的,當(dāng)主機(jī)用06,16功能碼的指令去預(yù)置輸入寄存器的時(shí)候,設(shè)備會(huì)返回一個(gè)代碼為0x81的錯(cuò)誤代碼,即企圖寫只讀寄存器。
3.Modbus中的數(shù)據(jù)地址格式:在Modbus協(xié)議中,經(jīng)常會(huì)出現(xiàn)類似于3xxxx,4xxxx寄存器,這個(gè)表示的是寄存器支持的數(shù)據(jù)類型。我們用列表來(lái)說(shuō)明,還有Modbus數(shù)據(jù)地址格式是從0開始,比如以下一個(gè)寄存器40009,即表示保持寄存器,寄存器地址為00 08,類似的數(shù)據(jù)地址格式經(jīng)常在組態(tài)軟件以及PLC系統(tǒng)中用到。
映射地址 | 使用的功能碼 | 地址類型 | 存取方式 | 描述 |
0XXXX | 01,05,15 | 離散輸出 | 讀寫 | 每個(gè)卷表示單個(gè)開關(guān)位 |
1XXXX | 02 | 離散輸入 | 只讀 | 每個(gè)卷表示單個(gè)開關(guān)位 |
2XXXX | 03,04,06,16 | 浮點(diǎn)寄存器 | 只讀/讀寫 | 兩個(gè)連續(xù)16位寄存器表示一個(gè)浮點(diǎn)數(shù) |
3XXXX | 04 | 輸入寄存器 | 只讀 | 每個(gè)寄存器表示一個(gè)16位無(wú)符號(hào)整數(shù) |
4XXXX | 03,06,16 | 保持寄存器 | 讀寫 | 每個(gè)寄存器表示一個(gè)16位無(wú)符號(hào)整數(shù) |
5XXXX | 03,04,06,16 | ASCII字符 | 讀寫 | 每個(gè)寄存器表示兩個(gè)ASCII碼 |
4.Modbus RTU/ASCII/TCP:Modbus協(xié)議最開始是用于可編程邏輯控制器(PLC)之間的通訊,由于其具有的開放性,大量的用于現(xiàn)場(chǎng)智能儀表。Modbus協(xié)議有多個(gè)變種,其中最著名的是Modbus RTU/Modbus ASCII和Modbus TCP通信協(xié)議。其中RTU/ASCII協(xié)議是基于串行口通信,而TCP協(xié)議則是基于以太網(wǎng)通信。他們之間的區(qū)別和聯(lián)系請(qǐng)參考本站其他頁(yè)面內(nèi)容:Modbus RTU/TCP協(xié)議解析以及Modbus RTU/ASCII通信協(xié)議異同點(diǎn)。
5.Modbus錯(cuò)誤代碼表,modbus有功能碼,校驗(yàn)碼,異常功能碼和錯(cuò)誤代碼,其中異常功能碼和錯(cuò)誤代碼非常容易混淆,一般來(lái)說(shuō)異常功能碼指的是某個(gè)功能碼執(zhí)行的時(shí)候出現(xiàn)的相應(yīng)異常功能碼,一般都是在功能碼的基礎(chǔ)上加上0x80,比如03功能碼出現(xiàn)的異常碼是0x83異常功能碼,16功能碼對(duì)應(yīng)出現(xiàn)的異常功能碼則是0x90,而錯(cuò)誤代碼則是表示出現(xiàn)錯(cuò)誤的具體情況,比如寄存器地址不存在,不管是讀還是寫,如果該寄存器地址不存在的話,錯(cuò)誤代碼為02。具體情況請(qǐng)參閱本站其他頁(yè)面文章。
審核編輯黃宇
-
plc
+關(guān)注
關(guān)注
5012文章
13309瀏覽量
463752 -
MODBUS
+關(guān)注
關(guān)注
28文章
1810瀏覽量
77063
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論