modbus通訊協議功能碼一覽_ModBus功能碼定義(yi)
Modbus網絡是一個(ge) 工業(ye) 通信係統,由帶智能終端的可編程序控製器和計算機通過公用線路或局部專(zhuan) 用線路連接而成。其係統結構既包括硬件、亦包 括軟件。它可應用於(yu) 各種數據采集和過程監控。下表1是ModBus的功能碼定義(yi) 。
表1 ModBus功能碼
功能碼 名稱 作用
01 讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02 讀取輸入狀態 取得一組開關(guan) 輸入的當前狀態(ON/OFF)
03 讀取保持寄存器 在一個(ge) 或多個(ge) 保持寄存器中取得當前的二進製值
04 讀取輸入寄存器 在一個(ge) 或多個(ge) 輸入寄存器中取得當前的二進製值
05 強置單線圈 強置一個(ge) 邏輯線圈的通斷狀態
06 預置單寄存器 把具體(ti) 二進值裝入一個(ge) 保持寄存器
07 讀取異常狀態 取得8個(ge) 內(nei) 部線圈的通斷狀態,這8個(ge) 線圈的地址由控製器決(jue) 定,用戶邏輯可以將這些線圈定義(yi) ,以說明從(cong) 機狀態,短 報文適宜於(yu) 迅速讀取狀態
08 回送診斷校驗 把診斷校驗報文送從(cong) 機,以對通信處理進行評鑒
09 編程(隻用於(yu) 484) 使主機模擬編程器作用,修改PC從(cong) 機邏輯
10 控詢(隻用於(yu) 484) 可使主機與(yu) 一台正在執行長程序任務從(cong) 機通信,探詢該從(cong) 機是否已完成其操作任務,僅(jin) 在含有功能碼9的報文發送後,本功能碼才發送
11 讀取事件計數 可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產(chan) 生通信錯誤時
12 讀取通信事件記錄 可是主機檢索每台從(cong) 機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會(hui) 給出有關(guan) 錯誤
13 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從(cong) 機邏輯
14 探詢(184/384 484 584) 可使主機與(yu) 正在執行任務的從(cong) 機通信,定期控詢該從(cong) 機是否已完成其程序操作,僅(jin) 在含有功能13的報文發送後,本功能碼才得發送
15 強置多線圈 強置一串連續邏輯線圈的通斷
16 預置多寄存器 把具體(ti) 的二進製值裝入一串連續的保持寄存器
17 報告從(cong) 機標識 可使主機判斷編址從(cong) 機的類型及該從(cong) 機運行指示燈的狀態
18 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態邏輯
19 重置通信鏈路 發生非可修改錯誤後,是從(cong) 機複位於(yu) 已知狀態,可重置順序字節
20 讀取通用參數(584L) 顯示擴展存儲(chu) 器文件中的數據信息
21 寫(xie) 入通用參數(584L) 把通用參數寫(xie) 入擴展存儲(chu) 文件,或修改之
22~64 保留作擴展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴展編碼
73~119 非法功能
120~127 保留 留作內(nei) 部作用
128~255 保留 用於(yu) 異常應答
Modbus網絡隻是一個(ge) 主機,所有通信都由他發出。網絡可支持247個(ge) 之多的遠程從(cong) 屬控製器,但實際所支持的從(cong) 機數要由所用通信設備決(jue) 定。采用這個(ge) 係 統,各PC可以和中心主機交換信息而不影響各PC執行本身的控製任務。表2是ModBus各功能碼對應的數據類型。
表2 ModBus功能碼與(yu) 數據類型對應表
代碼 功能 數據類型
01 讀 位
02 讀 位
03 讀 整型、字符型、狀態字、浮點型
04 讀 整型、狀態字、浮點型
05 寫(xie) 位
06 寫(xie) 整型、字符型、狀態字、浮點型
08 N/A 重複“回路反饋”信息
15 寫(xie) 位
16 寫(xie) 整型、字符型、狀態字、浮點型
17 讀 字符型
(1)ModBus的傳(chuan) 輸方式
在ModBus係統中有2種傳(chuan) 輸模式可選擇。這2種傳(chuan) 輸模式與(yu) 從(cong) 機PC通信的能力是同等的。選擇時應視所用ModBus主機而定, 每個(ge) ModBus係統隻能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國信息交換碼),另一種模式是RTU(遠程終端設備)這兩(liang) 種模式的 定義(yi) 見表3
表3 ASCII和RTU傳(chuan) 輸模式的特性
特性 ASCII(7位) RTU(8位)
編碼係統 十六進製(使用ASCII可打印字符:0~9,A~F) 二進製
每一個(ge) 字符的位數 開始位 1位 1位
數據位(最低有效位第一位) 7位 8位
奇偶校驗(任選) 1位(此位用於(yu) 奇偶校驗,無校應則無該位) 1位(此位用於(yu) 奇偶校驗,無校應則無該位)
停止位 1或2位 1或2位
錯誤校驗 LRC(即縱向冗餘(yu) 校驗) CRC(即循環冗餘(yu) 校驗)
ASCII可打印字符便於(yu) 故障檢測,而且對於(yu) 用高級語言(如Fortan)編程的主計算機及主PC很適宜。RTU則適用於(yu) 機器語言編程的計算機和PC主 機。
用RTU模式傳(chuan) 輸的數據是8位二進製字符。如欲轉換為(wei) ASCII模式,則每個(ge) RTU字符首先應分為(wei) 高位和低位兩(liang) 部分,這兩(liang) 部分各含4位,然後轉換成十六進 製等量值。(https://www.dgzj.com/ 電工之家)用以構成報文的ASCII字符都是十六進製字符。ASCII模式使用的字符雖是RTU模式的兩(liang) 倍,但ASCII數據的譯瑪和處理更為(wei) 容易一些, 此外,用RTU模式時報文字符必須以連續數據流的形式傳(chuan) 送,用ASCII模式,字符之間可產(chan) 生長達1s的間隔,以適應速度較快的機器。表4給出了以RTU 方式讀取整數據的例子
以RTU方式讀取整數據的例子
主機請求
地址 功能碼 第一個(ge) 寄存器的高位地址 第一個(ge) 寄存器的低位地址 寄存器的數量的高位 寄存器的數量的底位 錯誤校驗
01 03 00 38 00 01 XX
從(cong) 機應答
地址 功能碼 字節數 數據高字節 數據低字節 錯誤校驗
01 03 2 41 24 XX
十六進製數4124表示的十進製整數為(wei) 16676,錯誤校驗值要根據傳(chuan) 輸方式而定。
(2)Modbus的數據校驗方式
CRC-16(循環冗餘(yu) 錯誤校驗)
CRC-16錯誤校驗程序如下:報文(此處隻涉及數據位,不指起始位、停止位和任選的奇偶校驗位)被看作是一個(ge) 連續的二進製,其最高有效位(MSB)首選 發送。報文先與(yu) X↑16相乘(左移16位),然後看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示為(wei) 二進製數 11000000000000101。整數商位忽略不記,16位餘(yu) 數加入該報文(MSB先發送),成為(wei) 2個(ge) CRC校驗字節。餘(yu) 數中的1全部初始化,以免所 有的零成為(wei) 一條報文被接收。經上述處理而含有CRC字節的報文,若無錯誤,到接收設備後再被同一多項式(X↑16+X↑15+X↑2+1)除,會(hui) 得到一個(ge) 零餘(yu) 數(接收設備核驗這個(ge) CRC字節,並將其與(yu) 被傳(chuan) 送的CRC比較)。全部運算以2為(wei) 模(無進位)。
習(xi) 慣於(yu) 成串發送數據的設備會(hui) 首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發送首位應是被除數的最高有效位MSB。由於(yu) 在運算中不 用進位,為(wei) 便於(yu) 操作起見,計算CRC時設MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其隻對商有影響而不影響 餘(yu) 數。
生成CRC-16校驗字節的步驟如下:
①裝如一個(ge) 16位寄存器,所有數位均為(wei) 1。
②該16位寄存器的高位字節與(yu) 開始8位字節進行“異或”運算。運算結果放入這個(ge) 16位寄存器。
③把這個(ge) 16寄存器向右移一位。
④若向右(標記位)移出的數位是1,則生成多項式1010000000000001和這個(ge) 寄存器進行“異或”運算;若向右移出的數位是0,則返 回③。
⑤重複③和④,直至移出8位。
⑥另外8位與(yu) 該十六位寄存器進行“異或”運算。
⑦重複③~⑥,直至該報文所有字節均與(yu) 16位寄存器進行“異或”運算,並移位8次。
⑧這個(ge) 16位寄存器的內(nei) 容即2字節CRC錯誤校驗,被加到報文的最高有效位。
另外,在某些非ModBus通信協議中也經常使用CRC16作為(wei) 校驗手段,而且產(chan) 生了一些CRC16的變種,他們(men) 是使用CRC16多項式X↑16+ X↑15+X↑2+1,單首次裝入的16位寄存器為(wei) 0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為(wei) 0000或 FFFFH。
LRC(縱向冗餘(yu) 錯誤校驗)
LRC錯誤校驗用於(yu) ASCII模式。這個(ge) 錯誤校驗是一個(ge) 8位二進製數,可作為(wei) 2個(ge) ASCII十六進製字節傳(chuan) 送。把十六進製字符轉換成二進製,加上無循環進 位的二進製字符和二進製補碼結果生成LRC錯誤校驗(參見圖)。這個(ge) LRC在接收設備進行核驗,並與(yu) 被傳(chuan) 送的LRC進行比較,冒號(:)、回車符號 (CR)、換行字符(LF)和置入的其他任何非ASCII十六進製字符在運算時忽略不計。
表5 LRC生成範例--讀取02號從(cong) 機的前8個(ge) 線圈
十六進製 二進製
地址 0 2 0000 0010
功能碼 0 1 0000 0001
起始地址高位 0 0 0000 0000
起始地址低位 0 0 0000 0000
單元數量 0 0 0000 0000
0 8 + 0000 1000
0000 1011
變成補碼 1111 0101
錯誤校驗 F 5 F 5
接受PC把所有收到的數據字節(包括最後的LRC)加在一起,8位應全部為(wei) 0(注意:和可能超過8位,應略去最低位)
0000 0010
0000 0001
0000 0000
0000 0000
0000 0000
0000 1000
錯誤校驗 1111 0101
和 0000 0000