当前位置:文档之家› 5800多线版

5800多线版

本程序是原来终极版程序的一个改版,坐标计算还是原来的核心(没有任何改动)与简约版核心通用。

QQ285507730

教程请见QQ空间

一、㈠初始化设置https://www.doczj.com/doc/9714026357.html,/285507730/blog/1238765210

一、㈡创建多线要素库、线路选择https://www.doczj.com/doc/9714026357.html,/285507730/blog/123 8765956

一、㈢要素输入https://www.doczj.com/doc/9714026357.html,/285507730/blog/1238818753

二、㈠主显示与定义快热键https://www.doczj.com/doc/9714026357.html,/285507730/blog/123882865 2

二、㈡坐标正算https://www.doczj.com/doc/9714026357.html,/285507730/blog/1238831180

二、㈢放样方位角与坐标反算https://www.doczj.com/doc/9714026357.html,/285507730/blog/123893 2199

本次修改

1、去掉了终极版中平曲线交点要素输入支持(因为此程序极难调试,因此去除)

2、对反算程序修改一下以提高计算速度。现在反算缓各段+计算高程总用时约为7秒,整线速度第二次计算性能一至。

3、加入要素检错功能,确保计算结果99.9999%是正确,当要素被其它程序无意修改时,程序会要求重输入要素。

4、加入智能坐标输入,例如上一次输入X坐标为4251.123本次要输入4251.47 8只需输入.478(或1.478)即可

5、高程计算可关闭

首先运行RESET初始化以及设置密码---XLSET设置要素点数---DATASET输入平竖曲线要素

XLSEC选择线路

DISPLAYXYZ进入坐标正反算

STATIONSET 测站设置

SDFYSET设置三心隧道圆心参数

SDFY进入三心隧道放样

SDFYSET2设置单心隧道圆心参数

SDFY2进入单心隧道放样

HXKWXFYSET 横向开挖线放样参数设置

HXKWXFY 横向开挖线放样

本程序为电子版开发(笔误是在所难免,请朋友们自行测试),已在自己计算器调试完成,本人在深圳接受程序传输。

代码:

第一部分多线要素管理

FileName:OFFSET

//:扩充变量偏移补偿程序,本程序的各种设置需要,使用大量的扩充变量,为了不让其它小程序干扰到本程序,于是将本程序的扩充变量向后移动://

50→C ;偏移量

100→Z[C+22] ;要素偏移量

10→Z[C+10]最大线路条数(默认为设置为10条)

4Z[C+10]→Z[C+11]

Return

FileName:RESET 初始化程序

Norm 1

12345→J

"RESET-PW"?I:I=J=>500→DimZ为数据库增加额外变量500个,在SET、SET PFDYS程序根据实际再增减变量以保证不浪费内存

Prog"OFFSET"

"DATA-PW"?I:I→Z[C+39]重设要素保护密码

Cls:Stop

FileName:DATALOCK 要素保护密码确定认程序

Cls:Norm 1

"DATA-PW"?J:Cls:J≠Z[C+39]=>Stop

FileName:XLSET

//:路线文件文件头设置//

Norm 1

Prog "OFFSET"

Z[C+5]→I:"XLSEC"?I:I→Z[C+5] ;选择路线

C+Z[C+22]+4(Z[C+5]-1)→D

Cls:"XL":Locate 9,1,I

Z[D+3]→I:"PQXDS"?I:I→Z[D+3]

Z[D+4]→I:"SQXDS"?I:I→Z[D+4]

C+Z[C+22]→D

D+Z[C+11]→Z[D+1]

Z[D+1]+7Z[D+3]+3→Z[D+2]

For 1→J To Z[C+10]-1

Z[D+2]+7Z[D+4]→Z[D+5]

D+4→D

Z[D+1]+7Z[D+3]+3→Z[D+2]

Next

Z[D+2]+7Z[D+4]→Z[C+21]

Z[C+21]→DimZ

FileName:XLSEC

//:选择路线//

Norm 1:Cls

