Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

Belangrijkste verbeteringen in RTI Connext's Modern C++ DDS API

Sinds we de moderne C++ API voor DDS introduceerden, hebben we significant interesse van onze klanten gezien. Velen hebben begonnen nieuwe systemen te bouwen met C++11, en we hebben de API voortdurend verfijnd met een aantal impactvolle verbeteringen.

Verbeterde IDL Mapping naar Modern C++

RTI's Code Generator biedt nu een nieuwe -stl optie, gebruikt in combinatie met -language C++03 of -language C++11. Deze optie werkt de mapping van verschillende IDL-typen bij:

  • Unbounded sequences → std::vector (vereist -unboundedSupport)
  • Bounded sequences → rti::core::bounded_sequence<T, Bound>. Dit type gedraagt zich als std::vector geoptimaliseerd voor deserialisatie. Voor lagere-latentie scenario's kunt u std::vector prefereren met de @use_vector annotatie.
  • String en wide string types → std::string en std::wstring
  • Leden geannoteerd met @external (de „*” pointer-notatie) worden dds::core::external<T>, een veiliger wrapper vergelijkbaar met shared_ptr. Dit beschermt externe leden tegen overschrijving wanneer de middleware geheugen leent (bijv. lezen vanuit een LoanedSamples container).

Bijvoorbeeld, gegeven het volgende IDL-type:

struct MyType { sequence<long> my_unbounded_seq; sequence<long, 10> my_bounded_seq; @use_vector sequence<long, 10> my_other_bounded_seq string my_str; @external long my_external; };

Met het commando rtiddsgen -language C++11 -stl -unboundedSupport MyType.idl, ziet de gegenereerde C++11-klasse er als volgt uit:

class MyType { public: MyType(); ... MyType (MyType&&) = default; MyType& operator=(MyType&&) = default; MyType& operator=(const MyType&) = default; MyType(const MyType&) = default; std::vector<int32_t>& my_unbounded_seq() noexcept; const std::vector<int32_t>& my_unbounded_seq() const noexcept; void my_unbounded_seq(const std::vector<int32_t>& value); rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() noexcept; const rti::core::bounded_sequence<int32_t, 10>& my_bounded_seq() const noexcept; void my_bounded_seq(const rti::core::bounded_sequence<int32_t, 10>& value); std::vector<int32_t>& my_other_bounded_seq() noexcept; const std::vector<int32_t>& my_other_bounded_seq() const noexcept; void my_other_bounded_seq(const std::vector<int32_t>& value); std::string& my_str() noexcept; const std::string& my_str() const noexcept; void my_str(const std::string& value); dds::core::external<int32_t>& my_external() noexcept; const dds::core::external<int32_t>& my_external() const noexcept; void my_external(dds::core::external<int32_t> value); ... };

Request-Reply API voor Modern C++

De API bevat nu twee nieuwe entiteiten: rti::request::Requester en rti::request::Replier. Deze bieden een native request-reply patroon, dat al beschikbaar was in andere talen en in een prototype in versie 5.3 is geïntroduceerd en production-ready is in 5.3.0.7.

Een beknopt codevoorbeeld is beschikbaar hier.

Kleinere API Verbeteringen

We hebben diverse veelvoorkomende taken vereenvoudigd:

  • Condition handlers in een WaitSet kunnen nu de condition als argument accepteren, wat de noodzaak voor no-argument functors elimineert:
condition.handler([]() { // do something }); // or, with the new signature condition.handler([](dds::core::cond::Condition c) { // do something (condition == c) });

TopicQuery voor On-Demand Historische Data

TopicQuery, geïntroduceerd in 5.3, stelt applicaties in staat om historische data on-demand op te halen. In de moderne C++ API kunt u een TopicQuery creëren vanuit een DataReader als volgt:

rti::sub::TopicQuery my_topic_query( my_reader, rti::sub::TopicQuerySelection(dds::topic::Filter("x < 10")) );

U kunt dan historische samples die aan de filter voldoen opnemen, terwijl u live data normaal ontvangt.

Uitkijk

Met C++17 nu goedgekeurd en C++20 op de horizon, zal RTI Connext de C++ API blijven evolueren met moderne taalfeatures en prestatieverbeteringen. Blijf op de hoogte of abonneer u op de RTI Blog voor de nieuwste updates.

Internet of Things-technologie

  1. IoT: De digitale renaissance van de hoogstraat aandrijven
  2. Derde-generatie streamverwerking: IoT-data omzetten in realtime-actie
  3. Waarom 5G-uitrol vertraagd wordt: Kosten, spectrum en dekkingsuitdagingen
  4. Edge Computing: Real-time data ontgrendelen, efficiëntie boosten en nieuwe omzet drijven
  5. G.hn: De industriële IoT-revolutie aandrijven voor kosteneffectieve, betrouwbare connectiviteit
  6. Slimme productie herdenken voor de nieuwe normaliteit: Data-gedreven strategieën voor veerkracht
  7. Data: De Nieuwe Olie – Hoe Raffinaderijen Ruwe Informatie Omzetten In Zakelijke Waarde
  8. Ontmoet de IT/OT Hybride Professional: Data Centers en Industriële Automatisering Bruggen
  9. Microsoft Onthult AI-onderzoekincubator Gericht op Algemeen-doel Intelligentie
  10. Landbouw Revolutie: Hoe IoT Efficiëntie En Duurzaamheid In Moderne Landbouw Drijft
  11. Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden