LabWindowsCVI入门之第三章计算机外设开发_第1页
LabWindowsCVI入门之第三章计算机外设开发_第2页
LabWindowsCVI入门之第三章计算机外设开发_第3页
LabWindowsCVI入门之第三章计算机外设开发_第4页
LabWindowsCVI入门之第三章计算机外设开发_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——LabWindowsCVI入门之第三章计算机外设开发LabWindows/CVI入门之第三章:计算机外设开发

通过上一章节的学习,大家已经把握了在CVI下开发GUI应用程序的基本步骤和基本方法。CVI的重要应用是工业接口通信、繁杂的数据采集和仪器控制系统的开发,所以对于学习CVI来说仅仅把握GUI程序的开发还远远不够。实际生产生活中,有些设备要求能够满足军用或工业领域恶劣环境或极端天气下对于可靠性的要求,有些设备要求能够满足快速大容量数据的持续传输的要求,有些设备要求能够满足防尘防水防暴防震防撬的要求,有些设备要求满足低成本的要求,纷繁的要求导致了不同的接口标准以及接口协议的诞生。仅仅把握了CVI下GUI的编程只能说是对CVI入门,却没有充分的体会到CVI的精华。在纷繁的接口与特性化的需求下,开发简捷高效、稳定易用、用户体验良好的程序才是我们学习CVI的终极目标。

3.1计算机组件编程

在本节中,我们将会接触到在CVI下进行文件操作、音频播放、OpenGL操作、SQL数据库查询、剪贴板操作、动态数据交换、ActiveX控件操作、调用.Net操作等相关内容。在介绍相关内容时,我们只介绍原理与CVI对应的函数功能,具体使用方法需要大家查询CVI的帮助文档。

3.1.1在CVI中进行文件操作

在程序运行时,往往需要将一些数据(运行的最终结果或中间数据)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机内存。这样就需要对文件进行读写操作,LabWindows/CVI中对文件读写操作的常用函数如下:

(1)OpenFile开启一个文件用以读或者写,函数返回文件句柄;(2)CloseFile关闭指定的文件;

(3)ReadFile从文件中读取指定字节数的内容到字符串缓冲区;(4)WriteFile将字符串缓冲区中指定字节数的内容写到文件中;(5)ArrayToFile将数组内容保存到文件中;(6)FileToArray从文件中读取数据存储到数组中。(7)ReadLine从文件读取字节直到换行。

(8)WriteLine将缓冲区中指定的字节数写入文件中,同时换行。(9)DeleteFile删除文件(10)RenameFile重命名文件(11)CopyFile复制文件

下面给出了一个简单的新建test.txt文件,并且向文本文件中写入字符并读出来的例子。

该函数运行之后,将在工程文件夹下新建一test.txt的文本文件,文件内容如图3-1所示。程序运行结果如图3-2所示。

图3-1文本文件内容

图3-2程序运行结果

与文件读写有关的函数可以在FormattingandI/OLibrary的FileI/O中找到,与文件操作有关的函数可以在UtilityLibrary的FileUtilities中找到,与文件夹有关的函数可以在UtilityLibrary的DirectoryUtilities中找到。另外,ANSIC中对文件的操作的函数如fopen、fread、fputs等函数在CVI中依旧可以使用。

3.1.2网络通信:在CVI中调用TCP库

在测控领域,随着网络计算、远程监控与远程诊断等在仪器仪表领域的应用与发展,网络通信已经成为仪器的基本功能。CVI也提供了Internet库、TCP库、DataSocket库以供用户使用。

Internet库主要提供了FTP协议、Telnet协议以及POP3协议的客户端的函数支持。TCP库主要提供了基于TCP协议的网络数据收发函数。

DataSocket库提供了比TCP更加便利有效的NI推出的DataSocket的操作函数。在本小节的介绍之前,我们假设大家已经知道了TCP/IP协议、FTP协议、POP3协议、HTTP协议、Telnet协议以及他们之间的相互关系,知道了IP地址、子网掩码、DNS、网关是什么。若对以上问题有含混之处,建议马上通过Google等手段理解这些概念。本节主要介绍TCP通信的相关内容。

利用TCP函数库进行网络传输都要涉及服务器端和客户端。TCP服务器可以通过网络向用户应用程序发送数据和从客户应用程序接收数据。TCP客户可以向TCP服务应用程序发送连接请求,并从服务器接收数据和向服务器发送数据。服务器需要注册,注册以后等待客户向它发送连接请求,而客户只能向已经存在的服务器发送连接请求。运行TCP服务器应用程序的计算机一般叫做主机。服务器端的传输控制函数如下:(1)RegisterTCPServer注册TCP服务器(2)ServerTCPRead从客户端读取数据(3)ServerTCPWrite向客户端发送数据(4)UnregisterTCPServer注销TCP服务器(5)DisconnectTCPClient断开与客户端的连接

