RTI DDS Toolkit For LabVIEW GettingStarted
RTI DDS Toolkit For LabVIEW GettingStarted
Trademarks
Real-Time Innovations, RTI, NDDS, RTI Data Distribution Service, DataBus, Connext, Micro DDS, the RTI
logo, 1RTI and the phrase, “Your Systems. Working as one,” are registered trademarks, trademarks or
service marks of Real-Time Innovations, Inc. All other trademarks belong to their respective owners.
Technical Support
Real-Time Innovations, Inc.
232 E. Java Drive
Sunnyvale, CA 94089
Phone: (408) 990-7444
Email: labview@rti.com
Website: https://support.rti.com/
CONTENTS
1 Installation
1.1 Introduction ........................................................................................................................................... 1-1
1.2 Installing ................................................................................................................................................. 1-1
1.2.1 Installing RTI DDS Toolkit for LabVIEW Support Files on a Target ................................... 1-3
1.3 Verifying Installation ............................................................................................................................ 1-6
1.3.1 LabVIEW Functions Palette ...................................................................................................... 1-7
1.3.2 LabVIEW Controls Palette......................................................................................................... 1-8
1.4 License Management ............................................................................................................................ 1-8
1.4.1 Activating the Add-on License on Windows Systems .......................................................... 1-8
1.4.2 License Management on LabVIEW RT Targets .....................................................................1-11
1.4.2.1 Installing a New License File on NI Linux Targets...............................................1-11
1.5 Upgrading .............................................................................................................................................1-11
1.5.1 Additional Steps when Upgrading from a Release Older than 1.2.0.90 ............................1-11
1.5.2 Additional Steps when Upgrading from a Release Older than 1.3.0.91 ........................... 1-14
1.6 Uninstalling.......................................................................................................................................... 1-15
1.6.1 Uninstalling RTI DDS Toolkit for LabVIEW Support Files from LabVIEW RT Targets. 1-16
1.7 LabVIEW Examples ............................................................................................................................ 1-17
1.8 Product Support .................................................................................................................................. 1-18
2 Communication Models
2.1 Publish/Subscribe – A Simple Analogy ............................................................................................ 2-2
2.2 The DDS Paradigm ............................................................................................................................... 2-3
2.3 Quality of Service (QoS) ....................................................................................................................... 2-4
2.4 DDS—Example Application ................................................................................................................ 2-5
iii
4 Tutorial
4.1 Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric) ............................... 4-1
4.1.1 Developing a VI to Publish Simple Data (Numeric) ............................................................. 4-2
4.1.1.1 Create a Writer Object to Publish a Numeric (DBL) .............................................. 4-2
4.1.1.2 Publish a Numeric (DBL)........................................................................................... 4-3
4.1.1.3 Release the Writer Object ........................................................................................... 4-4
4.1.2 Creating a VI to Subscribe to Simple Data (Numeric)........................................................... 4-5
4.1.2.1 Create a Reader Object to Subscribe to a Numeric (DBL)..................................... 4-5
4.1.2.2 Subscribe to a Numeric (DBL)................................................................................... 4-6
4.1.2.3 Release the Reader Object .......................................................................................... 4-7
4.1.3 Testing........................................................................................................................................... 4-8
4.2 Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters) ................... 4-9
4.2.1 Creating a VI to Publish a Cluster .......................................................................................... 4-10
4.2.2 Creating a VI to Subscribe to a Cluster.................................................................................. 4-12
4.2.3 Testing......................................................................................................................................... 4-15
4.3 Lesson 3—Filtering Data .................................................................................................................... 4-15
4.4 Lesson 4—Reading Only New Samples .......................................................................................... 4-18
4.5 Lesson 5—Using Keyed Types (RTI Shapes Demo) ....................................................................... 4-21
4.5.1 Working with Shapes Demo.................................................................................................... 4-21
4.5.2 Publishing a Shape (Square).................................................................................................... 4-22
4.5.3 Subscribing to Shapes .............................................................................................................. 4-24
4.6 Lesson 6—Used Nested and Multiple Keys .................................................................................... 4-27
4.6.1 Adding Multiple Top-Level Fields as Keys .......................................................................... 4-27
4.6.2 Adding Internal Cluster Fields as Keys (Nested Keys)....................................................... 4-28
4.7 Lesson 7—Reading All Samples (Reliable Communication)........................................................ 4-29
4.7.1 Writing and Reading Reliably Using the Default Configuration ...................................... 4-29
4.7.1.1 Writing Reliably ........................................................................................................ 4-29
4.7.1.2 Reading Reliably ....................................................................................................... 4-30
4.7.2 Writing and Reading using Strict Reliability ........................................................................ 4-32
4.7.2.1 Writing in Strictly Reliable Mode ........................................................................... 4-33
4.7.2.2 Reading in Strictly Reliable Mode .......................................................................... 4-34
4.8 Lesson 8—Debugging Your RTI Connext DDS Application......................................................... 4-36
4.8.1 Debugging an Application Using the Administration Panel ............................................. 4-36
4.8.1.1 Logging Messages Manually................................................................................... 4-37
4.8.1.2 Output Provided by RTI Monitor using Distributed Logger ............................. 4-39
4.8.2 Adapting a VI to Use RTI Monitoring Library ..................................................................... 4-39
4.8.2.1 Output Provided by RTI Monitor........................................................................... 4-40
4.9 Lesson 9—Using RTI DDS Toolkit on NI Targets (cRIO-9068 Example)..................................... 4-42
4.10 Reviewing Completed Solutions....................................................................................................... 4-45
iv
6.4.1.3 Debugging Table ....................................................................................................... 6-10
6.4.2 Debugging SubVIs on Real-Time Targets and Windows Systems .................................... 6-10
6.4.2.1 Get Configuration Parameters ................................................................................ 6-10
6.4.2.2 Set Configuration Parameters ..................................................................................6-11
6.4.2.3 Get DL Configuration Parameters...........................................................................6-11
6.4.2.4 Configure Distributed Logger..................................................................................6-11
6.4.2.5 DDS State Info............................................................................................................ 6-12
6.4.2.6 Reading Logged Messages ...................................................................................... 6-12
6.4.3 Logging Messages from LabVIEW......................................................................................... 6-13
A VI Descriptions
A.1 Controls Palette Types ......................................................................................................................... A-1
A.2 Functions Palette .................................................................................................................................. A-2
A.2.1 Writer ........................................................................................................................................... A-2
A.2.2 Reader.......................................................................................................................................... A-4
A.2.3 Complex-Type Templates ......................................................................................................... A-6
A.3 Tools ....................................................................................................................................................... A-6
A.3.1 DDS Debugging SubPalette ..................................................................................................... A-7
E Troubleshooting
E.1 Enabling Debugging Mode..................................................................................................................E-1
E.2 Error Codes and Possible Solutions....................................................................................................E-1
E.3 Running without an Active Network Interface ................................................................................E-8
E.4 Error Installing RTI DDS Toolkit for LabVIEW RT Support ...........................................................E-8
v
Chapter 1 Installation
1.1 Introduction
Developing heterogeneous distributed systems is a complex challenge. Individual subsystems
are often developed by independent teams, third parties, and legacy systems. These complexi-
ties can be substantially reduced by leveraging the combined power of RTI® Connext™ DDS
and National Instruments® LabVIEW™.
By using LabVIEW and Connext DDS together, you can develop advanced and unique system
architectures to simplify system integration, data communication, network bandwidth manage-
ment, and redundancy.
This document will help you install and get started with RTI DDS Toolkit for LabVIEW. The
instructions assume you are already familiar with the basics of using LabVIEW.
1.2 Installing
Note: If you are upgrading RTI DDS Toolkit for LabVIEW, skip to Upgrading (Section 1.5).
To Install RTI DDS Toolkit for LabVIEW:
1. Verify you have a supported version of LabVIEW already installed (see the Release Notes
for supported versions).
2. Login with administrator privileges.
1-1
Installing
3. Install the JKI LabVIEW VI Package Manager (VIPM) if you have not done so already
(available here: http://jki.net/vipm/download). It is typically installed in C:\Program
Files (x86)\JKI\VI Package Manager.
4. Ensure that LabVIEW is not running.
5. Launch the VIPM, then:
a. From the File menu, select Open Package File(s).
b. Locate and open the RTI DDS Toolkit for LabVIEW .vip file provided by RTI, such
as real-time_innovations_lvdds-<version>.vip.
6. Install RTI DDS Toolkit for LabVIEW:
a. Select the LabVIEW ver-
sion for which you want to
install RTI DDS Toolkit for
LabVIEW.
If you have more than one
version of LabVIEW
installed, you will be able
to select a version from a
drop-down list.
b. Select Install.
7. The VIPM will start the installation process and display a window similar to the one
below. Select Continue to proceed.
Note: When running the VIPM for the first time, the VIPM will test the connection to
LabVIEW and display the default port for LabVIEW. Select Test and allow the test to
complete.
1-2
Installing
During this step, the VIPM launches the LabVIEW version selected for the RTI DDS Tool-
kit for LabVIEW installation. The LabVIEW application will appear in the Windows Task
Bar at the bottom of your screen. You may need to open the LabVIEW application from
the Task Bar and select Launch LabVIEW before the VIPM test times out.
8. If offered, select Finish when the installation is complete.
1.2.1 Installing RTI DDS Toolkit for LabVIEW Support Files on a Target
Notes:
❏ You need administrator privileges to install the toolkit.
❏ Your target will be rebooted as part of the installation process.
To install Real-Time target support for RTI DDS Toolkit for LabVIEW:
RTI DDS Toolkit for LabVIEW support files allow you to deploy VIs using the RTI DDS Toolkit for
LabVIEW into your target. The following instructions assume you have JKI VIPM and LabVIEW
installed.
3. Install RTI DDS Toolkit for LabVIEW (RT support) by selecting Install.
a. VIPM will start the installation process. Select Continue to proceed.
b. Once installed, you can close VIPM.
c. Make sure the installation has been done correctly. After the package has been
installed, the Action should be installed and the Status should be No Errors.
Note: If the Status is Error, make sure you run VIPM as administrator.
1-3
Installing
1-4
Installing
9. Navigate to the RTI DDS Toolkit for LabVIEW feature, click on the icon to the left of the
name and select Install the feature.
Note: If you are upgrading to a newer release, make sure you select the newest version
from the drop-down list on the right side (Available version(s) on the host).
10. Click Next and verify RTI DDS Toolkit for LabVIEW is selected to be installed.
11. Click Next. The installation will start, then the target will automatically reboot.
After installation, RTI DDS Toolkit for LabVIEW will appear in the installed Software
list of your target.
1-5
Verifying Installation
1-6
Verifying Installation
1-7
License Management
1. Open the Third Party Add-ons dialog. This dialog opens automatically when LabVIEW
opens. You can also open it from LabVIEW by selecting Help, Activate Add-ons....
2. Select RTI DDS Toolkit for LabVIEW, then click on Activate Add-ons.
1-8
License Management
3. If you don't have a licenseID, click on Purchase. A web browser will open this URL:
https://softwarekey.ni.com/solo/products/ProductOption.aspx?ProdOptionID=1443.
4. Click on Order Now! and follow the instructions on the website. You will need to register
and provide some customer information. Then you will receive a License ID and Pass-
word, which you will need to activate your license:
1-9
License Management
7. Use the LicenseID and Password from Step 4 to complete the activation process. Follow
the instructions in the wizard.
1-10
Upgrading
You can copy the file using Secured FTP directly to your target. Use any FTP Client that sup-
ports sftp protocol such as Filezilla and connect directly to your target’s IP. You will be prompt to
introduce your user name and password.
If an old license file is already installed in the above folder, please replace it with the new one.
1.5 Upgrading
If you have already installed RTI DDS Toolkit for LabVIEW and are upgrading to a newer release:
1.5.1 Additional Steps when Upgrading from a Release Older than 1.2.0.90
If you have upgraded from a version previous to 1.2.0.90, you will need to follow these steps to
upgrade your VIs to a newer version. Follow these instructions after upgrading the toolkit.
1-11
Upgrading
1. The VIs that use simple types (which currently call the Create Reader/Writer subVIs) need
no additional changes to work. However, the Create Reader/Writer subVIs have been dep-
recated; their icons have changed to reflect this:
We strongly recommend that you upgrade the VIs to use the Simple Create Reader/Writer
or Advanced Create Reader/Writer. The old Create Reader/Writer subVIs will be removed in
future releases. See Chapter 6: Advanced Concepts and Settings for details.
2. For each VI using complex types (clusters, enums or arrays)
a. Open the VI. A window searching for a missing DLL will appear.
Starting in version 1.2.0.90, the RTI DDS Toolkit for LabVIEW library name changed
from lvdds.1.0.dll to rtilvdds.dll. Thus, LabVIEW cannot find that library.
b. A file browser will appear. Click Cancel and Ignore All.
c. Your VI will be loaded with a broken arrow.
d. For each Call Library Function node (CLF) in the Block Diagram,
• Open the CLF by double-clicking on it.
• Click on the folder icon to the left of the Library name or path box in the Function
tab.
1-12
Upgrading
• Click OK.
e. If you are updating a Reader subVI, the data output pin of the Read CLF may look bro-
ken. Wire a complex type of the same type as the data output as input of the Read CLF.
After LabVIEW recognizes the type, the error will be correct. Then you should delete
the type in the input and verify that the connected wire is still valid.
See also:
❏ Additional Steps when Upgrading from a Release Older than 1.2.0.90 (Section 1.5.1)
❏ Additional Steps when Upgrading from a Release Older than 1.3.0.91 (Section 1.5.2)
1-13
Upgrading
1.5.2 Additional Steps when Upgrading from a Release Older than 1.3.0.91
If you are upgrading from a version older than 1.3.0.91, you must follow these steps to upgrade
your VIs to the newer version. Follow these instructions after upgrading the toolkit.
❏ If you are using RTI subVIs: In the writer application, delete the “DDS Write Object Ref-
erence” indicator seen below.
❏ If you are using the template for Complex Types (or the CLF node directly) follow
these steps (for Readers and Writers applications):
1. Delete the “DDS Write/Read Object Reference” for readers and writers.
1-14
Uninstalling
3. Repeat steps 1 and 2 for every Call Library Function Node that calls any of these func-
tions:
• LVDDS_ReaderNode_create_simple
• LVDDS_ReaderNode_create_advanced
• LVDDS_ReaderNode_read_w_sample_info
• LVDDS_WriterNode_create_simple
• LVDDS_WriterNode_create_advanced
• LVDDS_WriterNode_write
1.6 Uninstalling
To uninstall RTI DDS Toolkit for LabVIEW:
1-15
Uninstalling
1.6.1 Uninstalling RTI DDS Toolkit for LabVIEW Support Files from LabVIEW RT Targets
To uninstall LabVIEW RT support files for RTI DDS Toolkit for LabVIEW:
7. Navigate to the RTI DDS Toolkit for LabVIEW feature, click on the icon to the left of the
name and select Uninstall the feature.
8. Click Next and verify RTI DDS Toolkit for LabVIEW is selected to be uninstalled.
9. Click Next. The uninstallation will start, then the target will automatically reboot.
1-16
LabVIEW Examples
1-17
Product Support
1-18
Chapter 2 Communication Models
2-1
Publish/Subscribe – A Simple Analogy
does not perturb existing consumers. Existing consumer’s requirements are met, regardless of
how many other consumers subscribe to the same data.
The fundamental communications model implies both discovery (i.e., what data should be sent)
and delivery (i.e., when and where to send the data). This design mirrors time-critical and mis-
sion-critical information delivery systems in everyday life (e.g., television, radio, magazines and
newspapers). The publish/subscribe network architecture is excellent at distributing large
quantities of time-critical information quickly, even in the presence of unreliable delivery mech-
anisms.
The publish/subscribe architecture maps well to high-performance and real-time communica-
tion challenges. Finding the right data becomes straightforward; nodes just declare their interest
once and the middleware handles all the details of the network and delivery. Sending the data
quickly is also inherent; publishers send data when the data is available. Publish/subscribe is
highly efficient because the data flows directly from source (publisher) to destination (sub-
scriber) without requiring intermediate servers, brokers, or daemons. Multiple sources and des-
tinations are easily defined within the model, providing inherent redundancy and fault
tolerance.
Data-Centric Publish/Subscribe (DCPS) middleware, such as the OMG Data Distribution Ser-
vice (DDS), defines a data model on top of the publish/subscribe infrastructure, allowing the
data to be structured. The schema of the data being published is declared by the application and
known to the middleware. Similar to the relational model in databases, each data type (a DDS
Topic) has an associated schema and a set of attributes that identify the ‘key’ for that Topic. Data
published on that Topic is understood by the middleware, allowing advanced capabilities such
as content-based filtering, last value (or history) caching, and applying fine-grained Quality of
Service (QoS) separately for each data-object written to the Topic.
In summary,
❏ Client/server middleware is best for centralized data designs and for systems where the
dominant communication patter is request-reply, such as file servers and transaction sys-
tems.
❏ Message passing, with its "send that there" semantics, maps well to systems with clear
and simple data-flow requirements, and requires the application to discover where data
resides.
❏ Publish/subscribe, by providing both discovery and messaging, decouples the produc-
ers and consumers effectively. DCPS middleware provides publish/subscribe services to
an application-defined data-model, allowing fine-grained control of QoS, enabling the
infrastructure to do smart-caching of the information and provide content and time fil-
tering at the source and destination. The data-centric architecture provides the best
decoupling between application components and is best suited for time-critical and mis-
sion critical distributed applications.
2-2
The DDS Paradigm
ers the publication from where it is created (a printing house) to the individual subscribers (peo-
ple's homes). This analogy is illustrated in Figure 2.1.
Note that by subscribing to a publication, subscribers are requesting current and future samples
of that publication, so that as new samples are published, they are delivered without having to
submit another request for data. By specifying a content-filter on the value of the Key (the peri-
odical name in this case) a subscriber may indicate he only wants certain periodicals (e.g., yes to
the “New York Times” and “La Strada”, but no to others). Content filters could also select based
on other attributes in the data (e.g., select the ones written in a specific language, or coming from
a specific region). Time-based filters can be used to request only a subset of the samples (e.g.,
only the Sunday edition).
Send Receive
Delivery Service
In this example, Quality of Service (QoS) parameters can be linked to delivery requirements;
only deliver the Sunday edition, the paper must be delivered by 7:00am, the paper must be in
the mailbox or on the porch, or delivered by certified mail with the subscriber signing receipt of
delivery.
QoS parameters specify how, where, and when the data is to be delivered, controlling not only
transport-level delivery properties, but also application-level concepts of fault tolerance, order-
ing, and reliability.
2-3
Quality of Service (QoS)
arrives, the middleware can cache and sort data using the Key and deliver it for efficient pro-
cessing.
Additionally, DDS is fundamentally designed to work over unreliable transports, such as UDP,
wireless, or disadvantaged networks without the requirement for central servers or special
nodes. Direct, peer-to-peer communications, and support for reliable multicasting, enable a
highly efficient data distribution model.
2-4
DDS—Example Application
loaded by the RTI DDS Toolkit for LabVIEW, so updating it will not affect the embedded QoS pro-
files.
On RTI’s Community Forum (http://community.rti.com), you can find more information about
QoS properties and XML configuration, as well as the XSD schema.
2-5
Chapter 3 A Simple Read/Write Example
The best way to learn about RTI DDS Toolkit for LabVIEW is to begin building example applica-
tions. The following example VIs provide a quick introduction to the capabilities:
❏ RTI Connext DDS Read String Example.vi
❏ RTI Connext DDS Write String Example.vi
After reading this chapter, we recommend completing the lessons in Chapter 4: Tutorial for a
more in-depth look at the capabilities of RTI DDS Toolkit for LabVIEW.
Note: The instructions for this example assume you are already familiar with LabVIEW.
Before continuing, please make sure you have the following software installed:
❏ LabVIEW (32-bit) for Windows (see the Release Notes for supported versions)
❏ RTI DDS Toolkit for LabVIEW
If you are using a computer that does not have an active network interface, see Appendix A.
We will start with the StringsDemo example VIs. To access the examples:
1. Launch LabVIEW.
2. From the LabVIEW Help menu, select Find Examples…
3. Select the Browse according to: Directory Structure radio button
4. Scroll down and open the RTI DDS Toolkit
for LabVIEW folder
5. Open the StringsDemo folder
Notes:
❏ If you see an error after opening one of the
examples (such as “This application has
failed to start because its side by side config-
uration is incorrect”), see Section 3.4.4.
❏ If the example VI seems blocked (the stop
button toggles, data does not transfer, etc.), you may have a linking issue in the VI. This
issue is very likely for LabVIEW 2010 users. Section 3.4.1 explains how to resolve this.
3-1
Publishing a String in DDS
3. From the LabVIEW Front Panel, enter some text (such as Hello DDS) in the Text field
and click the Enter Text button in the LabVIEW toolbar.
You are now writing (publishing) the string using DDS. Next we will read it from the RTI
Connext DDS Read String Example.vi.
3-2
What is Happening?
3. Verify that it is reading the same string that is being published from the RTI Connext
DDS Write String Example.vi.
While both VIs are running, verify that if you change the text in the Text control of the RTI Con-
next DDS Write String Example.vi, you will read the new text in the RTI Connext DDS Read
String Example.vi. Remember to use the LabVIEW Enter Text button in the toolbar (rather
than pressing Enter or Return on your keyboard).
Note: Under the DDS publish/subscribe paradigm, knowing the location of the distributed
applications is handled by the middleware. In this example, we are running both the RTI Con-
next DDS Write String Example.vi and the RTI Connext DDS Read String Example.vi on the
same computer, using the Shared Memory transport for inter-application communication. How-
ever, if you were to run these examples on different computers (with a functional LAN connec-
tion), DDS would automatically handle the communication across the network.
❏ Publisher side
The RTI Connext DDS Write String Example.vi uses three RTI DDS Toolkit for LabVIEW
subVIs:
• Simple Create Writer: Creates a Writer object for text (strings) and initializes it
according to the VI configuration parameters.
• Write: Receives as input: the reference from the Writer object (Create Writer) and
the text to be published (the Text control). It will continue publishing the text
within a LabVIEW loop until an error occurs or the Stop Writing control is pressed.
• Release Writer: When the Stop Writing control is pressed, the Release Writer subVI
will execute and release the Writer object.
For details on these subVIs, see Writer (Section A.2.1).
3-3
What is Happening?
If you open the Block Diagram (in the RTI Connext DDS Write String Example window,
select Window, Show Block Diagram), it will look like this:
❏ Subscriber side
The RTI Connext DDS Read String Example.vi uses three RTI DDS Toolkit for LabVIEW
subVIs:
• Simple Create Reader: Creates a Reader object for text (strings) and initializes it
according to the VI configuration parameters.
• Read: Receives as input the reference from the Reader object (Create Reader). Out-
puts the Text indicator. It continues subscribing to the text within a LabVIEW loop
until an error occurs or the Stop Reading control is pressed.
• Release Reader: When Stop Reading control is pressed, the Release Reader subVI
will execute and release the Reader object.
For details on these subVIs, see Reader (Section A.2.2).
If you open the Block Diagram (in the RTI Connext DDS Read String Example window,
select Window, Show Block Diagram), it will look like this:
3-4
Usage Notes
3.4.1 Preventing ‘Application Failed to Start’ Error when Opening Example VIs
If you see an error when LabVIEW tries to load the RTI DDS Toolkit for LabVIEW DLL (such as
“This application has failed to start because its side by side configuration is incorrect.”) after
opening any of the example VIs, you need to install the Microsoft Visual C++ 2008 Redistributable
Package (x86). This package provides the run-time components of the Visual C++ Libraries that
are required to run applications developed with Visual C++ on a computer that does not have
the Visual C++ 2008 development environment. You can download this package from http://
www.microsoft.com/download/en/details.aspx?displaylang=en&id=29
3.4.3 Preventing 'Type Code Incorrect' Error when Working with Arrays
If you are forcing the usage of arrays, you may get an error when reading/writing them. To pre-
vent this error, use sequences instead. Sequences, as well as LabVIEW arrays, can be resized and
will not cause this error. Sequences are the default mapping of LabVIEW arrays.
If you must use arrays:
3-5
Usage Notes
When using an array as the input or output for one of the RTI DDS Toolkit for LabVIEW subVIs,
you will need to initialize the array to its maximum size. Arrays within clusters must also be ini-
tialized to their maximum size. The resize functionality available in LabVIEW is not compatible
with RTI DDS Toolkit for LabVIEW.
To increase the size of an array, drag down on the bottom of the last element until you’ve
reached the largest number of elements you need. Then assign a default value to each new ele-
ment. It is usually sufficient to add one element at the end of the array.
1. In the <Connext DDS installation directory>/ndds.<version>/scripts (5.1.0 or lower) or <Connext DDS installa-
tion directory>/bin (5.2.0 or higher), look for rtiddsping and rtiddsspy.
2. RTI Launcher is a GUI-based tool provided with RTI Connext DDS Professional.
3-6
Chapter 4 Tutorial
This tutorial will help you become familiar with several key capabilities of RTI DDS Toolkit for
LabVIEW. The tutorial assumes you have the following software installed:
❏ National Instruments LabVIEW 2012 (32-bit) or later for Windows
❏ RTI DDS Toolkit for LabVIEW for National Instruments LabVIEW 2012 (32-bit) or higher
for Windows
The tutorial includes these lessons:
❏ Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric) (Section 4.1)
❏ Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters) (Sec-
tion 4.2)
❏ Lesson 3—Filtering Data (Section 4.3)
❏ Lesson 4—Reading Only New Samples (Section 4.4)
❏ Lesson 5—Using Keyed Types (RTI Shapes Demo) (Section 4.5)
❏ Lesson 6—Used Nested and Multiple Keys (Section 4.6)
❏ Lesson 7—Reading All Samples (Reliable Communication) (Section 4.7)
❏ Lesson 8—Debugging Your RTI Connext DDS Application (Section 4.8)
❏ Lesson 9—Using RTI DDS Toolkit on NI Targets (cRIO-9068 Example) (Section 4.9)
We encourage you to follow along and perform the steps in each lesson yourself—there is no
better teacher than hands-on experience. However, completed solutions are provided; see
Section 4.10.
Notes:
❏ These lessons assume you are familiar with LabVIEW.
❏ For debugging information, see Enabling Debugging Mode (Section E.1)
4-1
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
work. RTI DDS Toolkit for LabVIEW will automatically discover the location of each application
and handle communication in either scenario without any changes to the VIs.
1. Launch LabVIEW and create a new VI. Select File, New VI. Save the new VI with the
name Tutorial_Write_Double.vi.
2. Open the Block Diagram’s Functions Palette
(right-click on an open area) and select Data
Communication, RTI DDS Toolkit for Lab-
VIEW, Writer; drag and drop the Simple Create
Writer subVI into the Block Diagram.
3. The Simple Create Writer subVI has the following
input parameters:
• domain id
• topic name
• data type
• error in (no error)
For details on these parameters, see Writer (Sec-
tion A.2.1).
We will use this subVI to create a Writer object
that can publish a data type of Numeric (DBL).
We will use domain ID 0 and our Topic Name
will be Hello LV Double. To begin:
a. Right-click on the Create Writer subVI and select Select Type, Numeric (DBL)
b. Right-click on each input node (except error in (no error)) and select Create, Con-
stant. This will create a default constant for that input parameter. Set each input
parameter as follows (right-click on each and select Edit...):
• domain id = 0
• topic name = Hello LV Double
• data type = 0
c. For error in, right-click and select Create, Control.
4-2
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
1. Open the Functions Palette and select Data Communication, RTI DDS Toolkit for Lab-
VIEW, Writer, Write; drag and drop the Write subVI into the Block Diagram.
The Write subVI has the following input parameters:
• ref num in
• data
• error in
For details on these parameters, see Writer (Section A.2.1).
2. Wire the ref num out output of the Create Writer subVI (from Section 4.1.1.1) to the ref
num in input of the Write subVI.
3. We will publish the value of a Horizontal Pointer Slide control
(numeric control). Drop a Horizontal Pointer Slide control onto
the Front Panel from the Controls Palette. In the Block Dia-
gram, wire the Pointer Slide to the Write subVI’s Data input
node. Rename the slide control to Data.
4. To continuously publish the Pointer Slide value, add a While Loop around the Write subVI
in the Block Diagram. From the Functions Palette:
a. Select Programming, Structures, While Loop.
b. Use the left mouse button to drag and include both the Write subVI and the Horizontal
Pointer Slide control in the While Loop.
c. You may also add a Wait Until Next ms Multiple subVI (under Programming, Timing
from the Functions Palette) inside the While Loop if you want to specify a rate at which
Write will publish the value.
4-3
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
5. Add a Stop Button boolean to the Front Panel and wire it to the While Loop stop function
in the Block Diagram. The resulting Block Diagram should look similar to this:
1. From the Functions Palette, select Data Communication, RTI DDS Toolkit for Lab-
VIEW, Writer, Release Writer; drag and drop the Release Writer subVI into the Block
Diagram.
2. Configure its input parameters:
• ref num
• error in
For details on these parameters, see Writer (Section A.2.1).
Wire the Write subVI’s output to the Release Writer’s inputs. The resulting Block Diagram
should look similar to this:
4-4
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
1. Launch LabVIEW and create a new VI. (In LabVIEW 2012, select File, New VI.) Save the
new VI with the name Tutorial_Read_Double.vi.
2. Open the Functions Palette (right-click on an open area in the Block Diagram), then select
Data Communication, RTI DDS Toolkit for LabVIEW, Reader, Create Reader. Drag
and drop the Simple Create Reader subVI into the Block Diagram.
3. The Simple Create Reader subVI has the following input parameters:
• domain id
• topic name
• data type
• error in (no error)
For details on these parameters, see Reader (Section A.2.2).
We will use this subVI to create a Reader object that can subscribe to a data type of
Numeric (DBL). We will use domain ID 0 and our Topic Name will be Hello LV Double.
To begin:
a. Right-click on the Create Reader subVI and select Select Type, Numeric (DBL).
b. Right-click on each input node (except error in (no error)) and select Create, Con-
stant. This will create a default constant for that input parameter. Set each input
parameter as follows (by right-click on each and select Edit...):
• domain id = 0
• topic name = Hello LV Double
• data type = 0
c. Right-click on error in and select Create, Control.
4-5
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
1. To insert the Read subVI into your Block Diagram, open the Functions Palette and:
a. Select Data Communication, RTI DDS Toolkit for LabVIEW, Reader, Read; drag
and drop the Read subVI into the Block Diagram.
b. Right-click on the Read subVI and select Select Type, Numeric (DBL).
Read takes the following input parameters.
• ref num in
• query condition
• only_new_samples
• error in (no error)
For details on these parameters, see Writer (Section A.2.1).
2. Wire the Create Reader subVI’s ref num output node to the Read subVI’s ref num in input
node.
3. In this example, we will subscribe to the Numeric
(DBL) published by the Tutorial_Write_Double.vi. To
display the data, drop a Vertical Fill Slide control onto
the Front Panel from the Controls Palette. In the Block
Diagram, right-click on the Vertical Fill Slide control and
select Change to Indicator, then wire the Read subVI’s
data output node to the Vertical Fill Slide.
4. We want to continuously subscribe to the Numeric (DBL). To do so, add a While Loop
around Read in the Block Diagram. From the Functions Palette:
a. Select Programming, Structures, While Loop.
b. Use the left mouse button to drag and include both the Read subVI and the Vertical Fill
Slide control in the While Loop.
c. You may also add a Wait Until Next ms Multiple function (in the Functions Palette,
under Programming, Timing) inside the While Loop if you want to specify a rate at
which Read will subscribe to the data.
4-6
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
5. Add a Stop Button boolean to the Front Panel and wire the boolean to the While Loop stop
function in the Block Diagram. The resulting Block Diagram should look similar to this:
1. From the Functions Palette, select Data Communication, RTI DDS Toolkit for Lab-
VIEW, Reader, Release Reader; drag and drop the Release Reader subVI into the
Block Diagram.
2. Configure its input parameters:
• ref num
• error in
For details on these parameters, see Reader (Section A.2.2).
Wire the Read subVI’s outputs to corresponding inputs in the Release Reader subVI.
The resulting Block Diagram for Tutorial_Read_Double.vi should look similar to this:
4-7
Lesson 1—Using DDS to Publish and Subscribe to Simple Data (Numeric)
4.1.3 Testing
Now that both VIs are ready, we can verify that they work as expected.
While both VIs are running, you can change the value of the Horizontal Fill Slide control in
Tutorial_Write_Double.vi and see how the Vertical Fill Slide indicator displays the new values in
Tutorial_Read_Double.vi.
These VIs might execute in the same computer or on separate computers connected to the same
local area network. Either way, RTI DDS Toolkit for LabVIEW will allow the VIs communicate
without any changes to the application VIs. This capability is known as ‘location transparency.’
4-8
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
4-9
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
4. Fill the complexType cluster as shown in Figure 4.1. This process is simple: drag the fol-
lowing controls from the Palette:
1. In the Block Diagram’s Functions Palette, select Data Communication, RTI DDS Toolkit
for LabVIEW, Complex-Type Templates, Advanced Writer Template. Drop the tem-
plate into the Block Diagram.
4-10
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
4-11
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
d. Set typeName to ComplexType and keyName to Text. Optionally, set the QoS Profile
to be LabVIEWLibrary::DefaultProfile.
Note: For details on Advanced Settings, see Chapter 6: Advanced Concepts and Settings.
5. Change the Topic Name to HelloComplex.
The resulting Block Diagram should look similar to this:
1. Launch LabVIEW. In the Block Diagram from the Functions Palette, select Data Commu-
nication, RTI DDS Toolkit for LabVIEW, Complex-Type Templates, Advanced Reader
Template. Drop the template into the Block Diagram.
4-12
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
4-13
Lesson 2—Using Templates to Publish and Subscribe to Complex Data (Clusters)
Note: For details on Advanced Settings, see Chapter 6: Advanced Concepts and Set-
tings.
4-14
Lesson 3—Filtering Data
4.2.3 Testing
Now that both VIs are ready, you are ready to verify they work as expected.
With both VIs running, you can change the value of the published cluster in
Tutorial_Write_Cluster.vi and see the values update.
3. Modify Read CLFN input only new samples to be false. Then modify the value in Text
on the Writer. You will see it flicker in the Reader side between the previous and current
values. This is the expected behavior because Text is the key of our cluster. This means
that a new sample is created for each Text value provided. Even after reading the sample,
it is still alive, so it can be reached from the Reader. See Section 4.4 to learn more about
this.
4-15
Lesson 3—Filtering Data
With DDS, you can filter network data by subscribing to only the Topics of interest.
Additionally, DDS provides the capability to filter data within a Topic by specifying a
query condition for the data to match. The syntax of this query condition is similar to
standard SQL queries. We will demonstrate how to filter data with various query condi-
tions.
2. Replace the Read subVI’s query condition input constant with a text control that we can
modify while executing the VI. Right-click on the constant wired to the query condition
input of the Read subVI.
3. Select Change to Control.
4-16
Lesson 3—Filtering Data
Note: See the screenshot below for exact Query condition entry.
4-17
Lesson 4—Reading Only New Samples
9. Change the Text data in Tutorial_Write_Cluster.vi to “valid text” and modify the value
of some of the other types. Verify that you are reading “valid text” and get updated val-
ues of the other types in the reader VI.
10. Verify that when you enter any other text in the Writer VI Text field, you do not see “valid
text” or the updated values of other types in the Reader VI.
11. Here are a few other example query conditions you can try:
• “I32_Num > 0”
• “innercluster.Boolean = TRUE”
• “innercluster.Boolean = TRUE and Text = ‘valid text’”
• “innercluster.Boolean = TRUE or Text = ‘valid text’”
4-18
Lesson 4—Reading Only New Samples
With DDS, you can select whether you want to subscribe to all the available samples in
the Reader queue or just to the new ones. Using the Read subVI’s Only New Sample's
input, we can modify this behavior. When set to true, only those samples that have not
been read before are returned. When set to false, this indicates we want to re-read old
samples, even if we read them in the past. This lesson will demonstrate how this feature
may affect your system.
2. Replace the Read subVI’s Only New Samples input constant with a boolean control that we
can modify while executing the VI. Right-click the constant wired to the Only New Sam-
ples input of the Read subVI.
a. Select Change to Control.
b. Verify that the new Only New Samples boolean control is available on the Front Panel.
c. Save to file Tutorial_Only_New_Read.vi.
Now you can specify whether you want to subscribe to new samples or to any available
one. Let’s test how it works:
3. If the DDS Sample Info is not visible on the Front Panel, make it visible by right-clicking
on it in the Block Diagram and selecting Show indicator.
4. Set Only New Samples to false.
5. Run Tutorial_Only New_Read.vi and Tutorial_Write_Cluster.vi. As you will see, all the
published data is read by Tutorial_Read_Cluster.vi.
6. Modify the Text field, which is a key, in the Writer. The values in the Reader will flicker
from the new value to the previous one. In fact, in the DDS Sample Info control, you will
see that the data that is no longer published has its DDS_SampleStateKind set to
DDS_READ_SAMPLE_STATE, while the new one value is set to
DDS_NOT_READ_SAMPLE_STATE. Now we are reading any alive sample published
by the Writer, even if we had already read it.
4-19
Lesson 4—Reading Only New Samples
7. Change the Only New Samples control to True. Now we are only reading the latest pub-
lished value. Take into account that only one data sample is read each time we call the
4-20
Lesson 5—Using Keyed Types (RTI Shapes Demo)
Read subVI (see Lesson 7—Reading All Samples (Reliable Communication) (Section 4.7)).
Note: A different approach is to use Exclusive Readers and 'take' to guarantee that the
data will only be read once (see Default Configuration: DDS Entities Created by Simple
Create subVIs (Section 6.1) and Writing and Reading using Strict Reliability (Section
4.7.2)).
4-21
Lesson 5—Using Keyed Types (RTI Shapes Demo)
1. Open RTI Connext DDS Shapes Writer.vi from the LabVIEW examples ShapesDemo
directory under RTI DDS Toolkit for LabVIEW. (Instructions for finding the examples
are in Section 1.7.)
2. Open the Block Diagram and note that the VI is creating a Writer object to publish a Sha-
peType data with Topic Square. The VI uses Simulate Signal functions to generate the X
and Y coordinates of each square before the square is published.
4-22
Lesson 5—Using Keyed Types (RTI Shapes Demo)
4. Launch Shapes Demo and select the Square option under the Subscribe heading. You will
see the dialog below. Select OK.
5. Run RTI Connext DDS Shapes Writer.vi and verify that Shapes Demo displays a blue
square moving in circles.
6. Use the Front Panel to make changes to the X and Y amplitude and the frequency control.
You should see the effects in the Shapes Demo window. The X and Y amplitude control the
square’s trajectory, the frequency varies the square’s speed.
4-23
Lesson 5—Using Keyed Types (RTI Shapes Demo)
7. Change the shape size and color to vary all the parameters. While the size can be any
value, we suggest using values between 0 and 100. The color can be: PURPLE, BLUE,
RED, GREEN, YELLOW, CYAN, MAGENTA, or ORANGE.
Note: When you change the square’s color, you will still see the blue square. This is because we
defined Square as the Topic and Color as the Topic Key (instance). Using Keys allows the defini-
tion of a single Topic with multiple instances. When you change the color, you are publishing a
new instance of the Square Topic of the type ShapeType.
1. Open RTI Connext DDS Shapes Reader.vi from the LabVIEW examples ShapesDemo
directory under RTI DDS Toolkit for LabVIEW.
2. On the Front Panel, you will see two parts:
• On the left, the VI shows a table, DDS Data, in which the read shapes will be shown.
We also see a switch (DDS Stopped). By clicking on that switch, the VI will start read-
ing samples from DDS and add them to the table. In addition, we can see the informa-
tion of the currently read sample using Sample Info. We can use the Query condition
text box on top to filter data, as explained in Lesson 3—Filtering Data (Section 4.3).
Finally, we have the Stop button that stops the whole VI.
4-24
Lesson 5—Using Keyed Types (RTI Shapes Demo)
• On the right, we have a text box in which we can select one of the shapes using its key,
that is, its color. To select the shape, just add the color as shown in the color column in
DDS Data. Once selected, the position of the shape will be shown in XY Graph in real
time, while its size will be shown in Shape size.
3. Open the Block Diagram and review the three different processes:
a. Creating the Reader object and reading:
• A Reader object is created to subscribe to the type ShapeType and the Topic
Square, also providing a correct ShapesDemo cluster in the data type pin.
• Once created, the Reader object reads data from DDS using the Query Condition
introduced in the Front Panel.
• Those data, however, are only read if the DDS Stopped switch is changed to DDS
Running by clicking on it (i.e., if it is true).
• Sample Info is filled with the information of the currently read sample.
4-25
Lesson 5—Using Keyed Types (RTI Shapes Demo)
• When you push the Stop button, the Reader object is released.
4-26
Lesson 6—Used Nested and Multiple Keys
3. Click Run.
If you use one of the RTI tools such as RTI Monitor to view the
published/subscribed type, you can see that the equivalent
IDL for this use case would be:
struct superinnerClusterType{
double Dbl_Num;
ultrainnerClusterType ultrainnerCluster;
};
struct ultrainnerClusterType{
sequence<short,2> I16_Array;
};
struct ComplexType{
string<1024> Text; //@key
long I32_Num; //@key
long long I64_Num;
unsigned short U16_Num;
sequence<float,4> Sgl_Array;
innerclusterType innercluster;
};
struct innerclusterType{
float Sgl_Num;
boolean Boolean;
superinnerClusterType superinnerCluster;
};
4-27
Lesson 6—Used Nested and Multiple Keys
4. Repeat this process using Tutorial_Write_Cluster.vi, so they can communicate with each
other.
3. Click Run.
If you use one of the RTI tools such as RTI Monitor to view the published/subscribed
type, you can see that the equivalent IDL for this use case would be:
struct superinnerClusterType{
double Dbl_Num; //@key
ultrainnerClusterType ultrainnerCluster;
};
struct ultrainnerClusterType{
sequence<short,2> I16_Array;
};
struct ComplexType{
string<1024> Text; //@key
long I32_Num; //@key
long long I64_Num;
unsigned short U16_Num;
sequence<float,4> Sgl_Array;
innerclusterType innercluster; //@key
};
struct innerclusterType{
float Sgl_Num; //@key
boolean Boolean;
superinnerClusterType superinnerCluster; //@key
};
Notice that innercluster and superinnercluster are both marked as keys. This is done automati-
cally by the toolkit and is needed for a correct key specification.
Remember that the key name specification is case sensitive.
4-28
Lesson 7—Reading All Samples (Reliable Communication)
4. Save it as Tutorial_Write_Reliable.vi.
4-29
Lesson 7—Reading All Samples (Reliable Communication)
1. Open a blank VI and create an indicator of an array of doubles. Show the vertical scroll
bar of the array in the array properties, i.e., right-click in the array, select Properties and
check the Show Vertical Scroll Bar option.
2. Add an Advanced Create Reader subVI and fill in the parameters to create a Reader of
doubles, as shown in the following figure. Pay close attention to the new QoS Profile.
For details on the Advanced Create Reader subVI, see Chapter 6: Advanced Concepts
and Settings.
3. Optionally, add an Invoke note to call the method Reinitialize All to Default. This func-
tion resets all the controls and indicators in the VI to the default value. To include it, fol-
low this steps:
a. Find Invoke Node under Programming, Application Control.
b. Right-click on the invoke node and go to Select Class, VI Server, VI, VI.
c. Click on the method label and navigate to Default Values, Reinitialize All to
Default.
4. Now we need to read data and discard those values that are not valid. For that:
a. Add a Read subVI inside a While Loop.
b. Connect the Read subVI to the Create
Reader subVI.
c. Set Only New Samples to true.
d. Attach an unbundle function to the DDS
Sample Info cluster and select valid_data.
This field will be true if the data is a valid one.
e. If the type of the output data wire is not DBL, you need to modify it manually. To do
so, right click on the "Read" VI / Select Type / Numeric (DBL).
For details on the Read subVI, see Reader (Section A.2.2).
4-30
Lesson 7—Reading All Samples (Reliable Communication)
5. If the data is valid, insert it in the array. Otherwise, ignore the data:
a. Create a Case Structure from Programming, Structures and connect the output of
valid_data to the question mark.
b. Create an array indicator and connect it to the output of the Case Structure.
c. Connect the Read subVI outputs as inputs of the Case Structure, except Sample_info
cluster.
d. Create an empty array outside the While loop and connect it as input to the Case
Structure.
e. In the True case, add a Insert into Array subVI. Connect the empty array and read
value inputs as shown above. Connect the output array to the output of the Case
Structure and to Array.
f. In the False case, just wire the array input to the output array and to Array.
g. Make sure that ref num out and error wires are also forwarded by connecting them as
shown in the image above.
6. Attach the exit of the Case Structure to the While Loop. Then replace it with a shift regis-
ter by right-clicking on it and selecting Replace with Shift Register. Place the input shift
register on the left side of the loop and connect it as an input in the Case Structure as
shown below.
4-31
Lesson 7—Reading All Samples (Reliable Communication)
7. Add a Release Reader subVI and an Error Dialog. The final Block Diagram should look
like the following figure. Pay attention to the reading ratio, it needs to be faster than the
writer one or increase Reader History Depth in the XML Configuration File.
For details on the Release Reader subVI, see Reader (Section A.2.2).
8. Save it as Tutorial_Read_Reliable.vi.
9. Run the Reader and Writer. You will see how all the data transferred by the Writer
arrives at the Reader.
4-32
Lesson 7—Reading All Samples (Reliable Communication)
If you need strict reliability on your system, you can do it using exclusive readers and the builtin
QoS profile: BuiltinQosLibExp::Generic.StrictReliable. This profile is defined internally in RTI
Connext DDS (for details on Built-in profiles, see the RTI Community Forum: http://commu-
nity.rti.com/examples/built-qos-profiles).
For details on the Create Advanced Writer subVI, see Chapter 6: Advanced Concepts and
Settings.
3. Create a While Loop and put it inside a Write subVI. We are going to
send the loop counter through DDS, so attach that counter to the
Writer’s data field. You can also visualize that value by attaching an
indicator to the counter.
4. Add a Release Writer subVI and complete the VI as shown in the fol-
lowing figure. Pay special attention to the Wait function.
5. Save it as Tutorial_Write_StrictReliable.vi.
4-33
Lesson 7—Reading All Samples (Reliable Communication)
1. Open a blank VI and create an indicator of an array of doubles. Show the vertical scroll
bar of the array in the array properties, i.e., right-click in the array, select Properties and
check the Show Vertical Scroll Bar option.
2. Add an Advanced Create Reader subVI and fill in the parameters to create a Reader of dou-
bles, as shown in the following figure. Make sure you set the QoS profiles and the force-
ExclusiveReader? as shown in the following figure.
For details on the Create Advanced Writer subVI, see Chapter 6: Advanced Concepts and
Settings.
3. Optionally, add an Invoke note to call the method Reinitialize All to Default. This func-
tion resets all the controls and indicators in the VI to the default value. To include it, fol-
low this steps:
a. Find Reinitialize All to Default under Programming, Application Control.
b. Right click in the invoke node and go to Select Class, VI Server, VI, VI.
c. Click in the method label and navigate to Default Values, Reinitialize All to Default.
d. Connect it as shown in the previous figure.
4. Add a Read subVI inside a While Loop. Connect the
Read subVI to the Create Reader subVI. Set Only
New Samples to True. Then attach an unbundle
function to the DDS Sample Info cluster to check
whether the data is valid or not.
For details on the Read subVI, see Reader (Section
A.2.2).
4-34
Lesson 7—Reading All Samples (Reliable Communication)
5. If the data is valid, insert it in the array. Otherwise, ignore the data:
6. Attach the exit of the If Case to the Loop Case. Then replace it with a shift register by right-
clicking on it and selecting Replace with Shift Register. Place the input shift register on
the left side of the loop and connect it as an input in the If Case as shown below.
4-35
Lesson 8—Debugging Your RTI Connext DDS Application
7. Add a Release Reader subVI and an Error Dialog. The final Block Diagram should look like
the following figure. Pay attention to the reading ratio, it needs to be faster than the
writer one or increase Reader History Depth in the XML Configuration File.
For details on the Release Reader subVI, see Reader (Section A.2.2).
8. Save it as Tutorial_Read_StrictReliable.vi.
9. Run the Reader and Writer. You will see how all the data transferred by the Writer arrives
at the Reader.
4-36
Lesson 8—Debugging Your RTI Connext DDS Application
1. Open the Administration Panel. Then in the Tools menu, select RTI DDS Toolkit for
LabVIEW, RTI DDS Administration Panel. For more details, see RTI DDS Toolkit
Administration Panel (for Windows Systems only) (Section 6.4.1).
Note: The Administration Panel may not work on RT Targets. If you want to read mes-
sages from a RT Target, you can deploy the VI described in Reading Logged Messages
(Section 6.4.2.6).
2. Run the VI.
3. Set the Filter Level to be DEBUG LEVEL. This will cause all messages with log level of
Debug or higher to appear in the Debugging table.
4. Press Update to commit the change in the filter level.
5. Now we need to generate some messages. Open the Reader and Writer VIs from Lesson
1—Using DDS to Publish and Subscribe to Simple Data (Numeric) (Section 4.1) and click
Run.
6. Go back to the Administration Panel. You will see the generated debugging messages in
the Debugging table:
1. Save the VI with a different name, such as DebuggingWriter.vi by selecting Save as… in
the File menu.
2. Add the Log New Message subVI from the Tools’ Debugging subpalette in the Toolkit pal-
ette.
4-37
Lesson 8—Debugging Your RTI Connext DDS Application
3. Create a Log Level control by right-clicking on the Log Level input in the Log New Mes-
sage VI. Then choose Create, Control.
4. Add the Format into String function for building a debugging string. Our debugging
string will be Published the value x, where x is a double number. To do that:
a. Connect a string constant with the text Published the value at the initial value pin.
b. Connect a string constant with the text %lf to the format string pin.
c. Wire the Published Value control to the input 1 pin.
d. Connect the resulting string to the Message input of the Log New Message subVI, as
seen here:
4-38
Lesson 8—Debugging Your RTI Connext DDS Application
1. Enable Distributed Logger (see Configuration Section (Section 6.4.1.1) for details).
2. Open RTI Monitor and join to the domain in which Distributed Logger has been enabled.
3. Select the current process from the list on the left.
4. Create a New Distributed Logger Panel (push this button: ).
5. Use the State and Controls tab to set the Filter Level to Trace. This allows you to receive
all these messages:
4-39
Lesson 8—Debugging Your RTI Connext DDS Application
1. Save the VI with a different name, such as MonitoringReader.vi, by selecting Save as…
in the File menu.
2. In the Block Diagram, change the qos profile input of the Create Reader subVI to
LabVIEWLibrary::MonitoringProfile.
3. Stop Tutorial_Read_Cluster.vi and make sure that all the entities are released. To do so,
close all VIs containing RTI DDS Toolkit for LabVIEW subVIs. You can also run the Release
4-40
Lesson 8—Debugging Your RTI Connext DDS Application
Unused Entities subVI ten seconds after stopping all the VIs running in the same domain
as Tutorial_Reader_Cluster.vi.
4. Run MonitoringReader.vi and go back to Monitor. Now you can see more information
such as the topic name, the number of subscribers and publishers, the QoS profile, etc.
4-41
Lesson 9—Using RTI DDS Toolkit on NI Targets (cRIO-9068 Example)
2. Follow the installation instructions in Installing RTI DDS Toolkit for LabVIEW Support
Files on a Target (Section 1.2.1).
4-42
Lesson 9—Using RTI DDS Toolkit on NI Targets (cRIO-9068 Example)
3. Create an empty project in LabVIEW by choosing File, New Project or File, Create Proj-
ect, depending on your LabVIEW version.
4. Right-click the top-level project item in the Project Explorer window, seen in blue in the
above image. Select New, Targets and Devices from the shortcut menu to display the
Add Targets and Devices dialog box.
5. Select Existing target or device and Specify a target or device by IP address. Set the cor-
rect IP address. Select your device from the list. You can find a list of supported platforms
in the 'Supported Platforms' section of the Release Notes. Click OK.
Note: To use the "Discover an existing target(s) or device(s)" option, your host machine
must be in the same subnet as your target.
4-43
Lesson 9—Using RTI DDS Toolkit on NI Targets (cRIO-9068 Example)
6. Right-click on your new target and select New, VI. You can also add an existing one by
selecting Add, File….
7. Create your application using RTI DDS Toolkit for LabVIEW as mentioned in the previous
lessons. Save it and the project.
8. Once you are finished, run your VI as usual by clicking on the white arrow.
4-44
Reviewing Completed Solutions
9. LabVIEW will show the Deployment Progress window and will send the VI to your tar-
get. This process may take a while, depending on your VI's complexity.
Note: If you get an error related to not being able to find rtilvdds.dll, reinstall the RTI
DDS Toolkit for LabVIEW cRIO support files.
10. Once deployed, you will see a window like this:
11. Click Close and work with your VI as you normally would.
4-45
Reviewing Completed Solutions
4-46
Chapter 5 Loading Quality of Service Profiles
This chapter describes how to load personalized QoS profiles in RTI DDS Toolkit for LabVIEW.
QoS profiles provide a way to configure your DDS application and define most aspects of the
DDS paradigm and the underlying communication mechanisms.
❏ RTI DDS Toolkit for LabVIEW includes a set of predefined QoS profiles. These profiles
solve general use-cases such as a Reliable Communication or including RTI Monitoring
Library. These profiles are embedded in RTI DDS Toolkit for LabVIEW and cannot be mod-
ified. You can inherent from them.
For your convenience, you can find an XML file that shows you these profiles in C:/Pro-
gram Files1/National Instruments/LabVIEW 20xx/vi.lib/_RTI DDS Toolkit for
LabVIEW_internal_deps/RTI_LABVIEW_CONFIG.documentationONLY.xml (where
20xx depends on your LabVIEW version). As the filename suggests, this file is for docu-
mentation purposes only. This file is not loaded by the RTI DDS Toolkit for LabVIEW, so
updating it will not affect the embedded QoS profiles.
❏ RTI Connext DDS also includes several predefined QoS profiles. You can use these
directly from LabVIEW as starting points when creating your own QoS profiles. To
access these builtin profiles, use their library name and profile name (for instance, Built-
inQosLib::Generic.Monitoring.Common). For more information, consult the RTI Connext
DDS Core Libraries User’s Manual (see the chapter on Configuring QoS with XML).
For information on the format and contents of a QoS profile, consult the RTI Connext DDS Core
Libraries User’s Manual (see the chapter on Configuring QoS with XML).
The provided profiles are illustrative and might not fulfill all the desired functionalities. To
adjust them to your needs, you can create your own XML configuration file (for instance,
USER_QOS_PROFILES.xml). You can define several libraries and profiles in each unique XML
file, then refer to their names in subVI calls. For instance, LabVIEWLibrary::DefaultProfile ref-
erences the DefaultProfile, which you can see in RTI_LABVIEW_CONFIG.documentation-
ONLY.xml.
Once you have defined your desired QoS settings and stored them in a file (or files), RTI DDS
Toolkit for LabVIEW will load the settings automatically if you point it to the correct file; there are
two ways to do this. We strongly recommend the first approach, which provides a more versa-
tile solution.
5-1
❏ Environment variable NDDS_QOS_PROFILES (recommended):
You can define the environment variable NDDS_QOS_PROFILES and have it point to the
XML file that you want to load. You can specify multiple locations for a single XML doc-
ument via URL groups. The syntax of a URL group is: [URL1 | URL2 | URL2 | ... |
URLn].
For example:
[file://C:/DDS_config/USER_QOS_PROFILES.xml |
file://C:/DDS_config/ alternative_default_dds.xml]
5-2
Chapter 6 Advanced Concepts and Settings
This chapter explains some advanced concepts and describes how to configure advanced
parameters in RTI DDS Toolkit for LabVIEW.
When configuring an RTI Connext DDS application, there are many parameters that allow you to
customize your application. Some of them can be configured by executing using QoS profiles
(see Chapter 5: Loading Quality of Service Profiles). Others need to be configured at compile
time, such as the topic name and domain ID.
When using RTI DDS Toolkit for LabVIEW, you can decide to hide some of that customization to
simplify your application, or adapt your settings to match your needs. The first approach
requires you to use the Simple Create subVIs.1 These subVIs only need the mandatory parame-
ters needed for the creation of DataReaders and DataWriters: domain id, topic name and data
type.
The second approach is to use a more versatile create subVI: Advanced Create Reader/Writer. In the
following sections we will explain the different parameters that can be provided to customize
your application.
1. When creating complex-type Readers and Writers, you will need to use the Simple Create Reader/Writer Tem-
plates that can be found in the Function palette: Data Communication, RTI DDS Toolkit for LabVIEW, Complex-Type
Templates.
6-1
Default Configuration: DDS Entities Created by Simple Create subVIs
When you call the Simple Create subVIs or templates, we internally search for an existing
DomainParticipant in the domain, an existing Topic with the correct topic name, and an existing
DataReader or DataWriter of the correct data type.
As an example, consider this scenario.
First we create a Writer VI. Internally, we are creating a DomainParticipant (1), a Topic, and a
DataWriter (2). Then, if we create a Reader VI in the same LabVIEW instance, the DomainPartic-
ipant and the Topic are reused (3) and only a DataReader is created (4). When a second or third
DataReader VIs are created, the DomainParticipant (5), the Topic AND the DataReader are
reused (6). This way, all Reader VIs share the same queue.
For most applications, this configuration is sufficient. However, there are several considerations
when using shared Entities that may force you to create additional ones:
❏ If you set the flag ONLY_NEW_SAMPLES to 'true' when reading, only one of the Reader
nodes will get the data. This is due to all the Readers sharing the same DataReader.
❏ Shared DataReaders use 'read' instead of 'take' when getting new data. This prevents
shared DataReaders from using Strict Reliable QoS profile.
❏ If your application have several Writer nodes for the same Topic, the DataWriter
resources need to be adapted to handle the data produced by all the Writer nodes.
❏ If you need to create DomainParticipants, DataReaders or DataWriters with different
QoS properties, you will need to use the Advanced Create subVIs and force the creation
of those Entities.
❏ If you need to set different transport properties, you will need to create different
DomainParticipants.
Take into account that having a larger number of DDS Entities requires more resources and will
affect performance. So we strongly recommend that you avoid using additional entities when-
ever possible.
6-2
How to Configure Advanced Writer Settings
As you can see in this figure, the cluster allows you to config-
ure the following parameters:
❏ typeName: Name used to register the type in the wire.
If this parameter is not provided, a default one is
assigned (see default values in Appendix C).
❏ keyName: List of fields of a data type that will be
marked as key (see Lessons 5 and 6 of the Chapter 4,
Tutorial).
❏ domainParticipantQoSProfile: Fully qualified name
(Library::Profile) that will be used as QoS profile when
creating the DomainParticipant. If there is an existing
DomainParticipant in the domain and no new Domain-
Participant is forced (forceNewDomainParticipant
equals false), this setting has no effect. Therefore, the
DomainParticipant QoS properties remain unchanged.
❏ dataWriterQoSProfile: Fully qualified name
(Library::Profile) that will be used as QoS profile when
creating the DataWriter.
❏ forceNewDomainParticipant?: If this flag is true, a new
DomainParticipant is created even if a valid one existed for the domain. This may affect
the performance.3
❏ forceArrayMapping?: By default, LabVIEW arrays are mapped as DDS sequences. If you
need your data to use DDS arrays, set this flag to true. This will affect to all LabVIEW
arrays in the data.
❏ forceUnboundedString?: By default, strings are created with a length of 1024 characters.
If this flag is set to true, all strings are created as unbounded (their maximum length cor-
responds to the maximum 32-bit integer). This configuration optimizes the sample size,
sending only the actual data while removing the 1024-character limitation in previous
versions of the RTI DDS Toolkit for LabVIEW. This will affect all strings in the data.
2. For complex types, use the Advanced Reader Template in the function palette: Data Communication, RTI DDS
Toolkit for LabVIEW, Complex-Type Templates.
3. Read this article on the creation of multiple DomainParticipants: http://community.rti.com/best-practices/cre-
ate-few-domainparticipants-possible
6-3
How to Configure Advanced Reader Settings
As you can see in the figure, the cluster allows you to configure the following parameters:
❏ typeName: The name used to register the type in the wire. If this parameter is not pro-
vided, a default one is assigned (see default values in Appendix C).
❏ keyName: List of fields in a data type that will be marked as key (see Lesson 5—Using
Keyed Types (RTI Shapes Demo) (Section 4.5) and Lesson 6—Used Nested and Multiple
Keys (Section 4.6)).
4. For complex types, use the Advanced Reader Template in the function palette: Data Communication, RTI DDS
Toolkit for LabVIEW, Complex-Type Templates.
6-4
How to Debug an RTI Connext DDS LabVIEW Application
1. Timestamp, which is the date and time when the message was logged. It is automatically
taken from the system clock.
2. Log Level, which is an indicator of the severity of the message. The available levels, from
highest severity to lowest are:
• Fatal
• Severe
• Error
• Warning
6-5
How to Debug an RTI Connext DDS LabVIEW Application
• Notice
• Info
• Debug
• Trace
• Silent: This level means that the message will never be stored on the queue.
3. Message, which is a string containing useful information.
As mentioned before, all messages are stored in a queue. In addition to the automatically gener-
ated messages, you can create and store your own messages (see Logging Messages from Lab-
VIEW (Section 6.4.3)). The queue has associated two configuration parameters:
❏ Filter Level. Messages with a log level less severe than this Filter Level are not logged.
Default value: Warning level.
❏ Maximum number of elements. If a new message is added to the queue and it is full, the
oldest message is deleted. Default value: 512 elements.
Let’s see how the filter level restriction works with an example: the filter level is Warning Level
and my application stores the following messages:
❏ Message 1 with Error level. It is logged.
❏ Message 2 with Warning level. It is logged.
❏ Message 3 with Debug level. It is not logged.
Which kinds of messages can be logged?
There are three different ways to log new messages into the queue:
❏ From the internal RTI Logger.
These messages are automatically generated by the internal DDS functionality.
❏ From RTI DDS Toolkit for LabVIEW.
These messages are generated for the LabVIEW integration with DDS.
❏ Explicitly from your LabVIEW application.
These messages are generated manually using the subVI Log New Message.vi (Logging
Messages from LabVIEW (Section 6.4.3)).
However, once they are in the queue, all messages are treated equally.
6.4.1 RTI DDS Toolkit Administration Panel (for Windows Systems only)
The RTI DDS Toolkit Administration Panel is a set of subVIs which allow to administer your
DDS applications running on LabVIEW. Furthermore, it shows diverse DDS information or
debugging messages.
The Administration Panel is only supported on Windows systems. This VI uses System Events,
which are not supported on Real-Time (RT) targets; therefore the VI is not supported on RT tar-
gets. For details on how to debug RT targets, see Debugging SubVIs on Real-Time Targets and
Windows Systems (Section 6.4.2).
6-6
How to Debug an RTI Connext DDS LabVIEW Application
You can open the Administration Panel from the Tools menu (RTI DDS Toolkit for LabVIEW,
RTI DDS Administration Panel).
❏ The Configuration section allows you to modify the internal behavior of the toolkit and
the Administration Panel itself.
❏ The DDS state cluster shows information about the internal DDS entities created using
the RTI DDS Toolkit for LabVIEW.
❏ The Debugging table prints the messages stored in the internal logging queue.
6-7
How to Debug an RTI Connext DDS LabVIEW Application
The Debugging window is a tool for printing text information from a LabVIEW
application. On Windows systems, the Debugging windows looks like the above
figure. However, on NI Linux systems, setting this boolean parameter to True
enables messages to be logged to the console out port.
• Distributed Logger Tab: Distributed Logger will be created with the current values of
these parameters when you press Update. Then the parameters will be grayed out. To
modify these values, first you need to disable Distributed Logger (and click Update).
6-8
How to Debug an RTI Connext DDS LabVIEW Application
❏ Timeout to delete inactive DDS entities: Delay (in seconds) that internal DDS entities
are kept as “active” after releasing them. After this period, the next release call will defi-
nitely delete them. If you set it to 0, DDS entities will be deleted as soon as Release subVIs
are called. Default: 10 seconds.
❏ Filter level: Determines the minimum log-level that messages must have in order to be
added to the internal queue. The default value is WARNING LEVEL.
6-9
How to Debug an RTI Connext DDS LabVIEW Application
6-10
How to Debug an RTI Connext DDS LabVIEW Application
These parameters are global to all RTI DDS Toolkit for LabVIEW VIs and remain the same as long
as rtilvdds.dll is loaded in memory.
6-11
How to Debug an RTI Connext DDS LabVIEW Application
❏ Distributed Logger Queue Size: How many messages can be stored in the Distributed
Logger Queue.
Note: The Distributed Logger Queue Size shouldn’t be lower than the Local Logger
Queue Size, because this could make that several messages logged in the Local Logger
won’t be sent through Distributed Logger.
❏ DomainParticipant QoSProfile: The QoS Profile that will be used to create the Domain-
Participant. The format of this profile will be “Library::Profile”.
6-12
How to Debug an RTI Connext DDS LabVIEW Application
• Print table?: Indicates whether a new data was added to the table or the table has
been cleared, so the table needs to be printed.
• error out: Error standard output.
This subVI is designed to be used within a loop that will periodically read the messages one by
one. To get a table updated, the correct use of this subVI is seen the following figure. As you can
see, the input of this subVI is a shift register, which allows you to keep the previous printed mes-
sages.
Finally, the flag Print table? improves the performance by only updating the table control if a
new message was read (or if the table has been cleared).
You can find this subVI under https://github.com/rticommunity/rticonnextdds-labview-
examples/tree/master/examples/read_logging_messages.
Logging Messages Manually (Section 4.8.1.1) explains with an example how to use this subVI to
log your own messages.
6-13
Appendix A VI Descriptions
DDS State Info: This cluster contains general statistics from RTI DDS Toolkit for LabVIEW. It
includes the current number of nodes (both Reader and Writer ones), DomainParticipants,
DataReaders, DataWriters, and Topics. It also provides historical information such as the last
execution's nodes.
RTI DDS Advanced Reader Configuration: This cluster contains the advanced parameters for
the Reader Creation. Use this control with the Create Advanced Reader subVI to provide optional
parameters when creating a new Reader.
typeName String
keyName String
domainParticipantQoS String
A-1
Functions Palette
dataReaderQos String
forceNewDomainParticipant? Boolean
forceArrayMapping? Boolean
forceExclusiveReader? Boolean
forceRead? (only ExclusiveReader) Boolean
forceUnboundedString? Boolean
RTI DDS Advanced Writer Configuration: This cluster contains the advanced parameters for
the Writer Creation. Use this control with the Create Advanced Writer subVI to provide optional
parameters when creating a new Writer.
typeName String
keyName String
domainParticipantQoS String
dataWriterQos String
forceNewDomainParticipant? Boolean
forceArrayMapping? Boolean
forceUnboundedString? Boolean
A.2.1 Writer
Simple Create Writer: Creates a Writer node able to write data to the DDS network. Use the ref-
erence generated by this subVI as input to the Write subVI to send data using DDS. Use the
Release Writer subVI to release the allocated memory.
❏ Input parameters
domain id ID of the domain the application intends to join
topic name Name of Topic for which the application will write data
data type Control of the data type to be published
error in (no error) LabVIEW Error cluster in (optional)
❏ Output parameters
ref num Reference (pointer) to new Writer object
error out LabVIEW Error cluster out (optional)
Advanced Create Writer: This subVI creates a Writer node able to write data to the DDS net-
work. Introduce advanced configurations by using the control RTI DDS Advanced Writer Con-
A-2
Functions Palette
figuration.ctl. Use the reference generated by this subVI as input to the Write subVI to send data
using DDS. Use the Release Writer subVI to release the allocated memory.
❏ Input parameters
advanced writer configuration Controls of type RTI DDS Advanced Writer Configu-
ration that contains the optional parameters
domain id ID of the domain the application intends to join
topic name Name of Topic for which the application will write
data
data type Control of the data type to be published
error in (no error) LabVIEW Error cluster in (optional)
❏ Output parameters
ref num Reference (pointer) to new Writer object
error out LabVIEW Error cluster out (optional)
Write: Publishes data into a DDS network. It takes a Writer node (generated by Advanced/Simple
Create Writer) as an input parameter. The data type of the data to be written must be the same as
the data type attached to the Advanced/Simple Create Writer subVI.
❏ Input parameters
ref num in Reference (pointer) to Writer object to be used
data Control with the data to be published by DDS. Must be of the same type
as specified in the Data Type input for the Advanced/Simple Create Writer.
error in LabVIEW Error cluster in (optional)
❏ Output parameters
ref num out Reference (pointer) to Writer object used
error out LabVIEW Error cluster out (optional)
Release Writer: Releases the memory allocated for a Writer node and prepares the contained
entities to be deleted if nothing else is using them. To force the release of the contained entities,
use 'Release Unused Entities' when the defined timeout has been reached after releasing the
Writer node.
❏ Input parameters
ref num Reference (pointer) to Writer object to be released
error in LabVIEW Error cluster in (optional)
❏ Output parameters
error out LabVIEW Error cluster out (optional)
A-3
Functions Palette
Set Writer QoS: Applies a new QoS profile to an existing Writer node. If the current QoS cannot
be modified at run time, the Writer node remains unchanged.
❏ Input parameters
ref num in Reference (pointer) to Writer object whose QoS Profile will be changed
qos profile QoS profile to be applied. The expected value is a string providing the
QoS library and profile to be read from the XML file (see Appendix D for
details on where this file is located).
error in LabVIEW Error cluster in (optional)
❏ Output parameters
ref num out Reference (pointer) to Writer object used
error out LabVIEW Error cluster out (optional)
A.2.2 Reader
Simple Create Reader: Creates a Reader node that is able to read data from the DDS network.
Use the reference generated by this subVI as input to the Read subVI to get data from DDS and
store it in the appropriate LabVIEW data. Use the Release Reader subVI to release the allocated
memory.
❏ Input parameters
domain id ID of the domain the application intends to join
topic name Name of the topic for which the application will read data
data type Control of the same data type to be read
error in (no error) LabVIEW Error cluster in (optional)
❏ Output parameters
ref num Reference (pointer) to new Reader object
error out LabVIEW Error cluster out (optional)
Advanced Create Reader: This subVI creates a Reader node able to read data from the DDS net-
work. Introduce advanced configurations by using the control RTI DDS Advanced Reader
Configuration.ctl. Use the reference generated by this subVI as input to the Read subVI to get
data from DDS and store it in the appropriate LabVIEW data. Use the Release Reader subVI to
release the allocated memory.
❏ Input parameters
advanced reader configuration Control of type RTI DDS Advanced Reader Configu-
ration that contains the optional parameters
domain id ID of the domain the application intends to join
topic name Name of the topic for which the application will read
data
data type Control of the same data type to be read
error in (no error) LabVIEW Error cluster in (optional)
A-4
Functions Palette
❏ Output parameters
ref num Reference (pointer) to new Reader object
error out LabVIEW Error cluster out (optional)
Read: Gets data from the DDS network. It takes a Reader node (generated by the Advanced/Sim-
ple Create Reader subVI) as an input parameter. The data is stored in the appropriate LabVIEW
data, which is provided as an output parameter.
❏ Input parameters
ref num in Reference (pointer) to Reader object to be used
query condition Query expression to use when filtering the read samples;
empty means no filtering
only_new_samples Specifies whether to read only the new (unviewed) samples
(true) or all the available ones (false)
error in (no error) LabVIEW Error cluster in (optional)
❏ Output parameters
ref num out Reference (pointer) to Reader object used
data Indicator that will be filled with the data read from DDS.
Must be of the same type as the one specified in the Data Type
input of the Advanced/Simple Create Reader subVI
dds sample info DDS Sample Info cluster containing information about the
sample read.
error out LabVIEW Error cluster out (optional)
Release Reader: Releases memory allocated for a Reader node and prepares the contained enti-
ties to be deleted if nothing else is using them. To force the release of the contained entities, use
'Release Unused Entities' when the defined timeout has been reached after releasing the Reader
node.
❏ Input parameters
ref num Reference (pointer) to Reader object to be released
error in LabVIEW Error cluster in (optional)
❏ Output parameters
error out LabVIEW Error cluster out (optional)
Set Reader QoS: Applies a new QoS profile to an existing Reader node. If the current QoS can-
not be modified at run time, the Reader node remains unchanged.
❏ Input parameters
ref num in Reference (pointer) to Reader object whose QoS Profile will be
changed
qos profile QoS profile to be applied. The expected value is a string pro-
viding the QoS library and profile to be read from the XML
file (see Appendix D for details on where this file is located).
error in LabVIEW Error cluster in (optional)
A-5
Tools
❏ Output parameters
ref num out Reference (pointer) to Reader object used
error out LabVIEW Error cluster out (optional)
A.3 Tools
DDS Release Unused Entities: Releases all the entities generated by the Create Reader/Writer
subVIs that are not currently in use. An entity is considered ‘not in use’' if no nodes have linked
it within the defined timeout period. This is a useful way to resolve some of the errors produced
when creating new Reader/Writer nodes.
❏ Input parameters
error in LabVIEW Error cluster in
❏ Output parameters
error code RTI DDS Toolkit for LabVIEW Error Code (optional)
error out LabVIEW Error cluster out (optional)
DDS Time to LV Time: Converts a UNIX timestamp (in seconds) to a LabVIEW Time Stamp.
❏ Input parameters
X DBL
❏ Output parameters
time stamp Cluster
A-6
Tools
❏ Output parameters:
Timeout to delete inactive DDS entities I32
Filter level I32 Ring
Max number of table rows U32
Is debugging window enabled Boolean
error out LabVIEW Error cluster out
Set configurations parameters: Updates the configuration parameters of the RTI DDS Toolkit for
LabVIEW: timeout to release unused DDS entities, filter level, maximum size of the internal
queue and a boolean to enable/disable the debugging window.
❏ Input parameters:
Timeout to delete inactive DDS entities I32 - Default: 10
Filter level I32 Ring - Default: WARNING LEVEL
Max number of table rows U32 - Default: 512
Is debugging window enabled Boolean - Default: False
error in LabVIEW Error cluster in
❏ Output parameters:
error out LabVIEW Error cluster out
Get DL configurations parameters: Returns the current configuration values of the Distributed
Logger: a boolean which indicates if Distributed Logger is enabled, the domain ID where the
Distributed Logger Domain Participant has been created, and the Distributed Logger Queue
Size.
❏ Input parameters:
error in LabVIEW Error cluster in
❏ Output parameters:
Is Distributed Logger enabled? Boolean
Domain ID U32
Distributed Logger Queue Size I32
error out LabVIEW Error cluster out
A-7
Tools
Configure Distributed Logger: Enables and disables Distributed Logger. When this subVI is
enabling Distributed Logger, all the other parameters will be used to create it. These parameters
are: enable Distributed Logger, Domain Id, Distributed Logger Queue Size, DomainParticipant
QoS Profile.
❏ Input parameters:
Enable Distributed Logger Boolean - Default: False
Domain Id U32 - Default: 0
Distributed Logger Queue Size I32 - Default: 512
DomainParticipant Qos Profile String - Default: empty string
error in LabVIEW Error cluster in
❏ Output parameters:
error out LabVIEW Error cluster out
Get DDS State: Returns general statistics from RTI DDS Toolkit for LabVIEW. This includes the
current number of nodes (both Reader and Writer ones), DomainParticipants, DataReaders,
DataWriters, and Topics. It also provides historical information such as the last execution's
nodes.
❏ Input parameters:
error in LabVIEW Error cluster in
❏ Output parameters:
DDS State output DDS State Info Cluster
error out LabVIEW Error cluster out
Read One Logged Message: Appends a logging message to the table provided as input. It also
allows you to limit the maximum number of table rows; and finally, it returns a flag indicating
when the table has been modified, so it could be printed just if it has been modified.
❏ Input parameters:
Debugging table in 2D String table
Clear table? Boolean
Max number of rows U32
error in LabVIEW Error cluster in
❏ Output parameters:
Debugging table out String 2D table
Print table? Boolean
error out LabVIEW Error cluster out
Log New Message: Logs a new message into the internal queue.
❏ Input parameters:
Message String
Log level U32 Ring
error in LabVIEW Error cluster in
❏ Output parameters:
error out LabVIEW Error cluster out
A-8
Appendix B Creation and Release of DDS Entities
The table below explains when RTI DDS Toolkit for LabVIEW creates and releases DDS entities.
When an entity is released, RTI DDS Toolkit for LabVIEW deletes all ‘unused’ entities in the sys-
tem. An entity is considered ‘unused’ if no nodes have linked it within the defined timeout
period since the last subVI using it was released.
All entities (including the DomainParticipant) are created with the QoS values specified in the
QoS Profile input to the Create Writer/Reader functions.
Note: You can see when entities are created and released in the Debugging window. See
Enabling Debugging Mode (Section E.1).
B-1
DDS Entity Is Created When… Is Released When…
• An execution ends and no DDS Reader
The Create Reader function is called and or Writer objects have used the
there is not already another valid DataReader within the defined timeout
DataReader for DataReader. period.
Topic ‘x’ If the forceExclusiveReader flag is true • The DDS Release Unused Entities func-
in the Advanced Create Reader, a new tion is called from LabVIEW and no
Data Reader is created. DDS Reader or Writer objects are using
the DataReader.
• An execution ends and no DDS Reader
or Writer objects have used the DataW-
The DDS Create Writer function is riter within the defined timeout period.
DataWriter for
called from LabVIEW and there is not • The DDS Release Unused Entities func-
Topic ‘x’
already another valid DataWriter. tion is called from LabVIEW and no
DDS Reader or Writer objects are using
the DataWriter.
B-2
Appendix C Supported Data Types and Corresponding
IDL
RTI DDS Toolkit for LabVIEW supports these simple and complex data types:
❏ NUMERIC
• INT8a • UINT8a
• INT16 • UINT16
• INT32 • UINT32
• INT64 • UINT64
• FLOAT/SINGLE
• DOUBLE
a. INT8 and UINT8 are both mapped as octets. We recommend using UINT8, since octets are not signed.
❏ BOOLEAN
❏ TEXT (STRING)
❏ ENUM
• UINT 32
❏ ARRAYS OF TYPE
• NUMERIC (INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64, FLOAT,
DOUBLE)
• BOOLEAN
• ENUM
❏ CLUSTER WITH ANY COMBINATION OF:
• NUMERIC
• BOOLEAN
• TEXT (STRING)
• ENUM
• ARRAY
• CLUSTER
For other DDS applications to communicate with VIs that use RTI DDS Toolkit for LabVIEW, you
need to use compatible data types in both applications.
C-1
❏ Simple types have fixed IDLs that are listed in Table C.1.
❏ Clusters use a direct mapping of their configuration into a C struct, see Corresponding
IDL for Complex Data Types (Section C.1).
Table C.1 Simple Data Types and Corresponding IDL
Data Type Sample Entry in IDL Default TypeNamea
INT8
struct Int8Struct{
octet value; DDS::Octets
};
INT16
struct Int16Struct{
short value; DDS_Short
};
INT32
struct Int32Struct{
long value; DDS_Long
};
INT64
struct Int64Struct{
long long value; DDS_LongLong
};
UINT8
struct UnsignedInt8Struct{
octet value; DDS::Octets
};
UINT16
struct UnsignedInt16Struct{
unsigned short value; DDS_UnsignedShort
};
UINT32
struct UnsignedInt32Struct{
unsigned long value; DDS_UnsignedLong
};
UINT64
struct UnsignedInt64Struct{
unsigned long long value; DDS_UnsignedLongLong
};
FLOAT
struct FloatStruct{
float value; DDS_Float
};
DOUBLE
struct DoubleStruct{
double value; DDS_Double
};
BOOLEAN
struct BooleanStruct{
boolean value; DDS_Boolean
};
C-2
Table C.1 Simple Data Types and Corresponding IDL
Data Type Sample Entry in IDL Default TypeNamea
Default:
struct DDS_String{
STRING string<1024> value;
};
DDS::String
Forcing use of unbounded string:
struct DDS_String{
string value;
};
Default:
struct ArrayStruct {
sequence<short, nDim>
value;
ARRAY of the above types }
(This example uses INT16 and DDS_Default_TypeName
nDim elements.) Forcing use of array:
struct ArrayStruct
{
short value[nDim];
}
a. If you do not provide a TypeName, a “Default TypeName” is assigned depending on the type. This may cause con-
flicts if several cluster types are defined in the same DomainParticipant.
C-3
Corresponding IDL for Complex Data Types
struct ultrainnerClusterType{
sequence<short,2> I16_Array;
};
struct innerclusterType{
float Sgl_Num;
boolean Boolean;
superinnerClusterType superinnerCluster;
};
1. If forceUnboundedString? is set to true, IDL correspondence will be string Text;. And you will need to run the
rtiddsgen with the option –unboundedSupport.
C-4
Corresponding IDL for Complex Data Types
C.1.2 Enums
The IDL representation for an enum depends on the elements it is composed of. Remember that
only 32-bit enums are supported. Also, if no type name is provided, we use DDS_Enum as type
name. This may cause conflicts if different enum-types are defined in the same DomainPartici-
pant.
For example, the enum in the figure
on the right would have the following
IDL representation for a Type Name
"MyType":
struct EnumStruct{
MyTypeEnum MyType;
}
enum MyTypeEnum {
example_value_0 = 0,
example_value_1 = 1,
example_value_N = 2
};
When the enum is inside a cluster, the representation is slightly
different, so several enums can be contained in the same cluster.
For the cluster on the right (containing two instances of the enum
used in the previous example), the corresponding IDL would be:
struct MyType{
MyEnum_1Enum MyEnum_1;
MyEnum_2Enum MyEnum_2;
};
enum MyEnum_2Enum {
example_value_0 = 0,
example_value_1 = 1,
example_value_N = 2
};
enum MyEnum_1Enum {
example_value_0 = 0,
example_value_1 = 1,
example_value_N = 2
};
C-5
Appendix D File Folders Installed within LabVIEW
❏ DLLs
• \LabVIEW 20xx\vi.lib\_RTI DDS Toolkit for LabVIEW_internal_deps
❏ Examples
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\ClusterDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\cRIO-9068Project
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\LogMessagesDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\MonitoringDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\NumberDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\ReadAllDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\ShapesDemo
• \LabVIEW 20xx\examples\RTI DDS Toolkit for LabVIEW\StringsDemo
D-1
File Folders on NI Linux Targets
D-2
Appendix E Troubleshooting
Error
Error Message Possible Reason(s) Additional Information
Code
RTI DDS Toolkit for LabVIEW found an
Something failed in a pre-
error status in the input error cluster. It
5001 vious stage (wired error
might be due to an error in the previous
input)
stage.
Check that the type of all transferred/ LabVIEW data connected to the data
Error handling the pro- received data is the same and is similar type pin in the Create Reader or Create
5002
vided LabVIEW Data to the one connected to the data type in Writer does not correspond with the type
the Create Reader/Writer subVIs. sent/received or is missing.
It is likely that another application is still
Unable to delete the con-
using an entity of that Participant. Close
5003 tained entities of a partici-
all the instances before trying to delete You can also delete the unused con-
pant tained entities by using the DDS Release
the contained entities.
Unused Entities subVI (in RTI DDS Tool-
It is likely that another application is still kit for LabVIEW, Tools)
Unable to delete a partici-
5004 using that Participant. Close all the
pant
instances before trying to delete it.
It is likely that another application is still
Unable to finalize the using the DomainParticipantFactory.
5005
DomainParticipantFactory. Close all the instances before trying to
delete it.
E-1
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
QoS setting format is incorrect or does
not match with any of the ones existing
Bad QoS settings in the XML file. Check that format is cor-
5006
(Library::Profile) rect (Library::Profile), the XML file
exists, and it contains a correct configu-
ration.
Possible error in the QoS configuration.
You can also use the default configura-
Review the QoS profile for the Partici-
tion by attaching an empty string as
pant. Modify the QoS profile to work
Unable to assert (find or input to the Create Reader/Writer subVI.
5007 without an active network interface as
create) a Participant. This may be caused by not having an
explained in Running without an Active
active network interface in the system.
Network Interface (Section E.3).
If the monitoring library is being used, it
needs to be in the PATH.
This might be caused by an unused
entity that has not been released.
Unable to register the type
Close the current VI and release unused
because there exists
5008 entities using the DDS Release Unused
another entity with same
Entities subVI (in RTI DDS Toolkit for
configuration
LabVIEW, Tools). Then re-open the cur-
rent VI.
Possible error in the QoS configuration.
Check that format is correct
Unable to get the Partici- (Library::Profile), the XML file exists
Review the QoS profile for the Partici-
5009 pant QoS for a given pro- and it contains that profile. You can also
pant.
file. use the default configuration by attach-
ing an empty string as input to the Create
Reader/Writer subVI.
Unable to update the num-
ber of applications access- This might cause a memory leak when
5010
ing to the Participant releasing the participant.
(client count property).
Check that the QoS configuration pro-
vided is correct. You can also use the
Unable to set the QoS Prop- Review the QoS profile for the Partici-
5011 default configuration by attaching an
erties to the participant. pant.
empty string as input to the Create
Reader/Writer subVI.
Unable to get the descrip- Check that the Reader/Writer was cor-
5012
tion of the topic. rectly created (no previous errors).
Type connected to the Check that the correct type is connected If you recently modified the type, releas-
Read/Write function is to the Create subVI. A correct Type Defi- ing the unused entities or reopening the
incompatible with the cur- nition is (Library::Type). String length VI might solve the problem. Remember
5013
rent implementation or dif- and array size need to be compatible that LabVIEW arrays of more than one
ferent than the one in the between the Create and the Read/Write dimension cannot be mapped as
Create subVI subVIs. sequences.
Check that the QoS profile exists in the
XML file and that configuration pro-
Review the QoS profile for the Topic.
Unable to assert (find or vided is correct.
5014 Make sure you are selecting the correct
create) a Topic. You can also use the default configura-
settings (Library::Profile).
tion by attaching an empty string as
input to the Create Reader/Writer subVI.
E-2
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
Review the QoS profile for the Publisher.
Implicit publisher is needed to create the Make sure you are selecting the correct
Unable to get the implicit Writer. Check that the participant config- settings (Library::Profile).
5015
publisher. uration is correct and that there are no You can also use the default QoS setting
previous errors. by attaching an empty string to the qos
profile pin of the Create Writer subVI.
It might be due to a memory restriction
(not enough memory available to
Unable to get all the Data
recover the existing Data Writers).
5016 Writers in the given partici-
Using the DDS Release Unused Entities
pant.
subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this problem.
Unable to create the Data Check that the QoS configuration pro-
5017
Writer. vided for the Data Writer is correct.
Check that Create Writer was successful
and that the reference passed to the Write Review the QoS profile for the Data
Unable to get the QoS
function is the one provided as output Writer.
5018 Properties from a Data
from the Create function. It might also be
Writer. Make sure you are selecting the correct
a problem in the QoS setting provided
settings (Library::Profile).
(use default ones as a safest option).
You can also use the default QoS setting
Check that Create Writer was successful by attaching an empty string to the qos
and that the reference passed to the profile pin of the Create Writer subVI.
Unable to set the QoS Prop- Write/Set_QoS_Setting function is the
5019
erties for a Data Writer. correct one. It might also be a problem in
the QoS setting provided (use default
ones as a safest option).
Unable to update the num-
This might cause a memory leak when
5020 ber of applications using a
releasing the Data Writer.
Data Writer.
This is an unexpected error. Contact lab-
view@rti.com or visit our Community
Unable to narrow the
5021 Portal at http://community.rti.com to
Dynamic Data Writer.
view current solutions and forum
entries.
Review the QoS profile for the Sub-
scriber.
Implicit subscriber is needed to create
Make sure you are selecting the correct
Unable to get the implicit the Reader. Check that the participant
5022 settings (Library::Profile).
subscriber. configuration is correct and that there are
You can also use the default QoS setting
no previous errors.
by attaching an empty string to the qos
profile pin of the Create Reader subVI.
It might be due to a memory restriction
(not enough memory available to
Unable to get all the Data
recover the existing Data Writers).
5023 Writers in the given partici-
Using the DDS Release Unused Entities
pant.
subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
E-3
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
Unable to create the Data Check that the QoS configuration pro-
5024
Reader. vided for the Data Reader is correct. Review the QoS profile for the Data
Reader).
Unable to get the QoS
Make sure you are selecting the correct
5025 Properties from a Data Check that Create Reader was successful
settings (Library::Profile).
Reader. and that the reference passed to the Read
You can also use the default QoS setting
function is the correct one. It might also
by attaching an empty string to the qos
be a problem in the QoS setting provided
Unable to set the QoS Prop- profile pin of the Create Reader or Create
5026 (use default ones as a safest option).
erties for the Data Reader. Writer subVI.
E-4
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
Data Writer timed out or ran out of
resources. Using the DDS Release Unused
Entities subVI (in RTI DDS Toolkit for
5038 Unable to write data.
LabVIEW, Tools) might fix this.
Check that you attached a valid indica-
tor/storage to the write output.
There was a problem when allocating
memory.
Unable to initialize the
5039 Using the DDS Release Unused Entities
semaphore for the DLL.
subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
Unable to create the Query Check that the Query Condition is cor-
A regular expression will also work (for
5040 Condition to filter Read rectly set. To read everything, set it to *
instance: Text=’hello’).
subVI. or leave it empty.
The type connected to the
Create subVI is not sup- The Getting Started Guide provides more See Appendix C: Supported Data Types
5041
ported in the current ver- information about the supported types. and Corresponding IDL.
sion.
Other applications might be using it.
Unable to unregister the Using the DDS Release Unused Entities
5042
Type Code. subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
This error happens if you created and
run the Reader/Writer and then you
The LabVIEW Type changed but wasn't
modified the type connected to the cre-
The LabVIEW Data Type correctly initialized (using Create subVI).
5043 ate subVI.
connected has changed. You might need to close the VI and re-
Close and re-open the VI or use the DDS
open it to removed unused entities.
Release Unused Entities subVI (in RTI
DDS Toolkit for LabVIEW, Tools).
It might be due to a memory restriction
(not enough memory available to
Unable to get all the avail- recover the existing Topics).
5044
able Topics. Using the DDS Release Unused Entities
subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
Warning: Unable to delete Other instances of LabVIEW are cur- This is not an error, just a warning. Clos-
5045 one or several DDS Enti- rently using one or several of the DDS ing all running VIs should release all the
ties. Entities. remaining DDS Entities.
Unable to get the Topic's Review the QoS profile for the Topic.
5046 Make sure you are selecting the correct
QoS. Check that the Topic's QoS provided was
settings (Library::Profile).
correct and that the Topic was initialized
You can also use the default QoS setting
Unable to set the Topic's using the Create Reader or Create Writer by attaching an empty string to the qos
5047 subVI.
QoS. profile pin of the Create Reader or Create
Writer subVI.
On LabVIEW RT targets, please verify
the license file under /home/lvuser/rti. For details on the license file, see License
Unable to access library
5048 The RTI DDS Toolkit for LabVIEW Management on LabVIEW RT Targets
handler.
dynamic library was not loaded cor- (Section 1.4.2).
rectly.
Unable to take the sema- Another thread may already be using the
5049
phore DLL.
E-5
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
Internal error due to default configura-
tion issues. Contact labview@rti.com or
Unable to recover partici-
5050 visit our Community Portal at http://
pant's default QoS
community.rti.com to view current solu-
tions and forum entries.
Make sure you are selecting the correct
Unable to load QoS profiles Error in QoS properties. Verify all pro- settings (Library::Profile).
from the embedded config- files loaded by the You can also use the default QoS setting
5051
uration or external XML NDDS_QOS_PROFILES environment by attaching an empty string to the qos
files variable. profile pin of the Create Reader or Create
Writer subVI.
Usual format is Library::Type. Avoid
5052 Incorrect type name.
using spaces.
Required parameters for Create subVIs:
One of the required param- These pins are also required for the clus-
domain_id, topic_name, type_name,
5053 eters of the subVI is miss- ters even if you use Call Library Func-
data_type; for Read/Write subVIs: ref_in
ing tion (CLF) calls instead of a subVI.
and data; for Release: ref_in.
Another application has finalized the
Unable to access to the
5054 TypeCode Factory and there was an
Type Code Factory.
error while reinitializing it. Retry.
The cluster used is incompatible. Make
sure all field labels exist and are compat-
Unable to add a new mem-
5055 ible with text-based languages: no See Appendix C: Supported Data Types
ber to the Type Code.
spaces. Make sure all used types are sup- and Corresponding IDL for details on
ported. the supported types.
Unable to create the Type The attached cluster is incompatible with
5056
Code. the supported one and cannot be created.
Check that the correct data type is con-
Unable to set the Dynamic
5057 nected to the subVI (pay special atten-
Data.
tion to Create Reader/Writer ones).
Check that the correct data type is con-
Unable to get the Dynamic
5058 nected to the subVI (pay special atten-
Data.
tion to Read/Write ones).
Review the QoS profile for the Reader/
Writer.
There may be an incompatible QoS Pol-
Some QoS setting cannot be applied
icy. Check that the provided profile
Invalid profile provided to once the Reader/Writer is created unless
5050 exists. Once created, some QoS settings
the Set QoS subVI. you completely delete it. Close and
cannot be modified. Try using that QoS
reopen the VI or use the DDS Release
Policy in the Create subVI.
Unused Entities subVI (in RTI DDS Tool-
kit for LabVIEW, Tools).
This might block another thread from
Unable to give the sema-
5060 using the RTI DDS Toolkit for LabVIEW
phore.
API.
Another application was already delet- You can also delete the unused con-
Unable to lock/unlock the
ing the Participant. tained entities by using the DDS Release
5061 Participant to create the
Removing unused entities or closing the Unused Entities subVI (in RTI DDS Tool-
Reader.
VIs might fix this problem. kit for LabVIEW Tools).
Reached the maximum Using the DDS Release Unused Entities
5062 number of participants subVI (in RTI DDS Toolkit for Lab-
allowed in the system. VIEW, Tools) might fix this.
E-6
Error Codes and Possible Solutions
Error
Error Message Possible Reason(s) Additional Information
Code
This is an unexpected error. Contact lab-
view@rti.com or visit our Community
Unable to create the system
5063 Portal at http://community.rti.com to
clock.
view current solutions and forum
entries.
There was a problem when allocating
Unable to create the Type memory.
5064 Support needed to register Using the DDS Release Unused Entities
a type. subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
The type name provided is already regis-
Unable to assign that type tered and used by some entities.
5065 name to the Topic because Using the DDS Release Unused Entities
it is currently in use. subVI (in RTI DDS Toolkit for Lab-
VIEW, Tools) might fix this.
The current implementation only sup-
The attached enum is not a To change the representation, right-click
ports 32-bit enumerators. Change the
5066 32-bit one. Only 32-bit enu- in the indicator/control and select Rep-
enumerator representation or use an
merators are supported. resentation—>U32.
8-bit or 16-bit integer.
Unable to create the key KeyName should be a string containing
with the provided string. the key names separated by semicolons
5067 See Section 4.6 for further details.
Might be a memory alloca- (';'). The fields inside a cluster can be pro-
tion problem. vided in the form 'cluster.field'.
Use the shipped profile 'LabVIEWLi- The current implementation of a non-
Unable to create Data
brary::ReliableProfile' to use Reliable exclusive Reader uses 'read' instead of
Reader with KEEP_ALL
5068 Communication with Shared Readers. If 'take', so strictly reliable communication
history kind. Use case not
you need Strict Reliability, use Exclusive is not compatible with non-exclusive
supported.
Readers. Readers.
Incompatible configura- Using a depth bigger than 1 for the his-
tion: History depth > 1 tory property and not setting the
Review the QoS profile for the Data
5069 needs 'only_new_samples' 'only_new_samples' could cause that
Reader.
flag in the Read subVI to be samples stayed unread. Change the QoS
'true'. configuration or set the flag to 'true'.
Unable to extract informa-
Make sure you are using the cluster 'RTI
tion from the Advanced
5070 DDS Advanced Writer Configura-
Writer Configuration con-
tion.ctl' contained in LVDDS_Library.
trol.
Unable to extract informa-
Make sure you are using the cluster 'RTI
tion from the Advanced
5071 DDS Advanced Reader Configura-
Reader Configuration con-
tion.ctl' contained in LVDDS_Library.
trol.
Make sure the size of the Local Logger is
The Local Logger is not
5072 not a negative number.
correctly initialized.
E-7
Running without an Active Network Interface
Error
Error Message Possible Reason(s) Additional Information
Code
Check that the Distributed Logger
Queue Size is a positive number and the
Unable to create Distrib-
5074 QoS setting format is correct
uted Logger.
(Library::Profile), the XML file exists,
and it contains a correct configuration.
Unable to delete Distrib- Make sure Distributed Logger has not
5075
uted Logger. been previously deleted.
E-8