[openrtm-devel:00382] Re: Manager::getPOAからのPOA::reference_to_servantでWrongAdapterエラーが出てるのですが・・・
Ando Noriaki
n-ando @ aist.go.jp
2014年 6月 13日 (金) 20:02:49 JST
菅様
安藤です
試してみていただきありがとうございます。
addComponent でコンポーネントリストの m_comps に即座に
追加されないのは,コンポーネントのコールバック実行中に,
コンポーネントリストが更新されるのを避けたかったからです。
でも,ECが回っていないときには即座にコンポーネントリストが
更新されてもいいような気もしますね。ちょっと考えさせてください。
----
経済産業省 産業機械課 情報化推進係長
博士(工学) 安藤 慶昭
TEL: 029-861-5981 (携帯) TEL: 03-3501-1691(産機課代表)
TEL: 03-3501-1512(経産省代表)→ 72545(個人PHS)
E-MAIL: ando-noriaki @ meti.go.jp
Noriaki Ando, Ph.D. Assistant Director
Industrial Machinery Division, Manufacturing Industries Bureau
Ministry of Economy, Trade and Industry
E-MAIL: ando-noriaki @ meti.go.jp
2014年6月13日 15:22 Yuki Suga <ysuga @ ysuga.net>:
> 安藤先生:
> 菅です.お世話になります.
>
> いただいたコードで動作しました.OSX10.9,Xcode5.1,omniORB4.1.6で試しました.
>
> 一点,お聞きしたいのですが,
> 現状で,ExecutionContextBase::addCompnentをすると,
> ExecutionContextWorker内のm_addedCompsにRTObjectStateMachineが格納されて,m_compsには入りません.
> 一度,tickが呼ばれて,ExecutionContextWorker::invokeWorkerが呼ばれない限りは,
> ExecutionContextWorker::m_compsメンバに移動されないので,
> activateComponentを送っても,findComponentで失敗します.
> これは仕様ですか?あまり直感的じゃないのですが・・・
>
> できれば,
>
> RTObject_ptr comp = ....;
> EC_ptr ec = Manager::instance::createContext(ec_id);
> ec.addComponent(comp);
> ec.activateComponent(comp);
>
> としたいところでしたが・・・
>
> ではでは
>
>
>
> 2014年6月13日 0:14 Ando Noriaki <n-ando @ aist.go.jp>:
>> 菅さん
>>
>> 安藤です
>>
>> とりあえず下記のように変更しました。テストしてません。
>> すみませんがそちらの環境で試していただけると助かります。
>> よろしくお願いいたします。
>>
>>
>> Index: RTObjectStateMachine.cpp
>> ===================================================================
>> --- RTObjectStateMachine.cpp (リビジョン 2557)
>> +++ RTObjectStateMachine.cpp (作業コピー)
>> @@ -161,8 +161,19 @@
>> if (CORBA::is_nil(m_caVar)) { return; }
>> m_ca = true;
>> PortableServer::POA_ptr poa = RTC::Manager::instance().getPOA();
>> - m_rtobjPtr =
>> - dynamic_cast<RTC::RTObject_impl*>(poa->reference_to_servant(comp));
>> + try
>> + {
>> + m_rtobjPtr =
>> + dynamic_cast<RTC::RTObject_impl*>(poa->reference_to_servant(comp));
>> + }
>> + catch (CORBA::SystemException& ex)
>> + {
>> + m_rtobjPtr = NULL;
>> + }
>> + catch (...)
>> + {
>> + m_rtobjPtr = NULL;
>> + }
>> }
>>
>> void RTObjectStateMachine::
>>
>>
>>
>> 2014年6月13日 0:07 Ando Noriaki <n-ando @ aist.go.jp>:
>>> 安藤です
>>>
>>> poa->reference_to_servant(comp) ってException出るんですね?
>>> 単にNULLが帰ってくるのだと思っていました。単純にcatchし忘れですねこれ。
>>> ちなみに,m_rtobjPtr はNULLでも大丈夫なようになっています。
>>>
>>> ----
>>> 経済産業省 産業機械課 情報化推進係長
>>> 博士(工学) 安藤 慶昭
>>> TEL: 029-861-5981 (携帯) TEL: 03-3501-1691(産機課代表)
>>> TEL: 03-3501-1512(経産省代表)→ 72545(個人PHS)
>>> E-MAIL: ando-noriaki @ meti.go.jp
>>>
>>> Noriaki Ando, Ph.D. Assistant Director
>>> Industrial Machinery Division, Manufacturing Industries Bureau
>>> Ministry of Economy, Trade and Industry
>>> E-MAIL: ando-noriaki @ meti.go.jp
>>>
>>>
>>> 2014年6月12日 22:40 <ysuga @ ysuga.net>:
>>>> お世話になります.菅です.
>>>> CORBAの初歩的な質問かもしれませんが,どなたか教えてください.
>>>> v_repというシミュレータ内でManagerを立て,RTCを起動し,外からシミュレータ全体をサービスポートで制御するプラグインを開発をしています.
>>>> そのサービスポートで,さらに外部プロセスのRTCのURIを投げると,その外部RTCに対して,シミュレータ内でSynchExtTriggerECを生成し,addComponentをするようにしています.
>>>> 結果としてECが2つ,RTCに取り付く形になっちゃいますが,こうすると,何気なく起動したRTCを同期させることが出来ると考えています.
>>>> ・・・が,上手く行きません.外部のRTCはJava版およびC++版のRTCですが同様の失敗です.シミュレータはC++版です.
>>>> 上手く行かない症状は, 0.addComponentの返り値が2
>>>> (BAD_PARAMETER?)になる.
>>>> 1.participantsのECがSystemEditorで上手く表示されない.rateなどがnullと表示されてしまう.
>>>> 2.addComponentした直後のactivate_componentが失敗する.
>>>> C++のtrunkのコードを追っていくと,ECから外部のRTCのRTObject_ptrに対してaddComponent()をすると,RTObjectのattach_context()の呼び出し後に,
>>>> RTObjectStateMachineを生成して,そのコンストラクタの中で,setComponentAction()メソッド内で,
>>>> Manager::getPOA()で得たアダプタでreference_to_servantをやっているようですが,この部分で失敗しているようです.
>>>> ログを見てみましたが,この辺のログ出力があまりないのです・・・が,おおよそこの辺で失敗して,CORBA::Exceptionを送出しているというのは分かりました.
>>>> この部分のコードだけ取り出して実験してみたところ,reference_to_servantの部分でCORBA::WrongAdapterExceptionを送出してしまいます.
>>>> そもそもオブジェクトをactivateしたアダプタじゃないと,reference_to_servantできないと思うのですが,
>>>> 僕の使い方が悪いのでしょうか?
>>>> どなたか詳しい方,回避方法など教えていただけませんか?
>>>>
>>>> _______________________________________________
>>>> openrtm-devel mailing list
>>>> openrtm-devel @ openrtm.org
>>>> http://www.openrtm.org/mailman/listinfo/openrtm-devel
>> _______________________________________________
>> openrtm-devel mailing list
>> openrtm-devel @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-devel
>
>
>
> --
> ///////////////////////////////////////////////////////////////////
> // Yuki Suga, Ph.D.
> // URL: http://www.ysuga.net/?lang=en
> // E-mail: ysuga @ ysuga.net
> ///////////////////////////////////////////////////////////////////
> _______________________________________________
> openrtm-devel mailing list
> openrtm-devel @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-devel
More information about the openrtm-devel
mailing list