邢 雨
(中國鐵路設計集團有限公司橋梁院,天津 300142)
橋梁設計計算書,又稱橋梁設計算單,是橋梁設計過程的書面體現,算單內容應完整、清楚,格式標準,條理分明,引用數據有可靠依據,計算結果應與圖紙一致。目前鐵路橋梁算單的制作多采用手工填寫編輯的方法,存在格式不統一、編輯效率低、重復性勞動多、易出錯等缺點,因此有必要編制一款軟件,便于工程設計人員快速制作格式標準、內容完備的算單。
MATLAB是作為一種計算和處理數據的軟件,具備強大的數學計算功能、作圖功能,以及豐富的實用工具箱等優點[1]。MATLAB GUI作為一種新型的圖形用戶界面(Graphical User Interface,圖形用戶接口,簡稱GUI)開發設計平臺,面向對象開發,可實現對控件的靜態設計和程序編寫,極大地簡化了程序設計的過程[2]。
MATLAB支持COM(Component Object Model)技術,可以利用ActiveX控件調用Word、Excel等Microsoft Office應用程序自動生成符合要求的標準算單。本文以使用MATALAB開發的“鐵路連續梁計算書模板程序”為基礎,總結了一些軟件設計過程中的思路和經驗[3]。
為便于程序開發并保證程序功能的實用性,首先要明確程序的設計目標。本程序在設計和開發過程中力求達到以下目標:模塊化,內容齊全,功能豐富,易于操作(圖1)。

圖1 設計目標
模塊化編程,是用主程序、子程序、子過程等框架把軟件的主要結構和流程描述出來,并定義和調試好各個框架之間的輸入、輸出鏈接關系。模塊化編程具有相互獨立性、互換性、通用性等特點,各模塊間功能獨立,結構清晰。采用模塊化編程有利于降低程序復雜度,使程序設計、調試、維護升級等操作簡單化。
本程序在設計過程中從兩方面執行模塊化編程的原則:(1)頂層設計,預先構思主程序中應包含的子程序,并逐步編程實現;(2)歸納整理,對零散的程序語句進行封裝。
為保證程序的適用范圍更加廣泛,以用于不同形式、不同施工方法、不同計算方法的多種連續梁算單生成,開發人員在編制程序前應事先通過大量資料搜集和調研工作,盡可能地豐富各參數的選項,以保證程序的內容齊全。
程序除了能夠將連續梁算單不同章節快速、準確地生成并組合外,還應能夠多文檔進行多種形式的編輯,如對字體、段落、標題、圖片、表格等進行處理,并能自動生成目錄、頁眉頁腳等。
程序應符合用戶使用習慣,減少不必要的操作,增加實用功能。軟件初始界面應提供默認輸入內容、選項或路徑;在前后內容相關聯的地方,應保證對應(附圖)等。
使用本程序最終生成的算單是Word文檔,而連續梁計算的結果許多是以Excel文檔的形式進行記錄的,因此需要利用MATLAB對Word、Excel進行編輯,實現創建或打開Word/Excel服務器、新建空白文檔、頁面設置、寫入文字內容、插入圖片、圖片編輯等功能。
2.1.1創建或打開Word服務器
MATLAB中提供了actxserver函數用來創建COM自動化服務器,可通過該函數創建或打開Microsoft Word服務器[4]。相關命令如下:
try
Word = actxGetRunningServer('Word.Application');
catch
Word = actxserver('Word.Application');
end。
2.1.2新建空白文檔
可通過Word服務器的Documents接口建立空白文檔。相關命令如下:
Document = Word.Documents.Add;
Document.SaveAs(filespec_user)。
2.1.3頁面設置
Document接口下有一個PageSetup接口,通過對其屬性修改,可進行頁面設置。相關命令如下:
Document.PageSetup.TopMargin = 60;%上邊距60磅
Document.PageSetup.BottomMargin = 45;%下邊距45磅
Document.PageSetup.LeftMargin = 45;%左邊距45磅
Document.PageSetup.RightMargin = 45;%右邊距45磅
2.1.4寫入文字內容
可通過Word服務器的Selection接口,Document接口的Content、Paragarphs接口寫入文字內容。
Content接口的Start屬性用來獲取設定文字內容的起始位置,End屬性用來獲取或設定文字內容的終止位置,Text屬性用來寫入文字內容,Font屬性用于字體設置,Paragraphs屬性用于段落設置。
利用Word服務器的Selection接口可以在文檔中選定一個區域,并對所選區域進行相關操作。其Start屬性用來設定光標的位置,TypeParagraph是Selection接口的一個方法,相當于回車鍵,Text屬性用來寫入文字內容,Font屬性用于字體設置,Paragraphs屬性用于段落設置。
相關命令如下:
Content.Start = 0;%設置文檔內容的起始位置
title = '第一章';
Content.Text = title; % 輸入文字內容
Content.Font.Size = 16 ; % 設置字號為16
Content.Font.Bold = 4 ;%字體加粗
Content.Paragraphs.Alignment = 'wdAlignParagraphCenter'; %居中對齊
Selection.Start = Content.end;%設定下面內容的起始位置
Selection.TypeParagraph;%回車,另起一段
yiju= '設計依據';
Selection.Text = yiju; %在當前位置輸入文字內容
Selection.Font.Size = 12; %設置字號為12
Selection.Font.Bold = 0;%字體不加粗
Selection.MoveDown; %光標下移(取消選中)
paragraphformat.Alignment = 'wdAlignParagraphCenter';
%居中對齊
2.1.5插入圖片
利用InlineShapes接口或Shapes接口的AddPicture方法,可以在Word文檔中插入外部圖片。調用格式如下:
handles=Document.InlineShapes.AddPicture('外部圖片所在路徑')
handles=Document.Shapes.AddPicture('外部圖片所在路徑')
2.1.6設置圖片格式
對于Shapes接口插入的圖片可以設置其文字環繞方向等版式,調用格式如下:
Document.Shapes.Item(i).WrapFormat.Type = 3;
而對于InlineShapes接口插入的圖片則不能直接利用MATLAB進行版式設置[5]。
2.2.1創建或打開Excel服務器
利用actxserver函數用來創建COM自動化服務器,通過該函數創建或打開Microsoft Excel服務器。相關命令如下:
try
% 若Excel服務器已經打開,返回其句柄Excel
Excel = actxGetRunningServer('Excel.Application');
catch
% 創建一個Microsoft Excel服務器,返回句柄Excel
Excel = actxserver('Excel.Application');
end。
2.2.2新建工作簿
可通過Excel服務器的Wordbooks接口建立空白文檔。相關命令如下:
Workbook = Excel.Workbooks.Add;
Workbook.SaveAs(filespec_user)。
2.2.3獲取工作表對象句柄
一般情況下,一個工作簿下包含三個工作表(WordSheets),編輯Excel文檔都是在工作表中完成的。可以通過ActiveSheet接口獲取正在工作的工作表對象句柄。相關命令如下:
ActivateSheet=Workbook.ActivateSheet。
2.2.4選取工作表區域
通常用戶需要在一個工作表中選取一些區域,然后在這些區域里進行操作。工作表對象下的Range方法用于選取工作表區域,生成Range對象。相關命令如下:
h1=Sheet1.Range('A1:H1')。
程序設計了封面、第一章 設計依據及適用范圍、第二章 結構形式、第三章 荷載、材料及施工方案、第四章 縱向計算、第五章橫向計算共六大模塊,對應連續梁算單的六個章節(圖2)。