要是程序成为TCP服务器,必需要运行RegisterTCPServer函数。客户端的传输控制函数如下:

(1)ConnectToTCPServer连接到TCP服务器(2)ClientTCPServer从服务器读取数据(3)ClientTCPWrite向服务器写数据

(4)DisconnectFromTCPServer断开与TCP服务器的连接

另外CVI的TCP库还提供了TCP的回调函数,并提供了连接开始(TCO_CONNECT)、断开连接(TCP_DISCONNECT)以及数据有效(TCP_DATAREADY)3种消息。下面给出了一个简单的建立TCP服务器,并通过客户端连接TCP服务器的例子。在该例如程序中,TCP服务器运行后客户端向服务器发送“Hello,I'mclient.〞的文本信息,服务器向客户端返回“OK〞信息。TCP服务器代码如下:

TCP客户端的代码如下:

TCP服务器与TCP客户端的程序分别保存在两个不同的工程中。运行时,先运行TCP服务器程序,再运行TCP客户端程序,运行效果如所示。

图3-3TCP例如程序运行结果

3.1.3网络通信:在CVI中调用Internet库

Internet库主要提供了FTP协议、Telnet协议以及POP3协议的客户端的函数支持。FTP是应用层的协议,它基于TCP协议,负责进行文件的传输。CVI通过封装隐蔽了一些底层的FTP操作,提供了两个便利的FTP操作函数:

(1)InetFTPAutoSend将本地的文件传输到指定的远程服务器主机上(2)InetFTPAutoRetrieve将指定远程服务器上的文件传输到本机上。

Telnet协议也是应用层的协议,同样基于TCP协议,是Internet远程登陆服务的标准协议和主要方式。CVI提供了对Telnet操作的以下函数:(1)InetTelnetOpen建立Telnet连接

(2)InetTelnetRead从Telnet服务器中读取数据(3)InetTelnetWrite向Telnet服务器写数据(4)InetTelnetClose关闭Telnet连接

(5)InetTelnetReadUntil从Telnet服务器中读取数据,直到遇到指定字符或达到指定字节数或者超时

(6)InetTelnetRunScript在Telnet服务器上执行指定的脚本

POP3也是应用层的协议,基于TCP协议,规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件。POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件。CVI提供了对POP3操作的以下函数:

(1)InetPop3Open连接POP3服务器

(2)InetPop3Close关闭与POP3服务器的连接

(3)InetPop3GetNumMessages获取POP3服务器上的消息数量(4)InetPop3GetMessageSize获取POP3服务器上消息的大小(5)InetPop3GetMessageInfo获取POP3服务器上邮件的具体信息(6)InetPop3DeleteMessage删除POP3服务器上的消息(7)InetPop3GetMessage获取POP3电子邮件消息头与内容

(8)InetPop3ParseMessageHeader解析POP3邮件的消息头

3.1.4网络通信:在CVI中调用DataSocket库

DataSocket技术是NI公司推出的面向测控领域的网络通信技术。DataSocket技术基于Microsoft的COM和ActiveX技术,对TCP/IP协议进行高度封装,面向测量和自动化应用,用于共享和发布实时数据DamSockd能有效地支持本地计算机上不同应用程序对特定数据的同时应用,以及网络和不同计算机的多个应用程序之间的数据交互,实现跨机器、跨语言、跨进程实时数据共享。

在测试测量过程中,用户只需要知道数据源和数据库及需要交换的数据就可以直接进行高层应用程序的开发,实现高速数据传输,而不必关心底层的实现细节,从而简化通信程序的编写过程、提高编程效率。

DataSocket包括DataSocketServerManager(以下简称Manager),DataSocketServer和DataSocketAPI一部分。

Manager是一个独立运行的程序,主要功能有:设置DataSocketServer连接的客户端程序的最大数目和创立数据项的最大数目:创立用户组和用户;设置用户创立和读写数据项的权限;限制身份不明的客户对服务器进行访问和攻击。例如,将Manager中的DefaultReader设置为everyhost,则网中的每台客户计算机都可以读取服务器上的数据。Manager对

DataSocketServer的配置必需在本地计算机上进行,而不能远程配置或通过运行程序来配置。

DataSocketServer是一个必需运行在服务器端的程序,负责监管Manager中所设定的具有各种权限的用户组和客户端程序之间的数据交换。DataSocketServer通过内部数据自描述格式对TCP/IP进行优化和管理,简化Internet通信方式,提供自由的数据传输,可以直接传送虚拟仪器程序所采集到的布尔型、数字型、字符串型、数组型和波形等常用类型的数据。它可以和测控应用程序安装在同一台计算机上,也可以分装在不同的计算机上,以便用防火墙进行隔离来增加整个系统的安全性。DataSocketServer不会占用测控计算机CPU的工作时间,测控应用程序可以运行得更快。使用DataSocket技术进行通信时服务器和客户端得计算机上笔形都进行DataSocketServer。

