应用程序接口
STMAPI如图4.24所示。对于基本操作,它由一个读VI和一个写VI组成。它还具有两个补充VI,以帮助传输元数据,但它们的使用不是强制性的。每个主要的VI都是多态,这意味着可以将它们与不同的传输层一起使用。本文档讨论基于TCP/IP协议的STM通信,但STM也使用UDP和串行作为传输层。每个层的API是相似的。
图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”函数也适用于复杂的数据类型,例如簇和波形。
图4.25.RT目标VI使用STM通信将数据发送到客户端
可以自定义协议并对其进行扩展以满足应用程序要求。添加变量时,只需向元数据数组添加一个条目,并为该变量添加相应的STM Write Message VI。
接收数据也很简单。图4.26中所示的设计模式在与服务器建立连接时等待元数据。然后,它使用STMRead Message VI来等待传入的消息。当它收到消息时,它会转换数据并根据元数据名称将其分配给本地值。
由数据名称驱动的Case结构提供了一种用于处理数据转换的可扩展方法。添加变量时,只需使用代码创建一个案例,即可将变量转换为正确的类型并将其发送到正确的目标。请注意,外部Case结构处理超时事件。
图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开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。