[openrtm-users 00314] Re: 動的なサービスポートの追加について
kurihara shinji
shinji.kurihara @ aist.go.jp
2007年 12月 10日 (月) 21:42:39 JST
小島 様。
栗原です。
添付して頂いたファイルを拝見させて頂きました。
確認したい事が2点程あります。
・ 対になるサービスポートとコンシューマポートにおいて、"Name"(今回の例ですと、
myservice0またはcallback0)と"Type"(RPまたは、RQ)は同じになっていますでしょ
うか?
(OpenRTM-aistサポートページの"FAQ"->"RtcTemplate"を参照下さい。)
・ RTCLinkにてサービスポート間の接続時に警告等はでておりませんでしょうか?
"No corresponding port interface."等。
> また、interface内で、変数の宣言の仕方等わかりましたら
> ご教授願います。
interfaceの属性であれば、以下のように記述できます。
interface hoge {
attribute string version;
};
以上、宣しくお願い致します。
> 中央大学の小島です。
> お世話になります。
>
> > 一つ、気になった点があります。
> >
> > > 警告内容は添付させていただきます。
> > > service.cpp 192は、m_request.push_back(tmpReply)に該当します。
> > と書いてありますが、m_requestは"std::vector< RQSVC_impl > m_ request;"
> > と宣言されておりますので、m_request.push_back()ではなく、
> > m_reply.push_back()の間違いではないでしょうか?
> > m_replyには何も入ってないようですので、Consumerの方でnilオブジェクト
> > に対してオペレーション呼び出しを試みてエラーになると思います。
> >
> > ご確認の程、宣しくお願い致します。
>
> そうですね。栗原様の言うとおり、こちらの記述ミスのようです。
> 実際のソースコードではご指摘があったように書いてありました。
>
> むしろ、あのコードではコンパイルできませんでした。
> 原因は、コンシューマにくるんでしまうと、変数の参照ができないようです。
> そこで、関数したコードを添付しました。
> (おそらくIDLファイルから *.hhファイルなどを作っていて、
> リンクの解決ができてないように思います)
>
> 今度は、そのエラーがおこるサンプルプログラムを作成し、添付いたしますので
> 何か情報があればお願いいたします。
>
> また、interface内で、変数の宣言の仕方等わかりましたら
> ご教授願います。
>
> > > 中央大学の小島です。
> > > お世話になっております。
> > >
> > > 動的なサービスポートの追加および削除を行おうと思ったのですが、
> > > 警告がでながらもコンパイルは通りますが、実行しポートにアクセス
> > > するようなことを行うと、RTCLink上で赤くなってしまいます。
> > >
> > > その時には
> > > omniORB: ERROR -- the aplication attemped to invoke an operation on a
> > > nil reference
> > >
> > > 特に必要がない部分については省略しますが、
> > > ポートの追加はだいたい以下のように行いました。
> > >
> > > ---service.idl---
> > > interface RQ
> > > {
> > > void request();
> > > }
> > >
> > > interface RP
> > > {
> > > void reply();
> > > }
> > > ---serviceSVC_impl.h--
> > > RPSVC_impl
> > > {
> > > public :
> > > short flag(0);
> > > }
> > >
> > > ---service.h---
> > >
> > > long dynamicPortCounter
> > > std::vector<RTC::CorbaPort *> m_ServicePort;
> > > std::vector< RQSVC_impl > m_ request;
> > > std::vector< RTC::CorbaConsumer<RP> > m_reply;
> > >
> > > ---service.cpp---
> > >
> > > void service::onInitialize(...){
> > > addport();
> > > }
> > >
> > > void service::onExecute(...)
> > > {
> > > for(unsigned long i(0);i<m_request.size();i++)
> > > {
> > > if(m_reply[i]->flag == 1) m_request[i].request();
> > > }
> > > }
> > >
> > > void service::addport()
> > > {
> > > std::string portName("IDServicePort");
> > > std::string requestName("requestID");
> > > std::string provideName("providerID");
> > >
> > > portName += otos(dynamicPortCounter);
> > > requestName += otos(dynamicPortCounter);
> > > provideName += otos(dynamicPortCounter);
> > >
> > > //provider port
> > > RQSVC_impl tmpRequest;
> > > m_request.push_back(tmpRequest);
> > >
> > > //consumer port
> > > RTC::CorbaConsumer<RP> tmpReply;
> > > m_request.push_back(tmpReply);
> > >
> > > //regist port
> > > m_ServicePort.push_back(new RTC::CorbaPort(portName.c_str()));
> > > m_ServicePort.back()->registerProvider(provideName.c_str()
> > > ,provideName.c_str() ,m_request.back());
> > > m_ServicePort.back()->registerConsumer(requestName.c_str)
> > > ,requestName.c_str() ,m_reply.back());
> > > }
> > >
> > > 警告内容は添付させていただきます。
> > > service.cpp 192は、m_request.push_back(tmpReply)に該当します。
> > >
> > > エラー内容から推測すると、接続しないでアクティブ化してしまったために、
> > > コンシューマーの実体が存在していないというエラーなのでしょうか?
> > >
> > > もし、仮にそうであれば、回避する方法もありますでしょうか?
> > >
> > > ご教授お願いいたします。
> > >
> > > <----------------------------------------------------->
> > > 中央大学大学院 理工学研究科
> > > 電気電子情報通信工学専攻
> > > 博士課程前期1年 國井研究室
> > >
> > > 小島 隆史 [Takashi Kojima]
> > >
> > > ADRESS: 〒112-8551 東京都文京区春日1-13-27
> > > TEL : 03-3817-1866(研究室)
> > > FAX : 03-3817-1847(学科準備室)
> > > E-Mail: takashi @ hmsl.elect.chuo-u.ac.jp
> > > <----------------------------------------------------->
> > >
> > --
> > ----------
> > 栗原 眞二
> > shinji.kurihara @ aist.go.jp
> > kurihara @ imagination.co.jp
> >
>
> <----------------------------------------------------->
> 中央大学大学院 理工学研究科
> 電気電子情報通信工学専攻
> 博士課程前期1年 國井研究室
>
> 小島 隆史 [Takashi Kojima]
>
> ADRESS: 〒112-8551 東京都文京区春日1-13-27
> TEL : 03-3817-1866(研究室)
> FAX : 03-3817-1847(学科準備室)
> E-Mail: takashi @ hmsl.elect.chuo-u.ac.jp
> <----------------------------------------------------->
>
--
----------
栗原 眞二
shinji.kurihara @ aist.go.jp
kurihara @ imagination.co.jp
openrtm-users メーリングリストの案内