劉義順、江寶宇
(長(zhǎng)安汽車動(dòng)力研究院試驗(yàn)試制所 401120)
系統(tǒng)分為2個(gè)子系統(tǒng),分別為零部件照片存儲(chǔ)系統(tǒng)和零部件照片查詢系統(tǒng)。前者主要為試驗(yàn)人員使用,后者主要為項(xiàng)目組研發(fā)人員使用,零部件照片信息流如圖1所示。
圖1 發(fā)動(dòng)機(jī)零部件照片信息流
零部件照片存儲(chǔ)系統(tǒng)工作原理,主要是將發(fā)動(dòng)機(jī)解體后,根據(jù)需要對(duì)發(fā)動(dòng)機(jī)零部件位置進(jìn)行拍照,然后將單個(gè)零部件多張照片存放在同一張幻燈片,再在存儲(chǔ)照片的幻燈片中編譯宏程序,運(yùn)行宏程序后實(shí)現(xiàn)將單張幻燈片以唯一指定的命名方式保存為單張圖片,并將所有圖片存放在指定服務(wù)器文件夾中,這樣便可實(shí)現(xiàn)零部件照片的存儲(chǔ)功能[1]。
零部件照片查詢系統(tǒng)原理主要基于Excel VBA程序平臺(tái),建立查詢系統(tǒng)。首先根據(jù)發(fā)動(dòng)機(jī)的固有特征信息,查詢并調(diào)取存放在服務(wù)器文件夾中零部件單張圖片,然后將圖片以相應(yīng)規(guī)則排列組合顯示在系統(tǒng)界面中,以便研發(fā)人員實(shí)現(xiàn)集中對(duì)多張零部件圖片信息的獲取。
發(fā)動(dòng)機(jī)零部件圖片要滿足查詢需求,就必須使圖片文件名在文件夾中具有唯一性,這樣才能精準(zhǔn)定位,不引起查詢沖突。圖片命名方式多種多樣,系統(tǒng)采用發(fā)動(dòng)機(jī)號(hào)加零部件名稱方式,例如XXX-AAA-18-001-缸蓋(XXX為部門,AAA為發(fā)動(dòng)機(jī)型號(hào),18為年份,001為序號(hào))。根據(jù)圖片命名定義要求,存儲(chǔ)系統(tǒng)將單張幻燈片存儲(chǔ)為圖片前,必須將發(fā)動(dòng)機(jī)號(hào)和零部件名稱識(shí)別出來(lái),組合后形成新的圖片文件名[2]。
本系統(tǒng)中采取如下方式:發(fā)動(dòng)機(jī)號(hào)存放地址為試驗(yàn)工程師編輯的零部件照片及幻燈片文件名前,例如XXX-AAA-18-001,AAA發(fā)動(dòng)機(jī)交變負(fù)荷試驗(yàn)報(bào)告,發(fā)動(dòng)機(jī)號(hào)即為XXX-AAA-18-001;零部件名稱的存放地址為存放零部件的單張幻燈片任意位置,但字體必須指定格式,單張幻燈片中不能再使用相同的字體格式,以便程序識(shí)別,本系統(tǒng)中采取“華文仿宋”格式。程序部分代碼如下。
fname = ActivePresentation.Namen = InputBox("請(qǐng)輸入發(fā)動(dòng)機(jī)號(hào)位數(shù)")
……
If shp.TextFrame.TextRange.Font.NameFarEast = "華文仿宋"Then
trng = shp.TextFrame.TextRange.Text
saveimagename = fname & "-" & trng & ".bmp"
saveimagepath = "10.30.25.252D:圖片數(shù)據(jù)庫(kù)"
slideobject.Export saveimagepath & saveimagename, "bmp",1600, 1200
……
Next slideobject
由于部門和發(fā)動(dòng)機(jī)型號(hào)不一致,發(fā)動(dòng)機(jī)號(hào)占據(jù)的字符數(shù)就不一致。本系統(tǒng)引入InputBox函數(shù),使試驗(yàn)人員首先輸入發(fā)動(dòng)機(jī)號(hào)占據(jù)的字符數(shù),以便程序準(zhǔn)確提取發(fā)動(dòng)機(jī)號(hào)。另外,slideobject.export函數(shù)可設(shè)置導(dǎo)出圖片的格式和分辨率,以保證零部件圖片的清晰度。存放程序流程圖如圖2所示。
圖2 發(fā)動(dòng)機(jī)零部件照片存放程序流程圖
運(yùn)行宏程序,發(fā)動(dòng)機(jī)零部件解析照片就按照預(yù)定的方式保存至指定服務(wù)器文件夾中。
發(fā)動(dòng)機(jī)號(hào)加零部件名稱作為圖片的識(shí)別碼,如果以此作為查詢條件,那么產(chǎn)品工程師根本不清楚該發(fā)動(dòng)機(jī)對(duì)應(yīng)的試驗(yàn)信息。根據(jù)產(chǎn)品開發(fā)流程,系統(tǒng)預(yù)先建立一張Excel表存放樣機(jī)狀態(tài),表中同一行添加1個(gè)試驗(yàn)信息,包括項(xiàng)目名稱、樣機(jī)階段、試驗(yàn)名稱、試驗(yàn)輪次、零部件名稱和發(fā)動(dòng)機(jī)號(hào)共6個(gè)子項(xiàng)。系統(tǒng)查詢時(shí)只要選擇前面5個(gè)子項(xiàng),就可查詢出發(fā)動(dòng)機(jī)號(hào),再結(jié)合零部件名稱就可以實(shí)現(xiàn)需求零部件圖片的精準(zhǔn)定位。5個(gè)可供選擇的子項(xiàng)均采用下拉列表的方式,可提示工程師按需操作。
試驗(yàn)工程師在試驗(yàn)完成后把6個(gè)子項(xiàng)添加進(jìn)樣機(jī)狀態(tài)信息表,產(chǎn)品工程師在查詢選擇子項(xiàng)時(shí),如果樣機(jī)狀態(tài)信息表中未進(jìn)行該項(xiàng)目、階段、試驗(yàn)或輪次,查詢時(shí)會(huì)進(jìn)行相應(yīng)提示。例如,試驗(yàn)項(xiàng)目未開始小批量階段,選擇小批量階段后,系統(tǒng)會(huì)提示進(jìn)行低一級(jí)選擇。
上述實(shí)現(xiàn)通過(guò)循環(huán)和判斷條件逐級(jí)進(jìn)行,全部滿足后將樣機(jī)狀態(tài)信息表中對(duì)應(yīng)的發(fā)動(dòng)機(jī)號(hào)賦予預(yù)先定義的發(fā)動(dòng)機(jī)號(hào)“enginenumber”變量中,同時(shí)將選擇的發(fā)動(dòng)機(jī)零部件名稱賦予預(yù)先定義的發(fā)動(dòng)機(jī)零部件名稱“enginecomponents”變量中。圖片調(diào)用部分代碼如下。
path = "10.30.25.252D:圖片數(shù)據(jù)庫(kù)"
name = enginenumber & "-" & enginecomponents
UserForm1.Controls("image" & z).Picture = LoadPicture(path& name & ".bmp")
其中path是變量存放圖片的存放地址,再使用將圖形載入到窗體的LoadPicture函數(shù)即可實(shí)現(xiàn)圖片調(diào)用。查詢程序流程圖如圖3所示。
圖3 發(fā)動(dòng)機(jī)零部件照片查詢程序流程圖
為保證發(fā)動(dòng)機(jī)零部件圖片的清晰度,系統(tǒng)界面最大支持同時(shí)顯示6張照片,通過(guò)添加和刪除按鈕實(shí)現(xiàn)圖片的添加和刪除。當(dāng)刪除至照片沒有時(shí),系統(tǒng)提示“已無(wú)圖片,無(wú)法進(jìn)行刪除”;當(dāng)添加超過(guò)6張時(shí),系統(tǒng)提示“圖片已達(dá)屏幕最大顯示容量張數(shù)6”。
軟件中圖片通過(guò)image控件來(lái)實(shí)現(xiàn),圖片的順序以image后加相應(yīng)的數(shù)字來(lái)控制。圖片數(shù)量則通過(guò)建立一個(gè)全局整形變量“z”來(lái)實(shí)現(xiàn),每點(diǎn)擊1次“添加”或“刪除”按鈕,變量“z”則加1或減1,且照片順序按照后進(jìn)先出的方式進(jìn)行刪除操作。最后程序根據(jù)圖片所需求的數(shù)量,按照預(yù)先定義的排列方式進(jìn)行順序排列。
在排序前,首先對(duì)屏幕進(jìn)行清屏操作,以便清空前面排列的圖片,為后面圖片的重排留下空白空間。同時(shí),圖片的大小和位置也按照對(duì)應(yīng)圖片數(shù)量要求設(shè)置進(jìn)行配置,這樣便實(shí)現(xiàn)了零部件圖片界面按需顯示。
為適應(yīng)不同分辨率大小顯示器的顯示需求,圖片的大小和位置必須隨著顯示器寬度和高度作相應(yīng)的動(dòng)態(tài)調(diào)整,否則會(huì)造成圖片顯示不全或圖片顯示過(guò)小的現(xiàn)象。圖片控件像素和分辨率的關(guān)系,像素寬為0.75倍寬分辨率,像素高為0.72倍高分辨率,利用API(Aplication Programming Interface)函數(shù)GetSystemMetrics來(lái)判斷當(dāng)前顯示器的分辨率。部分程序代碼如下。
With Me
STARTUPPOSITION = 0
.Height = GetSystemMetrics(SM_CYSCREEN) * 0.72
.Width = GetSystemMetrics(SM_CXSCREEN) * 0.75
……
End With
為保證零部件圖片縮放一致性,進(jìn)行圖片長(zhǎng)和寬定義時(shí),長(zhǎng)寬比必須和零部件存放系統(tǒng)的圖片長(zhǎng)寬比一致。同時(shí),為保證圖片的清晰度,盡量先滿足相對(duì)最大的長(zhǎng)或者寬,然后再進(jìn)行圖片位置的調(diào)整。
結(jié)合Excel VBA應(yīng)用程序和項(xiàng)目的特點(diǎn),可在預(yù)先建立的Excel表中增加項(xiàng)目名稱、試驗(yàn)輪次和零部件名稱。系統(tǒng)運(yùn)行初始化時(shí),預(yù)先讀寫存放的數(shù)據(jù)至系統(tǒng)對(duì)應(yīng)子項(xiàng)下拉界面中,供使用者選擇。同時(shí)可在程序初始化時(shí)調(diào)出顯示彈出窗體和隱藏后臺(tái)Excel表格,這樣程序在運(yùn)行后,直接彈出程序運(yùn)行窗體。
本系統(tǒng)提出了發(fā)動(dòng)機(jī)零部件照片的存取管理方法,同時(shí)基于VBA語(yǔ)言和PowerPoint程序?qū)崿F(xiàn)了零部件圖片的存取。改善了原有零部件照片的使用方式,使查詢更加方便快捷,提升了研發(fā)效率,降低了研發(fā)成本。系統(tǒng)通過(guò)實(shí)踐檢驗(yàn),穩(wěn)定可行,缺點(diǎn)主要為照片存儲(chǔ)需要占據(jù)服務(wù)器大量的存儲(chǔ)空間。所使用的零部件照片管理方法和圖片存取程序構(gòu)建思路具有一定可移植性,值得推薦應(yīng)用。