NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

シリアル通信の速度がやたら遅くなった

初めまして。
シリアルインターフェースに関する質問です。
RS232Cで他社製ステッピングモータドライバを動かしながらDAQでデータを取り込む分光計測をしています。
年代物のLabView5.1で書いたプログラムをWin98で走らせていたのですが、このほど7.1用に書き換えて、OSもXPに乗り換えました。
マシンはPen2.4GHzでメモリは1GB積んでいます。
5.1のシリアルポート読み出し関数が7.1では使えませんからVISA読み出し関数のサンプルであるBasic Serial Write&Read.viを改変して組み込んでみました。
ところが、動作はするのですが、速度が目も当てられないくらいに遅くなってしまいました。
これまではマイクロステップ動作を4000点させても数分で測定できたものが、数十点の測定に数分もかかってしまいます。
最初はいくぶん早いのですが、すぐに遅くなり、1ステップの動作(書き込みとacknowledge読み出し)に0.5秒はかかるようです。
もちろん、待ち時間などは一切入れていませんし、マイクロステップの微小動作ですからモータ自体の動作は数十ミリ秒です。
Basic Serial Write&Read.viというのは単純なプログラムで、ループにしてくり返しても遅くなるようなものではないと思うのですが。
この速度ではとても実験ができず、困り果てています。

このような症状の原因として何が考えられるでしょうか?
VISA関数のボトルネックはどこなのでしょう?
ご教示いただければ幸いです。
よろしくお願いいたします。
0 件の賞賛
メッセージ1/8
16,899件の閲覧回数
????????@LabView??????

# 6.1??????????????????????????
# ????????????????????????????

# ??????????????????????
# ???????????????????

> RS232C????????????????????????
> DAQ????????????????????
> ????LabView5.1??????????Win98????????????
> ????7.1????????OS????????????

?????????????????????

> VISA??????????????Basic Serial Write&Read.vi?
> ????????????????????????????????????
> ????????????????????
> ????????????????4000????????
> ?????????????????????????????

???????????LabVIEW??????????????
???????????????????
??????????????????
?????????????????????

> ??????????????????????
> 1?????????????acknowledge?????
> ?0.5??????????

??????????bps??????????????????
???500msec?0.5?????????????????
VI????????????

> ???????????????????????
> ??????????????????????????????????
> Basic Serial Write&Read.vi???????????????
> ?????????????????????????????????
> ?????????????????????????
> ??????????????????????????
> VISA???????????????????

# ????????VI????????????

7.1????????????????VI?????????
???????????????
?NI????????????
????EXPRESS??????
?????????????????????
??????????????

????????
1)??????????????????
??????????????????
?????????????????????????????????
??????????????????9600bps????????????????

????????????????????????
?19200?38400???????????????????

?LabVIEW?????RTX??????????????
????CPU??????????
?Windows????????????????????????
????PC????????????????
??????????????????????HDD????
????????????????????????
???????????????????????????????
?????????????????????????????????????
?
??????????????????????????????????
???????????????????????????????????
?
3)??????1???????????
?1???????????????????????????
?????????????????
????????????????????????????????????
??
?VISA Serial???VISA Read?????
?????????65535??????????????????????
??????????
?????????????????????5????
???????????????????????????????
??????????????????????????

4)VISA??????????????
?????????NI????????????
???????????????????????VISA?????????
??????????????????????????????????
????VISA?????????????????????????????
?
???????????????????????
?VI?????????????????????????
???????????????
?
??????????????????????????????
?????VI??????????????
?????????????????

????
??????????????????????????
??????????????????????????????w

??????????????

--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
0 件の賞賛
メッセージ2/8
16,889件の閲覧回数
佐山様
早速にお返事いただき誠にありがとうございました。
が、文字化けして読めません(>_<)
スレッドの中にいくつかあります佐山様のお返事だけが文字化けして表示されます。
MacのSafariでもWinのエクスプローラでも、ブラウザの文字コードを変えても抽出して文字化け修正ソフトに通しても解読できませんでした。
お恥ずかしい限りですが、どなたか表示出来る方法を教えていただけないでしょうか?
折角いただいたお返事の中身が読めず申し訳ございません。
取り急ぎ、御礼とお願いまで。
0 件の賞賛
メッセージ3/8
16,852件の閲覧回数
Hello this is Hikaru Sayama.

test.

??????????????????????????

NI????????????????8bit??????WEB???????????
??????????????????

?????Outlook Express?????????
???????????????????????????????
??????????????????????????

--
HIKARU SAYAMA

0 件の賞賛
メッセージ4/8
16,846件の閲覧回数
はぁはぁ・・・佐山@LabView引退中です。

# まったく、いつからこんな使いにくくなってるんだ?

