LabVIEWCompactRIO 开发指南5
当前值表(CVT)
当前值查找表提供了一种在应用程序中共享标记的机制,它具有动态标记查找和组管理特性,这些特性在处理大量标记时非常有用。单进程共享变量和全局变量不提供动态查找功能。当前值表(CVT)允许应用程序组件共享公共数据存储库,并可以直接访问组件之间使用的任何变量的最新值。应用程序操作(如警报检测、用户界面更新、进程逻辑等)可以由共享相同数据存储库的单独进程处理。
CVT包含三组API函数来提供不同的接口,可以根据特定的应用程序需求进行选择。基本API提供简单的写入和读取功能。另外两个API(静态API和索引API)为CVT提供了更高性能的接口,但在使用CVT时对应用程序施加了一些限制。每个API都包含示例程序。
图3.9每个API的示例都以CVT库作为起点安装。
基本的API编写器示例如图3.10所示。在API调用中,变量名用于查找变量的索引,然后使用索引从CVT访问该值。本例将随机数数据分配给Var0-Var4标记,并写入Stop和Index标记。可以使用簇数组初始化标签,如图3.10所示,或者使用CVT load Tag List VI从文件加载它们。
图3.10。基本CVT写入器示例
图3.11中的Basic CVT Reader示例在应用程序的另一个实例中读取标签的当前值。两个示例都使用Format Into String函数来动态查找Var0-Var4标记。
图3.11。基本CVT读取示例
可以在NI Developer Zone文档Current Value LookupTable Reference Library中找到有关CVT的更多信息。
CVT库安装说明
步骤1:浏览到ni.com/labviewtools
步骤2:下载并安装VI包管理器
步骤3:在VI包管理器中,搜索“CVT”
队列
队列是两个不确定进程之间基于命令或消息的通信的推荐协议,因为它们灵活、易于使用,并且允许传输缓冲的数据。在发送消息时,可能需要在单个数据包中发送多种数据类型。队列支持Cluster数据类型,可以使用该数据类型将固定大小和可变大小(如字符串)的不同数据类型捆绑在一起。可以在实时操作系统和Windows操作系统上使用队列。
图3.12中的框图显示了执行数据采集任务的循环。数据采集循环使用队列与第二个循环共享获取的数据。第二个循环将它从队列中读取的采集数据记录到实时目标的磁盘上。
图3.12可以使用队列在两个不确定循环之间传输缓冲数据。
队列操作面板包含在LabVIEW的Synchronization»Queue Operations下的函数面板上。可以在NI示例查找器中找到使用队列的示例程序。
RT FIFO
RT FIFO是具有确定性行为的先入先出内存缓冲区。可以使用与Queue函数类似的RT FIFO函数或启用RT FIFO的共享变量来实现它们。这两种机制在本质上是相同的。虽然支持RT FIFO的共享变量的实现比RT FIFO函数更简单,但RT FIFO函数提供了更多的控制。例如,使用RT FIFO函数,可以决定何时创建FIFO以及何时关闭FIFO。共享变量在第一次调用时自动创建,并在应用程序停止时关闭。还可以控制配置选项,例如轮询还是阻塞来优化性能,并且可以使用更复杂的数据类型,例如集群(只要它们包含固定大小的元素)。本节讨论RTFIFO函数和启用RT FIFO的共享变量。
RT FIFO功能
RT FIFO函数类似于Queue函数,但灵活性较差,更具确定性。推荐用在RTOS上任意两个进程之间的数据流,因为它们总是预先分配内存并具有最大缓冲区大小。RT FIFO也推荐用在向时间关键循环传输命令或消息。它们提供了一种不增加抖动的确定性数据传输方法。队列和RT FIFO在以下方面有所不同:
队列可以处理字符串、变量和其他可变大小的数据类型,但是RT FIFO不能。
■RT FIFO的大小是固定的,因此它们可以在定时循环之间传输数据,而无需动态分配新的内存。队列可以随着添加元素而增长。
■队列在读写共享资源时使用阻塞调用,这可能会阻塞另一个循环的运行并影响确定性。RT FIFO不使用阻塞调用。
■RT FIFO执行时不考虑输入错误,以保持确定性;队列不会在错误时执行。
图3.13中的框图类似于前面使用队列的示例,但是由于数据采集循环现在是确定的,因此使用RTFIFO函数来共享数据。优先级为100的确定性循环使用RT FIFO函数与非确定性循环共享获取的数据。不确定性循环将它从RT FIFO读取的采集数据记录到实时目标的磁盘上。可以在第4章:网络通信的最佳实践中下载RT FIFO的更高级示例。
图3.13使用RT FIFO将缓冲数据传输到时间临界循环或从时间临界循环传输。
由于固定大小的限制,RT FIFO可能是一种有损通信方法。当FIFO满时,将数据写入RT FIFO会覆盖最老的元素。因此必须在FIFO满之前读取存储在RT FIFO中的数据,以确保在不丢失数据的情况下传输每个元素。检查RT FIFOWrite功能的覆盖输出,以确保没有覆盖数据。如果RT FIFO覆盖数据,覆盖输出返回TRUE值。
RT FIFO函数包含在LabVIEW实时的LabVIEWReal-Time»RT FIFO下的函数选板上。可以在NI示例查找器中找到具有RT FIFO功能的示例程序
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。