从LabView发送数据到Python并接收返回

5 投票
9 回答
21278 浏览
提问于 2025-04-16 20:56

我该如何把数据从LabView发送到Python,并且再得到一个结果呢?

9 个回答

3

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的列表,聚合数据会转换成元组(返回值也是如此)。

4

LabView 允许你用几种语言来写扩展,现在主要的方法是通过网络连接来实现。一般来说,直接在 LabView 进程内部运行的本地语言工具包是不太推荐的。

这里似乎有一个 Python 的 Labview 工具包,但它已经不再可用了。

你可以使用套接字服务器和套接字客户端来让 LabView 和 Python 之间进行交流。这是一个跨平台的解决方案,现在你不需要把 Python 和 LabView 都在同一台电脑上运行,或者在同一个进程里。

不过很遗憾,我现在无法提供示例,因为我没有安装 LabView。不过多年前,我曾经用 ole 自动化的方式把 LabView 和几十个应用程序用两三种语言连接起来。现在的话,我会选择使用网络套接字的方法。

8

还有一个解决方案是使用智能消息库 ZeroMQ,这个库支持很多编程语言,几乎涵盖了所有主流语言。

对于Python和LabVIEW的结合,有一个很不错的示例项目可以在sourceforge上找到:

Python-LabVIEW 通信

客户端部分 ~LabVIEW
这里是图片描述 +
服务器端部分(示例)

#-----------------------------------------# 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" )

撰写回答