方案二 基于DDE技术的动态数据交换
一、基本思路 方案一需要用文件形式来进行两者的数据传递,那么是否有两者直接数据传递的解决方案呢,答案是肯定的。我们知道DDE是基于Windows的一种消息机制,在客户机和服务器程序间通过互相传通消息进行“对话”,它允许两个或两个以上的应用程序之间进行实时的数据交换。根据这点,我们可以利用DDE来实现Delphi和matlab的数据传输。 二、DDE应用协议 DDE中提出对话的一方称为客户程序(client),而作出反应的一方称为服务器程序(server)。DDE服务器负责维护其他Windows程序所使用的数据,而 DDE客户机则负责从服务器获取数据。应用程序之间的动态数据交换必须遵守DDE协议,DDE协议主要有三层,应用程序层(Application)、对话主题层(Topic)和对话项目层(Item),各层的定义分别为: 1 应用程序层(Application) 应用程序层主要是建立对话的通道,DDE对话通常是由客户程序引起的,包括初始化有关参数、准备开始对话等。 2 对话主题层(Topic) 对话主题是DDE服务器所能识别的数据单元,通常是一个文件名、窗体名,在Delph 中还可以是Serverconv组件的名字、对于Matiab服务器,主题主要有两个:System和Engine,详见表一。 3 对话项目层(Item) 对话项目层是用来确定客户程序和服务器程序进行动态数据交换的内容,如发送数据、接受数据或者数据库中的字段、表格中的单元等.在Delphi中应用程序中,就是DdeServerItem组件的名字。在Matlab中两个主题System和Engine分别包含有Systems,Format,Topics,EngEvalstring,EngSringResult,EngFigureResult等项目,在表一中可以查看详细情况. Madab和Delphi都支持DDE技术,既可以作为客户程序。又可以作为服务器程序、这里我们仅以Delph作为客户程序,Matlab作为服务器程序进行探讨,Delphi客户机通过DDE组件提供的函数与Matlab的DDE服务器模块进行对话,完成数据的动态交换. 三、Delphi 的DDE组件 表1 Matlab DDE服务器的组成 System主题 项目: 功能: Systems 包含System 主题所支持的全部项目列表 Format 包含Matlab DDE 服务器所支持的全部数据格式名的字符串列表 Topics 包含Matlab DDE服务器所支持的全部主题名的列表 Engine主题 项目: 功能: EngEvalString 发送命令到Matlab服务器中执行 EngStringResult 从Matlab服务器中请求获取文本格式的数据 EngFigureResult 从Matlab服务器中请求获取图形格式的数据 Delphi提供了四个用于DDE的组件:Ddeclicntconv,Ddeclienlitem,Ddeserverconv和Ddeserverconv,其中前两个是用作客户程序,后两个是用作服务器程序.在将Delphi作为客户程序时,必须用到Ddeclientconv和Ddeclientitem组件、Ddeclientconv用于客户端同服务器建立对话和确立对话主题.重要的属性和方法有ConnectMode,Ddeservice,Ddetopic,Setlink,Pokedata.ExecuteMacro 等:Ddeclientitem用于客户端注册对话项目常用的属性和方法有Ddeconv,Ddeltem,Lines,对话时与服务器程序密切相关,向服务器端发送的数据和从服务器端返回的数据往往都在于此组件的lines属性中。它们的具体用法和定义可以从Delphi帮助文件中查到。 四、Matlab DDE服务器 在将Matlab作为服务器访问时,必须提供服务器的名字、主题和项目.在Win32系统中,Matlab的DDE服务器名为Matlab,支持两个对话主题:System和Engine,每个主题下面有几个项目,通过它们可以完成不同的任务.从表一中可以查着其对应的功能. Madab作为服务器时,支持三种数据传输格式:文本格式、元文件图、XLTallle、其中文本格式用于存放空字符结尾的字符率数据格式.元文件图用于存放图形数据的格式,XLTable是为支持Excel所使用的一种特殊的数据格式. 五、Delphi和Matlab的DDE实现过程 DDE技术已经是非常成熟的windows进程间通信机制,Delphi和Matlab之间动态数据交换中我们将Delphi作为客户机,Matlab用作服务器。首先启动Delphi客户机,确立对话主题,然后连接Matlab服务器并建立DDE对话.在Delphi中,同服务器建立连接有自动和手动两种方式,可以通过declientconv组件的ConnectMode属性进行设置。前者必须调用Ddeclientconv组件的Openlink方法建立DDE对话,后者在连接时可以自动建立对话.确立对话主题并建立对话后 就可以根据不同的项目内容,在Delphi和Matlab之间实现不同数据的动态交换了,如向Matlab服务器发送命令和数据,向服务器请求返回数据,包括图形数据和文本数据等。 六、方案总结 直接在Matlab与Delphi间实现数据传输,提高了运行速度,但是步骤较为烦杂,有时候会莫名其妙的出错-_-b |
GMT+8, 2025-4-11 21:31 , Processed in 0.078893 second(s), 23 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.