[openrtm-users 01540] Re: データポートコールバックに関する質問

Ando Noriaki n-ando @ aist.go.jp
2011年 1月 13日 (木) 22:37:28 JST


二宮様、皆様

安藤です

栗原から説明がありましたようにpull型ですと、「データがの送信が完了した」
ということをOutPort側では確認できないので、実装時にON_RECEIVEDは
コールしないようにしました。

ただし、pull型の場合InPort側はデータを受け取り処理をできる準備ができているはず
(onExecute内のロジックにもよりますが)なので、ON_SENDがほぼ同等の
意味になるかと思います。ただし、データが到達した厳密なタイミングを
知りたい場合は今のところそれを知る方法はありません。

CORBAのPortableInterceptorのServerInterceptor?を使うとかなり
近いことができるのですが、それでもオペレーションが戻る寸前のタイミング
にフックを仕掛けるにとどまり、送信が完了したことを検知する仕組みは
なさそうです。(もしご存知の方がいれば教えてください。)

もしこれを行うのであれば現在のOutPortのインターフェースを
例えば、以下のように変更する必要があります。

  interface OutPortCdr
  {
    PortStatus get(out CdrData data, out long cookie);
    void done(in long cookie); // これを追加する
  };

1回のデータ送信で2回呼び出しが発生してしまうので、
あまりうれしくない拡張のように思います。したがいまして、
現状の仕様のままで行きたいと思います。

以上、よろしくお願いいたします。

なお、コールバックの詳細については、デベロッパーズガイドの
データポートの応用編で書く予定なのですが、筆が遅くてまだそこまで
たどり着いておりません。すみませんが、いましばらくお待ちください。

コールバックについては ConnectorListener.hのリファレンスマニュアルの
以下のページをご覧ください。

http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/namespaceRTC.html#aecdfe03a1e91ff9522a322e4bcc9ed71

http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/namespaceRTC.html#a56d51b87875a454c91b4fee8af41422c

http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/classRTC_1_1ConnectorListener.html

http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/classRTC_1_1ConnectorDataListener.html


2011年1月13日10:48 二宮恒樹 <tnninomi @ fsi.co.jp>:
> 原様、栗原様
>
> お世話になっております。富士ソフトの二宮です。
>
> 丁寧なご説明、ありがとうございました。仕組みを理解できました。
>
> 仕様につきましては、特に対応はせず、現状のままで問題ないかと思います。
>
> 原様の仰るとおり「ON_RECIEVEDを使いたい場合には、push型の接続を使う」
> ということで、目的に応じてコネクタの属性を使い分ければ良く、各々の特性を
> 理解するにあたり今回質問させていただいた次第です。
>
> 以上です。
>
> 2011年1月13日9:04 原 功 <isao-hara @ aist.go.jp>:
>> 皆様:
>>
>> 産総研の原です。
>>
>> On 2011/01/13, at 0:13, kurihara shinji wrote:
>>>
>>>> pull型でも送信側としては送り出したデータが相手に到達したのか?は知りたい
>>>> ケースがあるかと思います。
>>> OutPort側のget()がreturnする直前でON_RECEIVEDをコールするように変更する事は
>>> 可能ですが、この場合、「InPortへのデータ送信が完了したという保証はできない」
>>> といった条件がつきます。
>>> これでもよろしければ、pull型の接続でもOutPort側でON_RECEIVEDコールバックを
>>> コールするように変更致します。
>>> タイミング的には、 ON_BUFFER_READ→ON_SEND->ON_RECEIVED(ON_SENDの直後)となりま
>>> す。
>>>
>>> この件に関しまして、皆様のご意見をいただければと存じます。
>>
>>
>> この件ですが、get()がreturnする直前では、厳密には、データを送信していません。
>> ON_SENDの前になるはずです。上記のような実装だと、ON_SEND=ON_RECEIVEDと
>> なると思います。
>> 現在の実装では、pull型であれば、ON_RECEIVEDをコールすることは、厳密には難しいと思いますので、
>> ON_RECIEVEDを使いたい場合には、push型の接続を使うのではないでしょうか。
>>
>> ------------------------------------------------------------
>> 産業技術総合研究所   知能システム研究部門 インタラクションモデリングG
>> 主任研究員 原  功 <Isao-Hara @ aist.go.jp>
>> Isao HARA, Senior Researcher, ISRI, ,AIST,Japan
>> TEL: +81-29-861-5973       FAX: +81-29-862-6631
>>
>
> ---------------------------------------------
> 二宮 恒樹(Tsuneki Ninomiya)
> 富士ソフト株式会社 ロボット事業推進部 R&D室
> E-mail :tnninomi @ fsi.co.jp
> Tel/Fax:03-3256-6353
> (RTC再利用技術研究センター)
> ---------------------------------------------
>
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒305-8568 つくば市梅園1-1-1 中央第2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org

Noriaki Ando, Ph.D.
    Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
    AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org



openrtm-users メーリングリストの案内