Prog "OFFSET"

Z[C+5]→I:"XLSEC"?I:I→Z[C+5] ;选择路线

C+Z[C+22]+4(Z[C+5]-1)→D

Z[D+1]→Z[C+6]

Z[D+2]→Z[C+7]

Z[D+3]→Z[C+8]

Z[D+4]→Z[C+9]

Z[C+6]+1→Z[C+30]

Z[C+7]+7→Z[C+31]

Z[C+30]→F

Z[F+1]→M当前分段要素起点桩号

Z[F+2]→N当前分段要素N坐标

Z[F+3]→E当前分段要素E坐标

Z[F+4]→H当前分段要素起点方位角(正北)

Z[F+5]→A当前分段要素起点曲率有左偏负右偏正(注意不半径)Z[F+6]→R当前分段要素终点曲率有左偏负右偏正(注意不半径)Z[F+8]-M→L当前分段要素长度

FileName:DATASET

//:设要素//

Norm 1

Prog "OFFSET"

Lbl S

Prog "XLSEC"

0→I:"1PQX,2SQX"?I ;1输入平曲线要素,2输入竖曲线要素

I≠0=>Prog"DATALOCK"

Cls:I=0=>Stop

I=1 => Goto 1

I=2 => Goto 2

Stop

Lbl 1

Z[C+6]+1→F

-1→Z[F]平曲线起点标志

For 1→J To Z[C+8]

Cls:"PQX":Locate 9,1,J

Z[F+1]→M:"SZH"?M:M→Z[F+1] 当前分段要素起点桩号

J>1=>Z[F]+M→Z[F]简单检错码

Z[F+2]→N:?N:N→Z[F+2] 当前分段要素N坐标

Z[F+3]→E:?E:E→Z[F+3] 当前分段要素E坐标

180Z[F+4]÷π→H:H°◢

"SFWJ"?H:Hπ÷180→H:H→Z[F+4] 当前分段要素起点方位角(正北)单位:度分秒

Z[F+5]→A:"SR-1"?A:A→Z[F+5] 当前分段要素起点曲率有左偏负右偏正(注意是半径的倒数)

Z[F+6]→R:"ER-1"?R:R→Z[F+6]当前分段要素终点曲率有左偏负右偏正(注意是半径倒数)

N+E-M+H+A+R→Z[F+7]简单检错码

F+7→F

Next

Z[F+1]→M:"EZH"?M:M→Z[F+1] 终点桩号

Z[F]+M→Z[F]简单检错码

1→Z[F+2]平曲线终点标志

Goto S

Lbi 2 ;竖曲线要素输入部分

Z[C+7]→D

-1→Z[D+3]

0→Z[D+5]

0→Z[D+6]

0→Z[D+7]竖曲线起点标志

For 1→J To Z[C+9]

Cls:"SQX":Locate 9,1,J

Z[D+1]→I:"BPDZH"?I:I→Z[D+1] ;请输入变坡点桩号

Z[D+2]→K:"BPDGC"?K:K→Z[D+2] ;请输入变坡点高程

Z[D+3]→R:?R:R→Z[D+3] ;请输入半径R

J>1=>(K-Z[D-5])/(I-Z[D-6])→Z[D-3] 计算坡度

If J>2:Then

Z[D-4]Abs(Z[D-10]-Z[D-3])÷2→Z[D-2] 计算切线长

1→Z[D-1]

Z[D-10]-Z[D-3]>0=>-1→Z[D-1]

Z[D-10]+Z[D-6]+Z[D-5]+Z[D-4]+Z[D-3]+Z[D-2]+Z[D-1]→Z[D]简单检错码

IfEnd

D+7→D

Next

1→Z[D-4] 竖曲线终点标志

0→Z[D-3]

0→Z[D-2]

0→Z[D-1]

0→Z[D]

Goto S

第二部分坐标正反算

FileName:KEYLOCK

//:本程序用于锁定键盘大部分按键,设定时间内无按键则反回默认健。只有“0”,“.”,“x10x”,“(-)”这四个键可用,为了更方便说明程

