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

时间:2017-01-26 03:56:48

标签: python labview

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

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

是否有更简单的方法来实现我的目标。控制器和远程(?)IO之间的中间人?那里有什么协议?你推荐任何Python库吗?

1 个答案:

答案 0 :(得分:0)

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

Control reference demo - LabVIEW 2014 VI snippet

我们打开对目标VI的引用,然后使用属性节点(来自Application Control面板)将对VI前面板的引用返回到该面板上的所有控件(作为数组),最后写入所选控件的Value (Signaling)属性。要进行重复更改,您只需要重复最后一次属性写入。完成后只需关闭参考。

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

如果您更喜欢在Python中进行自动化,您应该能够使用this post模块中描述的方法,使用pywin32模块:

import win32com.client
labview = win32com.client.Dispatch("Labview.Application")
VI = labview.getvireference(r'C:\path\to\target.vi')
VI.setcontrolvalue('Numeric','5')

这会将带有标签Numeric的控件的值设置为5. 但是如果目标VI使用LabVIEW事件来响应控件值更改,则上述代码将不起作用,而不是轮询控件值,因为它设置控件的Value但不设置其Value (Signaling)属性。不幸的是,从rolfk到我的question on the NI forum的答案表明没有办法做后者 - 你需要编写一个中间的LabVIEW层,并以某种方式从Python发送数据。如果您在循环中轮询value to set(等),那么可以使用COM接口在上面的第一个示例中驱动LabVIEW代码。

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