在Labview中值为true时的计时

时间:2013-10-24 10:43:22

标签: loops timer labview

我一直在为孩子们制作一个labview程序来监控各种电源的能源生产。我有一个条件,如果他们的生产不足,警告就会开火,如果他们的生产能力过高,则会发出另一个警告。 我想在整个活动中花多长时间,每种类型的警告都会被触发,这样每个小组最后都会有一个分数。这只是为了模拟最终程序的行为方式。 目前我有一个计时器可以消除警告的真实时间,但每次警告响起时它都会覆盖自己。

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

enter image description here

2 个答案:

答案 0 :(得分:1)

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

后期处理可以是一个for循环,可以将运行的总时间保持为真。

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

答案 1 :(得分:1)

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

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

  1. 在移位寄存器中保持当前布尔值,运行总计和最后一次复位时间。
  2. 使用第一个调用原语和案例结构在第一次调用时初始化这些SR。
  3. 如果值从F更改为T(将输入与SR进行比较),请更新开始时间。
  4. 如果它从T变为F,则从当前时间减去开始时间并将其添加到总数中。
  5. 我现在实际上并没有对此进行编码,因此可能存在漏洞,但我将其作为练习。另外,我建议让VI可以重入。这样,你可以简单地再次调用它来获得第二个计时器的相同功能。