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