李曉俊 李宥謀 閆海卿 李延峰
(西安郵電大學計算機學院 西安 710100)
隨著人工智能和大數據的發展,未來領域儀器和測控技術的完美結合將使儀器變得更加網絡化、智能化和數字化[1]。儀器使用起來也會更加方便,對于剛入門的新手來說只要按照說明書,就可以簡單方便地使用儀器設備,更快地融入工作中。
目前虛擬化的測量和儀器有很多優點,主要是用戶可以自定義測量,結構簡單,轉換靈活[2]。虛擬化已經應用在全世界的各個領域中,包括每個國家最看重的軍事領域都能隨時看到虛擬化的儀器,包括軍用的武裝直升機、坦克、軍艦和航空母艦等都配備了這種先進的設備。
基于μC/OS-II 系統和HISLIP 協議實時性及精簡性能,提出了基于μC/OS-II 系統的HISLIP 遠程測控的設計方案[3~6]。它融合了自動控制技術、現代電子技術、計算機技術等多種技術,結合了信息化和自動化的特點,把以前不能連網的設備通過代理接入網絡中,使工作人員可以通過代理來對設備進行控制和管理。測控人員通過控制臺界面的一些簡單的操作就可以把監控現場的監控信息通過計算機網絡傳輸到管理界面,從而達到遠程測控的目的。本課題以μC/OS-II 系統下HISLIP 遠程測控通信為研究對象,硬件方面采用LPC1768為微處理器的開發板,操作系統采用μC/OS-II 系統,這兩者結合為我們提供了一個嵌入式環境;HISLIP 協議為測控協議,提高了數據的可靠性和安全性。本課題設計的軟件系統開發維護容易、功能完備,很好地實現傳統工業設備改造升級,具有一定的現實意義和應用價值。實現的遠程測控代理模塊,使用數字化的測控方式能夠實現從遠程到終端的具體控制,而且能夠在處理中得到實時可靠準確的數據。
實時操作系統,即RTOS(Real-Time Operating System),是指當外界事件或數據產生時,能夠接受并以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,并控制所有實時任務協調一致運行的操作系統。在軍事領域對系統都有超高要求。尤其是實時性方面更是戰場致勝的關鍵因素,所以實時性對它們而言是非常重要的。因此,RTOS 主要用于對響應時間具有較高實時性要求的嵌入式系統中。
操作系統運行時,如果占用的CPU內存非常低且實時性較好,有可剝奪的內核可以及時處理緊急任務,那么它就是一個性能良好的內核。我們本次使用的μC/OS-II,滿足以上幾點要求。
μC/OS-II 操作系統與其他系統的主要區別是μC/OS-II 操作系統它沒有進程和線程,μC/OS-II操作系統采用的是為每一個任務建立優先級。它的任務采用可剝奪的形式,高優先級的任務可以打斷低優先級的任務,高優先級的任務有優先執行的權利。μC/OS-II操作系統的內核包含了任務調度、信號量、消息隊列、郵箱等,可以實現任務之間同步通信與異步通信。同時還提供了中斷服務、內存管理等功能。如果想要準確的預測、能夠及時判斷、有效控制在預定時間內完成所設定的目標,因此需要可預測的執行時間,所以當想運行速度快時,只要選擇一個速度合適的CPU即可,這個需要的速度在μC/OS-II 系統中是可以精確算出來。因此,μC/OS-II操作系統稱為實時操作系統。
現在,我們看到的多數嵌入式系統都不是免費的,比如Vx work系統等;而且操作系統對硬件支持要求較高,比如要有快速運行的CPU、CPU 內部要有MMU單元和較大的存儲空間等。操作系統本身費用和開發工具價格也比較昂貴,所以開源的實時操作系統在價格方面有了明顯的優勢,目前選擇較多的操作系統有linux和μC/OS-II系統。
μC/OS-II系統具有較好的可擴展性、程序代碼免費開源、資料豐富、技術成熟、簡單易用、易于維護、優化和移植等特點,適合用于教學科研和一些實時系統的應用。μC/OS 面世的這幾十年來,在雷達系統、POS 機、人工智能等領域的都有應用[7],這些實踐證明μC/OS-II實時系統的實用性、無誤性是非常好的,綜合了多種因素,綜合考慮選擇了μC/OS-II實時操作系統。
HISLIP 協議與傳統儀器作比較的話,HISLIP協議可以為我們提供相同的測量功能,并且它可以實現遠程控制[8]。HISLIP 在通信時創建兩個TCP連接到相同的服務器端口[端口分配HISLIP IANA 4880]來建立同步通道和異步通道。這兩條通道為HISLIP 消息的數據收發和異常處理的提供通道。
同步通道以同步的方式來執行SCPI 和類似GPIB 的類似元消息。同步通道主要用來實現正常狀態下的命令的收發與信息傳輸,同時也可以將消息保存在同步緩沖區。
異步通道完成的主要功能是為有較高優先級的鎖機制、中斷、異步中斷、設備清除、未知錯誤等消息提供傳輸通道,并在來自同步通道的消息之前對其執行操作。同步和異步通道都是頭部消息為16 字節的固定格式,消息負載在頭部之后,具體消息的大小有頭部中的負載長度來說明。
所有HISLIP 客戶端和服務器在默認情況下使用IANA 分配的端口號4880。這并不排除配置為在其他端口上使用HISLIP協議的HISLIP客戶端和服務器。
HISLIP幀格式如圖1所示。

