工控網(wǎng)首頁
>

應用設計

>

基于事件驅(qū)動的智能儀表嵌入式系統(tǒng)架構(gòu)設計

基于事件驅(qū)動的智能儀表嵌入式系統(tǒng)架構(gòu)設計

基于事件驅(qū)動的智能儀表嵌入式系統(tǒng)架構(gòu)設計

靳苗、郭月明、衛(wèi)乾、唐杰

(1.           北京中油瑞飛信息技術(shù)有限責任公司,北京昌平,102200)

摘要: 本文介紹了一種基于事件驅(qū)動的嵌入式系統(tǒng)架構(gòu)設計方法,該架構(gòu)采用模塊化分層設計原則,系統(tǒng)架構(gòu)由硬件抽象層、應用支持子層、應用層、事件驅(qū)動核心等部分組成,各層間逐級調(diào)用,可以廣泛運行在MSP430、M3、ARM、X86等架構(gòu)上,具備普遍的通用性;該架構(gòu)充分考慮智能儀表的需求特點,可有效提高儀表的穩(wěn)定性及簡化后期的維護工作。

關(guān)鍵詞:事件驅(qū)動;分層設計;模塊化;函數(shù)庫

Embedded Systems Architecture Design of Intelligentinstrument based on Event driven

Abstract您是不是要找:shining

為提高儀表的穩(wěn)定性及后期維護性,對儀表進行嵌入式代碼模塊化和系統(tǒng)結(jié)構(gòu)化設計很有必要。本文根據(jù)目前儀表類產(chǎn)品行業(yè)功能需求,介紹了一種基于事件驅(qū)動的嵌入式系統(tǒng)架構(gòu)設計方法,將系統(tǒng)代碼架構(gòu)分為硬件抽象層、應用支持子層、代碼庫、應用層、事件驅(qū)動核心等部分,統(tǒng)一了產(chǎn)品的系統(tǒng)架構(gòu)及接口規(guī)范,大大提高了產(chǎn)品的研發(fā)效率及穩(wěn)定性。

This article is to introduce an eventdriven based frame design for embedded system, which employs classified modulesdesign. This design consists of Hardware Abstract Layer, Application SupportSub-Layer, Application Support Layer, and Core of Event Driven. It responds tothe command layer by layer and that promises its wide availability on MSP430,M3, ARM, and X86 frames. This frame is designed particularly for intelligentinstruments and it is very challenging to have constant control and simplifiedmaintenance.

Keys: event driven, layereddesign, modularity, function library

0 引言

隨著油氣生產(chǎn)物聯(lián)網(wǎng)的迅猛發(fā)展,智能儀表設備被廣泛應用在國內(nèi)外自動化領域[1]。但由于自動化行業(yè)所使用儀表的開發(fā)環(huán)境差異較大、產(chǎn)品技術(shù)分支多,導致嵌入式代碼接口不統(tǒng)一,代碼重用性較差,增加了后期技術(shù)溝通的難度。同時,隨著儀表類產(chǎn)品行業(yè)的需求細化、硬件模塊化接口的標準化,對儀表類產(chǎn)品進行統(tǒng)一的嵌入式系統(tǒng)架構(gòu)設計是可行且必要的。

本文介紹的基于事件驅(qū)動的嵌入式系統(tǒng)架構(gòu)設計方法采用分層設計原則,實現(xiàn)功能模塊化封裝,以最大程度保證系統(tǒng)的穩(wěn)定和接口的統(tǒng)一,可以方便的移植至其它MCU及儀表平臺,用戶通過簡單宏定義即可實現(xiàn)產(chǎn)品必要的功能選擇,抽象各功能組件的接口并實現(xiàn)統(tǒng)一,可以方便的擴展其它功能組件或增加事件處理任務[2-4]。

1 系統(tǒng)架構(gòu)功能組件及分層設計

1.1   系統(tǒng)架構(gòu)功能需求

根據(jù)目前智能儀表的行業(yè)需求,智能儀表需要實現(xiàn)設備管理、人機交互、數(shù)據(jù)上傳等功能,按照功能模塊化劃分,具體系統(tǒng)功能組件如圖1-1所示。

圖1-1 智能儀表系統(tǒng)功能組件圖

1.2   系統(tǒng)架構(gòu)的分層設計

