999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式數(shù)據(jù)庫SQLite在故障錄波中的應(yīng)用

2008-12-31 00:00:00成樂祥
電腦知識(shí)與技術(shù) 2008年17期

嵌入式數(shù)據(jù)庫SQLite在故障錄波中的應(yīng)用

唐瑜,成樂祥,洪婧

(東南大學(xué) 電氣工程學(xué)院,江蘇 南京 210096)

摘要:介紹了SQLite的技術(shù)特點(diǎn)和體系結(jié)構(gòu);結(jié)合嵌入式軟硬件平臺(tái)提出在電力故障錄波裝置中使用SQLite數(shù)據(jù)庫實(shí)現(xiàn)故障錄波的解決方案;詳細(xì)說明了SQLite在Arm-Linux平臺(tái)上的應(yīng)用開發(fā)、交叉編譯和移植過程;最后通過一個(gè)應(yīng)用實(shí)例說明了SQLite的實(shí)現(xiàn)過程。

關(guān)鍵詞:嵌入式數(shù)據(jù)庫;SQLite;電力故障錄波

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)17-21373-02

1 引言

故障錄波器是電力系統(tǒng)發(fā)生故障及振蕩時(shí)能自動(dòng)記錄的一種裝置,在發(fā)生故障或振蕩時(shí)進(jìn)行錄波。近年來,隨著電子技術(shù)的迅速發(fā)展,故障錄波器采用嵌入式系統(tǒng)設(shè)計(jì)是一個(gè)發(fā)展方向。由于故障錄波器需要采集的數(shù)據(jù)量大,科學(xué)的存儲(chǔ)和管理這些數(shù)據(jù)對(duì)于提高錄波器的性能起到重要的作用。

目前,常用的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)和管理的方法有3種:(1)根據(jù)具體的存儲(chǔ)器硬件人為地設(shè)計(jì)存儲(chǔ)管理算法。這種方法簡(jiǎn)單直接,但是軟件的可移植性差,對(duì)于復(fù)雜的算法很難達(dá)到高可靠性的要求;(2)利用嵌入式操作系統(tǒng)提供的文件API,以文件的方式實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和管理。由于多數(shù)嵌入式操作系統(tǒng)(Windows CE、Linux等)都以獨(dú)占的方式訪問文件,所以這種方法IO開銷大,訪問效率低,數(shù)據(jù)共享性較差;(3)借助嵌入式數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和管理。數(shù)據(jù)庫通過事務(wù)來進(jìn)行調(diào)度與并發(fā)控制,可有效地對(duì)數(shù)據(jù)進(jìn)行存取、查詢等共享操作,同時(shí)借助數(shù)據(jù)庫所具有的安全性和完整性檢驗(yàn)等多種安全措施,可確保系統(tǒng)具有較好的整體性能。本文在分析了SQLite嵌入式數(shù)據(jù)庫內(nèi)部結(jié)構(gòu)和開發(fā)技術(shù)的基礎(chǔ)上,提出了基于嵌入式數(shù)據(jù)庫SQLite的故障錄波裝置的軟件設(shè)計(jì)方法。

2 SQLite體系結(jié)構(gòu)及開發(fā)技術(shù)

嵌入式數(shù)據(jù)庫系統(tǒng)是指支持某種特定計(jì)算模式或移動(dòng)計(jì)算的數(shù)據(jù)庫管理系統(tǒng),它通常與操作系統(tǒng)和具體應(yīng)用集成在一起, 運(yùn)行在智能型嵌入式設(shè)備或移動(dòng)設(shè)備上。嵌入式數(shù)據(jù)庫的使用是采用程序驅(qū)動(dòng),即由程序調(diào)用相應(yīng)的API 來實(shí)現(xiàn)數(shù)據(jù)的存取。

SQLite 是D. Richard Hipp 在2000 年開發(fā)的一個(gè)小型嵌入式數(shù)據(jù)庫。它是完全獨(dú)立的,不具有外部依賴性, 可以較為方便地應(yīng)用于嵌入式系統(tǒng)中。其源代碼完全開放, 可以免費(fèi)用于任何用途。

2.1 SQLite體系結(jié)構(gòu)

