VB开发水准测量平差软件的方法

(整期优先)网络出版时间:2019-10-20
/ 4

VB开发水准测量平差软件的方法

温晓辉

中铁建大桥工程局集团第三工程有限公司沈阳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