邢 雨
(中國(guó)鐵路設(shè)計(jì)集團(tuán)有限公司橋梁院,天津 300142)
橋梁設(shè)計(jì)計(jì)算書,又稱橋梁設(shè)計(jì)算單,是橋梁設(shè)計(jì)過程的書面體現(xiàn),算單內(nèi)容應(yīng)完整、清楚,格式標(biāo)準(zhǔn),條理分明,引用數(shù)據(jù)有可靠依據(jù),計(jì)算結(jié)果應(yīng)與圖紙一致。目前鐵路橋梁算單的制作多采用手工填寫編輯的方法,存在格式不統(tǒng)一、編輯效率低、重復(fù)性勞動(dòng)多、易出錯(cuò)等缺點(diǎn),因此有必要編制一款軟件,便于工程設(shè)計(jì)人員快速制作格式標(biāo)準(zhǔn)、內(nèi)容完備的算單。
MATLAB是作為一種計(jì)算和處理數(shù)據(jù)的軟件,具備強(qiáng)大的數(shù)學(xué)計(jì)算功能、作圖功能,以及豐富的實(shí)用工具箱等優(yōu)點(diǎn)[1]。MATLAB GUI作為一種新型的圖形用戶界面(Graphical User Interface,圖形用戶接口,簡(jiǎn)稱GUI)開發(fā)設(shè)計(jì)平臺(tái),面向?qū)ο箝_發(fā),可實(shí)現(xiàn)對(duì)控件的靜態(tài)設(shè)計(jì)和程序編寫,極大地簡(jiǎn)化了程序設(shè)計(jì)的過程[2]。
MATLAB支持COM(Component Object Model)技術(shù),可以利用ActiveX控件調(diào)用Word、Excel等Microsoft Office應(yīng)用程序自動(dòng)生成符合要求的標(biāo)準(zhǔn)算單。本文以使用MATALAB開發(fā)的“鐵路連續(xù)梁計(jì)算書模板程序”為基礎(chǔ),總結(jié)了一些軟件設(shè)計(jì)過程中的思路和經(jīng)驗(yàn)[3]。
為便于程序開發(fā)并保證程序功能的實(shí)用性,首先要明確程序的設(shè)計(jì)目標(biāo)。本程序在設(shè)計(jì)和開發(fā)過程中力求達(dá)到以下目標(biāo):模塊化,內(nèi)容齊全,功能豐富,易于操作(圖1)。
圖1 設(shè)計(jì)目標(biāo)
模塊化編程,是用主程序、子程序、子過程等框架把軟件的主要結(jié)構(gòu)和流程描述出來,并定義和調(diào)試好各個(gè)框架之間的輸入、輸出鏈接關(guān)系。模塊化編程具有相互獨(dú)立性、互換性、通用性等特點(diǎn),各模塊間功能獨(dú)立,結(jié)構(gòu)清晰。采用模塊化編程有利于降低程序復(fù)雜度,使程序設(shè)計(jì)、調(diào)試、維護(hù)升級(jí)等操作簡(jiǎn)單化。
本程序在設(shè)計(jì)過程中從兩方面執(zhí)行模塊化編程的原則:(1)頂層設(shè)計(jì),預(yù)先構(gòu)思主程序中應(yīng)包含的子程序,并逐步編程實(shí)現(xiàn);(2)歸納整理,對(duì)零散的程序語句進(jìn)行封裝。
為保證程序的適用范圍更加廣泛,以用于不同形式、不同施工方法、不同計(jì)算方法的多種連續(xù)梁算單生成,開發(fā)人員在編制程序前應(yīng)事先通過大量資料搜集和調(diào)研工作,盡可能地豐富各參數(shù)的選項(xiàng),以保證程序的內(nèi)容齊全。
程序除了能夠?qū)⑦B續(xù)梁算單不同章節(jié)快速、準(zhǔn)確地生成并組合外,還應(yīng)能夠多文檔進(jìn)行多種形式的編輯,如對(duì)字體、段落、標(biāo)題、圖片、表格等進(jìn)行處理,并能自動(dòng)生成目錄、頁眉頁腳等。
程序應(yīng)符合用戶使用習(xí)慣,減少不必要的操作,增加實(shí)用功能。軟件初始界面應(yīng)提供默認(rèn)輸入內(nèi)容、選項(xiàng)或路徑;在前后內(nèi)容相關(guān)聯(lián)的地方,應(yīng)保證對(duì)應(yīng)(附圖)等。
使用本程序最終生成的算單是Word文檔,而連續(xù)梁計(jì)算的結(jié)果許多是以Excel文檔的形式進(jìn)行記錄的,因此需要利用MATLAB對(duì)Word、Excel進(jìn)行編輯,實(shí)現(xiàn)創(chuàng)建或打開Word/Excel服務(wù)器、新建空白文檔、頁面設(shè)置、寫入文字內(nèi)容、插入圖片、圖片編輯等功能。
2.1.1創(chuàng)建或打開Word服務(wù)器
MATLAB中提供了actxserver函數(shù)用來創(chuàng)建COM自動(dòng)化服務(wù)器,可通過該函數(shù)創(chuàng)建或打開Microsoft Word服務(wù)器[4]。相關(guān)命令如下:
try
Word = actxGetRunningServer('Word.Application');
catch
Word = actxserver('Word.Application');
end。
2.1.2新建空白文檔
可通過Word服務(wù)器的Documents接口建立空白文檔。相關(guān)命令如下:
Document = Word.Documents.Add;
Document.SaveAs(filespec_user)。
2.1.3頁面設(shè)置
Document接口下有一個(gè)PageSetup接口,通過對(duì)其屬性修改,可進(jìn)行頁面設(shè)置。相關(guān)命令如下:
Document.PageSetup.TopMargin = 60;%上邊距60磅
Document.PageSetup.BottomMargin = 45;%下邊距45磅
Document.PageSetup.LeftMargin = 45;%左邊距45磅
Document.PageSetup.RightMargin = 45;%右邊距45磅
2.1.4寫入文字內(nèi)容
可通過Word服務(wù)器的Selection接口,Document接口的Content、Paragarphs接口寫入文字內(nèi)容。
Content接口的Start屬性用來獲取設(shè)定文字內(nèi)容的起始位置,End屬性用來獲取或設(shè)定文字內(nèi)容的終止位置,Text屬性用來寫入文字內(nèi)容,F(xiàn)ont屬性用于字體設(shè)置,Paragraphs屬性用于段落設(shè)置。
利用Word服務(wù)器的Selection接口可以在文檔中選定一個(gè)區(qū)域,并對(duì)所選區(qū)域進(jìn)行相關(guān)操作。其Start屬性用來設(shè)定光標(biāo)的位置,TypeParagraph是Selection接口的一個(gè)方法,相當(dāng)于回車鍵,Text屬性用來寫入文字內(nèi)容,F(xiàn)ont屬性用于字體設(shè)置,Paragraphs屬性用于段落設(shè)置。
相關(guān)命令如下:
Content.Start = 0;%設(shè)置文檔內(nèi)容的起始位置
title = '第一章';
Content.Text = title; % 輸入文字內(nèi)容
Content.Font.Size = 16 ; % 設(shè)置字號(hào)為16
Content.Font.Bold = 4 ;%字體加粗
Content.Paragraphs.Alignment = 'wdAlignParagraphCenter'; %居中對(duì)齊
Selection.Start = Content.end;%設(shè)定下面內(nèi)容的起始位置
Selection.TypeParagraph;%回車,另起一段
yiju= '設(shè)計(jì)依據(jù)';
Selection.Text = yiju; %在當(dāng)前位置輸入文字內(nèi)容
Selection.Font.Size = 12; %設(shè)置字號(hào)為12
Selection.Font.Bold = 0;%字體不加粗
Selection.MoveDown; %光標(biāo)下移(取消選中)
paragraphformat.Alignment = 'wdAlignParagraphCenter';
%居中對(duì)齊
2.1.5插入圖片
利用InlineShapes接口或Shapes接口的AddPicture方法,可以在Word文檔中插入外部圖片。調(diào)用格式如下:
handles=Document.InlineShapes.AddPicture('外部圖片所在路徑')
handles=Document.Shapes.AddPicture('外部圖片所在路徑')
2.1.6設(shè)置圖片格式
對(duì)于Shapes接口插入的圖片可以設(shè)置其文字環(huán)繞方向等版式,調(diào)用格式如下:
Document.Shapes.Item(i).WrapFormat.Type = 3;
而對(duì)于InlineShapes接口插入的圖片則不能直接利用MATLAB進(jìn)行版式設(shè)置[5]。
2.2.1創(chuàng)建或打開Excel服務(wù)器
利用actxserver函數(shù)用來創(chuàng)建COM自動(dòng)化服務(wù)器,通過該函數(shù)創(chuàng)建或打開Microsoft Excel服務(wù)器。相關(guān)命令如下:
try
% 若Excel服務(wù)器已經(jīng)打開,返回其句柄Excel
Excel = actxGetRunningServer('Excel.Application');
catch
% 創(chuàng)建一個(gè)Microsoft Excel服務(wù)器,返回句柄Excel
Excel = actxserver('Excel.Application');
end。
2.2.2新建工作簿
可通過Excel服務(wù)器的Wordbooks接口建立空白文檔。相關(guān)命令如下:
Workbook = Excel.Workbooks.Add;
Workbook.SaveAs(filespec_user)。
2.2.3獲取工作表對(duì)象句柄
一般情況下,一個(gè)工作簿下包含三個(gè)工作表(WordSheets),編輯Excel文檔都是在工作表中完成的??梢酝ㄟ^ActiveSheet接口獲取正在工作的工作表對(duì)象句柄。相關(guān)命令如下:
ActivateSheet=Workbook.ActivateSheet。
2.2.4選取工作表區(qū)域
通常用戶需要在一個(gè)工作表中選取一些區(qū)域,然后在這些區(qū)域里進(jìn)行操作。工作表對(duì)象下的Range方法用于選取工作表區(qū)域,生成Range對(duì)象。相關(guān)命令如下:
h1=Sheet1.Range('A1:H1')。
程序設(shè)計(jì)了封面、第一章 設(shè)計(jì)依據(jù)及適用范圍、第二章 結(jié)構(gòu)形式、第三章 荷載、材料及施工方案、第四章 縱向計(jì)算、第五章橫向計(jì)算共六大模塊,對(duì)應(yīng)連續(xù)梁算單的六個(gè)章節(jié)(圖2)。
圖2 軟件模塊
包括工程名稱、適用工點(diǎn)、梁跨信息等需要填寫或修改的內(nèi)容;編寫時(shí)間自動(dòng)生成,并可編輯(圖3)。
圖3 封面界面
包括設(shè)計(jì)依據(jù)和適用范圍兩大部分,采用了面板、編輯框、命令按鈕等控件(圖4)。
圖4 第一章界面
包括結(jié)構(gòu)信息、長(zhǎng)度(縱向)信息、寬度(橫向)信息、高度/厚度(豎向)信息、曲梁布置、插入結(jié)構(gòu)圖/橫斷面六個(gè)部分,采用了面板、下拉列表、編輯框、選擇按鈕、命令按鈕等控件(圖5)。
圖5 第二章界面
為節(jié)省界面空間,分兩頁設(shè)置。包括主力、附加力、特殊荷載、材料、施工方案五個(gè)部分,采用了面板、列表框、下拉列表、編輯框、選擇按鈕、單選按鈕、命令按鈕等控件(圖6)。
圖6 第三章界面(第一頁)
包括計(jì)算模型、荷載組合及控制工況、計(jì)算結(jié)果三個(gè)部分,采用了面板、列表框、下拉列表、編輯框、選擇按鈕、命令按鈕等控件(圖7)。
為節(jié)省界面空間,分三頁設(shè)置。包括計(jì)算說明、計(jì)算荷載及荷載工況、計(jì)算結(jié)果三個(gè)部分,采用了面板、列表框、下拉列表、編輯框、命令按鈕等控件(圖8)。
(1)提供標(biāo)準(zhǔn)算單。本程序生成的算單具備統(tǒng)一的格式,可根據(jù)標(biāo)準(zhǔn)模板制作標(biāo)準(zhǔn)算單。標(biāo)準(zhǔn)化是先進(jìn)和高效的象征,可以使資源合理利用,簡(jiǎn)化生產(chǎn)技術(shù),是自動(dòng)化、電算化的前提。
圖7 第四章界面
圖8 第五章界面(第一頁)
(2)降低算單的出錯(cuò)率。使用程序生成的算單出錯(cuò)率很低,這體現(xiàn)在三方面:①由于主要數(shù)據(jù)是單獨(dú)填寫的,因此注意力集中,不易出錯(cuò);②由于一般性的語言是程序設(shè)定的,不存在錯(cuò)別字的情況;③易于復(fù)查,對(duì)于自查,可以通過檢查輸入數(shù)據(jù)來確定,注意要及時(shí)檢查,對(duì)于復(fù)核,只需要復(fù)核重點(diǎn)數(shù)據(jù)即可,不用把精力太放在錯(cuò)別字、格式等低級(jí)錯(cuò)誤上。
(3)提高算單的制作效率。使用程序生成算單效率很高,這體現(xiàn)在三方面:①可以節(jié)省手動(dòng)打字、粘貼文字和圖片、表格等制作算單內(nèi)容的時(shí)間;②程序自動(dòng)調(diào)整字體、段落、標(biāo)題、圖片、表格等格式,可以節(jié)省編輯算單格式所用的時(shí)間;③出錯(cuò)率低,可以減少自查、復(fù)查的時(shí)間。
(1)增加簡(jiǎn)支梁模塊。由于采用模塊式編程,可對(duì)相關(guān)模塊進(jìn)行修改和調(diào)整,以適應(yīng)簡(jiǎn)支梁算單程序的要求。
(2)輸出英文版算單功能。隨著“一帶一路”國(guó)家戰(zhàn)略的加快推進(jìn),我國(guó)承擔(dān)了越來越多的國(guó)際項(xiàng)目,許多項(xiàng)目需要提供英文版的資料,算單就是其中之一。通過對(duì)相關(guān)程序進(jìn)行修改,可以生成拼寫正確、語法標(biāo)準(zhǔn)的英文版連續(xù)梁算單,減少文字、語法方面的錯(cuò)誤,大大降低算單的編輯時(shí)間。
(3)計(jì)算與繪圖功能。MATLAB本身具有非常強(qiáng)大的計(jì)算和科學(xué)繪圖功能,可將橋梁計(jì)算的部分內(nèi)容融入到程序之中,實(shí)現(xiàn)計(jì)算、輸出一體化。