SQLite體系結(jié)構(gòu)如圖1所示。主要由以下幾個(gè)主要的子系統(tǒng)組成:接口(Interface)是一個(gè)C語言庫,即使使用的是不同語言的API,在底層執(zhí)行的都是C語言庫。從接口接收到命令后傳到SQL命令處理器(SQL Command Processor),SQL命令處理器是由三個(gè)獨(dú)立的步驟組成:標(biāo)志處理器(Tokenizer)、分析器(Parser)、代碼生成器(Code Generator)。虛擬機(jī)(Virtual Machine)是為操作數(shù)據(jù)庫文件而執(zhí)行的一個(gè)抽象的計(jì)算機(jī)引擎。在虛擬機(jī)和低層存儲(chǔ)、恢復(fù)程序之間,SQLite使用了一個(gè)抽象層執(zhí)行B-樹,頁面緩沖(Pager),和操作系統(tǒng)接口(OS Interface)。B-樹結(jié)構(gòu),用于存儲(chǔ)數(shù)據(jù)庫到磁盤,這樣可以通過減少磁盤的查找來達(dá)到快速訪問數(shù)據(jù)的目的。頁面緩沖主要處理讀、寫以及B-樹存儲(chǔ)機(jī)制所需的數(shù)字緩沖,包括為了保證事務(wù)原子性的回退及提交操作所需的緩沖。操作系統(tǒng)接口主要是為了方便在不同平臺(tái)的操作而執(zhí)行的一個(gè)底層與操作系統(tǒng)有關(guān)的抽象層。

2.2SQLite開發(fā)技術(shù)

在SQLite數(shù)據(jù)庫中,可由程序直接調(diào)用相應(yīng)的API函數(shù)去實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作。主要的函數(shù)有:

(1)打開數(shù)據(jù)庫

