DQMH(Queued Message Handler 增强框架):全球最受欢迎的LabVIEW 第三方框架,免费开源,专为大型 LabVIEW 应用开发设计,适配 CLAD/CLD 级开发者,基于 NI QMH 模式优化,低门槛且功能完善。

基础术语
(一)通用术语
-
进程(Process):持续运行的代码,通常是含一个及以上 while 循环的 VI
-
重入性(Reentrancy):同一 VI 的多个实例可同时运行的能力
-
应用程序接口(API):逻辑组织的相关函数组
-
业务逻辑(Business Logic):非框架自带的应用专属代码,需按规范编写在指定位置
-
同步进程(Synchronous Process):有序操作,依赖其他进程完成
-
异步进程(Asynchronous Process):独立操作,与其他进程并行运行
-
队列(Queue):LabVIEW API,用于进程内 / 进程间数据传递
-
事件(Event):LabVIEW API,用于进程内 / 进程间数据传递
-
设计模式(Design Pattern):执行同步 / 异步代码的理论机制(如状态机、队列状态机、生产者 / 消费者、QMH)
-
架构(Architecture):一种 / 多种设计模式的实际实现,便于异步代码执行(如 JKI 状态机)
-
框架(Framework):企业级架构,含文档和工具以提升开发体验(如 DQMH、Actor Framework)
(二)DQMH 专属术语
-
DQMH 模块(DQMH Module):框架基础构建块,含清晰公共 API 的异步进程(.lvlib 格式),支持单例(非重入)/ 可克隆(重入)
-
请求(Request):外部向模块发起的操作指令,基于用户事件实现,可按需返回结果(公共 API 中的 VI)
-
广播(Broadcast):模块向外部发送的通知,基于用户事件实现,不依赖外部注册
-
主 VI(Main VI):应用的核心 QMH VI
-
API 测试器(API Tester):测试模块公共 API 的 VI,支持验证模块运行状态,是核心实用工具
-
脚本工具(Scripting Tools):框架核心工具,支持模块 / 请求 / 广播的创建 / 重命名 / 删除 / 验证,强制最佳开发实践
NI QMH与 DQMH
| NI QMH 痛点 | DQMH 优化 |
|---|---|
| 进程间通信复杂 | 保留队列(进程内通信),新增用户事件(进程间通信) |
| 多模块系统扩展性差 | 模块化设计,脚本工具简化架构级修改 |
| 进程 VI 复用性有限 | 模块独立封装,公共 API 标准化,降低耦合 |
| 难支持重入性 | 原生支持单例 / 可克隆模式,无需手动修改 |
| 架构级修改繁琐易出错 | 脚本工具自动化处理(如新增循环帧) |
DQMH 核心特性
-
通信机制:进程内用队列,进程间用用户事件
-
工具支持:脚本工具自动化框架级操作,模块升级时自动应用 bug 修复
-
内置能力:异步编程核心功能(启动 / 停止控制、错误管理、面板管理、调试支持)
-
生态优势:活跃开发者社区,DQMH 联盟响应功能需求
-
低门槛:极少依赖 LabVIEW 类,QMH 用户易上手
开发者指南
(一)模块开发者
-
保持 API 测试器更新,使用脚本工具进行框架级修改,禁止手动修改框架 VI
-
全面文档化(模块描述、事件描述),可通过 Antidoc 自动生成项目文档
-
可创建模块模板提升开发效率
(二)模块使用者
-
VIPM 安装的模块可直接在面板调用,非安装模块需从模块.lvlib 的 Public API 文件夹获取请求,从事件结构的事件列表获取广播
-
参考 API 测试器 VI 学习 API 用法并验证模块运行状态