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

최신 C++ API의 새로운 기능

DDS용 최신 C++ API를 도입한 이후로 고객의 많은 관심을 받았습니다. 그들 중 몇몇은 C++11에서 완전히 새로운 시스템을 개발하기 시작했습니다. 또한 API를 지속적으로 개선해 왔으며 크고 작은 몇 가지 새로운 기능에 대해 이야기하고 싶습니다.

C++에 대한 향상된 IDL 매핑. 코드 생성기는 최신 C++에 대한 새롭고 향상된 매핑을 제공합니다. 새로운 옵션 -stl , -언어와 결합 C++03 또는 언어 C++11 가능합니다.

이 옵션은 다음 IDL 유형의 매핑을 변경합니다.

<울>
  • 무제한 시퀀스는 std::vector에 매핑됩니다. (이를 위해서는 -unboundedSupport가 필요합니다. )
  • 제한된 시퀀스는 rti::core::에 매핑됩니다. bounded_sequence. 이 유형은 std::vector와 유사하지만 데이터 역직렬화에 최적화되어 있습니다. 지연 시간 최소화가 주요 관심사가 아니거나 T가 간단한 경우 경계 시퀀스를 std::vector에 매핑하도록 선택할 수 있습니다. 새로운 @use_vector IDL 주석도 함께 제공됩니다.
  • 문자열 및 와이드 문자열은 std::string,에 매핑됩니다. 및 std::wstring 각각.
  • 새 주석 @external("*" 포인터 표기법과 동일)이 있는 멤버는 새 유형에 매핑됩니다.dds::core::external, shared_ptr.과(와) 유사합니다. 이 래퍼는 원시 포인터에 대한 이전 매핑에 대한 보다 안전한 대안을 제공합니다. 미들웨어에서 메모리를 대여할 때 외부 멤버를 덮어쓸 수 없습니다(예:LoanedSamples 컨테이너).
  • 예를 들어, 다음 IDL 유형이 주어진 경우:

    <사전>구조 MyType {
    시퀀스 my_unbounded_seq;
    sequence my_bounded_seq;
    @use_vector 시퀀스 my_other_bounded_seq
    문자열 my_str;
    @external long my_external;
    };

    이것은 생성된 C++11 유형이 "-stl"로 표시되는 방식입니다.

    (전체 명령어:rtiddsgen -language C++11 -stl -unboundedSupport MyType.idl )

    클래스 MyType { 

    공공의:
    내 취향();
    ...

    MyType(MyType&&) =기본값;
    MyType&연산자=(MyType&&) =기본값;
    MyType&operator=(const MyType&) =기본값;
    MyType(const MyType&) =기본값;

    std::vector&my_unbounded_seq() noexcept;
    const std::vector&my_unbounded_seq() const noexcept;
    무효 my_unbounded_seq(const std::vector&값);

    rti::core::bounded_sequence&my_bounded_seq() noexcept;
    const rti::core::bounded_sequence&my_bounded_seq() const noexcept;
    무효 my_bounded_seq(const rti::core::bounded_sequence&값);

    std::vector&my_other_bounded_seq() noexcept;
    const std::vector&my_other_bounded_seq() const noexcept;
    무효 my_other_bounded_seq(const std::vector&값);

    std::string&my_str() noexcept;
    const std::string&my_str() const noexcept;
    무효 my_str(const std::string&값);

    dds::core::external&my_external() noexcept;
    const dds::core::external&my_external() const noexcept;
    무효 my_external(dds::core::external 값);

    ...
    };

    요청-응답 API. 최신 C++용 새로운 요청-회신 API는 rti::request::Requester 두 개의 엔터티로 DDS API를 확장합니다. 및 rti::request::Replier . 이 API는 이미 다른 언어로 제공되었으며 현재 최신 C++에서 5.3의 프로토타입으로 제공되고 5.3.0.7의 프로덕션 준비가 완료되었습니다.

    여기에서 간단한 코드 예제를 볼 수 있습니다.

    소규모 개선이 추가되었습니다. API를 더 쉽게 사용할 수 있도록 합니다. 예를 들어 WaitSet에서 Condition을 전달하기 위해 핸들러를 사용하는 방법을 단순화했습니다. 이전에는 핸들러가 인수가 없는 펑터여야 했습니다. 이제 조건을 인수로 사용할 수 있습니다.

    <사전>condition.handler([]() {
    // 뭔가를 하다
    });

    // 이제 우리도 지원합니다
    condition.handler([](dds::core::cond::Condition c) {
    // 뭔가를 한다 (조건 ==c)
    });

    또한 새로운 연결 기능으로 API를 최신 상태로 유지했습니다. , 5.3에서 소개한 TopicQuery와 같은. 주제 쿼리는 애플리케이션이 요청 시 기록 데이터를 수신할 수 있는 확장 가능한 메커니즘을 제공합니다.
    최신 C++ API에서는 다음과 같이 DataReader에서 TopicQuery 인스턴스를 만들 수 있습니다.

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

    이제 my_reader를 사용하여 필터를 통과하는 일치하는 모든 DataWriter에서 기록 데이터 샘플을 가져올 수 있습니다. 평소와 같이 "라이브" 데이터를 계속 읽을 수도 있습니다.

    C++17이 승인되고 C++20이 곧 출시됨에 따라 흥미로운 기능으로 C++ API를 계속 업데이트하고 현대화하고 있습니다. 최신 업데이트를 모두 보려면 계속 지켜봐 주시거나 RTI 블로그를 구독하십시오!


    사물 인터넷 기술

    1. IoT는 번화가의 새 시대를 예고합니다
    2. 스트리밍 데이터는 IoT 시대의 새로운 가능성을 열어줍니다
    3. 5G 출시를 막을 수 있는 것은 무엇입니까?
    4. 변화가 필요한 시점입니다:가장자리에 있는 새로운 시대
    5. G.hn은 새로운 산업 기회의 문을 열고 있습니다
    6. 뉴 노멀을 위한 스마트 제조 재고
    7. 데이터가 새로운 오일인 경우 정제업체는 누구입니까?
    8. 새로운 IT 종의 출현:IT/OT 하이브리드 전문가
    9. 사무실이 문을 닫았습니까? Microsoft, 새로운 AI 연구 인큐베이터 발표
    10. 예제가 있는 C++의 std::list