王秋實(shí), 張麗芹, 何小明
(中科華核電技術(shù)研究院 北京分院, 北京 100086)
由于日本福島核事故的影響,世界各國(guó)對(duì)核安全的認(rèn)識(shí)又提高到一個(gè)新的高度,安全文化得到了全世界核電企業(yè)的廣泛認(rèn)同和實(shí)踐。 目前,安全文化已是核電企業(yè)文化的核心,被稱為核電企業(yè)的靈魂,成為核安全的重要保障[1]。
核電站安全殼是防止放射性物質(zhì)向環(huán)境釋放的大體積預(yù)應(yīng)力混凝土筒殼結(jié)構(gòu),是特殊環(huán)境條件下的重點(diǎn)防護(hù)目標(biāo)。 目前國(guó)內(nèi)已建的核電站大部分位于沿海地區(qū), 正常情形下要經(jīng)受氯離子含量很高的海風(fēng)的侵蝕和陽(yáng)光直射, 同時(shí)要承受臺(tái)風(fēng)、地震等環(huán)境因素影響;這些環(huán)境因素的影響會(huì)導(dǎo)致混凝土表面碳化,引起鋼筋和預(yù)應(yīng)力系統(tǒng)腐蝕,出現(xiàn)破損或裂縫,降低承載力,影響使用壽命。 因此對(duì)核電站安全殼進(jìn)行定期的外觀檢查, 對(duì)其外觀的缺陷進(jìn)行基本評(píng)定以及持續(xù)跟蹤和分析就成為了核安全文化中不可忽視的一項(xiàng)重要任務(wù)。
利用爬壁機(jī)器人外帶攝像機(jī)對(duì)核電站安全殼外觀進(jìn)行視頻檢測(cè),并將圖像送回上位機(jī)檢測(cè)系統(tǒng)——安全殼外觀缺陷檢測(cè)系統(tǒng),進(jìn)行缺陷分析及數(shù)據(jù)存儲(chǔ)。 因此,為了能夠更加全面的分析缺陷類型、 缺陷特性和缺陷長(zhǎng)度面積等參數(shù),也為了能夠?qū)?shù)據(jù)參數(shù)及圖像信息進(jìn)行高效的存儲(chǔ)和查詢,研究人員將SQLite 數(shù)據(jù)庫(kù)技術(shù)應(yīng)用到了檢測(cè)系統(tǒng)中。
SQLite 是一個(gè)開(kāi)源的、內(nèi)嵌式的關(guān)系型數(shù)據(jù)庫(kù)。 它最初發(fā)布于2000 年,在便攜性、易用性、緊湊性、有效性和可靠性方面有突出的表現(xiàn)。 數(shù)據(jù)庫(kù)的服務(wù)器和客戶端運(yùn)行在同一個(gè)進(jìn)程中。 這樣可以減少網(wǎng)絡(luò)訪問(wèn)的消耗,簡(jiǎn)化數(shù)據(jù)庫(kù)管理,使你的程序部署起來(lái)更容易。 所有需要你做的都已經(jīng)和你的程序一起編譯好了。
在SQLite 提供的C/C++接口中,其中6 個(gè)APIs 屬于核心接口。 其中, 最主要的兩個(gè)對(duì)象是,database_connection 和prepared_statement。 database_connection 對(duì) 象 是 由SQLite3_open()接口函數(shù)創(chuàng)建并返回的,在應(yīng)用程序使用任何其他SQLite 接口函數(shù)之前, 必須先調(diào)用該函數(shù)以便獲得database_connnection 對(duì)象,在隨后的其他APIs 調(diào)用中,都需要該對(duì)象作為輸入?yún)?shù)以完成相應(yīng)的工作。 至于prepare_statement, 我們可以簡(jiǎn)單的將它視為編譯后的SQL語(yǔ)句,因此,所有和SQL 語(yǔ)句執(zhí)行相關(guān)的函數(shù)也都需要該對(duì)象作為輸入?yún)?shù)以完成指定的SQL 操作[2-6]。
SQLite 具有以下主要特征[3]:
1)管理簡(jiǎn)單,甚至可以認(rèn)為無(wú)需管理;
2)操作方便,SQLite 生成的數(shù)據(jù)庫(kù)文件可以在各個(gè)平臺(tái)無(wú)縫移植;
3)可以非常方便的以多種形式嵌入到其他應(yīng)用程序中,如靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù)等;
4) 易于維護(hù)。
SQL Server 是Microsoft 公司推出的大型數(shù)據(jù)庫(kù)管理系統(tǒng),建立在成熟而強(qiáng)大的關(guān)系模型基礎(chǔ)上,可以很好地支持客戶機(jī)/服務(wù)器網(wǎng)絡(luò)模式,能夠滿足各種類型的企事業(yè)單位對(duì)構(gòu)建網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的需求。 并且,為了有效利用SQL Server 的強(qiáng)大功能,Visual C++提供了多種數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)和編程規(guī)范,主要包括MFC ODBC,DAO 和ADO 等。
ODBC 作為一個(gè)應(yīng)用廣泛的數(shù)據(jù)庫(kù)訪問(wèn)應(yīng)用編程接口,使用標(biāo)準(zhǔn)的SQL 作為其數(shù)據(jù)庫(kù)訪問(wèn)語(yǔ)言。 MFC ODBC 類封裝了ODBC API,常用的類有CDatabase(數(shù)據(jù)庫(kù)類)、CRecordset(記錄集類)、CRecordView(可視記錄集類)、CDBException(異常類)。
盡管SQL Server 擁有諸多上述優(yōu)點(diǎn),但它需要SQL Server軟件的支持。 且與SQLite 相比較,盡管功能更加強(qiáng)大,但管理模式相對(duì)復(fù)雜,而SQLite 是內(nèi)嵌型數(shù)據(jù)庫(kù),移植性高,數(shù)據(jù)庫(kù)服務(wù)器就在本地應(yīng)用程序中,不需要網(wǎng)絡(luò)配置和管理,這樣既可以減少網(wǎng)絡(luò)訪問(wèn)的消耗,又可以簡(jiǎn)化數(shù)據(jù)庫(kù)管理。
安全殼外缺陷檢測(cè)系統(tǒng)總體上可分為6 個(gè)大的功能模塊,這6 大功能模塊分別為:接收和發(fā)送驅(qū)動(dòng)模塊,底層通訊模塊,上位機(jī)界面模塊,后臺(tái)運(yùn)行數(shù)據(jù)庫(kù)模塊,后臺(tái)服務(wù)系統(tǒng)和11 個(gè)子功能模塊。11 個(gè)子功能模塊又包括控制模塊,定位模塊,視頻系統(tǒng),圖像系統(tǒng),工具模塊,菜單模塊,EXCEL 模塊,檢索模塊,CAD 模塊,存儲(chǔ)模塊和算法模塊等11 部分。無(wú)線形式發(fā)送回來(lái)的視頻信號(hào)、位置信息以及其他一些附加信息經(jīng)過(guò)無(wú)線數(shù)據(jù)收發(fā)硬件傳送給上位機(jī)電腦,上位機(jī)控制電腦通過(guò)數(shù)據(jù)接收驅(qū)動(dòng)模塊提取并存儲(chǔ)這些無(wú)線數(shù)據(jù),再由底層的通訊模塊發(fā)送給后臺(tái)服務(wù)系統(tǒng)——數(shù)據(jù)庫(kù)系統(tǒng)和上位機(jī)界面,而上位機(jī)界面和數(shù)據(jù)庫(kù)系統(tǒng)又通過(guò)后臺(tái)服務(wù)系統(tǒng)分別與11 個(gè)子功能模塊進(jìn)行通訊和數(shù)據(jù)交互。
總體方案邏輯圖如圖1 所示。

