李曉俊 李宥謀 閆海卿 李延峰
(西安郵電大學(xué)計(jì)算機(jī)學(xué)院 西安 710100)
隨著人工智能和大數(shù)據(jù)的發(fā)展,未來(lái)領(lǐng)域儀器和測(cè)控技術(shù)的完美結(jié)合將使儀器變得更加網(wǎng)絡(luò)化、智能化和數(shù)字化[1]。儀器使用起來(lái)也會(huì)更加方便,對(duì)于剛?cè)腴T(mén)的新手來(lái)說(shuō)只要按照說(shuō)明書(shū),就可以簡(jiǎn)單方便地使用儀器設(shè)備,更快地融入工作中。
目前虛擬化的測(cè)量和儀器有很多優(yōu)點(diǎn),主要是用戶可以自定義測(cè)量,結(jié)構(gòu)簡(jiǎn)單,轉(zhuǎn)換靈活[2]。虛擬化已經(jīng)應(yīng)用在全世界的各個(gè)領(lǐng)域中,包括每個(gè)國(guó)家最看重的軍事領(lǐng)域都能隨時(shí)看到虛擬化的儀器,包括軍用的武裝直升機(jī)、坦克、軍艦和航空母艦等都配備了這種先進(jìn)的設(shè)備。
基于μC/OS-II 系統(tǒng)和HISLIP 協(xié)議實(shí)時(shí)性及精簡(jiǎn)性能,提出了基于μC/OS-II 系統(tǒng)的HISLIP 遠(yuǎn)程測(cè)控的設(shè)計(jì)方案[3~6]。它融合了自動(dòng)控制技術(shù)、現(xiàn)代電子技術(shù)、計(jì)算機(jī)技術(shù)等多種技術(shù),結(jié)合了信息化和自動(dòng)化的特點(diǎn),把以前不能連網(wǎng)的設(shè)備通過(guò)代理接入網(wǎng)絡(luò)中,使工作人員可以通過(guò)代理來(lái)對(duì)設(shè)備進(jìn)行控制和管理。測(cè)控人員通過(guò)控制臺(tái)界面的一些簡(jiǎn)單的操作就可以把監(jiān)控現(xiàn)場(chǎng)的監(jiān)控信息通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)傳輸?shù)焦芾斫缑?,從而達(dá)到遠(yuǎn)程測(cè)控的目的。本課題以μC/OS-II 系統(tǒng)下HISLIP 遠(yuǎn)程測(cè)控通信為研究對(duì)象,硬件方面采用LPC1768為微處理器的開(kāi)發(fā)板,操作系統(tǒng)采用μC/OS-II 系統(tǒng),這兩者結(jié)合為我們提供了一個(gè)嵌入式環(huán)境;HISLIP 協(xié)議為測(cè)控協(xié)議,提高了數(shù)據(jù)的可靠性和安全性。本課題設(shè)計(jì)的軟件系統(tǒng)開(kāi)發(fā)維護(hù)容易、功能完備,很好地實(shí)現(xiàn)傳統(tǒng)工業(yè)設(shè)備改造升級(jí),具有一定的現(xiàn)實(shí)意義和應(yīng)用價(jià)值。實(shí)現(xiàn)的遠(yuǎn)程測(cè)控代理模塊,使用數(shù)字化的測(cè)控方式能夠?qū)崿F(xiàn)從遠(yuǎn)程到終端的具體控制,而且能夠在處理中得到實(shí)時(shí)可靠準(zhǔn)確的數(shù)據(jù)。
實(shí)時(shí)操作系統(tǒng),即RTOS(Real-Time Operating System),是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來(lái)控制生產(chǎn)過(guò)程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的操作系統(tǒng)。在軍事領(lǐng)域?qū)ο到y(tǒng)都有超高要求。尤其是實(shí)時(shí)性方面更是戰(zhàn)場(chǎng)致勝的關(guān)鍵因素,所以實(shí)時(shí)性對(duì)它們而言是非常重要的。因此,RTOS 主要用于對(duì)響應(yīng)時(shí)間具有較高實(shí)時(shí)性要求的嵌入式系統(tǒng)中。
操作系統(tǒng)運(yùn)行時(shí),如果占用的CPU內(nèi)存非常低且實(shí)時(shí)性較好,有可剝奪的內(nèi)核可以及時(shí)處理緊急任務(wù),那么它就是一個(gè)性能良好的內(nèi)核。我們本次使用的μC/OS-II,滿足以上幾點(diǎn)要求。
μC/OS-II 操作系統(tǒng)與其他系統(tǒng)的主要區(qū)別是μC/OS-II 操作系統(tǒng)它沒(méi)有進(jìn)程和線程,μC/OS-II操作系統(tǒng)采用的是為每一個(gè)任務(wù)建立優(yōu)先級(jí)。它的任務(wù)采用可剝奪的形式,高優(yōu)先級(jí)的任務(wù)可以打斷低優(yōu)先級(jí)的任務(wù),高優(yōu)先級(jí)的任務(wù)有優(yōu)先執(zhí)行的權(quán)利。μC/OS-II操作系統(tǒng)的內(nèi)核包含了任務(wù)調(diào)度、信號(hào)量、消息隊(duì)列、郵箱等,可以實(shí)現(xiàn)任務(wù)之間同步通信與異步通信。同時(shí)還提供了中斷服務(wù)、內(nèi)存管理等功能。如果想要準(zhǔn)確的預(yù)測(cè)、能夠及時(shí)判斷、有效控制在預(yù)定時(shí)間內(nèi)完成所設(shè)定的目標(biāo),因此需要可預(yù)測(cè)的執(zhí)行時(shí)間,所以當(dāng)想運(yùn)行速度快時(shí),只要選擇一個(gè)速度合適的CPU即可,這個(gè)需要的速度在μC/OS-II 系統(tǒng)中是可以精確算出來(lái)。因此,μC/OS-II操作系統(tǒng)稱為實(shí)時(shí)操作系統(tǒng)。
現(xiàn)在,我們看到的多數(shù)嵌入式系統(tǒng)都不是免費(fèi)的,比如Vx work系統(tǒng)等;而且操作系統(tǒng)對(duì)硬件支持要求較高,比如要有快速運(yùn)行的CPU、CPU 內(nèi)部要有MMU單元和較大的存儲(chǔ)空間等。操作系統(tǒng)本身費(fèi)用和開(kāi)發(fā)工具價(jià)格也比較昂貴,所以開(kāi)源的實(shí)時(shí)操作系統(tǒng)在價(jià)格方面有了明顯的優(yōu)勢(shì),目前選擇較多的操作系統(tǒng)有l(wèi)inux和μC/OS-II系統(tǒng)。
μC/OS-II系統(tǒng)具有較好的可擴(kuò)展性、程序代碼免費(fèi)開(kāi)源、資料豐富、技術(shù)成熟、簡(jiǎn)單易用、易于維護(hù)、優(yōu)化和移植等特點(diǎn),適合用于教學(xué)科研和一些實(shí)時(shí)系統(tǒng)的應(yīng)用。μC/OS 面世的這幾十年來(lái),在雷達(dá)系統(tǒng)、POS 機(jī)、人工智能等領(lǐng)域的都有應(yīng)用[7],這些實(shí)踐證明μC/OS-II實(shí)時(shí)系統(tǒng)的實(shí)用性、無(wú)誤性是非常好的,綜合了多種因素,綜合考慮選擇了μC/OS-II實(shí)時(shí)操作系統(tǒng)。
HISLIP 協(xié)議與傳統(tǒng)儀器作比較的話,HISLIP協(xié)議可以為我們提供相同的測(cè)量功能,并且它可以實(shí)現(xiàn)遠(yuǎn)程控制[8]。HISLIP 在通信時(shí)創(chuàng)建兩個(gè)TCP連接到相同的服務(wù)器端口[端口分配HISLIP IANA 4880]來(lái)建立同步通道和異步通道。這兩條通道為HISLIP 消息的數(shù)據(jù)收發(fā)和異常處理的提供通道。
同步通道以同步的方式來(lái)執(zhí)行SCPI 和類似GPIB 的類似元消息。同步通道主要用來(lái)實(shí)現(xiàn)正常狀態(tài)下的命令的收發(fā)與信息傳輸,同時(shí)也可以將消息保存在同步緩沖區(qū)。
異步通道完成的主要功能是為有較高優(yōu)先級(jí)的鎖機(jī)制、中斷、異步中斷、設(shè)備清除、未知錯(cuò)誤等消息提供傳輸通道,并在來(lái)自同步通道的消息之前對(duì)其執(zhí)行操作。同步和異步通道都是頭部消息為16 字節(jié)的固定格式,消息負(fù)載在頭部之后,具體消息的大小有頭部中的負(fù)載長(zhǎng)度來(lái)說(shuō)明。
所有HISLIP 客戶端和服務(wù)器在默認(rèn)情況下使用IANA 分配的端口號(hào)4880。這并不排除配置為在其他端口上使用HISLIP協(xié)議的HISLIP客戶端和服務(wù)器。
HISLIP幀格式如圖1所示。
圖1 HISLIP協(xié)議的幀格式
1)由圖1 我們可以看到 HISLIP 協(xié)議的一、二字節(jié)分別是“H”“S”的 ASCII 碼值?!癏”“S”為我們提供了消息驗(yàn)證機(jī)制,如果接收到的前兩個(gè)字節(jié)消息不是“H”“S”,這該消息應(yīng)被舍棄。
2)幀格式中的第三個(gè)字節(jié)是消息類型(Message Type),是我們收發(fā)消息的識(shí)別碼,用來(lái)表示消息的類型。不同消息類型負(fù)載不同,可以根據(jù)消息的類型來(lái)解析出需要的信息。
3)第四個(gè)字節(jié)為隨消息類型的變化而變化控制碼(Control Code),該字段表明當(dāng)前消息的響應(yīng)參數(shù)。
4)消息參數(shù)(Message Parameter)用4 個(gè)字節(jié)來(lái)說(shuō)明在不同類型的消息中起到的不同作用。
5)隨后的八個(gè)字節(jié)是數(shù)據(jù)長(zhǎng)度(Payload Length),它表明消息的負(fù)載長(zhǎng)度,個(gè)別類型的消息負(fù)載為0。
6)最后是可變長(zhǎng)度的數(shù)據(jù)段(Data),負(fù)載內(nèi)容是根據(jù)具體消息類型的實(shí)際數(shù)據(jù)來(lái)決定。
首先,將HISLIP 協(xié)議的服務(wù)器端與設(shè)備進(jìn)行連接。然后,HISLIP 服務(wù)器開(kāi)啟,監(jiān)聽(tīng)HISLIP 客戶端的請(qǐng)求。當(dāng)服務(wù)器端收到客戶端的請(qǐng)求后,客戶端與服務(wù)器通過(guò)TCP協(xié)議三次握手建立連接后,阻塞等待客戶端請(qǐng)求[9~12]??蛻舳伺c服務(wù)器建立連接后,將消息封裝進(jìn)行傳輸[13]。HISLIP 客戶端通過(guò)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)給HISLIP 服務(wù)器。當(dāng)服務(wù)器端接收到相應(yīng)的數(shù)據(jù)包后,對(duì)數(shù)據(jù)包的頭部消息進(jìn)行分析處理,根據(jù)不同的消息類型得到不同的信息。通過(guò)簡(jiǎn)析消息負(fù)載,將得到的命令對(duì)設(shè)備進(jìn)行對(duì)應(yīng)的操作。最后,服務(wù)器將由子模塊返回來(lái)的HISLIP 包發(fā)送給客戶端,并且刪除剛創(chuàng)建的新任務(wù),這樣就實(shí)現(xiàn)了對(duì)設(shè)備的遠(yuǎn)程測(cè)量控制。流程圖如圖2 所示。
圖2 HISLIP總體架構(gòu)設(shè)計(jì)圖
3.2.1 HISLIP協(xié)議的數(shù)據(jù)結(jié)構(gòu)
在程序設(shè)計(jì)中消息格式的數(shù)據(jù)結(jié)構(gòu):
3.2.2 HISLIP建立連接
1)服務(wù)器處于監(jiān)聽(tīng)狀態(tài),監(jiān)聽(tīng)客戶端的請(qǐng)求并與之建立同步通道;
2)客戶端發(fā)送初始化消息:<初始化><0><客戶端協(xié)議版本+客戶端廠商標(biāo)識(shí)符><客戶端的ip地址>;
3)服務(wù)器端發(fā)送響應(yīng)消息:<初始化響應(yīng)><工作模式><服務(wù)器協(xié)議版本+設(shè)備會(huì)話號(hào)><0>;
4)客戶端再次請(qǐng)求建立連接,主要是為了建立異常消息的異步通道;
5)客戶端發(fā)送異步通道初始化消息:<異步初始化><0><設(shè)備會(huì)話號(hào)><0>;
6)服務(wù)器端發(fā)送的響應(yīng)消息:<異步初始化響應(yīng)><0><服務(wù)器端廠商標(biāo)示符><0>。
3.2.3 消息析構(gòu)模塊設(shè)計(jì)與實(shí)現(xiàn)
服務(wù)器將接收到的客戶端消息按照協(xié)議結(jié)構(gòu)體以字節(jié)來(lái)進(jìn)行解包。
1)先對(duì)前16 字節(jié)中的前兩個(gè)字節(jié)進(jìn)行分析,查看消息頭的prolong 是否是ASCII 碼的“HS”,如果不是的話,消息出錯(cuò);
2)判斷HISLIP 消息的頭部是否是16 字節(jié),大于或小于16字節(jié),都是錯(cuò)誤消息;
3)將HISLIP協(xié)議賦值給局部變量;
4)使用switch……case語(yǔ)句對(duì)消息類型字段進(jìn)行判斷,匹配后調(diào)用對(duì)應(yīng)模塊處理,進(jìn)行處理;
5)將得到的數(shù)據(jù)返回改客戶端。
3.2.4 消息處理模塊設(shè)計(jì)與實(shí)現(xiàn)
消息處理模塊包含的模塊有:異步通道初和同步通道始化信息響應(yīng)模塊、異步通道最大數(shù)據(jù)響應(yīng)模塊、鎖信息響應(yīng)模塊、鎖信息查詢響應(yīng)模塊、設(shè)備清楚完成告知模塊、遠(yuǎn)程本地控制模塊、數(shù)據(jù)結(jié)束消息響應(yīng)模塊、鎖請(qǐng)求響應(yīng)模塊等多個(gè)模塊,根據(jù)不同的需求實(shí)現(xiàn)不同的功能。實(shí)現(xiàn)對(duì)設(shè)備的遠(yuǎn)程通信及控制,具體用一下幾個(gè)模塊來(lái)說(shuō)明。
static int server_initialize(void)
實(shí)現(xiàn)服務(wù)器的初始化操作,創(chuàng)建socket,綁定端口和服務(wù)器端IP地址,監(jiān)聽(tīng)客戶端的請(qǐng)求信息。
static int handle_async_message_size()
服務(wù)器與客戶端協(xié)商和約定消息式尺寸的函數(shù)。
static int recv_message_handle()
服務(wù)器用來(lái)處理接收到消息,主要完成數(shù)據(jù)包的解析。判斷是否是HISLIP 消息,頭部消息是否滿足要求,消息類型的分析以及相應(yīng)模塊函數(shù)的選取。
static int communicate_device()
實(shí)現(xiàn)服務(wù)器與設(shè)備間的直接通信。
static int handle_async_lock()
為設(shè)備的進(jìn)行鎖操作,針對(duì)客戶端進(jìn)行權(quán)限設(shè)置,可以有效保證資源的安全性。
void send_data()和 void send_dataend()
send_data()用來(lái)傳輸可以一次性把數(shù)據(jù)傳輸完成的消息,而send_dataend()是傳輸需要分為多次傳輸?shù)南ⅰ?/p>
本節(jié)主要介紹了遠(yuǎn)程測(cè)控代理的硬件和軟件設(shè)計(jì)方案,硬件平臺(tái)主要包括了核心處理器、外圍電路以及各種接口,例如采用了恩智浦公司LPC1768 芯片為處理器為核心,以DP83640 為以太網(wǎng)物理芯片,并且使用了USB接口、串口、IIC接口、CAN 總線等多種接口的開(kāi)發(fā)板。在此硬件基礎(chǔ)上進(jìn)行軟件系統(tǒng)的方案設(shè)計(jì),以及敘述HISLIP 服務(wù)端架構(gòu)設(shè)計(jì)。
本課題設(shè)計(jì)的遠(yuǎn)程測(cè)控系統(tǒng)代理模塊主要組成如下,遠(yuǎn)端儀器管理模塊、儀器代理模塊和各類儀器設(shè)備等[14~15]。模型如圖3所示。
圖3 測(cè)控總體設(shè)計(jì)方案
為了使不能上網(wǎng)的傳統(tǒng)的儀器設(shè)備(不具有以太網(wǎng)的接口的設(shè)備)能夠?qū)崿F(xiàn)網(wǎng)絡(luò)通信功能,本文選擇了處理器響應(yīng)速度快、外設(shè)接口豐富、超低功耗、尺寸小、性價(jià)比高的LPC1768 處理器為核心,DP83640為以太網(wǎng)物理芯片的開(kāi)發(fā)板。
如果硬件平臺(tái)是設(shè)計(jì)骨架的話,那么軟件平臺(tái)的就是設(shè)計(jì)的血肉。所以,我們需要符合設(shè)計(jì)的軟件平臺(tái)。本次軟件管理平臺(tái)采用了SNMP(Simple Network Management Protocol)協(xié)議對(duì)遠(yuǎn)程測(cè)控代理模塊進(jìn)行配置[17],由 trap 來(lái)發(fā)送告警信息;采用自動(dòng)發(fā)現(xiàn)協(xié)議得到代理模塊是否在線信息;利用HISLIP協(xié)議來(lái)采集模塊數(shù)據(jù)、控制相應(yīng)的硬件模塊。
圖4 代理的軟件設(shè)計(jì)
本文研究的是遠(yuǎn)程測(cè)控代理的設(shè)計(jì)與實(shí)現(xiàn),為了對(duì)本課題所開(kāi)發(fā)的軟件進(jìn)行測(cè)試,搭建如下的測(cè)試環(huán)境。需要的設(shè)備有遠(yuǎn)程控制PC 機(jī),路由器,LPC1768 開(kāi)發(fā)板,儀器包括US-100 傳感器、GY-80傳感器、示波器等,整個(gè)測(cè)控系統(tǒng)的硬件連接圖如圖5 所示。首先將傳感器、示波器以及信號(hào)發(fā)生器與代理相連,之后將代理與局域網(wǎng)路由器相連,同時(shí)PC機(jī)也與路由器相連組成一套設(shè)備測(cè)量系統(tǒng)。
硬件平臺(tái)完成后,我們開(kāi)始搭建軟件平臺(tái)。首先,開(kāi)啟HISLIP 服務(wù)器,服務(wù)器端監(jiān)聽(tīng)客戶端的請(qǐng)求。如果沒(méi)有客戶端連接請(qǐng)求,則一直在循環(huán)監(jiān)聽(tīng),直到有客戶端連接。當(dāng)服務(wù)器與客戶端建立連接之后,創(chuàng)建第二個(gè)任務(wù)處理來(lái)處理接收到的數(shù)據(jù)包。根據(jù)協(xié)議的要求將數(shù)據(jù)包進(jìn)行解包操作,完成相應(yīng)的命令處理,將處理結(jié)果返回給客戶端,同時(shí)刪除此任務(wù)。服務(wù)器繼續(xù)監(jiān)聽(tīng)其他客戶端的連接請(qǐng)求。
客戶端運(yùn)行HISLIP 客戶端程序,在有需求時(shí)向服務(wù)器端發(fā)送請(qǐng)求,客戶端與命令行中的IP 地址所指的服務(wù)器端建立連接。HISLIP 協(xié)議的通信模式有兩種,分別是重疊模式和同步模式。本文就針對(duì)這兩個(gè)模式來(lái)進(jìn)行測(cè)試。示波器的SCPI 命令*IDN?命令是取波命令,為與示波器的命令(SCPI命令)進(jìn)行統(tǒng)一,自定義一個(gè)SCPI 命令為命令行中的*IDN1?。所以本文設(shè)置*IDN1?為取傳感器US-100測(cè)室內(nèi)溫度的命令。
同步模式就是指客戶端需要接收到每一個(gè)發(fā)送上來(lái)的請(qǐng)求結(jié)果之后才能發(fā)送下一個(gè)請(qǐng)求,不能連續(xù)發(fā)送,就是發(fā)送一個(gè)命令處理一個(gè)結(jié)果及時(shí)的返回。從圖5中可以看出室內(nèi)的溫度為19°。
同步模式時(shí),傳感器的測(cè)量結(jié)果如圖5所示。
圖5 同步模式
重疊模式可以一次連續(xù)發(fā)送多個(gè)SCPI 命令,等待服務(wù)器端全部處理完之后再把所有的結(jié)果全部返回,這剛好與同步模式相反,圖6 是測(cè)量后全部返回的結(jié)果。
重疊模式測(cè)量結(jié)果如下。
圖6(a)中,客戶端在重疊模式下,同時(shí)發(fā)送3個(gè)請(qǐng)求命令,6(b)中顯示服務(wù)器端在同時(shí)接收多個(gè)命令后返回處理結(jié)果,分別是23°,23°與22°。
圖6 重疊模式
本文主要研究的是基于μC/OS-II 系統(tǒng)的HISLIP代理的設(shè)計(jì)與實(shí)現(xiàn)。因此首先對(duì)代理環(huán)境的搭建進(jìn)行了說(shuō)明;其次在整個(gè)系統(tǒng)環(huán)境搭建完成后,對(duì)遠(yuǎn)程測(cè)控代理中實(shí)現(xiàn)的各個(gè)模塊功能進(jìn)行測(cè)試,測(cè)試完成后通過(guò)截取客戶端和服務(wù)器端的信息交互圖進(jìn)行具體的分析。整個(gè)測(cè)試結(jié)果表明代理能夠?yàn)榭蛻舳颂峁﹥x器數(shù)據(jù)的采集以及對(duì)儀器設(shè)備的實(shí)時(shí)監(jiān)控管理。