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