劉義順、江寶宇
(長安汽車動力研究院試驗試制所 401120)
系統分為2個子系統,分別為零部件照片存儲系統和零部件照片查詢系統。前者主要為試驗人員使用,后者主要為項目組研發人員使用,零部件照片信息流如圖1所示。

圖1 發動機零部件照片信息流
零部件照片存儲系統工作原理,主要是將發動機解體后,根據需要對發動機零部件位置進行拍照,然后將單個零部件多張照片存放在同一張幻燈片,再在存儲照片的幻燈片中編譯宏程序,運行宏程序后實現將單張幻燈片以唯一指定的命名方式保存為單張圖片,并將所有圖片存放在指定服務器文件夾中,這樣便可實現零部件照片的存儲功能[1]。
零部件照片查詢系統原理主要基于Excel VBA程序平臺,建立查詢系統。首先根據發動機的固有特征信息,查詢并調取存放在服務器文件夾中零部件單張圖片,然后將圖片以相應規則排列組合顯示在系統界面中,以便研發人員實現集中對多張零部件圖片信息的獲取。
發動機零部件圖片要滿足查詢需求,就必須使圖片文件名在文件夾中具有唯一性,這樣才能精準定位,不引起查詢沖突。圖片命名方式多種多樣,系統采用發動機號加零部件名稱方式,例如XXX-AAA-18-001-缸蓋(XXX為部門,AAA為發動機型號,18為年份,001為序號)。根據圖片命名定義要求,存儲系統將單張幻燈片存儲為圖片前,必須將發動機號和零部件名稱識別出來,組合后形成新的圖片文件名[2]。
本系統中采取如下方式:發動機號存放地址為試驗工程師編輯的零部件照片及幻燈片文件名前,例如XXX-AAA-18-001,AAA發動機交變負荷試驗報告,發動機號即為XXX-AAA-18-001;零部件名稱的存放地址為存放零部件的單張幻燈片任意位置,但字體必須指定格式,單張幻燈片中不能再使用相同的字體格式,以便程序識別,本系統中采取“華文仿宋”格式。程序部分代碼如下。
fname = ActivePresentation.Namen = InputBox("請輸入發動機號位數")
……
If shp.TextFrame.TextRange.Font.NameFarEast = "華文仿宋"Then
trng = shp.TextFrame.TextRange.Text
saveimagename = fname & "-" & trng & ".bmp"
saveimagepath = "10.30.25.252D:圖片數據庫"
slideobject.Export saveimagepath & saveimagename, "bmp",1600, 1200
……
Next slideobject
由于部門和發動機型號不一致,發動機號占據的字符數就不一致。本系統引入InputBox函數,使試驗人員首先輸入發動機號占據的字符數,以便程序準確提取發動機號。另外,slideobject.export函數可設置導出圖片的格式和分辨率,以保證零部件圖片的清晰度。存放程序流程圖如圖2所示。

圖2 發動機零部件照片存放程序流程圖
運行宏程序,發動機零部件解析照片就按照預定的方式保存至指定服務器文件夾中。
發動機號加零部件名稱作為圖片的識別碼,如果以此作為查詢條件,那么產品工程師根本不清楚該發動機對應的試驗信息。根據產品開發流程,系統預先建立一張Excel表存放樣機狀態,表中同一行添加1個試驗信息,包括項目名稱、樣機階段、試驗名稱、試驗輪次、零部件名稱和發動機號共6個子項。系統查詢時只要選擇前面5個子項,就可查詢出發動機號,再結合零部件名稱就可以實現需求零部件圖片的精準定位。5個可供選擇的子項均采用下拉列表的方式,可提示工程師按需操作。
試驗工程師在試驗完成后把6個子項添加進樣機狀態信息表,產品工程師在查詢選擇子項時,如果樣機狀態信息表中未進行該項目、階段、試驗或輪次,查詢時會進行相應提示。例如,試驗項目未開始小批量階段,選擇小批量階段后,系統會提示進行低一級選擇。
上述實現通過循環和判斷條件逐級進行,全部滿足后將樣機狀態信息表中對應的發動機號賦予預先定義的發動機號“enginenumber”變量中,同時將選擇的發動機零部件名稱賦予預先定義的發動機零部件名稱“enginecomponents”變量中。圖片調用部分代碼如下。
path = "10.30.25.252D:圖片數據庫"
name = enginenumber & "-" & enginecomponents
UserForm1.Controls("image" & z).Picture = LoadPicture(path& name & ".bmp")
其中path是變量存放圖片的存放地址,再使用將圖形載入到窗體的LoadPicture函數即可實現圖片調用。查詢程序流程圖如圖3所示。

圖3 發動機零部件照片查詢程序流程圖
為保證發動機零部件圖片的清晰度,系統界面最大支持同時顯示6張照片,通過添加和刪除按鈕實現圖片的添加和刪除。當刪除至照片沒有時,系統提示“已無圖片,無法進行刪除”;當添加超過6張時,系統提示“圖片已達屏幕最大顯示容量張數6”。
軟件中圖片通過image控件來實現,圖片的順序以image后加相應的數字來控制。圖片數量則通過建立一個全局整形變量“z”來實現,每點擊1次“添加”或“刪除”按鈕,變量“z”則加1或減1,且照片順序按照后進先出的方式進行刪除操作。最后程序根據圖片所需求的數量,按照預先定義的排列方式進行順序排列。
在排序前,首先對屏幕進行清屏操作,以便清空前面排列的圖片,為后面圖片的重排留下空白空間。同時,圖片的大小和位置也按照對應圖片數量要求設置進行配置,這樣便實現了零部件圖片界面按需顯示。
為適應不同分辨率大小顯示器的顯示需求,圖片的大小和位置必須隨著顯示器寬度和高度作相應的動態調整,否則會造成圖片顯示不全或圖片顯示過小的現象。圖片控件像素和分辨率的關系,像素寬為0.75倍寬分辨率,像素高為0.72倍高分辨率,利用API(Aplication Programming Interface)函數GetSystemMetrics來判斷當前顯示器的分辨率。部分程序代碼如下。
With Me
STARTUPPOSITION = 0
.Height = GetSystemMetrics(SM_CYSCREEN) * 0.72
.Width = GetSystemMetrics(SM_CXSCREEN) * 0.75
……
End With
為保證零部件圖片縮放一致性,進行圖片長和寬定義時,長寬比必須和零部件存放系統的圖片長寬比一致。同時,為保證圖片的清晰度,盡量先滿足相對最大的長或者寬,然后再進行圖片位置的調整。
結合Excel VBA應用程序和項目的特點,可在預先建立的Excel表中增加項目名稱、試驗輪次和零部件名稱。系統運行初始化時,預先讀寫存放的數據至系統對應子項下拉界面中,供使用者選擇。同時可在程序初始化時調出顯示彈出窗體和隱藏后臺Excel表格,這樣程序在運行后,直接彈出程序運行窗體。
本系統提出了發動機零部件照片的存取管理方法,同時基于VBA語言和PowerPoint程序實現了零部件圖片的存取。改善了原有零部件照片的使用方式,使查詢更加方便快捷,提升了研發效率,降低了研發成本。系統通過實踐檢驗,穩定可行,缺點主要為照片存儲需要占據服務器大量的存儲空間。所使用的零部件照片管理方法和圖片存取程序構建思路具有一定可移植性,值得推薦應用。