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

Wat is er nieuw in de moderne C++ API

Sinds we de moderne C++ API voor DDS hebben geïntroduceerd, hebben we veel interesse van onze klanten gezien. Een aantal van hen is begonnen met het ontwikkelen van gloednieuwe systemen in C++11. We zijn ook constant bezig met het verbeteren van de API en er zijn een paar nieuwe functies, groot en klein, waar ik het hier over wilde hebben.

Verbeterde IDL-toewijzing naar C++. De Code Generator biedt een nieuwe, verbeterde toewijzing aan moderne C++. Een nieuwe optie, -stl , gecombineerd met -taal C++03 of -taal C++11 schakelt het in.

Deze optie wijzigt de toewijzing van de volgende IDL-typen:

  • Onbegrensde reeksen worden toegewezen aanstd::vector (dit vereist -unboundedSupport )
  • Begrensde reeksen worden toegewezen aanrti::core:: bounded_sequence. Dit type lijkt op een std::vector, maar is geoptimaliseerd voor deserialisatie van gegevens. Als het minimaliseren van latentie geen topprioriteit is, of T eenvoudig is, kunt u ervoor kiezen om begrensde reeksen toe te wijzen aan std::vector ook met de nieuwe @use_vector IDL-annotatie.
  • Strings en brede strings verwijzen naarstd::string, enstd::wstring respectievelijk.
  • Leden met de nieuwe annotatie @external (gelijk aan de "*" aanwijzernotatie) verwijzen naar het nieuwe typedds::core::external, vergelijkbaar metshared_ptr. Deze wrapper biedt een veiliger alternatief voor de vorige toewijzing van een onbewerkte aanwijzer. Een extern lid kan niet worden overschreven wanneer zijn geheugen is geleend van de middleware (bijvoorbeeld bij het lezen van eenLoanedSamples container).

Bijvoorbeeld, gegeven het volgende IDL-type:

struct MyType { 
reeks my_unbounded_seq;
reeks my_bounded_seq;
@use_vector sequence my_other_bounded_seq
tekenreeks mijn_str;
@extern lang mijn_extern;
};

Zo ziet het gegenereerde C++11-type eruit met "-stl"

(Volledige opdracht:rtiddsgen -taal C++11 -stl -unboundedSupport MyType.idl )

klasse MyType { 

openbaar:
Mijn type();
...

MijnType (MijnType&&) =standaard;
MyType&operator=(MyType&&) =standaard;
MyType&operator=(const MyType&) =standaard;
MijnType(const MijnType&) =standaard;

std::vector&my_unbounded_seq() nobehalve;
const std::vector&my_unbounded_seq() const nobehalve;
void my_unbounded_seq(const std::vector&value);

rti::core::bounded_sequence&my_bounded_seq() nobehalve;
const rti::core::bounded_sequence&my_bounded_seq() const nobehalve;
void my_bounded_seq(const rti::core::bounded_sequence&value);

std::vector&my_other_bounded_seq() nobehalve;
const std::vector&my_other_bounded_seq() const nobehalve;
void my_other_bounded_seq(const std::vector&value);

std::string&my_str() neebehalve;
const std::string&my_str() const nobehalve;
void my_str(const std::string&waarde);

dds::core::external&my_external() neebehalve;
const dds::core::external&my_external() const nobehalve;
void my_external(dds::core::external waarde);

...
};

Verzoek-antwoord-API. De nieuwe verzoek-antwoord-API voor moderne C++ breidt de DDS-API uit met twee entiteiten:rti::request::Requester enrti::request::Replier . Deze API was al beschikbaar in andere talen en is nu beschikbaar in het moderne C++ als prototype in 5.3 en klaar voor productie in 5.3.0.7.

Een eenvoudig codevoorbeeld is hier beschikbaar.

We hebben aanvullende kleine verbeteringen gemaakt om de API gebruiksvriendelijker te maken. We hebben bijvoorbeeld vereenvoudigd hoe handlers kunnen worden gebruikt voor het verzenden van voorwaarden in een WaitSet. Voorheen moesten handlers functors zijn zonder argument. Nu kunnen ze de voorwaarde als argument nemen.

voorwaarde.handler([]() { 
// doe iets
});

// nu ondersteunen we ook
condition.handler([](dds::core::cond::Conditie c) {
// iets doen (voorwaarde ==c)
});

We hebben de API ook up-to-date gehouden met nieuwe connectiviteitsfuncties , zoals TopicQuery, die we in 5.3 hebben geïntroduceerd. Onderwerpquery's bieden een schaalbaar mechanisme voor toepassingen om historische gegevens on-demand te ontvangen.
In de moderne C++ API kunt u als volgt een TopicQuery-instantie van een DataReader maken:

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

Nu kunt u my_reader gebruiken om historische gegevensmonsters te nemen van alle overeenkomende DataWriters die het filter passeren. U kunt ook gewoon "live" gegevens blijven lezen.

Nu C++17 zojuist is goedgekeurd en C++20 voor de deur staat, blijven we onze C++ API updaten en moderniseren met interessante functies. Blijf op de hoogte of abonneer je op de RTI Blog voor alle laatste updates!


Internet of Things-technologie

  1. IoT luidt een nieuw tijdperk in voor de winkelstraat
  2. Het streamen van gegevens ontsluit nieuwe mogelijkheden in het IoT-tijdperk
  3. Wat gaat de uitrol van 5G stoppen?
  4. Het is tijd voor verandering:een nieuw tijdperk aan de rand
  5. G.hn opent de deur naar nieuwe industriële kansen
  6. Een nieuwe kijk op slimme productie voor het nieuwe normaal
  7. Als data de nieuwe olie is, wie is dan uw raffinaderij?
  8. De opkomst van een nieuwe IT-soort:de IT/OT hybride professional
  9. Is het kantoor gesloten? Microsoft kondigt nieuwe incubator voor AI-onderzoek aan
  10. std::lijst in C++ met Voorbeeld
  11. Hoe IoT gunstig is voor de moderne landbouwsector