王秋實, 張麗芹, 何小明
(中科華核電技術(shù)研究院 北京分院, 北京 100086)
由于日本福島核事故的影響,世界各國對核安全的認(rèn)識又提高到一個新的高度,安全文化得到了全世界核電企業(yè)的廣泛認(rèn)同和實踐。 目前,安全文化已是核電企業(yè)文化的核心,被稱為核電企業(yè)的靈魂,成為核安全的重要保障[1]。
核電站安全殼是防止放射性物質(zhì)向環(huán)境釋放的大體積預(yù)應(yīng)力混凝土筒殼結(jié)構(gòu),是特殊環(huán)境條件下的重點防護(hù)目標(biāo)。 目前國內(nèi)已建的核電站大部分位于沿海地區(qū), 正常情形下要經(jīng)受氯離子含量很高的海風(fēng)的侵蝕和陽光直射, 同時要承受臺風(fēng)、地震等環(huán)境因素影響;這些環(huán)境因素的影響會導(dǎo)致混凝土表面碳化,引起鋼筋和預(yù)應(yīng)力系統(tǒng)腐蝕,出現(xiàn)破損或裂縫,降低承載力,影響使用壽命。 因此對核電站安全殼進(jìn)行定期的外觀檢查, 對其外觀的缺陷進(jìn)行基本評定以及持續(xù)跟蹤和分析就成為了核安全文化中不可忽視的一項重要任務(wù)。
利用爬壁機(jī)器人外帶攝像機(jī)對核電站安全殼外觀進(jìn)行視頻檢測,并將圖像送回上位機(jī)檢測系統(tǒng)——安全殼外觀缺陷檢測系統(tǒng),進(jìn)行缺陷分析及數(shù)據(jù)存儲。 因此,為了能夠更加全面的分析缺陷類型、 缺陷特性和缺陷長度面積等參數(shù),也為了能夠?qū)?shù)據(jù)參數(shù)及圖像信息進(jìn)行高效的存儲和查詢,研究人員將SQLite 數(shù)據(jù)庫技術(shù)應(yīng)用到了檢測系統(tǒng)中。
SQLite 是一個開源的、內(nèi)嵌式的關(guān)系型數(shù)據(jù)庫。 它最初發(fā)布于2000 年,在便攜性、易用性、緊湊性、有效性和可靠性方面有突出的表現(xiàn)。 數(shù)據(jù)庫的服務(wù)器和客戶端運行在同一個進(jìn)程中。 這樣可以減少網(wǎng)絡(luò)訪問的消耗,簡化數(shù)據(jù)庫管理,使你的程序部署起來更容易。 所有需要你做的都已經(jīng)和你的程序一起編譯好了。
在SQLite 提供的C/C++接口中,其中6 個APIs 屬于核心接口。 其中, 最主要的兩個對象是,database_connection 和prepared_statement。 database_connection 對 象 是 由SQLite3_open()接口函數(shù)創(chuàng)建并返回的,在應(yīng)用程序使用任何其他SQLite 接口函數(shù)之前, 必須先調(diào)用該函數(shù)以便獲得database_connnection 對象,在隨后的其他APIs 調(diào)用中,都需要該對象作為輸入?yún)?shù)以完成相應(yīng)的工作。 至于prepare_statement, 我們可以簡單的將它視為編譯后的SQL語句,因此,所有和SQL 語句執(zhí)行相關(guān)的函數(shù)也都需要該對象作為輸入?yún)?shù)以完成指定的SQL 操作[2-6]。
SQLite 具有以下主要特征[3]:
1)管理簡單,甚至可以認(rèn)為無需管理;
2)操作方便,SQLite 生成的數(shù)據(jù)庫文件可以在各個平臺無縫移植;
3)可以非常方便的以多種形式嵌入到其他應(yīng)用程序中,如靜態(tài)庫、動態(tài)庫等;
4) 易于維護(hù)。
SQL Server 是Microsoft 公司推出的大型數(shù)據(jù)庫管理系統(tǒng),建立在成熟而強(qiáng)大的關(guān)系模型基礎(chǔ)上,可以很好地支持客戶機(jī)/服務(wù)器網(wǎng)絡(luò)模式,能夠滿足各種類型的企事業(yè)單位對構(gòu)建網(wǎng)絡(luò)數(shù)據(jù)庫的需求。 并且,為了有效利用SQL Server 的強(qiáng)大功能,Visual C++提供了多種數(shù)據(jù)庫開發(fā)技術(shù)和編程規(guī)范,主要包括MFC ODBC,DAO 和ADO 等。
ODBC 作為一個應(yīng)用廣泛的數(shù)據(jù)庫訪問應(yīng)用編程接口,使用標(biāo)準(zhǔn)的SQL 作為其數(shù)據(jù)庫訪問語言。 MFC ODBC 類封裝了ODBC API,常用的類有CDatabase(數(shù)據(jù)庫類)、CRecordset(記錄集類)、CRecordView(可視記錄集類)、CDBException(異常類)。
盡管SQL Server 擁有諸多上述優(yōu)點,但它需要SQL Server軟件的支持。 且與SQLite 相比較,盡管功能更加強(qiáng)大,但管理模式相對復(fù)雜,而SQLite 是內(nèi)嵌型數(shù)據(jù)庫,移植性高,數(shù)據(jù)庫服務(wù)器就在本地應(yīng)用程序中,不需要網(wǎng)絡(luò)配置和管理,這樣既可以減少網(wǎng)絡(luò)訪問的消耗,又可以簡化數(shù)據(jù)庫管理。
安全殼外缺陷檢測系統(tǒng)總體上可分為6 個大的功能模塊,這6 大功能模塊分別為:接收和發(fā)送驅(qū)動模塊,底層通訊模塊,上位機(jī)界面模塊,后臺運行數(shù)據(jù)庫模塊,后臺服務(wù)系統(tǒng)和11 個子功能模塊。11 個子功能模塊又包括控制模塊,定位模塊,視頻系統(tǒng),圖像系統(tǒng),工具模塊,菜單模塊,EXCEL 模塊,檢索模塊,CAD 模塊,存儲模塊和算法模塊等11 部分。無線形式發(fā)送回來的視頻信號、位置信息以及其他一些附加信息經(jīng)過無線數(shù)據(jù)收發(fā)硬件傳送給上位機(jī)電腦,上位機(jī)控制電腦通過數(shù)據(jù)接收驅(qū)動模塊提取并存儲這些無線數(shù)據(jù),再由底層的通訊模塊發(fā)送給后臺服務(wù)系統(tǒng)——數(shù)據(jù)庫系統(tǒng)和上位機(jī)界面,而上位機(jī)界面和數(shù)據(jù)庫系統(tǒng)又通過后臺服務(wù)系統(tǒng)分別與11 個子功能模塊進(jìn)行通訊和數(shù)據(jù)交互。
總體方案邏輯圖如圖1 所示。
圖1 總體方案邏輯圖Fig. 1 The overall program logic diagram
數(shù)據(jù)庫系統(tǒng)功能可以分為3 個模塊,分別是:用戶信息管理模塊,安全殼檢測信息儲存模塊,缺陷記錄檢索和缺陷分布圖繪制模塊。
為了能夠?qū)?shù)據(jù)信息進(jìn)行操作, 必須首先通過數(shù)據(jù)庫SQLite 技術(shù)中database_connection 對象,利用SQLite3_open()接口函數(shù)建立起數(shù)據(jù)信息與數(shù)據(jù)庫之間的聯(lián)系。 代碼如下:
CDVP_VCApp *m_app = (CDVP_VCApp *)AfxGetApp();
int rc ;
rc = SQLite3_open("DataBaseName.db",&m_app->db);
//建立或者連接數(shù)據(jù)庫,并命名為“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),缺陷編號CHAR(100),缺陷類型NVARCHAR(100),缺陷狀態(tài)NVARCHAR(100),幾何特性NVARCHAR(100),觀察特性NVARCHAR(100),附屬特性NVARCHAR(100),長度REAL(100),面積REAL(100), 縫 寬 REAL (100), 時 間CHAR (100), 備 注NVARCHAR(100));";
//在 數(shù) 據(jù) 庫 “DataBaseName” 中 建 立 數(shù) 據(jù) 表“Crack_Pic_info_table”,即裂縫缺陷信息
char *Login_info_table = "CREATE TABLE Login_info_table(登錄用戶名NVARCHAR(100),登 錄密碼NVARCHAR(100),登錄用戶類型NVARCHAR(100));";
//在 數(shù) 據(jù) 庫 “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)測信息遭到不必要的泄漏,本數(shù)據(jù)庫系統(tǒng)引入了嚴(yán)格的用戶信息管理機(jī)制,只有得到授權(quán)的用戶才能憑借各自用戶名和密碼登陸數(shù)據(jù)庫系統(tǒng),進(jìn)行數(shù)據(jù)操作。
用戶可以分為兩種:普用用戶和管理員,普通用戶只能瀏覽安全殼檢測信息和進(jìn)行裂縫信息錄入工作,沒有管理賬號的權(quán)限。管理員可以管理賬戶信息,添加或是刪除用戶。其登錄和管理界面如圖2、圖3 所示[4-5]。
圖2 安全殼外觀缺陷檢測系統(tǒng)-登錄界面Fig. 2 The defect detection system of containment shell appearance-Login interface
圖3 安全殼外觀缺陷檢測系統(tǒng)-管理用戶界面Fig. 3 The defect detection system of containment shell appearance-Management user interface
管理員通過“管理用戶”界面,后臺程序執(zhí)行相應(yīng)的SQL語句:"INSERT INTO Login_info_table VALUES ('%s','%s','%s');" ,達(dá)到添加新用戶的目的,并可以賦予其相應(yīng)的管理權(quán)限。控件List Control 不僅能夠?qū)z索到的符合條件的用戶信息顯示到界面上, 而且通過SQLite 中的API 函數(shù)SQLite3_get_table(db, m_sql, &dResult, &nRow, &nColumn,&zErrmsg ), 可以使其與建立的數(shù)據(jù)庫文件“DataBaseName.db”聯(lián)系起來,實時反饋數(shù)據(jù)庫中的數(shù)據(jù)信息。
“ 登 錄”界面,則通過將所填信息與數(shù)據(jù)表“Login_info_table”一一比對,從而判斷登錄信息是否有效,以及管理權(quán)限是否開放。
3.2.2 安全殼檢測信息儲存模塊
攝像頭拍攝到安全殼外表的實時畫面后,將視頻數(shù)據(jù)通過無線網(wǎng)卡上傳到上位機(jī),并按照一定格式保存在上位機(jī)硬盤中。 與此同時,運行在上位機(jī)的圖像處理軟件將會處理拍攝到的畫面,從中識別出裂縫,并采用軟件手段計算出裂縫的長度、寬度、嚴(yán)重程度等信息,該部分信息將會作為裂縫的屬性在上位機(jī)軟件界面上顯示出來。 界面如圖4 所示。
在此模塊中,需要將裂縫的圖片信息以“jpg”或者其他格式存儲到數(shù)據(jù)表“Crack_Pic_info_table”中,而圖片是大容量的二進(jìn)制數(shù)據(jù),所以我們不能像處理普通的文本那樣簡單的插入或者查詢, 為此,SQLite 提供了一組函數(shù)來處理這種BLOB 字段類型的數(shù)據(jù),以下為程序執(zhí)行過程:
1)建立與數(shù)據(jù)表“Crack_Pic_info_table”之間的聯(lián)系:
SQLite3_prepare(db, "insert into Crack_Pic_info_table values ('m.jpg',?);", -1, &stat, 0);此語句中“? ”表示待插入的圖片的二進(jìn)制數(shù)據(jù);
2)利用二進(jìn)制文件處理函數(shù),將圖片'm.jpg' 的二進(jìn)制信息寫入char 型指針jpg_file 中;
3) 執(zhí) 行BLOB 數(shù) 據(jù) 操 作:SQLite3_bind_blob(stmt,1,jpg_file,jpg_size,NULL);
4)執(zhí)行綁定之后的SQL 語句:SQLite3_step(stat)。
3.2.3 缺陷記錄檢索和缺陷分布圖繪制模塊
安全殼檢測信息儲存模塊將獲得的裂縫信息, 如圖片、缺陷區(qū)域、 坐標(biāo)、 缺陷類型等等參數(shù), 存儲到數(shù)據(jù)庫文件“DataBaseName.db”中,缺陷記錄檢索模塊可以通過輸入相應(yīng)的條件來匹配或者部分匹配符合條件的數(shù)據(jù),并顯示在控件List Control 中。 界面如圖5 所示[5]。
圖5 缺陷記錄檢索界面Fig. 5 Defect record retrieval interface
圖6 缺陷分布圖繪制界面Fig. 6 Defect distribution mapping interface
上位機(jī)軟件識別到裂縫后,會由裂縫信息存儲模塊將裂縫對應(yīng)的編號,長度,寬度,坐標(biāo),嚴(yán)重程度記錄在數(shù)據(jù)庫中對應(yīng)的位置進(jìn)行保存,為了更加清晰的表達(dá)出裂縫所處的位置,我們將會在一個二維展開平面上,按照坐標(biāo)關(guān)系將裂縫對應(yīng)的位置做出標(biāo)記。 標(biāo)記的顏色表示裂縫的嚴(yán)重程度,如圖6 所示。 在這里,數(shù)據(jù)庫只需要向上位機(jī)軟件傳遞四個參數(shù)(裂縫編號,X 坐標(biāo),Y 坐標(biāo),嚴(yán)重程度),然后由上位機(jī)軟件在已有的圖片上對應(yīng)位置繪點即可。
以核電站實際工程項目應(yīng)用為背景, 以解決無法安全、高效的檢測并記錄安全殼外表面裂縫信息難題為目的,開發(fā)出了安全殼外表面缺陷檢測系統(tǒng),并通過比較SQLite 技術(shù)與SQL Server 之間的優(yōu)缺點,最終選擇SQLite,并將其成功地應(yīng)用到了VS2008 開發(fā)平臺上,以用戶信息管理模塊,安全殼檢測信息儲存模塊,缺陷記錄檢索和缺陷分布圖繪制模塊為依托,實現(xiàn)了登錄系統(tǒng)的權(quán)限設(shè)置,缺陷信息參數(shù)的存儲,以及缺陷記錄的檢索和分布圖繪制等主要功能。 實踐表明,該系統(tǒng)能滿足核電站工程應(yīng)用,它不僅可以將機(jī)器人探測到的裂縫圖像信息存儲到數(shù)據(jù)庫,而且能夠根據(jù)需要隨時查看各種裂縫信息,來進(jìn)行分析比對。
[1] 鄒正宇,蘇魯明.淺析核電企業(yè)的安全文化[J]. 中國核電,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ù)庫SQLite的原理與應(yīng)用[J]. 電腦知識與技術(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ù)庫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è)計[M]. 北京:清華大學(xué)出版社,2005.
[5] 徐璇,姜明新. 基于MFC的工程軟件界面設(shè)計[J]. 電子設(shè)計工程,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.