LabView から Python にデータを送信し、結果を取得するにはどうすればよいですか?
9 に答える
もう 1 つの解決策は、スマート メッセージング ライブラリZeroMQを使用することです。これには、ほぼすべての主要言語用の多数のバインディングが付属しています。
Python/Labview の場合、sourceforge にすばらしいデモ プロジェクトがあります。
#-----------------------------------------# INFRASTRUCTURE for communication
context = zmq.Context() # I/O-DAEMON CONTEXT
socket = context.socket(zmq.REP) # ARCHETYPE for a Smart Messaging
socket.bind( "tcp://127.0.0.1:5555" ) # PORT ready for LabView to .connect()
#-----------------------------------------# TRANSPORT-CLASS-es {ipc|tcp|+..}
while True: # LOOP & WAIT FOR REQ-calls
# # Wait for request from client
message = socket.recv()
print("Received request: %s" % message )
try:
r = eval( message )
print(r )
socket.send(bytearray(str( r ),
'utf-8' )) # send returned value as bytearry to client
except NameError:
socket.send( b"Unknown command" )
except:
socket.send( b"Unknown error" )
LabViewを使用すると、複数の言語で拡張機能を記述できます。最近の主な手法は、ネットワーク接続を使用することです。labviewプロセス自体の内部で実行される母国語ツールキットは避けられます。
ここにPythonLabviewツールキットがあるようですが、動作しなくなりました。
ソケットサーバーとソケットクライアントを使用して、LabviewとPythonの間で通信します。(ほとんどのクロスプラットフォームソリューションであり、PythonとLabVIEWを同じPCまたは同じプロセスで実行する必要はありません)。
残念ながら、labviewがインストールされていないため、現時点ではサンプルは私を超えていますが、LabViewから2つまたは3つの言語の数十のアプリへのOLEオートメーションベースの統合を行っていますが、それは何年も前のことです。最近はネットワークソケット技術を使用します。
LabVIEW 2018 では、LabVIEW から Python コードを呼び出して「データを送受信」する「ネイティブ」ソリューションが提供されるようになりました。
接続パレットには、LabVIEWコードからPythonコードを呼び出すために使用できる新しいPythonサブパレットが含まれています。Python パレットには、次の関数が含まれています。
- Python セッションを開く — 特定のバージョンの Python で Python セッションを開きます。
- Python ノード — Python 関数を直接呼び出します。
Python セッションを閉じる — Python セッションを閉じます。
メモ LabVIEW Python 関数を使用するには、Python 2.7 または 3.6 をインストールする必要があります。サポートされていないバージョンでも LabVIEW Python 関数で動作する可能性がありますが、NI ではサポートされているバージョンの Python のみを使用することをお勧めします。
リファレンス: LabVIEW 2018の機能と変更点
Python ノードには、モジュール パス、関数名、入力パラメーター、および戻り値の予期されるデータ型が提供されます。これらの入力と出力は、数値、(多次元) 配列、文字列、クラスターなど、多くの基本的なデータ型をサポートしています。対応するデータ型への自動変換を使用します。つまり、LabVIEW 配列は Python リストに変換され、クラスタはタプルに変換されます (戻り値はその逆)。
私はしばらくの間、Python プロセスとの stdio 通信を使用していましたが、最近、Python for .Net ( http://pythonnet.github.io/ ) が機能することに気付きました。
LabVIEW プロジェクトに .dll をコピーし、.Net コンストラクタを作成するだけで、LabVIEW .Net を使用して、このライブラリの使用方法をすぐに理解できます。これは基本的に、.Net の良さでラップされたアンマネージ Python 共有ライブラリを提供します。
Python-LabVIEW-Interface (PyLVi)は、 ZeroMQライブラリに基づくオープンソース プロジェクトで、Python 関数を呼び出して結果を LabVIEW に読み戻します。
クラスのメソッドとプロパティの呼び出しをサポートし、構造化されたデータ型 (たとえば、Python 辞書は LabVIEW クラスタにマップされます) と numpy 配列を処理できます。
これは簡単な解決策ですが、エレガントではありません。labview と python の両方が読み書きできるテキスト ファイルを使用するだけです。Labview はコマンドをテキスト ファイルに書き込み、Python はコマンドが読み取られるまで待機します。テキストファイルの読み取りとテキストファイルの書き込みを同時に行うことができます。ただし、読み取りと書き込みに時間がかかるため、これは遅いソリューションです。