基于LabVIEW的Socket程序设计.docx
《基于LabVIEW的Socket程序设计.docx》由会员分享,可在线阅读,更多相关《基于LabVIEW的Socket程序设计.docx(12页珍藏版)》请在冰豆网上搜索。
![基于LabVIEW的Socket程序设计.docx](https://file1.bdocx.com/fileroot1/2023-2/9/796da96d-c035-421a-a9d2-40bfa14283a7/796da96d-c035-421a-a9d2-40bfa14283a71.gif)
基于LabVIEW的Socket程序设计
目录
0.前言1
1.总体方案设计1
2.LabVIEW下的程序设计2
2.1软件层次设计5
2.2程序框图的设计6
3.调试及结果分析7
3.1运行检验7
3.2调试分析8
4.结论及进一步设想9
参考文献9
课设体会10
附录基于LabVIEW的Socket程序设计框图11
基于LabVIEW的Socket程序设计
王琳沈阳航空航天大学自动化学院
摘要:
本次课程设计主要是以LabVIEW为平台,用datasocket做服务器,设计两个客户端,以正弦波为信号载体,将正弦信号数据发送到指定服务器地址中,再从指定服务器地址中读取数据并显示出来,以此来实现数据传输。
关键字:
DataSocket;数据传输
0.前言
虚拟仪器技术是基于计算机的仪器与测量技术。
而DataSocket技术是一种面向测控领域的通过网络实时进行数据交换的编程技术,它包括了DSServerManager、DSServer和DS函数库等工具,以及数据传输协议DSTP、URL和文件格式等技术规范,可大大简化网络中计算机之间数据交换的编程工作。
DSServerManager是一个独立运行的程序,它的主要功能是设置DSServer可连接的客户程序的数目和可创建的数据项的数目,设置用户和用户组,以及设置用户访问和管理数据项的权限。
没有权限的用户不能在DSServer上创建或读写数据项,这样可以提高网络通信的安全性。
DSServer也是一个独立运行的程序,它能为用户解决大部分网络通信方面的问题,负责和用户程序之间的数据交换,不需要用户编写有关网络通信的底层程序。
DSServer可以和测控应用程序安装在同一台计算机上,也可以分别安装在不同的计算机上。
后一种方法可以增加整个系统的安全性,因为两台计算机之间可用防火墙加以隔离,而且DSServer程序不会占用测控应用程序所在的计算机CPU的时间,从而使测控应用程序可以运行的更快。
1.总体方案设计
设计两个客户端,客户端1和客户端2,以正弦波为信号载体,客户端1将正弦信号数据发送给DSServer,客户机2从DSServer读取数据显示并保存,另设一个VI读取保存的历史数据。
整体框图如图1所示:
图1设计框图
2.LabVIEW下的程序设计
LabVIEW单独提供了DataSocket函数工用户调用,实现在Internet中的数据传输功能。
DataSocket源于TCP/IP协议,并对其进行高度封装,面向测量和自动化应用,用于共享和发布实时数据,是一种易用的高性能数据交换编程接口。
它能有效地支持本地计算机上不同应用程序对特定数据的同时应用,以及网络上不同计算机的多个应用程序之间的数据交互,实现跨语言、跨进程是实时数据共享。
而用户不必关心程序底层的细节,从而简化通信程序的编写过程,提高编程效率。
LabVIEW中DataSocket模板共有4个函数来进行网络数据传输,其在functions模版中的位置如图2所示
图2DataSocket模块在functions模板中的位置
1.DataSocketOpen
图标和端口:
功能:
打开一个指定资源的DataSocket连接。
主要端口说明:
URL:
资源地址。
Mode:
连接模式0-read,1-write,2-read/write,3-BufferedRead,4-BufferedRead/write,为了防止数据丢失,最好设置为缓冲模式。
mstimeout(60000):
等待LabVIEW和服务器建立一个DataSocket连接的最长时间,单位为微秒,默认值为10000,超过此时间仍未建立则停止建立,errorout返回一个错误。
Connectionid:
输出此DataSocket连接的唯一标识,可以作为DataSocketWrite和DataSocketReader的URL端口输入。
2.DataSocketClose
图标和端口:
功能:
关闭一个指定的DataSocket连接。
主要端口说明:
Connectionid:
需要关闭的DataSocket连接的标识。
mstimeout(0):
等待前面未完成的操作完成的时间,如缓冲区的数据传输。
默认值为0,即立即关闭,可以设置为-1,则直到所有操作均完成才关闭连接。
Timeout:
返回一个布尔量,为FALSE则表示连接前在前面设置的mstimeout(0)时间内无错误地完成了所有操作;如果mstimeout(0)设置为0,则此处返回为FALSE。
Amplitude:
信号幅度为峰值。
3.DataSocketReader
图标和端口:
功能:
从DataSocket服务器读取数据。
主要端口说明:
Connectionin:
指定数据源,可以是前面板DataSocketOpen输出的connectionid。
如果当前连接的客户端和服务器在同一台电脑上,也可以直接是一个URL。
Type(Variant):
指明读取数据的类型,默认值为Variant,此时可以读取任何类型的数据。
Mstimeout(10000):
此连接数据项的缓冲区的更新时间。
Data:
读取过来的数据。
DataSocket:
缓冲区采取的是先进先出形式,这样可以保证读取到的数据和写入的数据顺序保持一致。
4.DataSocketWrite
图标和端口:
功能:
向DataSocket服务器写数据。
主要端口说明:
Connectionin:
指定数据源,可以是前面板DataSocketOpen输出的connectionid。
如果当前连接的客户端和服务器在同一台电脑上,也可以直接是一个URL。
Mstimeout(10000):
此连接数据项的缓冲区的更新时间。
Data:
读取过来的数据。
DataSocket:
缓冲区采取的是先进先出形式,这样可以保证读取到的数据和写入的数据顺序保持一致。
5.DataSocketSelect
图标和端口:
功能:
弹出一个对话框,供程序运行人员选择数据项,模块将此数据项自动转成符合DataSocket标准的URL。
主要端口说明:
StartURL(empt):
URLd前面部分,若只知道服务器名为“WWW-6891703E3CE”,则此处可输入dstp:
//WWW-6891703E3CE,这样弹出的对话框自动显示WWW-6891703E3CE服务器的可连接项。
默认设置为空,则弹出的对话框从本客户端开始,由程序运行人员选择需要连接的数据项。
Title(SelectURL):
弹出对话框的标题,一般设置为描述需要连接的数据项,让程序运行人员有个选择数据项的依据。
URL:
代表从对话框所选择的数据项的URL。
URLSelected:
布尔量,表示从对话框选择的是否是一个有效的可传输数据项。
2.1软件层次设计
在用DataSocketServer进行数据交换时,要在服务器程序中指定网络通信端口,客户机也要指定相同的端口,这样才能与服务器之间进行正确的数据传输。
即URL中的地址要相同。
如图3所示。
设置的服务器名称为“WWW-6891703E3CE”。
所以写入的URL是dstp:
//WWW-6891703E3CE
图3DataSocketServer服务器
2.2程序框图的设计
软件系统就是客户端数据的发送和接收的功能的实现。
该系统的软件结构可分为客户端发送数据给服务器和客户端接收服务器的数据两个模块。
在以上两模块中,主要依靠软件实现它的功能。
客户端给服务器传输数据的程序如图4所示:
图4发送数据回路的设计
通过一个sine函数产生正弦信号,利用循环产生100个正弦波信号符,将正弦信号数据通过DataSocketWrite传送给服务器,另一客户端再从服务器读取数据,进行显示并保存。
客户端接收服务器发出的数据的程序如图5所示:
图5接收数据回路的设计
客户端从服务器读取数据,定义数据类型为字符串数组,通过DataSocketRead函数把字符串数组转化成数据,进行显示。
我用一个WriteLabVIEWMeasurementFileExpressVI来保存数据以方便读取和查看。
显示保存历史数据程序框图如图6所示:
图6读取历史数据程序框图
3.调试及结果分析
3.1运行检验
调试分两个部分实现,第一部分是客户端向服务器传送数据,传送数据前面板框图如图7所示:
图7向服务器传送数据前面板程序框图
客户端从服务器传送正弦信号数据,通过WaveformGraph显示。
客户端从服务器读取数据前面板框图如图8所示:
图8向服务器读取数据前面板程序框图
这两个客户端的资源地址即connectionin必须是一样的。
否则程序无法运行。
读取历史数据前,先要打开程序后面板,双击ReadLabVIEWMeasurementFileExpressVI,在FileName中选择要读取的历史数据文件,点OK后,即可运行程序。
程序运行框图如图9所示:
图9显示保存历史数据前面板程序框图
3.2调试分析
在实验调试过程中遇到了一些问题,遇到的主要是在定义向服务器读取数据类型时,读出来是阶梯型类似方波的图形,这让我很费解,后来经过老师的指导,发现问题出在定义数据项类型上,我定义的是整数数组,所以所有经过DataSocketReader的数据全被四舍五入,这样就不能正确显示出正弦波,后来将Type(读取数据类型)修改成字符串数组后,就能够正常显示波形了。
4.结论及进一步设想
本设计实现了DataSocket的数据传输,即客户端向服务器发送数据,同时另一客户端读取服务器所接收的数据,继而实现了客户端和服务器的双向通信。
相当于一个小型的聊天工具。
与此同时,本设计也存在着很大的设计空间,因为设计过于简单,使用中很多问题都没有考虑进去,设计程序框图也有很多缺陷。
如果时间充裕,还可以通过网络进行数据传输,可以使设计更加完美。
参考文献
[1]杨乐平.虚拟仪器设计概论.北京:
电子工业出版社,2003.
[2]秦文虎.虚拟现实基础及可视化设计.北京:
化学工业出版社,2009.
[3]张毅.虚拟仪器技术分析与应用.北京:
清华大学出版社,2005.
[4]侯国屏.LabVIEW7.1编程与虚拟仪器设计.北京:
机械工业出版社,2004
课设体会
两周的虚拟仪器技术课程设计就这样忙碌而充实地过去了,在这两周的时间里,在老师的耐心指导和自己的努力下,我基本上完成了本次课程设计。
此次课程设计的题目并不十分复杂,但在设计过程中还是遇到许多的困难,有些是因为自己知识欠缺造成的,有些则是因为自己粗心大意造成的。
总之到最后我都克服了。
我感觉这次课设更多的是提高了自己的自学和查资料的能力。
在设计的过程中,则需要自己有足够的耐心,尤其到后期查错阶段。
不像以前老师告诉你流程,然后我们生搬硬套就可以了,这次课设几乎都是我自己参考各种资料设计出来的,老师只是给了一些意见,这大大提高了学习的主动性和设计的灵活性,可以随自己想的设计,不用限于固有的形式,这是我最喜欢的地方。
总体来说,在这次课程设计中受益匪浅。
在摸索的过程中,培养了我的设计思维,也提高了我的实际操作能力。
在设计过程跟同学间的交流思考讨论也扩展了视野和思路。
这样让我主动去学习知识,了解自己的知识盲点,而不是被动的接受老师教授的知识,这样对知识的记忆更加深刻,更加牢固。
最后再次感谢我的指导老师对我的悉心指导。
[2011年3月20日完成]
附录基于LabVIEW的Socket程序设计框图
客户端1:
向服务器传送数据
客户端2:
向服务器读取数据
显示保存历史数据