I was exploring the features of RTI API in LabVIEW. I've already gone through some of the example programs that publishes and reads back the data. I was wondering if it possible to stream data from writer to reader, for instance streaming an array of doubles from writer to reader.
Another question is regarding whether the multicast feature is available in RTI LabVIEW toolkit.
Thanks in advance.
Solved! Go to Solution.
Of course, it is possible to stream arrays of numeric types. You can even stream your own clusters. To stream an array you have to create your own type (your own cluster with the array and other data you want to stream) and generate the required VIs for your type. To generate those VIs you have to use the "Complex Type Generator" tool. You can find it in Tools->RTI DDS Toolkit-> RTI DDS Complex Type generator.
I recommend you to have a look at the Getting Started Guide in Help->RTI DDS Toolkit->Open Getting Started Guide. There you can find a step by step tutorial about how to follow all the process.
Regarding your question about multicast. Multicast is enabled by default. Can you be more elaborate about it?
Thank you for the prompt response. In case of streaming, how do I ensure that there is a queue(FIFO) for the data stream so that I don't miss any samples if the reader becomes slow occasionally?. I found some where in the documentation for RTI DDS that it is possible to choose a KEEP HISTORY option, but haven't found out a way to configure that in LabVIEW. If that is possible, how to set the history length?
I also found about a queuing service option in connext tools. I would like to know how this is different from the 'KEEP HISTORY' option available in QoS.
By multicast, I meant to ask whether it is possible to have multiple subscribers for the same topic.
All those options are set in the QoS (Quality of Service) configuration. LabVIEW DDS Toolkit includes a set of builtin QoSs. The "ReliableProfile" fits your needs. To use it in the Advanced Create Reader/Writer VI Configuration put LabVIEWLibrary::ReliableProfile in the domainParticipantQoSProfile and dataWriterQoSProfile fields. The same for Create Reader. That should be enough.
Using the Reliable Profile should be enough for you. But in case you want to load your own customized QoSs you can do it by setting the path to the QoS xml file in the environment variable NDDS_QOS_PROFILES. Check chapter 2.3 "Quality of Service (QoS)" the Getting Started guide for more information, or follow this link:
Regarding the multicast. You don't have to do anything. Just start some writers and readers in the same network or machine and they will start communicating. Multiple readers will communicate with the same writer and vice versa.
Thank you! Can you also mention the difference between RTI DDS Streams and using the Reliable Profile which provides history buffering?
What you call RTI DDS Streams and Reliable Profile are different things. What you call RTI DDS Stream is a Publish/Subscribe communication protocol (Data Distribution System). Almost everything in the DDS protocol can be customized. In DDS the set of customizable settings is called QoS (Quality of Service). You can have your own QoS profiles or use the ones that are already built-in. Different QoSs profiles can be included in the same library to make it easier to distribute and use. What you call "Reliable Profile" is just a QoS profile used by DDS. That profile is packed in the built-in library "LabVIEWLibrary". That's why you put in the QoS LabVIEWLibrary::ReliableProfile. You are using the DDS protocol with the configurations settings in the "ReliableProfile" QoS profile of the "LabVIEWLibrary" library.
History buffering is just one of the parameters that can be customized. You can write your own QoS using xml. See the Getting Started Guide about how to load them.
I attach a QoS xml file of the included built-in library as an example.
For more information about the DDS protocol :
I think the slight disconnect is that a "stream" in LabVIEW is lossless and the DDS equivalent would require the Reliable QoS or similar.