路基路面工程辅助计算程序二次开发及实现
2018-12-13崔纪鹏冯虎
崔纪鹏冯虎
(1.山东省交通规划设计院,山东 济南250031;2.东营交通发展集团有限公司,山东东营257091)
0 引言
公路路基路面工程量的计算需要工程师依据平纵面设计数据及地质条件进行人工分段、判断和计算[1],耗用较多的精力与时间。纬地道路CAD是道路设计领域应用最广泛的软件,此类软件大多数只能做到输出数据平纵设计图表,而不能提供路基路面设计的路面、防护、排水等工程数量制表输出功能[2]。针对公路路基路面设计的已有程序仅局限于对涵洞、边坡类的单项数据计算[3-4],而涉及路基路面防护排水等整体设计的较少。
为了有效提高测量效率和精度,诸多学者对CAD专业软件进行了二次开发。赖文辉等利用AutoCAD内置的Visual Lisp二次开发进行公路边坡稳定分析,实现从CAD中直接量取计算单元[5];李建华利用VBA二次开发,实现在AutoCAD软件中自动绘制锥坡坡脚曲线的功能[6];柳忠杰及刘厚强对路基整体设计软件做过有益的探索,总结其难点在于对动态设计数据的快速、正确、灵活地处理,而利用数据库是一个较为适宜的途径[7-8]。数据库具有结构相对固定、检索灵活、数据管理技术成熟的优点[9]。依托建成的数据库,设计过程就变成对数据库的维护问题,而输出路基路面工程数量表则转变为在该库中检索数据形成表单的过程。
通过与现有设计软件的底层数据直接对接,运用数据库技术实现对数据的整合和计算,是路基路面辅助设计程序开发的关键。数据文件是表达工程设计意图最准确、直接的载体,纬地软件的运行与计算依附于底层的数据文件。利用软件二次开发,将纬地数据读取装载入数据库,依据路基路面设计原理[10]及最新规范[11]要求,通过对底层数据库的操作实现软件与设计人员的交互,完成路基路面工程量计算的批处理,可快捷准确地提高设计效率。
1 路基路面工程辅助计算程序二次开发
Visual Basic是微软公司开发的程序设计语言,功能强大,已广泛应用于界面设计、数据库编程等诸多领域[12]。文章基于数据库的路基路面工程数量辅助计算程序,利用VB与Access联合开发,通过读取纬地数据文件,建立Access数据库,将众多设计信息导入数据库中。依托建立的数据库,程序可考虑路面宽度变化、结构物、超高段、交叉工程、隧道对工程分段的影响,并基于用户提供的判断式,进行信息甄别和分类,生成按工程类型的分段文件。自动分段产生的文本文件中,已将交叉工程、隧道工程扣除,而且在路面宽度变化处断开。在分段文件基础上进行人工修正,程序读入人工修正后的分段文件后,再次调用数据库查询,求解各分段所包含的数据信息,将查询结果自动填入Excel模板,完成工程数量表的出图。利用ini文件保留上次设定的计算参数,可方便快捷地完成对路面、路基防护、排水等工程量的辅助计算。
1.1 程序界面及菜单设计
程序界面设置3个主要框架控件,分组放置公路设计中的常用到的路基、路面、防护等工程设计参数,参数采用文本框控件装载。其中,路基防护计算参数采用判断式的模式输入,程序根据分别填入的控制填挖高度字段和对应防护类型字段,即可生成自定义的防护类型判断式,后续计算会依据生成的判断式进行工程设计类型的初步判断。
程序菜单依据数据处理流程及使用功能,设置“文件、数据库、路面工程、排水工程、防护工程、挡土墙、特殊处理、帮助”等菜单。其中“文件”菜单实现新建和指定已建数据库的功能;“数据库”菜单实现基础数据数据库建立、数据输入及整理功能;“路面工程、排水工程、防护工程”菜单实现各分项数据按流程计算输出功能;“特殊处理”菜单则实现设计中除路面、防护、排水外其他常用工程数量计算,包括指定路段的填挖交界处理,超高段路段、清表土、填前夯实面积、征地面积等计算,以及两个桩号分段文件之间重叠、重合、扣除等操作计算,在日常设计中具有较高的实用功能。程序界面设计效果如图1所示。
图1 程序主界面图
1.2 底层数据库设计
软件使用VB语言完成对数据库的调用[13],利用DAO(Data Access Object)数据访问对象新建数据库,主要代码如下:
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
数据库的连接采用了ADODB数据模型,主要代码如下:
程序生成的Access数据库主要通过读取纬地数据文件建立,参照以往数据库技术在公路领域的养护[14]、设计[15]、管理[16]等方面的应用设计,其结构的设计综合考虑了纬地文件结构和数据处理的便利程度,整个数据库的核心表为土方数据表,在纬地土方文件(.tf)数据的基础上丰富部分字段,以便于数据的分段识别及查询。程序底层数据库表结构见表1。
表1 数据库结构表
其中,超高、结构物、路幅宽度、隧道、交叉工程、土方表用来存储工程项目全幅和分幅的超高、结构物、路宽、隧道、交叉工程、土方等数据。在数据库建立的过程中,将根据指定的纬地文件数据位置及自定义输入交叉文件(.jc),经过数据甄别和处理后填充上述分项表,实现数据库的初始化输入。
2 路基路面工程辅助计算程序实现的关键技术
2.1 纬地文件的读取
纬地数据文件为具有固定格式的文本文件,程序利用自定义的函数进行数组搜索及读取,按照纬地文件格式设定参数,即可实现指定字符串的读取功能。
其读取字符的核心函数为GetNextData,功能为在Strdata()字符串数组中,从CharPos标定的数组位置返回下一个有效字符。其寻找指定字符位置的自定义函数为FindStr,功能为在Strdata()字符串数组中,寻找StrFind字符串在数组中的位置。灵活利用上述2个自定义函数,依照纬地文件的格式规则,可从纬地数据文件转换的字符数组中取出计算所需信息。
2.2 数据库的装载
实现纬地基础数据文件至数据库记录的转换,是程序基础数据整理的核心。利用Input()函数将纬地文本文件转换为字符串,再通过Split()函数将字符串放在数组中。
将文件信息转换至数组后,按纬地格式顺序读取各桩号数组的信息,组合形成该桩号 SQL的insert语句,调用数据库执行该语句,将该桩号序列数据插入至相应数据表,按桩号大小依次填入后即可实现对数据库信息的装载。
纬地三维道路CAD系统历经数次升级,版本更新较快,各版本数据格式略有变化。该程序在数据读取设计时,已考虑各版本格式的差异,对纬地5.8-7.0版本数据均能甄别读取,兼容纬地多版本,具有较强的适用性,方便设计者的使用。
2.3 类型判断
程序根据用户指定的判断式,生成动态的SQL的“update”语句填充数据库类型字段,即可快捷完成各桩号记录的类型判断。
SQLStr="update土方set右侧防护标识 ="+Chr(34)+"RPPoint"+Chr(34)+"where桩号="+CStr(AddZh)
通过人工修正程序可满足差异化设计要求。开发的程序考虑公路项目设计的复杂性,除根据填挖高度智能分段功能外,还可人工修正分段指定特定判断类型,将智能分段结果不合理的部分重新分段或者直接指定判别类型。该程序可识别自定义特殊类型分段(譬如特殊路基路段),只需在人工修正分段文件的终止桩号后,添加特殊类型的字符串即可。分段终止桩号后若不添加字符,程序将按常规类型计算。该程序所读取的人工修正分段文件,每行的格式数据包括起始桩号、终止桩号、特殊类型说明(特殊类型时可添加)等。对于浸水、特殊路基处理等设计数据无法直接判断的路段,可利用该程序的人工修正功能实现甄别处理。软件将智能分段与人工修正相结合,使得工程设计快捷、准确,其最终计算成果如图2所示。
图2 计算成果输出至Excel示意图
2.4 智能分段
自定义路线桩号智能分段函数为Public Function SectionAuto (JudgeCol As String,ResultTxtName AsString,ThinkJgw AsBoolean,ThinkSup As Boolean)As Integer,对判断后类型字段进行桩号智能分段,其技术路线如图3所示。
图3 智能分段函数技术路线图
利用自定义函数InsertArrary(InSertZH()As Double,StarBS As String,EndBS As String,FillItem As String,Caption As String)将隧道位置、交叉工程、路面宽度、防护判断高度、结构物位置加入“土方”数据表的标识字段中。通过调用自定义函数Function JudgeFDPos(ADOObj As Adodc,JudgeCol As String,FroStyle As String,iNum As Integer,ThinkJgw As Boolean,ThinkSup As Boolean)As Boolean,依据分段中已经是否考虑在结构物、超高处断开等参数设置,按标识字段来判断该桩号记录是否为分段断开的结点,顺次将“土方”数据表中的记录切块分段,依次输出起终点桩号和对应计算信息。该软件输出的自动分段文件,每行数据包含分段的起始桩号、终止桩号、类型等信息。智能分段计算结果文件如图4所示。
图4 智能分段计算输出结果图
通过与纬地文件直接对接,程序可实现公路项目数据读取、处理、输出自动化,设定好判断式后,综合结构物、互通、隧道等因素进行智能分段,并调用底层数据库计算,过程方便、快捷、准确,可有效提高判别和分段的效率。路线较长地形条件较复杂的项目,以往全部靠人工判别和分段需要数天的工作量,而使用该程序最快几分钟即可完成。相比处理文本数据和Excel二次开发等,在处理速度上具有较大的提升,极大提高了设计人员的工作效率。
2.5 程序操作流程
路基路面工程辅助计算程序直接通过纬地数据文件获取基础信息,无需编写任何数据文件,根据设计人员设定的类型判断参数,即可实现路基防护、排水、路面等工程数量的批处理计算。运行程序直接读取项目纬地文件建立数据库,设定防护、排水、路面类型判断的参数,通过对设计数据的分析对各桩号点进行类型判断,并进一步按类型自动生成桩号分段文件,考虑特殊类型因素可对分段文件进行人工修正,最终程序读取经人工修正后的分段文件,将工程数量计算结果输出,完成路基路面工程数量的出表。程序使用流程简洁明快,计算结果可输出至Excel工程量计算模板,实现直接出图。操作流程如图5所示。
图5 程序操作流程示意图
3 结语
文章开发的路基路面工程辅助计算程序直接利用公路项目纬地设计数据,依托数据库在计算速度、数据处理上的优势,在路基路面工程设计方面实现了快捷、准确的辅助计算,大大提高了设计工作效率。在营城子至松江河高速公路、滨州至德州高速公路、青州至临沭高速公路、沾化至临淄高速公路等项目设计中,程序已得到实践应用与检验。在行业同类型软件中,该程序是少数基于数据库的路基路面设计实用性设计软件,真正意义上实现了智能分段与人工修正的结合,同时兼顾了程序辅助计算的规范性和灵活性。程序计算功能在工程设计实践中逐步丰富,挡土墙等设计模块将在后续版本中陆续添加。