末永さま
安藤です
詳しく見てないのではずしてたらすみません。
addConnectorDataListener の第3引数に false を与えるとどうなりますか?
http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/classRTC_1_1InPortBase.html#87108f42506a526d05dd72d67a1654af
2010年10月22日0:55 Tsuyoshi Suenaga :
> OpenRTM-aistユーザの皆さん
>
> 奈良先端大の末永です.
>
> 以前,産総研の安藤様からのメール[openrtm-users 00512]で
> onWriteコールバックを用いた通信方法(OpenRTM-aist-0.4.2用)がありましたが,
> こちらをセック中本様からのメール[openrtm-users 01328]を参考に
> OpenRTM-aist-1.0.0 用に書き換えてみました.
>
> 一応,動いてはいるのですが,RTSystemEditorからPipe RTCをexitした際に
> 異常終了で終わっていることに気が付きました.
>
> あくまで終了時だけなので影響は少ないのですが,あまり気持ちの良いものではありません.
> 何か記述で間違っていたり,勘違いしている点などありますでしょうか?
> 何かお気づきの方がおりましたら,ご教授頂けましたら幸いです.
>
> どうぞよろしくお願い致します.
>
>
> ・添付ファイルの説明
> Pipe_042.tar.g_ OpenRTM-aist-0.4.2用(ほぼ安藤様のファイル)
> Pipe_100.tar.g_ OpenRTM-aist-1.0.0用
> GetAndSendTimedLong.tar.g_ 動作テスト用
> diff_Pipe_cpp.pdf Pipe.cppの差分
> diff_Pipe_h.pdf Pipe.hの差分
> OnWriteCallBack.png 実行結果
> error_when_exiting.txt 終了時に出力されるエラー(gdb表示)
> ※ 添付ファイル *.tar.g_ は *.tar.gz にリネームして解凍してください。
>
> ・参考にしたメール
> [openrtm-users 01328] OpenRTM-aist-1.0.0-RELEASEにおけるRC1からの変更点
> [openrtm-users 00512] Re: onWriteConvert
>
> 以上.
>
>
> 2008年7月8日20:19 Ando Noriaki
>> From Ando Noriaki
>> 日付 2008年7月8日20:19
>> 件名 [openrtm-users 00512] Re: onWriteConvert
>>
>>
>> 産総研 安藤です
>>
>> 先ほどのメールの回答です。
>>
>> 添付のサンプルをご覧ください。
>> 添付ファイル Pipe.tar.g_ は Pipe.tar.gz にリネームして解凍してください。
>>
>> このコンポーネントはTimedLong型のInPort/OutPortをひとつづつもち、
>> InPortに入ってきたデータをOutPortへコールバックを使って即座に
>> 伝送するものです。
>>
>> コンパイル後、ConsoleInとConsoleOutの間にはさんで接続してください。
>> Pipeコンポーネントはコールバックを使用しているので、
>> onExecuteでデータの読み込み+書き出しをしなくても、
>> InPortから入ったデータが即座にOutPortから出て行きます。
>> したがって、Active化しなくても動作します。
>>
>>
>>
>> 2008/07/08 19:48 Ando Noriaki
>>> 産総研 安藤です
>>>
>>> 高エネ研の安様より以下のようなメールをいただきましたので、
>>> 参考までにOpenRTM MLに転送させていただきます。
>>>
>>>
>>> ---------- 転送されたメッセージ ----------
>>> 差出人: Yoshiji Yasu
>>> 日付: 2008/07/08 10:02
>>> 件名: [rtm-kek 00535] onWriteConvert
>>>
>>>
>>> 安です。onWriteConvertについて質問です。
>>>
>>> proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
>>> 入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
>>> のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
>>> クでOutPortのwrite を実行してしまうということです。
>>>
>>> InPortCorbaConsumer.hで
>>> status = _ptr()->put(tmp);
>>> でCORBAのデータ転送とRingBufferのputメソッドを行います。
>>> OutPort.h, InPort.hのwriteメソッドの中で、
>>> status = this->put((*m_OnWriteConvert)(value));
>>> という形でコールバックが呼ばれます。
>>>
>>> proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
>>> CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
>>> タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
>>> るような仕掛けがないといけないのではないでしょうか?
>>>
>>> コールバックの例題をみると、
>>> OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
>>> フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
>>> うですし、
>>> onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
>>> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
>>> ようです。
>>>
>>> 私の理解が間違っているかもしれません。
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
>
OpenRTM-aistユーザの皆さん
奈良先端大の末永です.
以前,産総研の安藤様からのメール[openrtm-users 00512]で
onWriteコールバックを用いた通信方法(OpenRTM-aist-0.4.2用)がありましたが,
こちらをセック中本様からのメール[openrtm-users 01328]を参考に
OpenRTM-aist-1.0.0 用に書き換えてみました.
一応,動いてはいるのですが,RTSystemEditorからPipe RTCをexitした際に
異常終了で終わっていることに気が付きました.
あくまで終了時だけなので影響は少ないのですが,あまり気持ちの良いものではありません.
何か記述で間違っていたり,勘違いしている点などありますでしょうか?
何かお気づきの方がおりましたら,ご教授頂けましたら幸いです.
どうぞよろしくお願い致します.
・添付ファイルの説明
Pipe_042.tar.g_ OpenRTM-aist-0.4.2用(ほぼ安藤様のファイル)
Pipe_100.tar.g_ OpenRTM-aist-1.0.0用
GetAndSendTimedLong.tar.g_ 動作テスト用
diff_Pipe_cpp.pdf Pipe.cppの差分
diff_Pipe_h.pdf Pipe.hの差分
OnWriteCallBack.png 実行結果
error_when_exiting.txt 終了時に出力されるエラー(gdb表示)
※ 添付ファイル *.tar.g_ は *.tar.gz にリネームして解凍してください。
・参考にしたメール
[openrtm-users 01328] OpenRTM-aist-1.0.0-RELEASEにおけるRC1からの変更点
[openrtm-users 00512] Re: onWriteConvert
以上.
> 日付 2008年7月8日20:19
> 件名 [openrtm-users 00512] Re: onWriteConvert
>
>
> 産総研 安藤です
>
> 先ほどのメールの回答です。
>
> 添付のサンプルをご覧ください。
> 添付ファイル Pipe.tar.g_ は Pipe.tar.gz にリネームして解凍してください。
>
> このコンポーネントはTimedLong型のInPort/OutPortをひとつづつもち、
> InPortに入ってきたデータをOutPortへコールバックを使って即座に
> 伝送するものです。
>
> コンパイル後、ConsoleInとConsoleOutの間にはさんで接続してください。
> Pipeコンポーネントはコールバックを使用しているので、
> onExecuteでデータの読み込み+書き出しをしなくても、
> InPortから入ったデータが即座にOutPortから出て行きます。
> したがって、Active化しなくても動作します。
>
>
>
>> 産総研 安藤です
>>
>> 高エネ研の安様より以下のようなメールをいただきましたので、
>> 参考までにOpenRTM MLに転送させていただきます。
>>
>>
>> ---------- 転送されたメッセージ ----------
>> 日付: 2008/07/08 10:02
>> 件名: [rtm-kek 00535] onWriteConvert
>>
>>
>> 安です。onWriteConvertについて質問です。
>>
>> proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
>> 入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
>> のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
>> クでOutPortのwrite を実行してしまうということです。
>>
>> InPortCorbaConsumer.hで
>> status = _ptr()->put(tmp);
>> でCORBAのデータ転送とRingBufferのputメソッドを行います。
>> OutPort.h, InPort.hのwriteメソッドの中で、
>> status = this->put((*m_OnWriteConvert)(value));
>> という形でコールバックが呼ばれます。
>>
>> proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
>> CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
>> タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
>> るような仕掛けがないといけないのではないでしょうか?
>>
>> コールバックの例題をみると、
>> OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
>> フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
>> うですし、
>> onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
>> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
>> ようです。
>>
>> 私の理解が間違っているかもしれません。
>>