SDK that bridges the gap between data acquisition devices, in an era where incompatibility is the norm
An open-source implementation of iDDS (Instrumentation Data Distribution Service) developed using CycloneDDS (CycloneDDS C++ Binding) for openDAQ.
iDDS is an embedded application protocol for data acquisition and control instruments. It uses Data Distribution Service (DDS), a widely adopted data communications protocol that follows a data-centric model.
- Open-source iDDS wrapper built on top of CycloneDDS
- idds-xml-parser for schema validation, encoding, and decoding of iDDS commands
- Node discovery for automatic detection of connected iDDS devices
- Infrastructure to send and receive commands from other iDDS nodes
- Data streaming support for real-time data exchange
- Interoperability with other iDDS implementations
- Configurable QoS for flexible integration
- Client/Server openDAQ modules to streamline test system development
For details on the idds_wrapper and iDDS topics please refer to idds_wrapper README.
.
├── cmake # CMake scripts
├── CMakeLists.txt # Top-level CMake file
├── examples # Examples folder
├── external # External libraries and dependencies
├── idds_client_module # Client-side implementation of the openDAQ iDDS module
├── idds_server_module # Server-side implementation of the openDAQ iDDS module
├── idds_wrapper # Wrapper code around CycloneDDS
├── idds_xml_parser # XML parser for the iDDS Command subsystem
├── LICENSE # License file
└── README.md # Project documentation
By default, these options are enabled:
set(IDDS_ENABLE_EXAMPLE "Enable Examples" ON)
set(IDDS_ENABLE_TESTS "Enable Tests" ON)
# On a clean repository:
mkdir build
cd build
cmake ..
cmake --build --parallel
# On a clean repository:
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build
This example demonstrates the operation of two iDDS devices using the iDDS wrapper.
- Simple Device Example:
- Creates an instance of an iDDS device.
- Complete Device Example:
- Creates an iDDS device instance.
- Prints available iDDS devices.
- Sends a
Configuration.GetAttribute
command. - Subscribes to a
channelID
. - Sends
General.StartOperating
andGeneral.StopOperating
commands. - Requires user input between stages.
- By default, all subscribed channels will be printed.
- Sine Wave:
Channel.1 (Name) - 6445 (ID)
- Saw Tooth Wave:
Channel.2 (Name) - 6446 (ID)
cd build/bin
./idds-simple-device
On another terminal instance:
./idds-complete-device
Nodes in an iDDS network advertise their presence and nature using periodic advertisement messages every 5 seconds. A network host can support multiple nodes, each identified by a system-wide unique node identifier (e.g., <manufacturer><productType><serialNumber>
). Nodes can also have logical identifiers and are referenced in control messages using their unique identifiers.
The iDDS wrapper currently implements three DDS topics:
ParameterDataSeries
(Domain 2) - Used for data streaming.Message
(Domain 0) - Used for sending commands between iDDS devices.AboutNode
(Domain 0) - Used for node discovery.
The IDL definition for these topics can be found in:
idds_wrapper/idl/iDDS.idl