Jump to content
OpenSplice DDS Forum

All Activity

This stream auto-updates     

  1. Last week
  2. Earlier
  3. I am having issues where data is only being sent if writer are being kept alive for unknown periods of time e.g. the following does not work. { Data data; dds::pub::DataWriter<Data> writer = ... create the writer ... writer << data; } If the writer is let to persist for longer then the data is sent but in the case where the writer is destroyed "shortly" after the data is written no data is sent. Is that expected behavior or a bug. I would expect any data to be sent independent of when the writer is destructed. Thanks, Harald
  4. I'm using idlpp (isocpp2) to generate from a large union. Compilation error C1061 occur in generated header files. Methods " bool operator==( ...)" raise this error because of the use of if / else if instead of a switch.
  5. Hans van 't Hag

    How to detect DDSi2 service has not started?

    Hi Joffrey, Sorry for the delayed response, we had issues with the domain-registration of this forum and have been offline for over a month .. W.r.t. your question for a programmatic way to detect certain errors/warnings, we have a feature called a 'reportPlugin' which is documented in the deployment manual and which allows for a user-library to be plugged-in and that can access any info/warning/error message that (normally/also) goes to the ospl_info and ospl_error log(s). Perhaps that would help you creating the awareness that something went wrong w.r.t. service-configuration and/or interfaces not being available. Regards, Hans
  6. I'd check out "Eclipse Cyclone DDS" (https://projects.eclipse.org/projects/iot.cyclonedds) which we recently donated to the Eclipse foundation and which is a low-footprint implementation of DDS. Don't think its been ported to arduino yet though .. but we of course invite the community to participate in this (new) project. Cheers, Hans
  7. Hans van 't Hag

    register_instance vs lookup_instance

    Hi, When writing the same instance (i.e. key-value) repeatedly (but with different non-key field values), its fine to utilize the same handle. The handle is a local-concept (so can't be shared between participants) and can improve performance when writing specific instances from large (key-)sets. Note also that its not mandatory to use the register_instance, if you don't explicitly register the instance, it will be done implicitly yet costs a little time to locate the 'right instance' based on the value of the key-fields in the provided sample. Note also that an error will be raised when the key-fields of any provided sample in a write doesn't match with the instance-handle (if provided) Hope this helps, -Hans
  8. Hans van 't Hag

    Number / Last Participant

    Hi, Another option is to exploit the notion of 'built-in-topics' in DDS that allow you to 'discover' any participant/publisher/subscriber/topic in the system by simply reading this meta-data from these pre-defined topics. In the OpenSplice examples-section I believe there is an example on how to do that .. Regards, Hans
  9. Hans van 't Hag

    CMSOAP Interface

    Hi, The CMSOAP interface is an internal interface used by our Tuner/Tester tools (that allows these tools to 'connect' to any remotely deployed DDS-system as long as there's one node in that remote DDS-system that has our 'soap-service' configured as one of the pluggable services of OpenSplice. It is not related to the DDS-WEB specification Regards, Hans
  10. bdavis

    CMSOAP Interface

    Is this documented anywhere? Any relation to this specification? https://www.omg.org/spec/DDS-WEB/About-DDS-WEB/ Thanks, Bud
  11. Making the right data available at the right time, at the right place, securely, efficiently, whilst promoting interoperability, is a key need for virtually any IoT application. After all, IoT is about leveraging access data – that used to be unavailable – in order to improve the ability to react, manage, predict and preserve a cyber-physical system. The Data Distribution Service (DDS) is a standard for interoperable, secure, and efficient data sharing, used at the foundation of some of the most challenging Consumer and Industrial IoT applications, such as Smart Cities, Autonomous Vehicles, Smart Grids, Smart Farming, Home Automation and Connected Medical Devices. In this presentation we will (1) introduce the Eclipse Cyclone DDS project, (2) provide a quick intro that will get you started with Cyclone DDS, (3) present a few Cyclone DDS use cases, and (4) share the Cyclone DDS development road-map. View the full article
  12. Hello, I am trying to set a Linux-based device running OSPL with promiscuous mode at its ethernet interface, but I do not want to be overflown with data from the IP network the device is located in, as it seems that malfunction when it happens. I know that I can set promiscuous mode in the rc.local file of /etc, but afterwards I guess I should set a filter for traffic that allows DDS data transfer but no other kinds of information. My question is: Is there any other IP address, or IP range of addresses, that should be taken into account, aside from the IP used by DDS for multicast communciations (239.255.0.1)? Regards.
  13. Hi everyone, I am using OpenSplice community edition 6.7.1.1 with C# API. In the DDS configuration file, I am forcing OpenSplice to use interface 10.10.0.1: <DDSI2Service name="ddsi2"> <General> <NetworkInterfaceAddress>10.10.0.1</NetworkInterfaceAddress> <AllowMulticast>spdp</AllowMulticast> <EnableMulticastLoopback>true</EnableMulticastLoopback> <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking> </General> If I disable the NIC assigned to 10.10.0.1 and start OpenSplice, the error log indicates that the service did not find the interface and terminates: However, in Opensplice, there is no indication that the service is not running, e.g. I can call CreateParticipant(). Or publish data by calling DDS.IDataWriter().Write() always returns Ok. Is there a programmatic way to dectect that the service is not running? Many thanks, Joffrey
  14. Hi Everyone! I'm trying to use DDS as Standalone CPP on my Linux system and I'm getting interesting error messages and results crashes of my program. I'm using V6.7.17 community edition and attached my configuration + some of the error files. I'd be grateful if someone knows why the Durability Service can't be started when you take a look at the ospl-error.log files. ospl-error.log ospl-info.log ospl-error.log ospl-info.log ospl.xml
  15. I just started working with the OpenSplice Community edition, while things are running fine when executing normally. Creating a domain participant fails when running under the debugger. We usually build using ReleaseWithDebugSymbols. This is the first time I have seen this kind of difference in behavior. What causes this ? Not being able to use the debugger puts quite a damper on things. This is with the latest version of the community edition (64bit binary download), VS2017, Windows 7 Thank you, Harry
  16. Kevkw.Chen

    Number / Last Participant

    Hi , Check out dds_publication_matched_status or dds_subscription_matched_status . While the connection was changed , the callback will trigger and you can get current_count variable to know how many data reader or data writer is connecting .
  17. ADLINK is pleased to announce that the latest DDS Community Edition V6.7.18 downloads are now available at: http://gag.gl/yeeqkf
  18. Jonnn

    Number / Last Participant

    Hello, We have an system split into two parts, a central processing application and one or more GUIs. We'd like to exit the central application when the last GUI is closed. We already have and appropriate message, to instigate the shutdown. Obviously we could keep a count of the number of connected GUIs, in the central application. Another option would be to use a heartbeat Topic. These aren't very neat solutions and we'd like to do this without changing the GUI. What I'd ideally like is to be able to detect the number of / last GUI participant. Happy to do this by checking some property of the participant / subscriber / publisher etc. I've been trawling the API to try and find something, but have not had any success yet. Has anyone got any ideas? Thanks, Jon
  19. erik

    Blocking with Takes/Reads

    Hi Chris, I don't usually keep an eye on these forums, so I guess you're lucky I did this time. Firstly, are you sure it is blocked during the take? If you have allocated that CPU exclusively to this process, it should be pretty straightforward to determine whether "take" takes 20ms or whether it sleeps 20ms. Both are "less than ideal" of course, but being certain which case it is definitely would help with diagnosing. That said, if it is blocked, it should be blocked on some mutex somewhere and I would expect it to be a victim of priority inversion, though I am not certain. There are a number of cases I can think of that might do this (in no particular order, and noting there may be more): update of data received from the network or from a local writer a GC step checking for old instances to be freed a badly timed network disconnection the memory allocator releasing large numbers of objects in a short period of time and hitting contention possibly clearing trigger events higher up in the entity hierarchy that are used for blocking on waitsets and triggering listeners None of these would lead me to expect delays in ms unless there are huge numbers of instances (or, in some cases, samples), but if it is indeed priority inversion then the scenarios can get pretty hairy pretty quickly. If it is this, then mitigation on Linux (which I think you're running) could be as simple as enabling priority inheritance on the mutexes — that has an option in the configuration file: Domain/PriorityInheritance, set attribute "enabled" to true. If you have a way of making it take 20ms reasonably often, then it should be possible to catch it in flagrante delicto without too much trouble if you have SystemTap or dtrace at hand. I've never actually done that, but once upon a time I did play with dtrace and I am certain it is possible to use it to profile only during a take operation. Then you discard the profile if it took mere microseconds, and something interesting might well show up. Finally, while I don't think it is the case, it could be driven by interrupts on Linux. I believe it is possible to assign interrupts to CPUs, and hence to not handle them on this particular CPU, but I could be wrong there. Best regards, Erik
  20. Chris Roberts

    Blocking with Takes/Reads

    I am experiencing intermittent issues from a real-time application calling 'take' on topics. Generally it works as expected. If no data is available it does not block and the call completes in microseconds. Same case when there is data available with the call completes in microseconds. However occasionally a single call to 'take' completes anywhere from 2ms to over 20ms. It happens for both cases where there is data as well as when there isn't. Size of the data also does not matter as I see this with topic sizes from 40 bytes to 8000 bytes... This is causing issues as the calls are done by a process executing at 60Hz (and thus each frame only has 16.67ms to complete...) What conditions would cause a 'take' or 'read' to block? Details on the configuration: Using OpenSplice 6.7.1 Communication in question is only between 2 machines connected directly via 1Gb Ethernet. Both machines are running federated/shared memory mode and communicate using DDSI2E. I *am* running two separate DDSI2E services on each machine with a configuration provided by PrismTech as I have a need to communicate on two separate networks (with separate network cards...) However, the calls causing issues with blocking is on the DDSI2E service tied to the network cards directly connected between two machines. I do have durability service running on each but doesn't help if I turn off. The QoS is set as Reliable, Volatile durability with Keep All History, sorted by source timestamp, and min latency set to 50ms (also tried leaving at default of 0 as well.) I also have a lifespan of 300 seconds set on these topics. The process that is blocking on the 'take' call is running Real-Time scheduling and pinned to a CPU all to itself. All 'takes' are also done from a single thread All OpenSplice processes are also set to Real-Time scheduling and pinned to a different CPU. I have pre-allocated memory for doing the 'takes' on each topic. Memory is also locked for both the process calling 'take' and all opensplice services. Additional Notes: The blocking seems to occur when a backlog grows on some of the topic data. There are periods of time where the reader has to pause doing takes for a while and the history depth grows on some of the topics... There are other times where the sender sends a large burst of samples also causing a buildup of history (since the reader is only running at 60Hz and only does so many takes per frame). In both of these cases, this is where I see the spikes in 'take' time. I have tried adjusting the config files on both ends heavily, adjusting queue sizes, adjusting bandwidth, max packet sizes, network buffers, etc all with little effect. Any assistance would be greatly appreciated! Chris
  21. Fog Computing is a paradigm that complements and extends cloud computing by providing an end-to-end virtualisation of computing, storage and communication resources. As such, fog computing allow applications to be transparently provisioned and managed end-to-end. This presentation first motivates the need for fog computing, then introduced fog05 the first and only Open Source fog computing platform! View the full article
  22. Fog Computing is a paradigm that complements and extends cloud computing by providing an end-to-end virtualisation of computing, storage and communication resources. As such, fog computing allow applications to be transparently provisioned and managed end-to-end. This presentation first motivates the need for fog computing, then introduced fog05 the first and only Open Source fog computing platform! View the full article
  23. Hi, DDS for Resource Constrained Environments like Devices like Arduino, I see that were some standards being developed like DDS-XRCE, but I could not find anything for arduino, is it progress currently and is expected to take some time for now? Kindly let me know. Thanks and Regards Deepak
  24. Emmanuel Prunet

    register_instance vs lookup_instance

    Hi, I want to know the best usage of register_instance and lookup_instance on a datawriter for successive write of the same instance. Should I do : I) auto h1 = writer.register_instance(ddsData); map.insert(h1); .... writer.write(ddsData, map.find(h1)); II) writer.register_instance(ddsData); .... writer.write(ddsData, writer.lookup_instance(ddsData)); III) writer.write(ddsData, writer.register_instance(ddsData)); In I) I register the instance and save it in a map. Then, when I want to write the instance, I get the instance_handle in the map and use it in the write() call. In II) I just register the instance. Then, when I want to write the instance, I retrieve the instance_handle with lookup_instance and use it in the write() call. In III) I register the instance in the write() call. If register_instance is idempotent, I think III) is what I want to do : registering the instance the first time then use the instance_handle for the write call. But I don't know if instance handles are internally stored in a map or if I should do it myself like in I) Regards
  25. Register for the Webinar at: https://onlinexperiences.com/Launch/QReg/ShowKey=48750 The Internet of Things (IoT) is transforming all sectors of the economy, with some of the greatest impact in industries such as manufacturing, energy and transportation. IoT is especially well suited to the unique challenges faced by industrial operations such as the control of remotely distributed assets and the monitoring requirements found on manufacturing floors and within processing plants. When committing to IoT, early challenges are how to collect and analyze data from a unique and diverse set of assets, and how to secure and manage those devices at scale. This requires the expertise, tools and best practices of both Operational Technology (OT) and Information Technology (IT) departments. In this webinar, VMware Inc., a global leader in enterprise IT, and ADLINK Technology, a global leader in integrated IoT solutions, will discuss the five keys to successful industrial IoT initiatives. Join the discussion to learn more about: * Why a healthy OT-IT marriage is necessary for IoT success * How to release real-time data from siloed assets * Best practices to get the highest value from operational data in IoT * A framework for a successful IoT architecture designed with security, management and scale * Essential industrial IoT uses cases such as asset tracking/monitoring and predictive maintenance Webinar presenters: Mimi Spier - Vice President and head of the Internet of Things Business at VMware. Rob Risany - Executive Vice President of ADLINK's IoT Solutions and Technology Division.
  26. rodro_jesus

    DDS-based VPN not sending data

    I am trying to set a VPN where there are two machines running DDS implementations in each side. However, although everything seems to be fine at the network layer (both machines can ping each other with the VPN IP addresses) I see no topics been matched, and therefore if I try to transfer information from one machine to the other nothign happnes. If I try to run the two pieces of code locally, they work and topics are interchanged with no issues at all. I believe that it could be related to DDS requiring multicasting (or the lack of), but I have tried to add multicast at both machines (ip route add 224.0.0.0/4 dev tun0 first, route add 239.255.0.1/32 dev tun0 afterwards) but still nothing happens. I have Ubuntu 14.04 as the operating system in both machines. OpenSpliceDDS implementation running is V6.4.14.
  27. I would like to run DDS OpenSplice (https://github.com/ADLINK-IST/opensplice/) with .NET Core instead of .NET Framework. I have created a Visual Studio project from scratch, targeting .NET Core 2.0, added the source files related to the HelloWorld example (https://github.com/ADLINK-IST/opensplice/tree/master/examples/dcps/HelloWorld/cs/src) and referenced the library dcpssacsAssembly.dll shipped in the OpenSplice package. The compilation is doing fine. The release directory belonging to the publisher of the HelloWorld example contains the following files: dcpssacs.netmodule & dcpssacsAssembly.dll ddsapihelper.dll & ddsapihelper.pdb HelloWorldPub.deps.json HelloWorldPub.dll HelloWorldPub.pdb HelloWorldPub.runtimeconfig.dev.json HelloWorldPub.runtimeconfig.json In a command shell I set up the environment variables needed for OpenSplice by executing a script named "release.bat". Finally I try to run the command "dotnet HelloWorldPub.dll" but the following error pops up: Unhanded Exception: System.IO.FileLoadException: Could not load file or assembly 'dcpssacs.netmodule'. The module cannot be loaded because only single file assemblies are supported. (Exception from HRESULT: 0x8013101E) at HelloWorldDataPublisher.HelloWorldDataPublisher.Main(String[] args) Any idea what is going on? Thanks in advance for your help.
  1. Load more activity
×