DataSocketAPI提供独立的接口,用于不同的语言平台内部多种数据类型的通读。在LabVIEW中,DataSocketAPI被制作成ActiveX控件和一系列功能VI(VirtualInstrument),用户可以便利地使用。一般由服务器进行数据采集,根据需要将测量地数据写入DataSocket数据公共区,然后客户端通过网络从数据公共区读取所需地测量数据。DataSocket库函数介绍如下。

(1)DS_Open创立DataSocket对象并连接到数据源

(2)DS_DiscardObjHandle释放DataSocket句柄和它占用的相关资源(3)DS_GetDataType获取DataSocket对象的数据类型(4)DS_GetDataValue获取DataSocket对象相关的数据值(5)DS_SetDataValue设置DataSocket对象相关的数据值

(6)DS_Update在写连接,把DataSocket对象的属性和数据写到DataSocket服务器;在读连接,从DataSocket服务器读取DataSocket对象的属性和数据(7)DS_SelectURL允许终端用户选择连接的DataSocketURL(8)DS_FreeMemory释放DataSocket库函数占用的内存

(9)DS_GetLibraryErrorString返回描述库错误的字符串

DataSocket是一个独立于平台的解决方案,限于篇幅,此处不再给出DataSocket的例如程序,感兴趣的同学可以通过CVI安装目录下的samples中datasocket相关部分自行学习。

3.1.5在CVI中使用音频动画

在大量测控系统中,往往需要参与音频、图像、动画或具有互动功能的3D模型。在本节中,我们将会详细介绍如何向应用程序中添加这些控件。图像

在程序中添加图像相对比较简单,CVI中直接提供了图像控件,通过控件的帮助文档很简单把握在GUI中添加图像以及通过程序更改图像的方法。动画

动画控件是由PictureRing(图像列表)控件转化而来,在编辑界面添加PictureRing之后,通过菜单-File-Open-FunctionTree(*.fp),开启CVI安装目录下toolslib\\custctrl\\animate.fp文件,在CVI窗口的左下角即出现AnimationControl的库。库中提供了如下四个函数:(1)AnimateCtrl_Create直接创立动画控件(此函数会自动在编辑界面添加PictureRing控件,但不会自动给PictureRing添加图片)

(2)AnimateCtrl_ConvertFromPictRing将PictureRing控件转换为动画控件(3)AnimateCtrl_SetAttribute设置动画控件的属性(4)AnimateCtrl_GetAttribute获取动画控件的属性

另外在最新版的CVI中,Picture控件提供了gif的支持,用户可以直接添加gif动画。音频

同样CVI也提供了对音频播放功能的支持。CVI只提供了对wav文件播放的支持,若需要支持其他格式的文件需要调用其他的dll文件完成。函数为:sndPlaySound播放指定文件路径的wav文件OpenGL

CVI默认提供对OpenGL的支持,函数库文件为cviogl.fp,位于CVI安装目录的

toolslib\\custctrl\\cviogl.fp。该函数库文件包含了控件与作图两个子类的函数,可以完成创立、更新、删除OpenGL控件以及获取OpenGL控件属性等功能。

特别需要注意的是,我们不仅可以使用cviogl.fp中提供的函数,OpenGL中通用的glau.lib、glu32.lib、opengl32.lib库中的所有函数都可以使用。也就是说,OpenGL强大的功能也可以在CVI环境下发挥的淋漓尽致。

OpenGL本身就是一个功能强大的库,目前好多3D游戏都是基于OpenGL设计,此处篇幅所限不再展开,感兴趣的读者可以将以前写的OpenGL代码移植到CVI环境下。

3.1.6在CVI中使用SQLToolKit

LabWindows/CVISQLToolkit是一个用来访问数据库的软件工具包。工具包里包含了一个用来完成一般数据库任务的高级函数集。在其基础上,可实现定制任务等高级功能的开发。LabWindows/CVISQL工具包提供若干ODBC数据库驱动器,工具包符合ODBC标准,因此对任何符合ODBC数据库驱动器均可使用。常见的MicrosoftOfficeAccess支持的.accdb、.mdb文件都可以通过ODBC数据库驱动器使用。

SQLToolkit并不随CVI的安装发行包一起安装,用户若想使用CVI开发数据库需要额外从NI的官方网站下载:

/evaluation/cvi/pc/toolkits/NILWCVISQL220.exe利用CVISQLToolkit进行数据库操作寻常由以下五步完成:

连接数据库-激活SQL连接-处理SQL语句-断开SQL连接-断开数据库。

图3-5提供了使用SQLToolkit实现数据库操作的流程图,一般对ODBC数据库进行操作都是根据图3-5的说明依次调用内部的函数实现的。连接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论