圖1 HISLIP協議的幀格式
1)由圖1 我們可以看到 HISLIP 協議的一、二字節分別是“H”“S”的 ASCII 碼值。“H”“S”為我們提供了消息驗證機制,如果接收到的前兩個字節消息不是“H”“S”,這該消息應被舍棄。
2)幀格式中的第三個字節是消息類型(Message Type),是我們收發消息的識別碼,用來表示消息的類型。不同消息類型負載不同,可以根據消息的類型來解析出需要的信息。
3)第四個字節為隨消息類型的變化而變化控制碼(Control Code),該字段表明當前消息的響應參數。
4)消息參數(Message Parameter)用4 個字節來說明在不同類型的消息中起到的不同作用。
5)隨后的八個字節是數據長度(Payload Length),它表明消息的負載長度,個別類型的消息負載為0。
6)最后是可變長度的數據段(Data),負載內容是根據具體消息類型的實際數據來決定。
首先,將HISLIP 協議的服務器端與設備進行連接。然后,HISLIP 服務器開啟,監聽HISLIP 客戶端的請求。當服務器端收到客戶端的請求后,客戶端與服務器通過TCP協議三次握手建立連接后,阻塞等待客戶端請求[9~12]。客戶端與服務器建立連接后,將消息封裝進行傳輸[13]。HISLIP 客戶端通過網絡發送數據給HISLIP 服務器。當服務器端接收到相應的數據包后,對數據包的頭部消息進行分析處理,根據不同的消息類型得到不同的信息。通過簡析消息負載,將得到的命令對設備進行對應的操作。最后,服務器將由子模塊返回來的HISLIP 包發送給客戶端,并且刪除剛創建的新任務,這樣就實現了對設備的遠程測量控制。流程圖如圖2 所示。

圖2 HISLIP總體架構設計圖
3.2.1 HISLIP協議的數據結構
在程序設計中消息格式的數據結構:

3.2.2 HISLIP建立連接
1)服務器處于監聽狀態,監聽客戶端的請求并與之建立同步通道;
2)客戶端發送初始化消息:<初始化><0><客戶端協議版本+客戶端廠商標識符><客戶端的ip地址>;
3)服務器端發送響應消息:<初始化響應><工作模式><服務器協議版本+設備會話號><0>;
4)客戶端再次請求建立連接,主要是為了建立異常消息的異步通道;
5)客戶端發送異步通道初始化消息:<異步初始化><0><設備會話號><0>;
6)服務器端發送的響應消息:<異步初始化響應><0><服務器端廠商標示符><0>。
3.2.3 消息析構模塊設計與實現
服務器將接收到的客戶端消息按照協議結構體以字節來進行解包。
1)先對前16 字節中的前兩個字節進行分析,查看消息頭的prolong 是否是ASCII 碼的“HS”,如果不是的話,消息出錯;
2)判斷HISLIP 消息的頭部是否是16 字節,大于或小于16字節,都是錯誤消息;
3)將HISLIP協議賦值給局部變量;
4)使用switch……case語句對消息類型字段進行判斷,匹配后調用對應模塊處理,進行處理;
5)將得到的數據返回改客戶端。
3.2.4 消息處理模塊設計與實現
消息處理模塊包含的模塊有:異步通道初和同步通道始化信息響應模塊、異步通道最大數據響應模塊、鎖信息響應模塊、鎖信息查詢響應模塊、設備清楚完成告知模塊、遠程本地控制模塊、數據結束消息響應模塊、鎖請求響應模塊等多個模塊,根據不同的需求實現不同的功能。實現對設備的遠程通信及控制,具體用一下幾個模塊來說明。
static int server_initialize(void)
實現服務器的初始化操作,創建socket,綁定端口和服務器端IP地址,監聽客戶端的請求信息。
static int handle_async_message_size()
服務器與客戶端協商和約定消息式尺寸的函數。
static int recv_message_handle()
服務器用來處理接收到消息,主要完成數據包的解析。判斷是否是HISLIP 消息,頭部消息是否滿足要求,消息類型的分析以及相應模塊函數的選取。
static int communicate_device()
實現服務器與設備間的直接通信。
static int handle_async_lock()
為設備的進行鎖操作,針對客戶端進行權限設置,可以有效保證資源的安全性。
void send_data()和 void send_dataend()
send_data()用來傳輸可以一次性把數據傳輸完成的消息,而send_dataend()是傳輸需要分為多次傳輸的消息。
本節主要介紹了遠程測控代理的硬件和軟件設計方案,硬件平臺主要包括了核心處理器、外圍電路以及各種接口,例如采用了恩智浦公司LPC1768 芯片為處理器為核心,以DP83640 為以太網物理芯片,并且使用了USB接口、串口、IIC接口、CAN 總線等多種接口的開發板。在此硬件基礎上進行軟件系統的方案設計,以及敘述HISLIP 服務端架構設計。
本課題設計的遠程測控系統代理模塊主要組成如下,遠端儀器管理模塊、儀器代理模塊和各類儀器設備等[14~15]。模型如圖3所示。

