摘 要: 針對現代工業(yè)機械設備維修的復雜性,根據設備的故障現象,、故障原因,、故障排除的原理,結合以往維修人員的經驗,,采用Access數據庫構建樹狀結構進行節(jié)點管理與節(jié)點消息響應,,從而實現故障信息管理和故障信息提取。運用C++語言和面向對象的方法實現了人機交互界面,,開發(fā)出設備故障維修專家?guī)煜到y(tǒng),。實際應用表明,該系統(tǒng)提高了維修人員的維修效率,、減少了人力成本,,為實際維修提供參考和指導。
關鍵詞: Access數據庫,;樹狀結構,;故障信息,;C++;專家?guī)煜到y(tǒng)
由于現代工業(yè)機械設備的復雜性及其使用壽命要求的日益提高,,對設備維修保障和質量服務等方面提出了新的挑戰(zhàn),。有效存儲和使用設備的歷史維修案例、查詢設備的應用情況,,為維護人員改進維修方式和解決新問題提供了參考依據,,也可提高設備的可維護性和穩(wěn)定性。
根據維修經驗,、技巧,、方法等構建的設備故障維修專家?guī)煜到y(tǒng)包括故障現象、故障原因,、排除方法等,。它為解決設備出現的實際故障問題提供了重要依據。因此,,如何有效存儲,、檢索文本、圖片,、視頻等數據資料是構建故障維修專家?guī)煜到y(tǒng)的關鍵,。本文針對機械設備引起的故障現象、原因及排除方法設計了一套設備故障維修專家?guī)煜到y(tǒng),,通過關鍵詞匹配檢索故障案例,,為設備維護提供參考和指導。
1 系統(tǒng)分析與總體設計
系統(tǒng)設計思路主要由故障信息采集和故障信息錄入兩部分組成,。故障信息采集:維修人員將設備產生的故障現象,、故障原因及故障排除方法等信息收集。故障信息錄入:管理員將維修人員收集的信息錄入數據庫,。當設備出現故障時,,維修人員使用本系統(tǒng)查找出設備故障的排除方法,;同時,對某些不準確的信息修改后重新收集,提供給超級用戶修改后錄入系統(tǒng),。其流程圖如圖1所示。根據系統(tǒng)流程圖設計專家?guī)煜到y(tǒng),,主要由用戶管理,、信息管理和信息顯示等組成,系統(tǒng)總體框圖如圖2所示。
2 樹狀結構的實現
樹狀結構是一類非常重要的非線性結構數據,,它可以描述客觀世界中廣泛存在的具有分支關系或層次特性的對象,,因此在計算機領域里有著廣泛應用,如操作系統(tǒng)中的文件管理,、編譯程序中的語法結構,、數據庫系統(tǒng)信息組織形式等,。因此,本文將采用樹狀結構實現專家?guī)煜到y(tǒng)的層次結構管理和節(jié)點消息響應,。
參考文獻[1-2]中運用C++設計了樹狀結構,,實現了節(jié)點的復制、剪切,、粘貼等功能,,但程序重啟后,修改好的節(jié)點信息將會丟失,,未能實現樹狀結構節(jié)點的存儲,。 而本文通過Access數據庫構建樹狀結構[3-4],實現了樹狀結構節(jié)點的存儲,、節(jié)點信息提取,,開發(fā)出故障維修專家?guī)煜到y(tǒng)。
2.1 節(jié)點在Access數據庫的排列原理
樹狀結構中的每個節(jié)點都包括ID,、子節(jié)點,、父節(jié)點、目錄號,、路徑5個自定義的數據,,將這些節(jié)點包括的數據存放在Access數據庫表中,通過對節(jié)點數據的排列組合來實現樹狀分層結構,,其數據的組合如圖3(a)所示,。
其中,數據的分層是根據子節(jié)點和父節(jié)點在數據表中的交替排列,每一個父節(jié)點下面包括子節(jié)點,,而每一個子節(jié)點又可以作為新的父節(jié)點,,依次類推。假設先定義一個3層的平面結構,,從表格中可以看到節(jié)點1,、2、3屬于總節(jié)點,,而節(jié)點11,、12屬于節(jié)點1的子節(jié)點;同理可以得出其他節(jié)點的從屬關系,而總節(jié)點是沒有父節(jié)點的,,其設定值為0,。如果需要設計多層的結構,只需將當前節(jié)點放在子節(jié)點一列,,所從屬的節(jié)點放在父節(jié)點一列即可,。
為了實現數據管理,在數據庫中添加了目錄號(實際應用中可以省略),,如目錄號101的意義是:前面1代表名稱(節(jié)點1),,01是節(jié)點1的第1個子節(jié)點,,102是節(jié)點1的第2個子節(jié)點,這樣節(jié)點1下面可以排99個子節(jié)點,,子節(jié)點的個數可以根據自己的要求定義,。
2.2 樹狀分層結構的實現
新建一個MFC[5]工程,在工程中創(chuàng)建一個對話框,;添加Tree Control控件,,控件屬性Styles中勾選Has buttons、Has lines,、lines at root,;通過ADO[6]連接圖3(a)所示的數據庫表,將數據信息添加到控件中,;根據節(jié)點在數據庫中的排列編寫相關的函數,,部分代碼如下:
tvInsert.item.pszText = _T("總節(jié)點"); //添加總節(jié)點
hParent = m_ctrlTree.InsertItem(&tvInsert);
TreeAddSubTree("總節(jié)點","1",hParent); //添加子節(jié)點
m_ctrlTree.Expand(hParent,TVE_EXPAND); //展開節(jié)點
樹狀結構的界面如圖3(b)所示。
3 故障節(jié)點管理和消息響應的實現
3.1 故障節(jié)點管理
故障節(jié)點管理即信息管理,。筆者已在Access數據庫中實現了樹狀分層結構,,每一個節(jié)點就是一條故障信息,實現故障信息的管理即是實現對節(jié)點的添加,、刪除,、修改等操作。
以Access數據庫表的每行數據(一個節(jié)點)為出發(fā)點,,對每行數據進行相關操作,。直接采用ODBC [7]對數據庫訪問,在VC對話框里面添加相關的控件;將數據庫的信息映射到List Control控件中,,編寫修改,、添加、刪除,、清空等函數,,其中圖片信息界面如圖4所示。通過目錄號來實現對信息的檢索,。
3.2 節(jié)點消息響應
節(jié)點的消息響應是通過節(jié)點提取故障信息,,采用路徑的方法來實現。在樹狀結構的基礎上,,通過VC6.0編譯器的對話框添加Picture組件,,Picture控件屬性中:General→Type→選擇Bitmap,Styles中勾選Center image,,在點擊 (OnClick)和改變選擇項(SelchangedTree)事件中編寫圖片信息顯示、圖片路徑調用等相關程序,。當點擊樹狀結構節(jié)點時,,程序訪問Access數據庫中路徑,,并將圖片信息顯示在Picture控件中。如圖5所示,,左邊為樹狀結構,,右邊為故障圖片信息。視頻信息顯示的方法與圖片信息的方法相同,只需將Picture控件用Media Player控件替換,。調用圖片信息部分程序代碼如下:
hwnd = GetDlgItem(IDC_BITMAP);
//指定對話框控件句柄
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
strFieldValue,IMAGE_BITMAP,0,0,LR_LOADFROM
FILE|LR_CREATEDIBSECTION); //顯示位圖
GetObject(hBitmap, sizeof BITMAP, &bm);
//得到指定圖像信息
SelectObject(hSrcDC, hBitmap); //復原位圖數據
hwnd->GetClientRect(&rect); //獲取窗口客戶坐標
::SetStretchBltMode(hDesDC,COLORONCOLOR);
//指定伸拉模式
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.
bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,
+SRCCOPY); //將位圖載入目標區(qū)域
SetTimer(IDT_TIMER,50,NULL);
3.3 系統(tǒng)管理
系統(tǒng)管理實現三個功能:用戶管理,、數據導入、數據備份,。
用戶管理包括超級用戶和普通用戶,。超級用戶具有添加、修改,、刪除普通用戶和操作某些系統(tǒng)功能的權限,。本文采用一種有效的方法,即將采集到的用戶名與數據庫中的user_name對比來實現,。通過建立兩張相同的Access數據庫表——超級用戶表和普通用戶表,,在程序內部定義一個字符串數組,編寫好字符比較函數[8],,當用戶登錄時,,用戶名被采集放在數組中,再將數組中的用戶名與Access數據庫表中的user_name比較,,如果采集的字符串與超級用戶表中的user_name相同,,則為超級用戶;否則為普通用戶,。數據導入,、導出即調用system("copy Database.mdb X:\\Database.mdb")函數。
4 結果與分析
為了驗證故障專家?guī)煜到y(tǒng)的可行性,,本文通過系統(tǒng)管理界面對樹狀結構的節(jié)點進行添加,、刪除、修改等調試;建立Access數據庫表,,存放文字,、圖片、視頻等故障信息,,并通過節(jié)點的消息響應對信息進行讀取,。系統(tǒng)在重新啟動后,節(jié)點信息沒有丟失,;單擊樹狀結構的節(jié)點,,顯示其相應的故障信息,進而實現數據的有效存儲,,以及節(jié)點的文本,、圖片,、視頻等故障信息的提取。經過測試,,該專家系統(tǒng)在Microsoft XP,、Win7系統(tǒng)下運行穩(wěn)定, 并可根據需要進行功能擴展,。人機交互界面如圖6所示,。
本文以Visual C++6.0為開發(fā)平臺,采用Access2003數據庫構建樹狀結構,,運用樹狀結構中的節(jié)點管理和消息提取,,并結合工業(yè)設備的故障現象、故障原因,、故障排除原理以及維修人員的經驗建立了具有文本,、圖片、 視頻數據的Access知識庫,,開發(fā)出故障維修專家?guī)煜到y(tǒng),。實際應用表明,該系統(tǒng)提高了設備維護人員的工作效率,、極大地降低了人力成本,為設備維護與故障排除提供了重要參考和指導,。
參考文獻
[1] 孫鑫,余安萍.VC++深入詳解[M]. 北京:電子工業(yè)出版社,,2006.
[2] 潛繼成. 樹狀結構數據管理[J].電腦編程技術與維護,2010(17):14-15,。
[3] 李俊民,高春燕. Access數據庫開發(fā)實例解析[M].北京:機械工業(yè)出版社,,2006.
[4] Xu Fengyuan.按數據庫記錄構建樹控[EB/OL]. (2002-12-01).http://www.vckbase.com/document/viewdoc/?id=466.
[5] 曾凡峰,,苗雨.MFC編程技巧與范例詳解[M].北京:清華大學出版社,2008.
[6] 劉銳寧,,宋坤. Visual C++ 程序設計標準教程[M].北京:人民郵電出版社,,2009.
[7] 任哲.MFC Windows 應用程序設計[M]. 北京:清華大學出版社,2004.
[8] 譚浩強.C++程序設計實踐指導[M]. 北京:清華大學出版社,,2005.