Jump to content
OpenSplice DDS Forum

All Activity

This stream auto-updates     

  1. Last week
  2. PrismTech moves market-leading proven DDS solution to open source as Eclipse Cyclone To reflect its enhanced solutions and value proposition, the company also is amplifying its relationship with parent company ADLINK Boston, MA, USA – October 20, 2017 – PrismTech™, a global leader in software platforms for distributed systems, today announced that it is expanding its Vortex™ DDS product portfolio to offer the open source option “Eclipse Cyclone.” With support from the Eclipse Foundation and its open source ecosystem, Eclipse Cyclone represents a genuinely open source data distribution solution with full source code access and updates. For users that are building mission- and/or business-critical systems, the company also offers a commercially supported version with extra features and guarantees of support. As part of this effort, the company is undergoing a strategic marketing and enhanced branding initiative to more precisely reflect its core offerings and value proposition, amplify its relationship with parent company ADLINK, and serve as a leader in embedded edge computing and distributed systems. “Expanding to open source is an efficient, effective and logical solution to address the industry’s challenges of moving data in a high performance, distributed system,” said Rob Risany, Executive Vice President, IoT Strategy and Business Solutions, ADLINK Technology. “Whether standard open source or additional support is required, we are providing customers with the future proofing and scalability made possible through our powerful, elegant DDS solutions.” With the launch of Eclipse Cyclone, PrismTech’s product portfolio will include the product lines Eclipse Cyclone, Vortex DDS, Vortex Edge and Spectra™. Eclipse Cyclone and Vortex DDS are built on the Object Management Group®'s (OMG®) Data-Distribution Service™ (DDS™) open standard and Spectra is built on the Software Communications Architecture (SCA) open architecture. With the anticipated exponential growth of the Industrial IoT and the continued trajectory away from siloed, proprietary technologies that support these high performance distributed systems, an open source strategy allows the company to fuel innovation and serve a more diverse customer base. DDS, which is managed by the OMG and is specifically designed for high performance distributed systems, is widely deployed in some of the most mission-critical systems throughout the defense, air-traffic control, telecommunications and financial industries. “With the continued growth of the Industrial IoT, 5G, artificial intelligence and autonomous machine technology, we fully anticipate DDS to serve as the data sharing platform of choice,” said Risany. “Quite frankly, its strengths such as responsiveness, scalability and fault tolerance are just too compelling.” The company will be announcing the project proposal of Eclipse Cyclone at EclipseCon Europe Oct. 24-26 in Germany. “Open source technologies are driving the IoT industry and providing the core technologies within advanced, distributed systems,” said Mike Milinkovich, Executive Director at Eclipse Foundation. “With this new strategy, the PrismTech-ADLINK team is firmly positioning itself in a lead role in enabling innovation and market growth for these types of systems, and allowing the Eclipse IoT developer community to work with these advanced, leading edge technologies.”
  3. Hi James, Thanks for the response, yes I'm able to make the change in the generated code that you mentioned. Please let me know if that's a legitimate workaround and I'll apply it to some other IDLs we've got that exhibit the same problem. Thanks much.
  4. Hi, Thanks for raising this. I've reproduced it and am talking to the PrismTech engineering team about it. For now, I got it to compile by changing the command to "Marshal.ReadInt32(attr2Seq0Buf);" Are you able to use that as as workaround for now? Obviously it's a bit awkward cos it's generated code. I'll check whether that's actually a valid workaround, and of course make sure the generated code is fixed in a future release. Thanks James
  5. Mapping a partition to a channel

    Hi , Try the attachment . Below xml code block is part of the xml file . You can change Address "broadcast" to address your want. And change DCPSPartitionTopic to your qos partition name and topic name , which is separated with 1 dot . For examples : If you use Opensplice HelloWorld example , you should change xml file to <PartitionMapping DCPSPartitionTopic="HelloWorld example.HelloWorldData_Msg" NetworkPartition="networkPartition"/> Type command "osplconf" to help you modify xml file . <Partitioning> <GlobalPartition Address="broadcast"/> <NetworkPartitions> <NetworkPartition Address="broadcast" Name="networkPartition"/> </NetworkPartitions> <PartitionMappings> <PartitionMapping DCPSPartitionTopic="PartitionName.TopicName" NetworkPartition="networkPartition"/> </PartitionMappings> </Partitioning> ospl_sp_nativeRT.xml
  6. Earlier
  7. Mapping a partition to a channel

    Hi, I would like some help modifying my ospl.xml file to essentially associated a partition name with a specific channel. In essence, I need to add a new network channel (i.e. multicast address) to the ospl.xml file. This new channel would be dedicated for specific types of topics. I was planning to publish those specific topics via a unique partition name (for example: "session.group01"). When I publishing a topic using this partition name, it would be published through the new channel I added. Can someone provide an example ospl.xml that illustrates how to do that. I read the "OpenSplice_Deployment.pdf" document but I still don't know what needs to be done. BTW: I also attached the ospl.xml files that I'm currently using. Thanks, ospl.xml
  8. Using: VortexOpenSplice-6.7.170912OSS-HDE-x86_64.win-vs2015 I've run across an error where it looks like idlpp is generating some non-compiling C# code if the IDL has a sequence of enum values in it. E.g if you tweak the HelloWorld.idl as seen below the generated C# source will no longer compile: module HelloWorldData { enum T_WorldType { L_WorldType_Flat, L_WorldType_Round, L_WorldType_Unknown }; typedef sequence <T_WorldType> T_ListOfWorldTypes; struct Msg { long userID; string message; T_ListOfWorldTypes A_supportedWorldTypes; }; #pragma keylist Msg userID }; To reproduce do the following: Swap out the IDL in the HelloWorld with the attached IDL Compile it using: idlpp -l cs -S HelloWorldData.idl Replace the generated .cs files in examples\dcps\HelloWorld\cs\standalone with the newly generated files Compile the the sacs_helloworld_pub project and you'll see the following error: CS7036 There is no argument given that corresponds to the required formal parameter 'offset' of 'BaseMarshaler.ReadInt32(IntPtr, int)' The generated code is missing the first argument to the ReadInt32 call: to.A_supportedWorldTypes[i0] = (HelloWorldData.T_WorldType) ReadInt32(attr2Seq0Buf); Note that the generated .cpp code compiles fine, it's just the C# that doesn't seem to be working correctly. Any ideas? Thank you very much. HelloWorldData.idl
  9. Listener for Built-In Topics

    Hi, is there anybody to help me out concerning this issue. I've been trying to solve it, but I am not being able to figure out where the problem is. When using Waitsets I am able to access the information I need. All I need is to get notified about these events asynchronously via listeners. I would really appreciate your help Thanks in advance, Mirdit
  10. Ospl API Version Number

    I'm interested too...there seems to not even be a handy #define in the headers (though getting through an API is preferred)
  11. Domain Participant Question

    Found answer in thread
  12. Domain Participant Question

    Hello All I"m using OpenSplice DDS v6.7 32 bit community edition. I was wondering if it is possible to use a domain ID assignment that is something other than "org::opensplice::domain::default_id()". I have several threads (Boost threads) that I start with each one setting a domain ID that is the same. When I try to set the domain ID in these threads to a value of 60, I get an "Error: Failed to open the domain, domain id =60 ..... The most common cause is OpenSpice is not running (when using shared memory) ..." . I do use Boost Mesage Queues in each thread. I've also made sure that the windows command shell environment is properly set to use this version of OpenSplice DDS. Any help or suggestions would be appreciated. Thanks JS
  13. I've noticed that when there's not enough bandwidth available for the samples that I'm sending (over a highly variable, low speed WAN) the subscriber starts to receive updates far slower than real time, up to five or ten seconds behind. I'm sending small updates at a high frequency and I'm guessing that the OS is queuing up the packets and since the payloads are small a great number of them can get queued up. I'm sending best effort so eventually packets will be get dropped but I'd really like to find a way to stay as close as possible to real time by automatically reducing the update rate when the time it takes for a sample to be received goes above some small threshold. It seems like something like this could be possible if the DataReader were to occasionally report the delta between a timestamp on a sample it gets and the current time. The DataWriter could then cut automatically cut back on its publication rate until near real time updates are received by the subscriber. I looked through the QoS settings and documentation but I couldn't find anything that looked like it would automatically adjust update rates. Is there anything built into OpenSplice to do this or is this something that's generally dealt with at the application level?
  14. Ospl API Version Number

    Hello, Does anyone know of a way to programmatically get the OSPL AP Version number; currently 6.7? I would like to do this from both CPP (using the ios ccp2 api) and Java. Jon
  15. Dear there, I trying to access Built-In Topic data via listeners. Maybe it’s a misconfiguration but the onDataAvailable method isn’t called at all from the built-in data reader. It functions properly when using waitsets and polling from the DR. Below the code snippet Subscriber builtinSubscriber = requester.getDomainParticipant().getBuiltinSubscriber(); DataReader<ParticipantBuiltinTopicData> dcpsParticipantReader = builtinSubscriber.lookupDataReader("DCPSParticipant"); /* * */ DataReaderAdapter<ParticipantBuiltinTopicData> pListener = new DataReaderAdapter<ParticipantBuiltinTopicData>() { @Override public void onDataAvailable(DataAvailableEvent<ParticipantBuiltinTopicData> status) { System.out.println("Got DCPSParticipant data"); } }; dcpsParticipantReader.setListener(pListener, DataAvailableStatus.class); Environment: Windows 7 x64 DDS Community Edition 6.7 I would be very grateful for your help Best Regards Mirdit
  16. Register for the Webcast at: http://www.prismtech.com/webcast-signup Why Attend: * Understand the challenges posed by environments constrained in computational, memory, power and network capabilities * Understand the short comings of existing technologies in these environments * Learn how the upcoming standard DDS for eXtremely Resource Constrained Environments (XRCE) addresses these challenges * See a demonstration of XRCE in action Abstract As a result of the commoditization of computing and communication technologies, an increasing number of sensing and controlling devices, appliances and gadgetware are now digitalized and connected. In most of the cases these devices, due to cost and/or power constraints are limited with respect to the computational, storage, networking and energy constraints. Most of the standard technologies for messaging and data sharing were designed for environments that did not have these limitations. As a consequence, these standards don’t deal nicely with devices that undergo aggressive sleep cycles or communicate through constrained network such as LoWPAN and LPWAN. To fill this gap, over a year ago, we started a standardization process at the Object Management Group named DDS for eXtremely Resource Constrained Devices (XRCE) with the intent of filling this gap. DDS-XRCE targets environments where devices may have very little computational power and memory, such as an Arduino Uno which has 2 Kbytes of SRAM and 32 Kbytes of FLASH, may be battery powered and may communicate through constrained networks such as 40-100 Kbps LoWPANs and the newly standardized NB-IoT. From a high-level perspective, the key requirements that a DDS-XRCE implementation has to satisfy are (1) extremely low footprint – addressing targets such as an Arduino Uno platform, (2) extremely efficient wire protocol – inducing a protocol overhead of just a few bytes over the user data, and (3) support devices that undergo aggressive sleep cycles. This webcast will (1) introduce PrismTech’s proposal for the DDS XRCE standard, (2) demonstrate analytically its extremely low wire overhead, (3) demonstrate XRCE in action and (4) explain how it compares with competing proposals.
  17. Hi Bill, The rule that we always try to follow is to never generate invalid messages, and in this case, that means once you reach 2^31-1, you cannot continue while remaining compliant with the specification. After all, it states that this particular sequence number is of type “Count_t”, described as a “[t]ype used to encapsulate a count that is incremented monotonically, used to identify message duplicates.” And quite obviously, you can’t increment a signed 32-bit (two’s complement) number past 2^31-1. So what does one do in a case like this? Clearly the correct answer is not to crash but to let it roll over anyway, but perhaps out of frustration with some blatant errors in the specification that wasn’t the initial implementation. Needless to say, this should have been addressed before releasing, but somehow it slipped through the cracks. If it is any consolation, you are the first ever to report running into this. It has been fixed long since; that the release notes don’t show it is an oversight. if you upgrade to the current version you will not encounter it anymore and moreover benefit from the many other improvements made since the 6.3 release — including some fixes that address an issue where the data path can stall when just the right packets get lost while sending fragmented data. (If you're on the community edition, then you can also fix this by deleting the problematic two lines — and then please also take out two analogous cases in q_xevent.c — just search for DDSI_COUNT_MAX.) Best regards, Erik
  18. Running P637-OpenSpliceDDSV6.3.2p2-HDE-x86.win-vs2010 We have an application using DDS between multiple computers. After approximately 24 hours (happens reliably), we see the following error in the log after the application crashes: "writer reached maximum heartbeat-frag sequence number" Examination of the source code shows: q_transmit.c :: create_HeartbeatFrag() if (wr->hbfragcount == DDSI_COUNT_MAX) NN_FATAL0 ("writer reached maximum heartbeat-frag sequence number"); hbf->count = ++wr->hbfragcount; #define NN_FATAL0(fmt) do { \ nn_log (LC_FATAL, (fmt)); \ os_report (OS_FATAL, config.servicename, __FILE__, __LINE__, 0, (fmt)); \ abort (); \ } while (0) So it appears on the surface that each time a heartbeat fragment is created, a counter is incremented, and if the counter exceeds the maximum (32 bit max value), an abort() is executed and the entire program exits. The counter does not appear to every be reset except in the case of creating the initial connection. There is similar behavior in q_xevent.c :: add_AckNack(). This would correspond to roughly 20us traffic, which is approximately what we see using wireshark. Can someone please describe the expected behavior in these cases, and what possible fixes can be applied? I have looked at version notes all the way through V6.8 and there appears to be no mention of this issue. Cannot find any mention in the forum either. Thanks.
  19. Binding jython and c++

    Hi , I don't know DDS jython, but maybe you can check your C++ code. There are 2 possible things . P1 : You use read method without filter. After you use read method to get sample , the sample is still saved in the cache and change state to DDS_READ_SAMPLE_STATE . Something bad code like below : while(true) { int ret = reader.read (sample , no filter); if (ret > 0 ) printf( "%s\n", sample.msg) sleep(1 sec) } You will print sample.msg every time. So change to use filter will not happen . Or change to use take method , this will remove sample from cache P2 : Did you check valid_data flag in sample info ? After the writer write out a sample , the DDS middleware on reader side will tag the sample with 1. DDS_NOT_READ_SAMPLE_STATE , because you have not read / taken it 2. DDS_NEW_VIEW_STATE, because this instance is first time sent to you . 3. DDS_ALIVE_INSTANCE_STATE, because the writer , which produced this instance, still alive or no one dispose instance . After you read it , the state is changed to DDS_READ_SAMPLE_STATE . (If you read again with state filter DDS_NOT_READ_SAMPLE_STATE , you will return nothing ) And now , if your writer is killed or dispose the instance . The sample state on reader side will change to 1. DDS_READ_SAMPLE_STATE , because you have read it once. 2. DDS_NOT_NEW_VIEW_STATE, because you have seen it . 3. DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE or DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE And this is important , the DDS_DATA_AVAILABLE_STATUS is triggered , because the DDS_ALIVE_INSTANCE_STATE is changed . Even there is nothing sent to reader side . But the sample info will tag it "valid_data=false" to imply "this is not real data ." So , if you read sample without any state filter , and you don't check valid_data flag You will seem to see "you received twice sample" , but actually the second is invalid sample , because this is triggered by state change .
  20. Hello, I am developping an application with Opensplice and I would like to test it with jython. Everything is ok for the installation and so on. But I got a problem when sending data in jython and receiving it in c++. The data is received twice. If i send data in c++, data is received only once. I find a solution by filtering the data received depending on its state, read or not_read but I would like to understand this behaviour. I'm working on RedHat, Opensplice version 6+ and share memory architecture. Using listener for the datareader. Does anyone have an idea about the behaviour ? Regards,
  21. Multitopic in isocpp2

    C++ and C#
  22. Multitopic in isocpp2

    Yes, our IDLParser(s) do support unions. What languages do you envision ? I'll start some discussions internally on the above and see what we could do to help in the short-term as proper multi-topic support isn't on the horizon yet.
  23. PrismTech’s Vortex OpenSplice selected by USE System Engineering for its CEDD® system Vortex OpenSplice enables data-centric provisioning for USE’s Contactless Energy & Data Distribution technology Newcastle upon Tyne, UK – September 5, 2017 – PrismTech™, a global leader in software platforms for distributed systems, today announced that USE System Engineering based in Haaksbergen, The Netherlands, has selected Vortex™ OpenSplice™ as its data connectivity solution for the company’s Contactless Energy & Data Distribution (CEDD®) system, an innovative contactless energy and communication technology. CEDD® allows energy and data transport to be combined in a two-wired cable system, a base station and contactless user points. With this structured cable concept, evacuation systems in tunnels, Air Ground Lighting (AGL) systems, helicopter decks or dynamic road markings can easily be installed or replaced without galvanic contacting the cable. The CEDD® system is especially designed for situations with high safety requirements and continuous operation, such as airports. (www.cedd.eu) The essential task of robust data connectivity between platform components is provided by PrismTech’s Vortex OpenSplice, a product proven in numerous business and mission-critical environments in markets such as Aerospace & Defense, Smart Energy, Transportation, Industrial Automation, Transportation, Healthcare and Smart Cities. Vortex OpenSplice enables decoupling between interfaces, making the provisioning framework easier to maintain and extend. Loose coupling helps reduce system complexity and makes the integration of new components much easier. It also helps enable applications that are portable across products. "PrismTech is very pleased to be providing USE System Engineering with Vortex OpenSplice for use in such an innovative technology as CEDD®,” said Hans van’t Hag, Vortex Product Manager, PrismTech. USE System Engineering recently installed AGL lighting systems at some airports in the Netherlands with the CEDD® technology. It was completed in record time thanks to the simplicity of the system. “Vortex OpenSplice gives us the data connectivity that is crucial for CEDD®,” said Hans van der Kuil, CEO/solutions architect, USE System Engineering. “Vortex OpenSplice is the ideal solution to provide us with efficient, secure and interoperable real-time data sharing.” Vortex OpenSplice is a key component of PrismTech’s Vortex Intelligent Data Sharing Platform, a suite of interoperable Internet of Things (IoT) enabling technologies based on the Object Management Group®'s (OMG®) Data-Distribution Service™ (DDS™) standard. Vortex provides secure, real-time data connectivity independent of network configuration (LAN or WAN, wired, wireless, mobile) or underlying platform technologies. It can be used by applications to enable seamless data sharing across server, embedded, web, mobile or cloud environments. For further information about Vortex, please visit PrismTech’s website at: http://www.prismtech.com/vortex. -- End -- About USE System Engineering USE System Engineering provides groundbreaking total solutions for harsh and safety critical environments. Our solutions will keep functioning perfectly even under the worst conditions, especially in environments such as airports, tunnels or offshore oil drilling plants. The products, systems and concepts of USE are being conducted under the tradename Impleo Solutions. USE is a member of the TKH Group N.V. The TKH Group N.V. is an international operating group of companies, which specializes in creating and supplying innovative telecom, building and industrial solutions. Contact: USE System Engineering: Hans van der Kuil E-Mail: hans.vanderkuil@usetechnology.nl http://www.usetechnology.nl – http://impleosolutions.eu CEDD® is a registered tradename of Use System Engineering B.V. About PrismTech, an ADLINK Company PrismTech’s customers deliver systems for the Internet of Things, the Industrial Internet and advanced wireless communications. PrismTech supplies the software platforms, tools and professional services they need to build solutions with the required platform coverage, performance, scalability, efficiency, flexibility and robustness. PrismTech’s customers service many market sectors, including: industry, energy, healthcare, transportation, finance, aerospace and defense. For additional information about PrismTech, visit the web site at http://www.prismtech.com. Press Contact: PrismTech Gregg Shenton E-Mail: gregg.shenton@prismtech.com Tel: +44 191 4979900 Vortex and OpenSplice are trademarks of PrismTech. DDS and Data-Distribution Service are either registered trademarks or trademarks of Object Management Group, Inc. in the United States and/or other countries. All other trademarks are the property of their respective owners.
  24. Multitopic in isocpp2

    Hi Hans and thank you for your quick response. I'll explain why we need MultiTopic. We have a conceptual model where we have a lot of inheritance, to simplify let's say we have : A( k , a ) B( b ) C( c ) where k is primary key and B and C inherits from A. In our case B and C are exclusive , but at runtime a B can become a C and a C can become a B but A can't exist by itself. From this conceptual model we can create topics like this : 1) A( k , a , b , c ) => not acceptable in our case because it will allocate too much memory 2) A( k , a ) , B( k , b ) , C( k , c ) => this solution seemed to be the best for us, but a lot of issues arise : When do we notify a new B exists? That's why we need a multitopic that joins A and B and notify a new instance exists only if this instance exist in A and B. But even if I implement myself a multitopic, since we have a lot of inheritance, I'll have a multitopic on ( A , B ) , a multitopic on ( A , C ), and a lot more of multitopics that needs to observe A, meaning that I'll have a LOT of readers on A (and also a lot of readers on B and C because in our case they are inherited themselves by D,E, F etc...). Is that efficient to have this much readers on the same topic? Do they share the same cache? Is there a way to have multiple listeners on the same reader? Another issues is this : what if an instance of B arrives but the corresponding instance of A never arrives? Is there a way in DDS to say "I'm going to write an instance on A and B but the readers needs to receive A and B or none" (sounds like a transaction in SQL). Also is there a way to say "I'm going to write A and B and the readers will receive A THEN B in that order" ? 3) B( k, a, b ) , C( k , a , c ) => this solution is more simpler because when we receive notification from B and C we know that A already exists ( A is in B and C ), so there is no need of multitopics. But when B become a C, we must destroy an instance of B and create one of C, and that's not exactly what we want, solution 2) is more flexible for that. Also, we want to listen to A B and C individually, in solution 3) we must listen to B and C to listen to A. The solution i'm thinking about is mixing 2) and 3) : creating a topic for B (k, a, b ) and C(k, a, c) for instanciation and deletion of B and C, and topics A( k , a ) , B( k , b ) , C( k , c ) for updates of A B and C. Do your IDLParser supports Unions? A single Topic for B( k, a, b ) and C( k, a, c) would be great ( BC ( k , a , { b , c } ) ) , because I will not destroy a A to create a C from a B.
  25. Hi Luca Could you find a solution for the problem? Cheers Raphael
  26. Multitopic in isocpp2

    Hi Emmanuel, You're right in that MultiTopics are indeed targeting that functionality and also in your observation that this functionality isn't supported yet (actually by none of the current DDS-vendors). The reason behind not having implemented this (yet) is that there are still gaps in the semantics in case of incomplete information in 2 situations: (1) when should you first get a joined-set (i.e. only when its complete w.r.t. availability of all the attributes from all topics that you're interested in (2) when should you last get updates on a joined-set (i.e. up to the point where at least one of the attributes has reached the end of its lifecycle e.g. is part of a disposed instance) That said, its not rocket-science to do such a joint on application-level (as we ARE following a relational model isn't it) .. and apply some basic semantics for the above .. We're still looking at some good (business-)cases that would justify investment in that piece of missing spec-coverage so perhaps you can contribute yours
  27. Multitopic in isocpp2

    Hi I'm new at Opensplice DDS and I was wondering if there was any way to create a listener of a Topic corresponding to a join ( like in SQL) of multiple Topics. From what I saw Multitopics are the solution but they don't seems to be implemented in Opensplice DDS
  1. Load more activity