산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

RTI Connext 모던 C++ DDS API의 주요 개선 사항

모던 C++ API for DDS를 도입한 이후 고객들로부터 상당한 관심을 보았습니다. 많은 고객이 C++11을 사용하여 새로운 시스템을 구축하기 시작했고, 우리는 여러 영향력 있는 개선 사항으로 API를 지속적으로 개선해 왔습니다.

모던 C++로 향상된 IDL 매핑

RTI의 코드 생성기는 이제 -stl 옵션을 제공하며, -language C++03 또는 -language C++11과 함께 사용됩니다. 이 옵션은 여러 IDL 타입의 매핑을 업데이트합니다:

예를 들어, 다음 IDL 타입이 주어졌을 때:

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; };

명령 rtiddsgen -language C++11 -stl -unboundedSupport MyType.idl을 사용하면 생성된 C++11 클래스는 다음과 같습니다:

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); ... };

모던 C++용 요청-응답 API

API에는 이제 두 개의 새로운 엔티티가 포함됩니다: rti::request::Requester 및 rti::request::Replier. 이들은 네이티브 요청-응답 패턴을 제공하며, 이는 다른 언어에서 이미 사용 가능했고 5.3에서 프로토타입으로 도입되었으며 5.3.0.7에서 프로덕션 준비가 되었습니다.

간결한 코드 예제는 여기에서 확인할 수 있습니다.

소소한 API 개선 사항

몇 가지 일반적인 작업을 단순화했습니다:

condition.handler([]() { // do something }); // 또는 새로운 시그니처로 condition.handler([](dds::core::cond::Condition c) { // do something (condition == c) });

주문형 과거 데이터를 위한 TopicQuery

5.3에 도입된 TopicQuery는 애플리케이션이 과거 데이터를 주문형으로 검색할 수 있게 합니다. 모던 C++ API에서 DataReader로부터 TopicQuery를 다음과 같이 생성할 수 있습니다:

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

그런 다음 라이브 데이터를 정상적으로 수신하면서 필터와 일치하는 과거 샘플을 가져올 수 있습니다.

앞으로의 전망

C++17이 승인되고 C++20이 다가옴에 따라 RTI Connext는 모던 언어 기능과 성능 개선으로 C++ API를 계속 진화시킬 것입니다. RTI 블로그를 구독하거나 최신 업데이트를 위해 계속 지켜봐 주세요.

사물 인터넷 기술

  1. IoT, 하이스트리트 디지털 르네상스 견인
  2. 3세대 스트림 처리: IoT 데이터를 실시간 행동으로 전환
  3. 5G 롤아웃이 지연되는 이유: 비용, 스펙트럼, 커버리지 과제
  4. 엣지 컴퓨팅: 실시간 데이터 활용, 효율성 증대, 신규 수익 창출
  5. G.hn: 비용 효율적이고 신뢰할 수 있는 연결로 산업용 IoT 혁명 주도
  6. 뉴노멀 시대 스마트 제조 재고: 복원력을 위한 데이터 주도 전략
  7. 데이터: 새로운 오일 – 정제소가 원시정보 비즈니스가치로 바꾸는법
  8. IT/OT 하이브리드 전문가의 등장: 데이터센터와 산업 자동화의 가교
  9. 마이크로소프트, 범용 지능 중심 AI 연구 인큐베이터 출범
  10. C++ std::list 마스터하기: 문법, 함수, 실전 예제