网络变量(NetWorkVariable)探究(一)

这里写自定义目录标题


第一部分 网络变量特征概述
在Measurement Studio的网络变量.NET类库中有三个命名空间:NetworkVariable, NetworkVariable.WindowsForms和NetworkVariable.WebForms。NetworkVariable命名空间包含网络变量核心功能函数,比如读、写功能。NetworkVariable.WindowsForms 和 NetworkVariable.WebForms命名空间包括网络变量的Form和WebForm控件绑定功能。
你可以通过网络,使用网络变量类库来传输现场测量数据,你也可以通过网络变量在不同的数据平台之间交换数据,如Measurement Studio, LabVIEW, LabWindows/CVI或者其他支持NI-Publish Subscribe Protocol (psp:)的平台。
相比于Datasocket,NetworkVariable有更好的性能和可扩展性。参考Using the Network Variable .NET Library to Exchange Data with LabVIEW and LabWindows/CVI来获取更多关于使用网络变量的优势的信息。
网络变量从发布在服务器的变量进行读写操作。为了引用网络变量,你必须传递一个地字符串给读写类的构造函数,这个字符串代表了网络变量的地址。地址字符串的格式有点像网络共享文件的名字,格式是不区分大小写的(is not case-sensitive)。例如,你可以在windows上写\machine\myprocess\item,这个例子中,machine是网络变量宿主的服务器的(hosting the variable)计算机名称或者IP地址或者是有权限的域名;myprocess包含网络变量文件夹或者变量集;item和网络变量的名称。在这个例子中,myprocess描述了一个网络变量进程,你可以把你的网络变量放到不同的进程中。下面的例子表示了一些有效的地址字符串:
• \localhost\testlib\double
• \localhost\process\test
• \testmachine\system\doublearray
你可以隐式(implicitly)或显示(explicitly)地创建和配置网络变量
隐式创建变量
你可以通过连接一个系统保留进程的网络变量来隐式地创建网络变量。当一个写方(writer)连接网络变量的时候,一个网络变量就隐式地自动创建了,比如你使用NetworkVariableWriter来连接一个地址为\localhost\System\MyVariable的网络变量,如果这个变量不存在,它就会自动被创建。当所有网络变量客户端断开连接的时候,隐式创建的网络变量会被服务器自动删除掉。隐式变量的类型总是Object型,从而确保它可以包含任何数据。隐式变量在任意时刻只允许一个写连接,任何其它尝试的连接都会导致写方抛出NetworkVariableException错误。隐式变量不能被服务器缓存,但是NetworkVariableBufferedWriter or NetworkVariableBufferedSubscriber可以执行客户端缓存(can perform client-side buffering of an implicit variable)。<不知道怎么翻译>
显示创建变量
你可以通过编程使用网络变量API或者标准的分布式系统管理应用程序显示地创建变量。通过手动创建变量,你可以得到更多的选项,比如服务器缓存、设置变量的数据类型。甚至在没有活跃连接时你都可以显示地配置网络变量。
 通过编程创建变量:你可以在网络变量API中使用下面的类来编程创建网络变量:ServerProcess, ServerProcessInfo, ServerVariable, and ServerVariableInfo。
 通过NI分布式系统管理器(NI Distributed System Manager)创建变量:参考NI Distributed System Manager的帮组文档关于 Creating, Modifying, or Deleting Shared or Network Variables来获取更多关于如何显示创建网络变量的信息。
Reader 和 Writer 类
下表列出来网络变量.NET类库的readers和writers已经他们的使用情况

