LabVIEWCompactRIO 开发指南20 应用程序接口

简介: LabVIEWCompactRIO 开发指南20 应用程序接口

应用程序接口


STMAPI如图4.24所示。对于基本操作,它由一个读VI和一个写VI组成。它还具有两个补充VI,以帮助传输元数据,但它们的使用不是强制性的。每个主要的VI都是多态,这意味着可以将它们与不同的传输层一起使用。本文档讨论基于TCP/IP协议的STM通信,但STM也使用UDP和串行作为传输层。每个层的API是相似的。

2a8d422029b7ae06ab1d98fc709f756d.png



图4.24.STM函数


STM写如元


使用此VI将元数据信息发送到远程主机。为了正确解释消息,元数据在接收端和发送端必须一致。不应在每个主机上维护数据的副本,而应维护服务器上的元数据,并在客户端连接时使用此VI将其发送到客户端。


STM读取元


使用此VI从远程计算机接收元数据信息。它读取和解压缩元数据数组,可以将其传递给读写VI。


STM写消息


使用此VI将任何类型的数据发送到远程主机。它根据数据、数据名称和元数据信息创建数据包。调用此VI时,它会检索元数据数组中名称指定的变量的索引。然后,它组装消息数据包,并使用连接ID通过TCP/IP将其发送到远程主机。


数据必须为字符串格式才能传输。使用“Flatten to String”函数将消息数据转换为字符串。


STM读取消息


使用此VI从远程主机接收任何类型的数据。它读取和解压缩元数据索引和平展字符串数据。它查找meta元素并将其与数据字符串一起返回。然后,应用程序可以使用名称或其他元属性作为指导,将平展数据转换为消息数据类型。在下面的示例中,名为“RandomData”的变量始终转换为“Array of Doubles”数据类型。


该VI通常在循环中使用。由于不能保证数据会在给定时间到达,因此请使用“timeout”参数允许循环定期运行,并使用“超时?”指示器来了解是否处理返回的值。


举例


图4.25显示了STM用于通过网络发送RandomData和Iteration数据的基本示例。服务器VI如图4.25所示,客户端VI如图4.26所示。请注意,服务器VI会在建立连接后立即将元数据(实现为字符串数组)发送到远程主机。该示例写入两个值:迭代计数器和双精度数组。元数据包含这两个变量的说明。


只需将变量名称连接到STM Write Message VI,该VI负责为您创建和发送消息数据包。由于这种抽象,可以按名称发送数据,同时隐藏TCP/IP协议的基础复杂性。


另请注意,应用程序在发送数据之前将数据平展为字符串。对于简单数据类型,可以使用类型转换,它比平展到字符串函数略快。但是,“Flatten to String”函数也适用于复杂的数据类型,例如簇和波形。


813ab76ca45e1f86453cf7cc4f67cce0.png


图4.25.RT目标VI使用STM通信将数据发送到客户端


可以自定义协议并对其进行扩展以满足应用程序要求。添加变量时,只需向元数据数组添加一个条目,并为该变量添加相应的STM Write Message VI。


接收数据也很简单。图4.26中所示的设计模式在与服务器建立连接时等待元数据。然后,它使用STMRead Message VI来等待传入的消息。当它收到消息时,它会转换数据并根据元数据名称将其分配给本地值。


由数据名称驱动的Case结构提供了一种用于处理数据转换的可扩展方法。添加变量时,只需使用代码创建一个案例,即可将变量转换为正确的类型并将其发送到正确的目标。请注意,外部Case结构处理超时事件。


6b9a26a9201cf02563b9ac9a24735162.png



图4.26.主机VI使用STM通信读取传入数据


此设计模式的一个优点是,它集中了接收数据的代码并将其分配给本地值。


另一个优点是STM读取消息VI在接收数据(或发生超时)之前一直处于休眠状态,因此循环以传入数据的速率驱动。这保证不会丢失任何数据,也不会浪费CPU时间来轮询传入数据。


注意:由于客户端在运行时之前不知道元数据,因此必须确保应用程序处理所有可能的传入变量。最好实现“默认”情况以捕获任何“未知”变量作为错误条件。


有关STM的更多信息,请查看以下有关ni.com的白皮书:


LabVIEW Simple Messaging Reference Library (STM)


Command-Based Communication Using Simple TCP/IP Messaging


A Multiclient Server Design Pattern Using Simple TCP/IPMessaging


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章
|
6月前
|
存储 异构计算 Windows
LabVIEWCompactRIO 开发指南29 数据通信
LabVIEWCompactRIO 开发指南29 数据通信
44 4
|
6月前
|
传感器 监控 安全
LabVIEWCompactRIO 开发指南1
LabVIEWCompactRIO 开发指南1
71 2
|
6月前
|
网络协议 安全 数据挖掘
LabVIEWCompactRIO 开发指南12 LabVIEWCompactRIO 开发指南12 第四章网络通信的最佳实践
LabVIEWCompactRIO 开发指南12 LabVIEWCompactRIO 开发指南12 第四章网络通信的最佳实践
38 2
|
6月前
|
设计模式 数据采集 算法
LabVIEWCompactRIO 开发指南6
LabVIEWCompactRIO 开发指南6
45 1
|
6月前
|
存储 数据采集 API
LabVIEWCompactRIO 开发指南5
LabVIEWCompactRIO 开发指南5
42 1
|
6月前
|
异构计算
LabVIEWCompactRIO 开发指南第七章49
LabVIEWCompactRIO 开发指南第七章49
37 1
|
6月前
|
异构计算
LabVIEWCompactRIO 开发指南第七章50
LabVIEWCompactRIO 开发指南第七章50
33 1
|
6月前
|
人工智能 前端开发 异构计算
LabVIEWCompactRIO 开发指南第六章38
LabVIEWCompactRIO 开发指南第六章38
37 1
|
6月前
|
资源调度 算法 程序员
LabVIEWCompactRIO 开发指南第六章42
LabVIEWCompactRIO 开发指南第六章42
44 1
|
6月前
|
存储 异构计算
LabVIEWCompactRIO 开发指南第六章43
LabVIEWCompactRIO 开发指南第六章43
37 1