int sqlite3_open(

const char *filename, /*數(shù)據(jù)庫文件名*/

int mode, /*0777可讀寫0444只讀*/

sqlite3 * *ppDb /*輸出SQLite數(shù)據(jù)庫句柄/*

);

上述程序是指打開一個(gè)數(shù)據(jù)庫,如果不存在則自動(dòng)創(chuàng)建。第一個(gè)參數(shù)指定文件名,第三個(gè)參數(shù)則是定義sqlite3 * *ppDb結(jié)構(gòu)體指針,相當(dāng)于一個(gè)數(shù)據(jù)庫句柄。

(2)關(guān)閉數(shù)據(jù)庫

int sqlite3_close(sqlite3 *) /*參數(shù)就是打開時(shí)的結(jié)構(gòu)體,也就是數(shù)據(jù)庫句柄。*/

(3)執(zhí)行SQL

int sqlite3_exec(

sqlite3 *, /*已經(jīng)打開的數(shù)據(jù)庫句柄*/

const char *sql, /*要執(zhí)行的sql語句*/

sqlite_callback, /*回調(diào)函數(shù)*/

void*, /*傳遞給回調(diào)函數(shù)的參數(shù)*/

char **errmsg, /*保存錯(cuò)誤信息*/

);

也就是函數(shù)功能是執(zhí)行一條或者多條SQL語句,SQL語句之間用(;)號(hào)隔開。建議在執(zhí)行一條或者多條SQL語句的時(shí)候,指定第三個(gè)參數(shù)回調(diào)函數(shù),在回調(diào)函數(shù)中可以獲得執(zhí)行SQL的詳細(xì)過程,如果所有SQL執(zhí)行完畢則返回0,否則,說明這次執(zhí)行并沒有完全成功。如果執(zhí)行失敗(沒有返回0)則可以查看第五個(gè)參數(shù)值來查看詳細(xì)錯(cuò)誤信息。

3 SQLite在ARM-Linux上的移植

本文使用以32位的ARM微處理器S3C2410A為硬件的開發(fā)平臺(tái),采用嵌入式Linux操作系統(tǒng)。要將SQLite3.3.6移植到ARM2410開發(fā)板上,除了要有底層操作系統(tǒng)的支持外,還必須要有相應(yīng)的交叉編譯工具鏈,因此需要首先安裝ARM-Linux工具鏈,具體過程如下。

(1)建立交叉編譯環(huán)境。拷貝cross-2.95.3.tar.bz2到/usr/local目錄下并解壓縮。

cp cross-2.95.3.tar.bz2 /usr/local/arm

tar-jxvf cross-2.95.3.tar.bz2

(2)到http://www.sqlite.org/的cvs中下載最新版本的源代碼包,解壓后生成sqlite目錄。

tar-zxvf sqlite-3.3.6.tar.gz

(3)新建目錄。

cd /sqlite-3.3.6

mkdir build

cd build

../ configure --disable-tcl --host=arm-linux

這樣在build目錄中就將生成Makefile和一個(gè)libtool腳本

(4)修改Makefile文件。

cd build

vi Makefile

將代碼行BCC = arm-linux-gcc -g -O2改成BCC = gcc -g -O2

將下面的這行:

sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.la sqlite3.h

改成:

sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.a sqlite3.h

我們是將sqlite放到arm-linux的硬件板子上運(yùn)行,所以一般將其編譯成靜態(tài)鏈接的形式。保存Makefile文件后退出。

(5)執(zhí)行make命令即可完成編譯。編譯完成后,在build目錄下生成許多.o和.lo文件。執(zhí)行命令arm-linux-strip sqlite3, 去掉其中的調(diào)試信息,這樣文件將減少很多。這樣就可以得到在開發(fā)板上可以直接運(yùn)行的可執(zhí)行文件。

(6)在ARM 板上運(yùn)行sqlite。通過nfs將這些文件下載到開發(fā)板上。

chmod 777 sqlite3

. / sqlite test . sqlite

會(huì)出現(xiàn)

sqlite >

通過以上的操作sqlite 已經(jīng)可以在ARMLinux 下運(yùn)行,然后就可以基于此進(jìn)行進(jìn)一步的應(yīng)用開發(fā)了。

4 基于SQLite的電力故障錄波裝置軟件設(shè)計(jì)

基于嵌入式操作系統(tǒng)和嵌入式數(shù)據(jù)庫SQLite構(gòu)建的錄波裝置的系統(tǒng)結(jié)構(gòu)如圖2所示。數(shù)據(jù)采集模塊低通濾波、采樣保持(S/H)、多路轉(zhuǎn)換(MPX)和模數(shù)轉(zhuǎn)換(A/D)以及微機(jī)主系統(tǒng)幾個(gè)部分組成。在正常情況下,將采到的數(shù)據(jù)保存于緩存區(qū),并且不斷循環(huán)刷新,一旦計(jì)算的啟動(dòng)量滿足啟動(dòng)條件,就按照國(guó)家標(biāo)準(zhǔn)將故障前后各段的數(shù)據(jù)轉(zhuǎn)存到SQLite數(shù)據(jù)庫中,同時(shí)將故障發(fā)生信號(hào)告知監(jiān)控模塊。

電力故障錄波裝置的模擬量數(shù)據(jù)記錄格式是根據(jù)DL/T553-94國(guó)家標(biāo)準(zhǔn)采用分段記錄的方式,以滿足運(yùn)行部門故障分析和數(shù)據(jù)分析的需要。上位機(jī)錄波數(shù)據(jù)的記錄格式采用IEEE標(biāo)準(zhǔn)中的電力系統(tǒng)暫態(tài)數(shù)據(jù)轉(zhuǎn)換通用格式,即COMTRADE標(biāo)準(zhǔn),以便于裝置之間的數(shù)據(jù)共享和故障信息聯(lián)網(wǎng)。

通過以下生成數(shù)據(jù)庫datasave,插入采集數(shù)據(jù)和查詢操作的程序模塊來實(shí)現(xiàn)電力故障錄波裝置中的嵌入式數(shù)據(jù)庫。

sqlite3_open(\"datasave\",0777,zErrMsg);

//打開一個(gè)數(shù)據(jù)庫,如果改數(shù)據(jù)庫不存在,則創(chuàng)建一個(gè)名字為datasave的數(shù)據(jù)庫文件。sqlite3_exec(db,\"create table Data(id integer primary key, time integer, Ia integer, Ib integer, Ic integer, Ua integer, Ub integer, Uc integer);\", NULL, 0, zErrMsg);

//建立采集表

sprintf(value,\"INSERT INTO Data(time, Ia, Ib, Ic, Ua, Ub, Uc \\"

\"VALUES(%d,%d)\",buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);

sqlite_exec(db, value, NULL, NULL, zErrMsg);

//插入采集的數(shù)據(jù)

sqlite3_exec(db, \"select * from Data;', callback, 0, zErrMsg );

// 查詢記錄

5 結(jié)束語

在嵌入式系統(tǒng)中,利用嵌入式數(shù)據(jù)庫對(duì)采集的數(shù)據(jù)進(jìn)行操作和管理是嵌入式系統(tǒng)應(yīng)用發(fā)展方向,它簡(jiǎn)化了應(yīng)用程序的整體開發(fā)過程,提高了用戶存取記錄的效率,實(shí)現(xiàn)了多用戶數(shù)據(jù)的共享。SQLite以它小巧的體積、快速高效、穩(wěn)定可靠、易移植等優(yōu)勢(shì)將成為嵌入式數(shù)據(jù)庫領(lǐng)域的首選。嵌入式數(shù)據(jù)庫SQLite 在電力故障錄波裝置中的應(yīng)用,滿足了嵌入式錄波數(shù)據(jù)處理的需要,為故障錄波系統(tǒng)提供了有力的技術(shù)支持。

參考文獻(xiàn):

[1] 唐濤,諸偉楠,楊儀松,等.發(fā)電廠與變電站自動(dòng)化技術(shù)及其應(yīng)用[M].北京:中國(guó)電力出版社,2005.558-560.

[2] 曾立勝.基于SQLite嵌入式數(shù)據(jù)庫的射頻卡數(shù)據(jù)存儲(chǔ)[J].電腦知識(shí)與技術(shù),2006, (8):3,29.

[3] 黃布毅,張曉華.基于ARM-Linux的SQLite嵌入式數(shù)據(jù)庫技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005, (4):21-24.

[4] 王京謙,萬蒞新.開源嵌入式數(shù)據(jù)庫BerkeleyDB和SQLite的比較[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005,(2):5-7,49.

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文

主站蜘蛛池模板: 朝桐光一区二区| 人人91人人澡人人妻人人爽| 欧美性久久久久| 色综合中文| 成人亚洲天堂| 久精品色妇丰满人妻| 欧美精品成人一区二区视频一| 国产一级妓女av网站| 欧美中文字幕一区| 99ri精品视频在线观看播放| 亚洲无码不卡网| 免费毛片在线| 亚洲AⅤ波多系列中文字幕| 国产欧美视频一区二区三区| 国产成人精品一区二区三在线观看| 日韩经典精品无码一区二区| 日韩毛片基地| 亚洲第一极品精品无码| 青青草一区| 国产激爽大片在线播放| 免费精品一区二区h| 国产在线精品99一区不卡| 国产一区二区三区精品欧美日韩| 尤物亚洲最大AV无码网站| 国产伦精品一区二区三区视频优播 | 伊在人亚洲香蕉精品播放| 亚洲天堂精品在线| 日本尹人综合香蕉在线观看| 丁香婷婷久久| 婷婷综合缴情亚洲五月伊| 国产精品所毛片视频| 亚洲91在线精品| 制服丝袜无码每日更新| 亚洲一区黄色| 欧美日韩资源| 狠狠色狠狠综合久久| 日韩毛片在线视频| 午夜日本永久乱码免费播放片| 精品自拍视频在线观看| 午夜日本永久乱码免费播放片| 人妻丰满熟妇AV无码区| 亚洲欧洲综合| 18禁影院亚洲专区| 中国国产高清免费AV片| 精品国产免费观看| yjizz视频最新网站在线| 日本一区二区三区精品国产| 成人精品午夜福利在线播放| 精品少妇三级亚洲| 欧美高清视频一区二区三区| 成人福利在线视频免费观看| 日韩麻豆小视频| 制服丝袜亚洲| 污视频日本| 国产成人综合日韩精品无码首页| 亚洲午夜久久久精品电影院| 综合网久久| 亚洲第一页在线观看| 国产情精品嫩草影院88av| 老司国产精品视频91| 国产精品嫩草影院av| 久久综合成人| 伊人成人在线| 91九色最新地址| 日韩欧美成人高清在线观看| 亚洲综合久久一本伊一区| 国产无遮挡猛进猛出免费软件| 亚洲无码高清免费视频亚洲| 欧美午夜精品| 一级毛片网| 亚洲午夜片| 中文纯内无码H| 成人综合网址| 亚洲日韩精品伊甸| 欧美区国产区| 国产成年女人特黄特色毛片免| 好吊色国产欧美日韩免费观看| 中文字幕在线观| av一区二区三区在线观看| 中文字幕首页系列人妻| 国产精品冒白浆免费视频| 人妻中文字幕无码久久一区|