數據監測模塊的實(shí)時(shí)性分析與設計
在分析實(shí)時(shí)數據監測模塊實(shí)時(shí)性需求的基礎上,提出一個(gè)通用實(shí)時(shí)數據監測模塊系統結構,并闡述該模塊的軟件實(shí)現。該系統采用MODBUS_RTU通信協(xié)議,采集各個(gè)監測模塊的實(shí)時(shí)數據,并在LCD上以圖形方式顯示系統運行的情況。
本文引用地址:http://dyxdggzs.com/article/201610/309129.htm實(shí)時(shí)數據監測是保證大中型旋轉機械安全運行的重要手段。隨著(zhù)工業(yè)自動(dòng)化程度的日益提高,對旋轉機械的實(shí)時(shí)數據監測的實(shí)時(shí)性、可靠性也提出了更高的要求。
筆者在S3C44B0上基于μC/OS-II進(jìn)行通用實(shí)時(shí)數據監測模塊的設計,并將其應用在旋轉機械監視保護系統中,實(shí)現了很好的實(shí)時(shí)性。該監測模塊具有對32個(gè)模擬量測點(diǎn)進(jìn)行采集、顯示、通信與管理的功能。
1 系統實(shí)時(shí)性需求
該實(shí)時(shí)數據監測模塊是基于μC/OS-II進(jìn)行設計的,而保證系統實(shí)時(shí)性的重要策略是系統的中斷處理機制。下面首先對系統設計的中斷處理機制進(jìn)行分析。
1.1 中斷處理機制分析
實(shí)時(shí)系統最根本的特點(diǎn)是實(shí)時(shí)性,而中斷處理程序是實(shí)時(shí)系統的重要組成部分,是RTOS實(shí)時(shí)性的重要體現。系統通過(guò)中斷機制了解外部世界,并對外部事件立刻作出響應。實(shí)時(shí)系統的反應速度取決于系統對于中斷的響應速度和中斷處理程序的處理速度。為了獲取對外部事件的最短反應時(shí)間,μC/OS-II系統中斷響應過(guò)程如圖1所示。

圖1 系統中斷處理機制分析
第①階段是中斷延遲時(shí)間,從出現中斷請求到當前任務(wù)開(kāi)中斷這一過(guò)程。實(shí)時(shí)系統在進(jìn)入臨界區代碼段之前都要關(guān)中斷,執行完臨界代碼之后再開(kāi)中斷。關(guān)中斷的時(shí)間越長(cháng),中斷延遲就越長(cháng)。
第②階段是內核保存當前任務(wù)的狀態(tài),將CPU寄存器壓棧,以便為中斷服務(wù)。
第③階段調用OSIntEnter()函數或把中斷嵌套層數計數器直接加1,用OSIntExit()函數,將中斷嵌套層數計數器減1,當嵌套計數器減到零時(shí),μC/OS-II要判定有沒(méi)有優(yōu)先級較高的任務(wù)被中斷服務(wù)子程序喚醒。如果有優(yōu)先級高的任務(wù)進(jìn)入了就緒態(tài),μC/OS-II就返回到那個(gè)優(yōu)先級高的任務(wù)B。如果中斷嵌套層數計數器大于0,μC/OS-II將被返回到被中斷了的任務(wù)A。OSIntExit()函數的作用是進(jìn)行中斷級的任務(wù)調度。
第④階段恢復已壓棧的寄存器值;最后執行中斷返回指令,結束中斷。
根據上述中斷處理機制,中斷響應時(shí)間是影響中斷實(shí)時(shí)性的最重要指標,而中斷延遲是其主要因素,延遲時(shí)間主要由系統時(shí)鐘和關(guān)中斷的時(shí)間決定。由于系統存在對任務(wù)和多中斷的調度,所以中斷延遲是個(gè)變量,一般為4~28個(gè)處理器周期。
1.2 實(shí)時(shí)數據監測模塊實(shí)時(shí)性需求分析
該實(shí)時(shí)數據監測模塊最多同時(shí)對32個(gè)測點(diǎn)的數據進(jìn)行實(shí)時(shí)監測。下面就以32個(gè)測點(diǎn)數目對該系統的實(shí)時(shí)性進(jìn)行分析,并從系統測量時(shí)間、功能要求兩個(gè)方面說(shuō)明系統保證實(shí)時(shí)性的時(shí)間條件。
1.2.1 功能要求
① 32同步采樣,即系統能夠進(jìn)行多通道采樣,并且系統的A/D轉換芯片對采樣信號可以進(jìn)行高速動(dòng)態(tài)采集波形的要求,通道采集頻率高達240 Hz。
② A/D轉換位數,不小于16位。
③ 要求系統必須與計算機接口進(jìn)行通信,并且接口具有足夠的傳輸速率來(lái)滿(mǎn)足系統的實(shí)時(shí)性要求。
④ 要求該系統具有即插即用功能,在即插即用的同時(shí),系統能夠實(shí)時(shí)更新測點(diǎn)的數據以及狀態(tài)參數。
⑤ 該系統必須具有報警延時(shí)和報警保持功能。各個(gè)通道的報警延時(shí)用戶(hù)可以根據自己的需要設定,并且報警狀態(tài)可以被保持。
1.2.2 測量時(shí)間
因為每個(gè)測點(diǎn)就是需要采集的一個(gè)數據源,因此系統需要同時(shí)對32個(gè)數據源的數據進(jìn)行采集。每個(gè)測點(diǎn)可以分為多個(gè)通道(假設都為2個(gè)通道),系統需要同時(shí)采集的數據有64個(gè)。這樣可以計算出系統測量周期t為:
t=64×系統對每個(gè)通道數據源的測量時(shí)間
每個(gè)通道的測量時(shí)間包括通信時(shí)間和A/D采集時(shí)間、顯示時(shí)間。
(1) 通信時(shí)間
系統通信采用工業(yè)控制和分布式系統協(xié)議MODBUS_RTU通信協(xié)議。通信協(xié)議采用十六進(jìn)制的形式,所有寄存器采用的都是16位寄存器。寄存器中數據的排列采用大端格式。MODBUS_RTU基本幀格式如表1所列。
表1 MODBUS_RTU基本幀格式