早在1979年,國際標準化組織ISO下設的一個專門委員會為制定“開放系統(tǒng)互聯(lián)”(OSI)的有關(guān)標準,提出了基于功能分層概念的網(wǎng)絡結(jié)構(gòu)七層模型-開放系統(tǒng)互連參考模型(OSI/RM)。盡管OSI/RM是為網(wǎng)絡中系統(tǒng)互連所建立的,但是其分層的設計思想完全可以為智能儀表嵌入式系統(tǒng)架構(gòu)的設計所借鑒[5]

根據(jù)工業(yè)自動化行業(yè)智能儀表的功能需求,將代碼進行分層設計,為用戶(嵌入式應用層工程師)提供設備管理接口集、數(shù)據(jù)上傳接口集、人機交互接口集、歷史數(shù)據(jù)管理接口集、傳感器參數(shù)管理接口集、傳感器實時數(shù)據(jù)采集及周邊外設數(shù)據(jù)采集接口集、設備功能模塊電源管理接口集、通訊協(xié)議接口集、校驗算法接口集及濾波算法接口集,同時提供數(shù)據(jù)類型及錯誤碼組件,以縮短產(chǎn)品開發(fā)時間、提高產(chǎn)品開發(fā)效率和質(zhì)量。如圖1-2所示,將整個系統(tǒng)由硬件層、硬件驅(qū)動層、硬件抽象層,應用支持子層、儀表組函數(shù)庫、事件驅(qū)動核心、應用層共計7個部分組成。每一層中,又可以分為多個獨立的模塊,這些模塊之間耦合較少,共同為上層提供服務。

    圖1-2 嵌入式系統(tǒng)架構(gòu)分層圖

2       系統(tǒng)各層的工作原理分析與設計

由系統(tǒng)分層的設計思想可知,系統(tǒng)中每層都對下一層進行了封裝,因此在代碼執(zhí)行過程中需要逐級調(diào)用,而不能隔層調(diào)用。具體各層間的調(diào)用流程如2-1所示。

隨著儀表硬件模塊化和接口標準化的落實,為軟件分層模塊化設計奠定了基礎。根據(jù)儀表功能需求,硬件層分為主控模塊、傳感器模塊、HMI模塊及通訊模塊等基本單元。

圖2-1 系統(tǒng)各層間調(diào)用流程圖

2.1   硬件抽象層(HAL)

2.1.1 硬件抽象層工作原理

硬件抽象層(HAL)完成了對硬件模塊接口的進一步封裝,其中包括MCU內(nèi)部總線類設備及MCU外部設備,硬件抽象層(HAL)作為BSP的上一層,及應用支持子層的下一層,是整個系統(tǒng)架構(gòu)非常關(guān)鍵的一層,HAL實現(xiàn)了對底層設備的封裝,為應用支持子層及系統(tǒng)架構(gòu)中其它功能模塊提供統(tǒng)一的接口。為實現(xiàn)該功能及代碼的通用性,需要對每一個軟硬件模塊進行唯一編碼,通過設備編碼實現(xiàn)對不同設備的區(qū)別,根據(jù)設備編碼通過回調(diào)函數(shù)的動態(tài)映射實現(xiàn)同一設備不同的操作。

根據(jù)儀表的特征,可以將對設備的操作抽象成一些子操作接口,將這些子操作統(tǒng)一到一個結(jié)構(gòu)中去來實現(xiàn)對上層接口的統(tǒng)一。如對常規(guī)設備的操作可以抽象成打開、讀、寫、休眠、診斷、關(guān)閉6個子操作接口,硬件抽象層常規(guī)設備接口設計如圖2-2所示,在編寫設備抽象層代碼時,必須將BSP層接口抽象出以上6種接口供應用支持子層及其它功能模塊使用,設備操作結(jié)構(gòu)設計如下:

Struct Hal_Dev{.DEV_CODE,.read,.write,.open,.close,.diagnostic,.sleep}

圖2-2 硬件抽象層常規(guī)設備結(jié)構(gòu)接口設計圖

在實際編寫硬件抽象層驅(qū)動式,可通過open函數(shù)來掛載不同的操作接口。例如應用支持子層如果需要對硬件抽象層傳感器模塊中的某一子設備進行操作時,首先將該子設備的編碼(設備編碼是全局唯一的)傳入open函數(shù),open函數(shù)則根據(jù)唯一編碼查找到該設備的操作接口并將其地址賦值給結(jié)構(gòu)中的接口。

2.1.2 硬件抽象層中斷處理接口

