DQMH Queued Message Handler

The Future of Team-Based LabVIEW Development

User Tools

Site Tools


DQMH 4.0

June 2018

Package Versions (DQMH 4.0)

  • Delacor QMH
  • Delacor QMH Event Scripter
  • Delacor QMH Palette
  • Delacor QMH Project Template
  • Delacor QMH Thermal Chamber Example

Major new features

  1. Added tool to create a DQMH API Tester for Cloneable DQMH Modules running on a LabVIEW RT Target –> Based on requests like this one here.
  2. Added tool to create New Unit Tests for existing events
  3. Added #DQMH_HowTo bookmarks to Main VIs, API Testers and shipping examples with How-To information, including how the different events were created, and links to youtube videos
  4. New Validate DQMH Tools to upgrade existing DQMH modules to DQMH 4.0 as seen in this video
  5. Updated New Module tool to allow for absolute paths in the metadata XML for a DQMH module template. If the <AbsolutePaths>TRUE</AbsolutePaths> tag is present, then the LocationPath entry will be ignored, and the code assumes the paths for the library and the tester tags are absolute. –> as requested here
  6. Added tool to create a DQMH API Tester for Cloneable DQMH Modules running on a LabVIEW RT Target.

DQMH Scripter

Specific for LabVIEW RT Support:

  1. Added scripting support for RT API Tester for cloneable modules
  2. New DQMH Real-Time Tools»Create RT Tester makes a copy of existing tester with -RT.vi file name suffix and tags the copy with an RT tester-specific tag
  3. Scripting code puts RT copy next to existing tester in the project. If not found, puts it next to module library
  4. DQMH API Tester for RT removes post-loop code that stops the module. Updates free label to mention use case for leaving RT tester dormant
  5. DQMH API Tester for RT removes Or for the error cluster, and adds an error out local variable
  6. Value Change events are not supported in RT, nor Panel Close? events. These events are not present in DQMH API Tester for RT
  7. DQMH API Tester for RT has logic in Timeout event with default buttons (Start, Stop, Refresh, Exit), polls for buttons and has a case structure with a frame for each one of all the existing public requests in the cloneable module
  8. Scripting code adds a #CodeNeeded bookmark in each case frame so the user can wire in whatever inputs they need to the public request in order to properly test it
  9. The tool scripts latching button on the panel for each public request VI
  10. The tool skips scripting for “Hide Panel”, “Show Panel”, and “Show Diagram” since they don’t have a meaning in an RT Tester
  11. Added ability to have new events create appropriate code in both the traditional DQMH API Tester and the DQMH API Tester for RT
  12. Changed Arguments Window to be a VI created in the temp folder that is deleted after event scripting is done. This allows us to discard any errant saved changes to the Arguments Window made during its use
  13. There are now validate/fix tools for a module folder with multiple VIs tagged as Main, Tester, or RT Tester
  14. Fixed bug where DQMH scripting was attempting to set the subdiagram label of any subdiagram in any generated code where the label hasn’t ever been shown
  15. Fixed a “bug” with scripting where a VI was being erroneously identified as the tester VI for a module
  16. Added pre-flight check for New Event scripting to pop up a dialog if the Arguments Window has a control named ‘Module ID’ in it, since the DQMH scripting tools use that as a reserved control name for scripting operations
  17. Updated ‘Remove Event’ code to look for the removed event’s MHL frame name in quotes when looking for the frame to drop the code review todo comment inside
  18. Resized the result string indicator in the Validate Module results UI so it doesn’t overlap the Fix Issue button
  19. Added code to Rename Module scripting that updates VI descriptions to only update the following situations:
    1. [Module Name] at the beginning of the description
    2. [Module Name] in between space characters
    3. [Module Name].lvlib
  20. Updated ‘module did init’ event frame in API testers to use the ‘init’ event parameter to change the status message display based on its value: TRUE: append ‘ initialization succeeded.’ to the info parameter; FALSE: append ‘ initialization failed.’ to the info parameter
  21. Fixed New Event scripting to be able to handle the situation where the user has a child class of the DQMH Queue in their Main VI so that event structure scripting works correctly
  22. Updated singleton and cloneable Main VIs in the project template to pass the queue class wire around the event structure in the EHL instead of passing it through. This also required changes to the scripting code to account for the fact that the event structure will sometimes have a queue class wire going through the frame, and sometimes it won’t
  23. Updated popup dialog message when specifying an event name that conflicts with an existing VI in the library to make it more clear that there is a more general filename conflict, as opposed to an event name conflict
  24. Changed recursive file list to top-level folder list when checking to see if a proposed event name is valid. This way if there is a lower level folder for a class, it can have VIs with the same name as the Request or Broadcast VIs
  25. Made Remove Event, Rename Event, and Rename Module dialogs modal
  26. Improved performance of New Module and Rename Event tools
  27. Added the ability for the Create New DQMH Module tool to reference template modules by absolute path
  28. Whenever the user enters a string for the event name or the broadcast name in a round trip, trim whitespace at the time the value is committed
  29. Fixed module list ring in all DQMH scripting tools to not list duplicate module entries when the same module appears under multiple targets in the project –> as reported here
  30. Creating a Request and Wait for Reply event places the event parameter control terminals on the top-level diagram in the fire event VI
  31. Fixed scripting bug (error 1314) that was trying to update labels of constants inside typedefs when creating a module from the template.
  32. Updated New Module tool to allow for absolute paths in the metadata XML for a DQMH module template. If the <AbsolutePaths>TRUE</AbsolutePaths> tag is present, then the LocationPath entry will be ignored, and the code assumes the paths for the library and the tester tags are absolute. –> as requested here
  33. Added support for scripting a new module into an auto-populating folder in the project. –> as reported here