圖1 總體方案邏輯圖Fig. 1 The overall program logic diagram
數(shù)據(jù)庫(kù)系統(tǒng)功能可以分為3 個(gè)模塊,分別是:用戶信息管理模塊,安全殼檢測(cè)信息儲(chǔ)存模塊,缺陷記錄檢索和缺陷分布圖繪制模塊。
為了能夠?qū)?shù)據(jù)信息進(jìn)行操作, 必須首先通過(guò)數(shù)據(jù)庫(kù)SQLite 技術(shù)中database_connection 對(duì)象,利用SQLite3_open()接口函數(shù)建立起數(shù)據(jù)信息與數(shù)據(jù)庫(kù)之間的聯(lián)系。 代碼如下:
CDVP_VCApp *m_app = (CDVP_VCApp *)AfxGetApp();
int rc ;
rc = SQLite3_open("DataBaseName.db",&m_app->db);
//建立或者連接數(shù)據(jù)庫(kù),并命名為“DataBaseName”
if (rc)
{fprintf (stderr,"cannot open databasename:% s. ",SQLite3_errmsg(m_app->db));
return ;}
else
{printf("open databasename successfully. ");}
char *Crack_Pic_info_table = "CREATE TABLE Crack_Pic_info_table(
電站NVARCHAR(100),缺陷區(qū)域NVARCHAR(100),X坐標(biāo)REAL(100),Y 坐標(biāo)REAL(100),缺陷編號(hào)CHAR(100),缺陷類型NVARCHAR(100),缺陷狀態(tài)NVARCHAR(100),幾何特性NVARCHAR(100),觀察特性NVARCHAR(100),附屬特性NVARCHAR(100),長(zhǎng)度REAL(100),面積REAL(100), 縫 寬 REAL (100), 時(shí) 間CHAR (100), 備 注NVARCHAR(100));";
//在 數(shù) 據(jù) 庫(kù) “DataBaseName” 中 建 立 數(shù) 據(jù) 表“Crack_Pic_info_table”,即裂縫缺陷信息
char *Login_info_table = "CREATE TABLE Login_info_table(登錄用戶名NVARCHAR(100),登 錄密碼NVARCHAR(100),登錄用戶類型NVARCHAR(100));";
//在 數(shù) 據(jù) 庫(kù) “DataBaseName” 中 建 立 數(shù) 據(jù) 表“Login_info_table”,即用戶信息。
SQLite3_exec (m_app->db, Crack_Pic_info_table, 0, 0,&m_app->zErrmsg);
SQLite3_exec (m_app ->db, Login_info_table, 0, 0,&m_app->zErrmsg);
3.2.1 用戶信息管理模塊
為了保障信息安全,防止安全殼監(jiān)測(cè)信息遭到不必要的泄漏,本數(shù)據(jù)庫(kù)系統(tǒng)引入了嚴(yán)格的用戶信息管理機(jī)制,只有得到授權(quán)的用戶才能憑借各自用戶名和密碼登陸數(shù)據(jù)庫(kù)系統(tǒng),進(jìn)行數(shù)據(jù)操作。
用戶可以分為兩種:普用用戶和管理員,普通用戶只能瀏覽安全殼檢測(cè)信息和進(jìn)行裂縫信息錄入工作,沒(méi)有管理賬號(hào)的權(quán)限。管理員可以管理賬戶信息,添加或是刪除用戶。其登錄和管理界面如圖2、圖3 所示[4-5]。