<上表中关于On-Demand和Scalable的意思,文档中是这么说的:>
On-Demand: Use these classes to make synchronous (blocking) calls across the network that do not return until the read or write operation completes and the server has been updated.
<意思是说:使用这些类来执行同步调用,它会阻塞进程,直到服务器更新了数据并且写或者读操作完成,函数才会返回 >
Scalable: Use these classes for applications that require communication with a large number of network variables and to transfer data at high speeds without adversely affecting network traffic or application performance.
<意思是说:这些类适用于需要进行大量、高速数据传输的情况,可以避免网络阻塞>
读写类的定义
网络变量类库包含以下5中读/写类:
 NetworkVariableReader—这个类的功能是按要求(on demand)读网络变量,服务器不会自动发送数据到你的程序。相反,你要调用ReadData函数来从服务器读取变量数据。ReadData会阻塞程序,直到一个值可以从网络中读取。ReadDataAsync不会阻塞程序,当使用ReadDataAsync时,必须使用ReadDataCompleted 事件来获取读结果。<这里意思是说: ReadDataAsync是异步调用,它为了不阻塞进程,不会马上得到数据,要想真正获取数据,还应该使用ReadDataCompleted来得到>
 NetworkVariableBufferedSubscriber—这个类从一个客户端的缓冲区中读取数据。服务器会自动发送新的数据到你的程序中,这些数据存储在缓冲区内。当服务器推送数据到NetworkVariableBufferedSubscriber时,数据就被放在了客户端的缓冲区内(the data is put into the client side buffer)。如果你读取数据比服务器推送数据慢,并且你又不想丢失任何数据的话,就可以使用这种模式。使用ReadData函数来获取缓冲区的下一个数据。你可以使用ItemCapacity来怎加或者减小客户端缓冲区的大小,使用ItemCount来获取缓冲区内当前的数据个数。
 NetworkVariableSubscriber—这个类订阅网络变量数据并接受数据更新通知。服务器自动发送新的数据到你的程序,当数据可用时,你可以使用DataUpdated来获取更新通知。
 NetworkVariableWriter—这个类按要求向网络变量写数据。当一个值必须被立即发送的服务器的时候,使用这个类是合适的。WriteValue和Writedata都会导致线程阻塞,直到这个值被写入服务器。WriteValueAsync and WriteDataAsync不会阻塞,使用这个些函数时,要使用WriteCompleted事件来查看异步写是否成功。参考Deciding When To Use NetworkVariableWriter or NetworkVariableBufferedWriter 获取更多信息。
 NetworkVariableBufferedWriter—这个类写网络变量到客户端缓冲区。你可以使用这个类快速写,并且你不想阻塞线程或者丢失数据。值会在客户端的缓存中累积,直到客户端推送这些值到服务器。(原文:This class writes network variable data to a client side buffer. You use this class to write values quickly, and you do not want to block or lose data. Values accumulate in the client side buffer until the client decides to push the values to the server)<这里没看明白,既然是直接写在客户端的缓冲区里,那么客户端直接从自己的缓冲区读数据就可以了,为什么还需要客户端推送数据到服务器呢?>。推送数据以组的方式,这样可以减少网络拥堵并提高性能。你可以使用ItemCapacity来怎加或者减小客户端缓冲区的大小,使用ItemCount来获取缓冲区内当前的数据个数。
