Jump to content
OpenSplice DDS Forum

All Activity

This stream auto-updates     

  1. Yesterday
  2. bdavis

    CMSOAP Interface

    Is this documented anywhere? Any relation to this specification? https://www.omg.org/spec/DDS-WEB/About-DDS-WEB/ Thanks, Bud
  3. Last week
  4. 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
  5. Earlier
  6. 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 ( Regards.
  7. Hi everyone, I am using OpenSplice community edition with C# API. In the DDS configuration file, I am forcing OpenSplice to use interface <DDSI2Service name="ddsi2"> <General> <NetworkInterfaceAddress></NetworkInterfaceAddress> <AllowMulticast>spdp</AllowMulticast> <EnableMulticastLoopback>true</EnableMulticastLoopback> <CoexistWithNativeNetworking>false</CoexistWithNativeNetworking> </General> If I disable the NIC assigned to 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
  8. 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
  9. 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
  10. 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 .
  11. ADLINK is pleased to announce that the latest DDS Community Edition V6.7.18 downloads are now available at: http://gag.gl/yeeqkf
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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.
  20. 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 dev tun0 first, route add 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.
  21. 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.
  22. Arun Solomon

    Valgrind error in python

    Hi, I am trying to configure valgrind in python. Following is the command: ./configure --without-pymalloc --with-pydebug --with-valgrind Then i got the following error: configure: error: Valgrind support requested but headers not available Python: 2.7.5 Valgrind: 3.12.0 May i know how can i resolve this error?
  23. ADLINK is pleased to announce the availability of two new introductory Vortex DDS whitepapers Python DDS Binding - download at: http://gag.gl/QSApsi LabVIEW Software DDS Binding - download at: http://gag.gl/MnkVDA
  24. G Shenton

    Vortex DDS v2.5 Now Available

    ADLINK is pleased to announce the availability of Vortex DDS v2.5 with Native Python API and National Instruments LabVIEW integration . Download theevaluation software at http://gag.gl/UUXKVQ
  25. gcw1957

    Allocating Type Support

    I'm evaluating DDS for use in future projects, using JAVA. I downloaded the OpenSplice 6.7.1 package and tried the chat application, then the shapes demo, but I always get stopped with this: Exception in thread "main" org.omg.dds.core.PreconditionNotMetException: Allocating new TypeSupport failed I monkeyed around with environment variables, copied class files to other locations, etc., but I still get the same message. Where should I be looking? Thanks, G.
  26. Hello, I'm a new user of opensplice DDS...i'm working with Vortex Opensplice HDE Release 6.8.2. i'm developing a Python script to write/read data to/from Vortex Opensplice Tester. To read the samples, I'm using waitForConditions() method of WaitSet class. This method needs two parameters a collection of conditions to be satisfied and a timeout...the problem i'm facing with this method is that it's always generating the timeout exception without any consideration for the defined conditions. when i activate the commented line in the code, i can read my data. (with commenting waitForConditions() line)Test_bis.py hereafter, a piece of code i'm testing : topic = osplscript.dds.findTopic(MyClass.topic_name) rd =osplscript.dds.Reader(topic) selector = rd.newSelectBuilder().withAlive().withNotRead().withNew()\ .content('Car.temp = self.temp and Car.Hum=self.hum')\ .build() ws=osplscript.dds.WaitSet( ) #ws.attachCondition(selector.condition()) ==> this works fine solely, without waitForConditions() try timeout_duration = osplscript.qos.Duration(2,0) ws.waitForConditions(selector.condition(),timeout_duration) topic_sample = selector.take() ... except osplscript.dds.TimeoutException as timeout_exception print timeout_exception.message
  27. Hi, I want to connect to remote IP to write data onto it. As per the discussion : The configuration should be changed accordingly. Now the ospl.xml is in PXXX-VortexOpenSplice-6.7.171127OSS-HDE-x86_64.linux-gcc5.4.0-glibc2.23-installer/HDE/x86_64.linux/etc/config/ location So if I change this, it will be reflected globally. So what is the linkage of ospl.xml with example codes ? Like the hello world publisher of C code needs include the conf and will run accordingly. So is there anyway so that only that C program uses my own conf file? Also the snippet says : <NetworkService name="networking"> <General> <NetworkInterfaceAddress></NetworkInterfaceAddress> </General> <Partitioning> <GlobalPartition Address=","/> </Partitioning> </NetworkService> So the two addr, in which addr my specific publisher will connect ? In the HelloWorldpublisher.c this snippet creates a publisher and writes to it which is by default a local address (not mentioned though explicitly in the code, as per the FAQ it will point to local address) // Create the Publisher's in the DDS Domain. message_Publisher = createPublisher(domainParticipant); // Request a Writer from the the Publisher. message_DataWriter = createDataWriter(message_Publisher, messageTopic); message_Sample = HelloWorldData_Msg__alloc(); message_Sample->userID = 1; message_Sample->message = DDS_string_alloc(HelloWorldLength); strncpy(message_Sample->message, HelloWorld, HelloWorldLength); printf("\n=== [Publisher] writing a message containing :"); printf("\n userID : %d", message_Sample->userID); printf("\n Message : \"%s\"\n", message_Sample->message); fflush(stdout); g_status = HelloWorldData_MsgDataWriter_write(message_DataWriter, message_Sample, DDS_HANDLE_NIL); checkStatus(g_status, "HelloWorldData_MsgDataWriter_write"); So where to mention this publisher will only point to explicitly this topic, this port and this ip address (as in the conf file multiple ip can be defined, so which ip for which publisher?)? Please let me know.
  28. Kevkw.Chen

    idlpp with crosscompile

    Hi , Try this export LIBRARY_PATH=${LIBRARY_PATH}:/raspbian_root/lib before you run make or edit opensplice/setup/arm.linux_cross-common.mak line 112 : LDFLAGS = -L$(SPLICE_LIBRARY_PATH) $(SYSROOTFLAGS) to LDFLAGS = -L$(SPLICE_LIBRARY_PATH) $(SYSROOTFLAGS) -L/raspbian_root/lib
  1. Load more activity