0

openDDS で簡単なメッセージ プログラムを作成しています。このプログラムは、パブリッシャーとサブスクライバーを使用します。パブリッシャーで、次のメッセージを書きます。

DDS::ReturnCode_t error = message_writer->write(message, DDS::HANDLE_NIL);

180 バイトから 3012 バイトに送信しようとすると、ライターは次のエラーで失敗します。

エラー 10 (== DDS::RETCODE_TIMEOUT)

、約260メッセージの後(1500メッセージを送信しようとしています)。私が奇妙だと思うのは、1 <= x < 180 および 3012 > x > 102400+ バイトからのメッセージを送信したときに機能することです。

ライター側でエラーが発生しています。私が行うライターの下:

if (error != DDS::RETCODE_OK) { 
    std::cerr << "writer failed because of error" << error << std::endl; 
}

私のidlファイルは次のようになります:

module Mess { 
    struct Mes { 
        string message; 
    };}; 

したがって、これは TAO 文字列マネージャーを使用します。メッセージに char* を渡します。

Messenger::Message message;

message.message = "some_Message"; 

その後、前のようにメッセージを書きます

参加者:

DDS::DomainParticipant_var participant = dpf->create_participant(DOMAIN_ID, PARTICIPANT_QOS_DEFAULT, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);

トピック:

DDS::Topic_var topic = participant->create_topic("TopicName", type_name, TOPIC_QOS_DEFAULT, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);

出版社:

DDS::Publisher_var publisher = participant->create_publisher(PUBLISHER_QOS_DEFAULT, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);

ライター:

DDS::DataWriter_var writer = publisher->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

私は問題を発見しました。この理由は、ネットワークがサンプルを配布できるよりも速くアプリケーションを公開していたためです。修正は、DataWriter で次の Qos を使用することでした。

DDS::DataWriterQos dw_qos;
pub->get_default_datawriter_qos (dw_qos);
dw_qos.history.kind = DDS::KEEP_ALL_HISTORY_QOS;
dw_qos.reliability.kind = DDS::RELIABLE_RELIABILITY_QOS;
dw_qos.reliability.max_blocking_time.sec = 22;
dw_qos.reliability.max_blocking_time.nanosec = 0;
dw_qos.resource_limits.max_samples_per_instance = 5;
DDS::DataWriter_var dw = pub->create_datawriter(topic, dw_qos, 0, OpenDDS::DCPS::DEFAULT_STATUS_MASK);

このデータ ライターには、次の動作があります。

1 人以上のサブスクライバーへの配信が保留されている最大 5 つのサンプルをキューに入れることができます。

5 つのサンプルが保留中の場合、書き込み呼び出しは最大 22 秒間ブロックされ、キューが開くのを待ちます。

開始が発生しない場合、書き込み呼び出しは RETCODE_OK の代わりに DDS::RETCODE_TIMEOUT を返します。

助けてくれてありがとう!

于 2015-09-02T09:14:31.607 に答える