LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Measurement Abstraction Layer

I am developing a Hardware Abstraction Layer (HAL) for DMM at the moment. The parent implementation (DMM) is empty and has a single Dynamic dispatch member VI for acquiring data from the instrument. The output datatype however can differ such as a Number,numeric array or a waveform.  The type of acquisition is configured using a enum early on from Teststand. The child class implementation (NiDMM) also has a single Acquire VI which runs a case structure to determine the type of acquisition based on the enum, and the data is written to the DMM class's private cluster. If I want to use this acquire VI within teststand in a Limit test step, I have to also call an accessor VI with in the wrapper VI to access the saved data at the end of the acquisition process.

Acquire.jpg

 

Is there a better work around for this? 

 

0 Kudos
Message 1 of 4
(2,652 Views)

@GoKu25 wrote:

If I want to use this acquire VI within teststand in a Limit test step, I have to also call an accessor VI with in the wrapper VI to access the saved data at the end of the acquisition process.


I also use a wrapper library for TestStand to call.  I do not know of any other way to get around this since TestStand cannot do the dynamic dispatch directly with a VI call.  So each of my top level instrument libraries have a private Action Engine and a wrapper VI for each of those main function calls.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
0 Kudos
Message 2 of 4
(2,643 Views)

In the case of mesurement with a DMM, the value being read could be a single point(DBL), multipoint (Array of DBL), or a waveform type. Under such circumstances I have to create similar wrapper VIs and replace the last accessor VI according to the datatype or unbundle all three datatypes with in an accessor. I couldn't understand how I can use an action engine in this case. 

0 Kudos
Message 3 of 4
(2,512 Views)

@GoKu25 wrote:

I couldn't understand how I can use an action engine in this case. 


I just use the AE to store and get the objects of my instruments.  My wrapper VIs then call the class functions.

 

These functions do not update anything in the object, so no need to write them back into the AE.


GCentral
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5
0 Kudos
Message 4 of 4
(2,506 Views)