序,以后将分别定义这四个键为热键

“0” ===F1

“.” ===F2

“x10x” ===F3

“(-)” ===F4

://

"9" 暂定为换线路

1000→J ;无键时间,5800设1000时大约为50秒。

Lbl S

0→I

Do:I+1→I:I≥J=>Goto E:LpWhile Not(Getkey=25 Or Getkey=26 Or Getkey=27 OrGetkey=57 Or Getkey=73 Or Getkey=73)

Getkey=73=>Stop ;停止全部程序

Getkey=0=>Goto S

Getkey→I:Return

Lbl E

57→I:Retrutn ;默认按键值为F4

FileName:DISPLAYXYZ

//:标准显示程序,显示:桩号,N,E,Z,横向偏移。

热键功能

F1 快捷坐标反算

F2 快捷坐标正算

F3 显示,方位角,平距

F4 返回

://

Lbl S:Cls:Fix 3

"ZH=":Locate 4,1,G

"N=":Locate 3,2,X

"E=":Locate 3,3,Y

"Z":Locate 2,4,Z

Locate 10,4,B

Prog "KEYLOCK"

If I=25:Then Prog "TURNZH":Prog "GCJS":Goto S:IfEnd ;定义F1功能

If I=26:Then Prog "INZHANDZBJS":Goto S:IfEnd ;定义F2功能

If I=27:Then Prog "DISPLAYFWJ":Return:IfEnd ;定义F3功能

If I=57:Then Return:IfEnd ;定义F4功能

FileName:DISPLAYFWJ

//:方位角显示程序,以测站坐标为原点的,方位角,平距,用于快速放样。://

Cls:Deg:Fix 3

Pol (X-Z[C+35],Y-Z[C+36])

J<0=>J+360→J

"ZH=":Locate 4,1,G

"→":Locate 2,2,B

Locate 10,2,Z

"DL=":Locate 4,3,I

J°◢

Return

FileName:ZBJS 坐标计算程序

Prog"READDATA"

Rad

G-M→Q

IF AR=0 :Then I f A=R :Then 1→J:Else 3→J :IfEnd:Else If A=R :Then 2→J:E lse 3→J:IfEnd:IfEnd 判断线元类型

If J=1 :Then H→F:N+QCos(H)→X:E+QSin(H)→Y:IfEnd直线段直接计算

If J=2 :Then H+QR→F:Rec(Abs(2Sin(Abs(0.5QR))÷R),H+QR÷2):N+I→X:E+J→Y:IfEnd 圆弧段直接计算

If J=3 :Then Goto 5 :IfEnd

X+BCos(F+W)→X

Y+BSin(F+W)→Y

Return

Lbi 5 用五点通用坐标计算计算缓和段

0.5(R-A)÷L→K

AQ→I

KQ2→J

0.0469100770→P:H+IP+JP2→O

0.2307653449→P:H+IP+JP2→T

0.5→P:H+IP+JP2→D

0.7692346551→P:H+IP+JP2→F

0.9530899230→P:H+IP+JP2→P

0.1184634425→I

0.2393143352→J

0.2844444444→Y

N+Q(ICos(O)+JCos(T)+YCos(D)+JCos(F)+ICos(P))→X

E+Q(ISin(O)+JSin(T)+YSin(D)+JSin(F)+ISin(P))→Y

H+AQ+KQ2→F

X+BCos(F+W)→X

Y+BSin(F+W)→Y

Return

FileName:READDATA 平曲线分段要素读取程序1

Z[C+30]→F

If G>M And G

Else

Lbl 1 搜索要素

If G

If -1=Z[F]:Then Cls:"MIN":Goto E:IfEnd:F-7→F:Goto 1

Else If G>Z[F+8]:Then If 1=Z[F+1]:Then Cls:"MAX":Goto E:IfEnd:F+7→F:Got o 1:Else :Goto 2

IfEnd

IfEnd

Lbl 2

F→Z[C+30]

