ModBus網絡是一個工業通信系統,由帶智能終端的可程式設計式控制器和計算機通過公用線路或局部專用線路連接配接而成。其系統結構既包括硬體、亦包括軟體。它可應用于各種資料采集和過程監控。下表1是ModBus的功能碼定義。
表1 ModBus功能碼
功能碼 | 名稱 | 作用 |
01 | 讀取線圈狀态 | 取得一組邏輯線圈的目前狀态(ON/OFF) |
02 | 讀取輸入狀态 | 取得一組開關輸入的目前狀态(ON/OFF) |
03 | 讀取保持寄存器 | 在一個或多個保持寄存器中取得目前的二進制值 |
04 | 讀取輸入寄存器 | 在一個或多個輸入寄存器中取得目前的二進制值 |
05 | 強置單線圈 | 強置一個邏輯線圈的通斷狀态 |
06 | 預置單寄存器 | 把具體二進值裝入一個保持寄存器 |
07 | 讀取異常狀态 | 取得8個内部線圈的通斷狀态,這8個線圈的位址由控制器決定,使用者邏輯可以将這些線圈定義,以說明從機狀态,短封包适宜于迅速讀取狀态 |
08 | 回送診斷校驗 | 把診斷校驗封包送從機,以對通信處理進行評鑒 |
09 | 程式設計(隻用于484) | 使主機模拟程式設計器作用,修改PC從機邏輯 |
10 | 控詢(隻用于484) | 可使主機與一台正在執行長程式任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的封包發送後,本功能碼才發送 |
11 | 讀取事件計數 | 可使主機發出單詢問,并随即判定操作是否成功,尤其是該指令或其他應答産生通信錯誤時 |
12 | 讀取通信事件記錄 | 可是主機檢索每台從機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤 |
13 | 程式設計(184/384 484 584) | 可使主機模拟程式設計器功能修改PC從機邏輯 |
14 | 探詢(184/384 484 584) | 可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程式操作,僅在含有功能13的封包發送後,本功能碼才得發送 |
15 | 強置多線圈 | 強置一串連續邏輯線圈的通斷 |
16 | 預置多寄存器 | 把具體的二進制值裝入一串連續的保持寄存器 |
17 | 報告從機辨別 | 可使主機判斷編址從機的類型及該從機運作訓示燈的狀态 |
18 | (884和MICRO 84) | 可使主機模拟程式設計功能,修改PC狀态邏輯 |
19 | 重置通信鍊路 | 發生非可修改錯誤後,是從機複位于已知狀态,可重置順序位元組 |
20 | 讀取通用參數(584L) | 顯示擴充存儲器檔案中的資料資訊 |
21 | 寫入通用參數(584L) | 把通用參數寫入擴充存儲檔案,或修改之 |
22~64 | 保留作擴充功能備用 | |
65~72 | 保留以備使用者功能所用 | 留作使用者功能的擴充編碼 |
73~119 | 非法功能 | |
120~127 | 保留 | 留作内部作用 |
128~255 | 用于異常應答 |
ModBus網絡隻是一個主機,所有通信都由他發出。網絡可支援247個之多的遠端從屬控制器,但實際所支援的從機數要由所用通信裝置決定。采用這個系統,各PC可以和中心主機交換資訊而不影響各PC執行本身的控制任務。表2是ModBus各功能碼對應的資料類型。
表2 ModBus功能碼與資料類型對應表
代碼 | 功能 | 資料類型 |
讀 | 位 | |
整型、字元型、狀态字、浮點型 | ||
整型、狀态字、浮點型 | ||
寫 | ||
N/A | 重複“回路回報”資訊 | |
字元型 |
(1)ModBus的傳輸方式
在ModBus系統中有2種傳輸模式可選擇。這2種傳輸模式與從機PC通信的能力是同等的。選擇時應視所用ModBus主機而定,每個ModBus系統隻能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國資訊交換碼),另一種模式是RTU(遠端終端裝置)這兩種模式的定義見表3
表3 ASCII和RTU傳輸模式的特性
特性 | ASCII(7位) | RTU(8位) | |
編碼系統 | 十六進制(使用ASCII可列印字元:0~9,A~F) | 二進制 | |
每一個字元的位數 | 開始位 | 1位 | |
資料位(最低有效位第一位) | 7位 | 8位 | |
奇偶校驗(任選) | 1位(此位用于奇偶校驗,無校應則無該位) | ||
停止位 | 1或2位 | ||
錯誤校驗 | LRC(即縱向備援校驗) | CRC(即循環備援校驗) |
ASCII可列印字元便于故障檢測,而且對于用進階語言(如Fortan)程式設計的主計算機及主PC很适宜。RTU則适用于機器語言程式設計的計算機和PC主機。
用RTU模式傳輸的資料是8位二進制字元。如欲轉換為ASCII模式,則每個RTU字元首先應分為高位和低位兩部分,這兩部分各含4位,然後轉換成十六進制等量值。用以構成封包的ASCII字元都是十六進制字元。ASCII模式使用的字元雖是RTU模式的兩倍,但ASCII資料的譯瑪和處理更為容易一些,此外,用RTU模式時封包字元必須以連續資料流的形式傳送,用ASCII模式,字元之間可産生長達1s的間隔,以适應速度較快的機器。
表4給出了以RTU方式讀取整資料的例子
以RTU方式讀取整資料的例子
主機請求 | ||||||
位址 | 第一個寄存器的高位位址 | 第一個寄存器的低位位址 | 寄存器的數量的高位 | 寄存器的數量的底位 | ||
00 | 38 | XX |
從機應答 | |||||
位元組數 | 資料高位元組 | 資料低位元組 | |||
41 | |||||