Tcl/TK语言在Advantage综合录井系统上的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Tcl/TK语言在Advantage综合录井系统上的应用
摘要:本文探讨了如何利用Advantage综合录井系统集成的Tcl/Tk 脚本语言编写0.2m钻时计算程序。

重点介绍了Tcl/TK中窗口的创建、组件的添加与布局、与Advantage软件系统的通讯以及数据的存盘等。

关键词:Tcl/TK 组件脚本程序综合录井Advantage系统钻时
Tcl是Tool Command Language的缩写,是一种用于控制和扩展应用程序的脚本语言。

TK是Tcl的最有用的扩展之一,是一个用于开发图形用户界面的应用程序工具集,可为Tcl构建图形用户界面。

Advantage综合录井软件系统中集成有Tcl/TK语言,本文就探讨如何利用Tcl/TK语言编写Advantage系统中缺少的、但是对于现场录井又非常实用的微钻时计算程序。

一、建立用户界面
Tcl脚本程序在运行时,显示为一个简单、类似DOS应用程序的黑色窗口。

而TK提供了众多的组件,简单的例如,listbox创建列表框、checkbutton创建复选框、button创建命令按钮等,可为Tcl脚本程序建立如普通Windows程序一样的应用程序界面。

1.建立程序运行窗口
在TK中,每一个应用程序都有自己的组件层级,名称“.”指的是应用程序的主窗口,或称为根窗口,对于窗口中任何组件的引用,必须“.”打头。

wm title . “ROP__List_0.2m”
#设定主窗口的标题为“ROP__List_0.2m”
listbox .list -setgrid 2 -height 10
#定义一个名为“list”的列表框组件
frame .frame1 -borderwidth .1c -relief flat -bg {dark grey}
#定义一个名为“frame1”的框架组件,用以盛放其他组件
checkbutton $w.frame1.chk -text “Save to file” -variable save
#框架组件frame1内定义一个复选框chk,并指定一个变量save
注意,“#”是Tcl中的注释标志,必须是一行的第一个字符(空格除外),在
它后面的语句都不会被执行。

在TK中,每个组件都有很多的属性,可以定义其外观,如上面创建的frame 组件frame1时,指定了它的边框宽度、外观效果及背景颜色。

2.组件的添加及窗口布局
在TK中,对创建的组件使用几何管理器命令,它才会在屏幕上显示出来,比较常用的一个是pack命令。

pack .msg .list -side top -expand yes -fill y
pack .frame1 -side top -expand yes -fill both
#指定列表框组件list、框架frame1在窗口中显示的方式
将脚本中创建的各个组件布局好后,窗口如下图所示。

二、编写脚本程序
1.与Advantage软件系统通讯
在Advantage软件系统,要使Tcl脚本程序能够访问Advantage系统的变量,必须加载由Advantage系统提供的供Tcl脚本使用的中的一个Tcl包——interp,它提供cdaget和cdaput命令,用以读取和设置Advantage系统中的CDA变量。

set bittime1 [cdaget ONBOTTOM_TIME]
#读取参数ONBOTTOM_TIME参数
cdaput CHINAROP $crop
#设置CHINAROP参数
2.数据计算
在Advantage系统中,提供了一个CHINAROP脚本程序,用以计算“整米钻时”。

在实际应用中,发现CHINAROP在计算整米钻时的时间点与Advantage系统软件的深度数据库存盘的时间点上不协调,造成了数据库中“整米钻时”的重复和错位。

为了避免这种现象,需要提前计算出“整米钻时”。

实践证明,只需在钻达整米深度前的3cm这个时点上计算出整米钻时,就能保证存盘准确。

本文的0.2m钻时计算,就采取了这种“提前的”计算方式。

set bittime1 [cdaget ONBOTTOM_TIME]
#读取ONBOTTOM_TIME参数
set thisdepth [expr ceil([cdaget DEPTH])]
#设置起始计算井深
while {1==1} {
set currentdepth [expr ([cdaget DEPTH] + 0.03)]
#设置为提前0.03m进行计算
set bittime2 [cdaget ONBOTTOM_TIME]
if {$currentdepth > $thisdepth } {
set myrop [expr ($bittime2 - $bittime1)]
#计算0.2m钻时
set crop [expr ($crop + $myrop)]
#累计0.2m钻时
set i [expr ($i+1)]
if { $i > 5 } { cdaput CHINAROP $crop
#累计5个0.2m钻时即一个整米钻时后,将其输出到CDA中set crop 0
#重置,便于下一轮的累计
set i 1
}
set thisdepth [expr ($thisdepth + 0.2)]
#设置下一个计算深度
set bittime1 $bittime2
}
sleep 1000
}
3.数据输出与存盘
为了让用户看到如上图所示的窗口,还需要将计算结果添加到列表框组件中。

.list insert 0 “$thisdepth m :$myrop min”
脚本程序提供了checkbutton组件,用户选定该项,可将数据保存到一个文本文件中。

在Tcl中读写文件与标准的C语言极其类似:
set file “ROP0.2m.txt”
#设值文件名
set fileid [open $file a+]
#打开文件
if {$save == 1}{
#判断用户是否选择了存储数据
puts $fileid “$thisdepth $crop “
#输出到文件
}
三、结论
本文简要介绍了在Advantage系统中,利用Tcl/TK语言编写计算0.2m钻时的脚本程序,该程序已经在现场得到了应用并取得了良好的效果。

Tcl/TK的语法是较为简单,用户完全可以借助相关参考资料,编写出合适的脚本程序,扩充Advantage软件的功能,解决现场的一些实际问题。

参考文献
[1](美)John K.Qusterhout Ken Jones著,Tcl/TK入门经典(第2版),张元章译,清华大学出版社.。

相关文档
最新文档