圖2 軟件模塊
包括工程名稱、適用工點、梁跨信息等需要填寫或修改的內容;編寫時間自動生成,并可編輯(圖3)。

圖3 封面界面
包括設計依據和適用范圍兩大部分,采用了面板、編輯框、命令按鈕等控件(圖4)。

圖4 第一章界面
包括結構信息、長度(縱向)信息、寬度(橫向)信息、高度/厚度(豎向)信息、曲梁布置、插入結構圖/橫斷面六個部分,采用了面板、下拉列表、編輯框、選擇按鈕、命令按鈕等控件(圖5)。

圖5 第二章界面
為節省界面空間,分兩頁設置。包括主力、附加力、特殊荷載、材料、施工方案五個部分,采用了面板、列表框、下拉列表、編輯框、選擇按鈕、單選按鈕、命令按鈕等控件(圖6)。

圖6 第三章界面(第一頁)
包括計算模型、荷載組合及控制工況、計算結果三個部分,采用了面板、列表框、下拉列表、編輯框、選擇按鈕、命令按鈕等控件(圖7)。
為節省界面空間,分三頁設置。包括計算說明、計算荷載及荷載工況、計算結果三個部分,采用了面板、列表框、下拉列表、編輯框、命令按鈕等控件(圖8)。
(1)提供標準算單。本程序生成的算單具備統一的格式,可根據標準模板制作標準算單。標準化是先進和高效的象征,可以使資源合理利用,簡化生產技術,是自動化、電算化的前提。

圖7 第四章界面

圖8 第五章界面(第一頁)
(2)降低算單的出錯率。使用程序生成的算單出錯率很低,這體現在三方面:①由于主要數據是單獨填寫的,因此注意力集中,不易出錯;②由于一般性的語言是程序設定的,不存在錯別字的情況;③易于復查,對于自查,可以通過檢查輸入數據來確定,注意要及時檢查,對于復核,只需要復核重點數據即可,不用把精力太放在錯別字、格式等低級錯誤上。
(3)提高算單的制作效率。使用程序生成算單效率很高,這體現在三方面:①可以節省手動打字、粘貼文字和圖片、表格等制作算單內容的時間;②程序自動調整字體、段落、標題、圖片、表格等格式,可以節省編輯算單格式所用的時間;③出錯率低,可以減少自查、復查的時間。
(1)增加簡支梁模塊。由于采用模塊式編程,可對相關模塊進行修改和調整,以適應簡支梁算單程序的要求。
(2)輸出英文版算單功能。隨著“一帶一路”國家戰略的加快推進,我國承擔了越來越多的國際項目,許多項目需要提供英文版的資料,算單就是其中之一。通過對相關程序進行修改,可以生成拼寫正確、語法標準的英文版連續梁算單,減少文字、語法方面的錯誤,大大降低算單的編輯時間。
(3)計算與繪圖功能。MATLAB本身具有非常強大的計算和科學繪圖功能,可將橋梁計算的部分內容融入到程序之中,實現計算、輸出一體化。