該系統按照上述MODBUS_RTU的基本幀格式發(fā)送命令。發(fā)送命令基本流程如下:上位機按照表1敘述的MODBUS_RTU基本幀格式向下位機發(fā)送,下位機接收到上位機發(fā)送過(guò)來(lái)的命令后,執行相應的操作,然后將返回上位機應答信號。這一過(guò)程成為一個(gè)通信過(guò)程。該系統的一個(gè)通道的通信時(shí)間為10 ms。
.
(2) A/D采集時(shí)間
系統A/D采集轉換需要采用高速動(dòng)態(tài)的波形采集方式,每秒最高可采50 000個(gè)數據,那么采集一個(gè)數據源的時(shí)間為 2 μs。完成對32個(gè)測點(diǎn)64個(gè)數據源的采集時(shí)間僅為2 μs×64=128 μs。
采集數據的頻率最低可以為每秒鐘采集2500個(gè)數據,那么采集一個(gè)數據的時(shí)間最大值為0.5 ms。
(3) 顯示時(shí)間
嵌入式觸摸屏裝置是一種人機交互設備,將觸摸屏安裝在LCD液晶屏上,配以相應的控制電路對觸摸屏和LCD進(jìn)行控制。用戶(hù)通過(guò)觸摸操作,就可以對相應的設備進(jìn)行交互。觸摸屏由觸摸檢測部件和觸摸屏控制器組成。
采集到的數據送回到觸摸屏控制器的X與Y值僅是對當前觸摸點(diǎn)的電壓值的A/D轉換值,它不具有實(shí)用價(jià)值。這個(gè)值的大小不但與觸摸屏的分辨率有關(guān),也與觸摸屏與LCD的貼合情況有關(guān)。因此,要想得到比較精確的體現LCD坐標的觸摸屏位置,還需要在程序中進(jìn)行轉換。假設LCD的分辨率是320×240,坐標原點(diǎn)在左上角;觸摸屏分辨率是900×900,坐標原點(diǎn)在左上角,則轉換公式如下:

式中:X、Y是對當前觸摸點(diǎn)電壓值的A/D轉換值;X1、X2、Y1、Y2分別是觸摸屏坐標的最大值和最小值。
LCD顯示時(shí)將采集到的坐標經(jīng)過(guò)具體的轉換程序進(jìn)行轉換。轉換需要有一定的時(shí)間,所以L(fǎng)CD的顯示時(shí)間t包括取得當前觸摸點(diǎn)的電壓值的時(shí)間以及由程序轉換得到當前A/D轉換值的時(shí)間。觸摸屏采用中斷方式對數據進(jìn)行采樣,可以利用定時(shí)器對觸摸屏的采樣基準時(shí)間進(jìn)行設定,一般設定觸摸屏的采樣基準時(shí)間為10 ms。觸摸屏每隔10 ms對數據進(jìn)行一次采樣,即每隔10 ms對每個(gè)通道的數據進(jìn)行一次采樣,并將其顯示在LCD上。
根據以上所述,系統對每個(gè)通道數據源的測量時(shí)間tchannel =通信時(shí)間tc +采集時(shí)間ts+顯示時(shí)間tl=10 ms + 0.5 ms +10 ms = 20.5 ms。此時(shí)系統中最多64個(gè)通道,那么系統完成64個(gè)通道的測量周期為T(mén)=64×tchannel=64×20.5 s≈1 s,實(shí)時(shí)數據監測模塊的設計必須滿(mǎn)足上述要求才能很好地滿(mǎn)足系統的實(shí)時(shí)性。
2 系統設計
根據上述對實(shí)時(shí)數據監測模塊實(shí)時(shí)性的需求分析,將整個(gè)系統的體系結構分為3個(gè)模塊: 第1個(gè)模塊是LCD顯示模塊,第2個(gè)模塊是采集和通信模塊,第3個(gè)模塊是監測點(diǎn)模塊。如圖2所示,LCD顯示模塊用于顯示采集數據和以按鍵方式發(fā)送命令。通信模塊中LCD通過(guò)按鍵操作的方式通過(guò)MODBUS_RTU通信協(xié)議與各個(gè)監測點(diǎn)之間的通信連接,通信采用RS232/RS485無(wú)源轉接器連接。該實(shí)時(shí)數據監測模塊通過(guò)RS232/RS485對各個(gè)監測點(diǎn)的數據進(jìn)行采集,并將采集到的數據送入各個(gè)監測點(diǎn)的數據緩沖區(數據緩沖區包括保持寄存器、控制寄存器和狀態(tài)寄存器)。系統的數據鏈路層采用MODBUS_RTU通信協(xié)議。

圖2 模塊結構
3 軟件設計
通過(guò)對各嵌入式操作系統的特點(diǎn)、性能進(jìn)行可行性分析及比較,本模塊采用了μC/OS-II作為該模塊需要移植的操作系統。
3.1 任務(wù)劃分
μC/OS-II是一種占先式多任務(wù)內核,其實(shí)現的任務(wù)調度是基于優(yōu)先級的,即優(yōu)先級最高的任務(wù)一旦準備就緒,就取得CPU的所有權開(kāi)始投入運行。目前,μC/OS-II管理多達64個(gè)任務(wù),其中8個(gè)保留給系統,應用程序最多有56個(gè)任務(wù),能滿(mǎn)足一般嵌入式系統的需要。在μC/OS-II中,每個(gè)任務(wù)的優(yōu)先級要求不一樣且是唯一的,所以任務(wù)調度工作非常簡(jiǎn)單,即查找準備就緒的最高優(yōu)先級任務(wù),然后進(jìn)行上下文切換。μC/OS-II下每個(gè)任務(wù)有休眠、就緒、運行和中斷等狀態(tài)。
分析μC/OS-II的源碼會(huì )發(fā)現,它把任務(wù)的優(yōu)先級作為任務(wù)的標識符來(lái)使用。只有進(jìn)入就緒態(tài)的最高優(yōu)先級的任務(wù)才能得到CPU的使用權。任務(wù)劃分是開(kāi)發(fā)實(shí)時(shí)系統軟件的重要一步。要基于簡(jiǎn)化任務(wù)間的通信這一目的進(jìn)行任務(wù)劃分,使各任務(wù)程序實(shí)現的功能模塊化。在此模塊中,將處理采集和通信任務(wù)都設置了較高的任務(wù)優(yōu)先級,通信任務(wù)為T(mén)ask40_ComputerCom,采集任務(wù)劃分為T(mén)MapStaticData和TMapDynamicData。為使系統能夠及時(shí)更新管理模塊中的靜態(tài)數據,將對功能模塊靜態(tài)數據進(jìn)行更新的任務(wù)的優(yōu)先級設置成兩者中的最高。在模塊中的其他任務(wù)可根據具體情況進(jìn)行設置。表2詳述此模塊中創(chuàng )建的各任務(wù)的任務(wù)說(shuō)明及優(yōu)先級劃分。
3.2 任務(wù)調度策略
TMapDynamicData任務(wù)輪詢(xún)所有在線(xiàn)測點(diǎn)的實(shí)時(shí)數據;同時(shí),該實(shí)時(shí)數據監測模塊在RAM中為每個(gè)功能模塊建立一個(gè)數據映射區,并在映射區中保存各功能模塊的表號、變量參數、報警狀態(tài)、工作狀態(tài)等實(shí)時(shí)信息。在映射區中的數據可分為動(dòng)態(tài)數據和靜態(tài)數據。動(dòng)態(tài)數據是各個(gè)功能模塊的實(shí)時(shí)測點(diǎn)參數和狀態(tài)數據。當用戶(hù)使用觸摸屏按鍵方式完成對某一測點(diǎn)的動(dòng)態(tài)數據映射區進(jìn)行操作時(shí),應用系統將立即喚醒任務(wù)TMapDynamicData,來(lái)更新在映射區中對應于此測點(diǎn)的動(dòng)態(tài)數據,并且在觸摸屏上會(huì )顯示出各個(gè)測點(diǎn)的動(dòng)態(tài)數據信息。靜態(tài)數據是反映各個(gè)測點(diǎn)相關(guān)的配置信息,不會(huì )時(shí)刻變化,但卻反映了測點(diǎn)的數據參數的特性。一旦測點(diǎn)的這些數據信息被修改了,映射區中對應數據就必須更新。為了降低整個(gè)系統的通信開(kāi)銷(xiāo),在實(shí)際應用中,沒(méi)有頻繁地更新映射區中的靜態(tài)數據。當用戶(hù)觸摸屏按鍵方式完成對某一測點(diǎn)的靜態(tài)數據進(jìn)行操作后,應用系統立即喚醒任務(wù)TMapStaticData,來(lái)更新在映射區中對應于此測點(diǎn)靜態(tài)數據。
.
此實(shí)時(shí)數據監測模塊任務(wù)調度策略實(shí)現了多個(gè)不同優(yōu)先級的任務(wù)與TMapDynamicData任務(wù)間的通信。比如,LCD的主界面顯示任務(wù)Tmain_Board,詳細顯示界面任務(wù)Tcheck_Board以及巡檢界面任務(wù)Tcheck_system都與TMapDynamicData進(jìn)行任務(wù)間的通信。模塊必須優(yōu)先處理LCD通過(guò)TComputerCom任務(wù)修改某一測點(diǎn)的靜態(tài)數據,同步更新各個(gè)監測點(diǎn)的靜態(tài)數據的情況。此任務(wù)通信過(guò)程不僅包含觸發(fā)事件的通知,還要考慮任務(wù)間相應數據的傳遞。因此必須通過(guò)消息郵箱、消息隊列或者事件標志組方式來(lái)實(shí)現此數據傳遞的情況。經(jīng)進(jìn)一步分析得出,由于負責映射靜態(tài)數據的TMapStaticData任務(wù)優(yōu)先級高,模塊設計中采用了消息郵箱方式來(lái)處理其他任務(wù)與此任務(wù)間的通信過(guò)程。模塊設計任務(wù)邏輯關(guān)系如圖3所示。
表2 部分任務(wù)劃分與優(yōu)先級分配


