[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/20(Sat) 20:22
投稿者名:りっきー
Eメール:
URL :
タイトル:
Loop処理とフリーズ
大変お世話になっています。
数ヶ月前からVBでプログラムを組んでいる者です。

VB6.0を使用しています。
I/0ボードを用いてロボットの信号を受け取れるような環境を作りました。

信号Aは1(ON)と0(OFF)のどちらかの信号を常に出しています。
(タイミングは機械が制御しています)
信号Bも1(ON)と0(OFF)のどちらかの信号を常に出しています。
(タイミングはランダムです)

<目的>
信号Aが1のとき、信号Bの信号を受け取り、
信号Aが0のとき、信号Bの信号は受け取りません。

<アルゴリズム>
@信号Aが1になるまで『Do Until〜Loop』処理を行う
 待機させる
A信号Aが0になるまで『Do Until〜Loop』処理を行う
 その処理の中で、信号Bの信号を常に監視させる


ロボットを起動させている間、常に上記のことが繰り返されています。
プログラムを実行させるとCPU=100%になり、必ずフリーズしてしまいます。
デバックを行い、F8でプログラムを手動で回したときは、正常に動きます。
Loop処理ばかり行っているのが問題なのでしょうか?
信号を読み込む前に必ず初期処理も行うようにしています。


どのようにすればよいでしょうか。
よろしくお願いします。

投稿時間:2007/01/20(Sat) 20:41
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: Loop処理とフリーズ
ループ待機中に DoEvents 等をはさめば、CPU 使用率は低下しますが、
場合によっては、信号の取りこぼしが発生する可能性が出てきます。

その I/O ボードとの通信を行うコンポーネントが何かわかりませんが、
継続的なループで信号を待機させるような作りは、本来は行うべきではなく、
可能な限り、VB らしく『イベント』を使って処理すべきかと。

投稿時間:2007/01/20(Sat) 21:17
投稿者名:りっきー
Eメール:
URL :
タイトル:
Re^2: Loop処理とフリーズ
魔界の仮面弁士さん、返答、ありがとうございます。

> ループ待機中に DoEvents 等をはさめば、CPU 使用率は低下しますが、
> 場合によっては、信号の取りこぼしが発生する可能性が出てきます。
できれば信号の取りこぼしは避けたいです。

> 継続的なループで信号を待機させるような作りは、本来は行うべきではなく、
> 可能な限り、VB らしく『イベント』を使って処理すべきかと。
初歩的な質問でしたら申し訳ないのですが、
イベントというのは、別の関数を用いて、信号が変わるまで、待機させるということでしょうか。
もしよろしければ、具体的に教えていただけないでしょうか?

投稿時間:2007/01/22(Mon) 09:46
投稿者名:y4yama
Eメール:
URL :
タイトル:
Re: Loop処理とフリーズ
> VB6.0を使用しています。
> I/0ボードを用いてロボットの信号を受け取れるような環境を作りました。
> どのようにすればよいでしょうか。
I/0ボードに、プログラミング例が添付されていると思います。まず良く調べてみることでしょう。
私も、今からちょうど、USBのIOにとりかかるのですが、構想としては
タイマーで0.05秒毎とかに一度信号を調べて、その値で処理を分岐させるつもりです。

投稿時間:2007/01/23(Tue) 10:08
投稿者名:りっきー
Eメール:
URL :
タイトル:
Re^2: Loop処理とフリーズ
y4yamaさん、ありがとうございます。
タイマでやってみたところ、なぜかうまく回らなかったです。
Loop等を使っていない、カウンタボードの読み込みはそのようにタイマで制御することができました。

Loop処理の方は、DoEventsをたまにはさむことで回避することができました。
ありがとうございました。