09-19-2019 01:03 AM
すいませんがWifi接続時のデータ通信について、LabVIEWでどのように設定すればよいのかわからず、お問い合わせさせて頂いております。
デバイスとPC間をWifiで接続しておりまして、PCにはLabVIEWがインストールされております。
PCから開始コマンド(3文字の英小文字 IPアドレス CR+LF)を送るとデバイスは測定を開始して、各2byteの測定値データをPCへ送付します。データは(8+24×サンプル数)byteのデータが1サンプル毎に送られてきます。PC(LabVIEW)はこのデータを測定が終了するまで取得して、最後に終了コマンドを送るとデータの送信がストップします。
これらのデータは送信されてきた時間と各データをCSV形式にしてPCに保存します。
この一連の流れ(開始コマンド送信→データ受信→終了コマンド送信→ファイル作成、保存)をLabVIEWでやりたいのですが、どのように関数を組み合わせれば良いのかわかりませんでした。
アドバイス頂けると助かります。
解決済! 解決策の投稿を見る。
09-19-2019 03:34 PM
平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。
通信方法は、コマンドベースの計測器制御と同じ方法のようですので、通信できそうな方法としては2種類あります。
1つ目の方法は、NI-VISAによる計測器制御のオプションにあるLAN計測器を使用する方法です。これは、Ethernetポートのあるスタンドアロン計測器を制御するためのオプションです。もし下記の手順でVISA TCP/IPリソースとして認識すれば、NI-VISAを使用したプログラムで制御可能です。
2つ目の方法は、TCP関数を使用する方法です。関数パレット >> データ通信 >> プロトコル >> TCP関数を使用してコマンドやデータの送受信をおこないます。
これらのサンプルは、ヘルプメニュー >> サンプルを検索...からサンプルファインダからアクセス可能です。1つ目はVISA、2つ目はTCPと検索してご参照ください。
09-19-2019 11:23 PM
日本ナショナルインスツルメンツ技術部 上野様
ご回答ありがとうございます。
早速TCP関数を使用したところ、うまくWifi接続先と通信できました。
ありがとうございます。
すいませんがもう一点、添付のプログラムにありますように、”TCP書き込み”で
デバイスに開始コマンドを入力するとデバイスからデータが出力されます。
そして”TCP読み込み”することでデータをテキストファイルに保存するのですが、
開始コマンド後5秒待って、”TCP書き込み”でデバイスに終了コマンドを入力して、
データ出力を止めて、ファイルをクローズするという処理を期待してます。
しかし5秒待つシーケンスが上手くいっていないのか、データが保存されませんでした。
たびたび申し訳ございませんがアドバイス頂けると幸いです。
09-20-2019 01:29 AM
添付いただいたコードですと、「strCR+LF」を送信してから、データ保存と5秒待機を分岐しておりますので、適切に受信できていれば1回だけデータを受け取るとともに5秒間待機して、「stpCR+LF」を送信する動作となります。
5秒間というのは、データを受信し続けたいのでしょうか?
それと、CR+LFは復帰改行を示すかと思いますが、これでは単純に5文字の文字列として送られてしまいます。正しくは復帰改行定数を文字列連結するか、文字列定数を右クリックして¥コード表示に切り替え、「\r\n」を最後に追加するほうがよいかと思います。
09-20-2019 03:29 AM
日本ナショナルインスツルメンツ技術部 上野様
ご回答ありがとうございます。
説明が不足しておりまして申し訳ございません、strにてデータ出力を開始してから5秒間ずっとデータを受信し続け、5秒経ったらstp信号を送ってファイルを閉じるというのが所望の動作です。
CR+LFの件、了解しました。
早速試してみて、別途連絡させていただきます。
よろしくお願いします。
09-20-2019 04:07 AM
データを受信し続けるなら、おそらく下記のようにループ内で読み取りと保存を行う必要があると思います。実機で動作確認しながら調整していただけると幸いです。
09-25-2019 03:37 AM
日本ナショナルインスツルメンツ 技術部 上野様
ご回答ありがとうございます。返信遅くなり申し訳ございません。
頂いたviプログラムにてデバイスからのデータが出力されなかったため、TCP読み取り関数の
読み取りバイト数を入力したところ、データは出力されるようになりました。
しかし本来1秒(サンプル数=1)と設定すると1秒間に出力されるデータは2KByteなのですが、
TCP読み取り関数で設定したバイト数以上は出力されませんでした。
そしてこのバイト数を例えば100KByteに設定すると1秒を過ぎても100KByte出力するまで処理は
完了しません。
期待する結果は指定した秒数だけデバイスからの出力結果をファイルに書き込むことなのですが、
それが上手くいきません。
たびたびすいませんがアドバイス頂けますでしょうか?
09-25-2019 05:41 AM
下図は、待機関数を1秒、読み取りバイト数を2000(2k)バイト、Forループの回数を5回(サンプル数5)に設定しています。
これで1秒間に2kバイトを読み取り、それを5回繰り返すかと思います。お手数ですが、実機で動作確認ください。
09-25-2019 06:31 PM
日本ナショナルインスツルメンツ 技術部 上野様
ご回答ありがとうございます。
おかげさまで所望のデータを取得することができました。
また何かありましたらご教授よろしくお願いします。
09-25-2019 09:19 PM
ご返答ありがとうございます。無事解決して安心しました。また何かございましたらご投稿いただけると幸いです。今後ともよろしくお願い申し上げます。