从LabView发送数据到Python并接收返回
我该如何把数据从LabView发送到Python,并且再得到一个结果呢?
9 个回答
LabVIEW 2018现在提供了一种“原生”的方法,可以在LabVIEW中调用Python代码,并且可以“来回传递数据”。
在连接性工具箱中,有一个新的Python子工具箱,你可以用它从LabVIEW代码中调用Python代码。这个Python工具箱包含以下功能:
- 打开Python会话 — 这会打开一个特定版本的Python会话。
- Python节点 — 直接调用一个Python函数。
关闭Python会话 — 这会关闭一个Python会话。
注意:你必须安装Python 2.7或3.6才能使用LabVIEW的Python功能。虽然不支持的版本可能也能用,但NI建议只使用支持的Python版本。
参考链接:LabVIEW 2018的功能和变化
Python节点需要提供模块路径、函数名称、输入参数,以及期望的返回值数据类型。这些输入和输出支持多种基本数据类型:数字、(多维)数组、字符串、聚合数据;并且会自动转换成相应的数据类型,比如LabVIEW的数组会转换成Python的列表,聚合数据会转换成元组(返回值也是如此)。
LabView 允许你用几种语言来写扩展,现在主要的方法是通过网络连接来实现。一般来说,直接在 LabView 进程内部运行的本地语言工具包是不太推荐的。
这里似乎有一个 Python 的 Labview 工具包,但它已经不再可用了。
你可以使用套接字服务器和套接字客户端来让 LabView 和 Python 之间进行交流。这是一个跨平台的解决方案,现在你不需要把 Python 和 LabView 都在同一台电脑上运行,或者在同一个进程里。
不过很遗憾,我现在无法提供示例,因为我没有安装 LabView。不过多年前,我曾经用 ole 自动化的方式把 LabView 和几十个应用程序用两三种语言连接起来。现在的话,我会选择使用网络套接字的方法。
还有一个解决方案是使用智能消息库 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" )