LabVIEWCompactRIO 开发指南17
网络流
网络流类似于队列函数,因为它们是基于FIFO的,但与队列函数不同的是,网络流具有网络作用域。它们是为通过以太网进行无损、高吞吐量数据通信而设计和优化的,并且它们具有增强的连接管理功能,如果由于网络中断或其他系统故障而断开连接,则可以自动恢复网络连接。流使用缓冲的无损通信策略,确保写入流的数据永远不会丢失,即使在具有间歇性网络连接的环境中也是如此。
由于网络流构建时具有与原始TCP相当的吞吐量特征,因此它们非常适合程序员希望避免TCP复杂性的高吞吐量应用程序。还可以使用流进行无损、低吞吐量的通信,例如发送和接收命令。
网络流使用单向点对点缓冲通信模型在应用程序之间传输数据。这意味着一个端点是数据的写入者,另一个端点是读取者。应用程序可能需要多个流来通信多种类型的数据,如图4.13所示。
图4.13 网络流使用单向、点对点缓冲通信模型
图4.13显示了一个基本的Network Streams实现。一个进程在实时目标上执行,另一个进程在主机上执行。可以遵循三个基本步骤来设置网络流:
1. 创建端点并建立流连接
2. 读取或写入数据
3.销毁端点
创建端点
一旦创建了兼容的读取器和写入器端点,就建立了连接。创建端点的顺序并不重要。流要尝试重新连接,必须至少有一个端点处于活动状态。
图4.14 创建读取器和写入器端点。
如果发生断开连接并且一个端点变为非活动状态,则协议将在后台自动执行重新连接。该协议永远重试,保持数据流的无损特性。当协议尝试重新连接时,活动端点输出一条错误消息,通知用户端点无法重新同步。还可以使用图4.15所示的网络流端点属性节点来监视流是否连接。
图4.15 使用属性节点监视网络流端点连接状态
读写数据
当读取或写入网络流时,可以一次写入单个元素或多个元素,这取决于选择的网络流函数。数据永远不会被覆盖或重新生成,也不会发生部分数据传输。读/写函数要么成功要么超时。
图4.16 网络流的基本实现,通过网络传输数据
销毁端点
在销毁网络流端点之前,可以使用刷新流。VI以确保所有数据都已从写入器端点传输。如果选择“AllElements Read from Stream”,则写入器端点不会销毁自己,直到写入器缓冲区中的所有元素都被放入并从读取器缓冲区中读取。如果选择“All Elements Available for Reading”,一旦所有元素被放入读取器缓冲区,写入器端点就会自行销毁。
图4.17 使用冲洗流,VI关闭网络流
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。
楼主最近还看过