动态数据交换(DDE)是用于同一计算机上多个应用程序间通信的协议,其核心通过消息传递实现信息交换,而非像 TCP/IP 那样直接传输原始数据。所有参与 DDE 通信的应用程序必须处于运行状态,且需向 Windows 提供回调函数地址 —— 当某一应用发送 DDE 消息时,Windows 会调用该函数以完成通信触发。

在 LabVIEW 中,可通过 DDE VIs 将其配置为客户端或服务器,与支持 DDE 的应用程序(如 Microsoft Excel)实现数据交互。若需跨网络通信,则需依赖 Windows 内置的 NetDDE 服务器,它支持不同计算机上的应用程序通过 DDE 协议对话。
DDE 通信通过 “服务 - 主题 - 数据项” 三级结构定位信息,替代 TCP/IP 的 “计算机地址 + 端口” 模式。
服务:通常为应用程序名称,如 Microsoft Excel 的服务名为 “Excel”;
主题:由服务器定义的可访问范畴,例如 Excel 中可为某一打开的 spreadsheet 名称,或用 “System” 表示系统级操作(如查询程序状态);
数据项:具体可操作的变量,如 Excel 中的单元格值、“System” 主题下的 “Status”(表示程序是否忙碌)等。
通信前需确认目标应用的服务和主题名称(可参考其官方文档),再通过这两个名称建立对话。
将 LabVIEW 配置为 DDE 客户端时,可执行四类核心操作:
请求数据:通过 “request data” 命令获取服务器当前数据值,如查询 Excel 某单元格的实时数值;
监测数据变化:通过 “advise data” 命令建立链接,当服务器数据更新时,服务器会主动通知客户端,适用于长期监测场景(如实时跟踪传感器数据);
发送数据:通过 “poke item” 命令向服务器写入数据,如修改 Excel 单元格内容;
执行命令:通过 “execute command” 向服务器发送字符串指令,如让 Excel 执行宏操作(该功能仅客户端可用,服务器不支持)。
操作结束后,客户端需向服务器发送关闭对话的消息,终止通信。
LabVIEW 作为服务器时,需注册特定的服务和主题,并对外提供可访问的数据项(如采集设备的实时测量值)。其核心机制包括:
服务器 VI 需注册数据项名称及初始值,LabVIEW 会自动管理这些数据的读写请求;
当服务器数据更新时,LabVIEW 会主动通知已通过 “advise” 命令订阅该数据的客户端;若客户端通过 “poke” 命令修改数据,LabVIEW 也会同步更新本地值;
限制:服务器模式下无法使用 “execute command”,若需接收命令,需通过数据项传递指令。
若需跨计算机通信,需配置 NetDDE 服务器(Windows 内置组件),步骤因系统而异:
客户端无需额外配置,仅需在 LabVIEW 的 “DDE Open Conversation VI” 中,将服务输入设为 “\machine_name\ndde$”(machine_name 为服务器计算机名),主题输入匹配服务器注册的名称(如 “lvdemo”)即可至。
数据同步风险:DDE 无数据排队机制,若客户端未及时检查更新,可能遗漏数据;多客户端同时访问时易产生冲突(需额外设计确认机制,如通过状态数据项标记 “已接收”);
功能限制:服务器不支持 “execute command”,跨网络依赖 NetDDE 配置;
替代方案:若需可靠的多客户端同步或避免数据遗漏,建议使用 TCP/IP(其自带数据排队和确认机制)。
通过上述配置与操作,LabVIEW 可高效利用 DDE 协议实现本地或跨网络的应用程序协同,尤其适用于与 Office 系列软件的轻量化数据交互场景。