為及時響應用戶需求,硬件抽象層可對紅外接口、通訊模塊接口提供了中斷處理機制,涉及中斷處理的模塊有紅外通訊模塊、本地通訊模塊及遠程通信模塊等。在本次系統(tǒng)架構(gòu)設計中,中斷只有定時器中斷和UART數(shù)據(jù)接收中斷兩種,定時器中斷用于驅(qū)動事件運轉(zhuǎn),UART中斷發(fā)生時用于搬運UART緩沖區(qū)中的數(shù)據(jù)至數(shù)據(jù)區(qū)。RTC中斷觸發(fā)時和UART中斷觸發(fā)時的事件流程圖分別如圖2-3、2-4所示。

圖2-3  RTC中斷觸發(fā)時事件流程圖

                       

圖2-4 UART中斷觸發(fā)時事件流程圖

2.2   應用支持子層

應用支持子層是整個系統(tǒng)的第二樞紐,應用支持子層提供了設備硬件抽象層與應用層之間及儀表組函數(shù)庫之間的連接,在層級職能上該層對硬件抽象做了進一步的封裝,以便于應用層封裝事件操作接口時調(diào)用,主要由傳感器操作相關(guān)操作接口、數(shù)據(jù)存取相關(guān)操作接口、數(shù)據(jù)展示相關(guān)操作接口及數(shù)據(jù)傳輸相關(guān)操作接口組成。與儀表組函數(shù)庫提供的接口相比,該層級接口偏重于硬件接口封裝,它作為一個橋梁建立了系統(tǒng)其它功能組件與事件驅(qū)動核心之間的聯(lián)系,為應用層和事件驅(qū)動核心提供更加易于使用的設備接口。

以傳感器模塊接口為例。整個系統(tǒng)運轉(zhuǎn)過程中,傳感器操作是最頻繁的一個任務,整個系統(tǒng)基本上是圍繞著傳感器進行的,根據(jù)硬件模塊化設計的方案可以確定傳感器的操作涉及到實時數(shù)據(jù)讀取、傳感器信息讀取、傳感器診斷共計3個方面,對于MCU來講其實是對SPI接口的一些讀寫操作,而這些讀寫基本操作在HAL中已經(jīng)實現(xiàn),本處需要設計一個接口,用來封裝對傳感器實時數(shù)據(jù)讀取、傳感器信息讀取、工況診斷等操作,如圖2-5所示。

圖2-5 傳感器模塊應用支持子層接口

2.3   儀表函數(shù)庫

儀表函數(shù)庫實現(xiàn)了對儀表類產(chǎn)品軟件模塊的封裝,主要包含通訊協(xié)議模塊、文件系統(tǒng)、設備管理模塊、算法模塊、智能電源管理模塊等,同時包含C語言部分標準函數(shù),該套系統(tǒng)架構(gòu)支持標準C函數(shù)庫中的輸入、輸出函數(shù)及數(shù)學函數(shù)。儀表函數(shù)庫的架構(gòu)如圖2-6所示。

圖2-6 儀表代碼庫建設架構(gòu)圖

通過代碼庫建設,可以統(tǒng)一代碼規(guī)范,統(tǒng)一常用函數(shù)接口,并避免重用性,提高嵌入式軟件工程師的效率。

2.4   應用層

不同的設備有不同的應用場景,相同的設備又有不同的應用需求,如何系統(tǒng)架構(gòu)的統(tǒng)一,盡量將程序員的工作量集中在實際問題處理上,而不是整個系統(tǒng)上?這要依賴于應用層的設計,應用層將實例化出人機交互事件、設備遠程管理事件、數(shù)據(jù)上傳事件、數(shù)據(jù)展示事件、實時數(shù)據(jù)采集事件、外部設備數(shù)據(jù)采集事件及歷史數(shù)據(jù)存取事件等操作接口。在事件驅(qū)動中心中將執(zhí)行上述事件處理函數(shù),應用層及各層之間的關(guān)系如圖2-7所示。如傳感器數(shù)據(jù)上傳事件,該事件工作主要粉兩個方面,一是被動上傳,即上位機有需求時啟動上傳,這種方式主要是應用于總分架構(gòu)的總線中;另一方面是主動上傳,這要根據(jù)具體的通訊協(xié)議,如A11通訊協(xié)議。同時在該事件中完成數(shù)據(jù)的合包與發(fā)送,該事件將調(diào)用通訊協(xié)議接口及通訊模塊數(shù)據(jù)發(fā)送接口。

