本教程的这一部分将创建消费者循环来处理生产者循环生成的数据。消费者循环使用While循环而不是定时循环,因为处理数据任务比生成数据的优先级要低。也就是说,如果硬件资源有限,在限定时间内生成数据比处理数据更重要。

创建消费者循环

典型的做法是使用等待下一个整数倍毫秒函数同步While循环和定时循环。以这种方式同步循环并非必要,但可为While循环提供定时循环执行结束后周期内剩余的执行时间。

按照以下步骤,创建一个与生产者循环周期相同的消费者循环:

  1. 在“RT主程序”的程序框图中,在定时循环下方放置一个While循环。
  2. 在While循环中放置一个等待下一个整数倍毫秒函数。
  3. 右键单击等待下一个整数倍毫秒函数的毫秒倍数输入端,从快捷菜单中选择创建»常量
  4. 输入250作为常量,以匹配定时循环的周期。

将数据从生产者循环以确定性方式传输到消费者循环

LabVIEW提供了许多传输数据的方法,其中有些是确定性的,有些则不是。RT FIFO就是确定性数据通信方法的一个范例。为实现确定性,RT FIFO在运行前会为数据传输预先分配内存,从而防止向内存写入数据时出现意外延迟。RT FIFO以先进先出的顺序缓冲和传输数据。可以在函数选板的Real-Time»RT FIFO下找到RT FIFO函数。如需了解其他可用的数据通信方法,见LabVIEW中的数据通信方法帮助主题。

按照以下步骤,使用RT FIFO将数据从生产者循环传输到消费者循环:

  1. 将RT FIFO创建函数放置在循环的外部左侧。
  2. 用RT FIFO写入函数替代定时循环中的显示控件。
    注: 确保将随机数函数的输出端连线至RT FIFO写入函数的元素输入端。
  3. 在While循环内放置RT FIFO读取函数。
  4. 将RT FIFO删除函数放置在循环的外部右侧。
  5. 将DBL数值常量连线至RT FIFO创建函数的类型输入端。
  6. 将RT FIFO创建函数的rt fifo输出端连线至其他3个RT FIFO函数的rt fifo输入端。
  7. 右键单击While循环的循环条件图标,从快捷菜单中选择创建输入控件,创建“停止”按钮。
  8. 在While循环中放置一个条件结构。
  9. 在条件结构选择器标签中选择False
  10. 将RT FIFO读取函数的空?输出端连线至条件结构的条件选择器。
  11. 右键单击RT FIFO读取函数的元素输出输出端,从快捷菜单中选择创建»显示控件
  12. 将显示控件放置在条件结构中。
  13. 将显示控件连线至RT FIFO读取函数的元素输出输出端。

添加错误处理

最佳实践是连线函数的错误接线端。这样就可以通过VI传递错误信息,并在不暂停VI执行的情况下恰当地处理错误。

按照以下步骤,在“RT主程序”中连线错误:

  1. 调整定时循环输入节点的大小,使其包含5个输入端。
  2. 右键单击定时循环输入节点的底部输入端,从快捷菜单中选择选择输入»错误
  3. 将RT FIFO创建函数的错误输出输出端连线至定时循环输入节点的错误输入端。
  4. 将定时循环左数据节点的错误输出端连线至RT FIFO写入函数的错误输入输入端。
  5. 将RT FIFO写入函数的错误输出输出端连线至定时循环右数据节点的错误输入端。
  6. 在循环的外部右侧放置合并错误函数。
  7. 将定时循环输出节点的错误输出端连线至合并错误函数的顶部输入端。
  8. 将RT FIFO创建函数的错误输出输出端连线至RT FIFO读取函数的错误输入输入端。
  9. 将RT FIFO读取函数的错误输出输出端通过条件结构连线至合并错误函数的底部错误输入输入端。
  10. 将合并错误函数的错误输出输出端连线至RT FIFO删除函数的错误输入输入端。
  11. 右键单击RT FIFO删除函数的错误输出输出端,选择创建»显示控件
  12. 右键单击While循环错误隧道之一,从快捷菜单中选择替换为移位寄存器
  13. 单击另一个While循环错误隧道,将其替换为移位寄存器。
  14. 在条件结构选择器标签中选择True
  15. 将错误连线直接穿过条件分支。
  16. 保存该VI。
  17. 项目浏览器窗口,右键单击VI并从快捷菜单中选择部署

结果

运行“RT主程序”时,生产者循环具有最高优先级,可将RT终端生成的值写入RT FIFO缓冲区。在每个周期内只要CPU可用,消费循环就会从RT FIFO缓冲区读取这些值。

注: 单击前面板上的两个“停止”按钮,停止VI。