DQMH Validation Tool

New Validate/Fix DQMH Module Tools for:

  1. Finding obsolete Show Panel, Hide Panel, and Show Diagram message frames
  2. Finding and fixing untagged Request and Wait for Reply VIs (needed for Delacor VI Analyzer customer tests)
  3. Detecting and fixing the old error handling in Close Module.vi
  4. Added a new validate/fix tool for the Handle Exit case that inserts a clear Errors on the output of the FP.Open method, since this can error out when called in a Real-Time system
  5. Added Validate test for message strings being wired into DQMH Enqueue Message that do not have corresponding frames in the MHL case structure. When reporting, enclose result strings in quotes so bad message strings with preceding or trailing whitespace can be more easily identified. Added a new validate tester for finding string constants in the DQMH Main VI containing invalid message names (such as an empty string)
  6. Fixed bug in ‘Sending Nonexistent Messages’ Validate Module tester that was getting in an infinite loop when the DQMH Enqueue Message (poly).vi was inside a structure and its ‘message’ input was being sourced by a structure tunnel. (Please Note that the DQMH Enqueue Message (poly).vi does have an array messages implementation)
  7. Added Validate Module test to detect an unwired error output on the Register for Events node in the module Main VI
  8. Added a validate module tester to detect Reply Payload typedefs that do not contain error clusters
  9. Updated progress dialog of Validate Module tool to display the name of the current test being run, not only to help users see progress but also help Delacor know whenever the Validation tool hangs, which test was running when it hung
  10. Added a new validate tester and fixer for handling multiple VIs in a module tagged as testers, RT testers, or main VIs

