DataSocket技术是建立在TCP/IP基础上,但是不需要用户去掌握TCP/IP的底层编程,它主要可以屏蔽掉网络通信的细节,只需要设置URL,就可以用来在Internet上及时分送所需要传输的数据,这就好比是在电源插座上插插头一样,都封装好了,而不要像以前,把电线一根一根拧上去,简化网络编程。为了满足测量自动化的要求,采用独特的编程技术,DataSocket能够实现实时数据的传送。
共享变量出现之前,它是最为常用的网络编程工具,共享变量的PSP协议也是其中的一部分。DataSocket支持多种通用协议和NI的专用协议,很多其它的编程语言能够利用DataScoketActiveX控件来调用DataSocket。
它呢,支持很多种通信协议,和WWW浏览器定位资源的方法差不多,它是采用统一资源标识符URL确定网络资源的唯一地址和遵循的通信协议。它自己会按照URL格式的不同,来自动确定所采用的通信协议。
它支持的协议共分为两类:
Windows标准协议:OPC,FTP,HTTP。
先来看看协议都有哪些,URL长什么样?
OPC:Ole For Process Control,这是在Windows下工业控制的标准通信协议,OPC是DSC的基础。
FTP:主要用来从指定的一个FTP服务器里读取数据,使用DataSocket函数从FTP站点读取文本文件,需要把txt添加到URL末尾。
HTTP:这个就是最常用的啦,提供的是含有数据的网页的链接。
PSP:NI专有通信协议,在网络和本地计算机之间传递数据,共享变量就使用这个协议。
DataSocket传输协议(DSTP):使用这个协议的时候,VI会和DataSocket服务器进行通信,于是乎,就必须给数据提供一个命名标签并且附加到URL,数据连接就是按照这个标签来找到DataSocket服务器上特定的数据项。
FILE协议:用来提供指向含有数据的本地文件或者网络文件的链接。
共享变量支持的PSP协议,DataSocket也是同样支持地,于是可以用DataSocket来操作共享变量。总结一下,总共有四种使用共享变量的方法:
数据项目绑定:在项目中建立新的共享变量,绑定到已经部署的共享变量上。
DataSocket API:利用DataSocket API函数读写共享变量。
前面板控件绑定:将前面板的控件绑定到已经部署的共享变量上。
直接使用共享变量API:将API直接拖动到程序框图。
HTTP和FTP是常规的网络通信,所以使用得不多。
先讲讲DataSocket传递数据的过程。
整个传输过程由3部分组成,数据发布VI,DataSocket服务器,数据订户VI。数据发布VI向服务器写入数据,数据订户VI从服务器中读取数据,有点像卫星中继站的感觉。数据发布VI和数据订户VI传输数据有两种方式,一种是利用图形代码,另一种是利用前面板对象的数据绑定。
DataSocket API函数中有一组函数,写入DataSocket函数是自动将用户的数据转换为在网络上传递的字节流,接受数据的程序是由读取DataSocket将字节流还原到初始的形式。DataSocket使用的端口号是3015。
先来讲讲DataSocket,它很小巧,独立运行,发布数据的程序需要通过它来传输数据,输入数据的程序需要它来接受数据。一般你很难找到它,其实它在安装路径下面的DataSocket文件夹下面。DataSocket 服务器面板可以显示主机的信息,主机任务数量,已经发送和接受的数据包数量。在DataSocket标题栏下的关闭命令只起隐藏面板的作用,如果需要关闭,则应该利用Shutdown DataSocket Server命令。
另外还有一个是DataSocketServer Manager的程序,里面最重要的是对参数进行设置。主要参数有:
Sever Settings:包括允许同时建立连接的最大数目;允许动态创建的数据项最大数目;允许动态数据项使用的最大内存缓冲区字节数;允许动态数据项使用的最大内存缓冲区数据包数目。
Permission Groups:许可组设置,将用户按照他们和DataSocket服务器之间的关系以及他们所需要的许可进行分类。向每个组添加用户的时候,输入用户计算机的IP地址或者计算机名都是可以地。
Predefined Data Items:预定义数据项设置,这个是用来定义DataSocket服务器启动后自动创建的数据项,当有DataSocket客户连接到DataSocket服务器的时候,预定义数据项的初始值就会付费它。这样就可以为每个预定义数据项设置数据类型、初始值、访问许可、允许使用的缓冲区等。
在利用DataSocket传输数据时,还有一个很关键的角色,即URL。它的协议方式有很多,前面已经提到了,但我们的重点就是利用DSTP来进行数据传输。
利用DataSocket传输数据的方法有两种:在前面板控件之间进行数据的传输,另一种是在程序中传输数据。
首先来看看怎么使用DataSocket链接前面板对象。
DataSocket的前面板对象链接是一种不需要任何编程就可以实现网络数据传输的方法。通过DataSocket就能够将两个程序的前面板对象链接在一起,一个对象发送数据,另外一个对象接收数据,就能给实现对程序的远程控制、数据的远程采集等功能。具体的操作方法是:在前面板控件上右击选择属性的命令,在其中选择“数据绑定”的选项卡,里面有一些参数需要设置:
数据绑定选择:总共有两种绑定方式可以选择,一种是共享变量引擎(NI-PSP),另外一种则是DataSocket。
访问类型:有“只写”,“只读”,“读/写”的选择。发布数据,选择“只写”;接受数据,选择“只读”。
路径:指定URL。这个都是填写DataSocket 服务器的URL,这个其实目的就是选择一个数据项。
下面来看看在程序中是怎么用DataSocket来传输数据的。
先来看一个小程序:
在DataSocketServer Manager里有3个预定义的数据项,分别是SampleNum、SampleString和SampleBool。这个程序就是使用DataSocket将预定义的数据项的初始值读出来。这里有一个“读取DataSocket”函数,主要参数有连接输入,类型,数据等参数。“连接输入”参数可以输入字符型的URL,“类型”参数要求输入的数据和需要读的数据项是一致地。一定要注意的是,
下面看看如何向DataSocket写数据。先来熟悉一下“写入DataSocket”函数的参数,URL是用来向指定的位置写入数据,“数据”参数是用来传输数据,这个参数具有多态的特点,可以输入大部分LabVIEW所支持的数据类型。具体的小程序如下:
从DataSocket读取数据。“读取DataSocket”函数在读取数据时等待DataSocket服务器的数据刷新,如果有没被读过的数据,就会立马返回数据,否则的话,就等待超时,如果到了超时时间还没有刷新,就会返回当前值,并在超时参数返回一个超时显示“真”。
这个程序也很有意思,利用一对移位寄存器和“时间计数器”来测试整个循环的时间,如果把读数据和写数据的程序同时运行,可以发现它们之间能够实现数据的收发。
DataSocket进行数据传输的时候,一定要注意,将DataSocket的服务器给打开。