Python 如何编辑和接收来自cRIO的数据?

Python 如何编辑和接收来自cRIO的数据?,python,labview,Python,Labview,在我的实验室里,我有一个使用cRIO的试验台。有3个CRIO连接到多个传感器。我的目标是处理传感器数据,看看它如何影响其他进程。安装测试台的公司编写了一个非常复杂的LabView程序 我对LabView不熟悉。我已经看到了一些关于制作web服务的答案。这对编辑数据有用吗?工程师说数据被连续注入一个循环,所以我的程序也必须以类似的方式运行,或者完全禁用另一个循环。如果是,我如何着手为如此庞大的项目创建web服务 有没有更简单的方法来实现我的目标。在控制器和遥控器之间的中间有一个人?那里有什么协议?

在我的实验室里,我有一个使用cRIO的试验台。有3个CRIO连接到多个传感器。我的目标是处理传感器数据,看看它如何影响其他进程。安装测试台的公司编写了一个非常复杂的LabView程序

我对LabView不熟悉。我已经看到了一些关于制作web服务的答案。这对编辑数据有用吗?工程师说数据被连续注入一个循环,所以我的程序也必须以类似的方式运行,或者完全禁用另一个循环。如果是,我如何着手为如此庞大的项目创建web服务


有没有更简单的方法来实现我的目标。在控制器和遥控器之间的中间有一个人?那里有什么协议?您建议使用Python库吗?

由于您现有的应用程序具有“模拟模式”,在该模式下,您要更改的数据可以使用LabVIEW前面板上的控件手动设置,因此您可以使用控件引用从另一个LabVIEW VI以编程方式操纵这些控件。以下LabVIEW代码段将目标VI中索引为0的控件的值设置为指定值:

我们打开对目标VI的引用,然后使用属性节点(从应用程序控件调色板)返回对该VI的前面板、该面板上的所有控件(作为数组)的引用,最后写入所选控件的
值(信令)
属性。要重复进行更改,只需重复最后一次属性写入。完成后只需关闭引用即可

要找出哪个控件具有哪个索引,请阅读数组中每个控件引用的
Label.Text
属性,为您提供其方框图标签的文本-不一定与前面板上的标题相同

如果您喜欢使用Python实现自动化,则应该能够使用中描述的方法,使用模块:

这将标签为
Numeric
的控件的值设置为5但是如果目标VI使用LabVIEW事件响应控件值更改,而不是轮询控件值,则上述代码将不起作用,因为它设置控件的
,但不设置其
值(信号)
属性。不幸的是,rolfk对my的回答表明,没有办法实现后者——您需要编写一个中间LabVIEW层,并以某种方式将数据从Python发送到该层。如果在循环中轮询
值以设置
(etc),则可以使用COM接口驱动上面第一个示例中的LabVIEW代码


如果您想要超越这一点,那么应该可以修改现有的LabVIEW应用程序,以便您可以注入所需的数据,或者,如果您愿意,可以完全替换它,并自行处理向cRIOs发送和接收数据;但是,如果没有关于系统如何实现的更多细节,这将是一个过于宽泛的问题。

因为您现有的应用程序具有“模拟模式”,在该模式下,您要更改的数据可以使用LabVIEW前面板上的控件手动设置,您可以使用控件引用从另一个LabVIEW VI以编程方式操纵这些控件。以下LabVIEW代码段将目标VI中索引为0的控件的值设置为指定值:

我们打开对目标VI的引用,然后使用属性节点(从应用程序控件调色板)返回对该VI的前面板、该面板上的所有控件(作为数组)的引用,最后写入所选控件的
值(信令)
属性。要重复进行更改,只需重复最后一次属性写入。完成后只需关闭引用即可

要找出哪个控件具有哪个索引,请阅读数组中每个控件引用的
Label.Text
属性,为您提供其方框图标签的文本-不一定与前面板上的标题相同

如果您喜欢使用Python实现自动化,则应该能够使用中描述的方法,使用模块:

这将标签为
Numeric
的控件的值设置为5但是如果目标VI使用LabVIEW事件响应控件值更改,而不是轮询控件值,则上述代码将不起作用,因为它设置控件的
,但不设置其
值(信号)
属性。不幸的是,rolfk对my的回答表明,没有办法实现后者——您需要编写一个中间LabVIEW层,并以某种方式将数据从Python发送到该层。如果在循环中轮询
值以设置
(etc),则可以使用COM接口驱动上面第一个示例中的LabVIEW代码


如果您想要超越这一点,那么应该可以修改现有的LabVIEW应用程序,以便您可以注入所需的数据,或者,如果您愿意,可以完全替换它,并自行处理向cRIOs发送和接收数据;但是,如果没有关于系统如何实现的更多细节,这将是一个过于宽泛的问题。

我们需要了解您的代码和/或cRIO配置的一些细节,以提供具体帮助,但首先是:a)您知道cRIO上是否运行LabVIEW FPGA代码,还是只是运行扫描引擎,b)是否有LabVIEW代码在主机PC上运行,还是全部在cRIO上运行?用代码/配置术语来说,用模拟的传感器数据代替真实的输入可能很简单,但如果您是LabVIEW新手,这可能不是理想的初学者项目。我不认为web服务会有什么帮助,除非你只是想从cRIO读取一些数据到你自己的代码中。如果你还没有阅读LabVIEW/cRIO入门指南,它可能会帮助你弄清楚你的系统是如何运行的
import win32com.client
labview = win32com.client.Dispatch("Labview.Application")
VI = labview.getvireference(r'C:\path\to\target.vi')
VI.setcontrolvalue('Numeric','5')