VB开发水准测量平差软件的方法论文_温晓辉

中铁建大桥工程局集团第三工程有限公司 沈阳 110136

摘要:本文介绍了应用Visual Basic6.0开发的水准测量平差软件的方法。通过软件自动生成EXCEL格式的水准测量平差计算表格进行数据处理,快速、准确计算出待求点的高程。

关键词:VB;数据处理;水准测量

水准测量平差计算就是对合格的高差予以调整。将闭合差以相反的符号按与各段水准路线长度(或按测站数)成正比的办法调整到各段高差上,求出改正后的高差再推算高程。手工计算速度慢、工作效率低,同时易出现计算错误,而Visual Basic6.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参数的读取

参数的读取是通过在程序模块中添加如下的代码来实现的:

Dim p As String, p1 As String, p2 As String, P3 As String, p4 As String’定义变量类型

Dim j1 As Integer’定义变量类型

Dim sm As String’定义变量类型

设置打开读取文本代码

sm = IIf(Right(App.Path, 1) = "\", App.Path, App.Path + "\")

On Error GoTo nofile

CommonDialog1.DialogTitle = "读取数据库文件"

CommonDialog1.InitDir = sm + "liti"

CommonDialog1.FileName = ""

CommonDialog1.Filter = "文本文件(*.txt)|*.txt"

CommonDialog1.CancelError = True

CommonDialog1.ShowOpen

Dim strFilename As String

strFilename = CommonDialog1.FileName

Open strFilename For Input As #1 '打开文件

Input #1, istation, bhc

txt3.Text = istation

Txt4.Text = bhc

ReDim sdangle(istation + 1) As String

For I = 1 To istation + 1 '读入点名

Input #1, sdangle(I)

Next I

Input #1, Xa, Ya '读入路线起终算点高程

ReDim sAngle(istation) As Double, sEdge(istation) As Double

For I = 1 To istation '读入路线长度

Input #1, sAngle(I)

Next I

For I = 1 To istation '读入高差

Input #1, sEdge(I)

Next I

Close #1 '不要忘记关闭文件

nofile:

If Err.Number = 32755 Then

Exit Sub

End If

通过以上代码,我们便轻松快捷的将参数读取到软件里面;为进行下一步平差计算奠定基础。

4.平差计算表格的自动生成

平差计算是利用VB程序代码自动生成EXCEL表格,通过操作程序在表里进行数据计算。

4.1实现的方法

4.1.1全局变量的设置

在程序工程引用中选择“Microsoft Excel 12.0 Object Library”后按“确定”,为保证Excel在整个程序中共享,将其设置为全局变量。全局变量的实现是在程序模块的顶部添加如下代码:

Dim xlApp As Excel.Application '定义EXCEL类

Dim xlBook As Excel.Workbook '定义工件簿类

Dim xlSheet As Excel.Worksheet '定义工作表类

Dim xlsheet1 As Excel.Worksheet'定义工作表类

4.1.2平差表格生成代码及步骤

(1).设置工作表名称

With xlApp

.Workbooks.Add '打开工作薄

.Visible = True '工作薄设置为可见

.Worksheets(1).Name = "水准路线平差计算表" '设置工作表的名称

End With

Set xlSheet = xlApp.Worksheets(1)

xlApp.Visible = True

xlSheet.Activate

(2).设置显示比例

ActiveWindow.Zoom = 100

(3).指定生成单元格及合并单元格

For I = 6 To n * 2 + 8 Step 2

For j = 1 To 1

xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge

Next j

Next I

For I = 7 To n * 2 + 7 Step 2

For j = 2 To 5

xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge

Next j

Next I

For I = 6 To n * 2 + 8 Step 2

For j = 6 To 7

xlSheet.Range(xlSheet.Cells(I, j), xlSheet.Cells(I + 1, j)).Merge

Next j

Next I

(4).为单元格添加线条并设置单元格高度、宽度、颜色及单元格内相关文字

With xlSheet

.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)")

End With

xlSheet.Cells(6, 1) = "BMA"

xlSheet.Cells(n * 2 + 6, 1) = "BMB"

b = 8

For I = 1 To n - 1

xlSheet.Cells(b, 1) = I

b = b + 2

Next

xlSheet.Cells(n * 2 + 8, 1) = "∑"

(5).设置打印预览功能及设置页边距(括号中的数字为距离),分别是左、右、上、下边距

With xlApp.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 & " 页 "

End With

Command4.Enabled = True

Command3.Enabled = True

Command2.Enabled = False

以上工作完成后,我们便可以生成一张水准路线平差计算表,通过导入或输入数据便可进行下一步工作。

5.平差计算

计算是对输入的数据进行有效、合理的处理,并对已知数据进行判断;软件能否快速、准确得出计算结果这一步至关重要;因此按照水准测量平差原理进行编程。

5.1计算代码

5.1.1高程闭合差及限差代码

(1).理论闭合差

gcc = Ya – Xa

计算各段高差和

For I = 7 To n * 2 + 6 Step 2

jz = xlSheet.Cells(I, 3)

m = m + jz

xlSheet.Cells(n * 2 + 7, 3) = m

Next

(2).计算边长总和

For I = 7 To n * 2 + 6 Step 2

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

If Abs(fb) > Abs(xc1) Then

MsgBox "实测角值超限,请重新检查"

Set xlApp = Nothing

Set xlBook = Nothing

Exit Sub

End If

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高差改正数

For I = 7 To n * 2 + 6 Step 2

sbj = xlSheet.Cells(I, 2)

xlSheet.Cells(I, 4) = Format(-fb / sb * sbj, "0.0")

5.1.3计算改正后高差

For I = 7 To n * 2 + 6 Step 2

bfh = xlSheet.Cells(I, 4)

bfh1 = bfh1 + bfh

xlSheet.Cells(n * 2 + 7, 4) = bfh1

Next

5.1.4计算待求点高程

For I = 7 To n * 2 + 6 Step 2

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]伍云辉,等,Excel VBA办公应用开发详解[M],北京:电子工业出版社,2008

[3]邱国屏,铁路测量(第二版)[M],北京:中国铁道建出版社,1999

论文作者:温晓辉

论文发表刊物:《基层建设》2019年第10期

论文发表时间:2019/7/1

标签:;  ;  ;  ;  ;  ;  ;  ;  

VB开发水准测量平差软件的方法论文_温晓辉
下载Doc文档

猜你喜欢