王秋实, 张丽芹, 何小明
(中科华核电技术研究院 北京分院, 北京 100086)
由于日本福岛核事故的影响,世界各国对核安全的认识又提高到一个新的高度,安全文化得到了全世界核电企业的广泛认同和实践。 目前,安全文化已是核电企业文化的核心,被称为核电企业的灵魂,成为核安全的重要保障[1]。
核电站安全壳是防止放射性物质向环境释放的大体积预应力混凝土筒壳结构,是特殊环境条件下的重点防护目标。 目前国内已建的核电站大部分位于沿海地区, 正常情形下要经受氯离子含量很高的海风的侵蚀和阳光直射, 同时要承受台风、地震等环境因素影响;这些环境因素的影响会导致混凝土表面碳化,引起钢筋和预应力系统腐蚀,出现破损或裂缝,降低承载力,影响使用寿命。 因此对核电站安全壳进行定期的外观检查, 对其外观的缺陷进行基本评定以及持续跟踪和分析就成为了核安全文化中不可忽视的一项重要任务。
利用爬壁机器人外带摄像机对核电站安全壳外观进行视频检测,并将图像送回上位机检测系统——安全壳外观缺陷检测系统,进行缺陷分析及数据存储。 因此,为了能够更加全面的分析缺陷类型、 缺陷特性和缺陷长度面积等参数,也为了能够对数据参数及图像信息进行高效的存储和查询,研究人员将SQLite 数据库技术应用到了检测系统中。
SQLite 是一个开源的、内嵌式的关系型数据库。 它最初发布于2000 年,在便携性、易用性、紧凑性、有效性和可靠性方面有突出的表现。 数据库的服务器和客户端运行在同一个进程中。 这样可以减少网络访问的消耗,简化数据库管理,使你的程序部署起来更容易。 所有需要你做的都已经和你的程序一起编译好了。
在SQLite 提供的C/C++接口中,其中6 个APIs 属于核心接口。 其中, 最主要的两个对象是,database_connection 和prepared_statement。 database_connection 对 象 是 由SQLite3_open()接口函数创建并返回的,在应用程序使用任何其他SQLite 接口函数之前, 必须先调用该函数以便获得database_connnection 对象,在随后的其他APIs 调用中,都需要该对象作为输入参数以完成相应的工作。 至于prepare_statement, 我们可以简单的将它视为编译后的SQL语句,因此,所有和SQL 语句执行相关的函数也都需要该对象作为输入参数以完成指定的SQL 操作[2-6]。
SQLite 具有以下主要特征[3]:
1)管理简单,甚至可以认为无需管理;
2)操作方便,SQLite 生成的数据库文件可以在各个平台无缝移植;
3)可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等;
4) 易于维护。
SQL Server 是Microsoft 公司推出的大型数据库管理系统,建立在成熟而强大的关系模型基础上,可以很好地支持客户机/服务器网络模式,能够满足各种类型的企事业单位对构建网络数据库的需求。 并且,为了有效利用SQL Server 的强大功能,Visual C++提供了多种数据库开发技术和编程规范,主要包括MFC ODBC,DAO 和ADO 等。
ODBC 作为一个应用广泛的数据库访问应用编程接口,使用标准的SQL 作为其数据库访问语言。 MFC ODBC 类封装了ODBC API,常用的类有CDatabase(数据库类)、CRecordset(记录集类)、CRecordView(可视记录集类)、CDBException(异常类)。
尽管SQL Server 拥有诸多上述优点,但它需要SQL Server软件的支持。 且与SQLite 相比较,尽管功能更加强大,但管理模式相对复杂,而SQLite 是内嵌型数据库,移植性高,数据库服务器就在本地应用程序中,不需要网络配置和管理,这样既可以减少网络访问的消耗,又可以简化数据库管理。
安全壳外缺陷检测系统总体上可分为6 个大的功能模块,这6 大功能模块分别为:接收和发送驱动模块,底层通讯模块,上位机界面模块,后台运行数据库模块,后台服务系统和11 个子功能模块。11 个子功能模块又包括控制模块,定位模块,视频系统,图像系统,工具模块,菜单模块,EXCEL 模块,检索模块,CAD 模块,存储模块和算法模块等11 部分。无线形式发送回来的视频信号、位置信息以及其他一些附加信息经过无线数据收发硬件传送给上位机电脑,上位机控制电脑通过数据接收驱动模块提取并存储这些无线数据,再由底层的通讯模块发送给后台服务系统——数据库系统和上位机界面,而上位机界面和数据库系统又通过后台服务系统分别与11 个子功能模块进行通讯和数据交互。
总体方案逻辑图如图1 所示。
图1 总体方案逻辑图Fig. 1 The overall program logic diagram
数据库系统功能可以分为3 个模块,分别是:用户信息管理模块,安全壳检测信息储存模块,缺陷记录检索和缺陷分布图绘制模块。
为了能够对数据信息进行操作, 必须首先通过数据库SQLite 技术中database_connection 对象,利用SQLite3_open()接口函数建立起数据信息与数据库之间的联系。 代码如下:
CDVP_VCApp *m_app = (CDVP_VCApp *)AfxGetApp();
int rc ;
rc = SQLite3_open("DataBaseName.db",&m_app->db);
//建立或者连接数据库,并命名为“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),缺陷区域NVARCHAR(100),X坐标REAL(100),Y 坐标REAL(100),缺陷编号CHAR(100),缺陷类型NVARCHAR(100),缺陷状态NVARCHAR(100),几何特性NVARCHAR(100),观察特性NVARCHAR(100),附属特性NVARCHAR(100),长度REAL(100),面积REAL(100), 缝 宽 REAL (100), 时 间CHAR (100), 备 注NVARCHAR(100));";
//在 数 据 库 “DataBaseName” 中 建 立 数 据 表“Crack_Pic_info_table”,即裂缝缺陷信息
char *Login_info_table = "CREATE TABLE Login_info_table(登录用户名NVARCHAR(100),登 录密码NVARCHAR(100),登录用户类型NVARCHAR(100));";
//在 数 据 库 “DataBaseName” 中 建 立 数 据 表“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 用户信息管理模块
为了保障信息安全,防止安全壳监测信息遭到不必要的泄漏,本数据库系统引入了严格的用户信息管理机制,只有得到授权的用户才能凭借各自用户名和密码登陆数据库系统,进行数据操作。
用户可以分为两种:普用用户和管理员,普通用户只能浏览安全壳检测信息和进行裂缝信息录入工作,没有管理账号的权限。管理员可以管理账户信息,添加或是删除用户。其登录和管理界面如图2、图3 所示[4-5]。
图2 安全壳外观缺陷检测系统-登录界面Fig. 2 The defect detection system of containment shell appearance-Login interface
图3 安全壳外观缺陷检测系统-管理用户界面Fig. 3 The defect detection system of containment shell appearance-Management user interface
管理员通过“管理用户”界面,后台程序执行相应的SQL语句:"INSERT INTO Login_info_table VALUES ('%s','%s','%s');" ,达到添加新用户的目的,并可以赋予其相应的管理权限。控件List Control 不仅能够将检索到的符合条件的用户信息显示到界面上, 而且通过SQLite 中的API 函数SQLite3_get_table(db, m_sql, &dResult, &nRow, &nColumn,&zErrmsg ), 可以使其与建立的数据库文件“DataBaseName.db”联系起来,实时反馈数据库中的数据信息。
“ 登 录”界面,则通过将所填信息与数据表“Login_info_table”一一比对,从而判断登录信息是否有效,以及管理权限是否开放。
3.2.2 安全壳检测信息储存模块
摄像头拍摄到安全壳外表的实时画面后,将视频数据通过无线网卡上传到上位机,并按照一定格式保存在上位机硬盘中。 与此同时,运行在上位机的图像处理软件将会处理拍摄到的画面,从中识别出裂缝,并采用软件手段计算出裂缝的长度、宽度、严重程度等信息,该部分信息将会作为裂缝的属性在上位机软件界面上显示出来。 界面如图4 所示。
在此模块中,需要将裂缝的图片信息以“jpg”或者其他格式存储到数据表“Crack_Pic_info_table”中,而图片是大容量的二进制数据,所以我们不能像处理普通的文本那样简单的插入或者查询, 为此,SQLite 提供了一组函数来处理这种BLOB 字段类型的数据,以下为程序执行过程:
1)建立与数据表“Crack_Pic_info_table”之间的联系:
SQLite3_prepare(db, "insert into Crack_Pic_info_table values ('m.jpg',?);", -1, &stat, 0);此语句中“? ”表示待插入的图片的二进制数据;
2)利用二进制文件处理函数,将图片'm.jpg' 的二进制信息写入char 型指针jpg_file 中;
3) 执 行BLOB 数 据 操 作:SQLite3_bind_blob(stmt,1,jpg_file,jpg_size,NULL);
4)执行绑定之后的SQL 语句:SQLite3_step(stat)。
3.2.3 缺陷记录检索和缺陷分布图绘制模块
安全壳检测信息储存模块将获得的裂缝信息, 如图片、缺陷区域、 坐标、 缺陷类型等等参数, 存储到数据库文件“DataBaseName.db”中,缺陷记录检索模块可以通过输入相应的条件来匹配或者部分匹配符合条件的数据,并显示在控件List Control 中。 界面如图5 所示[5]。
图5 缺陷记录检索界面Fig. 5 Defect record retrieval interface
图6 缺陷分布图绘制界面Fig. 6 Defect distribution mapping interface
上位机软件识别到裂缝后,会由裂缝信息存储模块将裂缝对应的编号,长度,宽度,坐标,严重程度记录在数据库中对应的位置进行保存,为了更加清晰的表达出裂缝所处的位置,我们将会在一个二维展开平面上,按照坐标关系将裂缝对应的位置做出标记。 标记的颜色表示裂缝的严重程度,如图6 所示。 在这里,数据库只需要向上位机软件传递四个参数(裂缝编号,X 坐标,Y 坐标,严重程度),然后由上位机软件在已有的图片上对应位置绘点即可。
以核电站实际工程项目应用为背景, 以解决无法安全、高效的检测并记录安全壳外表面裂缝信息难题为目的,开发出了安全壳外表面缺陷检测系统,并通过比较SQLite 技术与SQL Server 之间的优缺点,最终选择SQLite,并将其成功地应用到了VS2008 开发平台上,以用户信息管理模块,安全壳检测信息储存模块,缺陷记录检索和缺陷分布图绘制模块为依托,实现了登录系统的权限设置,缺陷信息参数的存储,以及缺陷记录的检索和分布图绘制等主要功能。 实践表明,该系统能满足核电站工程应用,它不仅可以将机器人探测到的裂缝图像信息存储到数据库,而且能够根据需要随时查看各种裂缝信息,来进行分析比对。
[1] 邹正宇,苏鲁明.浅析核电企业的安全文化[J]. 中国核电,2008:350-353.
ZOU Zheng-yu,SU Lu-ming. Safety culture in nuclear power enterprise[J]. China Nuclear Power,2008:350-353.
[2] 唐敏,宋杰. 嵌入式数据库SQLite的原理与应用[J]. 电脑知识与技术,2008:600-603.
TANG Min,SONG Jie. The Mechanism and applications of SQlite[J]. Computer Knowledge and Technology,2008:600-603.
[3] 倪天龙,张贤高,王培. 数据库SQLite在嵌入式系统中的应用[J]. 单片机与嵌入式系统应用,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] 温秀梅,丁学钧. Visual C++面向对象程序设计[M]. 北京:清华大学出版社,2005.
[5] 徐璇,姜明新. 基于MFC的工程软件界面设计[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权威指南[M]. 杨谦,译.2版.北京:电子工业出版社,2011.