圖2 安全殼外觀缺陷檢測(cè)系統(tǒng)-登錄界面Fig. 2 The defect detection system of containment shell appearance-Login interface

圖3 安全殼外觀缺陷檢測(cè)系統(tǒng)-管理用戶界面Fig. 3 The defect detection system of containment shell appearance-Management user interface
管理員通過(guò)“管理用戶”界面,后臺(tái)程序執(zhí)行相應(yīng)的SQL語(yǔ)句:"INSERT INTO Login_info_table VALUES ('%s','%s','%s');" ,達(dá)到添加新用戶的目的,并可以賦予其相應(yīng)的管理權(quán)限。控件List Control 不僅能夠?qū)z索到的符合條件的用戶信息顯示到界面上, 而且通過(guò)SQLite 中的API 函數(shù)SQLite3_get_table(db, m_sql, &dResult, &nRow, &nColumn,&zErrmsg ), 可以使其與建立的數(shù)據(jù)庫(kù)文件“DataBaseName.db”聯(lián)系起來(lái),實(shí)時(shí)反饋數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息。
“ 登 錄”界面,則通過(guò)將所填信息與數(shù)據(jù)表“Login_info_table”一一比對(duì),從而判斷登錄信息是否有效,以及管理權(quán)限是否開(kāi)放。
3.2.2 安全殼檢測(cè)信息儲(chǔ)存模塊
攝像頭拍攝到安全殼外表的實(shí)時(shí)畫(huà)面后,將視頻數(shù)據(jù)通過(guò)無(wú)線網(wǎng)卡上傳到上位機(jī),并按照一定格式保存在上位機(jī)硬盤(pán)中。 與此同時(shí),運(yùn)行在上位機(jī)的圖像處理軟件將會(huì)處理拍攝到的畫(huà)面,從中識(shí)別出裂縫,并采用軟件手段計(jì)算出裂縫的長(zhǎng)度、寬度、嚴(yán)重程度等信息,該部分信息將會(huì)作為裂縫的屬性在上位機(jī)軟件界面上顯示出來(lái)。 界面如圖4 所示。
在此模塊中,需要將裂縫的圖片信息以“jpg”或者其他格式存儲(chǔ)到數(shù)據(jù)表“Crack_Pic_info_table”中,而圖片是大容量的二進(jìn)制數(shù)據(jù),所以我們不能像處理普通的文本那樣簡(jiǎn)單的插入或者查詢, 為此,SQLite 提供了一組函數(shù)來(lái)處理這種BLOB 字段類型的數(shù)據(jù),以下為程序執(zhí)行過(guò)程:
1)建立與數(shù)據(jù)表“Crack_Pic_info_table”之間的聯(lián)系:
SQLite3_prepare(db, "insert into Crack_Pic_info_table values ('m.jpg',?);", -1, &stat, 0);此語(yǔ)句中“? ”表示待插入的圖片的二進(jìn)制數(shù)據(jù);
2)利用二進(jìn)制文件處理函數(shù),將圖片'm.jpg' 的二進(jìn)制信息寫(xiě)入char 型指針jpg_file 中;
3) 執(zhí) 行BLOB 數(shù) 據(jù) 操 作:SQLite3_bind_blob(stmt,1,jpg_file,jpg_size,NULL);
4)執(zhí)行綁定之后的SQL 語(yǔ)句:SQLite3_step(stat)。
3.2.3 缺陷記錄檢索和缺陷分布圖繪制模塊
安全殼檢測(cè)信息儲(chǔ)存模塊將獲得的裂縫信息, 如圖片、缺陷區(qū)域、 坐標(biāo)、 缺陷類型等等參數(shù), 存儲(chǔ)到數(shù)據(jù)庫(kù)文件“DataBaseName.db”中,缺陷記錄檢索模塊可以通過(guò)輸入相應(yīng)的條件來(lái)匹配或者部分匹配符合條件的數(shù)據(jù),并顯示在控件List Control 中。 界面如圖5 所示[5]。