Z[F+1]→M当前分段要素起点桩号

Z[F+2]→N当前分段要素N坐标

Z[F+3]→E当前分段要素E坐标

Z[F+4]→H当前分段要素起点方位角(正北)

Z[F+5]→A当前分段要素起点曲率有左偏负右偏正(注意不半径)

Z[F+6]→R当前分段要素终点曲率有左偏负右偏正(注意不半径)

Z[F+8]-Z[F+1]→L当前分段要素长度

If N+E+H+A+R+L≠Z[F+7]:Then Prog "DATASET":Stop:IFEnd Return

IfEnd

Lbi E

"PQX-ERROR"

Stop

FileName:TURNZH(坐标反算)

N→X:E→Y:H→F:M→G:0→B

Prog"INNEZ"

Lbi S:Rad

U-X→I:V-Y→J

If I=0 And J=0 :Then Goto A:IfEnd

Pol(I,J)

Lbi A:Rec(I,J-F)

G+I→G:IF Abs(I)>0.0001 :Then Prog"ZBJS":Goto S:IfEnd

J→B

G→Z[C+1]

J→Z[C+2]

Prog "GCJS"

Return

STATIONSET 测站设置

Cls:Norm 1

Z[C+35]→I:"STATION-N"?I:I→Z[C+35]设置测站N坐标

Z[C+36]→I:"STATION-E"?I:I→Z[C+36]设置测站E坐标

Z[C+44]→I:"STATION-Z"?I:I→Z[C+44]设置测站Z坐标

Z[C+45]→I:"STATION-HI"?I:I→Z[C+45]设置仪高

FileName:INZHANDZBJS

//:桩号、横距输入程序,桩号输入-2进入工作设置://

Lbl S

Cls:Norm 1

Z[C+1]→G:"ZH"?G ;桩求桩号

G<0=>Goto 1

G→Z[C+1]

Z[C+2]→B:"JL"?B ;输入横向距离

B→Z[C+2]

Prog "ZBJS"

Prog "GCJS"

Return

Lbl 1

If G=-2 :Then Prog "OPTION":IfEnd

Goto S

FileName:INNEZ 实测坐标输入程序

Lbl S:Norm 1:Cls

Z[C+50]=2=>Goto 1

Z[C+37]→I

I→J

"DQD-N"?I 输入待求点N坐标

I<0=>Goto 1

Prog "SRIN"

I→Z[C+37]

Z[C+38]→I

I→J

"DQD-E"?I 输入待求点E坐标

I<0=>Goto 1

Prog "SRIN"

I→Z[C+38]

Z[C+43]→I:I→J:"DQD-Z"?I 输入实测高程

I<0=>Goto 1

Prog "SRIN"

I→Z[C+43]

Z[C+37]→U

Z[C+38]→V

Return

Lbl 1

I=-1=> 2→Z[C+50]

If I=-2:Then Prog"OPTION":Goto S:IfEnd 进入工作设置Prog"INFWJDLDH"

Z[C+50]=1=>Goto S

Z[C+37]→U

Z[C+38]→V

Return

FileName:OPTION

Cls:Norm 1

Z[C+3]→W:180W÷π°→I:"JJ"?I:Iπ÷180→W:W→Z[C+3]设置坐标横向角度Z[C+13]→I:"GCJS-ON"?I:I→Z[C+13]高程计算开关,1为开

Z[C+12]→I:"SRIN-ON"?I:I→Z[C+12]智能短数输入开关,1开

FileName:SRIN 智能短数输入

Z[C+12]≠1=>Return

I=J=>Return

If I>0 And I<1:Then I+Int(J)→I:Return:IfEnd

If I>1 And I<10:Then I+10Int(J/10)→I:Return:IfEnd

Return

FileName:INFWJDLDH实测坐标(用方位角,距离,高差)输入程序Lbi S:Deg:Norm 1:Cls

Z[C+46]→J:"DQD-FWJ"?J

J<0=>Goto 1

J→Z[C+46]

Z[C+47]→I:"DQD-DL"?I:I→Z[C+47]

