DQMH Workshop

Corona Virus Update

Due to the corona virus, this class will be offered over Zoom. It will consist of 6 half-day sessions. This provides the added benefit of giving students more time to absorb the material and ‚Äčthe ability to practice with the material in between sessions so they can ask better questions.

Next Workshop August 24,25,27,28,31 and September 1st 1pm-5pm MT

SAS Workshops is proud to be a DQMH Trusted Advisor. As such we have a special relationship with Delacor, and they have decided to allow us to teach a DQMH Workshop.

This Zoom-based workshop consists of 6 sessions. It based on content that Fab has developed and refined over the years, so it is top-notch. It is packed with tons of great software engineering wisdom. It will provide you with plenty of opportunities to practice the skills introduced, ask questions and discover for yourself what techniques work well for your particular situation. The workshop builds toward a Design Exercise at the end. It will leave you with plenty of confidence using the DQMH in a variety of situations, and it will give you the software engineering skills needed to make good decisions so you can conquer all kinds of challenges.

About DQMH

DQMH stands for the Delacor Queued Message Handler. It is a LabVIEW framework used for writing modular applications. It was designed as an improvement to the NI QMH Template. Since it doesn’t require any knowledge of OOP programming it is much more accessible than the Actor Framework. The DQMH includes a number of scripting tools that help to dramatically decrease development time. One of its aims is to encourage test-driven development. Each module a debugger and some tools to aid in unit testing. DQMH won the LabVIEW Tools Network tool of the year award in 2016. Learn more about the DQMH here.

About the Workshop

This workshop is as much about software design as it is about using the DQMH effectively. You’ll learn about common challenges when writing LabVIEW programs and how the DQMH uses Software Engineering principles such as test-driven development to address those issues. The workshop consists of a mixture of lectures and hands-on exercises that walk you through how to design a DQMH based system from scratch. By the end of the workshop, you’ll be comfortable using the DQMH to solve all kinds of challenges. You’ll also learn and practice valuable software engineering skills that you can use even if you decide that the DQMH is not the correct choice for your application.

The content for this workshop was created by Fabiola De la Cueva, LabVIEW Champion, founder of Delacor and creator of the DQMH. She draws from her many years of LabVIEW programming experience and years of teaching classes for National Instruments and workshops for DSH.

Workshop Outline

Each workshop is unique. We try to cater to the participants and cover the aspects of DQMH and Software Engineering that are most relevant to their unique situation. The 3 lessons tend to be fairly static but the amount of time devoted to each lesson will vary depending on the participants. We may go on a tangent and cover same aspect that is particularly of interest. The last day during the exercise is an opportunity for participants to explore anything we have not covered that is of particular interest to them. At the beginning of the workshop we ask participant what they hope to get out of it. We are committed to having each participant achieve whatever goal it is they set out for themselves.

Lesson 1 – Overview and Getting Started

  • Background Information – Review the NI QMH, User Events, and the actor model. These form the foundation of the DQMH. This is one of the few theory modules, but understanding it will help us draw distinctions between the NI QMH and DQMH and form the foundation for the rest of the workshop.
  • DQMH Basics – Explore how a module is laid out including the project structure and the Main.vi block diagram. Learn the reasoning behind the design decisions, such as the difference between request and reply events. Learn why the DQMH is an improvement on the NI QMH.
  • Practice – Explore the DQMH and NI QMH templates. Explore how the Continuous Measurement and Logging Example Project is implemented in both. See firsthand some of the issues with the NI QMH and how DQMH solves them.
  • DQMH Scripting Tools – Learn how to save time by utilizing scripting tools that allow you to create new modules and messages quickly.
  • Practice – Create new DQMH Modules and Events. Learn how to use the scripting tolls to increase your productivity.

Lesson 2 – Project Planning

  • Planning a DQMH Project – Learn about how to break a design problem down into independent modules and define the communication between them. Explore a variety of useful modeling techniques using the Continuous Measurement and Logging project as an example.
  • Practice – Complete a hands-on exercise designing a simple Continuous Measurement and Logging program.
  • Reuse -Learn how to design DQMH modules in such a way that they can easily be reused between projects. Learn the pros and cons of various methods of distribution
    • Learn how to create project templates
    • Learn how to create template modules to provide a starting point for new modules.
    • Learn how to use Git submodules
    • Learn how to distribute DQMH modules via VIPM
    • Learn how to distribute DQMH submodules
  • Practice – Experiment with the various methods of reusing code.
  • Building an App – Learn some tricks for building DQMH into an executable, such as how to utilize the API Testers.
  • Practice – Build a sample application.

Lesson 3 – Advanced Tips and Tricks

  • This lesson covers some various tips and tricks for using the DQMH that Fab has found useful.
    • Using Multiple Event Handling Loops
    • Using Helper Loops
    • Using State Machines inside the Message Handling Loop
    • Adding Classes
    • Minimizing Code in the API Tester
    • Utilizing multiple Event Handling Loops in the Tester
  • Practice – We will spend some time practicing implementing each of the tips and discussing when they might be useful.


On the last day of the workshop we conduct a group exercise. It is somewhat open-ended depending on exactly what the participants’ interests are. Typically, we split into groups and each group designs and builds their own implementation of the Continuous Measurement and Logging Program. We start with a simple statement of the problem. We go through gathering user stories and the design phase. Each group then decides how best to divide up the work and starts implementing their solution. Along the way, they practice all the skills they have learned in the workshop. The groups control the direction so they are free to explore other aspects of DQMH that are not specifically covered in detail in the workshop such as integrating with TestStand, Network Communication Modules, integrating LabVIEW RT, or Unit Testing. In the end we all get together and each group presents their lessons-learned and takeaways.


The class does a great job of presenting an advanced framework and making it approachable to all levels. Sam has a deep understanding of the framework and software engineering practices that adds to the class content. I found the class to be very helpful. I am already using the skills I picked up from attending.

Ryan Good
Advanced Mabile Propulsion Test

Sam provided sharp focus and excellent coaching steps in teaching our class yet took the time to let us take forks in the road to discover other questions we had. His positive outlook and energy motivated us all to approach the class with intense thought and fruitful discussions. Sam’s role as customer quickly formed requirements to focus our efforts on module development and fast completion of our exercises. His wide variety of knowledge is brilliant and resources seem endless when we asked questions. Such a great wealth of all things LabVIEW and looking forward to our next endeavor!

Kevin Shirey