私の投稿はニュースグループ投稿なので、
どうも文字化けするらしいです。ただ今別スレで質問中です。
ご迷惑をおかけして申し訳ない!

では改めて最初の投稿をコピーで投稿します。

# 6.1世代の知識ですのでお役に立てるかわかりませんが・・・
# また当方環境が無いためあくまで参考情報と言うことで・・・

# あとこのグループは余り厳密じゃありませんが、
# 適度な改行をした方が読みやすいですよ。

> RS232Cで他社製ステッピングモータドライバを動かしながら
> DAQでデータを取り込む分光計測をしています。
> 年代物のLabView5.1で書いたプログラムをWin98で走らせていたのですが、
> このほど7.1用に書き換えて、OSもXPに乗り換えました。

心中お察し申し上げます。時代の流れですね。

> VISA読み出し関数のサンプルであるBasic Serial Write&Read.viを
> 改変して組み込んでみました。ところが、動作はするのですが、速度が目も当て
> られないくらいに遅くなってしまいました。
> これまではマイクロステップ動作を4000点させても数分で
> 測定できたものが、数十点の測定に数分もかかってしまいます。

私も以前分光器の制御をLabVIEWでやった経験が少しあります。
そのスピードではちょっと厳しいですね。
(いったいいつまで計測にかかるんだ?
 次の実験にうつれねーよ!って話ですよね)

> 最初はいくぶん早いのですが、すぐに遅くなり、
> 1ステップの動作(書き込みとacknowledge読み出し)
> に0.5秒はかかるようです。

データ量と通信速度(bps)から理論的な通信時間出せませんか?
それが500msec(0.5秒)より明らかに小さいのであれば、
VIの処理に原因を絞れます。

> もちろん、待ち時間などは一切入れていませんし、
> マイクロステップの微小動作ですからモータ自体の動作は数十ミリ秒です。
> Basic Serial Write&Read.viというのは単純なプログラムで、
> ループにしてくり返しても遅くなるようなものではないと思うのですが。
> この速度ではとても実験ができず、困り果てています。
> このような症状の原因として何が考えられるでしょうか?
> VISA関数のボトルネックはどこなのでしょう?

# くそぉーぅ!そのVI見れる環境があればぁ!!

7.1だとアイコン化されたエクスプレスVIとかありますけど、
その類の物ではないのですよね?
(NI様には申し訳ないですけど
 別件でEXPRESSの繰り返しで
 処理オーバーヘッドになった苦い思い出以来
 ヤツは信用できない・・・)

可能性としては、
1)通信速度設定が以前より遅くなっている
 例えばブラックボックス的な利用法、
 オープン・受信・クローズが最小限の入力端子で構成できる場合など、
 内部で気が付かないうちに通信速度が9600bpsになっている場合が多々あります。

 データ量が少なければそれで十分かと思いますが、
 19200、38400といった高速化するという手もあります。

 LabVIEWはいまなおRTXの一部を汲んでいるはずなので
 独自にCPUリソースを確保して、
 Windowsの影響を最小限に抑えて処理してくれるはずですが、
 近年のPCは突然何をしだすかわからないため
 (セキュリティ更新だのウイルスチェックだのHDD整理だの
  ネットにつなげてなくとも一瞬の集中アクセスが
  計測のようなタイムクリティカルなソフトには痛手になります)
 少し早くして通信時間のオーバーヘッドを少なくした方がよいかもしれません。
 
 投稿内容だけで計測アルゴリズムまで把握しておりませんゆえ参考まで。
 高速通信にはデータ欠落などの問題発展する可能性もありますので慎重に。
 
3)プログラムで1バイトずつ受信している
 1バイトずつ受信してデリミタを検知するようなプログラムに
 変わっていることはありませんか?
 その場合逐次ポート監視を繰り返して思わぬボトルネックになることがありま
す。
 VISA SerialですとVISA Readの入力に、
 ・受信バイト数は65535(受信データ長を超えていればいくらでもよい)
 ・デリミタチェック
 ・タイムアウトを想定できる最大に(例えば5秒とか)
 という設定で必要なパケット単位情報が最速で取れると思います。
 デリミタが検知できないならバイト数指定で組みます。

4)VISAのバッファに溜まりすぎている
 結構ここから先はNI様のフォロー待ちですが、
 前述のプログラム的受信ではなく全てのデータをVISAに任せている場合、
 全データ量が大きくて内部でバッファリングする処理が重くなっている、
 つまりVISA関数の内部にネックが生じてしまうということも想定できます。
 
 この場合はある程度のところで外に吐き出して、
 VIの内部処理で保持する(ループ端の配列に入れるとか)
 方が早い可能性が出てきます。
 
