中铁建大桥工程局集团第三工程有限公司沈阳110136
摘要:本文介绍了应用VisualBasic6.0开发的水准测量平差软件的方法。通过软件自动生成EXCEL格式的水准测量平差计算表格进行数据处理,快速、准确计算出待求点的高程。
关键词:VB;数据处理;水准测量
水准测量平差计算就是对合格的高差予以调整。将闭合差以相反的符号按与各段水准路线长度(或按测站数)成正比的办法调整到各段高差上,求出改正后的高差再推算高程。手工计算速度慢、工作效率低,同时易出现计算错误,而VisualBasic6.0是一种简单易学的可视化语言,用其进行编程计算就显得方便灵活。本文结合作者工作的实践,详细地介绍了用VB开发水准测量平差软件的方法及应用。
1.VB语言的特点
(1).面向对象和可视化的程序设计。(2).事件驱动的运行机制。(3).结构化的程序设计语言。(4).多种数据库访问能力。(5).提供了功能完备的应用程序集成开发环境。(6).方便使用的联机帮助功能。
2.水准测量平差计算的方法
(1).计算高差闭合差fh。
fh=Σh测-(H终-H始)
fh允=±20(按四等水准测量限差)
fh≤fh允(合格)
fh允—允许闭合差;Σh测—实测的各段高差和;H始—起点高程;H终—终点高程;
(2).计算高差改正数Vi。
Σn—总测站数或路线总长度(km);ni—分段测站数或分段路线长度(km);
(3).计算改正后高差h改i。
h改i=h测¬+Vi
(4).计算待求点高程Hi。
Hi=Hi-1+h改i
3.软件的开发原理
首先在VB中设计了一个固定的界面(图3.1),添加相应功能键及数据输入文本框,通过输入相
应的数据,利用VB编程实现自动生成电子表格;通过VB操作电子表格里数据进行平差计算。根据不同的平差方法,本软件设置按距离进行平差和按测站数进行平差两种计算方法。
图3.1水准测量平差软件界面
3.1参数输入方式
数据输入设计成两种方式;一种是先建立文本格式(txt)的参数文件,通过编写程序代码实现直接读取数据。另一种是在生成的平差计算表中输入观测数据。
3.1.1参数文件的建立方法及各行数据意义
参数文件是建立在txt文本中,根据已知条件设置成五行,数据之间用逗号隔开;
各行数据的意义:
第一行数据表示路线的段数及限差。
第二行数据表示测站点号。
第三行数据表示起点及终点高程。
第四行数据表示每段测站数(按距离平差输入本段路线长度)。
第五行数据表示每段高差。
3.2参数的读取
参数的读取是通过在程序模块中添加如下的代码来实现的:
DimpAsString,p1AsString,p2AsString,P3AsString,p4AsString’定义变量类型
Dimj1AsInteger’定义变量类型
DimsmAsString’定义变量类型
设置打开读取文本代码
sm=IIf(Right(App.Path,1)="\",App.Path,App.Path+"\")
OnErrorGoTonofile
CommonDialog1.DialogTitle="读取数据库文件"
CommonDialog1.InitDir=sm+"liti"
CommonDialog1.FileName=""
CommonDialog1.Filter="文本文件(*.txt)|*.txt"
CommonDialog1.CancelError=True
CommonDialog1.ShowOpen
DimstrFilenameAsString
strFilename=CommonDialog1.FileName
OpenstrFilenameForInputAs#1'打开文件
Input#1,istation,bhc
txt3.Text=istation
Txt4.Text=bhc
ReDimsdangle(istation+1)AsString
ForI=1Toistation+1'读入点名
Input#1,sdangle(I)
NextI
Input#1,Xa,Ya'读入路线起终算点高程
ReDimsAngle(istation)AsDouble,sEdge(istation)AsDouble
ForI=1Toistation'读入路线长度
Input#1,sAngle(I)
NextI
ForI=1Toistation'读入高差
Input#1,sEdge(I)
NextI
Close#1'不要忘记关闭文件
nofile:
IfErr.Number=32755Then
ExitSub
EndIf
通过以上代码,我们便轻松快捷的将参数读取到软件里面;为进行下一步平差计算奠定基础。
4.平差计算表格的自动生成
平差计算是利用VB程序代码自动生成EXCEL表格,通过操作程序在表里进行数据计算。
4.1实现的方法
4.1.1全局变量的设置
在程序工程引用中选择“MicrosoftExcel12.0ObjectLibrary”后按“确定”,为保证Excel在整个程序中共享,将其设置为全局变量。全局变量的实现是在程序模块的顶部添加如下代码:
DimxlAppAsExcel.Application'定义EXCEL类
DimxlBookAsExcel.Workbook'定义工件簿类
DimxlSheetAsExcel.Worksheet'定义工作表类
Dimxlsheet1AsExcel.Worksheet'定义工作表类
4.1.2平差表格生成代码及步骤
(1).设置工作表名称
WithxlApp
.Workbooks.Add'打开工作薄
.Visible=True'工作薄设置为可见
.Worksheets(1).Name="水准路线平差计算表"'设置工作表的名称
EndWith
SetxlSheet=xlApp.Worksheets(1)
xlApp.Visible=True
xlSheet.Activate
(2).设置显示比例
ActiveWindow.Zoom=100
(3).指定生成单元格及合并单元格
ForI=6Ton*2+8Step2
Forj=1To1
xlSheet.Range(xlSheet.Cells(I,j),xlSheet.Cells(I+1,j)).Merge
Nextj
NextI
ForI=7Ton*2+7Step2
Forj=2To5
xlSheet.Range(xlSheet.Cells(I,j),xlSheet.Cells(I+1,j)).Merge
Nextj
NextI
ForI=6Ton*2+8Step2
Forj=6To7
xlSheet.Range(xlSheet.Cells(I,j),xlSheet.Cells(I+1,j)).Merge
Nextj
NextI
(4).为单元格添加线条并设置单元格高度、宽度、颜色及单元格内相关文字
WithxlSheet
.Range("a4:a5").Merge
.Range(xlSheet.Cells(n*2+8,6),xlSheet.Cells(n*2+8,7)).Merge
p="a4"+":g"+Trim(Str(n*2+9))
.Range(p).RowHeight=11
.Range(p).Borders.LineStyle=1
p1="a"+Trim(Str(n*2+10))+":g"+Trim(Str(n*2+12))
.Range(p1).RowHeight=22
.Range("B4:G4").Borders(xlEdgeBottom).LineStyle=xlLineStyleNone'无线条
p2="a4"+":a"+Trim(Str(n*2+12))
P3="g4"+":g"+Trim(Str(n*2+12))
p4="a"+Trim(Str(n*2+12))+":g"+Trim(Str(n*2+12))
.Range(p2).Borders(1).Weight=3’宽度设置
.Range(P3).Borders(2).Weight=3
.Range("a4:g4").Borders(3).Weight=3
.Range(p4).Borders(4).Weight=3
.Range("A3:g2000").HorizontalAlignment=3
.Range("a3").HorizontalAlignment=2
.Range("f1").HorizontalAlignment=3
.Range(p1).HorizontalAlignment=1
.Range("a1").RowHeight=25
.Range("a2:g5").RowHeight=20
.Columns("A").ColumnWidth=7
.Columns("b:g").ColumnWidth=12
.Range("c1").Font.Size=15
.Range("a2:g2000").Font.Size=10
.Range("c1").Font.Name="黑体"
.Range("c1").Value="水准路线平差计算表"
.Range("A3").Value="工程名称:"
.Range("f3").Value="等级:"
.Range("a4:a5").Value="点名"
.Range("b4:g4").Value=Array("距离或测站数","高差","改正数","调整后高差","调整后高程","原有高程")
.Range("b5:g5").Value=Array("(km)或(站)","(m)","(mm)","(m)","(m)","(m)")
EndWith
xlSheet.Cells(6,1)="BMA"
xlSheet.Cells(n*2+6,1)="BMB"
b=8
ForI=1Ton-1
xlSheet.Cells(b,1)=I
b=b+2
Next
xlSheet.Cells(n*2+8,1)="∑"
(5).设置打印预览功能及设置页边距(括号中的数字为距离),分别是左、右、上、下边距
WithxlApp.ActiveSheet.PageSetup
.LeftMargin=xlApp.InchesToPoints(0.3)
.RightMargin=xlApp.InchesToPoints(0.3)
.TopMargin=xlApp.InchesToPoints(0.8)
.BottomMargin=xlApp.InchesToPoints(1)
.CenterHorizontally=True'打印页面是否水平
.CenterVertically=False'是否垂直居中
.Orientation=1'设置打印方向:1为纵向打印,2为横向打印
.PaperSize=9'设置打印纸的类型,例如A3为8,A4为9
.PrintTitleRows=Range("a1:g5").Address
.CenterFooter="计算:"&Space(35)&"复核:"&vbCrLf&"监理:"&Space(35)&"日期:"&vbCrLf&"&10第&P页"'共"&j1&"页"
EndWith
Command4.Enabled=True
Command3.Enabled=True
Command2.Enabled=False
以上工作完成后,我们便可以生成一张水准路线平差计算表,通过导入或输入数据便可进行下一步工作。
5.平差计算
计算是对输入的数据进行有效、合理的处理,并对已知数据进行判断;软件能否快速、准确得出计算结果这一步至关重要;因此按照水准测量平差原理进行编程。
5.1计算代码
5.1.1高程闭合差及限差代码
(1).理论闭合差
gcc=Ya–Xa
计算各段高差和
ForI=7Ton*2+6Step2
jz=xlSheet.Cells(I,3)
m=m+jz
xlSheet.Cells(n*2+7,3)=m
Next
(2).计算边长总和
ForI=7Ton*2+6Step2
sbj=xlSheet.Cells(I,2)
sb=sb+sbj
xlSheet.Cells(n*2+7,2)=sb
Next
(3).计算闭差并判断是否超了限
fb=(m-gcc)*1000'闭合差
xlSheet.Cells(n*2+10,3)="闭合差fh="&Format(fb,"0.0")&"mm"
xc1=Sqr(sb)*xc
IfAbs(fb)>Abs(xc1)Then
MsgBox"实测角值超限,请重新检查"
SetxlApp=Nothing
SetxlBook=Nothing
ExitSub
EndIf
xlSheet.Cells(n*2+11,3)="限差Fh="&xc&"*"&"√L"&"="&Format(xc1,"0.0")&"mm"
xlSheet.Cells(n*2+12,3)="fh<FH="&Format(fb,"0.0")&"<"&Format(xc1,"0.0")&"(合格)"
5.1.2高差改正数
ForI=7Ton*2+6Step2
sbj=xlSheet.Cells(I,2)
xlSheet.Cells(I,4)=Format(-fb/sb*sbj,"0.0")
5.1.3计算改正后高差
ForI=7Ton*2+6Step2
bfh=xlSheet.Cells(I,4)
bfh1=bfh1+bfh
xlSheet.Cells(n*2+7,4)=bfh1
Next
5.1.4计算待求点高程
ForI=7Ton*2+6Step2
xlSheet.Cells(I,5)=xlSheet.Cells(I,3)+xlSheet.Cells(I,4)/1000
xlSheet.Cells(I+1,6)=xlSheet.Cells(I,5)+xlSheet.Cells(I-1,6)
cz=xlSheet.Cells(I,5)
cz1=cz1+cz
xlSheet.Cells(n*2+7,5)=cz1
xlSheet.Cells(n*2+8,6)="理论高程差="&Format(Ya-Xa,"0.000")
Next
至此整个程序编写完成,通过测试无运行计算问题。将其编译生成可执行文件(.exe图5.1),在脱离VB的环境下,在Windows环境下直接运行。
图5.1水准测量平差软件安装程序图
6.软件平差计算例题
如图6.1中,从已知高程的水准点BM3开始施测,经过B01、B02两待定点最后附合到已知高程的水准点BM5。试按四等水准测量限差计算B01、B02点高程。
图6.1附合水准测量路线示意图
6.1建立文本格式的参数表
6.1.1参数表(图6.2)
图6.2数据文件
6.1.2运行软件读取参数(图6.3)
图6.3软件运行界面
6.1.2生成水准测量平差计算表并显示平差成果(图6.4)
图6.4水准测量平差计算成果表
7.结论
从上面的过程可以看出,利用VB可以很容易实现水准测量平差的自动计算,大大减轻了劳动强度,提高了计算效率,增加了计算结果的可靠性。同时平差计算表用EXCEL进行数据的输入输出,方便灵活。
参考文献
[1]李立宗,VB程序设计教程[M],天津:南开大学出版社,2009
[2]伍云辉,等,ExcelVBA办公应用开发详解[M],北京:电子工业出版社,2008
[3]邱国屏,铁路测量(第二版)[M],北京:中国铁道建出版社,1999