12-31-2019 09:15 AM
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?
01-10-2020 02:07 AM
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.
01-10-2020 07:59 AM
@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,
01-13-2020 05:29 AM
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.
01-14-2020 11:07 AM
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.
01-15-2020 07:22 AM
Looks like DataReader and DataWriter are not matching. Are you using the Reliable profile in both DataReader and DataWriter?
01-15-2020 07:51 AM
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.
01-16-2020 11:37 AM - edited 01-16-2020 11:40 AM
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
01-16-2020 11:53 AM
- 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.