Components

cancel
Showing results for 
Search instead for 
Did you mean: 

Current Value Table (CVT)

I've found a documentation error in the CVT. Not a big impact. Delete Group.vi seems to have the same documentation as Group Tags.vi:

 

CVTDeleteGroup.PNG

0 Kudos
Message 91 of 164
(7,813 Views)

Thanks, I've added that to the known issues list here:

https://decibel.ni.com/content/docs/DOC-37445

0 Kudos
Message 92 of 164
(7,800 Views)

 

I am curious to learn of experiences of actual CVT implementation when used to serve applications that;

(i) can tolerate time delay in the order of minutes or even hours (i.e. non-time critical)

(ii) and for applications that can tolerate time delay in the order of milliseconds (time critical).

Where both (i) and (ii) are serviced using a single CVT implementation.

 

Scenario: An application with multiple parallel 'process' controllers that needs data at rates of 50 Hz for example, where the same dataset has to be published to a UI (at rate of 1 Hz), transmitted to a remote database for automated recording (at a rate of 0.5 Hz maximum) and also retrieved by an application for fault detection (at a rate of at least 45 Hz). Let's say that this dataset has a size of 100, and the process control application needs only 10 out of the 100.

If you've had a requirement for data reuse similar to the scenario above;

 

  1. how did the CVT fare in terms of its computational load?
  2. how did the CVT fare in terms of access to data by the various applications?
  3. how did you manage the expedite transmission of data or its extraction by time critical applications? (queues, references or the CVT API)
  4. ...will add more questions that come my way

 

I have implemented a variant of the CVT by applying the same concept of tags et'al for data retrieval. However, I have used different means to get the data to consumer applications depending on whether they are time critical or not. Under the hood things are tailored to my application but I am curious to learn of the experience(s) of anyone who has use the CVT for my research studies.

 

Thanks in advance for your response

Ifeanyi
0 Kudos
Message 93 of 164
(7,784 Views)

Well, we've definitely used it internally without issue. I can't go into details on specific applications, but the use case you describe is exactly what it was built for. Consider the designs discussed here:

https://decibel.ni.com/content/projects/cvt-based-reference-designs-for-machine-control

 

To answer your actual questions....

1.

Computational load will be proportional to data accesses if using the fast API, and I doubt data access would be more than 5% of an application. FGVs are lightning fast, and for a lot of these processes you can use the extremely fast group API. Ive only seen performance problems when people hit a particular pattern of using the normal by name API in a for loop with a bunch of tags. This requires the lookup process, which is slow, on every iteration.

 

2.

Can you clarify, I'm not sure what you mean. Having multiple accessory shouldn't be a problem in the vast majority of cases. You can hit determinism issues if you have a logger that is copying huge amounts of data from the cvt while a high priority process needs it, but I've never really run into any myself. Configuration can cause problems as each tag must have a unique name. Dataloggers don't care about this but control code could have conflicts.

 

3.

Generally cvt if we need this sort of application, as we just prioritize everything and test it to the extent we are comfortable with performance. we recently released something we call cvt-on-the-wire, internally, which can be used with queues to pass data around with more determinism. Link is here

https://decibel.ni.com/content/docs/DOC-36995

 

Thanks,

Daniel

0 Kudos
Message 94 of 164
(7,776 Views)

We'd like to direct most future questions to this project location:

https://decibel.ni.com/content/projects/cvt-based-reference-designs-for-machine-control

 

If you believe you will be better served by posting here, feel free to do so. It will still be actively monitored for the forseeable future. The community group above is the preferred location for new discussions.

 

Thanks,

Daniel

0 Kudos
Message 95 of 164
(7,755 Views)

@smithd wrote:

Well, we've definitely used it internally without issue. I can't go into details on specific applications, but the use case you describe is exactly what it was built for. Consider the designs discussed here:

https://decibel.ni.com/content/projects/cvt-based-reference-designs-for-machine-control

 

To answer your actual questions....

1.

Computational load will be proportional to data accesses if using the fast API, and I doubt data access would be more than 5% of an application. FGVs are lightning fast, and for a lot of these processes you can use the extremely fast group API. Ive only seen performance problems when people hit a particular pattern of using the normal by name API in a for loop with a bunch of tags. This requires the lookup process, which is slow, on every iteration.-- I'll downloard the reference API library to get familiar with some terms, otherwise I understand better that there are targeted APIs for different application requirements for data retrieval.

 

2.

Can you clarify, I'm not sure what you mean. Having multiple accessory shouldn't be a problem in the vast majority of cases. You can hit determinism issues if you have a logger that is copying huge amounts of data from the cvt while a high priority process needs it, but I've never really run into any myself. Configuration can cause problems as each tag must have a unique name. Dataloggers don't care about this but control code could have conflicts.--this relates to a scenario where say, ten applications must retrieve data from the CVT at intervals of at most 5 ms, I anticipate there would be blocking going on at that speed if the applications are not prioritized (in terms of timing)?...from experience? My next steps are to do  a prototype application using the CVT to see how it performs for my intended application.

 

3.

Generally cvt if we need this sort of application, as we just prioritize everything and test it to the extent we are comfortable with performance. we recently released something we call cvt-on-the-wire, internally, which can be used with queues to pass data around with more determinism. Link is here

https://decibel.ni.com/content/docs/DOC-36995

 

Thanks,

Daniel


 

Thanks for the detailed explanations

 

Ifeanyi
0 Kudos
Message 96 of 164
(7,738 Views)

No problem.

 

To clarify #1, it will probably make more sense if you download the API, but the basic idea is that you shouldn't do this for API-specific reasons:

bad.png

The preferred mechanism is to do this, and perform the lookup before you go into the loop:

improved.png

Since this is preferred, there are even VIs to do this:

best.png

 

 

As for #2, I think benchmarking is the only way to be absolutely sure. That having been said, if you take a look at the benchmarks section here you'll see that the data access time is very small, so there is less of a risk that your processes will collide and try to access the same resource.

 

Thanks

Daniel

0 Kudos
Message 97 of 164
(7,731 Views)

 

Hi Daniel,

 

I have had play about with the API and conceptually I understand what's going on, except for the aspect of extracting the CVT data from multiple VIs running on the same local machine. Asides using TCP/IP or UDP how else could the data be retrieved, because I "can't afford" to have a local server on the local host of the CVT? Any insights would be appreciated. If a PM is okay by you, I could send a bit of detail on the crux of the application I'm working on.

 

Thanks

 

 

CVT demo BG.jpg

 

 

CVT demo FP.jpg

Ifeanyi
0 Kudos
Message 98 of 164
(7,713 Views)

Sure, send away. Im not sure I'm clear on the issue here anyway.

 

Thanks,

Daniel

0 Kudos
Message 99 of 164
(7,700 Views)

Hello,

 

I use the CVTs for transfering data between the three loops of my RealTime-Application on a cRIO 9074. I control the process from a TouchPanel TPC-2012.

Is there a way writing or transfering the CVT-Tags directly from the TPC to the crio? So that I can use the CVT-Tags direct on the TPC? Until now I use network shared variables for this but it seem a little bit too complicate because I must write the shared variables first into the CVT-Tags and vice versa. I think that using the CVT direct has more performance.

 

Thanks for your ideas,

 

Christian

 

 

0 Kudos
Message 100 of 164
(7,542 Views)