浏览网络变量
网络变量浏览对话框
网络变量.NET类库包含了一个NetworkVariableBrowserDialog组件。你可以从VisualStudio的工具箱中访问NetworkVariableBrowserDialog组件,然后你可以使用这个组件来浏览已经创建在本机器子网络上的网络变量。NetworkVariableBrowserDialog有点像.NETFramework中的FolderBrowserDialog文件浏览对话框。使用这个浏览对话框,你可以选择一个特定的变量地址。你可以增加一个不是在子网络上的机器。为了增加一个机器,右击Network Neighborhood,然后输入机器名称。你也可以移除一个机器,右击机器名,然后选择移除。
网络变量浏览API
你可以使用Browser类来浏览可用的网络变量。为了寻找网络变量,创建一个Browser的实例,然后使用GetSubitems或者GetSubitemsAsync方法。Browser类可以访问本地子网络上的所有机器;使用RegisterMachine来增加不在本地子网络上的机器,参考Browser class library documentation for more information。
支持的数据类型
网络变量API使用通用的强类型API,当你创建一个Reader或者Writer的时候,你必须指定一种数据类型,参考NetworkVariableReader, NetworkVariableBufferedSubscriber, NetworkVariableSubscriber, NetworkVariableWriter, or NetworkVariableBufferedWriter for information on what types are supported.
如果从网络上读取的一种数据类型与reader设置的数据类型不匹配,就会抛出一个错误。如果从网络上读取的一种数据类型是未知的或者可能改变了,使用Object作为创建reader的类型。
Complex types may be written using .NET serialization, but are only supported when communicating from one instance of .NET to another instance of .NET. LabVIEW and LabWindows/CVI do not have a way of understanding complex types, such as classes. To write a complex type to a network variable, serialize the object into a byte[] and then write the byte[] to the network variable. To read a complex type from a network variable, read the byte[] and deserialize it back to the Object.
<以下翻译可能有误,慎看>
对于复杂类型,可以使用.NET的序列化方式来写,但仅支持从.NET的一个实例到.NET的另一个实例通信。LabVIEW and LabWindows/CVI没有办法支持复杂类型,比如类。为了写一个复杂类型到网络变量,序列化对象(object)为字节数组(byte[]),然后再把字节数组写到网络变量。为了从网络变量读一个复杂类型,先读字节数组,再反序列化为对象。
Binding
You can use the WindowsForms.NetworkVariableDataSource control to transfer live data between network variables and Windows Forms, and you use WebForms.NetworkVariableDataSource control to transfer live data between network variables and Web Forms.
第二部分 数据交互
with LabVIEW and LabWindows/CVI
Measurement Studio and LabWindows/CVI use network variable to describe software items that exist on a network that can communicate between programs, applications, remote computers, and hardware through the Shared Variable Engine. Variables can represent a value or an I/O point. The Shared Variable Engine uses the NI Publish-Subscribe Protocol (NI-PSP) data transfer protocol to write and allow users to read live data. NI-PSP is a proprietary technology that provides fast and reliable data transmission for large and small applications and is installed as a service on the computer when you install Measurement Studio, LabWindows/CVI, or LabVIEW.
Measurement Studio and LabWindows/CVI使用网络变量来记录软件的数据项,这些数据项存在于网络中,可以在各种程序、应用、远程计算机和各种硬件之间通信,这种通信机制基于共享变量引擎。变量可以代表一个值或者一个I/O点,共享变量使用NI Publish-Subscribe Protocol (NI-PSP)传输协议来写和允许用户读取现场数据。NI-PSP是一种为各种大小应用程序提供快速稳定数据传输的专有技术。当你安装Measurement Studio, LabWindows/CVI, or LabVIEW时,它作为一个Windows的服务器进程一并安装在计算机中。
Benefits of Exchanging Data Between Measurement Studio, LabVIEW, and LabWindows/CVI
With network or shared variables, you can exchange data between Measurement Studio, LabVIEW, and LabWindows/CVI. You use network or shared variables to create cross product applications where certain tasks can be divided into different programming environments. Dividing tasks can save you time when developing applications. For example, you can use LabVIEW to acquire data with minimal coding effort. Then, you can manipulate the data using a Visual C or .NET language program, such as LabWindows/CVI or Measurement Studio. You can present the data in any environment, including data displayed in a Measurement Studio ASP.NET Web page.
在Measurement Studio, LabWindows/CVI, LabVIEW之间进行数据交换的优势
通过网络或共享变量,你可以在Measurement Studio, LabWindows/CVI, or LabVIEW之间交换数据。你可以使用网络或共享变量来创建需要将特定任务划分为不同程序的环境。开发应用程序的时候,划分任务可以可以节约你的开发时间。例如,你可以通过付出最小代码量的代价来使用LabVIEW来采集数据,然后使用Visual C或者.NET语言编程来分析数据,比如LabWindows/CVI or Measurement Studio<划重点>。你可以把数据放在任何地方,包括显示在Measurement Studio ASP.NET Web page。

你可能感兴趣的:(经验分享,程序人生)