賴禹能,周平,吳靜奇
博世華域轉(zhuǎn)向系統(tǒng)有限公司,上海 201821)
近幾年隨著汽車項(xiàng)目與產(chǎn)品的增加,轉(zhuǎn)向系統(tǒng)產(chǎn)品開(kāi)發(fā)過(guò)程中的試驗(yàn)報(bào)告也成倍增加。由于轉(zhuǎn)向系統(tǒng)各個(gè)項(xiàng)目規(guī)范要求差異較大,撰寫(xiě)報(bào)告時(shí)需要根據(jù)不同規(guī)范統(tǒng)計(jì)數(shù)據(jù)并出具不同的試驗(yàn)報(bào)告,人工方式整理數(shù)據(jù)以及撰寫(xiě)報(bào)告消耗了大量時(shí)間,數(shù)據(jù)處理與報(bào)告整理錯(cuò)誤率較高。轉(zhuǎn)向系統(tǒng)試驗(yàn)報(bào)告主要涉及EPSc管柱、機(jī)械管柱以及中間軸產(chǎn)品,所涉及的試驗(yàn)報(bào)告按照試驗(yàn)階段涉及轉(zhuǎn)向系統(tǒng)送樣、DV、PV試驗(yàn)以及型式試驗(yàn)。將工程師從眾多繁瑣的數(shù)據(jù)整理與報(bào)告撰寫(xiě)事物中解脫出來(lái),轉(zhuǎn)向系統(tǒng)試驗(yàn)報(bào)告自動(dòng)化具有重大實(shí)用價(jià)值。
轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件能夠在主流配置的計(jì)算機(jī)上運(yùn)行,要求已安裝6.5版本以上MATLAB軟件,或者已安裝7.13版本的程序運(yùn)行環(huán)境MATLAB Compiler Runner。使用MATLAB Compiler Runner作為運(yùn)行環(huán)境時(shí),該軟件根據(jù)計(jì)算機(jī)操作系統(tǒng)不同分為32位與64位兩種,應(yīng)根據(jù)實(shí)際情況下載安裝并使用對(duì)應(yīng)版本的轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件。采用MATLAB的調(diào)用Word Com組件能力[1-4],軟件自動(dòng)讀取處理數(shù)據(jù)后,輸出到Word文檔中,自動(dòng)完成文字鍵入、數(shù)據(jù)表格填充以及數(shù)據(jù)圖片粘貼。
轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件是Windows XP/Vista/Win7環(huán)境下的軟件程序,用以解碼、處理和評(píng)估實(shí)驗(yàn)室測(cè)試系統(tǒng)下載的測(cè)試數(shù)據(jù)文件(*.wwt),并自動(dòng)生成基于不同產(chǎn)品規(guī)范的試驗(yàn)報(bào)告。試驗(yàn)數(shù)據(jù)范圍覆蓋功能試驗(yàn)、強(qiáng)度試驗(yàn)、疲勞試驗(yàn)。用戶可以使用該軟件設(shè)計(jì)不同產(chǎn)品規(guī)范的軟件計(jì)算策略,用于自動(dòng)判斷測(cè)試數(shù)據(jù)是否滿足規(guī)范要求;加載測(cè)試數(shù)據(jù)路徑、測(cè)試規(guī)范、報(bào)告信息庫(kù)后,該軟件可以自動(dòng)加載處理數(shù)據(jù),一鍵生成用戶自定義格式的Word試驗(yàn)報(bào)告,判斷數(shù)據(jù)是否合格,批量顯示數(shù)據(jù)曲線??稍谌藱C(jī)交互界面中自由設(shè)置、保存以及加載不同產(chǎn)品規(guī)范,根據(jù)自定義的產(chǎn)品規(guī)范生成對(duì)應(yīng)的數(shù)據(jù)表格;報(bào)告形式可選擇數(shù)據(jù)匯總報(bào)告或者標(biāo)準(zhǔn)報(bào)告;不同樣件的數(shù)據(jù)曲線可選擇疊加顯示或者分開(kāi)顯示[5]。圖1為MATLAB GUI 自動(dòng)生成報(bào)告過(guò)程。
圖1 MATLAB GUI 自動(dòng)生成報(bào)告過(guò)程
數(shù)據(jù)處理步驟包括:選擇1級(jí)文件夾,讀取該文件夾下包含的所有2級(jí)子文件夾,然后分別讀取各子文件夾下的所有數(shù)據(jù)。關(guān)鍵的幾個(gè)程序命令如下:
findpath = uigetdir(); %打開(kāi)文件夾選擇對(duì)話框
files = dir(findpath); %獲得指定文件夾下的所有子文件夾和文件
if files(i).isdir==1%判斷是否有文件夾
samplelen=samplelen+1;
end%統(tǒng)計(jì)文件夾數(shù)量
name100=strfind(files(i,1).name,′100%′);%統(tǒng)計(jì)包含100%的文件夾
rangeinfor{1}=get(handles.edit51,′String′); %獲取面板中最大助力設(shè)置值
filepath=[findpath,′′,Sample(1:(namecount0(i)-1))];%文件夾路徑
files = crawler(filepath, [′.*orsion.*tiffn.*.wwt′], 1); %讀取符合關(guān)鍵字要求的文件
FILE=fopen(filename,′r′,′l′,′latin1′);%打開(kāi)wwt格式文件
HEADER.COMMENT1 = (fread(FILE,length_comment,′*char′))′;%讀取wwt格式文件數(shù)據(jù)
數(shù)據(jù)讀取出來(lái)后,需要根據(jù)試驗(yàn)規(guī)范計(jì)算出統(tǒng)計(jì)值,并將所有數(shù)據(jù)點(diǎn)繪制成曲線圖。
cmpmax=Pfinder(Angle_M,P_end,0.01); % 讀取某個(gè)數(shù)據(jù)點(diǎn)的數(shù)據(jù)排列序號(hào)
p1 = figure(Pcn); %打開(kāi)顯示圖框
plot(Lenkwinkel, Dss,′color′,c{linenum},′LineWidth′,linesize)%顯示數(shù)據(jù)點(diǎn)曲線圖
MATLAB首先需要判斷Word服務(wù)器是否已經(jīng)打開(kāi),如果打開(kāi)了服務(wù)器,再判斷是否有空文檔已經(jīng)打開(kāi)。通常服務(wù)器打開(kāi),一般有空文檔打開(kāi),若沒(méi)有打開(kāi),MATLAB將會(huì)新建一個(gè)空文檔用于輸出報(bào)告。參考以下命令:
Try
%若Word服務(wù)器打開(kāi),返回其句柄Word
Word = actxGetRunningServer(′Word.Application′);
Catch %否則,創(chuàng)建一個(gè)Microsoft Word服務(wù)器,返回句柄Word
Word =actxserver(′Word.Application′);
end;
Word.Visible = 1; %若測(cè)試文件存在,打開(kāi)該測(cè)試文件,否則,新建一個(gè)文件,并保存,文件名為測(cè)試.doc
if exist(filespec_user,′file′);
Document = Word.Documents.Open(filespec_user);
else
Document = Word.Documents.Add;
Document.SaveAs2(filespec_user);%用于word文檔的輸出
end
空文檔新建好后,需要設(shè)定頁(yè)面大小,以下命令用于設(shè)定頁(yè)面大小:
Document.PageSetup.TopMargin = -133; % 設(shè)置上邊緣位置
Document.PageSetup.BottomMargin = 40.7;
Document.PageSetup.LeftMargin = 63.4;
Document.PageSetup.RightMargin = 28.3;
標(biāo)準(zhǔn)報(bào)告需要生成首頁(yè)信息欄,如圖2所示,包括了試驗(yàn)名稱、項(xiàng)目名稱、零件號(hào)碼、產(chǎn)品狀態(tài)、客戶信息、工程師名、測(cè)試規(guī)范、接受標(biāo)準(zhǔn)、樣件號(hào)碼、簽名欄、試驗(yàn)時(shí)間與試驗(yàn)結(jié)果等信息,這些信息中一部分來(lái)自預(yù)先保存好的Project Information的Excel表格中,其他信息直接來(lái)自于試驗(yàn)數(shù)據(jù)的判斷,比如試驗(yàn)時(shí)間、樣件號(hào)碼與試驗(yàn)結(jié)果。設(shè)置表格以及填充基本信息如下:
Specpath=[findpath,′Project
information.xlsx′];%路徑名稱
[~, ~, Spec] = xlsread(Specpath,
′Specification′); %讀取預(yù)先保存好的Excel表格中的規(guī)范
DTI.Borders.OutsideLineStyle = ′wdLineStyleSingle′; %設(shè)置外邊框的線型
DTI.Borders.OutsideLineWidth = ′wdLineWidth075pt′; %設(shè)置線寬
DTI.Borders.InsideLineStyle = ′wdLineStyleSingle′; %設(shè)置內(nèi)邊框的線型
DTI.Rows.Alignment = ′wdAlignRowLeft′; % 設(shè)置行對(duì)齊方式
DTI.Columns.Item(1).Width = 140;
DTI.Columns.Item(2).Width = 350;
%設(shè)置單列寬度
DTI.Cell(2,2).Range.Text =cell2mat(Information(9,2)); %表格中填充基本信息
handle = Document.Shapes.AddPicture(which(′sign.tif′), [], [], 10, 0, 455, 92); %添加簽字欄圖片
Selection.Start = Content.end; %定義開(kāi)始的位置
標(biāo)準(zhǔn)報(bào)告的頁(yè)眉中中需要添加公司名稱、標(biāo)識(shí)與報(bào)告號(hào),設(shè)置如下:
Document.ActiveWindow.ActivePane.View.SeekView=′wdSeek
CurrentPageHeader′; % 光標(biāo)進(jìn)入頁(yè)眉區(qū)域準(zhǔn)備編輯
Selection.Range.Paragraphs.Alignment=′wdAlignParagraphLeft′; %光標(biāo)往左靠齊
try handle=Selection.InlineShapes.AddPicture(which(′BoschHUAYU.tif′)); %添加公司名稱圖片
handle=Selection.InlineShapes.AddPicture(which(′Bosch.tif′)); %添加公司標(biāo)識(shí)圖片
end
Selection.Text=′TRP-VR-S001-V1.1′; %添加文字描述
Selection.Font.Size=12; %設(shè)置文字大小
Document.ActiveWindow.ActivePane.View.SeekView=′wdSeek
CurrentPageFooter′; % 光標(biāo)進(jìn)入頁(yè)腳設(shè)置區(qū)域
Document.ActiveWindow.ActivePane.View.SeekView=′wdSeek
MainDocument′; % 光標(biāo)退出頁(yè)腳區(qū)域,進(jìn)入主文檔
圖2 Word標(biāo)準(zhǔn)報(bào)告首頁(yè)
生成數(shù)據(jù)表格需要包括樣件號(hào)、接受標(biāo)準(zhǔn)、數(shù)據(jù)值,并且具有判斷數(shù)據(jù)超差提示功能。生成數(shù)據(jù)表格主要用到的命令如下:
Tables= Document.Tables.Add(Selection.Range,Sn1+2,NumC);%生成需要的表格
DTI.Cell(i,j).Range.Text=word_data{i,j,10};%填充數(shù)據(jù)值
DTI.Cell(i,j).Range.Font.ColorIndex =6; %設(shè)置數(shù)據(jù)字體顏色
DTI.Cell(i,j).Shading.BackgroundPatternColorindex=7;%設(shè)置表格背景顏色
示例見(jiàn)圖3,數(shù)據(jù)首列根據(jù)接受標(biāo)準(zhǔn)判斷,數(shù)據(jù)超差則采用黃色背景紅色字體提示。
圖3 報(bào)告數(shù)據(jù)表格
數(shù)據(jù)圖片批量生成后,將圖片粘貼至Word文檔中,命令如下:
hgexport(zfd(i,j), ′-clipboard′); %復(fù)制圖片句柄
Selection.Paste;%粘貼圖片
Selection.EndKey;%光標(biāo)移至尾部
close(figure(i));%粘貼完后關(guān)閉圖片
首先啟動(dòng)MATLAB GUI轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件.exe,見(jiàn)圖4,生成正式報(bào)告需要在文本框中輸入報(bào)告基本信息,生成數(shù)據(jù)匯總報(bào)告可以直接選擇EPSc&i-shaft、機(jī)械管柱、疲勞、強(qiáng)度按鍵。保存報(bào)告基本信息點(diǎn)擊保存按鍵選擇數(shù)據(jù)文件保存路徑。如果之前已經(jīng)定義好了報(bào)告基本信息,可以點(diǎn)擊加載按鍵選擇數(shù)據(jù)文件加載路徑。
在程序主界面點(diǎn)擊EPSc&i-shaft按鍵,進(jìn)入EPSc&i-shaft報(bào)告自動(dòng)化界面,如圖5所示。黃色單選按鈕ON:sub;Off:QS,軟件默認(rèn)生成QS數(shù)據(jù)匯總報(bào)告,點(diǎn)擊則生成Sub標(biāo)準(zhǔn)報(bào)告。規(guī)范設(shè)置內(nèi)容包括了EPSc與I-shaft,分別涉及基本功能數(shù)據(jù)的接受標(biāo)準(zhǔn)與取值范圍。軟件默認(rèn)設(shè)置了一些基本規(guī)范,可以快速用于產(chǎn)品數(shù)據(jù)的判斷匯總。使用者可以根據(jù)項(xiàng)目規(guī)范自定義接受標(biāo)準(zhǔn),點(diǎn)擊規(guī)范保存按鍵保存;點(diǎn)擊規(guī)范加載按鍵加載已經(jīng)保存過(guò)的規(guī)范。規(guī)范設(shè)置空格可以識(shí)別數(shù)字,以及字母NA(不統(tǒng)計(jì)該項(xiàng))與FYI(該項(xiàng)僅供參考)。生成EPSc報(bào)告,點(diǎn)擊選擇EPSc單選按鍵(軟件默認(rèn));生成I-shaft報(bào)告,點(diǎn)擊選擇I-shaft單選按鍵。
圖4 轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件界面
圖5 EPSc&i-shaft報(bào)告自動(dòng)化界面
I-shaft TTR下Range文本框中可以自定義扭矩讀取角度范圍;I-shaft 扭轉(zhuǎn)間隙下filter文本框中可以自定義扭轉(zhuǎn)間隙wwt數(shù)據(jù)的讀取關(guān)鍵詞,默認(rèn)讀取lash。以下以生成I-shaft QS數(shù)據(jù)匯總報(bào)告為例。點(diǎn)擊選擇I-shaft單選按鍵,生成I-shaft報(bào)告。點(diǎn)擊分開(kāi)顯示單選按鍵,可以設(shè)置數(shù)據(jù)曲線單獨(dú)顯示,默認(rèn)設(shè)置數(shù)據(jù)曲線疊加顯示。點(diǎn)擊數(shù)據(jù)加載按鍵選擇數(shù)據(jù)加載路徑,選擇文件夾i-shaft test,其中包括了6個(gè)子文件夾,子文件夾通過(guò)有無(wú)50%與100%關(guān)鍵詞命名可以識(shí)別不同疲勞階段復(fù)測(cè)的功能數(shù)據(jù),即0%、50%與100%三個(gè)階段。每個(gè)子文件夾下保存了wwt格式的中間軸功能數(shù)據(jù)。點(diǎn)擊開(kāi)始按鍵,開(kāi)始生成QS數(shù)據(jù)匯總報(bào)告,分別包括了0%與100%的功能數(shù)據(jù)表格。
點(diǎn)擊轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件界面的機(jī)械管柱按鍵,打開(kāi)機(jī)械管柱報(bào)告自動(dòng)化界面,如圖6所示;點(diǎn)擊疲勞按鍵,打開(kāi)疲勞報(bào)告自動(dòng)化界面,如圖7所示;點(diǎn)擊強(qiáng)度按鍵,打開(kāi)強(qiáng)度報(bào)告自動(dòng)化界面,如圖8所示。
圖6 機(jī)械管柱報(bào)告自動(dòng)化界面
圖7 疲勞報(bào)告自動(dòng)化界面
本文作者采用MATLAB GUI開(kāi)發(fā)的轉(zhuǎn)向系統(tǒng)報(bào)告自動(dòng)化軟件,解決了根據(jù)不同試驗(yàn)規(guī)范設(shè)置數(shù)據(jù)讀取要求、批量處理與判斷試驗(yàn)數(shù)據(jù)是否滿足產(chǎn)品規(guī)范以及自動(dòng)生成各種類型報(bào)告的問(wèn)題,大大提高了試驗(yàn)報(bào)告出具效率以及數(shù)據(jù)處理準(zhǔn)確性。