Z[C+48]→K:"DQD-DZ"?K:K→Z[C+48]

Z[C+49]→P:"RHT"?P:P→Z[C+49]

Rec(I,J)

Z[C+35]+I→Z[C+37]

Z[C+36]+J→Z[C+38]

Z[C+44]+Z[C+45]+K-P→Z[C+43]

Return

Lbi 1

If J=-2:Then Prog"OPTION":Goto S:IfEnd 进入工作设置

1→Z[C+50]

Return

FileName:GCJS高程计算

-1→Z

Z[C+13]≠1=>Return

Z[C+31]→D

Lbl S

D→Z[C+31]

Z[D+1]→O

Z[D+5]→T

Z[D-3]→I

Z[D+4]→J

Z[D+2]→Z

Z[D+3]→P

Z[D+6]→K

If O+T+I+J+Z+P+K≠Z[D+7]:Then Cls:"DATA" :Goto E:IfEnd G-O→Q

If Abs(Q)>T:Then

If Q<0:Then

If G>Z[D-6]+Z[D-2]:Then Z+QI→Z:Return:IfEnd

If -1=Z[D-4]:Then Cls:"MIN":Goto E:IfEnd

D-7→D:Goto S

Else

If G

If 1=Z[D+10]:Then Cls:"MAX":Goto E:IfEnd

D+7→D:Goto S

IfEnd

Else

If Q<0:Then

Z+QI+K(T+Q)2÷2÷P→Z:Return

Else

Z+QJ+K(T-Q)2÷2÷P→Z:Return

IfEnd

IfEnd

Lbl E

"SQX-ERROR"

Stop

第三部分放样模块

FileName:XFY 线放样程序

//:线放样程,适用于放中线,边线,法线等://

Prog "TURNZH"

G-Z[C+75]→D里程差

B-Z[C+76]→O横向差

Z[C+43]-Z-Z[C+77]→T高差

Cls:Fix 3

"":Locate 1,1,G 显示里程

LOcate 11,1,D 显示里程差

"":locate 1,2,O显示横向差

Locate 9,2,T 显示横高差

Locate 1,3,Z[C+76] 显示设计横向偏距Locate 9,3,Z+Z[C+77] 显示设计高程

Z[C+76]→B

Prog "ZBJS"

Deg:Pol (X-Z[C+35],Y-Z[C+36])

If J<0:Then J+360→J:IfEnd

Locate 1,4,J°提供放边线角度参考

FileName:XFYSET 线放样参数设置程序

Cls:Norm 1

Z[C+75]→I:"DZH"?I:I→Z[C+75]

Z[C+76]→I:"D-H"?I:I→Z[C+76]

Z[C+77]→I:"D-V"?I:I→Z[C+77]

Prog "XPY"

FileName:HXKWXFY 横向开挖线放样//:适用于放坡口开挖线,坡角线://

Prog "TURNZH"

Cls

Z[C+43]-Z-Z[C+41]→I

Abs(B-Z[C+57])→D

IZ[C+42]+Z[C+40]→J

Tan-1(Z[C+42])→O

I÷cos(O)→T

If I>0:Then "W":Else "T":IfEnd

Locate 9,1,"1:"

Locate 11,1,Z[C+42]

Fix 3:Locate 2,1,I

Locate 1,2,T

Locate 9,2,D-J

Locate 1,3,G

Locate 1,4,B

Locate 10,4,Z[C+43]

FileName:HXKWXFYSET 横向开挖线放样参数设置

Cls:Norm 1

Z[C+42]→I:"PB1:"?I:I→Z[C+42]坡比

Z[C+40]→I:"B÷2:"?I:I→Z[C+40]半宽

Z[C+41]→I:"h:"?I:I→Z[C+41]高差

Z[C+57]→I:"DLZXPJ:"?I:I→Z[C+57]道路中线偏距

SDFYSET 隧道放样设置

Cls:Norm 1:Deg

Z[C+71]→I:"JGH"?I:I→Z[C+71]设置结构厚

