用Delphi和Matlab联合编程实现瞬变电磁法数据处理及解释系统

(整期优先)网络出版时间:2015-12-22
/ 2

用Delphi和Matlab联合编程实现瞬变电磁法数据处理及解释系统

苗圃胡坚

1新疆维吾尔族自治区煤炭科学研究所,新疆乌鲁木齐830091;

2成都新元地球物理地质勘查咨询服务有限公司

摘要:采用Delphi和MatLab联合开发的模式,编制瞬变电磁法数据处理及解释系统,形成全程可视化的资料解释处理软件。

关键词:瞬变电磁;Delphi;MatLab

瞬变电磁法数据处理及解释系统,是在瞬变电磁反演行业实际工作应用中需要的非常重要的一套系统,通过将瞬变电磁测量仪器中的原始数据导出,进行数据转化成有序数据,对无规则繁琐的数据进行处理,最后进行图像化数据展示,用于进行地质结构的反演解释

1.问题及需求

瞬变电磁法数据处理及解释,涉及到的数据体非常大,而且需要设置的专业性参数也非常多,其中需要图形化数据模型来进行数据逻辑性判断。

因此首先我们考虑整套系统所涉及到的问题

1)大量的数据需要管理。

2)数据管道需要将底层专用的数据通过一些函数及接口代码进行抓取出来。

3)进行数据处理的时候需要图形化人机交互处理,并即使保存,保存不同版本可以回退。

4)系统操作、设置等各种配置,选项参数都很多,需要更友好的界面进行操作。

5)数据模型的数据测算,建立三维模型查看等操作需要有数据支撑和快速查看,各个角度查看。

6)需要更高效率的软件及数据处理能力。

综合上述问题,我们思考可以用Delphi和Matlab结合的方式来完成。

Delphi是当前主流的Windows平台下主流的开发的工具,它能方便的形成应用软件中所需要的各种用户界面和工具,并能与系统底层交换数据。它对于数据库的操作很强,而且支持市面上所有主流的数据库系统Oracle、SQLServer、MySql、Access等等,用它开发的系统维护升级容易、界面友好、代码效率高、执行速度块等一系列优点。但是Delphi在图形化数据处理及图形化成果展示较难,如果自行开发时间周期太长,技术难度非常高,而且效果也不一定好。而Matlab在数值处理、算法、图形绘制(数据可视化)等方面非常优秀。然而,Matlab自身存在一些缺陷限制了它在更多方面的应用。它的程序不能脱离其运行环境,可移植性差,它采用的是一种解释性语言,语言执行效率很低,实时性差,界面开发能力差,难以开发出友好的应用程序界面,Matlab编写的是M文件,容易被直接读取,难以保护劳动者成功。

通过以上分析。考虑到瞬变电磁法数据处理及解释系统的特殊性,采用Delphi和Matlab互相结合的来完成此系统是最好的一种方式。

实现方法

本文从技术原理、理论模型入手,采用理论模型与电磁法实现技术相结合的思路来研究,对具体应用中需要Dll、Com、DDE以及M文件四种关键技术进行介绍与分析,给出编程步骤和关键操作,实现Matlab强大的计算功能、数据可视化与Delphi在图形用户界面开发方面的优势结合的联合编程。

2.基于M文件的联合编程方法

利用Matlab系统支持的M文件作为数据中转,可以把经Delphi得到并处理后的数据传给Matlab,并可以将Matlab运算后处理的数据回传给Delphi。

实现方法是,用Delphi的编写一段用户交互界面,将需要成图的参数信息,保存在一个M文件中,然后用Matlab调用,导入,技术数学运算后生成图形,在图形上进行解释后生成M文件,通过Delphi调用读取M文件中的数据存储到数据库中。

Matlab提供了一种交互式的高级编程语言——M语言,利用M语言可以通过编写脚本或者函数文件实现用户自己的算法。

利用M语言还能开发相应的Matlab专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的、可扩展的,用户不仅可以查看其中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法,扩充工具箱的功能。

由Matlab语言编写而成的文件,习惯上称之为M文件。函数M文件可以从用户那里接受一定数量的输入参数,并返回若干输出参数,而脚本M文件一般不接受任何输入参数,也不返回任何输出参数。一般脚本M文件用来存放用户需要重复执行的一系列操作,以避免重复地键入大量相同命令,而函数M文件则一般用来完成某种特定的功能,是用户应用程序的组成部分和Matlab功能的扩展。

基于上述Matlab数据输入、输出的方法,我们可以利用M文件作为数据中转,实现Delphi和Matlab的数据交换,如图所示。

图2-1Delphi和Matlab的数据交换流程

3.基于DLL技术的联合编程方法

DLL是创建Windows应用程序、实现代码重用的重要手段。

大型应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。Windows系统平台上提供了一种完全不同的有效的编程和运行环境,可以将独立的程序模块创建为较小的DLL文件。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多少应用程序使用。

图3-1应用程序共享DLL文件的数据模块

每一个DLL必须有一个入口点,DLLMain是一缺省的入口函数。DLLMain负责初始化(Initialization)和结束(Termination)工作,每当一个新的进程或者该进程的新的线程访问DLL时,或者访问DLL的每一个进程或者线程不再使用DLL或者结束时,都会调用DLLMain。但是,使用TerminateProcess或TerminateThread结束进程或者线程,不会调用DLLMain。

4、实现Delphi与Matlab自动化服务器的连通

通过使用Matlab自动化服务器功能,可以在其它应用程序中执行Matlab命令,并与Matlab的工作空间交换数据。

图4-2连通Matlab自动化服务器的一般流程

连通Matlab自动化服务器的一般流程如图4-2所示。

按照上述流程,我们可以构造一段Delphi代码,与Matlab自动化服务器连通;由Delphi给出文件名,从中载入数据,然后执行一次plot函数。该方法是通行的,因此可拓展为任何其它函数。

设想需要将一些参数传给Matlab,并把经Matlab计算出的值返回给Delphi。采用OLE技术,让Delphi调用Matlab函数可以达到此目的。

通过两种语言联合编程实现电磁法系统设计,在系统设计之初就有效的利用了两种语言的优势,分工合理,保证了系统设计的高质量、高效率、高水平。

5、成果功能

通过以上方法,实现了软件系统,且达到如下主要功能:所以涉及到数据处理,数据变化,功能性的全部写成Dll方式;图形界面处理,目前用Delphi,采用Frame技术,提高设计复用性,保证图形数据处理功能的独立性,输入输出用直接用数据文件;每次数据处理的时候,提供自定义的处理数据备份,所有操作即时保存在对应数据库中;可直接生成MatLAB数据成图文件,并可导出给Surfer;多种图形解释可以迭代,每种图形解释分别自己保存解释数据;资料解释过程全程可视化,可进行切片解释,剖面解释的成果数据能叠合到不同的切片图上,并根据各种切片图对解释成果进行修正,最终形成综合的解释成果;要求主程序实行模块化设计,方便以后工作中进行升级;将剖面数据和三维数据体进行加密,并保证数据格式不外泄。

参考文献:

[1]陈志刚,曾志文,王红燕,多层/服务计算机模型及实现技术[M]。长沙:湖南科学技术出版社,2003.

[2]徐新华,Delphi高级编程丛书[M]。北京:人民邮电出版社,2000.

[3]蒋先刚,用OLE自动化技术控制Matlab绘图[J]。工业控制计算机,2001,2:14-15

作者简介:

苗圃(1967—)高级工程师,中国地质大学工程硕士学位,1990年工作,先后从事新疆煤田灭火处技术科科长、副总工程师、新疆煤炭科学研究所所长等工作。