數(shù)據(jù)監(jiān)測模塊的實時性分析與設(shè)計
在分析實時數(shù)據(jù)監(jiān)測模塊實時性需求的基礎(chǔ)上,提出一個通用實時數(shù)據(jù)監(jiān)測模塊系統(tǒng)結(jié)構(gòu),并闡述該模塊的軟件實現(xiàn)。該系統(tǒng)采用MODBUS_RTU通信協(xié)議,采集各個監(jiān)測模塊的實時數(shù)據(jù),并在LCD上以圖形方式顯示系統(tǒng)運行的情況。
本文引用地址:http://butianyuan.cn/article/201610/309129.htm實時數(shù)據(jù)監(jiān)測是保證大中型旋轉(zhuǎn)機械安全運行的重要手段。隨著工業(yè)自動化程度的日益提高,對旋轉(zhuǎn)機械的實時數(shù)據(jù)監(jiān)測的實時性、可靠性也提出了更高的要求。
筆者在S3C44B0上基于μC/OS-II進行通用實時數(shù)據(jù)監(jiān)測模塊的設(shè)計,并將其應(yīng)用在旋轉(zhuǎn)機械監(jiān)視保護系統(tǒng)中,實現(xiàn)了很好的實時性。該監(jiān)測模塊具有對32個模擬量測點進行采集、顯示、通信與管理的功能。
1 系統(tǒng)實時性需求
該實時數(shù)據(jù)監(jiān)測模塊是基于μC/OS-II進行設(shè)計的,而保證系統(tǒng)實時性的重要策略是系統(tǒng)的中斷處理機制。下面首先對系統(tǒng)設(shè)計的中斷處理機制進行分析。
1.1 中斷處理機制分析
實時系統(tǒng)最根本的特點是實時性,而中斷處理程序是實時系統(tǒng)的重要組成部分,是RTOS實時性的重要體現(xiàn)。系統(tǒng)通過中斷機制了解外部世界,并對外部事件立刻作出響應(yīng)。實時系統(tǒng)的反應(yīng)速度取決于系統(tǒng)對于中斷的響應(yīng)速度和中斷處理程序的處理速度。為了獲取對外部事件的最短反應(yīng)時間,μC/OS-II系統(tǒng)中斷響應(yīng)過程如圖1所示。
圖1 系統(tǒng)中斷處理機制分析
第①階段是中斷延遲時間,從出現(xiàn)中斷請求到當前任務(wù)開中斷這一過程。實時系統(tǒng)在進入臨界區(qū)代碼段之前都要關(guān)中斷,執(zhí)行完臨界代碼之后再開中斷。關(guān)中斷的時間越長,中斷延遲就越長。
第②階段是內(nèi)核保存當前任務(wù)的狀態(tài),將CPU寄存器壓棧,以便為中斷服務(wù)。
第③階段調(diào)用OSIntEnter()函數(shù)或把中斷嵌套層數(shù)計數(shù)器直接加1,用OSIntExit()函數(shù),將中斷嵌套層數(shù)計數(shù)器減1,當嵌套計數(shù)器減到零時,μC/OS-II要判定有沒有優(yōu)先級較高的任務(wù)被中斷服務(wù)子程序喚醒。如果有優(yōu)先級高的任務(wù)進入了就緒態(tài),μC/OS-II就返回到那個優(yōu)先級高的任務(wù)B。如果中斷嵌套層數(shù)計數(shù)器大于0,μC/OS-II將被返回到被中斷了的任務(wù)A。OSIntExit()函數(shù)的作用是進行中斷級的任務(wù)調(diào)度。
第④階段恢復(fù)已壓棧的寄存器值;最后執(zhí)行中斷返回指令,結(jié)束中斷。
根據(jù)上述中斷處理機制,中斷響應(yīng)時間是影響中斷實時性的最重要指標,而中斷延遲是其主要因素,延遲時間主要由系統(tǒng)時鐘和關(guān)中斷的時間決定。由于系統(tǒng)存在對任務(wù)和多中斷的調(diào)度,所以中斷延遲是個變量,一般為4~28個處理器周期。
1.2 實時數(shù)據(jù)監(jiān)測模塊實時性需求分析
該實時數(shù)據(jù)監(jiān)測模塊最多同時對32個測點的數(shù)據(jù)進行實時監(jiān)測。下面就以32個測點數(shù)目對該系統(tǒng)的實時性進行分析,并從系統(tǒng)測量時間、功能要求兩個方面說明系統(tǒng)保證實時性的時間條件。
1.2.1 功能要求
① 32同步采樣,即系統(tǒng)能夠進行多通道采樣,并且系統(tǒng)的A/D轉(zhuǎn)換芯片對采樣信號可以進行高速動態(tài)采集波形的要求,通道采集頻率高達240 Hz。
② A/D轉(zhuǎn)換位數(shù),不小于16位。
③ 要求系統(tǒng)必須與計算機接口進行通信,并且接口具有足夠的傳輸速率來滿足系統(tǒng)的實時性要求。
④ 要求該系統(tǒng)具有即插即用功能,在即插即用的同時,系統(tǒng)能夠?qū)崟r更新測點的數(shù)據(jù)以及狀態(tài)參數(shù)。
⑤ 該系統(tǒng)必須具有報警延時和報警保持功能。各個通道的報警延時用戶可以根據(jù)自己的需要設(shè)定,并且報警狀態(tài)可以被保持。
1.2.2 測量時間
因為每個測點就是需要采集的一個數(shù)據(jù)源,因此系統(tǒng)需要同時對32個數(shù)據(jù)源的數(shù)據(jù)進行采集。每個測點可以分為多個通道(假設(shè)都為2個通道),系統(tǒng)需要同時采集的數(shù)據(jù)有64個。這樣可以計算出系統(tǒng)測量周期t為:
t=64×系統(tǒng)對每個通道數(shù)據(jù)源的測量時間
每個通道的測量時間包括通信時間和A/D采集時間、顯示時間。
(1) 通信時間
系統(tǒng)通信采用工業(yè)控制和分布式系統(tǒng)協(xié)議MODBUS_RTU通信協(xié)議。通信協(xié)議采用十六進制的形式,所有寄存器采用的都是16位寄存器。寄存器中數(shù)據(jù)的排列采用大端格式。MODBUS_RTU基本幀格式如表1所列。
表1 MODBUS_RTU基本幀格式
該系統(tǒng)按照上述MODBUS_RTU的基本幀格式發(fā)送命令。發(fā)送命令基本流程如下:上位機按照表1敘述的MODBUS_RTU基本幀格式向下位機發(fā)送,下位機接收到上位機發(fā)送過來的命令后,執(zhí)行相應(yīng)的操作,然后將返回上位機應(yīng)答信號。這一過程成為一個通信過程。該系統(tǒng)的一個通道的通信時間為10 ms。
.
(2) A/D采集時間
系統(tǒng)A/D采集轉(zhuǎn)換需要采用高速動態(tài)的波形采集方式,每秒最高可采50 000個數(shù)據(jù),那么采集一個數(shù)據(jù)源的時間為 2 μs。完成對32個測點64個數(shù)據(jù)源的采集時間僅為2 μs×64=128 μs。
采集數(shù)據(jù)的頻率最低可以為每秒鐘采集2500個數(shù)據(jù),那么采集一個數(shù)據(jù)的時間最大值為0.5 ms。
(3) 顯示時間
嵌入式觸摸屏裝置是一種人機交互設(shè)備,將觸摸屏安裝在LCD液晶屏上,配以相應(yīng)的控制電路對觸摸屏和LCD進行控制。用戶通過觸摸操作,就可以對相應(yīng)的設(shè)備進行交互。觸摸屏由觸摸檢測部件和觸摸屏控制器組成。
采集到的數(shù)據(jù)送回到觸摸屏控制器的X與Y值僅是對當前觸摸點的電壓值的A/D轉(zhuǎn)換值,它不具有實用價值。這個值的大小不但與觸摸屏的分辨率有關(guān),也與觸摸屏與LCD的貼合情況有關(guān)。因此,要想得到比較精確的體現(xiàn)LCD坐標的觸摸屏位置,還需要在程序中進行轉(zhuǎn)換。假設(shè)LCD的分辨率是320×240,坐標原點在左上角;觸摸屏分辨率是900×900,坐標原點在左上角,則轉(zhuǎn)換公式如下:
式中:X、Y是對當前觸摸點電壓值的A/D轉(zhuǎn)換值;X1、X2、Y1、Y2分別是觸摸屏坐標的最大值和最小值。
LCD顯示時將采集到的坐標經(jīng)過具體的轉(zhuǎn)換程序進行轉(zhuǎn)換。轉(zhuǎn)換需要有一定的時間,所以LCD的顯示時間t包括取得當前觸摸點的電壓值的時間以及由程序轉(zhuǎn)換得到當前A/D轉(zhuǎn)換值的時間。觸摸屏采用中斷方式對數(shù)據(jù)進行采樣,可以利用定時器對觸摸屏的采樣基準時間進行設(shè)定,一般設(shè)定觸摸屏的采樣基準時間為10 ms。觸摸屏每隔10 ms對數(shù)據(jù)進行一次采樣,即每隔10 ms對每個通道的數(shù)據(jù)進行一次采樣,并將其顯示在LCD上。
根據(jù)以上所述,系統(tǒng)對每個通道數(shù)據(jù)源的測量時間tchannel =通信時間tc +采集時間ts+顯示時間tl=10 ms + 0.5 ms +10 ms = 20.5 ms。此時系統(tǒng)中最多64個通道,那么系統(tǒng)完成64個通道的測量周期為T=64×tchannel=64×20.5 s≈1 s,實時數(shù)據(jù)監(jiān)測模塊的設(shè)計必須滿足上述要求才能很好地滿足系統(tǒng)的實時性。
2 系統(tǒng)設(shè)計
根據(jù)上述對實時數(shù)據(jù)監(jiān)測模塊實時性的需求分析,將整個系統(tǒng)的體系結(jié)構(gòu)分為3個模塊: 第1個模塊是LCD顯示模塊,第2個模塊是采集和通信模塊,第3個模塊是監(jiān)測點模塊。如圖2所示,LCD顯示模塊用于顯示采集數(shù)據(jù)和以按鍵方式發(fā)送命令。通信模塊中LCD通過按鍵操作的方式通過MODBUS_RTU通信協(xié)議與各個監(jiān)測點之間的通信連接,通信采用RS232/RS485無源轉(zhuǎn)接器連接。該實時數(shù)據(jù)監(jiān)測模塊通過RS232/RS485對各個監(jiān)測點的數(shù)據(jù)進行采集,并將采集到的數(shù)據(jù)送入各個監(jiān)測點的數(shù)據(jù)緩沖區(qū)(數(shù)據(jù)緩沖區(qū)包括保持寄存器、控制寄存器和狀態(tài)寄存器)。系統(tǒng)的數(shù)據(jù)鏈路層采用MODBUS_RTU通信協(xié)議。
圖2 模塊結(jié)構(gòu)
3 軟件設(shè)計
通過對各嵌入式操作系統(tǒng)的特點、性能進行可行性分析及比較,本模塊采用了μC/OS-II作為該模塊需要移植的操作系統(tǒng)。
3.1 任務(wù)劃分
μC/OS-II是一種占先式多任務(wù)內(nèi)核,其實現(xiàn)的任務(wù)調(diào)度是基于優(yōu)先級的,即優(yōu)先級最高的任務(wù)一旦準備就緒,就取得CPU的所有權(quán)開始投入運行。目前,μC/OS-II管理多達64個任務(wù),其中8個保留給系統(tǒng),應(yīng)用程序最多有56個任務(wù),能滿足一般嵌入式系統(tǒng)的需要。在μC/OS-II中,每個任務(wù)的優(yōu)先級要求不一樣且是唯一的,所以任務(wù)調(diào)度工作非常簡單,即查找準備就緒的最高優(yōu)先級任務(wù),然后進行上下文切換。μC/OS-II下每個任務(wù)有休眠、就緒、運行和中斷等狀態(tài)。
分析μC/OS-II的源碼會發(fā)現(xiàn),它把任務(wù)的優(yōu)先級作為任務(wù)的標識符來使用。只有進入就緒態(tài)的最高優(yōu)先級的任務(wù)才能得到CPU的使用權(quán)。任務(wù)劃分是開發(fā)實時系統(tǒng)軟件的重要一步。要基于簡化任務(wù)間的通信這一目的進行任務(wù)劃分,使各任務(wù)程序?qū)崿F(xiàn)的功能模塊化。在此模塊中,將處理采集和通信任務(wù)都設(shè)置了較高的任務(wù)優(yōu)先級,通信任務(wù)為Task40_ComputerCom,采集任務(wù)劃分為TMapStaticData和TMapDynamicData。為使系統(tǒng)能夠及時更新管理模塊中的靜態(tài)數(shù)據(jù),將對功能模塊靜態(tài)數(shù)據(jù)進行更新的任務(wù)的優(yōu)先級設(shè)置成兩者中的最高。在模塊中的其他任務(wù)可根據(jù)具體情況進行設(shè)置。表2詳述此模塊中創(chuàng)建的各任務(wù)的任務(wù)說明及優(yōu)先級劃分。
3.2 任務(wù)調(diào)度策略
TMapDynamicData任務(wù)輪詢所有在線測點的實時數(shù)據(jù);同時,該實時數(shù)據(jù)監(jiān)測模塊在RAM中為每個功能模塊建立一個數(shù)據(jù)映射區(qū),并在映射區(qū)中保存各功能模塊的表號、變量參數(shù)、報警狀態(tài)、工作狀態(tài)等實時信息。在映射區(qū)中的數(shù)據(jù)可分為動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)。動態(tài)數(shù)據(jù)是各個功能模塊的實時測點參數(shù)和狀態(tài)數(shù)據(jù)。當用戶使用觸摸屏按鍵方式完成對某一測點的動態(tài)數(shù)據(jù)映射區(qū)進行操作時,應(yīng)用系統(tǒng)將立即喚醒任務(wù)TMapDynamicData,來更新在映射區(qū)中對應(yīng)于此測點的動態(tài)數(shù)據(jù),并且在觸摸屏上會顯示出各個測點的動態(tài)數(shù)據(jù)信息。靜態(tài)數(shù)據(jù)是反映各個測點相關(guān)的配置信息,不會時刻變化,但卻反映了測點的數(shù)據(jù)參數(shù)的特性。一旦測點的這些數(shù)據(jù)信息被修改了,映射區(qū)中對應(yīng)數(shù)據(jù)就必須更新。為了降低整個系統(tǒng)的通信開銷,在實際應(yīng)用中,沒有頻繁地更新映射區(qū)中的靜態(tài)數(shù)據(jù)。當用戶觸摸屏按鍵方式完成對某一測點的靜態(tài)數(shù)據(jù)進行操作后,應(yīng)用系統(tǒng)立即喚醒任務(wù)TMapStaticData,來更新在映射區(qū)中對應(yīng)于此測點靜態(tài)數(shù)據(jù)。
.
此實時數(shù)據(jù)監(jiān)測模塊任務(wù)調(diào)度策略實現(xiàn)了多個不同優(yōu)先級的任務(wù)與TMapDynamicData任務(wù)間的通信。比如,LCD的主界面顯示任務(wù)Tmain_Board,詳細顯示界面任務(wù)Tcheck_Board以及巡檢界面任務(wù)Tcheck_system都與TMapDynamicData進行任務(wù)間的通信。模塊必須優(yōu)先處理LCD通過TComputerCom任務(wù)修改某一測點的靜態(tài)數(shù)據(jù),同步更新各個監(jiān)測點的靜態(tài)數(shù)據(jù)的情況。此任務(wù)通信過程不僅包含觸發(fā)事件的通知,還要考慮任務(wù)間相應(yīng)數(shù)據(jù)的傳遞。因此必須通過消息郵箱、消息隊列或者事件標志組方式來實現(xiàn)此數(shù)據(jù)傳遞的情況。經(jīng)進一步分析得出,由于負責映射靜態(tài)數(shù)據(jù)的TMapStaticData任務(wù)優(yōu)先級高,模塊設(shè)計中采用了消息郵箱方式來處理其他任務(wù)與此任務(wù)間的通信過程。模塊設(shè)計任務(wù)邏輯關(guān)系如圖3所示。
表2 部分任務(wù)劃分與優(yōu)先級分配
圖3 模塊設(shè)計任務(wù)邏輯關(guān)系
筆者認為,在開發(fā)基于多任務(wù)的嵌入式項目時,為使整個模塊的設(shè)計具有結(jié)構(gòu)化、模塊化、標準化的特點,也便于將來模塊實現(xiàn)的維護與升級,應(yīng)該盡量簡化各個任務(wù)間的邏輯關(guān)系,體現(xiàn)各個任務(wù)功能的獨立性和完整性。每個任務(wù)實現(xiàn)一個或若干個功能,但必須成為一個單獨的模塊。任務(wù)間的調(diào)度策略主要通過延時以及信號量、消息郵箱、消息隊列來完成。
3.3 程序?qū)崿F(xiàn)
基于μC/OS-II嵌入式實時操作系統(tǒng)處理并發(fā)任務(wù),該實時數(shù)據(jù)監(jiān)測模塊軟件設(shè)計部分偽代碼如下:
void Tstart(void * pdata) {
while(1) {
創(chuàng)建TMapStaticData 通信任務(wù);
創(chuàng)建TMapDynamicData 通信任務(wù);
創(chuàng)建LCD的TMain_Board主界面顯示任務(wù);
創(chuàng)建LCD的Tcheck_Board測點數(shù)據(jù)詳細顯示界面任務(wù);
創(chuàng)建LCD的Tcheck_system測點數(shù)據(jù)顯示巡檢任務(wù);
};
}
結(jié)語
基于μC/OS-II的旋轉(zhuǎn)機械監(jiān)視實時數(shù)據(jù)監(jiān)測模塊利用了μC/OS-II能夠穩(wěn)定、安全處理并發(fā)多任務(wù)這一特點,并按所述調(diào)度策略協(xié)調(diào)多任務(wù)運行,提高了模塊程序的運行效率。該模塊一直穩(wěn)定運行,體現(xiàn)出較高的實時性和可靠性,取得了較好的實際效果。
參考文獻
[1] Labrosse Jean J. 嵌入式實時操作系μC/OS-II[M]. 邵貝貝,譯. 第2版. 北京:北京航空航天大學(xué)出版社,2003.
[2] 陳賾. ARM嵌入式技術(shù)實踐教程[M]. 北京:北京航空航天大學(xué)出版社,2005.
[3] MODBUS over serial line specification and implementation guide[OL]. www.modus.org.
[4] 周立功,等. ARM微控制器基礎(chǔ)與實戰(zhàn)[M]. 北京:北京航空航天大學(xué)出版社,2003.
評論