圖3 測控總體設計方案
為了使不能上網的傳統的儀器設備(不具有以太網的接口的設備)能夠實現網絡通信功能,本文選擇了處理器響應速度快、外設接口豐富、超低功耗、尺寸小、性價比高的LPC1768 處理器為核心,DP83640為以太網物理芯片的開發板。
如果硬件平臺是設計骨架的話,那么軟件平臺的就是設計的血肉。所以,我們需要符合設計的軟件平臺。本次軟件管理平臺采用了SNMP(Simple Network Management Protocol)協議對遠程測控代理模塊進行配置[17],由 trap 來發送告警信息;采用自動發現協議得到代理模塊是否在線信息;利用HISLIP協議來采集模塊數據、控制相應的硬件模塊。

圖4 代理的軟件設計
本文研究的是遠程測控代理的設計與實現,為了對本課題所開發的軟件進行測試,搭建如下的測試環境。需要的設備有遠程控制PC 機,路由器,LPC1768 開發板,儀器包括US-100 傳感器、GY-80傳感器、示波器等,整個測控系統的硬件連接圖如圖5 所示。首先將傳感器、示波器以及信號發生器與代理相連,之后將代理與局域網路由器相連,同時PC機也與路由器相連組成一套設備測量系統。
硬件平臺完成后,我們開始搭建軟件平臺。首先,開啟HISLIP 服務器,服務器端監聽客戶端的請求。如果沒有客戶端連接請求,則一直在循環監聽,直到有客戶端連接。當服務器與客戶端建立連接之后,創建第二個任務處理來處理接收到的數據包。根據協議的要求將數據包進行解包操作,完成相應的命令處理,將處理結果返回給客戶端,同時刪除此任務。服務器繼續監聽其他客戶端的連接請求。
客戶端運行HISLIP 客戶端程序,在有需求時向服務器端發送請求,客戶端與命令行中的IP 地址所指的服務器端建立連接。HISLIP 協議的通信模式有兩種,分別是重疊模式和同步模式。本文就針對這兩個模式來進行測試。示波器的SCPI 命令*IDN?命令是取波命令,為與示波器的命令(SCPI命令)進行統一,自定義一個SCPI 命令為命令行中的*IDN1?。所以本文設置*IDN1?為取傳感器US-100測室內溫度的命令。
同步模式就是指客戶端需要接收到每一個發送上來的請求結果之后才能發送下一個請求,不能連續發送,就是發送一個命令處理一個結果及時的返回。從圖5中可以看出室內的溫度為19°。
同步模式時,傳感器的測量結果如圖5所示。

圖5 同步模式
重疊模式可以一次連續發送多個SCPI 命令,等待服務器端全部處理完之后再把所有的結果全部返回,這剛好與同步模式相反,圖6 是測量后全部返回的結果。
重疊模式測量結果如下。
圖6(a)中,客戶端在重疊模式下,同時發送3個請求命令,6(b)中顯示服務器端在同時接收多個命令后返回處理結果,分別是23°,23°與22°。

圖6 重疊模式
本文主要研究的是基于μC/OS-II 系統的HISLIP代理的設計與實現。因此首先對代理環境的搭建進行了說明;其次在整個系統環境搭建完成后,對遠程測控代理中實現的各個模塊功能進行測試,測試完成后通過截取客戶端和服務器端的信息交互圖進行具體的分析。整個測試結果表明代理能夠為客戶端提供儀器數據的采集以及對儀器設備的實時監控管理。