基于DDE的iFix与Matlab的数据通信
1 引言
美国通用电气公司工业组态软件ifix运行稳定、高效,多年来广泛应用在工业自动化领域。与其它工业组态软件一样,作为人机界面软件,fix 虽然有得天独厚的优势,但是数学和计算功能有诸多不足。美国mathworks公司出品的数学软件matlab是一种基于c语言内核与矩阵运算的工程计算语言,具有强大的数值计算能力和丰富的控制算法。本文用vc++实现fix和matlab的双向数据通信,将matlab的运算功能和算法引入 ifixdde。
dde(动态数据交换)是windows的一种进程通信机制,它基于windows消息机制,两个应用程序之间通过传递消息进行对话,这两个程序分别被称为服务器和客户,dde服务器维护着其它windows程序可能使用的数据,而dde客户则是从服务器获得这些数据的程序。
同一个windows应用程序既可以是一个程序的客户,也可以同时是另一个程序的服务器,一个服务器可以将数据传给多个客户,一个客户也可以从多个服务器获取数据,这些都通过dde对话来定义。dde对话需要三个参数:服务名、话题名、项目名。服务名一般同做为服务器的应用程序同名,一个服务可提供多个话题,一个话题可提供多个项目,最后由项目名确定要交换的数据。
2 用vc++实现ifix和matlab dde通信的基本思路
ifix软件既实现了dde服务器也实现了dde客户,支持文本格式的剪贴板数据。matlab既实现了dde服务器也实现了dde客户,作为服务器时支持文本格式、元文件图(metafilepict)和xltable格式三种剪贴板格式,作为客户端支持文本格式。本文用vc++程序实现了 dde服务器,将fix软件和matlab都做为vc++程序客户。三者的关系如图1所示:
图1 双向数据传送实现的基本结构
3 基于 visual c++的dde服务器程序设计
3.1 基本原理
dde协议的核心是dde消息,进行通讯的程序之间通过传递消息进行对话。dde服务器程序的主要任务是维护其它windows程序可能使用的数据,实现dde服务器的消息循环,从而处理dde客户的各种请求。
3.2 程序实现
采用visual c++实现dde服务器的程序流程图如2所示。
图2 dde服务器程序流程图
(1)在程序初始化时,调用了ddeinitialize()初始化dde管理库,以参数形式提供回调函数ddecallback(),当程序以消息形式收到待处理事务时,就调用该回调函数,回调函数通常写成switch-case的形式。分支处理不同的事务;然后调用 ddecreatestringhandle() 返回服务名、话题名、项目名的 handle,返回的类型为hsz。
(2)注册dde服务,以服务名handle为参数调用ddenameservice()。
相关文章
- 2023-07-22L波段色散补偿光子晶体光纤的研究和设计
- 2023-10-14基于DSP的高精度激光干涉仪的研制
- 2023-09-18纳机电矢量水听器二元阵的实验研究
- 2022-07-07伪码测高计相关峰微分比较及边沿捕捉
- 2021-11-26无线数传电台在自来水行业的应用设计
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。