郭肖靜,苗積臣,吳志芳
(清華大學 核能與新能源技術研究院,北京 100084)
在凸度儀系統中,檢測鋼板過程中會產生海量數據。對這些歷史數據,系統需進行存儲、查詢、檢索、顯示等功能。為此,必須使用數據庫管理軟件來完成以上功能。目前,市場上主要的數據庫管理軟件包括SQL Server、MySQL、DB2、Oracle等,其中,DB2和 Oracle均為大型商用數據庫,需支付高額的授權費用才可使用,且需專門的配置維護,開發上有諸多不便。SQL Server是微軟公司提供的數據庫軟件,只能在 Windows操作系統中使用,不具有跨平臺的能力。MySQL是當前最流行的開放源碼SQL數據庫管理系統,它由MySQL AB公司開發、發布并支持,具有多平臺支持、靈活架構、免費使用等特點。且當前很多網站均采用MySQL作為其后臺數據庫支撐,其穩定性和可靠性得到了充分驗證。因此,在凸度儀系統中,擬使用MySQL對檢測的鋼板數據進行管理,完成系統的功能。
MySQL是當前應用最為廣泛的數據庫管理系統之一,具有強大的跨平臺能力(可運行于Windows、Linux、Unix等操作系統上)和豐富的開發接口(可與PHP、VC、VB、Delphi等語言實現接口,便于嵌入到多種應用中)。MySQL具有快速、可靠和易于使用的特點,當前使用Linux+PHP+Apache+MySQL已成為中小型網站提供Web服務的主流模式。此外,MySQL還是一種開放源代碼的軟件,非常便于研究和開發[1]。
MySQL采用客戶端/服務器模式,由支持不同后端的1個多線程SQL服務器、數種不同的客戶端程序和庫、眾多管理工具和廣泛的應用編程接口API組成。此外,MySQL還支持多種數據類型,包括帶符號/無符號整數,1、2、3、4、8 字 節 長,FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、TIMESTAMP、YEAR、SET、ENUM等,便于各種數據高效率存儲[2]。
綜合以上特點,在凸度儀系統中,選擇MySQL作為數據庫管理系統,與凸度儀其他模塊配合,實現完整的數據存儲、檢索、排序、顯示等功能,完成設計要求。
凸度儀系統的結構如圖1所示。

圖1 凸度儀系統結構Fig.1 Structure of instantaneous profile gauge system
在圖1中,采集模塊采集到原始的檢測數據,交給運算模塊進行處理;運算模塊通過差值、補償等方法,計算鋼板橫斷面上每個采樣點的厚度、溫度等信息,并將這些數據發送到顯示模塊;顯示模塊將這些數據進行實時顯示,并進一步計算凸度、楔度等相關數據,同時還將這些數據按一定格式存儲到數據庫中,且能按用戶要求,對這些歷史數據進行檢索、排序和顯示。
由于數據庫只與顯示模塊存在接口,因此,只需分析顯示模塊對數據庫的功能需求。
1)數據存儲
當顯示模塊收到運算模塊發送的鋼板數據后,應實時地將這些數據存儲到數據庫中。在鋼板掃描過程中,對數據庫只有存儲操作,沒有檢索和讀取操作。
2)數據檢索
在實際的應用環境中,將檢測大量鋼板,得到海量數據,如何快速檢索到所需的鋼板數據成為一重要問題。在本系統中,使用一些標記性參數作為檢索條件,如檢測時間、鋼板類型、編號、鋼板厚度、鋼板凸度等指標,且這些檢索條件可進一步進行邏輯組合,如與、或等操作。數據庫應將滿足檢索條件的所有鋼板編號返回給顯示模塊,用戶在其中選定某個鋼板后,數據庫再將該鋼板的完整數據傳送給顯示模塊。
3)數據讀取和顯示
當用戶選定某個鋼板后,數據庫應將該鋼板相關的所有數據都發送到顯示模塊中,顯示模塊應根據需要,對整個鋼板信息或局部信息進行顯示。在顯示過程中,不再與數據庫發生數據交換。
根據上面的需求,將存儲在數據庫中的數據分為3類。1)實際檢測數據,包括鋼板的厚度、寬度、溫度、傾角等實際檢測到的數據。這些數據的數據量極大,代表鋼板的原始情況,一般只用于顯示,而不用于檢索。2)后處理數據,包括凸度、楔度等數據,是由實際檢測數據經某些運算后得到的指標,用來表示鋼板的檢測結果。這些數據直觀反映了被檢鋼板是否合格,既用于顯示,也用于檢索。3)鋼板特征數據,包括檢測時間、鋼板編號、金屬類型、標稱值等。這些數據表示1塊鋼板的整體屬性,既用于顯示,也用于索引。
數據庫設計的核心是表的設計。數據庫由若干個表組成,表中每1行代表1組記錄,每1列代表1類數據。數據庫的表和表之間可有相同的列,不同表的數據通過這相同的列來實現關聯,從而獲得對數據的完整訪問[3]。
在本系統中,構造了2個表:1個用于存儲實際檢測數據,命名為PlateData;1個存儲鋼板特征數據和后處理數據,命名為PlateKey。兩個表的具體構造列于表1、2。

表1 PlateData表的構造Table 1 Structure of PlateData table