Project Template

  1. Modified the template VIs to not have the Update Display status and instead call the Status updated broadcast. –> This is to follow one of our own Best Practices of calling atomic operations directly instead of enqueuing several operations because we cannot guarantee that nothing else is enqueued in between.
  2. Removed the Show Panel, Hide Panel, and Show Diagram messages from the MHL. Added two new subVIs, Open VI Panel.vi and Hide VI Panel.vi. They are private to the module. And the Show/Hide Panel events call those subVIs (and also broadcast messages about the panel being shown/hidden. And Moved the Show Diagram code from the MHL into the Show Diagram event case. With this approach, we solve the issue of the MHL being locked out from show/hide panel, and we provide utility subVIs for showing/hiding the panel that any other message can call to make its operation atomic. –> Following our own Best Practices of calling atomic operations.
  3. Added handling of error output from Register For Events function in Main VI of all three libraries in DQMH project template.
  4. Updated Close Module.vi in both libraries to fire the Module Did Stop broadcast even if there is an incoming error.
  5. Updated Singleton and Cloneable Main VIs in the project template to pass the queue class wire around the event structure in the EHL instead of passing it through.
  6. Updated Singleton tester to remove race condition of front panel being reinitialized and the Module Running local variable being updated. Also updated Cloneable tester to use the same arrangement for consistency
  7. Updated code in Panel Close event to call the new Hide VI Panel VI and no longer call the Confirm Quit message. Removed Confirm Quit message from MHL
  8. Updated both testers to use the ‘init’ parameter of the Module Did Init broadcast to add either a ‘succeeded’ or ‘failed’ message to the status display
  9. Updated Handle Exit VI to call the new Hide VI Panel VI, and to not wire the error terminals of the VI
  10. Updated Singleton tester to remove race condition of front panel being reinitialized and the Module Running local variable being updated. Also updated Cloneable tester to use the same arrangement for consistency. –> Based on feedback given here

DQMH Thermal Chamber Examples

  1. Validated for DQMH 4.0 and updated to match DQMH 4.0
  2. TestStand: Renamed Local variables Temperature_Set_Point and Temperature_Set_Points to be Current_Temperature_SetPoint and Temperature_SetPoint_List. Both are more descriptive and less likely to cause confusion while editing sequence steps
  3. TestStand: Replaced the Do-While with For-Each Loop since the code is looping through arrays of values that are not dynamic during looping.
  4. TestStand: Removed Locals.TempAsString variable, it had no purpose as a variable that is not satisfied just by the numeric value that we already had, moving the conversion to where it is needed
  5. TestStand: Disabled Result Recording at the sequence level and Force enabled the required steps in sequence. The previous approach of disabling every step result except one led to a very cluttered sequence view
  6. TestStand: Edited sequence file properties to select the required Model file instead of modifying the TestStand station options programmatically. This respects the TestStand station options the people trying out our DQMH examples have. Updated the welcome message
  7. Set TestStand reports to be HTML instead of XML. Introduced the ReportOptions Sequence File Callback to pass the Report Format, Directory Type, and Directory Path. Changed the Find TestReport Directory.vi to create the DQMHTS Reports folder if it is not present
  8. TestStand: Edited each sequence file to have a specific sequence model. None for the Thermal Chamber sequence, since it does not have a unit under test. Sequence Model for the sequence with a single unit under test. Batch model for the sequence with multiple units under test. This approach respects the current station options configurations and does not change them. Updated the welcome dialog and notes in the sequence files to reflect these changes
  9. TestStand: Deleted steps that were marked as skip, they were no longer used
  10. TestStand: Fixed spelling error on subsequence name
  11. TestStand: Strengthened the logic when searching for the Delacor examples path to ensure it only searches for configured paths and not a TestStand autogenerated paths
  12. TestStand: Configure the number of sockets to 2 for the Batch sequence instead of using what is currently on the station
  13. LabVIEW: Added Check Execution Status Case to the MHL. Added case Stop DQMH Modules
  14. LabVIEW: Updated the exit case to include the Close Termination Monitor.vi
  15. LabVIEW: Thermal Chamber Controller DQMH Status Updated.vi did not share the same Library header on its icon as ll the rest of the VIs in this library


  1. Updated Change History section in help documentation
  2. Added section to the documentation that talks about the creation of DQMH API Tester for LabVIEW Real-Time
  3. Added section for DQMH for RT
  4. Added section for creating DQMH Unit Tests
  5. Added information on how to use absolute paths instead of relative paths when Adding a New DQMH Module from a Custom Template
  6. Added embedded videos with real-life examples of applications implemented using DQMH in the Use Cases section
  7. Updated TestStand examples video in section TestStand Examples
  8. Added new examples video in section LabVIEW Examples
  9. Moved DQMH Help button over one pixel to make it flush with right border
/home/dqmh/www/wiki/data/pages/dqmh/release-notes/dqmh40.txt · Last modified: 2022/02/12 09:23 by joerghampel

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki