1. Project description
The Continuous Measurement and Logging (CML) Delacor Queued Message Handler (DQMH) sample project is a variation of the NI QMH based CML project using DQMH® modules instead of separate Message Handle Loops.
2. My Computer
2.1. DQMH® modules
This section describes DQMH® module responsibilities and relationships.
2.1.1. Preamble
A DQMH module is the main component of an architecture based on DQMH® framework. A DQMH module is used to implement a section of the application that has one responsibility.
DQMH® framework defines two different type of DQMH module.
Singleton:
A Singleton DQMH module can have only one instance running at any given time.
Cloneable:
A Cloneable DQMH module can have one or multiple instances running in parallel.
DQMH® framework defines two different ways to carry data throughout the application and with both other DQMH modules and non-DQMH based code.
Request events:
A request is a code that fires an event requesting the DQMH module to do something. Multiple locations in the code can send events to the DQMH module.
Request events are many-to-one.
Requests are usually named using imperative tense.
Broadcast events:
A broadcast is a code that fires an event broadcasting that the DQMH module did something. Multiple Event Structures can register to handle the Broadcast Events.
Broadcast Events are one-to-many.
Broadcasts are usually named using past tense or passive voice.
Note
|
Refer to the DQMH® framework official documentation to find more details on how the framework works |
The following section gives you details on the project architecture relying on this framework. It gives you an overview of the modules' interaction and detailed information on each module.
Graphs used in this section have the following legend:
Components:

Events:

Start and Stop module callers:


2.1.2. Modules overview
This project contains the following modules.
Singleton | Cloneable |
---|---|
This graph represents the links between all DQMH modules.

2.1.3. CML UI.lvlib
Type: Singleton
Responsibility: This module is the user interface of the Continuous Measurement and Logging application.
Module Start/Stop calls

Function | Callers |
---|---|
CML Main.vi |
|
CML UI.lvlib:Handle Exit.vi |
Module relationship

Request Name | Callers |
---|---|
CML Main.vi |
|
Test CML UI API.vi |
|
CML UI.lvlib:Start Module.vi |
|
Test CML UI API.vi |
Broadcast Name | Listeners |
---|---|
Test CML UI API.vi |
|
Test CML UI API.vi |
|
Test CML UI API.vi |
|
Test CML UI API.vi |
|
Test CML UI API.vi |
Module | Broadcasts |
---|---|
CML UI.lvlib:Get Module Execution Status.vi |
|
Acquisition.lvlib:Stop Acquiring.vi |
|
Logger.lvlib:Initialize File.vi |
|
Settings Editor.lvlib:Show Panel.vi |
Module | Broadcasts |
---|---|
<<>> |
|
Acquisition Started.vi |
|
Error Reported.vi |
|
Error Reported.vi |
Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module CML UI.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
CML UI.lvlib:Start Module.vi
Event type: Not a DQMH Event

Description:
CML UI.lvlib:Stop Module.vi
Event type: Not a DQMH Event

Description:
CML UI.lvlib:Show Panel.vi
Event type: Request

Description:
CML UI.lvlib:Hide Panel.vi
Event type: Request

Description:
CML UI.lvlib:Get Module Execution Status.vi
Event type: Request

Description:
CML UI.lvlib:Show Diagram.vi
Event type: Request

Description:
CML UI.lvlib:Module Did Init.vi
Event type: Broadcast

Description:
CML UI.lvlib:Status Updated.vi
Event type: Broadcast

Description:
CML UI.lvlib:Error Reported.vi
Event type: Broadcast

Description:
CML UI.lvlib:Module Did Stop.vi
Event type: Broadcast

Description:
CML UI.lvlib:Update Module Execution Status.vi
Event type: Broadcast

Description:
2.1.4. Acquisition.lvlib
Type: Singleton
Responsibility: This module handle the continuous data acquisition.
Module Start/Stop calls

Function | Callers |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
Module relationship

Request Name | Callers |
---|---|
Test Acquisition API.vi |
|
Test Acquisition API.vi |
|
Acquisition.lvlib:Start Module.vi |
|
Test Acquisition API.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
Acquisition.lvlib:Main.vi |
|
Acquisition.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
Test Acquisition API.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
Module | Broadcasts |
---|---|
Acquisition.lvlib:Get Module Execution Status.vi |
|
Logger.lvlib:Log Data.vi |
|
Settings Editor.lvlib:Update Application Settings.vi |
Module | Broadcasts |
---|---|
Application Settings Updated.vi |
Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Acquisition.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
Acquisition.lvlib:Start Module.vi
Event type: Not a DQMH Event

Description:
Acquisition.lvlib:Stop Module.vi
Event type: Not a DQMH Event

Description:
Acquisition.lvlib:Show Panel.vi
Event type: Request

Description:
Acquisition.lvlib:Hide Panel.vi
Event type: Request

Description:
Acquisition.lvlib:Get Module Execution Status.vi
Event type: Request

Description:
Acquisition.lvlib:Show Diagram.vi
Event type: Request

Description:
Acquisition.lvlib:Stop Acquiring.vi
Event type: Request

Description:
Acquisition.lvlib:Calibrate DAQ.vi
Event type: Request

Description:
Acquisition.lvlib:Start Acquiring.vi
Event type: Request And Wait For Reply

Description:
Acquisition.lvlib:Module Did Init.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Status Updated.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Error Reported.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Module Did Stop.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Update Module Execution Status.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Acquisition Started.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Acquisition Stopped.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Data Updated.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Device Calibrated.vi
Event type: Broadcast

Description:
Acquisition.lvlib:Wakeup Helper Loop.vi
Event type: Request

Description:
Acquisition.lvlib:Change Settings.vi
Event type: Request

Description:
2.1.5. Logger.lvlib
Type: Singleton
Responsibility: This module handle data logging in file.
Module Start/Stop calls

Function | Callers |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
Module relationship

Request Name | Callers |
---|---|
Test Logger API.vi |
|
Test Logger API.vi |
|
Logger.lvlib:Start Module.vi |
|
Test Logger API.vi |
|
CML UI.lvlib:Main.vi |
|
Acquisition.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
Test Logger API.vi |
|
CML UI.lvlib:Main.vi |
|
Test Logger API.vi |
|
Test Logger API.vi |
Module | Broadcasts |
---|---|
Logger.lvlib:Get Module Execution Status.vi |
|
Settings Editor.lvlib:Update Application Settings.vi |
Module | Broadcasts |
---|---|
Application Settings Updated.vi |
Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Logger.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
Logger.lvlib:Start Module.vi
Event type: Not a DQMH Event

Description:
Logger.lvlib:Stop Module.vi
Event type: Not a DQMH Event

Description:
Logger.lvlib:Show Panel.vi
Event type: Request

Description:
Logger.lvlib:Hide Panel.vi
Event type: Request

Description:
Logger.lvlib:Get Module Execution Status.vi
Event type: Request

Description:
Logger.lvlib:Show Diagram.vi
Event type: Request

Description:
Logger.lvlib:Initialize File.vi
Event type: Request And Wait For Reply

Description:
Logger.lvlib:Log Data.vi
Event type: Request

Description:
Logger.lvlib:Stop Logging.vi
Event type: Request

Description:
Logger.lvlib:Module Did Init.vi
Event type: Broadcast

Description:
Logger.lvlib:Status Updated.vi
Event type: Broadcast

Description:
Logger.lvlib:Error Reported.vi
Event type: Broadcast

Description:
Logger.lvlib:Module Did Stop.vi
Event type: Broadcast

Description:
Logger.lvlib:Update Module Execution Status.vi
Event type: Broadcast

Description:
Logger.lvlib:Logging Stopped.vi
Event type: Broadcast

Description:
Logger.lvlib:File Initialized.vi
Event type: Broadcast

Description:
2.1.6. Settings Editor.lvlib
Type: Singleton
Responsibility: This module is an ui that allow user to change application settings.
Module Start/Stop calls

Function | Callers |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
Module relationship

Request Name | Callers |
---|---|
CML UI.lvlib:Main.vi |
|
Test Settings Editor API.vi |
|
Settings Editor.lvlib:Start Module.vi |
|
Test Settings Editor API.vi |
|
Acquisition.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
CML UI.lvlib:Main.vi |
|
Test Settings Editor API.vi |
|
CML UI.lvlib:Main.vi |
|
Acquisition.lvlib:Main.vi |
Module | Broadcasts |
---|---|
Settings Editor.lvlib:Get Module Execution Status.vi |
Module | Broadcasts |
---|---|
— |
— |
Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Settings Editor.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
Settings Editor.lvlib:Start Module.vi
Event type: Not a DQMH Event

Description:
Settings Editor.lvlib:Stop Module.vi
Event type: Not a DQMH Event

Description:
Settings Editor.lvlib:Show Panel.vi
Event type: Request

Description:
Settings Editor.lvlib:Hide Panel.vi
Event type: Request

Description:
Settings Editor.lvlib:Get Module Execution Status.vi
Event type: Request

Description:
Settings Editor.lvlib:Show Diagram.vi
Event type: Request

Description:
Settings Editor.lvlib:Update Application Settings.vi
Event type: Request And Wait For Reply

Description:
Settings Editor.lvlib:Module Did Init.vi
Event type: Broadcast

Description:
Settings Editor.lvlib:Status Updated.vi
Event type: Broadcast

Description:
Settings Editor.lvlib:Error Reported.vi
Event type: Broadcast

Description:
Settings Editor.lvlib:Module Did Stop.vi
Event type: Broadcast

Description:
Settings Editor.lvlib:Update Module Execution Status.vi
Event type: Broadcast

Description:
Settings Editor.lvlib:Application Settings Updated.vi
Event type: Broadcast

Description:
2.2. Libraries
This section describes the libraries contained in the project.
2.2.1. CML Shared.lvlib
This library gathers all the resource shared among the different part of the code.
2.2.2. Launcher Support.lvlib
This library gathers functions used to build and laucnh the application.
Launcher Support.lvlib:Determine if Running in Debug Mode.vi

Description:
Launcher Support.lvlib:Pre-Build Action.vi

Description:
Launcher Support.lvlib:Set VI Properties for Debugging Mode.vi

Description:
===
2.3. Custom errors
Tip
|
Custom errors are added via vi named *--error.vi .
|
Name | Code | Description | Owned by |
---|---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
CML UI.lvlib |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
CML UI.lvlib |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
CML UI.lvlib |
===
3. NI TPC-2206 Device (0.0.0.0)
3.1. DQMH® modules
This section describes DQMH® module responsibilities and relationships.
3.1.1. Preamble
A DQMH module is the main component of an architecture based on DQMH® framework. A DQMH module is used to implement a section of the application that has one responsibility.
DQMH® framework defines two different type of DQMH module.
Singleton:
A Singleton DQMH module can have only one instance running at any given time.
Cloneable:
A Cloneable DQMH module can have one or multiple instances running in parallel.
DQMH® framework defines two different ways to carry data throughout the application and with both other DQMH modules and non-DQMH based code.
Request events:
A request is a code that fires an event requesting the DQMH module to do something. Multiple locations in the code can send events to the DQMH module.
Request events are many-to-one.
Requests are usually named using imperative tense.
Broadcast events:
A broadcast is a code that fires an event broadcasting that the DQMH module did something. Multiple Event Structures can register to handle the Broadcast Events.
Broadcast Events are one-to-many.
Broadcasts are usually named using past tense or passive voice.
Note
|
Refer to the DQMH® framework official documentation to find more details on how the framework works |
The following section gives you details on the project architecture relying on this framework. It gives you an overview of the modules' interaction and detailed information on each module.
Graphs used in this section have the following legend:
Components:

Events:

Start and Stop module callers:


3.1.2. Modules overview
This project contains the following modules.
Singleton | Cloneable |
---|---|
This graph represents the links between all DQMH modules.

3.1.3. Test Module.lvlib
Type: Singleton
Responsibility: No description found (add content in DQMH module lvlib description)
Module Start/Stop calls

Function | Callers |
---|---|
Test Test Module API.vi |
|
Test Module.lvlib:Handle Exit.vi |
Module relationship

Request Name | Callers |
---|---|
Test Test Module API.vi |
|
Test Test Module API.vi |
|
Test Module.lvlib:Start Module.vi |
|
Test Test Module API.vi |
Broadcast Name | Listeners |
---|---|
Test Test Module API.vi |
|
Test Test Module API.vi |
|
Test Test Module API.vi |
|
Test Test Module API.vi |
|
Test Test Module API.vi |
Module | Broadcasts |
---|---|
Test Module.lvlib:Get Module Execution Status.vi |
Module | Broadcasts |
---|---|
— |
— |
Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Test Module.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
Test Module.lvlib:Start Module.vi
Event type: Not a DQMH Event

Description:
Test Module.lvlib:Stop Module.vi
Event type: Not a DQMH Event

Description:
Test Module.lvlib:Show Panel.vi
Event type: Request

Description:
Test Module.lvlib:Hide Panel.vi
Event type: Request

Description:
Test Module.lvlib:Get Module Execution Status.vi
Event type: Request

Description:
Test Module.lvlib:Show Diagram.vi
Event type: Request

Description:
Test Module.lvlib:Module Did Init.vi
Event type: Broadcast

Description:
Test Module.lvlib:Status Updated.vi
Event type: Broadcast

Description:
Test Module.lvlib:Error Reported.vi
Event type: Broadcast

Description:
Test Module.lvlib:Module Did Stop.vi
Event type: Broadcast

Description:
Test Module.lvlib:Update Module Execution Status.vi
Event type: Broadcast

Description:
===
===
3.2. Custom errors
Tip
|
Custom errors are added via vi named *--error.vi .
|
Name | Code | Description | Owned by |
---|---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
|
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
|
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
===
4. Legal Information
4.1. Document creation
This document has been generated using the following tools.
4.1.1. Antidoc
Project website: Antidoc
Maintainer website: Wovalab
BSD 3-Clause License
Copyright © 2019, Wovalab, All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4.1.2. Asciidoc for LabVIEW™
Project website: Asciidoc toolkit
Maintainer website: Wovalab
BSD 3-Clause License
Copyright © 2019, Wovalab, All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4.1.3. Graph Builder
Project website: Graph Builder
BSD 3-Clause License
Copyright (c) 2020, Cyril GAMBINI All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4.2. Product used in the project
The documented project has been developed with the following products.
4.2.1. DQMH®
Copyright © 2015-2020 by Delacor, LLC. All Rights Reserved.
Find more details on Delacor website