NI製品ディスカッション

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

VISAによるシリアル通信について

お世話になっております。
 
今、VISAのシリアルを使ってUSB機器と接続して
コマンドの送信とデータの受信を行なうプログラムを作成中なのですが、
通信のところの仕組みがわかっていないためか、うまくいきません。
ご教授いただければ幸いです。
 
システムの構成
OS:WinXP Pro SP2
コネクタ:USB
接続機器:FTDI社系のUSBボードを組み込んでいる計測機器
 
VIの構成概要
VISAシリアルポートの構成→VISA書き込み⇔VISA読み込み→VISAクローズ
 
質問1.VISAシリアル通信の際の送信受信の問い合わせ先は同じなのでしょうか?
つまり、PCからコマンド送信した直後に受信すると送信したコマンドが返ってきますか?
今はそういう状態です。送信した後、しばらく待機を入れるといいような気もするのですが、
効果がありませんでした。
 
質問2.現在の構成では、シリアルポートの構成をプログラムの初期に一度だけ行い、
あとは、複製リソース名のところからワイヤを引っ張っていき、送信受信両方に用いています。
1通信につきクローズをするべきなのでしょうか。
 
質問3.明示的に接続機器で使用するUSBドライバを指定する必要があるのでしょうか。
どこで指定すればよいのでしょうか。
 
よろしくお願いいたします。
0 件の賞賛
メッセージ1/6
15,212件の閲覧回数

平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。

質問1.VISAシリアル通信の際の送信受信の問い合わせ先に関して
今、USBインターフェースにて通信を行う場合、送信と受信は同じ信号線を使っております。
(RS-232などのシリアルインターフェースでは、送信と受信は異なる信号線を使っております。)
そして、うまく通信ができていないために、送信した信号がそのまま受信してしまっているものと推察します。

質問2.クローズに関して
クローズは最後に一度して頂ければ問題ないかと存じます。
最初に一度「VISA open」などでセッションを開いて頂き、その後「VISA Write」「VISA read」などでデータのやり取りをし、最後に一度「VISA close」でセッションを閉じてください。

質問3.USBドライバに関して
「USBドライバ」とは、「FTDI社のUSBボードに付属してきたドライバ」でございますでしょうか。
そのドライバをご使用になられるのでしたら、そのドライバのdllをLabVIEWから呼び出して頂ければよいものと存じます。
また、VISA関数を使用される場合でしたら、そのUSBボードがUSBTMCに準拠していることをご確認の上、適切なコマンドをVISA関数で計測器に送信するとよいものと存じます。
(USBボードがUSBTMCに準拠しておりませんと、「VISA USB 入力制御」「VISA USB 出力制御」にて通信を行っていただくことになってしまいます。)
尚、USBTMCに関してましては、以下のリンクをご参照頂けますと幸いです。
 ・USBTMCとは何ですか。また、どのようにしてNI-VISAでUSBデバイスと通信が行うことでできますか。
 http://digital.ni.com/public.nsf/websearchj/6AD1FB9B717D2CDC86257088003AAC62?OpenDocument

以上、ご不明点ございましたら、弊社技術部までお問い合わせ願います。
今後とも、宜しくお願い致します。
失礼致します。

0 件の賞賛
メッセージ2/6
15,158件の閲覧回数

原文投稿者ではありませんが、ひとつ関連質問をさせてください。

LabVIEWのOptionにAutomatically Close VISA Sessionsという項目がありますが、これは使用した方がよいのでしょうか? それとも使用しない方が効率がよいのでしょうか? 私は「Automatically Close」したほうが便利だと思って使用しておりますが、LabVIEWインストール時には不使用となっています。

Automatically Close VISA Sessionsの使用上の判断基準をお教えください。ロボット平静

0 件の賞賛
メッセージ3/6
15,096件の閲覧回数
平素より、弊社製品をお使いいただきありがとうございます。
日本ナショナルインスツルメンツ株式会社 柿部と申します。
 
Automatically close VISA session設定は、VISAセッションを繰り返し開いてしまうことは防げますので、潜在的な問題を防ぐという観点では有効な手段となるようです。
しかし、効率に関する情報は探すことができませんでした。
 
Automatically close VISA session設定を有効にしている場合の問題点としては、以下の事柄がございました。
 ・グローバル変数を使ってVISAセッションハンドルを渡す際、Automatically close VISA sessionが有効になっているとエラーが発生する
 Automatically close VISA sessionは、当該VIがアイドル状態になった場合に自動的にVISAセッションを閉じるように設定されているようですので、VISAセッションハンドルをグローバル変数でやり取りしている場合には、問題が発生することがあるようです。
以下のリンクに詳細な情報が載っておりますので、英語ではございますがご参照頂けますと幸いです。
 ・VISA Error -1073807346 When Opening a VISA Session in LabVIEW
 
以上、ご不明点ございましたら、再度ご投稿願います。
今後とも、宜しくお願い致します。
失礼致します。
0 件の賞賛
メッセージ4/6
15,040件の閲覧回数
こんにちはFTDIのチップを使ったことがあるので
参考になればと思います。
 
質問1について
確かに送信したコマンドがそのまま帰ってくることがあります。
その原因は
1.測定器がコマンドを受信できておらずそのままバッファに残っている
2.組み込まれたFTDI系のボードの設定で受信と送信の信号線がショートされている(ジャンパーなどで)
3.WINDOWS側でCOMポートの設定があっていない(転送速度やエコー、終端文字など)
いずれにしてもLabVIEW内にサンプルがあるのでそれをハイライトで実行しながら確認をしてみると
コマンドの動きが分かっていいと思います。
ちなみに私のLabVIEW6.1では以下にありました
C:\Program Files\National Instruments\LabVIEW 6.1\examples\instr\smplserl.llb\LabVIEW <-> Serial.vi
 
質問2について
オープン、クローズはその手順で問題ないと思います。ただし注意しなければならないのは
WindwsのアプリケーションはCOMポートを1度開くとクローズするまで離してくれません。
例えばVBとLabVIEWで同じポートの測定器を制御している場合はソフトが変わる前に一旦クローズしたほうが
良いと思います。
 
質問3について
FTDI社のチップはFTDIのドライバさえインストールすればPCからはCOMポートとして見えます。
わざわざLabVIEWでドライバを指定する必要はありません。
ただしドライバが2種類あり、上級向けのほうはDLLを制御するようになっていたと思うので
そちらを使っている場合はDLLを制御しなければならないと思います。
 
最後に昔シリアル通信制御系で躓いたのは文字コードの違いでした。
その測定器はHexでコマンドを読取るのですが
LabVIEWのテキストでそのまま(JISでFFなど2バイトなので16進表示だと測定器からは4文字に見える)
送ってしまい。動作しないと騒いだことがあります。
今となっては恥ずかしい話ですがCOMポートが意外と落とし穴が多いように思います。
他のところも含めて見直すと意外と解決策が見つかるよかもしれません。
長々とすみませんでした。がんばってください。
 
0 件の賞賛
メッセージ5/6
15,031件の閲覧回数
ありがとうございます。
 
待機時間を適当にすることでコマンドの送信は分別されました。
また、送信したコマンドが受信時に帰ってくる問題は、セッションのクローズを
その都度入れることで何とか解決しました。
0 件の賞賛
メッセージ6/6
14,995件の閲覧回数