崔紀鵬馮虎
(1.山東省交通規(guī)劃設(shè)計院,山東 濟南250031;2.東營交通發(fā)展集團有限公司,山東東營257091)
公路路基路面工程量的計算需要工程師依據(jù)平縱面設(shè)計數(shù)據(jù)及地質(zhì)條件進行人工分段、判斷和計算[1],耗用較多的精力與時間。緯地道路CAD是道路設(shè)計領(lǐng)域應(yīng)用最廣泛的軟件,此類軟件大多數(shù)只能做到輸出數(shù)據(jù)平縱設(shè)計圖表,而不能提供路基路面設(shè)計的路面、防護、排水等工程數(shù)量制表輸出功能[2]。針對公路路基路面設(shè)計的已有程序僅局限于對涵洞、邊坡類的單項數(shù)據(jù)計算[3-4],而涉及路基路面防護排水等整體設(shè)計的較少。
為了有效提高測量效率和精度,諸多學(xué)者對CAD專業(yè)軟件進行了二次開發(fā)。賴文輝等利用AutoCAD內(nèi)置的Visual Lisp二次開發(fā)進行公路邊坡穩(wěn)定分析,實現(xiàn)從CAD中直接量取計算單元[5];李建華利用VBA二次開發(fā),實現(xiàn)在AutoCAD軟件中自動繪制錐坡坡腳曲線的功能[6];柳忠杰及劉厚強對路基整體設(shè)計軟件做過有益的探索,總結(jié)其難點在于對動態(tài)設(shè)計數(shù)據(jù)的快速、正確、靈活地處理,而利用數(shù)據(jù)庫是一個較為適宜的途徑[7-8]。數(shù)據(jù)庫具有結(jié)構(gòu)相對固定、檢索靈活、數(shù)據(jù)管理技術(shù)成熟的優(yōu)點[9]。依托建成的數(shù)據(jù)庫,設(shè)計過程就變成對數(shù)據(jù)庫的維護問題,而輸出路基路面工程數(shù)量表則轉(zhuǎn)變?yōu)樵谠搸熘袡z索數(shù)據(jù)形成表單的過程。
通過與現(xiàn)有設(shè)計軟件的底層數(shù)據(jù)直接對接,運用數(shù)據(jù)庫技術(shù)實現(xiàn)對數(shù)據(jù)的整合和計算,是路基路面輔助設(shè)計程序開發(fā)的關(guān)鍵。數(shù)據(jù)文件是表達工程設(shè)計意圖最準確、直接的載體,緯地軟件的運行與計算依附于底層的數(shù)據(jù)文件。利用軟件二次開發(fā),將緯地數(shù)據(jù)讀取裝載入數(shù)據(jù)庫,依據(jù)路基路面設(shè)計原理[10]及最新規(guī)范[11]要求,通過對底層數(shù)據(jù)庫的操作實現(xiàn)軟件與設(shè)計人員的交互,完成路基路面工程量計算的批處理,可快捷準確地提高設(shè)計效率。
Visual Basic是微軟公司開發(fā)的程序設(shè)計語言,功能強大,已廣泛應(yīng)用于界面設(shè)計、數(shù)據(jù)庫編程等諸多領(lǐng)域[12]。文章基于數(shù)據(jù)庫的路基路面工程數(shù)量輔助計算程序,利用VB與Access聯(lián)合開發(fā),通過讀取緯地數(shù)據(jù)文件,建立Access數(shù)據(jù)庫,將眾多設(shè)計信息導(dǎo)入數(shù)據(jù)庫中。依托建立的數(shù)據(jù)庫,程序可考慮路面寬度變化、結(jié)構(gòu)物、超高段、交叉工程、隧道對工程分段的影響,并基于用戶提供的判斷式,進行信息甄別和分類,生成按工程類型的分段文件。自動分段產(chǎn)生的文本文件中,已將交叉工程、隧道工程扣除,而且在路面寬度變化處斷開。在分段文件基礎(chǔ)上進行人工修正,程序讀入人工修正后的分段文件后,再次調(diào)用數(shù)據(jù)庫查詢,求解各分段所包含的數(shù)據(jù)信息,將查詢結(jié)果自動填入Excel模板,完成工程數(shù)量表的出圖。利用ini文件保留上次設(shè)定的計算參數(shù),可方便快捷地完成對路面、路基防護、排水等工程量的輔助計算。
程序界面設(shè)置3個主要框架控件,分組放置公路設(shè)計中的常用到的路基、路面、防護等工程設(shè)計參數(shù),參數(shù)采用文本框控件裝載。其中,路基防護計算參數(shù)采用判斷式的模式輸入,程序根據(jù)分別填入的控制填挖高度字段和對應(yīng)防護類型字段,即可生成自定義的防護類型判斷式,后續(xù)計算會依據(jù)生成的判斷式進行工程設(shè)計類型的初步判斷。
程序菜單依據(jù)數(shù)據(jù)處理流程及使用功能,設(shè)置“文件、數(shù)據(jù)庫、路面工程、排水工程、防護工程、擋土墻、特殊處理、幫助”等菜單。其中“文件”菜單實現(xiàn)新建和指定已建數(shù)據(jù)庫的功能;“數(shù)據(jù)庫”菜單實現(xiàn)基礎(chǔ)數(shù)據(jù)數(shù)據(jù)庫建立、數(shù)據(jù)輸入及整理功能;“路面工程、排水工程、防護工程”菜單實現(xiàn)各分項數(shù)據(jù)按流程計算輸出功能;“特殊處理”菜單則實現(xiàn)設(shè)計中除路面、防護、排水外其他常用工程數(shù)量計算,包括指定路段的填挖交界處理,超高段路段、清表土、填前夯實面積、征地面積等計算,以及兩個樁號分段文件之間重疊、重合、扣除等操作計算,在日常設(shè)計中具有較高的實用功能。程序界面設(shè)計效果如圖1所示。
圖1 程序主界面圖
軟件使用VB語言完成對數(shù)據(jù)庫的調(diào)用[13],利用DAO(Data Access Object)數(shù)據(jù)訪問對象新建數(shù)據(jù)庫,主要代碼如下:
Dim MYDB As Object
Dim MYWS As Workspace
Set MYWS=dao.DBEngine.Workspaces(0)
Set MYDB=MYWS.CreateDatabase(VB.App.Path& "\"+PrjName+"路基路面.mdb",dbLangChineseSimplified)
MYDB.Close
數(shù)據(jù)庫的連接采用了ADODB數(shù)據(jù)模型,主要代碼如下:
程序生成的Access數(shù)據(jù)庫主要通過讀取緯地數(shù)據(jù)文件建立,參照以往數(shù)據(jù)庫技術(shù)在公路領(lǐng)域的養(yǎng)護[14]、設(shè)計[15]、管理[16]等方面的應(yīng)用設(shè)計,其結(jié)構(gòu)的設(shè)計綜合考慮了緯地文件結(jié)構(gòu)和數(shù)據(jù)處理的便利程度,整個數(shù)據(jù)庫的核心表為土方數(shù)據(jù)表,在緯地土方文件(.tf)數(shù)據(jù)的基礎(chǔ)上豐富部分字段,以便于數(shù)據(jù)的分段識別及查詢。程序底層數(shù)據(jù)庫表結(jié)構(gòu)見表1。
表1 數(shù)據(jù)庫結(jié)構(gòu)表
其中,超高、結(jié)構(gòu)物、路幅寬度、隧道、交叉工程、土方表用來存儲工程項目全幅和分幅的超高、結(jié)構(gòu)物、路寬、隧道、交叉工程、土方等數(shù)據(jù)。在數(shù)據(jù)庫建立的過程中,將根據(jù)指定的緯地文件數(shù)據(jù)位置及自定義輸入交叉文件(.jc),經(jīng)過數(shù)據(jù)甄別和處理后填充上述分項表,實現(xiàn)數(shù)據(jù)庫的初始化輸入。
緯地數(shù)據(jù)文件為具有固定格式的文本文件,程序利用自定義的函數(shù)進行數(shù)組搜索及讀取,按照緯地文件格式設(shè)定參數(shù),即可實現(xiàn)指定字符串的讀取功能。
其讀取字符的核心函數(shù)為GetNextData,功能為在Strdata()字符串數(shù)組中,從CharPos標定的數(shù)組位置返回下一個有效字符。其尋找指定字符位置的自定義函數(shù)為FindStr,功能為在Strdata()字符串數(shù)組中,尋找StrFind字符串在數(shù)組中的位置。靈活利用上述2個自定義函數(shù),依照緯地文件的格式規(guī)則,可從緯地數(shù)據(jù)文件轉(zhuǎn)換的字符數(shù)組中取出計算所需信息。
實現(xiàn)緯地基礎(chǔ)數(shù)據(jù)文件至數(shù)據(jù)庫記錄的轉(zhuǎn)換,是程序基礎(chǔ)數(shù)據(jù)整理的核心。利用Input()函數(shù)將緯地文本文件轉(zhuǎn)換為字符串,再通過Split()函數(shù)將字符串放在數(shù)組中。
將文件信息轉(zhuǎn)換至數(shù)組后,按緯地格式順序讀取各樁號數(shù)組的信息,組合形成該樁號 SQL的insert語句,調(diào)用數(shù)據(jù)庫執(zhí)行該語句,將該樁號序列數(shù)據(jù)插入至相應(yīng)數(shù)據(jù)表,按樁號大小依次填入后即可實現(xiàn)對數(shù)據(jù)庫信息的裝載。
緯地三維道路CAD系統(tǒng)歷經(jīng)數(shù)次升級,版本更新較快,各版本數(shù)據(jù)格式略有變化。該程序在數(shù)據(jù)讀取設(shè)計時,已考慮各版本格式的差異,對緯地5.8-7.0版本數(shù)據(jù)均能甄別讀取,兼容緯地多版本,具有較強的適用性,方便設(shè)計者的使用。
程序根據(jù)用戶指定的判斷式,生成動態(tài)的SQL的“update”語句填充數(shù)據(jù)庫類型字段,即可快捷完成各樁號記錄的類型判斷。
SQLStr="update土方set右側(cè)防護標識 ="+Chr(34)+"RPPoint"+Chr(34)+"where樁號="+CStr(AddZh)
通過人工修正程序可滿足差異化設(shè)計要求。開發(fā)的程序考慮公路項目設(shè)計的復(fù)雜性,除根據(jù)填挖高度智能分段功能外,還可人工修正分段指定特定判斷類型,將智能分段結(jié)果不合理的部分重新分段或者直接指定判別類型。該程序可識別自定義特殊類型分段(譬如特殊路基路段),只需在人工修正分段文件的終止樁號后,添加特殊類型的字符串即可。分段終止樁號后若不添加字符,程序?qū)闯R?guī)類型計算。該程序所讀取的人工修正分段文件,每行的格式數(shù)據(jù)包括起始樁號、終止樁號、特殊類型說明(特殊類型時可添加)等。對于浸水、特殊路基處理等設(shè)計數(shù)據(jù)無法直接判斷的路段,可利用該程序的人工修正功能實現(xiàn)甄別處理。軟件將智能分段與人工修正相結(jié)合,使得工程設(shè)計快捷、準確,其最終計算成果如圖2所示。
圖2 計算成果輸出至Excel示意圖
自定義路線樁號智能分段函數(shù)為Public Function SectionAuto (JudgeCol As String,ResultTxtName AsString,ThinkJgw AsBoolean,ThinkSup As Boolean)As Integer,對判斷后類型字段進行樁號智能分段,其技術(shù)路線如圖3所示。
圖3 智能分段函數(shù)技術(shù)路線圖
利用自定義函數(shù)InsertArrary(InSertZH()As Double,StarBS As String,EndBS As String,FillItem As String,Caption As String)將隧道位置、交叉工程、路面寬度、防護判斷高度、結(jié)構(gòu)物位置加入“土方”數(shù)據(jù)表的標識字段中。通過調(diào)用自定義函數(shù)Function JudgeFDPos(ADOObj As Adodc,JudgeCol As String,FroStyle As String,iNum As Integer,ThinkJgw As Boolean,ThinkSup As Boolean)As Boolean,依據(jù)分段中已經(jīng)是否考慮在結(jié)構(gòu)物、超高處斷開等參數(shù)設(shè)置,按標識字段來判斷該樁號記錄是否為分段斷開的結(jié)點,順次將“土方”數(shù)據(jù)表中的記錄切塊分段,依次輸出起終點樁號和對應(yīng)計算信息。該軟件輸出的自動分段文件,每行數(shù)據(jù)包含分段的起始樁號、終止樁號、類型等信息。智能分段計算結(jié)果文件如圖4所示。
圖4 智能分段計算輸出結(jié)果圖
通過與緯地文件直接對接,程序可實現(xiàn)公路項目數(shù)據(jù)讀取、處理、輸出自動化,設(shè)定好判斷式后,綜合結(jié)構(gòu)物、互通、隧道等因素進行智能分段,并調(diào)用底層數(shù)據(jù)庫計算,過程方便、快捷、準確,可有效提高判別和分段的效率。路線較長地形條件較復(fù)雜的項目,以往全部靠人工判別和分段需要數(shù)天的工作量,而使用該程序最快幾分鐘即可完成。相比處理文本數(shù)據(jù)和Excel二次開發(fā)等,在處理速度上具有較大的提升,極大提高了設(shè)計人員的工作效率。
路基路面工程輔助計算程序直接通過緯地數(shù)據(jù)文件獲取基礎(chǔ)信息,無需編寫任何數(shù)據(jù)文件,根據(jù)設(shè)計人員設(shè)定的類型判斷參數(shù),即可實現(xiàn)路基防護、排水、路面等工程數(shù)量的批處理計算。運行程序直接讀取項目緯地文件建立數(shù)據(jù)庫,設(shè)定防護、排水、路面類型判斷的參數(shù),通過對設(shè)計數(shù)據(jù)的分析對各樁號點進行類型判斷,并進一步按類型自動生成樁號分段文件,考慮特殊類型因素可對分段文件進行人工修正,最終程序讀取經(jīng)人工修正后的分段文件,將工程數(shù)量計算結(jié)果輸出,完成路基路面工程數(shù)量的出表。程序使用流程簡潔明快,計算結(jié)果可輸出至Excel工程量計算模板,實現(xiàn)直接出圖。操作流程如圖5所示。
圖5 程序操作流程示意圖
文章開發(fā)的路基路面工程輔助計算程序直接利用公路項目緯地設(shè)計數(shù)據(jù),依托數(shù)據(jù)庫在計算速度、數(shù)據(jù)處理上的優(yōu)勢,在路基路面工程設(shè)計方面實現(xiàn)了快捷、準確的輔助計算,大大提高了設(shè)計工作效率。在營城子至松江河高速公路、濱州至德州高速公路、青州至臨沭高速公路、沾化至臨淄高速公路等項目設(shè)計中,程序已得到實踐應(yīng)用與檢驗。在行業(yè)同類型軟件中,該程序是少數(shù)基于數(shù)據(jù)庫的路基路面設(shè)計實用性設(shè)計軟件,真正意義上實現(xiàn)了智能分段與人工修正的結(jié)合,同時兼顧了程序輔助計算的規(guī)范性和靈活性。程序計算功能在工程設(shè)計實踐中逐步豐富,擋土墻等設(shè)計模塊將在后續(xù)版本中陸續(xù)添加。