10-06-2022 01:02 AM
GPIBを用いてステッピングモーターの制御、RS232C-USB変換ケーブルを用いて電子天秤の制御を行っています。それぞれに必要なプログラムを1つのブロックダイアグラム内で行っています。
計測開始を押すと、ステッピングモーターは動作ボタンを押してもすぐには動かず、少し時間が経ってから動き出します。電子天秤は1秒間に10個程度測定データを送ってきますが、重さを加えてもすぐにはデータが送られてきません。
時間が経つとLabviewが固まり、停止ボタンが反応しなくなります。
スムーズに計測を行うために、Labviewが固まらずにそれぞれのデータを測定するにはどうすればよいでしょうか。
10-06-2022 03:40 AM
情報少なすぎます。まずはVIファイルを添付してください。
あとは、差し支えない範囲でいいので、システム構成(GPIBアダプタ、USB変換ケーブル、制御対象の型式など)を教えてもらえると話が早いです。
10-07-2022 04:19 AM
こんばんは
情報が少ないという点は同意ですが取り急ぎ推定されることを下記ます。
・思ったより時間がかかる点:ハードウェア側でタイムアウトが発生している可能性があります。測定コマンドが正常に送信されているか
正しく設定されているか確認してみてください。
・ループ処理を行っている場合:意図していないところで待ち時間に相当する処理が入っている可能性があります
ハードウェアの初期化処理やファイルのオープン処理など1度で済むことを何度も実行していないでしょうか
ハイライト実行(ブロックダイアグラムの上にある電球のアイコン)をONしてデータの流れを確認するとわかりやすいかもしれません
10-11-2022 10:18 PM
遅くなり申し訳ございません。
GPIBアダプタ:National Insturunents(GPIB-USB-HS)
USBシリアル変換アダプター(USB to RS-232C):I-O DATA(USB-RSAQ5)
RS-232Cケーブル:SANWA(KR-MD1)
Dサブコネクタ:オムロン(XM2S-0911)
制御対象の型式:電子天秤 AND(GX-200)、ステッピングモーターコントローラー 駿河精機(D220)、ステッピングモーター オリエンタルモーター(C7214-9015)
よろしくお願いいたします。
10-12-2022 03:15 AM
VIを拝見しました。
電子天秤との通信でRS-232Cデータを読み込む小さなWhileループの中身がおかしいです。
たぶん毎度100回ループしないと抜けてきません。そのうち90回以上は500msのタイムアウトを繰り返すので数10秒間はダンマリになります(ハングアップと勘違いする)。
GX-200は数値データだけを自動的に送信し続けるモードで、CR+LFが終端文字ということでよろしいですね?
そうであれば自分でCR+LFを調べなくてもOKです。「VISAシリアルポート構成」関数でLFを終端にセットしているので、自動的に読み取りは完了します。
Whileループは無くして「VISAシリアルポートバイト」でバッファ内のデータバイト数を調べます。
ゼロだったら少し待機(数10msくらい)して大きなWhileループに戻ります。
ゼロでなかったら「VISA読み取り」をバイトカウント100程度でコールすれば読み込めるので、最大値比較とファイルへの書き込みを行います。
ちなみに最大値を調べるだけなら配列にせずとも、値を比較して大きいほうをシフトレジスタに残せば良いです。
10-18-2022 11:11 PM
電子天秤のプログラムで100回のループをなくし、バイトカウント100で行うと毎回バッファに2000程度ずつ溜まります。
バッファを0に近くすることは可能ですか?
10-19-2022 12:14 AM
ループはどのくらいの頻度で回っていますか?
Whileループの[i]端子の値を表示させてみてください(おおまかな回数/秒がわかればOK)。
もし電子天秤がデータを送ってくる頻度より遅いのならば、モーションコントローラとの通信に時間がかかっていて、電子天秤のデータがバッファに溜まっていると思われます。
簡単なのは、電子天秤との通信と、モーションコントローラとの通信を別のWhileループに分けることです。
ループが複数含まれるVIはよくある作り方なので、例はたくさん見つかります。
まずは、電子天秤のデータを読むだけのVIを作って、読み残しが発生するか実験してください。