エラーメッセージ

  • Warning: file_put_contents(temporary://file9Abdg9): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed file_unmanaged_save_data() (/var/www/html/openrtm/includes/file.inc ファイル 2024行).
  • ファイルを作成できませんでした。
  • Warning: file_put_contents(temporary://fileKQScB7): failed to open stream: "DrupalTemporaryStreamWrapper::stream_open" call failed file_unmanaged_save_data() (/var/www/html/openrtm/includes/file.inc ファイル 2024行).
  • ファイルを作成できませんでした。

プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び出す方法について

8 個の投稿 / 0 new
最終投稿
kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び出す方法について

中央大学 新妻研究室 修士2年 小林と申します.

RTミドルウェアをはじめて5か月の者です. 初歩的な質問で申し訳ございませんが,今回,プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び出す方法について伺いたいと思います.

・プロバイダのサービスポート(provService) ・コンシューマのサービスポート(consService) ・OutPort(DataOut) の3つのポートを持つRTCの provServiceSVC_impl.cpp 内で m_consService->メソッド名 や m_DataOutOut.write() を使いたいと考えております.これを実装するためには,どのようなコードを provServiceSVC_impl.h と provServiceSVC_impl.cpp に書けばよろしいのでしょうか?

類似した内容の openrttm-users 00349 を拝見致し,provServiceSVC_imple.h で定義されるクラスに OutPort_cp を用意し,この変数にOutPortのアドレスを渡そうかと考えましたが,結局 コンパイルエラー(error C2512)を自分では解決できませんでした.

以上です. ご指南の程,よろしくお願い申し上げます.

未定義
kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
[openrtm-users 02426] プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び

中央大学 新妻研究室 修士2年 小林と申します.
RTミドルウェアをはじめて5か月の者です.
初歩的な質問で申し訳ございませんが,今回,プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び出す方法について伺いたいと思います.
・プロバイダのサービスポート(provService)
・コンシューマのサービスポート(consService)
・OutPort(DataOut) の3つのポートを持つRTCの
provServiceSVC_impl.cpp 内で m_consService->メソッド名 や
m_DataOutOut.write()
を使いたいと考えております.これを実装するためには,どのようなコードを
provServiceSVC_impl.h と provServiceSVC_impl.cpp
に書けばよろしいのでしょうか? 類似した内容の
openrttm-users 00349 を拝見致し,provServiceSVC_imple.h
で定義されるクラスに OutPort_cp
を用意し,この変数にOutPortのアドレスを渡そうかと考えましたが,結局
コンパイルエラー(error
C2512)を自分では解決できませんでした. 以上です.
ご指南の程,よろしくお願い申し上げます.

_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

root
オフライン
Last seen: 6日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 02427] プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼

小林さん

産総研 安藤です

やり方はまぁ問題ないと思いますので、あとはどう書くかだけですね。
コンパイルエラーのメッセージもわからないので、
何がどう悪いのかこちらとしてもわかりません。
コードを見せてもらったほうが早いと思います。

2012年2月8日15:55 :
> 中央大学 新妻研究室 修士2年 小林と申します.
> RTミドルウェアをはじめて5か月の者です.
> 初歩的な質問で申し訳ございませんが,今回,プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼び出す方法について伺いたいと思います.
> ・プロバイダのサービスポート(provService)
> ・コンシューマのサービスポート(consService)
> ・OutPort(DataOut) の3つのポートを持つRTCの
> provServiceSVC_impl.cpp 内で m_consService->メソッド名 や
> m_DataOutOut.write()
> を使いたいと考えております.これを実装するためには,どのようなコードを
> provServiceSVC_impl.h と provServiceSVC_impl.cpp
> に書けばよろしいのでしょうか? 類似した内容の
> openrttm-users 00349 を拝見致し,provServiceSVC_imple.h
> で定義されるクラスに OutPort_cp
> を用意し,この変数にOutPortのアドレスを渡そうかと考えましたが,結局
> コンパイルエラー(error
> C2512)を自分では解決できませんでした. 以上です.
> ご指南の程,よろしくお願い申し上げます.
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
[openrtm-users 02427] プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼

安藤様

ご返信ありがとうございます.

コードはどのようにお見せすればよろしいですか? ひとまず,E-mailにて直接送信致します. フォーラムにも上げた方がよろしいでしょうか?

よろしくお願い致します. 中央大学 小林

kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
[openrtm-users 02427] プロバイダのサービスポート内でコンシューマのサービスポートあるいはデータポートを呼

中央大学 小林です

provServiceSVC_impl.cppとprovServiceSVC_impl.hの一部を上げたいと思います. 何卒,よろしくお願い致します.

[provServiceSVC_impl.h]

 class provServiceSVC_impl
  : public virtual POA_provService,
    public virtual PortableServer::RefCountServantBase
 {
  private:
    // Make sure all instances are built on the heap by making the
    // destructor non-public
    //virtual ~provServiceSVC_impl();
 
  public: 
 
   /*!
    * @brief standard constructor
    */
    provServiceSVC_impl(TimedLong m_DataOut_original, OutPort<TimedLong> m_DataOutOut_original,
                        RTC::CorbaConsumer<consService> m_consService_original);
   /*!
    * @brief destructor
    */
    virtual ~provServiceSVC_impl();
 
    // attributes and operations
    CORBA::Short provServiceMethod(const char* prov_cmd);
 
    TimedLong* m_DataOut_cp;
    OutPort<TimedLong>* m_DataOutOut_cp; // ここにm_DataOutOutのアドレスをコピーしたい
    RTC::CorbaConsumer<consService>* m_consService_cp; // ここにm_consServiceのアドレスをコピーしたい
 };

[provServiceSVC_impl.cpp]

 // コンストラクタ
 provServiceSVC_impl::provServiceSVC_impl(TimedLong m_DataOut_original, OutPort<TimedLong> m_DataOutOut_original,
                                          RTC::CorbaConsumer<consService> m_consService_original)
 {
         // ポートのアドレスを取得 
     m_DataOut_cp = &m_DataOut_original;
     m_DataOutOut_cp = &m_DataOutOut_original;
     m_consService_cp = &m_consService_original;
 
 }

 // メソッド
 CORBA::Short provServiceSVC_impl::provServiceMethod(const char* prov_cmd)
 {
     // コンシューマのサービスポートを呼び出す
     if( !CORBA::is_nil( (*m_consService_cp).getObject()) ){
         (*m_consService_cp)->consServiceMethod( prov_cmd );
     }
 
     // データポートでデータを送信する
     (*m_DataOut_cp).data = 1;
     (*m_DataOutOut_cp).write();
 
   return 0;
 }

root
オフライン
Last seen: 6日 9時間 前
登録日: 2009-06-23 14:31
[openrtm-users 02432] (無題)

小林さん

産総研 安藤です

コンストラクタの引数をポインタか参照渡しにすればよいかと。
コンストラクタで渡しているので、初期化子で渡して参照として保持できますね。

class provServiceSVC_impl {

public:
// コンストラクタ
provServiceSVC_impl(TimedLong& dataOut_original, // m_ はメンバ変数の接頭辞なので削除しました。
OutPort& dataOutOut_original,
RTC::CorbaConsumer&
consService_original)
: m_DataOut_cp(dataoutOut_original),
m_DataOutOut_cp(dataOutOut_original),
m_consService_cp(consService_original)
{
: 続く
:
private:
TimedLong& m_DataOut_cp;
OutPort& m_DataOutOut_cp; // ここにm_DataOutOutのアドレスをコピーしたい
RTC::CorbaConsumer& m_consService_cp; //
ここにm_consServiceのアドレスをコピーしたい

蛇足かもしれませんが、こういうことです↓

#include
class A
{
int m_value;
public:
A(int value) : m_value(value /* value の値が m_value にコピーされる */ ) {}
void print() { std::cout << m_value << std::endl; }
};

class B
{
int& m_value;
public:
B(int& value) : m_value(value /* value への参照がコピーされる */ ) {}
void print() { std::cout << m_value << std::endl; /* class Bの外にある
m_value が指す変数の値を表示する */ }
};

int main(void)
{
int value(123);
A a(value);
B b(value);

a.print(); // 123と表示される
b.print(); // 123と表示される

value = 456;

a.print(); // 123と表示される
b.print(); // 456と表示される

return 0;
}

値渡し、参照渡し、ポインタ渡し、初期化子について調べると幸せになれるかもしれません。

2012年2月8日19:08 :
> 中央大学 小林です
> provServiceSVC_impl.cppとprovServiceSVC_impl.hの一部を上げたいと思います.
> 何卒,よろしくお願い致します. [provServiceSVC_impl.h] class
> provServiceSVC_impl : public virtual POA_provService, public virtual
> PortableServer::RefCountServantBase { private: // Make sure all instances
> are
> built on the heap by making the // destructor non-public //virtual
> ~provServiceSVC_impl(); public: /*! * @brief standard constructor */
> provServiceSVC_impl(TimedLong m_DataOut_original, OutPort
> m_DataOutOut_original, RTC::CorbaConsumer m_consService_original); /*! *
> @brief destructor */ virtual ~provServiceSVC_impl(); // attributes and
> operations CORBA::Short provServiceMethod(const char* prov_cmd); TimedLong*
> m_DataOut_cp; OutPort* m_DataOutOut_cp; //
> ここにm_DataOutOutのアドレスをコピーしたい RTC::CorbaConsumer*
> m_consService_cp; //
> ここにm_consServiceのアドレスをコピーしたい };
> [provServiceSVC_impl.cpp] // コンストラクタ
> provServiceSVC_impl::provServiceSVC_impl(TimedLong m_DataOut_original,
> OutPort m_DataOutOut_original, RTC::CorbaConsumer m_consService_original) {
> // ポートのアドレスを取得 m_DataOut_cp = &m_DataOut_original;
> m_DataOutOut_cp = &m_DataOutOut_original; m_consService_cp =
> &m_consService_original; } // メソッド CORBA::Short
> provServiceSVC_impl::provServiceMethod(const char* prov_cmd) { //
> コンシューマのサービスポートを呼び出す if( !CORBA::is_nil(
> (*m_consService_cp).getObject()) ){ (*m_consService_cp)->consServiceMethod(
> prov_cmd ); } // データポートでデータを送信する
> (*m_DataOut_cp).data = 1; (*m_DataOutOut_cp).write(); return 0; }
>
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
[openrtm-users 02428] (無題)

安藤様 ご返信ありがとうございます.
コードはどのようにお見せすればよろしいですか?
ひとまず,E-mailにて直接送信致します.
フォーラムにも上げた方がよろしいでしょうか?
よろしくお願い致します. 中央大学 小林

_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

kobayashi
オフライン
Last seen: 12年 2ヶ月 前
登録日: 2012-02-08 15:52
[openrtm-users 02429] (無題)

中央大学 小林です
provServiceSVC_impl.cppとprovServiceSVC_impl.hの一部を上げたいと思います.
何卒,よろしくお願い致します. [provServiceSVC_impl.h] class
provServiceSVC_impl : public virtual POA_provService, public virtual
PortableServer::RefCountServantBase { private: // Make sure all instances are
built on the heap by making the // destructor non-public //virtual
~provServiceSVC_impl(); public: /*! * @brief standard constructor */
provServiceSVC_impl(TimedLong m_DataOut_original, OutPort
m_DataOutOut_original, RTC::CorbaConsumer m_consService_original); /*! *
@brief destructor */ virtual ~provServiceSVC_impl(); // attributes and
operations CORBA::Short provServiceMethod(const char* prov_cmd); TimedLong*
m_DataOut_cp; OutPort* m_DataOutOut_cp; //
ここにm_DataOutOutのアドレスをコピーしたい RTC::CorbaConsumer*
m_consService_cp; //
ここにm_consServiceのアドレスをコピーしたい };
[provServiceSVC_impl.cpp] // コンストラクタ
provServiceSVC_impl::provServiceSVC_impl(TimedLong m_DataOut_original,
OutPort m_DataOutOut_original, RTC::CorbaConsumer m_consService_original) {
// ポートのアドレスを取得 m_DataOut_cp = &m_DataOut_original;
m_DataOutOut_cp = &m_DataOutOut_original; m_consService_cp =
&m_consService_original; } // メソッド CORBA::Short
provServiceSVC_impl::provServiceMethod(const char* prov_cmd) { //
コンシューマのサービスポートを呼び出す if( !CORBA::is_nil(
(*m_consService_cp).getObject()) ){ (*m_consService_cp)->consServiceMethod(
prov_cmd ); } // データポートでデータを送信する
(*m_DataOut_cp).data = 1; (*m_DataOutOut_cp).write(); return 0; }

_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2203
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク