0

RedHawk 1.9 を使用しています。文字列データを送信する予定の出力ポートがあります。IDE の概要パネルで、BULKIO dataChar タイプのポートを追加します。次のことを試すと:

   std::string cmd = "testCmd";
   this->dataChar->pushPacket( cmd.str(), bulkio::time::utils::now(), 
       false, this->ar8200CmdStream_id);

pushPacket が std::vector と char * を必要としていることを示すエラー メッセージが表示されます。これは、マニュアルで採用されているアプローチのように見えます。

文字列に間違った BULKIO タイプを選択しましたか? 私は dataXML を使用することを考えましたが、それは XML 形式であると予想していました。

PS: マニュアルの pushPacket 呼び出しに時間が含まれていないことに気付きました。

4

1 に答える 1

0

あなたは正しいです。char の BULKIO データ ポートは、char のベクトルを受け取ります。以下に、bulkio char 出力ポートを使用して文字列を送信し、bulcio char 入力ポートを使用してデータを受信するコード スニペットを示します。


pushString コンポーネントのサービス関数から:

std::string str = "hello_world";
data = std::vector<char>(str.begin(), str.end());

stringOut->pushPacket(this->data, tstamp, false, this->stream_id);

receiveString コンポーネントのサービス関数から:

bulkio::InCharPort::dataTransfer *tmp = stringIn->getPacket(-1);

if (not tmp) { // No data is available
    return NOOP;
}

std::string outputString(tmp->dataBuffer.begin(), tmp->dataBuffer.end());
std::cout << outputString << std::endl;
fflush(stdout);

ただし、通常、bulcio ポート タイプはストリーミング データ転送に使用されます。コマンドと制御の手段として文字列を使用する場合は、メッセージ API ( http://redhawksdr.github.io/Documentation/mainch17.html )を優先して、bulkio char ポートの選択を再検討することをお勧めします。 .

メッセージング API を使用すると、IDE のイベント ビューアを利用することもできます: http://redhawksdr.github.io/Documentation/mainch19.html#x21-32900019.4.7

于 2013-11-04T19:24:47.023 に答える