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