圖3 模塊設計任務(wù)邏輯關(guān)系
筆者認為,在開(kāi)發(fā)基于多任務(wù)的嵌入式項目時(shí),為使整個(gè)模塊的設計具有結構化、模塊化、標準化的特點(diǎn),也便于將來(lái)模塊實(shí)現的維護與升級,應該盡量簡(jiǎn)化各個(gè)任務(wù)間的邏輯關(guān)系,體現各個(gè)任務(wù)功能的獨立性和完整性。每個(gè)任務(wù)實(shí)現一個(gè)或若干個(gè)功能,但必須成為一個(gè)單獨的模塊。任務(wù)間的調度策略主要通過(guò)延時(shí)以及信號量、消息郵箱、消息隊列來(lái)完成。
3.3 程序實(shí)現
基于μC/OS-II嵌入式實(shí)時(shí)操作系統處理并發(fā)任務(wù),該實(shí)時(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測點(diǎn)數據詳細顯示界面任務(wù);
創(chuàng )建LCD的Tcheck_system測點(diǎn)數據顯示巡檢任務(wù);
};
}
結語(yǔ)
基于μC/OS-II的旋轉機械監視實(shí)時(shí)數據監測模塊利用了μC/OS-II能夠穩定、安全處理并發(fā)多任務(wù)這一特點(diǎn),并按所述調度策略協(xié)調多任務(wù)運行,提高了模塊程序的運行效率。該模塊一直穩定運行,體現出較高的實(shí)時(shí)性和可靠性,取得了較好的實(shí)際效果。
參考文獻
[1] Labrosse Jean J. 嵌入式實(shí)時(shí)操作系μC/OS-II[M]. 邵貝貝,譯. 第2版. 北京:北京航空航天大學(xué)出版社,2003.
[2] 陳賾. ARM嵌入式技術(shù)實(shí)踐教程[M]. 北京:北京航空航天大學(xué)出版社,2005.
[3] MODBUS over serial line specification and implementation guide[OL]. www.modus.org.
[4] 周立功,等. ARM微控制器基礎與實(shí)戰[M]. 北京:北京航空航天大學(xué)出版社,2003.
評論