圖2-7 應用層與各層之間的關(guān)系圖

2.5   事件驅(qū)動核心

事件驅(qū)動核心的主要功能是仲裁系統(tǒng)中各個任務的先后順序。事件驅(qū)動核心的“心跳”在硬件抽象層完成,通過RTC時鐘滴答進行判斷或觸發(fā)事件,設計這一部分目的是讓應用層工程師專注于用戶需求,因為大多數(shù)情況下,事件驅(qū)動核心及相關(guān)子層的設計是整個系統(tǒng)的核心任務,可以通過定期的維護和更新這個“內(nèi)核”對產(chǎn)品進行升級。事件驅(qū)動核心與各層之間的關(guān)系如圖2-8所示。

圖2-8 事件驅(qū)動核心與各層之間的關(guān)系圖

基于事件間的驅(qū)動接口可采用結(jié)構(gòu)Event進行封裝,該結(jié)構(gòu)包含了當前事件和上一事件的信息,同時可以在事件之間傳輸數(shù)據(jù)指針,如下所示:

Struct Event{

CurrentEvent,

.PreEvent,

Pdata

}

3        結(jié)束語

本文介紹的分層設計、逐級調(diào)用的代碼架構(gòu)設計方法已經(jīng)在新一代的智能儀表中使用,并取得了明顯的效果。在智能儀表的軟件代碼設計中,利用這種分層的系統(tǒng)架構(gòu)設計有如下優(yōu)點:

(1)提高軟件質(zhì)量,縮短產(chǎn)品的開發(fā)周期。在儀表開發(fā)期,統(tǒng)一的函數(shù)接口和常用算法的統(tǒng)一管理,大大提高代碼的可重用性,避免重復開發(fā),從而進一步提升開發(fā)人員利用率,減少嵌入式代碼工程師的工作量,縮短了產(chǎn)品的開發(fā)時間。

(2)簡化設備后期的升級維護。在儀表維護期,清晰的程序結(jié)構(gòu)和統(tǒng)一的接口可有效避免潛伏的BUG,提高產(chǎn)品的穩(wěn)定性;在更改層的具體實現(xiàn)代碼時,只要函數(shù)接口保持穩(wěn)定,則不必修改其它函數(shù),大大簡化產(chǎn)品的升級維護工作。

參考文獻:

[1] 賈靈,王薪宇,鄭淑軍,等物聯(lián)網(wǎng)/無線傳感網(wǎng)原理與實踐[M].北京航空航天大學出版社,2011,1.

[2] 孟彥京,陳卓,事件驅(qū)動的程序設計方法在嵌入式系統(tǒng)中的應用[J].電氣自動化,2009年06期.

[3] 李臣亮,事件驅(qū)動架構(gòu)及應用[J].軟件世界,2007年21期

[4] 何鴻君,曹四化,褚祖高,羅莉,寧京宜,董黎明,李朋,一種改進的事件驅(qū)動系統(tǒng)框架[J].國防科技大學學報,2008年03期

[5] 孫秋冬,軟件系統(tǒng)的分層設計[J].計算機工程與應用,2001年第7期

作者簡介:靳苗,女,1986年4月,北京中油瑞飛信息技術(shù)有限責任公司,碩士,嵌入式軟件工程師,主要研究方向為嵌入式系統(tǒng)及物聯(lián)網(wǎng)技術(shù)在油氣生產(chǎn)方面的應用。郵箱:jinmiao@cnpc.com.cn,電話:13311200610。

郭月明,男,北京中油瑞飛信息技術(shù)有限責任公司。

衛(wèi)乾,男,北京中油瑞飛信息技術(shù)有限責任公司。

唐杰,男,北京中油瑞飛信息技術(shù)有限責任公司。

提交

查看更多評論
其他資訊

查看更多

中油瑞飛CM10系列模塊化RTU控制器

油氣生產(chǎn)物聯(lián)網(wǎng)技術(shù)在油氣生產(chǎn)中的應用

2016 中國油氣儲運技術(shù)交流大會暨儲運新技術(shù)新設備和新材料展示會

瑞飛SmartPlus系列RTU用戶手冊

東方物探與中亞天然氣管道有限公司簽署戰(zhàn)略合作框架協(xié)議雙方為中亞管道+ICT中心揭牌