1.簡介
HART(Highway Addressable Remote Transducer可定址遠端感測器高速通道)協議,主要用於工業自動化領域的通訊協議,專為傳送和接收數字資訊而設計,同時也支援模擬訊號(如4-20 mA訊號)的傳輸。這種設計使得HART裝置能夠同時傳輸模擬訊號和數字資料,從而提供了更加靈活和強大的通訊能力。
標準的HART傳輸是疊加在4-20mA訊號上的FSK(移動鍵控)訊號,替代方案是C8PSK(同調8路相移鍵控)訊號,代替方案提高了HART的數字傳輸速率。此外還有一些基於RS-485、IP、TDMA的HART通訊方式,在此不再贅述。
本文僅討論HART FSK。
2.報文格式
2.1 HART位元組
因為HART協議有自己獨特的物理層通訊方式,所以其在資料鏈路層上的傳輸採用一個被稱為HART位元組組的傳輸方式,每次傳輸會傳送一個11位的HART位元組,多個HART位元組中的資料部分組合成一個有效的HART資料幀。(這個過程可以不準備的類比成一長串資料透過多個TCP/IP資料包傳送的過程)
HART位元組的格式如下:
用途 | 開始位 | HART位元組 | 奇校驗位 | 停止位 |
---|---|---|---|---|
長度 | 1bit | 8bit | 1bit | 1bit |
描述 | 固定為0,表示開始 | HART資料,從LSB(最低有效位)開始,以MSB(最高有效位)結束。 | 用於校驗資料 | 固定為1,表示結束 |
2.2HART報文格式
結構如下:
用途 | 長度 | 描述 |
---|---|---|
前導碼 | 5-20位元組 | 5-20個0xFF,用於傳輸的開始, |
起始位元組 | 1位元組 | 用來標識資料包的起始位置 |
地址 | 1或5位元組 | 包含了主機地址和從機地址,短幀中佔1位元組,長幀中佔5位元組 |
擴充套件 | 0-3位元組 | 用於潛在的擴充套件,長度由其實位元組指示 |
命令 | 1位元組 | 表示這條資料的作用 |
位元組計數 | 1位元組 | 狀態和資料部分的大小,單位:位元組 |
狀態 | 2位元組 | 只存在於從機響應主機的訊息,報告錯誤和狀態 |
資料 | 0-253位元組 | 不是所有的命令都有資料位元組,用於存放資料 |
校驗和 | 1位元組 | 縱向奇偶校驗,用於檢測錯誤 |
2.2.1 前導碼
前導碼出現在每條訊息的開頭。前導碼由一系列相同的位元組組成,通常是連續的"FF"位元組(在二進位制中為11111111)。前導碼的主要作用包括幾個方面:
-
同步:前導碼為接收裝置提供了同步訊號,幫助接收裝置確定資料幀的開始位置。透過識別這一系列重複的模式,接收端的解碼器可以與傳送端的資料流同步,從而正確地解讀後續傳來的資訊(比如起始位、地址、命令、資料等)。
-
清除線路:連續的前導碼有助於清除通訊線路上的任何噪聲或干擾,確保資料傳輸的清晰度和準確性。這種"清道"的作用對於在現場環境中執行的工業裝置尤其重要,因為這些環境往往充滿電磁干擾。
-
接收器準備:前導碼還給接收裝置足夠的時間來準備接收即將到來的資料。在HART通訊中,接收裝置(如處理器或控制器)需要調整其接收機制以準確解碼即將到來的資訊。前導碼的存在為這種調整提供了緩衝時間。
2.2.2 起始位元組
結構:
用途 | 地址型別 | 擴充套件位元組數 | 物理層型別 | 幀型別 |
---|---|---|---|---|
長度 | 1bit | 2bit | 2bit | 3bit |
描述 | 0:輪詢 - 位元組地址(短幀) 1:唯一 - 位元組地址(長幀) |
通常為00 | 00:非同步(例如,FSK) 11:同步(例如,C8PSK |
001:突發幀響應 010:主機到現場裝置 110:現場裝置到主機 |
2.2.3 地址
地址部分,1位元組為短幀,5位元組為長幀。
短幀:
用途 | 主機序 | 突發模式 | 空 | 裝置地址 |
---|---|---|---|---|
長度 | 1bit | 1bit | 2bit | 4bit |
描述 | 1:第一主機 0:第二主機 |
1:是 0:否 |
始終為00 |
長幀:
用途 | 主機序 | 突發模式 | 擴充套件的裝置型別 | 裝置ID |
---|---|---|---|---|
長度 | 1bit | 1bit | 14bit | 24bit |
描述 | 1:第一主機 0:第二主機 |
1:是 0:否 |
2.2.4 擴充套件
擴充套件部分主要為未來預留,它主要規劃了以下方面的作用:
- 裝置識別和分類:擴充套件欄位允許對連線到系統的裝置進行更詳細的識別和分類。透過這些欄位,系統可以識別裝置的型別、製造商和其他相關資訊。這對於系統配置和故障排除非常有用。
- 增強的裝置資訊:一些擴充套件欄位用於儲存有關裝置效能、功能和配置選項的額外資訊。這使得操作者可以更準確地控制裝置,同時最佳化系統的整體效能。
- 改進的診斷能力:擴充套件欄位可以包含有關裝置狀態和健康的詳細資訊,使得對裝置進行遠端監控和診斷成為可能。這有助於提前發現問題,減少系統停機時間。
- 更高的資料傳輸效率:透過利用擴充套件欄位傳輸資料,HART協議能夠在保持向後相容的同時,提供更高的資料傳輸效率和更大的資料容量。
- 支援新技術和功能:隨著過程控制技術的發展,新的監測和控制需求不斷出現。擴充套件欄位為支援這些新技術和功能提供了可能,確保了HART協議的長期適用性和靈活性。
2.2.5 命令
命令分為三種類別:通用、常用實踐(也譯作常見做法)、裝置特定(專用命令),通用命令即所有采用HART協議的裝置都要遵循的,常用實踐為常見裝置都要遵循的,特備特定為針對某些廠家或型號的裝置才有的命令。
機翻自HART通訊基金會官網
命令編號 | 命令描述 | 型別 |
---|---|---|
0 | 讀取裝置ID | 通用 |
1 | 讀取主要變數 | 通用 |
2 | 讀取回路電流和量程百分比 | 通用 |
3 | 讀取動態變數和迴路電流 | 通用 |
6 | 寫入輪詢地址 | 通用 |
7 | 讀取回路配置 | 通用 |
8 | 讀取動態變數分類 | 通用 |
9 | 帶狀態讀取裝置變數 | 通用 |
11 | 讀取與標籤關聯的唯一識別符號 | 通用 |
12 | 讀取資訊 | 通用 |
13 | 讀取標籤、描述符、日期 | 通用 |
14 | 讀取主要變數感測器資訊 | 通用 |
15 | 讀取裝置資訊 | 通用 |
16 | 讀取最終組裝號 | 通用 |
17 | 寫資訊 | 通用 |
18 | 寫標籤、描述符、日期 | 通用 |
19 | 寫最終組裝號 | 通用 |
20 | 讀取長標籤 | 通用 |
21 | 讀取與長標籤關聯的唯一識別符號 | 通用 |
22 | 寫長標籤 | 通用 |
38 | 重置配置更改標誌 | 通用 |
48 | 讀取額外的裝置狀態 | 通用 |
33 | 讀取裝置變數 | 常用實踐 |
34 | 寫主要變數阻尼值 | 常用實踐 |
35 | 寫主要變數量程值使用命令35寫入的資料將更新選單中的4mA和20mA設定 | 常用實踐 |
36 | 設定主要變數上限量程值 | 常用實踐 |
37 | 設定主要變數下限量程值 | 常用實踐 |
40 | 進入/退出固定電流模式 | 常用實踐 |
41 | 執行自檢 | 常用實踐 |
44 | 寫主要變數單位 | 常用實踐 |
45 | 調整迴路電流零點 | 常用實踐 |
46 | 調整迴路電流增益 | 常用實踐 |
47 | 寫主要變數傳遞函式 | 常用實踐 |
54 | 讀取裝置變數資訊 | 常用實踐 |
59 | 寫響應前導符數量 | 常用實踐 |
71 | 鎖定裝置 | 常用實踐 |
76 | 讀取裝置鎖定狀態 | 常用實踐 |
140 | 寫入場統計資訊 覆蓋裝置記錄的最大值和最小值 | 裝置特定 |
141 | 讀取場統計資訊 從裝置讀取當前的最大值和最小值 | 裝置特定 |
144 | 寫開關1配置 寫入開關1模式、設定點、死區、鎖存設定、延遲設定 | 裝置特定 |
145 | 讀開關1配置 讀取開關1模式、設定點、死區、鎖存設定、延遲設定 | 裝置特定 |
221 | 啟用/禁用防寫,修改密碼 允許啟用/禁用防寫模式並允許編輯裝置密碼 | 裝置特定 |
222 | 讀、防寫狀態 讀取裝置的防寫狀態 | 裝置特定 |
223 | 寫入跳閘計數器 向與開關1和開關2關聯的跳閘計數器寫入一個0 – 9999之間的無符號16位整數 | 裝置特定 |
224 | 切換 1和2 讀取與開關1和開關2關聯的跳閘計數器的值,該數值為一個0 – 9999之間的無符號16位整數 | 裝置特定 |
225 | 手動重置 重置一個或多個處於鎖存狀態的開關 | 裝置特定 |
226 | 讀取開關鎖存狀態 讀取一個或多個開關的鎖存狀態 | 裝置特定 |
244 | 寫開關2配置 寫入開關2模式、設定點、死區、鎖存設定、延遲設定 | 裝置特定 |
245 | 讀開關2配置 讀取開關2模式、設定點、死區、鎖存設定、延遲設定 | 裝置特定 |
246 | 寫堵塞埠設定 | 裝置特定 |
247 | 讀堵塞埠設定 | 裝置特定 |
248 | 寫偏移和量程 | 裝置特定 |
249 | 讀偏移和量程 | 裝置特定 |
2.2.6 狀態
狀態分1個位元組的響應碼和1個位元組的裝置狀態碼。
2.2.6.1 響應碼
正常通訊時,最高bit為0,響應碼為:
響應碼 | 含義 |
---|---|
0x00 | 執行成功 |
0x02 | 錯誤的命令 |
0x03 | 設定引數太大 |
0x04 | 設定引數太少 |
0x05 | 接收的資料太少 |
0x06 | 專用命令錯 |
0x07 | 處於防寫模式 |
0x08 | 1、更新失敗2、設定為接近值3、延時響應 |
0x09 | 1、低限範圍值太大2、不正確的電流模式 |
0x0a | 1、低限範圍值太小2、無效的就地鎖定 |
0x0b | 1、上限範圍值太大2、多從機模式3、無效裝置變數程式碼4、調整超範圍5、不能就地鎖定 |
0x0c | 1、上限範圍值太小2、無效單位程式碼3、無效的模式選擇4、無效的插槽號 |
0x0d | 1、上、下限範圍值超標2、計算錯誤3、無效的命令號 |
0x0e | 1、量程太小2、設定的下限值引起上限值改變而超出感測器極限 |
0x0f | 無效的模擬通道號 |
0x10 | 訪問受限 |
0x11 | 無效的裝置變數索引 |
0x12 | 無效的單位程式碼 |
0x13 | 裝置變數的應用不合理 |
0x14 | 無效的擴充套件命令號 |
0x1c | 不支援的單位程式碼 |
0x20 | 忙 |
0x21 | 延遲響應開始 |
0x22 | 延遲響應進行中 |
0x40 | 命令不能執行 |
通訊故障時,最高位bit為1,響應碼為:
響應碼 | 含義 |
---|---|
0xc0 | 接收位元組位元組奇校驗出錯 |
0xa0 | 接收緩衝區資料覆蓋錯 |
0x90 | 沒有接收到停止位出錯 |
0x88 | 校驗位元組出錯 |
0x82 | 接收緩衝區溢位 |
具體含義受不同命令影響,想見基金會資料。
2.2.6.2 裝置狀態碼
狀態碼 | 含義 |
---|---|
0x80 | 裝置故障 |
0x40 | 配置引數改變 |
0x20 | 裝置冷啟動 |
0x08 | 環路電流固定模式 |
0x04 | 環路電流飽和 |
0x02 | 裝置變數(沒有對映到主變數)超限 |
0x01 | 主變數超出極限 |
2.2.7 資料
資料部分格式取決於命令的不同,均由不同的命令定義。