VC++单片机虚拟仪器测试系统 第8页
1.2.3软件设计
与硬件结构相对应,软件结构可分为网络测控系统控制主模块,是系统控制的中枢,连接和控制各子模块;虚拟信号源、虚拟万用表和虚拟示波器等模块,是控制相应台式仪器,使其完全能处于远程虚拟控制状态,给测控对象提供激励信号,并监视受控对象输出特性变化;虚拟VXI仪器和信号调理模块是控制SCXI和VXI硬件模块仪器进行模拟量数据采集与开关量对象控制,包括数据处理;图象采集模块,包括采集现场景物视频图象和有形对象的图象采集.与图象处理;网络通信模块承担不同总线模块与主模块之间的数据传输与通信,也是实现本测控系统与远程用户之间的控制与数据传送。每个虚拟仪器模块内部都封装了对应仪器状态控制命令集、数据采集命令集、数据处理模型以及通信协议等处理子模块。
下面的第三章至第五章介绍的就是函数信号发生器、示波器以及万用表模块的设计和具体的编程。下面让我们先来了解一下VC++6.0开发工具和Agilent VISA库。
2 开发工具和Agilent VISA库介绍
Visual C++6.0是一套功能强大面向对象的且具有集成编辑器及编译器的编程语言开发平台。今天我们所使用的许多应用软件,大部分是利用C语言来进行编写的。Visual C++6.0没有很复杂的开发界面,给用户的开发以很大的灵活性。
2.1 Visual C++6.0的特点
在众多的程序语言中,Visual C++6.0是具有编辑和编译的集成开发环境。通过 Visual C++6.0的编辑功能,可以方便的设计程序。它的编辑功能可以随时让我们了解到程序的结构、流程以及对象的成员,而完成程序设计之后,也不必经过复杂的编译程序,而且给出的错误警告可以很方便的进行定位操作,这给程序设计人员以方便。
2.2 IDE的集成开发环境界面
IDE就是Integrated Development Enviroment的缩写,是将程序代码的编写(editor)、编译(Compiler)、执行(execution)以及纠错(debug)等功能汇集一身的单一整合性的界面,提供程序开发过程所需要的相关或扩展服务,让用户只需要通过此环境便可以轻松完成程序工程。
2.3 Agilent VISA纵览
VISA是Agilent IO库的一个部分。Agilent IO库由两个部分组成:VISA和SICL。Agilent VISA是根据VXIpp系统联盟的规定设计的,它允许由不同的厂商开发的软件能在同一个系统中运行。
如果你想在你的应用程序中使用VXIpp仪器驱动或者是想是自己开发的IO应用软件或仪器驱动能符合VXIpp的标准,就需要使用VISA。如果你使用新的仪器或开发IO应用程序以及仪器驱动的话,也应该使用VISA。
Agilent VISA 是一个IO库,可以用来开发符合VXIpp标准的IO应用软件和仪器的驱动。使用VISA开发的应用软件和仪器驱动可以在使用VISA IO库的VXIpp主机上运行。因此,不同厂商开发的应用软件可以在同一个系统中运行。
32位版本的VISA能在Windows 95 98 Me以及NT和2000中使用。C,C++和Visual Basic在这些系统中都被支持。
对与Windows,VISA支持GPIB、VXI、GPIB-VXI、Serial(RS-232)以及局域网接口。在Windows NT中,对VXI接口支持的VISA仅能运行在Agilent 嵌入式的VXI控制器产品中。一台网络计算机能够通过网络访问配置VISA地址譬如GPIB接口地址上的仪器。
2.4 VISA编程
在VISA的编程中需要了解VISA的一些机制: VISA的资源和属性、会话使用、
发送I/O命令、使用事件与句柄、捕抓错误等等。
VISA资源:在VISA中,任何VISA可以提供通讯的器件(如电压表)都可以定义为一种资源。对于一个完善的VISA系统,VISA定义完全符合VXI即插即用联盟的规范的六种资源类可以被执行。
VISA属性: 属性是和各种资源或会话相关联的。你可以使用属性来决定资源或会话的状态或设置资源或会话为指定的状态。
譬如,你可以通过viGetAttribute函数来读取指定会话、事件、查找列表的属性的状态。有只读和读写的属性。通过使用viSetAttribute函数来修改指定的会话、事件或查找列表的读写属性。
传递给viGetAttribute函数的指针必须指向那个属性的准确类型:ViUInt16,ViInt32,等等。譬如,当读取一个返回ViUInt16值的属性的状态时,你必须声明那个属性的变量和使用它来存储返回的数值。如果ViString被返回,你必须分配一个数组和传递那个数组的指针给那个返回的数值。
对于C和C++程序,你必须在每一个文件的开始处添加包含VISA调用函数visa.h头文件:#include “visa.h”这个头文件包含了VISA函数的原型的声明和所有VISA的常量和错误代码的定义。Visa.h头文件也包含了visatype.h头文件。
该visatype.h头文件对VISA的所有类型进行了定义。VISA的各种类型贯穿了整个VISA,对函数中用到的数据进行类型定义。
而关于会话,会话其实是一个通讯通道。会话必须在默认的资源管理器中被首先打开,接着是你将会使用的每一种资源。首先,你必须通过默认资源管理器的viOpenDefaultRM函数来建立一个会话。这个函数的第一次调用用来初始化默认的资源管理器并返回该资源管理器会话的会话。你仅需要打开默认资源管理器一次就可以了。然而,后来的对viOpenDefaultRM函数的调用则返回同样的默认资源管理器资源的唯一的会话。
接下来,你利用viOpen函数对指定的资源打开一个会话。而在退出程序的时候需要多打开的会话进行关闭操作,在关闭每一个会话时,必须调用viClose函数以释放掉分配给该会话的数据资源。你如果关闭默认的资源管理器会话,则所有被该会话打开的会话将会被关闭。
当你为一个器件建立一个通讯会话时,通过使用VISA的I/O程序来启动与该器件的通讯。VISA提供了格式化和非格式化的程序。
格式化I/O将对格式化字符下的混合数据类型进行转换。数据被存在数据缓冲器中,因此是接口的通讯得到最大的优化。
非格式化I/O口向一个器件发送或接收原始数据。通过非格式化I/O,数据并不进行格式化或相应的转换。因此,如果要求格式化数据,它必须通过用户自己来定义。
事件是那些需要你的应用程序关注的特指事件。事件类型包括服务请求,中断和
硬件触发。事件不会被传递,除非相应的事件被启用。
注意:VISA不能回调VB函数。因此,你只能使用函数ViEnableEvent来使用队列机制。在VB中不能安装VISA事件句柄。
当事件发生时,有两种方式来接收通知消息:函数回调法和队列法
当一个事件需要立即相应时,可以使用回调函数法。使用回调函数法来接收事
发生时的通知消息。当使能事件发生时,安装的事件句柄会被调用。可以使用函数viInstallHandler安装事件句柄,而使用函数viEnableEvent来启动一个或多个事件。VISA允许应用程序在同一个会话中对一种事件类型安装多个句柄。多个句柄可以通过多次调用函数viInstallHandler来安装。每次调用添加到前面的句柄列表中。
如果一个事件类型被安装了多个句柄,当指定的事件发生时,每一个句柄会被调用。VISA指出,句柄的调用的顺序是后进先出的顺序。当需要安装句柄时,使用下面的函数:
viInstallHandler(vi, eventType, handler, userHandle);
当你的应用程序捕需要及时相应时,队列法通常被使用。为了使用队列法来接收事件发生时的通知消息,步骤如下:
使用函数viEnableEvent来使能一个或多个事件。
当准备查询时,使用函数viWaitOnEvent来检查队列事件。
如果指定的事件发生,事件信息将会被取得,程序立即返回。如果指定的事件没有发生,应用程序挂起直至指定的事件发生或指定的超时时间到来。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>