圖5 缺陷記錄檢索界面Fig. 5 Defect record retrieval interface

圖6 缺陷分布圖繪制界面Fig. 6 Defect distribution mapping interface
上位機(jī)軟件識(shí)別到裂縫后,會(huì)由裂縫信息存儲(chǔ)模塊將裂縫對(duì)應(yīng)的編號(hào),長(zhǎng)度,寬度,坐標(biāo),嚴(yán)重程度記錄在數(shù)據(jù)庫(kù)中對(duì)應(yīng)的位置進(jìn)行保存,為了更加清晰的表達(dá)出裂縫所處的位置,我們將會(huì)在一個(gè)二維展開(kāi)平面上,按照坐標(biāo)關(guān)系將裂縫對(duì)應(yīng)的位置做出標(biāo)記。 標(biāo)記的顏色表示裂縫的嚴(yán)重程度,如圖6 所示。 在這里,數(shù)據(jù)庫(kù)只需要向上位機(jī)軟件傳遞四個(gè)參數(shù)(裂縫編號(hào),X 坐標(biāo),Y 坐標(biāo),嚴(yán)重程度),然后由上位機(jī)軟件在已有的圖片上對(duì)應(yīng)位置繪點(diǎn)即可。
以核電站實(shí)際工程項(xiàng)目應(yīng)用為背景, 以解決無(wú)法安全、高效的檢測(cè)并記錄安全殼外表面裂縫信息難題為目的,開(kāi)發(fā)出了安全殼外表面缺陷檢測(cè)系統(tǒng),并通過(guò)比較SQLite 技術(shù)與SQL Server 之間的優(yōu)缺點(diǎn),最終選擇SQLite,并將其成功地應(yīng)用到了VS2008 開(kāi)發(fā)平臺(tái)上,以用戶信息管理模塊,安全殼檢測(cè)信息儲(chǔ)存模塊,缺陷記錄檢索和缺陷分布圖繪制模塊為依托,實(shí)現(xiàn)了登錄系統(tǒng)的權(quán)限設(shè)置,缺陷信息參數(shù)的存儲(chǔ),以及缺陷記錄的檢索和分布圖繪制等主要功能。 實(shí)踐表明,該系統(tǒng)能滿足核電站工程應(yīng)用,它不僅可以將機(jī)器人探測(cè)到的裂縫圖像信息存儲(chǔ)到數(shù)據(jù)庫(kù),而且能夠根據(jù)需要隨時(shí)查看各種裂縫信息,來(lái)進(jìn)行分析比對(duì)。
[1] 鄒正宇,蘇魯明.淺析核電企業(yè)的安全文化[J]. 中國(guó)核電,2008:350-353.
ZOU Zheng-yu,SU Lu-ming. Safety culture in nuclear power enterprise[J]. China Nuclear Power,2008:350-353.
[2] 唐敏,宋杰. 嵌入式數(shù)據(jù)庫(kù)SQLite的原理與應(yīng)用[J]. 電腦知識(shí)與技術(shù),2008:600-603.
TANG Min,SONG Jie. The Mechanism and applications of SQlite[J]. Computer Knowledge and Technology,2008:600-603.
[3] 倪天龍,張賢高,王培. 數(shù)據(jù)庫(kù)SQLite在嵌入式系統(tǒng)中的應(yīng)用[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005(10):35-37.
NI Tian-long,ZHANG Xian-gao,WANG Pei. Application of SQLite database in the embedded system[J]. Microcontrollers& Embedded Systems,2005(10):35-37.
[4] 溫秀梅,丁學(xué)鈞. Visual C++面向?qū)ο蟪绦蛟O(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2005.
[5] 徐璇,姜明新. 基于MFC的工程軟件界面設(shè)計(jì)[J]. 電子設(shè)計(jì)工程,2011:11-13.
XU Xuan,JIANG Ming-xin. Software interface design of MFC-based engineering [J]. Electronic Design Engineering,2011:11-13.
[6] 格蘭特·艾倫,邁克·歐文斯.SQLite權(quán)威指南[M]. 楊謙,譯.2版.北京:電子工業(yè)出版社,2011.