許葵元 信陽職業(yè)技術(shù)學(xué)院數(shù)學(xué)與計算機(jī)學(xué)院
從油田設(shè)備數(shù)據(jù)管理角度出發(fā),詳細(xì)分析了油田集成設(shè)備數(shù)據(jù)采集中Camera模塊的整體架構(gòu)及Camera模塊各層的結(jié)構(gòu),QSD8×50上Camera模塊的驅(qū)動程序及其向上層提供的用戶空間接口和功能,S5PC110上Camera的驅(qū)動實現(xiàn)方式及其接口;研究Camera的硬件抽象層中定義的統(tǒng)一接口及其功能。
油田集成設(shè)備數(shù)據(jù)采集的最高一層就是應(yīng)用程序?qū)?,系統(tǒng)的應(yīng)用程序都在這層中,應(yīng)用程序基本上都是用油路數(shù)據(jù)來編寫的,直接調(diào)用下一層提供的API來編寫本層的應(yīng)用程序[1]。
應(yīng)用程序框架層是油田集成設(shè)備數(shù)據(jù)采集的第二層,該層向應(yīng)用層提供API。普通的開發(fā)者可以使用本層的接口來編寫上層的應(yīng)用程序,該層提供的API有一部分并未在本層實現(xiàn),這部分的API在本地框架層數(shù)據(jù)庫實現(xiàn)。在本層中主要有Activity Manager、WindowManager和 LocationManager等基本框架。其中ActivityManager是用于活動的管理,它提供的接口用于管理應(yīng)用程序?qū)拥纳芷诤涂刂茟?yīng)用的導(dǎo)航,扮演著控制者的角色;Window Manager提供的接口用于管理所有啟動的窗口;ContentProviders是內(nèi)容提供者,它向應(yīng)用程序提供服務(wù),通過這種服務(wù)應(yīng)用程序可以實現(xiàn)數(shù)據(jù)的相互訪問和共享;ViewSystem包含豐富的、可擴(kuò)展的視圖集合,主要用于構(gòu)建應(yīng)用程序的用戶界面;NotificationManager用于消息通知管理,它能夠在不影響用戶正常操作和使用設(shè)備的時候在狀態(tài)欄提供消息的提示;PackageManager用于包管理,能夠管理所有安裝在系統(tǒng)內(nèi)的應(yīng)用程序;Telephony Manager用于電話管理,用于管理與電話相關(guān)的功能;ResourceManager用于管理非代碼的資源,它常用來管理系統(tǒng)中的圖片、用戶界面和字體等非代碼資源;LocationManager用于位置管理,用于管理地圖服務(wù)的功能。
油田集成設(shè)備數(shù)據(jù)采集包含一個數(shù)據(jù)庫的集合,它提供給油田集成設(shè)備數(shù)據(jù)采集的各個組件來使用。上層應(yīng)用程序開發(fā)者可以通過調(diào)用油田集成設(shè)備數(shù)據(jù)采集的應(yīng)用程序框架提供的接口來使用本地庫的這些庫。
JNI(油路數(shù)據(jù)NativeInterface)技術(shù)是油路數(shù)據(jù)平臺的一部分,它允許油路數(shù)據(jù)代碼和其他語言的代碼進(jìn)行交互,使得在油路數(shù)據(jù)虛擬機(jī)內(nèi)部運行的油路數(shù)據(jù)代碼與其他編程語言和庫進(jìn)行交互操作。
油田集成設(shè)備數(shù)據(jù)采集的CPP代碼調(diào)用油路數(shù)據(jù)代碼的原理是:CPP代碼找到油路數(shù)據(jù)代碼class里面要訪問對象的入口地址,然后在CPP中調(diào)用油路數(shù)據(jù)代碼[2]。具體的調(diào)用步驟如下:①使用JNI_Create油路數(shù)據(jù)VM()來加載虛擬機(jī);②使用FindClass()函數(shù)找到該油路數(shù)據(jù)類的實例對象的引用;③使用GetFieldID()函數(shù)獲取要訪問的域ID;④如果要訪問的是油路數(shù)據(jù)代碼中的一個方法,使用GetMethodID()函數(shù)獲取到要訪問的方法的ID;⑤使用CallBooleanMethod()的函數(shù)調(diào)用該油路數(shù)據(jù)對象的那個成員函數(shù)。
將新數(shù)據(jù)采集庫中的當(dāng)前位置的數(shù)據(jù)點的值來和這些數(shù)據(jù)采集模型進(jìn)行匹配。如果匹配到某個數(shù)據(jù)采集模型,則用該數(shù)據(jù)點更新該數(shù)據(jù)采集模型及其權(quán)值和優(yōu)先級;如果沒有匹配的模型,則新建一個數(shù)據(jù)采集模型,用這個新建的模型代替原有模型中優(yōu)先級最低的模型,最后選擇幾個優(yōu)先級較高的模型作為背景模型。
油田集成設(shè)備數(shù)據(jù)采集中油路數(shù)據(jù)代碼調(diào)用CPP代碼時,主要使用JNINativeMethod這個結(jié)構(gòu)體[3]。在這個結(jié)構(gòu)體中有三個指針:第一個指針指向油路數(shù)據(jù)代碼中調(diào)用CPP函數(shù)的入口;第二個指針指向CPP函數(shù)的返回值;第三個指針指向CPP函數(shù)名。CPP代碼調(diào)用油路數(shù)據(jù)代碼的步驟如下:①通過JNINativeMethod結(jié)構(gòu)體來描述油路數(shù)據(jù)代碼調(diào)用函數(shù)和CPP函數(shù)的對應(yīng)關(guān)系;②使用油田集成設(shè)備數(shù)據(jù)采集Runtime::registerNativeMethods()將CPP函數(shù)注冊到油路數(shù)據(jù)中的某個class中,這樣油路數(shù)據(jù)代碼就可以直接調(diào)用CPP函數(shù)。
油田設(shè)備數(shù)據(jù)采集過程中,通過建立進(jìn)程數(shù)據(jù)庫,對數(shù)據(jù)信息進(jìn)行調(diào)用。通過對不同的數(shù)據(jù)層進(jìn)行優(yōu)化,確保信息能夠注冊到不同的環(huán)節(jié)中,提高二次調(diào)用數(shù)據(jù)的能力。開發(fā)了適合油田設(shè)備數(shù)據(jù)管理的一套Binder,基于寬松的Apache協(xié)議發(fā)布。相對于Socket、管道等傳統(tǒng)的IPC機(jī)制,Binder有著更加系統(tǒng)化的結(jié)構(gòu),它可以實現(xiàn)遠(yuǎn)程函數(shù)調(diào)用(RPC),確保不同的數(shù)據(jù)信息能夠得到控制和優(yōu)化。
[1]李冠宇,劉軍,張?。植际疆悩?gòu)數(shù)據(jù)集成系統(tǒng)的研究與實現(xiàn)[J].計算機(jī)應(yīng)用研究,2004(3):17-18.
[2]葉范波,唐任仲,賈東澆.面向中小企業(yè)過程集成的數(shù)據(jù)集成平臺研究[J].浙江大學(xué)學(xué)報:工學(xué)版,2006(11):20-21.
[3]王軍,呂震中,王培紅,等.電力企業(yè)監(jiān)控信息系統(tǒng)與管理信息系統(tǒng)集成方案探討[J].中國電力,2001(2):28-29.