[openrtm-users 00997] Re: 接続しているポートの対を取得する方法について

Ando Noriaki n-ando @ aist.go.jp
2009年 11月 5日 (木) 12:23:23 JST


安藤です

添付ファイルがなかったので、どこが原因か分からないのですが、
一応以下のようなコードでコネクタの情報を取得できます。
ちなみに、コードは0.4.2用です。1.0では、構造体名など微妙に違うのでご注意を。


以下が実行結果。



Creating a component: "ConsoleIn"....succeed.
=================================================
 Component Profile
-------------------------------------------------
InstanceID:     ConsoleIn0
Implementation: ConsoleIn
Description:    Console input component
Version:        1.0
Maker:          Noriaki Ando, AIST
Category:       example
  Other properties
=================================================
=================================================
Port0 (name): out
-------------------------------------------------
- properties -
port.port_type: DataOutPort
dataport.data_type: TimedLong
dataport.interface_type: CORBA_Any
dataport.dataflow_type: Push, Pull
dataport.subscription_type: Flush, New, Periodic
-------------------------------------------------
port list: 1
connector profiles: 1
----------connector----------
name: connector0
id:   11a08ef4-abe8-202c-0100-001c23da0bdf
Port[0]
RTC:  ConsoleIn0
name: out
Port[1]
RTC:  ConsoleOut0
name: in
Please input number:



以下のコードを、onExecuteなどに挿入すれば、上の出力が得られます。
#SimpleIOのConnectorでは、activateしてから接続するので、
onActivatedではコネクタの情報は得られず、onExecuteに下記のコードを
挿入して上記の結果を得ました。
-------------------コード-------------------------
  RTC::PortList_var portlist = get_ports();
  std::cout << "port list: " << portlist->length() << std::endl;

  for (CORBA::ULong i(0); i < portlist->length(); ++i)
    {
      RTC::PortProfile_var pprofile;
      pprofile = portlist[i]->get_port_profile();

      RTC::ConnectorProfileList cprofile(pprofile->connector_profiles);
      std::cout << "connector profiles: " << cprofile.length() << std::endl;

      for (CORBA::ULong j(0); j < cprofile.length(); ++j)
        {
          std::cout << "----------connector----------" << std::endl;
          std::cout << "name: " << cprofile[j].name << std::endl;
          std::cout << "id:   " << cprofile[j].connector_id << std::endl;

          RTC::PortList pl;
          pl = cprofile[j].ports;
          for (CORBA::ULong k(0); k < pl.length(); ++k)
            {
              std::cout << "Port[" << k << "]" << std::endl;
              RTC::PortProfile_var pp;
              pp = pl[k]->get_port_profile();
              RTC::ComponentProfile_var rtcprofile;
              rtcprofile = pp->owner->get_component_profile();
              std::cout << "RTC:  " << rtcprofile->instance_name << std::endl;
              std::cout << "name: " << pp->name << std::endl;
            }
        }
    }


2009年11月4日20:37 Takashi Kojima <tkjim48 @ gmail.com>:
> 中央大学の小島です。
> いつもお世話になっております。
>
> 接続しているポートの対を取得する方法について教えてください。
> 現在コンポーネントから、情報を収集ならできるのでは?、と考え、添付ファイルのような
> プログラムを作りました。
>
> そののちに、SimpleIOプログラムをRTCLinkにて接続し、動作をテストしてみました。
>
> テスト内容
>
> ./PortScan.exe ConsoleIn0.rtc
>
> -my port length 1
> --Port : out
>  connector's profile length is 1
>    connector[out_in] registed 2 ports
>     in of ConsoleOut0
>     in of ConsoleOut0
>
> すると、以下のように表示されてしまい、
> out of ConsoleIn0
> in of ConsoleOut0
> と表示されると思っていたため、うまくいきませんでした。
> ConnectionProfileに格納されているPortの値が正しく格納されていないようです。
>
> なお、./PortScan.exe ConsoleOut0.rtcとした場合には、
>
> -my port length 1
> --Port : in
>  connector's profile length is 1
>    connector[out_in] registed 2 ports
>     in of ConsoleOut0
>     in of ConsoleOut0
>
> と表示されます。取得の仕方に何か問題がございますでしょうか?
> もしくは、もっと簡単に接続しているポートの対を情報を取得する方法はありますでしょうか?
>
> ご教授いただけると幸いです。よろしくお願いいたします。
>
> ※RTのVersionは、0.4.2です。
>
> --
> __________________________________________________________________
> Takashi KOJIMA
> E-Mail : tkjim48 @ gmail.com
> Skype : tkjim48
> MSN: taka_lx_xl_ @ hotmail.com
>
>
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒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 メーリングリストの案内