[openrtm-users 00902] Re: OpenRTM1.0.0-RC1 の OutPort に値が格納できない不具合
Masayuki Shimizu
masayuki.shimizu @ aist.go.jp
2009年 8月 3日 (月) 15:12:31 JST
俵様
安藤様
清水です。
ログを見る限りでは、m_connectorsのサイズは
やはり1のように思われます。
ただ、コネクタのwrite()は
呼ばれてないようですね。
コネクタタイプがPushであれば、
OutPortのwriteから
OutPortPushConnector::write()が呼ばれ、
ログに「write()」と残るはずです。
どうもそれが見当たらないので、
コネクタのwriteまで辿り着いてない
と思われます。
不可解な挙動ですが、OutPort::write()
から動きを丹念にトレースしていけば、
原因がつかめると思います。
# 安藤様へ
Pull型のOutPortBase::createConnector()
ですが、ログ出力が"OutPortPushConnector created"
となってますが、"Pull"でなくてよいのでしょうか。
あと、OutPortPullConnectorのオペレーションには
ログ出力が無いので、今回のように挙動を
トレースする際に困るように思います。
清水
--- Ando Noriaki <n-ando @ aist.go.jp> wrote:
> 俵様
>
> 安藤です
>
> >
> > rtm/OutPort.hによると
> > その後の処理で
> > conn_sizeが0以下の場合
> > m_connectors[i]->write(m_cdr);
> > のループ処理に至らないということで
> > 同じ結果になると思われます。
> > 以上です。
>
> Aug 03 10:50:00 TRACE: steer:
> getConnectorProfiles(): size = 1
>
> でも、ログ↑にあるように、m_connectors.size()
> は1を返していますよね。
>
> write()関数の先頭部分で
> size_t conn_size(m_connectors.size());
> のように代入しているので、conn_sizeは1になりそうな気が
しますが。
>
> 念のため、OutPort.h の write()
> の後半を以下のように書き換えて
> ログを見てみてはどうでしょうか?
>
> bool result(true);
> RTC_PARANOID(("0: conn_size = %d",
> conn_size));
> RTC_PARANOID(("0: connectos.size() = %d",
> m_connectors.size()));
> for (size_t i(0), len(conn_size); i < len;
> ++i)
> {
> ReturnCode ret;
> ret = m_connectors[i]->write(m_cdr);
> RTC_PARANOID(("1: conn_size = %d",
> conn_size));
> RTC_PARANOID(("1: connectos.size() = %d",
> m_connectors.size()));
> if (ret != PORT_OK)
> {
> result = false;
> if (ret == CONNECTION_LOST)
> {
> disconnect(m_connectors[i]->id());
> }
> }
> }
> RTC_PARANOID(("2: conn_size = %d", conn_size));
> RTC_PARANOID(("2: connectos.size() = %d",
> m_connectors.size()));
> return result;
>
>
> あと、ためしにコンポーネントのソースを送ってみてもらえ
ますか?
> --
> 安藤慶昭@独立行政法人産業技術総合研究所 研究員
> 知能システム研究部門
> 統合知能研究グループ
> 〒305-8568 茨城県つくば市梅園1-1-1
> 中央第2
> TEL: 029-861-5981 FAX:
> 029-862-6631
> n-ando @ aist.go.jp, n-ando @ ieee.org
>
>
openrtm-users メーリングリストの案内