RTI DDS Toolkit for LabVIEW Support

cancel
Showing results for 
Search instead for 
Did you mean: 

Are waveforms supported?

Does the RTI DDS Toolkit support waveforms? More importantly, does it support waveform streaming? If not direct support for the datatype, is there an example with pulling the data array out and streaming that and repackaging the waveform at the reader's end?

The Colex Group
Lead Software Engineer
Certified LabVIEW Developer
0 Kudos
Message 1 of 9
(6,668 Views)

Hi jordankuehn,

 

Waveforms are not supported since it is a LabVIEW specific type and RTI DDS Toolkit is designed to allow communications with LabVIEW/not LabVIEW based applications. We don't have any example neither. However, you can do it indirectly by sending its components separately:

- Timestamp as a string (reconverted to Timestamp in the Reader side)

- dt as single

- Y as its native numeric type

- Each property as a separate cluster.

 

Then on the Reader side, you can assemble everything to get your Waveform with the "Build waveform" VI in the Waveform palette. And set the properties with "Set Attribute".

 

Hope this helps you.

 

0 Kudos
Message 2 of 9
(6,353 Views)

@ismaelrti wrote:

Hi jordankuehn,

 

Waveforms are not supported since it is a LabVIEW specific type and RTI DDS Toolkit is designed to allow communications with LabVIEW/not LabVIEW based applications. We don't have any example neither. However, you can do it indirectly by sending its components separately:

 

 


Thank you for your reply. I will use this method to format the data into types friendly to RTI DDS and repackage on receipt.

I don't mean to parse your reply too closely, but one thing you said is curious to me. That the toolkit is designed for communications between LV and non-LV applications. Is it appropriate to say then that using the toolkit for communications between NI/LV systems is outside the main scope of this toolkit?

 

Thank you,

The Colex Group
Lead Software Engineer
Certified LabVIEW Developer
0 Kudos
Message 3 of 9
(6,343 Views)

Using the Toolkit for communications between LabVIEW systems is part of the RTI DDS Toolkit scope and it is a completely valid use case. But also is used to communicate with other applications that use DDS framework and might not be a LabVIEW based application and doesn't support Waveforms as a native type. Actually Waveform is a composed type (it can have different formats and properties) and can be decomposed into native types. Native types supported by RTI DDS Toolkit are defined in OMG DDS specification.

 

https://www.omg.org/spec/DDS/

0 Kudos
Message 4 of 9
(6,333 Views)

I hope this isn't too divergent from the OP, but I have split apart the waveform datatype and created custom reader/writer vis with the included tool based on a custom cluster. This cluster has three double arrays, a double for dt, and a double for t0. I can successfully pass this data with the default QoS, but when switching to the reliable QoS as outlined in the getting started guide there is never a valid data output. The arrays are initialized correctly and there are no errors when creating either the writer or reader or when writing and reading. If I do not wire a QoS profile it works again.

 

This is using the LabVIEWLibrary::ReliableProfile.

The Colex Group
Lead Software Engineer
Certified LabVIEW Developer
0 Kudos
Message 5 of 9
(6,320 Views)

Looks like DataReader and DataWriter are not matching. Are you using the Reliable profile in both DataReader and DataWriter?

0 Kudos
Message 6 of 9
(6,310 Views)

Yes. I also attempted the Strict Reliability as outlined in the Getting Started document. I later modified the payload and reduced it from 3 5000 element arrays to 3 2000 element arrays and it worked. If the payload size is the limiting factor is there a way to notify that it could not meet the reliability requirements? The behavior before had no errors or warnings, just never asserted the valid data? flag high.

 

Thank you for your continued assistance.

The Colex Group
Lead Software Engineer
Certified LabVIEW Developer
0 Kudos
Message 7 of 9
(6,305 Views)

Hi jordankuehn,

 

The most probable reason for that is that your waveform exceed the configured maximum size for a sample. You can set the maximum size in bytes of a sample in the QoS depending on the transport you are using. The property for shared memory and UDPv4 are:

<qos_profile>

...

   <property>

       <value>

       ...

            <element> 
               <name>dds.transport.UDPv4.builtin.parent.message_size_max</name>
               <value>9216</value>
            </element>

            <element>
                <name>dds.transport.shmem.builtin.received_message_count_max</name>
                <value>32</value>
            </element>

        </value>

    </property>

...

</qos_profile>

 

You can get more information about setting properties in the RTI Connext DDS Core Libraries User's Manual, section " Setting Built-in Transport Properties with the PropertyQosPolicy". To learn how to load your own QoS, check the DDS LabVIEW Getting Started Guide Chapter 5 "Loading Quality of Service Profiles". Hope this helps you

 

 

 

 

0 Kudos
Message 8 of 9
(6,294 Views)

- The behavior before had no errors or warnings, just never asserted the valid data?

Probably you'll see a warning log message in the Administration Panel if you enable core messages reception. You can get those messages programmatically and react. But this would not be an ideal solution. I recommend you to try to increase the maximum size per sample.

0 Kudos
Message 9 of 9
(6,286 Views)