Labview程序在查看(不更改)框图后改变了行为

时间:2016-02-08 14:43:50

标签: labview

我的Labview程序就像一个魅力,直到我看到Block Diagram。没有变化。我不救。只需按Ctrl + E,然后按Ctrl + R.

现在它无法正常工作。只有重启Labview才能解决问题。

我的程序同时控制两个用于激光切割的扫描仪阵列。为了强制并行工作,我使用错误处理程序和循环来等待来自扫描程序的信号。但突然间,一些循环比它们应该更频繁地运行。

当我打开与我的代码混淆的方块图时,Labview中主要发生了什么?

编辑: 在不违反我的保密协议的情况下,很难说出发生了什么。

我正在控制两个独立的激光切割镜像阵列。当一个人正在运行一个Cutting-Job时,另一个应该运行其他Jobs。只是非常快。当第一个完成时,它们在相同的位置相遇并以相同的低速运行相同的几何形状。作业以* .XML形式提供,并存储为.net对象。该设备仅运行最近的作业,并在获取新作业时覆盖它。

我可以检查作业是否仍在运行。虽然这是真的,但我为其他工作运行了一个while循环。现在这个循环经常运行几次,甚至在某种程度上忽略了WAIT块。此外,它会跳过读取XML作业文件的部分,再次将速度部分更改为快速并保存。它只运行一次。

@Joe:不,不。它只运行一次。之后它没有。

Youtube链接

The way it is supposed to move

The wrong way

3 个答案:

答案 0 :(得分:2)

我只能通过打开方框图来改变这一点。

当程序框图打开时,任何已注释掉或无法访问代码编译器的代码段都会加载其子VI。如果其中一个注释掉的代码部分以某种方式干扰了您正在运行的代码,那么您可能会遇到问题。

我知道只有两种方法可以干涉......这两种方式都是不太可能的。 a)你有某种"检查内存中的所有VI"或者"检查内存中的所有类型"您作为插件系统使用的。当注释掉的部分加载时,这将改变内存中的VI。这样的系统在解析XML时并不罕见,所以也许。 b)您正在使用Run VI方法将一些动态调用的VI作为顶级VI执行,但是通过加载图表,它会发现它是您当前程序的子VI。 VI不能同时是顶级和子VI,因此对Run VI的调用会返回错误。

那就是它。我无法想到其他任何事情。这两种想法似乎都不太可能,但考虑到你的主张和缺乏框图,我认为我将其作为一个假设发布。

答案 1 :(得分:1)

在不太可能的情况下,有人也会遇到类似的问题。问题是在运行时读取的xml文件。有时有多个实例尝试访问它,这会导致错误。

答案 2 :(得分:0)

快速检查:是否已禁用调试和“保留数据在线路中”?虽然它可能不会改变计算,但它肯定会改变非常紧密的循环的时间,这是意外的程序行为之一,OP指的是。