以上のようなところでもう少し具体的にどこにネックがあるのか、
どのようなVIを使っているのか提示されれば
より早期の解決に繋がると思います。

あとは、
「つらつら中身も知らずに書きやがってこのド素人が!」
というプロの方がいらっしゃいましたらわたくしめを叱って下さいw

以上ご参考になれば幸いです。
0 件の賞賛
メッセージ5/8
16,838件の閲覧回数
佐山様
何度もお手数をおかけしてすいませんでした。
色々ご教示ありがとうございました。

0.5秒というのはちと大げさでしたが、実測したら200点で70秒なのであまり大げさとも言えない数字です。
5.1では同じパソコンで4000点200秒でしたから体感速度は桁違いです。
フロントパネルの動作確認用LEDが点滅しているのがはっきり目で見えますし。
(0.3秒ですから見えます。前はもちろん点きっぱなしでした)

私もEXPRESSというのはちと違和感がありまして(便利なのか不便なのかわからんシロモノで)使ってはいません。
可能性としては1バイトごとに…のところが一番引っかかるように思います。
これをチェックします。
あと、バッファを大きくしてみます。

どうもありがとうございました。
重ねて、御礼まで。
解決できたら報告します。

(基本的な関数を全面没にするのはお願いですからやめて下さいNIさん)
0 件の賞賛
メッセージ6/8
16,833件の閲覧回数
色々ご教示頂きまして、私も色々とやってはみたのですが、、、どうも芳しくないので、業を煮やして
XPをバージョンアップではなく、ゼロからインストールしなおしてみたところ、微妙に速くなったような…
しかし、依然としてWin98+LabView5.1とは3倍近い差があります。

で、仕方なく、件のBasic Seriar Write & Read.viというサンプルを改編したSerial Write & Read.vi
というプログラムを使って(これを計測系に組み込んでいる)、シリアルでステッピングモータドライバに
コマンドを送り、返事を読み取って、その所要時間を計測するベンチマークを作ってみました。
コマンドとしては、モータの動作のないステイタス要求、つまり現在位置返信要求コマンドを使いました。
送信から受信までの待ち時間は0に設定しています。送信は2バイト、返信は25バイトです。
すると、100回のコマンドの実行に必要な所要時間は8.3秒、1回当たり83ミリ秒かかっています。
これはちょっと遅いような気が、、、

受信バッファサイズを変えてみた → 効果なし
タイムアウト時間を変えてみた → 効果なし

となると、やはりVISA書き込みと読み出しの関数をシリアルで使う場合にボトルネックがあるのでは、、、
シリアルで制御するなんてもう誰もやってないのかも知れませんが、折角バージョンアップしたのに、
芳しくないというのは結構情けなくて、おまけに忙しい最中に実験はできないし、凹みまくりであります。
シリアルで制御しておられる方で同じようなご経験のおありの方、居られましたらコメントお願いいたします。
0 件の賞賛
メッセージ7/8
16,703件の閲覧回数
こんにちは。佐山です。

> 送信から受信までの待ち時間は0に設定しています。送信は2バイト、返信は25バイトです。
> すると、100回のコマンドの実行に必要な所要時間は8.3秒、1回当たり83ミリ秒かかっています。
> これはちょっと遅いような気が、、、

とりあえず問題を整理しましょう。
まず通信速度から計算できる理論値との差はどの程度なのでしょうか?

現状を理論値で計算すると、
合計27バイト(送受信処理のオーバーヘッド無視)*8(ビット) ÷ 8.3(S) ≒ 2600bpsとなります。
同様の計算で9600bps時を考えると1コマンド22.5msec、100コマンドで2.25秒という結果です。

7の性能がどうかはわかりませんが、理論値とかけ離れている場合は
# たとえばもし9600bpsで上記のような状態ならば当てはまります
ソフトウェア側に問題があります。

当方ver7のVIを見ることは出来ないのですが、
コアの部分のVIを添付すれば解決の糸口が見つかるかもしれません。
(あるいはダイアグラムの画像とか・・・)

# 余談ですが・・・

> シリアルで制御するなんてもう誰もやってないのかも知れませんが、

結構多いと思います。
計測器は買い替えスパンが長いためかシリアルが多いです。
特に据え置き系のコントローラーなどはI/Fまでなかなか換えられず、
PCのみ置き換え(今回のような)が多いのではないでしょうか。

またもっとも簡易にPCと機器をつなげる通信方式でもありますので、
単純な機構物なんかはまだまだ現役といった感を受けます。

その他のI/Fはどうしてもドライバが介入したり、
ルーティング機器が必要だったりと面倒も多いので・・・

以上ご参考になれば幸いです。
0 件の賞賛
メッセージ8/8
16,685件の閲覧回数