gainer.forum
Welcome, Guest. Please login or register.
May 23, 2013, 02:39:36 PM

Login with username, password and session length
Search:     Advanced search
* GAINER.cc HOME
* +GAINER
* フォーラムへの登録方法の説明(日本語版
1465 Posts in 404 Topics by 380 Members
Latest Member: ashi
* Home Help Search Calendar Login Register
+  gainer.forum
|-+  Japanese(日本語)
| |-+  Gainer I/Oモジュール互換機
| | |-+  Gainer mini (Moderator: crow_coffee)
| | | |-+  _gainer TIMEOUT return code error!!
« previous next »
Pages: [1] Go Down Print
Author Topic: _gainer TIMEOUT return code error!!  (Read 5068 times)
tanikawa
Newbie
*
Posts: 2


View Profile
« on: January 21, 2009, 10:44:39 PM »

はじめまして。谷川と申します。

アナログポート(ao3)につないだ LEDライトを
0.5秒間隔で ON/OFF を繰り返すと、

wait for  [Event type="onFailed" bubbles=false cancelable=false eventPhase=2]
_gainer TIMEOUT return code error!!

と表示されて、LEDライトが点灯したまま(あるいは消灯したまま)になってしまいます。

・LEDをデジタルポート(do0)につないでテストしても同じエラーが発生します。
・1秒間隔で ON/OFF を繰り返しても 同じエラーが発生します。

なにか対処方法はないでしょうか?
(onFailedのハンドラーを指定して、ハンドラー内で何かする?)

よろしくお願いいたします。
以上です
Logged
crow_coffee
Global Moderator
Jr. Member
*****
Posts: 54


View Profile
« Reply #1 on: January 22, 2009, 02:41:36 AM »

こんばんわ、

"TIMEOUT return code error!!" は
Gainer miniにシリアルコマンドを送信して、
その返事をPCが受け取れないまま一定の時間が過ぎると
接続を終了して表示されるエラーです。

プログラムを開始してから、どのぐらいの時間が経過した時に
そのエラーメッセージがでますか?


また、Gainer miniを
どのような環境で使用しているのか
もう少し詳しい情報をいただけますか?

・使用しているソフトウェア開発環境 ( Flash , Processing , etc)
・OSの種類とバージョン ( Win XP SP2 , Mac OSX 10.5 , etc)
・使用しているコンフィギュレーション ( MODE )
・LED以外に接続してる部品

短ければプログラムソースなども掲載していただければ、
問題の原因が分かりやすいかと思います。
Logged
tanikawa
Newbie
*
Posts: 2


View Profile
« Reply #2 on: January 22, 2009, 12:22:23 PM »

お返事ありがとうございます。

原因が判明しました。

■原因:analogInput[]の値を取得する為に、gainer.beginAnalogInput()を使ったため。
■対策:analogInput[]の値を取得する直前に、gainer.peekAnalogInput()を使用する。(beginAnalogInput()は使用しない)
■詳細
    timerHandler(0.5秒間隔で呼び出される)内で、
      (1) analogInput[] の値をtrace()で出力
      (2) ao3ポートのLEDレッドを点灯(点灯している場合は消灯)する

    という処理をしています。
    (analogInput[]の値を取得するため、gaier.onReadyのハンドラーで gainer.beginAnalogInput()を実行)

    2~3秒ほどは timerHandler に書いた処理が正常に処理されますが、
   上記(1)と(2)の処理で Gainer が高負荷になると、

        wait for  [Event type="onFailed" bubbles=false cancelable=false eventPhase=2]
        _gainer TIMEOUT return code error!!

   がエラー出力されるようです。

■環境
   ・使用しているソフトウェア開発環境 : Flash  (ActionScript3)
   ・OSの種類とバージョン:   Win XP SP3
   ・使用しているコンフィギュレーション ( MODE4 )
   ・LED以外に接続してる部品 :
                        ai0  <- 測距センサー(GP2D12 F)
                        ai1  <- 測距センサー(GP2D12 F)
                        ai2  <- 照度センサー(NJL7502L)
                        ai4~ai6 <- 加速度センサーモジュール(KXM52-1050)

ありがとうございました。
以上です。

« Last Edit: January 22, 2009, 12:24:43 PM by tanikawa » Logged
crow_coffee
Global Moderator
Jr. Member
*****
Posts: 54


View Profile
« Reply #3 on: January 22, 2009, 01:04:47 PM »

状況のレポートありがとうございます。

たしかに連続入力モードでは、
入力コマンドの中に、出力完了のコマンドが埋もれてしまって、
通信エラーになってしまうようですね。


peekAnalogInput()でもフレームレートを上げたり、
同時に複雑な処理をさせると、負荷が大きくなって、
タイムアウトエラーが発生する可能性があるかもしれません。


一応、ライブラリ側での改善策としては、
ご推察の通り、"onFailed"を発生させなければ処理は終わらないので、
SynchronizedGC.as内の


Quote
private function onTimeout():void {
   //replace _gainer.removeEventListener("onReceived", this);
   _gainer.eventDispatcher.removeEventListener("onReceived", onReceived);
   //replace dispatchEvent({type:"onFailed"});
   eventDispatcher.dispatchEvent(new Event("onFailed"));
}


の部分を


Quote
private function onTimeout():void {
   //replace _gainer.removeEventListener("onReceived", this);
   _gainer.eventDispatcher.removeEventListener("onReceived", onReceived);
   //command transmits again.
   trace("Reception failed");
   this.sendMsg();
}


のように修正することで、PCが返事を受け取れるまで何度でも
コマンドを送るというようになります。
Logged
Pages: [1] Go Up Print 
« previous next »
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!