文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)08-0007-03
隨著工業(yè)技術(shù)現(xiàn)代化的不斷發(fā)展,工業(yè)生產(chǎn)對(duì)設(shè)備的加工精度、加工效率和穩(wěn)定性提出了更高的要求,磨削加工擔(dān)負(fù)著零件精密表面的最終加工工序,其精度對(duì)機(jī)械產(chǎn)品的質(zhì)量有著直接影響。主動(dòng)測(cè)量技術(shù)在磨削加工過(guò)程中的應(yīng)用能夠改善傳統(tǒng)的磨削加工產(chǎn)品一致性差、質(zhì)量不穩(wěn)定、加工效率低等缺點(diǎn),滿(mǎn)足人們對(duì)產(chǎn)品高精度、高品質(zhì)、高一致性的需求。隨著嵌入式系統(tǒng)硬件平臺(tái)的日趨強(qiáng)大及其相對(duì)于工控板低成本、低功耗的優(yōu)勢(shì),基于嵌入式的磨削加工主動(dòng)測(cè)量?jī)x的競(jìng)爭(zhēng)優(yōu)勢(shì)日益明顯,擁有良好的市場(chǎng)前景。為此在對(duì)現(xiàn)有磨床主動(dòng)測(cè)量?jī)x的理論與應(yīng)用進(jìn)行深入研究的基礎(chǔ)上,開(kāi)發(fā)了基于WinCE的嵌入式多功能磨削加工主動(dòng)測(cè)量控制系統(tǒng),系統(tǒng)結(jié)構(gòu)如圖1所示。
在系統(tǒng)工作過(guò)程中,需要對(duì)大量數(shù)據(jù)進(jìn)行實(shí)時(shí)的存取和處理。目前,國(guó)內(nèi)自主研發(fā)的主動(dòng)測(cè)量?jī)x的數(shù)據(jù)管理大都采用基于文件系統(tǒng)的存儲(chǔ)結(jié)構(gòu),由用戶(hù)直接對(duì)記錄所在的文件進(jìn)行操作,I/O開(kāi)銷(xiāo)較大,同時(shí)由于應(yīng)用程序是以獨(dú)占方式打開(kāi)數(shù)據(jù)文件,數(shù)據(jù)的共享性和應(yīng)用軟件的可重用性較差。而通過(guò)數(shù)據(jù)庫(kù)系統(tǒng)來(lái)管理數(shù)據(jù)的方式可以較好地解決這些問(wèn)題?;跀?shù)據(jù)庫(kù)系統(tǒng)管理數(shù)據(jù)的方式,數(shù)據(jù)和程序相互獨(dú)立,通過(guò)事務(wù)進(jìn)行調(diào)度與并發(fā)控制,可有效地對(duì)數(shù)據(jù)進(jìn)行存取、查詢(xún)等共享操作,同時(shí)借助于數(shù)據(jù)庫(kù)所具有的安全性檢驗(yàn)、完整性檢查等多種安全措施,可確保系統(tǒng)具有較好的整體性能。為此,本文提出了應(yīng)用嵌入式數(shù)據(jù)庫(kù)對(duì)磨削加工主動(dòng)測(cè)量控制系統(tǒng)中的數(shù)據(jù)進(jìn)行管理的方案。
1 嵌入式數(shù)據(jù)庫(kù)方案設(shè)計(jì)
嵌入式數(shù)據(jù)庫(kù)是一種具備了基本數(shù)據(jù)庫(kù)特性的數(shù)據(jù)文件,通常是與嵌入式操作系統(tǒng)及具體的應(yīng)用集成在一起,無(wú)需獨(dú)立運(yùn)行數(shù)據(jù)庫(kù)引擎,由程序直接調(diào)用相應(yīng)的API就可實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作。WinCE系統(tǒng)下比較常用的兩種嵌入式數(shù)據(jù)庫(kù)SQLite與SQLCE的存取性能對(duì)比結(jié)果如圖2、圖3所示。
圖2是向兩種數(shù)據(jù)庫(kù)中插入數(shù)據(jù)時(shí)的速度對(duì)比測(cè)試。測(cè)試時(shí)分別向兩種數(shù)據(jù)庫(kù)中插入了5 000條數(shù)據(jù),經(jīng)過(guò)多次測(cè)試,測(cè)得SQLite插入5 000條數(shù)據(jù)的用時(shí)在4 500 ms~5 000 ms范圍,而SQLCE在23 000 ms~25 000 ms范圍,這里給出了其中一次測(cè)試的結(jié)果。圖3給出了在兩種數(shù)據(jù)庫(kù)中對(duì)tabel2、tabel3表進(jìn)行聯(lián)合查詢(xún)時(shí)的速度對(duì)比測(cè)試結(jié)果,測(cè)試之前向每個(gè)數(shù)據(jù)庫(kù)的tabel2,tabel3表中都插入了25 000條數(shù)據(jù)。通過(guò)對(duì)比結(jié)果可以看出,WinCE系統(tǒng)下SQLite存取數(shù)據(jù)的速度是SQLCE的4~5倍。磨削加工主動(dòng)測(cè)量?jī)x是一種在線、實(shí)時(shí)、動(dòng)態(tài)檢測(cè)的高精度測(cè)量控制儀器,對(duì)數(shù)據(jù)存取和處理的速度要求較高,因此系統(tǒng)選用SQLite構(gòu)建一個(gè)小型的嵌入式數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)對(duì)數(shù)據(jù)進(jìn)行管理。
2 主動(dòng)測(cè)量?jī)x的數(shù)據(jù)庫(kù)結(jié)構(gòu)
磨削加工主動(dòng)測(cè)量?jī)x軟件系統(tǒng)包括測(cè)量、設(shè)置和調(diào)整3個(gè)功能模塊。測(cè)量模塊主要用于測(cè)量數(shù)據(jù)處理以及處理結(jié)果的實(shí)時(shí)顯示;設(shè)置模塊負(fù)責(zé)系統(tǒng)大量測(cè)量參數(shù)的設(shè)定;調(diào)整模塊根據(jù)實(shí)際情況對(duì)設(shè)定的參數(shù)進(jìn)行微調(diào),以滿(mǎn)足系統(tǒng)需要?;赪inCE操作系統(tǒng)和SQLite數(shù)據(jù)庫(kù)構(gòu)建的磨削加工主動(dòng)測(cè)量?jī)x軟件系統(tǒng)結(jié)構(gòu)如圖4所示。
為了滿(mǎn)足磨削加工現(xiàn)場(chǎng)對(duì)主動(dòng)測(cè)量?jī)x的不同需求,嵌入式磨削加工主動(dòng)測(cè)量控制系統(tǒng)的功能應(yīng)包括對(duì)加工工件尺寸電感信號(hào)的采集、處理和顯示,以及對(duì)機(jī)床進(jìn)給機(jī)構(gòu)的控制。為了避免因采用一個(gè)數(shù)據(jù)文件存儲(chǔ)所有的數(shù)據(jù)信息而造成數(shù)據(jù)存取速度上的減慢,系統(tǒng)采用分割文件的形式來(lái)存放各部分?jǐn)?shù)據(jù),通過(guò)對(duì)數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)表的操作完成各部分?jǐn)?shù)據(jù)的實(shí)時(shí)存取和處理。部分?jǐn)?shù)據(jù)表的主要結(jié)構(gòu)如表1、表2所示。
系統(tǒng)開(kāi)機(jī)后查詢(xún)上次關(guān)機(jī)時(shí)數(shù)據(jù)采集表內(nèi)存儲(chǔ)的數(shù)據(jù),通過(guò)“GJLX”、“CTS”等字段的數(shù)據(jù)控制相應(yīng)測(cè)頭對(duì)工件尺寸電感信號(hào)進(jìn)行采集。測(cè)量模塊下調(diào)用數(shù)據(jù)處理函數(shù)并結(jié)合數(shù)據(jù)處理表內(nèi)相關(guān)測(cè)量參數(shù)對(duì)采樣數(shù)據(jù)進(jìn)行處理,并將數(shù)據(jù)處理結(jié)果實(shí)時(shí)地顯示在測(cè)量界面上。根據(jù)功能要求,通過(guò)設(shè)置、調(diào)整模塊對(duì)數(shù)據(jù)處理表各項(xiàng)測(cè)量參數(shù)進(jìn)行修改、設(shè)定。
3 主動(dòng)測(cè)量?jī)x數(shù)據(jù)庫(kù)的設(shè)計(jì)
SQLite是一款輕量的、開(kāi)源的、遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)。SQLite與傳統(tǒng)數(shù)據(jù)庫(kù)相比,其系統(tǒng)開(kāi)銷(xiāo)小,底層控制能力強(qiáng),具有更好的實(shí)時(shí)性。SQLite能夠高效地利用嵌入式系統(tǒng)的有限資源,提高數(shù)據(jù)的存取速度,增強(qiáng)系統(tǒng)的安全性。
主動(dòng)測(cè)量?jī)x中對(duì)數(shù)據(jù)庫(kù)的主要操作如下。
(1)打開(kāi)數(shù)據(jù)庫(kù)
string connStr="datasource="+ DbName +" ";
SQLiteConnection conn=new SQLiteConnection(connStr);
conn.Open();
(2)執(zhí)行SQL
string sql=" ";
SQLiteCommand cmd=new SQLiteCommand(sql,conn);
SQLiteDataReader reader=cmd.ExecuteReader();
reader.Read();
(3)關(guān)閉數(shù)據(jù)庫(kù)
conn.close();
3.1 測(cè)量模塊數(shù)據(jù)庫(kù)操作
軟件系統(tǒng)測(cè)量模塊應(yīng)用WinCE系統(tǒng)下的多線程技術(shù)實(shí)現(xiàn)前臺(tái)界面顯示、操作與后臺(tái)數(shù)據(jù)處理的并發(fā)執(zhí)行,同時(shí)根據(jù)需要將能夠反映加工過(guò)程的各信號(hào)控制點(diǎn)間數(shù)據(jù)實(shí)時(shí)地存入公共的數(shù)據(jù)緩沖區(qū),并通過(guò)數(shù)據(jù)保存函數(shù)將公共緩沖區(qū)的數(shù)據(jù)存儲(chǔ)到嵌入式數(shù)據(jù)庫(kù)SQLite 中,方便用戶(hù)查看加工過(guò)程的歷史曲線。子線程創(chuàng)建過(guò)程為:
Thread th=new Thread(DoWork);//創(chuàng)建線程
th.IsBackground = true; //定義為后臺(tái)線程
th.Start();//啟動(dòng)線程
其中子線程DoWork方法內(nèi)完成采樣數(shù)據(jù)的處理與實(shí)時(shí)存儲(chǔ),而主線程負(fù)責(zé)整個(gè)用戶(hù)界面的顯示與操作。
同時(shí),為了防止向數(shù)據(jù)處理表table2中插入數(shù)據(jù)時(shí)因數(shù)據(jù)采集表table1中沒(méi)有相應(yīng)的工件類(lèi)型記錄而導(dǎo)致系統(tǒng)功能出錯(cuò),創(chuàng)建數(shù)據(jù)庫(kù)時(shí)需要在table1和table2這兩個(gè)表之間強(qiáng)制實(shí)施一個(gè)外鍵約束。這樣當(dāng)企圖往table2表中插入一行table1中無(wú)對(duì)應(yīng)數(shù)據(jù)的記錄時(shí)就會(huì)失敗,此時(shí)系統(tǒng)會(huì)給出提示,阻止用戶(hù)進(jìn)行錯(cuò)誤的操作。實(shí)現(xiàn)過(guò)程為:
CREATE TABLE table1(id INTEGER PRIMARY KEY,……);
CREATE TABLE table2(id INTEGER,F(xiàn)OREIGN KEY(GJLX) REFERENCES table1(id));
3.2 設(shè)置、調(diào)整模塊數(shù)據(jù)庫(kù)操作
在磨削加工主動(dòng)測(cè)量?jī)x的工作過(guò)程中經(jīng)常需要通過(guò)設(shè)置、調(diào)整功能模塊對(duì)各項(xiàng)測(cè)量參數(shù)進(jìn)行修改、設(shè)定并將這些數(shù)據(jù)實(shí)時(shí)地存儲(chǔ)到數(shù)據(jù)庫(kù)中。為了避免代碼重用,可以通過(guò)向數(shù)據(jù)訪問(wèn)層同一程序模塊傳遞不同參數(shù)進(jìn)行相關(guān)數(shù)據(jù)操作的區(qū)分。下面以系統(tǒng)工件定義模塊中對(duì)不同類(lèi)型工件相應(yīng)測(cè)量項(xiàng)目類(lèi)型的設(shè)置為例來(lái)說(shuō)明對(duì)數(shù)據(jù)庫(kù)操作的具體過(guò)程。設(shè)置功能模塊下工件定義界面如圖5所示。
系統(tǒng)可以實(shí)現(xiàn)對(duì)6種類(lèi)型工件磨削加工過(guò)程的主動(dòng)測(cè)量控制。對(duì)相應(yīng)類(lèi)型工件的某一項(xiàng)目類(lèi)型進(jìn)行修改后,點(diǎn)擊確定按鈕調(diào)用數(shù)據(jù)訪問(wèn)層同一個(gè)update函數(shù),通過(guò)傳遞不同的_GJ、id參數(shù)值實(shí)現(xiàn)對(duì)不同項(xiàng)目類(lèi)型的實(shí)時(shí)存儲(chǔ)。如:對(duì)“工件B”的項(xiàng)目1類(lèi)型進(jìn)行修改后點(diǎn)擊確定按鈕調(diào)用update(“內(nèi)徑”,“工件B”,1),而對(duì)“工件A”的項(xiàng)目2類(lèi)型進(jìn)行修改后點(diǎn)擊確定按鈕調(diào)用update(“外徑”,“工件A”,2),并實(shí)時(shí)更新數(shù)據(jù)庫(kù)相應(yīng)記錄。update函數(shù)部分代碼如下:
public void update(string _str,string _GJ,int id)
{
//創(chuàng)建數(shù)據(jù)庫(kù)連接函數(shù)
switch (id)
{
case 1:sql="update formula set XMLX1='" + _str +
"'where GJ='" + _GJ + "'"; break;
case 2:sql="update formula set XMLX2='" + _str +
"'where GJ='" + _GJ + "'"; break;
……
default: break;
}
//執(zhí)行相應(yīng)sql語(yǔ)句對(duì)相應(yīng)參數(shù)進(jìn)行設(shè)置
}
從圖6可以看出,磨削完成后工件尺寸的加工余量與預(yù)先設(shè)定的到尺寸值近似相等,其中誤差是由零位尺寸與零位電壓間轉(zhuǎn)換引起的。因此,磨削加工主動(dòng)測(cè)量?jī)x能夠按照要求將數(shù)據(jù)處理結(jié)果實(shí)時(shí)地存儲(chǔ)到數(shù)據(jù)庫(kù)中,滿(mǎn)足了磨削加工主動(dòng)測(cè)量?jī)x對(duì)數(shù)據(jù)存取的實(shí)時(shí)性與一致性要求,驗(yàn)證了方案的可行性。
本文利用嵌入式SQLite數(shù)據(jù)庫(kù)體積小、處理速度快的優(yōu)勢(shì),應(yīng)用SQLite對(duì)嵌入式磨削加工主動(dòng)測(cè)量控制系統(tǒng)中的大量數(shù)據(jù)進(jìn)行管理,給出了Visual Studio 2008集成開(kāi)發(fā)環(huán)境中嵌入磨削加工主動(dòng)測(cè)量?jī)x數(shù)據(jù)庫(kù)管理系統(tǒng)的具體實(shí)現(xiàn)過(guò)程,為基于WinCE的磨削加工主動(dòng)測(cè)量控制系統(tǒng)的開(kāi)發(fā)提供了技術(shù)支持,對(duì)嵌入式磨削加工主動(dòng)測(cè)量?jī)x的進(jìn)一步發(fā)展具有重要意義。
參考文獻(xiàn)
[1] 王鴻偉.磨加工過(guò)程中的主動(dòng)測(cè)量?jī)x[J].軸承,2004(4):32-34.
[2] 郭寒軍.嵌入式智能主動(dòng)測(cè)量?jī)x的研究與開(kāi)發(fā)[D].無(wú)錫:江南大學(xué),2008.
[3] 周東升,吳彬彬.基于WinCE的嵌入式數(shù)據(jù)庫(kù)研究[J].軟件導(dǎo)刊,2011,10(4):154-156.
[4] 韓善鋒,曹鳳海,易昌華.SQLite數(shù)據(jù)庫(kù)在嵌入式程序開(kāi)發(fā)中的應(yīng)用[J].物探裝備,2011,21(3):170-173,178.
[5] 蔣晶,郝繼飛,于平.SQLite在嵌入式系統(tǒng)Wince中的應(yīng)用[J].微型機(jī)與應(yīng)用,2011,30(14):82-83.
[6] 王小科,徐薇.C#從入門(mén)到精通[M].北京:清華大學(xué)出版社,2010.
[7] 尹麗娜,汪琦.基于嵌入式數(shù)據(jù)庫(kù)SQLITE的采煤機(jī)智能監(jiān)控系統(tǒng)[J].煤礦機(jī)械,2011,32(12):243-244.
[8] 葉子,許家昌.嵌入式WinCE多線程編程研究與實(shí)現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2010(01):45-46.