Z[C+60]→P:"R1"?P:P→Z[C+60]设置主圆半径

Z[C+61]→I:"R1-H"?I:I→Z[C+61]设置主圆心横向偏距

Z[C+62]→I:"R1-V"?I:I→Z[C+62]设置主圆心高

Z[C+63]→I:"R2"?I:I→Z[C+63]设置主圆半径2

Z[C+64]→J:"R2-H"?J:J→Z[C+64]设置主圆心2横向偏距(相对主圆心) Z[C+65]→O:"R2-V"?O:O→Z[C+65]设置主圆心2高(相对主圆心)

Tan-1(J/O)°→T:"R2-J"?T:OTan(T)→Z[C+64]验证参数与角度的正精确度T→Z[C+69]圆心角

Z[C+66]→I:"R3"?I:I→Z[C+66]设置主圆半径3

Z[C+67]→J:"R3-H"?J:J→Z[C+67]设置主圆心3横向偏距(相对主圆心) Z[C+68]→O:"R3-V"?O:O→Z[C+68]设置主圆心3高(相对主圆心)

Tan-1(J/O)°→T:"R3-J"?T:OTan(T)→Z[C+67]验证参数与角度的正精确度T→Z[C+70]圆心角

Cls

SDFY 隧道放样

Prog"TURNZH"

Cls:Deg

Z[C+60]→P设置主圆半径

Z[C+62]→J设置主圆心高

Abs(B)-I→O

Z[C+43]-Z-J→T

Tan-1(O/T)→D

If D>Z[C+69]:Then Z[C+63]→P

Z[C+64]+I→I:Z[C+65]+J→J

Else If D>Z[C+70]:Then Z[C+66]→P:Z[C+67]+I→I:Z[C+68]+J→J

IfEnd:IfEnd

Abs(B)-I→O:Z[C+43]-Z-J→T

√(Abs(O)2+Abs(T)2)→F

Fix 3:"":Locate 1,1,G

"SR=":Locate 4,2,F

Locate 10,2,F-P

If P>Abs(T):Then √(P2-Abs(T)2)→D:If O<0:Then -D→D:IfEnd:Else 0→D:IfEnd Locate 1,3,O-D

If P>Abs(O):Then√(P2-Abs(O)2)→F:Else 0→F:IfEnd

Locate 10,3,T-F

Locate 10,1,Z+J+F

D+I→B

Prog"ZBJS"

Deg

Pol(X-Z[C+35],Y-Z[C+36])

If J<0:Then J+360→J:IfEnd

Locate 1,4,J°

SDFY2 隧道放样

Prog"TURNZH"

Cls:Deg

Z[C+72]→P设置主圆半径

Z[C+74]→J设置主圆心高

B-I→O:Z[C+43]-Z-J→T

√(Abs(O)2+Abs(T)2)→F

Fix 3:"":Locate 1,1,G

"SR=":Locate 4,2,F

Locate 11,2,F-P

If P>Abs(T):Then √(P2-Abs(T)2)→D:If O<0:Then -D→D:IfEnd:Else 0→D:IfEnd Locate 1,3,O-D

If P>Abs(O):Then√(P2-Abs(O)2)→F:Else 0→F:IfEnd

Locate 8,3,T-F

Locate 11,1,Z+J+F

D+I→B

Prog"ZBJS"

Deg

Pol(X-Z[C+35],Y-Z[C+36])

If J<0:Then J+360→J:IfEnd

Locate 1,4,J°

SDFYSET2 隧道放样设置

Cls:Norm 1:Deg

Z[C+72]→P:"R0"?P:P→Z[C+72]设置主圆半径

Z[C+73]→I:"R0-H"?I:I→Z[C+73]设置主圆心横向偏距

Z[C+74]→I:"R0-V"?I:I→Z[C+74]设置主圆心高

Cls

谢谢发贴:+28 分【测量空间】https://www.doczj.com/doc/9714026357.html,[0

相关主题
文本预览
相关文档 最新文档