0

我一直在为孩子们制作一个 labview 程序,以监测各种电源产生的能量。我有一个条件,如果他们生产不足,就会发出警告,如果他们生产过多,就会发出另一个警告。我想计算整个活动的时间,每种类型的警告都会被触发,所以每个组最后都会有一个分数。这只是为了模拟最终程序的行为方式。目前我有一个计时器,可以得出警告为真的时间量,但每次警告关闭并再次打开时,它都会覆盖自身。

所以基本上我需要总结该值为真的总时间,即使它在真假之间徘徊。

在此处输入图像描述

4

2 回答 2

1

将花费的总时间制表为“真”的一种方法是使用索引隧道从 While 循环中导出警告指示器。如果您还从循环中导出指标触发时间的毫秒计数器值,您可以对 True/False 值数组以及值转换的相应时间进行后处理。

后处理可能是一个 for 循环,它保持运行总时间为真。

Ps 如果您将代码导出为 VI 片段,其他人将能够直接检查和修改代码,而无需从头开始重新制作。请参阅有关该主题的 NI 网页:http: //www.ni.com/white-paper/9330/en/

于 2013-10-24T19:36:04.633 回答
1

我建议走另一条路。就个人而言,我发现您使用的代码令人困惑,因为您从移位寄存器中的值中减去滴答计数,这可能有效,但没有任何逻辑意义。

相反,我建议将其转换为执行以下操作的子 VI:

  1. 将当前布尔值、运行总数和最后一次复位时间保存在移位寄存器中。
  2. 使用 first call 原语和 case 结构在第一次调用时初始化这些 SR。
  3. 如果值从 F 变为 T(将输入与 SR 进行比较),则更新开始时间。
  4. 如果它从 T 变为 F,则从当前时间中减去开始时间并将其添加到总数中。

我现在实际上并没有对此进行编码,因此那里可能存在漏洞,但我将其留作练习。另外,我建议使 VI 可重入。这样,您可以简单地调用它第二次来为第二个计时器获得相同的功能。

于 2013-10-27T07:10:24.397 回答