表2 PlateKey表的構造Table 2 Structure of PlateKey table
在表1中,每個鋼板有若干個橫斷面,每個橫斷面有N個探測點(本程序中N為256)。表中每1行表示1個橫斷面上的所有數據,具有相同鋼板編號的所有行表示1個鋼板的完整數據。該表只用于數據的存儲和讀取,不用于檢索。
在表2中,每1行代表1個鋼板的信息,其中前6項是鋼板的特征數據,后2項是鋼板的實測數據。該表主要用于數據的檢索和排序。
表1和表2中共有的列項目是鋼板編號,這也是本系統使用的數據庫的主鍵。通過該項目即可實現所有數據的關聯。
1)數據庫連接與初始化
當凸度儀系統啟動后,應連接到數據庫管理系統,并選擇所需使用的數據庫。
2)數據的存儲
當鋼板開始檢測時,運算模塊先傳送1幀起始幀,表明開始1個新鋼板的檢測,該幀中應包含鋼板編號、合金類型、標稱厚度、標稱凸度等鋼板特征數據。顯示模塊將這些數據保存,但暫不寫入數據庫中。而后,運算模塊將每個橫斷面的數據打包成1幀發送過來,顯示模塊根據這些數據計算凸度、楔度等指標,并按表1的格式,將數據寫入數據庫中。當鋼板檢測結束后,運算模塊會發送1個結束幀,此時顯示模塊將前面收到的鋼板特征數據和計算得到的凸度、楔度等數據按表2的格式寫入數據庫中。
3)數據的檢索
數據的檢索在PlateKey表中進行,根據用戶給出的檢索條件,找到表中滿足條件的若干行。
4)數據的讀取
當用戶具體選擇了某1行記錄后,獲取該行的PlateNum值,并從PlateData表中提取數據。
在本凸度儀系統中,使用Visual C++作為編程語言。因此要和數據庫實現通信,必須使用MySQL提供的C++編程接口。在MySQL中,提供了 mysql.h、libmysql.lib和libmysql.dll。在C或C++文件中,只要包含“mysql.h”頭文件,即可使用libmysql.lib和libmysql.dll中的函數[4]。在本系統的實現中,主要使用了如下5個函數。
1)MYSQL *mysql_init(MYSQL *mysql)
該函數用于初始化mysql結構,為后面的函數操作提供指針。
2)MYSQL * mysql_real_connect(MYSQL*mysql,const char*host,const char*user,const char*passwd,const char*db,unsigned int port,const char*unix_socket,unsigned long client_flag)
該函數用于應用程序與數據庫管理系統的連接以及數據庫的選擇。在本系統中,當系統啟動時,調用該函數。
3)int mysql_real_query(MYSQL *mysql,const char*stmt_str,unsigned long length)
該函數用于向數據庫發送1條SQL指令。系統中,數據的存儲、查詢、讀取等指令均通過該函數傳遞到數據庫管理系統中。
4)MYSQL_RES *mysql_use_result(MYSQL*mysql)
該函數把數據庫相應SQL指令的輸出返回到應用程序中。通過該指令,即可得到數據庫查詢和讀取的結果。
5)void mysql_close(MYSQL*mysql)
該函數用于關閉數據庫。在本系統中,退出時要調用該函數。
根據上述分析,利用MySQL的C API,實現對數據庫的訪問。使用 Microsoft Visual C++進行開發,并為數據庫檢索和讀取單獨設計了1個對話框,如圖2所示。在圖2左上方,列出了若干檢索條件,可進行與、或等檢索;下方是數據庫中滿足條件的所有記錄。當選定其中某1個鋼板時,在右側即顯示鋼板整體的厚度分布,以及橫縱兩個方向的厚度分布。從圖中可看出,數據庫的存儲、檢索和讀取功能均已實現,滿足系統設計的要求。

圖2 數據庫系統測試圖Fig.2 Dialog of database test
本文介紹了凸度儀系統中數據庫管理系統的設計與實現。選擇MySQL數據庫,分析了凸度儀系統對數據庫應用的需求,從而提取了操作數據并設計了合理的表,保證了數據存儲的完整性和檢索的高效性。此外,分析了應用中所需的SQL指令及MySQL提供的C API中相關的函數,從而在使用Visual C++編程的凸度儀系統中,成功地嵌入了MySQL數據庫,實現了數據的存儲、檢索和讀取等功能。通過實際測試,達到了系統設計的要求。
[1]袁淵,曾文火.MySQL數據庫接口的VC實現與應用[J].華東船舶工業學院學報:自然科學版,2002,16(5):41-45.YUAN Yuan,ZENG Wenhuo.Realization and application of MySQL database interfaces based on Visual C++[J].Journal of East China Shipbuilding Institute: Natural Science Edition,2002,16(5):41-45(in Chinese).
[2]薛軍超.MySQL網絡數據庫開發[M].北京:人民郵電出版社,2001.
[3]蘭旭輝,熊家軍,鄧剛.基于MySQL的應用程序設計[J].計算機工程與設計,2004,25(3):442-443,468.LAN Xuhui,XIONG Jiajun,DENG Gang.Development of application program based on MySQL[J].Computer Engineering and Design,2004,25(3):442-443,468(in Chinese).
[4]Oracle.MySQL 5.1reference manual[S/OL].Redwood City,California:Oracle USA,2003[2011-2-25].http:∥dev.mysql.com/doc/refman/5.1/en/.