4. LabVIEW Generation from IDL

While creating a DDS application in LabVIEW, the user must create Topic VIs which map to DDS topic types. In addition to registering a topic, the user neeeds to create DDS Read and DDS Write VIs. LabVIEW data is represented in clusters. The DDS Read and Write VIs have terminals that require a LabVIEW cluster. On data writes, the LabVIEW clusters are converted to DDS topic types and on data reads, the DDS topic types are converted to LabVIEW clusters.

The user can generate the LabVIEW clusters and DDS VIs from an IDL file.

The DDS LabVIEW Integration supports generation of LabVIEW typedefs and VIs from IDL. This chapter describes the details of the IDL-LabVIEW binding.

4.1. Generating LabVIEW VIs from an IDL File IDLPP

DDS Topic Types can be described in an IDL file. The LabVIEW IDL generation is done using the Import_IDL Tools menu in LabVIEW.

Tools/VortexDDS/Import_IDL

Import IDL

In the IDL file, ensure that any topic structures have the OSPL specific annotation pragma keylist defined. This value is added as a keylist constant to the key terminal of the generated RegisterTopic.vi.

Select the IDL file and a folder for the generated VIs.

Import IDL

Upon successful generation the VIs are located in the folder that was chosen. A dialog box appears indicating the path of the generated VIs and the IDL file.

Import IDL

4.2. Generated Artifacts

The following table defines the LabVIEW artifacts generated from IDL concepts:

IDL Concept

LabVIEW Concept

Comment

module

Appended to the name of each VI contained in the module

enum

enum

a LabVIEW .ctl file.

enum value

enum value

struct

cluster

a LabVIEW .ctl file.

field

cluster field

sequence

array

array

array

Datatype mappings

The following table shows the LabVIEW equivalents to IDL primitive types:

DDS IDL

LabVIEW Type

boolean

Boolean

char

int8

octet

uint8

short

int16

unsigned short

uint16

long

int32

unsigned long

uint32

long long

int64

unsigned long long

uint64

float

single-precision floating point

double

double-precision floating point

string

String

Unsupported DDS data types

wchar

not supported

wstring

not supported

any

not supported

long double

not supported

union

not supported

inheritance

not supported

Generated VIs and controls

For each struct in the IDL file, the following VIs and controls are generated:

  • RegisterTopic.vi

  • Write.vi

  • Read.vi

  • CicoTable.vi (Copy-in copy-out)

  • Topic cluster.ctl (corresponds to each struct in IDL File)

  • Enum.ctl (corresponds to each enum in IDL File)

The “moduleName_structName” is appended to the name of each VI and control that is generated.

4.3. RegisterTopic.vi

The RegisterTopic.vi represents a DDS topic type. The DDS topic corresponds to a single data type. In DDS, data is distributed by publishing and subscribing topic data samples.

Register Topic

Terminal Type

Optional

Name

Description

Output consumed by

Input

no

DomainParticipantHandle

DDS Domain Participant entity instance

Input

no

TopicName

DDS Topic Name

Input

yes

QosProfilePath

QoS file uri

Input

yes

QoSProfileName

Name of QoS profile

Input

yes

error in (no error)

Input Error cluster

Output

no

topicHandle

DDS Topic entity instance

create_reader.vi create_writer.vi

Output

yes

error out

Error out cluster

4.4. Read.vi

The DDS Read.vi is used to read DDS samples from a specific topic.

Register Topic

Terminal Type

Optional

Name

Description

Output consumed by

Input

no

readerHandle

DDS Reader entity instance

Input

yes

mask

read_condition masks LabVIEW cluster

Input

yes

max_samples

maximum number of samples to read

Input

yes

read_operation

READ or TAKE default operation is TAKE

Input

yes

query_expression

expression to filter samples based on a query

Input

yes

query_parameters

parameters for the query expression

Input

yes

wait_available_data _timeout

wait for data available timeout (seconds)

Input

yes

error in (no error)

Input Error cluster

Output

yes

no_of_samples

Number of samples read

user

Output

no

samples

LabVIEW cluster

user

Output

yes

dds_sample_info_array

sample information

user

Output

yes

error out

Error out cluster

4.4.1. Filters

The filtering of incoming samples can happen based on a query and/or on a sample read condition(s).

Query

query_expression: The expression is a SQL condition.

query_parameters: Each parameter element must be an array element.

Note: Query expressions are only validated at runtime. If they are incorrect, errors will occur while running the VI.

Read Condition

The read condition mask specified will filter the samples that are read or take(n).

Example: For a reader, the Sample State has Not Read selected and Read deselected.

Only samples with a Sample State Not Read will be processed with read or take. Any samples with the Read sample state will not be read or take(n).

Reader Filter

4.5. Write.vi

The DDS Write.vi is used to write DDS samples to a specific topic.

Write

Terminal Type

Optional

Name

Description

Output consumed by

Input

no

writerHandle

DDS Writer entity instance

Input

yes

write_op

write operation: WRITE, DISPOSE, WRITE_DISPOSE Default operation: WRITE

Input

no

data

samples LabVIEW cluster

DDS

Input

yes

wait_pub_matched _timeout

wait for publication matched timeout (seconds)

Input

yes

write_after_timeout

write samples after timeout

Input

yes

error in (no error)

Input Error cluster

Output

yes

error out

Error out cluster