【问题标题】:How to stop a While loop in LabView using a timer如何使用计时器停止 LabView 中的 While 循环
【发布时间】:2017-04-15 00:36:38
【问题描述】:

我正在为 Uni 做一个项目,我需要 while 循环在 6 秒后停止。所以我按照通常的方式将 wait(ms) 设置为等待 6000 毫秒,然后将其与 6000 const 进行比较以获得一个布尔值 TRUE,这应该已经停止了我的循环,但它没有。所以我想知道你是否知道问题可能是什么?

【问题讨论】:

  • 张贴您当前代码的图片总是有助于解决问题。选择图表上的所有代码,然后选择“Edit >> Create VI Snippet From Selection”。这会为您提供一个 PNG 文件,其中包含其他人可以用来拖到他们的框图上并重新创建您的代码的元数据。

标签: labview


【解决方案1】:

您不想要“等待”函数——该函数会暂停执行,直到该节点完成,这意味着您的 While 循环只会执行 1 次,而这 1 次将持续 6000 毫秒。

您想要的是 Tick Count 功能。

您可以将此图像从浏览器(某些浏览器可能要求您先将 PNG 保存到磁盘)拖到您的程序框图上以重新创建代码(如果您有 LV 2016 或更高版本,如右上角的版本号)。此图像是使用“编辑 >> 从所选内容创建 VI 片段”创建的。

【讨论】:

    【解决方案2】:

    另一个解决问题的方法是使用定时循环。这些是专门为计时任务设计的。定时循环的好处是您可以更准确地控制它何时停止。建议的 while 循环(来自 srm)将在 6 秒 + 完成代码所需的时间后停止。定时循环的“缺点”是它的行为更像是一个 for 循环,其中每个循环都需要一个特定的时间间隔,通常我发现它的好处多于缺点:

    我还放入了之前建议的解决方案(来自 srm)进行比较。在我的电脑上,定时循环以毫秒精度停止,而 while 循环有几十毫秒的延迟。

    【讨论】:

    • 我喜欢这种修改后的方法,因为它具有很大的灵活性。然而,限制是如果循环中有很多“代码”并且它花费的时间比循环时间长,那么计算要执行多少循环不再有效,总运行时间将比用户指定的长。如果我能找出考虑到实际循环时间的改进,我会将其添加到此线程中。
    • 感谢您的夸奖。关于提到的限制,定时循环可以选择检查这一点。有一个“Finished Late”语句,让您检查循环是否在分配的时间内完成。您还有“模式”选项,您可以在其中指定循环应如何处理延迟执行。见:zone.ni.com/reference/en-XX/help/371361H-01/glang/timed_loop
    【解决方案3】:

    您的 bool 值为 false 的实际原因是 Wait (ms) VI 的输出不是 VI 等待的毫秒数,而是“毫秒计时器”,它是自 Windows 启动以来的毫秒数或其他类似的东西影响。如果您在等待 VI 完成的那一刻运行 Tick Count (ms) VI,您将得到相同的数字。

    其他人正确指出循环中的 6 秒等待将阻止您的循环完成执行并重复直到 6 秒结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2013-09-11
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      相关资源
      最近更新 更多