Labview 程序在查看(不更改)框图后更改行为
Labview Program changes behavior after looking at (not changing) the Block Diagram
在我查看框图之前,我的 Labview 程序运行得非常棒。没有进行任何更改。我不保存。只需 Ctrl+E,然后 Ctrl+R。
现在不能正常工作。只有重新启动 Labview 才能解决问题。
我的程序同时控制两个用于激光切割的扫描仪阵列。为了强制并行工作,我使用错误处理程序和等待来自扫描器的信号的循环。但是突然间有些循环 运行 比他们应该的更频繁。
当我打开与我的代码混淆的框图时,Labview 中主要发生了什么?
编辑:
如果不违反我的保密协议,很难说出发生了什么。
我正在控制两个独立的激光切割镜阵列。一个是 运行 一个切割工作,另一个应该是 运行 其他工作。只是非常快。当第一个完成时,他们在相同的位置和 运行 相同的几何图形以相同的慢速相遇。这些作业以 *.XML 的形式提供并存储为 .net 对象。设备仅 运行 是最近的作业,并在获取新作业时覆盖它。
我可以检查作业是否仍在 运行ning。虽然这是真的,但我 运行 其他作业的 while 循环。现在这个循环 运行s 太频繁了,甚至在一定程度上忽略了等待块。它还会跳过读取 XML 作业文件的部分,再次将速度部分改回快速并保存。只快运行秒一倍。
@Joe:不,不是。它只 运行 一次好了。之后就没有了。
Youtube 链接
快速检查点:调试和 "retain data in wires" 是否被禁用?虽然它可能不会改变计算,但它肯定会改变非常紧密的循环的时间,这是 OP 所指的意外程序行为之一。
我能想到的只有一件事,只要打开方框图就可以改变。
当程序框图打开时,任何被注释掉或无法访问的代码编译器消除的代码部分都将加载它们的子 VI。如果其中一个被注释掉的代码部分以某种方式干扰了您的 运行 代码,您可能会遇到问题。
我只知道有两种方法可以干扰……这两种方法都不太可能。
a) 您有某种 "check for all VIs in memory" 或 "check for all types in memory" 用作插件系统。当加载注释掉的部分时,内存中的 VI 会发生变化。这样的系统在解析 XML 时并不少见,所以也许吧。
b) 您正在使用 运行 VI 方法让一些动态调用的 VI 作为顶层 VI 执行,但是通过加载图表,它发现它是您当前程序的子 VI。一个 VI 不能同时是顶层 VI 和子 VI,因此调用 运行 VI returns 会出错。
就是这样。我想不出别的了。这两个想法似乎都不太可能,但鉴于您的说法和缺乏方框图,我想我会 post 它作为一个假设。
在不太可能的情况下,有人遇到了类似的问题。问题是在 运行 时间内读取了一个 xml 文件。有时多个实例试图访问它,这会产生错误。
在我查看框图之前,我的 Labview 程序运行得非常棒。没有进行任何更改。我不保存。只需 Ctrl+E,然后 Ctrl+R。
现在不能正常工作。只有重新启动 Labview 才能解决问题。
我的程序同时控制两个用于激光切割的扫描仪阵列。为了强制并行工作,我使用错误处理程序和等待来自扫描器的信号的循环。但是突然间有些循环 运行 比他们应该的更频繁。
当我打开与我的代码混淆的框图时,Labview 中主要发生了什么?
编辑: 如果不违反我的保密协议,很难说出发生了什么。
我正在控制两个独立的激光切割镜阵列。一个是 运行 一个切割工作,另一个应该是 运行 其他工作。只是非常快。当第一个完成时,他们在相同的位置和 运行 相同的几何图形以相同的慢速相遇。这些作业以 *.XML 的形式提供并存储为 .net 对象。设备仅 运行 是最近的作业,并在获取新作业时覆盖它。
我可以检查作业是否仍在 运行ning。虽然这是真的,但我 运行 其他作业的 while 循环。现在这个循环 运行s 太频繁了,甚至在一定程度上忽略了等待块。它还会跳过读取 XML 作业文件的部分,再次将速度部分改回快速并保存。只快运行秒一倍。
@Joe:不,不是。它只 运行 一次好了。之后就没有了。
Youtube 链接
快速检查点:调试和 "retain data in wires" 是否被禁用?虽然它可能不会改变计算,但它肯定会改变非常紧密的循环的时间,这是 OP 所指的意外程序行为之一。
我能想到的只有一件事,只要打开方框图就可以改变。
当程序框图打开时,任何被注释掉或无法访问的代码编译器消除的代码部分都将加载它们的子 VI。如果其中一个被注释掉的代码部分以某种方式干扰了您的 运行 代码,您可能会遇到问题。
我只知道有两种方法可以干扰……这两种方法都不太可能。 a) 您有某种 "check for all VIs in memory" 或 "check for all types in memory" 用作插件系统。当加载注释掉的部分时,内存中的 VI 会发生变化。这样的系统在解析 XML 时并不少见,所以也许吧。 b) 您正在使用 运行 VI 方法让一些动态调用的 VI 作为顶层 VI 执行,但是通过加载图表,它发现它是您当前程序的子 VI。一个 VI 不能同时是顶层 VI 和子 VI,因此调用 运行 VI returns 会出错。
就是这样。我想不出别的了。这两个想法似乎都不太可能,但鉴于您的说法和缺乏方框图,我想我会 post 它作为一个假设。
在不太可能的情况下,有人遇到了类似的问题。问题是在 运行 时间内读取了一个 xml 文件。有时多个实例试图访问它,这会产生错误。