09-12-2017 05:21 AM
同じネットワーク内の異なるPC(どちらもLabVIEWインストール済み)で、データの受け渡しをしたいです。
具体的には、PC1で出力する電圧値を計算して、その値をPC2に渡し、PC2につながったAOから出力したいのです。
調べてみたところ、シェア変数、データソケット、LabVIEWサーバなどのキーワードが近いかな、とまではなんとなく分かったのですがそれらの違いや、具体的にどんなことが出来るのかが、よく理解できませんでした。
構築しているシステムを簡単に説明すると、PC1で計算した電圧値を、PC2から出力して、さらに得られた結果をフィードバックしてPC1で電圧を再計算しPC2に渡す。目的とする値に近づくまでループさせるといった感じです。
最初からPC1ですべてできれば良いのですが、諸々の事情によりPCをわけています。
上記の事が、可能なのか。可能だとすれば、どうするのが最も良いのか教えてください。
解決済! 解決策の投稿を見る。
09-13-2017 02:08 AM - 編集済み 09-13-2017 02:11 AM
シェア変数でもDataSocketでもLabVIEWサーバでもついでに言うとTCPやUDPの関数でもできるのですが、一番難易度の低い方法がシェア変数だと思います。
Google検索するとこんな記事がありましたのでご参考までに。
http://digital.ni.com/public.nsf/allkb/34C6E3837B7B6E4686257655001C3A04
ただ、シェア変数だとPC1から発生させたすべてのデータをPC2で受け取らせるという事ができないかもしれません。
それに加えてフィードバック制御のような形をとりたいように感じているのですが、どれぐらいの応答性が必要なのでしょうか。
PCを分けてしまうとネットワーク間の通信時間の影響で期待する応答速度が得られないかもしれないという事を懸念しています。
09-13-2017 05:57 AM - 編集済み 09-13-2017 06:26 AM
yoshi-kさんの構築されたいシステムですが、pipipi0405さんのおっしゃる通りシェア変数を使う方法があります。そして、もう一つご紹介したいのがLabVIEWのネットワークストリームです。
ネットワークストリームはLabVIEW2010で追加された機能で、これを使用することにより、ネットワーク経由またはコンピュータ上でデータの受け渡しが容易にできるようになります。
pipipi0405さんのご指摘の通り、シェア変数は最新値の受け渡しに重点が置かれますので、場合によっては値の上書きや損失が起こる可能性があります。一方で、ネットワークストリームでは一つのコンピュータのデータポイントのすべてをログしますので、データの欠損を回避することが重要となってくる場面でも使用が可能です。また仮に、ネットワーク接続が途中で途切れるようなことがあったとしても、ストリームに書き込まれたデータは損失しません。
こちらのネットワークストリームに関するホワイトペーパーに、プログラムを作成する具体的な方法など書かれてありますので、ご参照ください。
http://www.ni.com/white-paper/12267/ja/
もう少し具体的に、このホワイトペーパーに書かれている例を取り上げて説明しますと、こちらの「データの送信側のVI」をデータの送信側で実行し、
「データの受信側のVI」を受信側で実行すると、送信側のVIから送られてきた「1,2,3,4」という数字の繰り返しが、送信側のWhile ループを止めるまで、表示されます。
ネットワークストリームの場所ですが、LabVIEWの関数パレットの「データ通信」の中にあります。