[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 メーリングリストの案内