为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

VISA汇总编程

2011-05-15 50页 doc 293KB 142阅读

用户头像

is_302298

暂无简介

举报
VISA汇总编程TOC \o "1-3" \h \z \u 虚拟仪器系统I/O接口软件——VISA 1 VISA操作表 4 读资源 7 写资源 38 VISA资源定义 44 VISA应用实例 73 续 83 虚拟仪器系统I/O接口软件——VISA VISA是虚拟仪器系统的I/O接口软件,为虚拟仪器系统的统一性和扩展性奠定了基础。本章介绍了VISA的概念和特点,论述了VISA的结构模型,重点分析了VISA资源与资源类的定义与描述,并结合实例,详细讨论了各资源的属性、事件与操作规范与软件实现。在本章结束,还讨论了VISA的实际设计思路与方法。 3...
VISA汇总编程
TOC \o "1-3" \h \z \u 虚拟仪器系统I/O接口软件——VISA 1 VISA操作表 4 读资源 7 写资源 38 VISA资源定义 44 VISA应用实例 73 续 83 虚拟仪器系统I/O接口软件——VISA VISA是虚拟仪器系统的I/O接口软件,为虚拟仪器系统的统一性和扩展性奠定了基础。本章介绍了VISA的概念和特点,论述了VISA的结构模型,重点了VISA资源与资源类的定义与描述,并结合实例,详细讨论了各资源的属性、事件与操作规范与软件实现。在本章结束,还讨论了VISA的实际思路与。 3.1 VISA的概念与特点 3.1.1 VISA的由来 随着虚拟仪器系统的出现与发展,I/O接口软件作为虚拟仪器系统软件结构中承上启下的一层,其模型化与标准化越来越重要。I/O接口软件驻留于虚拟仪器系统的系统管理器——计算机系统中,是实现计算机系统与仪器之间命令与数据传输的桥梁和纽带。许多仪器生产厂家在推出硬件接口电路的同时,也纷纷推出了不同结构的I/O接口软件,有的只针对某类仪器(如NI公司用于控制GPIB仪器的NI-488及用于控制VXI仪器的NI-VXI),有的在向统一化的方向靠拢(如HP公司的SICL—标准仪器控制语言),这些都是在仪器生产厂家内部通用的、优秀的I/O接口软件。 一般的I/O接口软件的结构都采用了自顶向下的设计模型:首先列出该I/O接口软件需要控制的所有仪器类型,然后列出了各类仪器的所有控制功能,最后将各类仪器控制功能中相同的操作功能尽可能地以统一的形式进行合并,并将统一的功能称为核心功能函数(如将GPIB仪器的读/写与RS232串行仪器的读/写统一为一个核心功能函数)。所有统一形式的核心函数与其它无法合并的、与仪器类型相关的操作功能函数一起构成了自顶向下的I/O接口软件,实现不同类型的仪器的互操作性与兼容性。然而,这种构成方法只适用于消息基器件的互操作性(如消息读、消息写、软件触发、状态获取、异步事件处理等功能),对于如中断处理、内存映射、接口配置、硬件触发等属于器件特有的操作,根本无法得到统一的核心函数,消息基器件与寄存器基器件无法在自顶向下的I/O接口软件中得到统一。核心函数集在整个I/O接口软件中只有一个小子集,特定操作函数集是一个大子集。自顶向下结构的I/O接口软件实质上是建立在仪器类型层的叠加,并没有真正实现接口软件的统一性。同时应该说,自顶向下的设计方法为真正统一的I/O接口软件的设计与实现提供了经验借鉴与尝试。VPP联盟在考察了多个I/O接口软件之后,提出了一种自底向上的I/O接口软件模型,也就是VISA。 3.1.2 VISA模型结构 VISA是虚拟仪器软件结构(Virtual Instrument Software Architecture)的缩写,实质是一个I/O接口软件及其规范的总称。一般情况下,将这个I/O接口软件称为VISA。 如上所说,VISA的构成是采用了自底向上的结构。与自顶向下的方法不同的是,VISA的实现首先定义了管理所有资源的资源(在这儿,资源的概念相当于面向对象程序设计中的对象,具体的定义与描述见下节),这个资源称为VISA资源管理器,它用于管理、控制与分配VISA资源的操作功能。各种操作功能主要包括: 1、 资源寻址; 2、 资源创建与删除; 3、 资源属性的读取与修改; 4、 操作激活; 5、 事件; 6、 并行与存取控制; 7、 缺省值设置。 第二步是在资源管理器基础上,列出了各种仪器各自的操作功能,并实现操作功能的合并。在这个基础上实现的资源实质可以包括不同格式的操作,如读资源包括了消息基器件的读,也包括了寄存器基器件的读;既可以包括同步读操作,又可以包括异步读操作。每一个资源内部,实质是各种操作的集合。这种资源在VISA中即为仪器控制资源,包含各种仪器操作的资源称为通用资源,而将无法合并的功能,称为特定仪器资源。 第三步,需要定义与创建一个用API实现的资源,为用户提供单一的控制所有VISA仪器控制资源的方法,在VISA中称为仪器控制资源组织器。 与自顶向下的构成方式相比,VISA的构成模型是从仪器操作本身开始的,它实现的统一是深入到操作功能中去而不是停留于仪器类型之上。在VISA的结构中,仪器类型的区别体现到统一格式的资源中的操作的选取,对于VISA使用者来说,形式上与用法上是单一的。在理论层次上,自顶向下的方法属于归纳范畴,而自底向上的方法则属于演绎范畴。因此,自顶向下是对过去所有仪器类型的总结,而不可能提供扩展接口,而自底向上的结构是从共性到个性的推广,它的兼容性不仅仅是过去、现在,还可以包括将来。正由于这种自底向上的设计方法,VISA为虚拟仪器系统软件结构提供了一个共同的、统一的基础,来自于不同供应厂家的不同的仪器软件,可以运行于同一平台之上了。 VISA的结构模型如图3.1所示。 图3.1 VISA结构模型概图 VISA结构模型自下往上,构成一个金字塔结构,最底层为资源管理器,其上为I/O级资源、仪器级资源与用户自定义资源集。其中,用户自定义资源集的定义,在VISA规范中并没有规定,它是VISA的可变层,实现了VISA的可扩展性与灵活性,而在金字塔顶的用户层应用,是用户利用VISA资源实现的应用程序,其本身并不属于VISA资源。 3.1.3 VISA的特点 基于自底向上结构模型的VISA创造了一个统一形式的I/O控制函数集,它是所有现存的I/O接口软件的功能超集,在形式上与其它I/O接口软件十分相似。一方面,对于初学者或是简单任务的设计者来说,VISA提供了简单易用的控制函数集,在应用形式上相当简单。另一方面,对于复杂系统的组建者来说,VISA提供了非常强大的仪器控制功能与资源管理功能,能提供仪器间的互操作性与兼容性。它是易用性、可扩展性、互操作性、兼容性的完全统一体。 与其它现存的I/O接口软件相比,VISA具有以下几个特点: 1、 VISA的I/O控制功能适用于各种仪器类型,VISA包含了VXI仪器、GPIB仪器、RS232串行接口仪器等各类仪器的控制操作,也包含了消息基器件、寄存器基器件、存贮器件等仪器的操作,其形式上是统一的。 2、 VISA的I/O控制功能适用于各种仪器硬件接口类型,以VXI仪器系统为例,无论采用嵌入式计算机结构、GPIB接口外挂式结构、MXI接口外挂式结构,还是采用IEEE1394接口外挂式结构,对于VXI仪器的操作函数是一样的。同样,无论VXI仪器在系统中的逻辑地址是多少,仪器操作函数也是一样的。 3、 VISA的I/O控制功能适用于单处理器系统结构,也适用于多处理器结构或分布式网络结构。 4、 VISA的I/O控制功能适用于多种网络机制,无论虚拟仪器系统网络构成为VXI多机箱扩展网络还是以太网,仪器操作是一致的。 5、 VISA的I/O软件库的源代码是唯一的,其与操作系统及编程语言无关,只是提供了不同形式的API文件作为系统的引出。 由于VISA结构考虑到了多种仪器类型与网络机制的兼容性,因此以VISA I/O接口软件为基础的虚拟仪器系统,不仅可以与过去已有的仪器系统(如GPIB仪器系统及串行接口仪器系统)结合,也完全可以将仪器系统从过去的集中式结构过渡到分布式结构。VISA的兼容性与互操作性,保证了新一代仪器完全可以加入到虚拟仪器系统中去,同时也保证了仪器系统的投资者不会因为新仪器的出现而将过去的系统抛弃,从而可以不使投资浪费。系统集成时,不必再选择某家特殊的软件和硬件产品,可以根据自己的需要,在所有的VPP产品中作出最佳选择,系统的兼容性与强健性大大增强了,系统的标准化与统一性也找到了最基础的保障。 VISA操作表 操作表: 1、VISA资源模板: viClose(vi):关闭特定的对话通道。 viGetAttribute(vi,attribute,attrState):获取资源属性状态值。 viSetAttribute(vi,attribute,attrState):设置资源属性状态值。 viStatusDesc(vi,status,desc):获取返回状态描述字符串。 viTerminate(vi,degree,jobId):请求VISA资源终止一个或所有对话通道的正常运行。 viLock(vi,lockType,timeout,requestId,accessKey):设置资源存取模式。 viUnlock(vi):取消资源存取模式。 viEnableEvent(vi,eventType,mechanism,context):允许特定事件通知。 viDisableEvent(vi,eventType,mechanism):不允许特定事件通知。 viDiscardEvents(vi,eventType,mechanism):刷新一个对话通道上事件发生。 viWaitOnEvent(vi,ineventTypeList,timeout,outEventType,outContext):等待特定事件的发生。 viInstallHandler(vi,eventType,handler,userHandle):安装回调事件句柄 。 viUnInstallHandler(vi,eventType,handler,userHandle):卸载回调事件句柄。 2、VISA资源管理器: viOpenDefaultRM(sesn):打开缺省资源管理器资源对话通道。 viOpen(sesn,rsrcname,accessMode,timeout,vi):打开特定资源的对话通道。 viFindRsrc(sesn,expr,findList,retcnt,instrDesc):查询VISA系统进行资源定位。 viFindNext(findList,instrDesc):返回前一个查询操作查得的资源。 3、仪器控制管理: viRead(vi,buf,count,retCount):从器件同步读取数据。 viReadAsync(vi,buf,count,jobId):从器件异步读取数据。 viWrite(vi,buf,count,retCount):将数据同步写入到器件中。 viWriteAsync(vi,buf,count,jobId):将数据异步写入到器件中。 viAssertTrigger(vi,protocol):用特定协议确认硬件或软件触发。 viReadSTB(vi,status):读取服务请求状态字节。 viClear(vi):清除器件。 viSetBuf(vi,mask,size):设置格式化I/O缓冲区大小。 viFlush(vi,mask):手动刷新格式化I/O缓冲区。 viPrintf(vi,writeFmt,arg1,arg2…):按设定格式将数据传送到器件中。 viVPrintf(vi,writeFmt,params):按设定格式将数据传送到器件中。 viScanf(vi,readFmt,arg1,arg2…):按设定格式从器件中读取数据。 viVScanf(vi,readFmt,params):按设定格式从器件中读取数据。 viQuery(vi,writeFmt,readFmt,arg1,arg2…):按设定格式对器件进行数据读写。 viVQuery(vi,writeFmt,readFmt,params):按设定格式对器件进行数据读写。 viIn8(vi,space,offset,value):从接口总线读取8位(字节)单位。 viIn16(vi,space,offset,value):从接口总线读取16位(字)单位数据。 viIn32(vi,space,offset,value):从接口总线读取32位(双字)单位数据。 viOut8(vi,space,offset,value):向接口总线写入8位(字节)单位数据。 viOut16(vi,space,offset,value):向接口总线写入16位(字)单位数据。 viOut32(vi,space,offset,value):向接口总线写入32位(双字)单位数据。 viMoveIn8(vi,space,offset,length,buf8):从器件存储器向当地存储器移动8位(字节)单位数据。 viMoveIn16(vi,space,offset,length,buf8):从器件存储器向当地存储器移动16位(字)单位数据。 viMoveIn32(vi,space,offset,length,buf8):从器件存储器向当地存储器移动32位(双字)单位数据。 viMoveOut8(vi,space,offset,length,buf8):从当地存储器向器件存储器移动8位(字节)单位数据。 viMoveOut16(vi,space,offset,length,buf8):从当地存储器向器件存储器移动16位(字)单位数据。 viMoveOut32(vi,space,offset,length,buf8):从当地存储器向器件存储器移动32位(双字)单位数据。 viMapAddress(vi,mapSpace,mapBase,mapSize,access,suggested,address):映射内存空间。 viUnMapAddress(vi):取消内存映射。 viPeek8(vi,addr,val8):从特定地址读8位数据。 viPeek16(vi,addr,val16):从特定地址读16位数据。 viPeek32(vi,addr,val32):从特定地址读32位数据。 viPoke8(vi,addr,val8):向特定地址写8位数据。 viPoke16(vi,addr,val16):向特定地址写16位数据。 viPoke32(vi,addr,val32):向特定地址写32位数据。 viMemAlloc(vi,size,offset):从器件存储器分配内存。 viMemFree(vi,offset):释放内存分配。 读资源 n   读资源(VI_RSRC_RD): 1. 资源概述:控制器从器件读出任意数据块,控制器可以将接收到的数据块解释为消息、命令或二进制编码数据。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_FDC_ACCESS_MODE FDC(高速数据通道)缓冲区存取模式 VI_ATTR_FDC1_AVAIL FDC版本1是否有效 VI_ATTR_FDC2_AVAIL FDC版本2是否有效 VI_ATTR_FDC_CHNL    FDC数据传送通道 VI_ATTR_FDC_GEN_SIGNAL_EN   是否允许通过FDC传送数据 VI_ATTR_FDC_MODE    FDC模式 VI_ATTR_FDC_USE_PAIR    一对或一个FDC有效 VI_ATTR_FDC_USE_VER FDC协议版本 VI_ATTR_PHYS_ADDR   器件地址 VI_ATTR_7_8_BIT_CMP 终止符有效位 VI_ATTR_NRDY_ABORT_EN   器件不再输出数据时是否被通知 VI_ATTR_OUTP_RDY_NOTIFY_EN 数据有效是否被通知 VI_ATTR_RD_PROT 传送协议 VI_ATTR_REPEAT_ADDR_EN 是否使用重复地址 VI_ATTR_SUPPRESS_END_ON 终止符是否被禁止 VI_ATTR_TERMCHAR    终止符 VI_ATTR_TERMCHAR_EN 终止符是否被允许 VI_ATTR_TMO_UNIT    超时值单位 VI_ATTR_TMO_VALUE   超时值 VI_ATTR_TRANSFER_MECH   传送机制(DMA或PIO) VI_ATTR_CMDR_SERV   主从模式 VI_ATTR_ASRL_BAUD   波特率 VI_ATTR_ASRL_DATA_BITS 数据位 VI_ATTR_ASRL_PARITY 校验极性 VI_ATTR_ASRL_STOP_BITS 停止位 VI_ATTR_ASRL_FLOW_CNTRL 数据流控制状态 3. 读资源定义的事件如下所示: 事件    说明 VI_EVENT_IO_COMPLETION 异步I/O操作已完成 4. 读资源定义的操作如下: viRead(vi,buf,count,retCount) viReadAsync(vi,buf,count,jobId) viReadStatus(vi,jobId,jobStatus) 4.1.    viRead(vi,buf,count,retCount) 1) 目标:从器件同步读取数据 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) buf 输出    ViBuf   数据块位置 count   输入    ViUInt32    读出的字节数 retCount    输出    ViPUInt32   实际传送字节数 3) 返回状态值: 完成代码: VI_SUCCESS 同步读数据完成 VI_SUCCESS_TERM_CHAR    特定终止符被读取 VI_SUCCESS_MAX_CNT 读取的字节数与count数相同 VI_WARN_NRDY_ABORT 传送退出,器件未准备好输出数据 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_TMO    超时错误 VI_ERROR_RAW_WR_PROT    传送时写协议被破坏 _VIOL VI_ERROR_RAW_RD_PROT    传送时读协议被破坏 _VIOL VI_ERROR_OUTP_PROT_VIOL 传送时输出协议错误 VI_ERROR_INP_PROT_VIOL 传送时输入协议错误 VI_ERROR_BERR   传送时总线错误 VI_ERROR_ABORT 传送时用户退出 VI_ERROR_IN_PROGRESS    同步写已执行 VI_ERROR_INV_SETUP 设置错误,不能开始写操作 4) 描述:该操作将从器件中读取的值放在buf,任一读资源通道只能登录一个同步读操作。 5) 相关项:参见viWriteAsync()、viTerminate()、viWriteStatus()、viReadAsync()、viReadStatus()。 6) 实现要求:当满足以下三种情况的一种或几种时,被认为读操作完成:一是结束标号被读取,二是特定终止符被读取,三是读取的字节数与所需字节数相同。 4.2.    viReadAsync(vi,buf,count,jobId) 1) 目标:从器件异步读取数据 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) buf 输出    ViBuf   数据块位置 count   输入    ViUInt32    读出的字节数 jobId   输出    ViPjobId    异步读操作作业标识符 3) 返回状态值: 完成代码: VI_SUCCESS 异步读操作完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_QUEUE_ERROR    不能进行读操作排队 4) 描述:该操作将从器件读取的数据放于buf中,任一读资源通道可以登录多个异步读操作,进行排队处理。 5) 相关项:参见viWrite()、viTerminate()、viWriteAsync()、viRead()、viReadStatus()。 6) 实现要求:无。 4.3.    viReadStatus(vi,jobId,jobStatus) 1) 目标:获取读操作状态 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) jobId   输入    VijobId 读操作作业标识符 jobStatus   输出    ViPJobstatus    读操作状态 3) 返回状态值: 完成代码: VI_SUCCESS 状态获取完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_INV_JOBID 作业标识符不当 4) 描述:当操作为同步时,标识符唯一确定,为VI_SYNC;当操作为异步时,标识符为操作的输出参数值。 5) 相关项:参见viReadAsync()。 6) 实现要求:无。 n   格式化I/O资源(VI_RSRC_FMT_IO): 1. 资源概述:数据流格式化I/O操作,可进行格式化的器件读写操作,并可进行缓冲区的I/O格式化。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_7_8_BIT_CMP 终止符位数 VI_ATTR_END_ON_TERMCHAR_EN 在GPIB系统中,EOI终止符是否被确认 VI_ATTR_NRDY_ABORT 器件不再输出数据时是否被通知 VI_ATTR_PROT    读/写协议 VI_ATTR_RD_BUF_OPER_MODE    读缓冲区操作模式 VI_ATTR_RD_SIZE 读缓冲区大小 VI_ATTR_REPEAT_ADDR 是否使用重复地址 VI_ATTR_RETURN_MODE 读/写操作返回模式 VI_ATTR_SEND_END_EN 是否将END作为终止符 VI_ATTR_SUPPRESS_END    是否禁止END作为终止符 VI_ATTR_TERMCHAR    终止符 VI_ATTR_TMO_UNIT    超时值单位 VI_ATTR_TMO_VALUE   超时值 VI_ATTR_TRANSFER_MECH   传送机制(DMA或PIO) VI_ATTR_WR_BUF_OPER_MODE    写缓冲区操作模式 VI_ATTR_WR_BUF_SIZE 写缓冲区大小 VI_ATTR_ASRL_BAUD   波特率 VI_ATTR_ASRL_DATA_BITS 数据位 VI_ATTR_ASRL_PARITY 校验极性 VI_ATTR_ASRL_STOP_BITS 停止位 VI_ATTR_ASRL_FLOW_CNTRL 数据流控制状态 3. 格式化I/O资源定义的事件如下所示:无 4. 格式化I/O资源定义的操作如下: viSetBuf(vi,mask,size) viSetUBuf(vi,mask,size,buf) viFlush(vi,mask) viPrintf(vi,writeFmt,arg1,arg2…) viVPrintf(vi,writeFmt,params) viSPrintf(vi,buf,writeFmt,arg1,arg2…) viSVPrintf(vi,buf,writeFmt,params) viBWrite(vi,buf,count,retCount) viScanf(vi,readFmt,arg1,arg2…) viVScanf(vi,readFmt,params) viSScanf(vi,buf,readFmt,arg1,arg2…) viSVScanf(vi,buf,readFmt,params) viBRead(vi,buf,count,retCount) viQueryf(vi,writeFmt,readFmt,arg1,arg2…) viVQueryf(vi,writeFmt,readFmt,params) 4.1.    viSetBuf(vi,mask,size) 1) 目标:设置格式化I/O缓冲区大小 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) mask    输入    ViPUInt16   缓冲区类型 size    输入    ViPUInt32   缓冲区大小 3) 返回状态值: 完成代码: VI_SUCCESS 缓冲区大小设置完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_ALLOC_MEM 系统无法分配缓冲区 VI_ERROR_INV_MASK   缓冲区类型设置错误 4) 描述:该操作改变读/写缓冲区大小,缓冲区类型可取VI_READ及VI_WRITE。 5) 相关项:参见viSefUBuf()、viFlush()。 6) 实现要求:调用该操作会刷新相关缓冲区。 4.2.    viSetUBuf(vi,mask,size,buf) 1) 目标:设置格式化I/O用户缓冲区 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) mask    输入    ViPUInt16   缓冲区类型 size    输入    ViPUInt32   缓冲区大小 buf 输入    ViBuf   实际缓冲区地址 3) 返回状态值: 完成代码: VI_SUCCESS 用户缓冲区设置完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_INV_MASK   缓冲区类型设置错误 4) 描述:该操作为格式化I/O开辟一个缓冲区,该缓冲区不能用作其它用途。 5) 相关项:参见viSefBuf()。 6) 实现要求:调用该操作会刷新相关缓冲区。 4.3.    viFlush(vi,mask) 1) 目标:手工刷新格式化I/O缓冲区 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) mask    输入    ViPUInt16   缓冲区类型 3) 返回状态值: 完成代码: VI_SUCCESS 缓冲区刷新完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_IO I/O错误 VI_ERROR_TMO    超时错误 VI_ERROR_ABORT 在操作结束前收到退出信号 VI_ERROR_INV_MASK   缓冲区类型设置错误 4) 描述:该操作手动刷新相关读/写缓冲区内容。 5) 相关项:参见viSefBuf()、viSefUBuf()。 6) 实现要求:若对一空缓冲区进行刷新操作,相当于没有动作。 4.4.    viPrintf(vi,writeFmt,arg1,arg2…) 1) 目标:按设定格式将数据传送到器件中 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) writeFmt    输入    ViString    参数格式 arg1,arg2…    输入        各个所需参数 3) 返回状态值: 完成代码: VI_SUCCESS 参数成功地格式化 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_IO I/O错误 VI_ERROR_TMO    超时错误 VI_ERROR_ABORT 在操作结束前收到退出信号 VI_ERROR_FILE_NOPEN 文件没有打开或文件存取特性不当 VI_ERROR_NSUP_FMT   参数格式不当 4) 描述:该操作以一定格式将数据传送到器件中,viWrite()实际上是完成低层I/O操作。任一对话通道不能同时进行viWrite()及viPrintf()操作。 5) 相关项:参见viSPrintf()、viVPrintf()、viSVPrintf()、viBWrite()。 6) 实现要求:输入参数与其格式必须匹配。 4.5.    viSPrintf(vi,buf,writeFmt,arg1,arg2…):与viPrintf()不同的只在于viSPrintf()将数据写入buf参数的缓冲区而非器件中。 4.6.    viVPrintf(vi,writeFmt,params):与viPrintf()不同的只在于viVPrintf()中参数以列表形式给出。 4.7.    viSVPrintf(vi,buf,writeFmt,params):与viPrintf()不同的只在于viSVPrintf()中参数以列表形式给出,并写入到缓冲区中。 4.8.    viBWrite(vi,buf,count,retCount):与viWrite()不同的只在于viBWrite()将数据写入到缓冲区而不是器件中去。 4.9.    viScanf(vi,readFmt,arg1,arg2…) 1) 目标:按设定格式从器件中读取数据 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) readFmt 输入    ViString    参数格式 arg1,arg2…    输出        各个所得参数值 3) 返回状态值: 完成代码: VI_SUCCESS 数据成功地格式化并被读取 VI_SUCCESS_END_RECV END标志被接收到 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_IO I/O错误 VI_ERROR_TMO    超时错误 VI_ERROR_ABORT 在操作结束前收到退出信号 VI_ERROR_FILE_NOPEN 文件没有打开或文件存取特性不当 VI_ERROR_NSUP_FMT   参数格式不当 4) 描述:该操作以一定格式从器件中读取数据,viRead()实际上是完成低层I/O操作。任一对话通道不能同时进行viRead()及viScanf()操作。 5) 相关项:参见viSScanf()、viVScanf()、viSVScanf()、viBRead()。 6) 实现要求:输出参数与其格式必须匹配。 4.10.   viSScanf(vi,buf,readFmt,arg1,arg2…):与viScanf()不同的只在于viSScanf()从buf参数的缓冲区中读出数据而非从器件中读取。 4.11.   viVScanf(vi,readFmt,params):与viScanf()不同的只在于viVScanf()中参数以列表形式给出。 4.12.   viSVScanf(vi,buf,readFmt,params):与viScanf()不同的只在于viSVScanf()中参数以列表形式给出,并从缓冲区中读取。 4.13.   viBRead(vi,buf,count,retCount):与viRead()不同的只在于viBRead()从缓冲区而不是从器件中读取数据。 4.14.   viQuery(vi,writeFmt,readFmt,arg1,arg2…) 1) 目标:按设定格式对器件进行数据读写 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) writeFmt    输入    ViString    写参数格式 readFmt 输入    ViString    读参数格式 arg1,arg2…    输入、输出      各个所需或所得参数值 3) 返回状态值: 完成代码: VI_SUCCESS 参数成功地格式化并被读取或写入 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_IO I/O错误 VI_ERROR_INV_FMT    格式错误 VI_ERROR_TMO    超时错误 VI_ERROR_ABORT 在操作结束前收到退出信号 VI_ERROR_FILE_NOPEN 文件没有打开或文件存取特性不当 VI_ERROR_NSUP_FMT   参数格式不合法 4) 描述:该操作与器件进行数据交换,输入或输出是需要根据参数格式类型来定的,实际上包括了读与写操作。 5) 相关项:参见viBRead()、viBWrite()、viVQueryf()。 6) 实现要求:输入/输出参数与其格式必须匹配。 4.15.   viVQueryf(vi,writeFmt,readFmt,params):与viQueryf()不同的是viVQueryf()参数以列表形式给出。 n   触发资源(VI_RSRC_TRIG): 1. 资源概述:监视与控制器件及接口的触发进程。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_HW_TRIG_SENSE_EN    触发是否会引发CPU中断 VI_ATTR_TRIG_ASSERT_MODE    触发确认模式 VI_ATTR_TRIG_MAP_ROUTE 触发映射 VI_ATTR_TMO_UNIT    超时值单位 VI_ATTR_TMO_VALUE   超时值 VI_ATTR_TRIG_LINE   当前资源特定触发线 3. 触发资源定义的事件如下所示: 事件    说明 VI_EVENT_TRIG   硬件触发产生 4. 触发资源定义的操作如下: viAssertTrigger(vi,protocol) viMapTrigger(vi,srcTrig,destTrig,mode) viUnmapTrigger(vi,srcTrig,destTrig) 4.1.    viAssertTrigger(vi,protocol) 1) 目标:用特定协议确认硬件或软件触发 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) protocol    输入    ViUInt16    触发协议 3) 返回状态值: 完成代码: VI_SUCCESS 特定触发确认 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_INV_PROT   协议不当 VI_ERROR_NSUP_OPER 硬件不支持 VI_ERROR_TMO    超时错误 VI_ERROR_LINE_IN_USE    触发线正被使用 VI_ERROR_LINE_NCONFIG   触发线未配置 VI_ERROR_OPER_NCOMPLETE 上一个操作未完成 VI_ERROR_ACK_PENDING    上个响应正在登录,使这个操作退出 4) 描述:该操作包括的触发协议有:缺省协议、协议开启、协议关闭、协议开始、协议结束、协议同步、协议半同步、协议异步、协议半同步并等待响应、协议异步并等待响应等。 5) 相关项:参见viMapTrigger()、viUnmapTrigger()。 6) 实现要求:无。 4.2.    viMapTrigger(vi,trig,direction,mode) 1) 目标:将特定触发、时钟或前面板信号映射到另一信号 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) trig    输入    ViString    映射源或目标触发线 direction   输入    ViUInt16    映射方向 mode    输入    ViUInt16    信号调理方式 3) 返回状态值: 完成代码: VI_SUCCESS 两个信号映射成功 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_NSUP_MODE 不支持特定模式 VI_ERROR_NUSP_SRC_TRIG 触发信号源不支持 VI_ERROR_NUSP_DEST_TRIG 触发信号目标不支持 VI_ERROR_TRIG_MAPPED    目标触发器已被映射 4) 描述:映射信号包括特定触发信号、时钟信号或外部信号等。 5) 相关项:参见viUnmapTrigger()、viAssertTrigger()。 6) 实现要求:无。 4.3.    viUnmapTrigger(vi,trig) 1) 目标:取消信号之间的映射 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) trig    输入    ViString    被映射的触发线 3) 返回状态值: 完成代码: VI_SUCCESS 两个信号映射取消成功 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_NUSP_SRC_TRIG 触发信号源不支持 VI_ERROR_NUSP_DEST_TRIG 触发信号目标不支持 VI_ERROR_TRIG_NMAPPED   特定触发信号当前未被映射 4) 描述:映射信号包括特定触发信号、时钟信号或外部信号等。 5) 相关项:参见viMapTrigger()、viAssertTrigger()。 6) 实现要求:无。 n   状态/服务请求资源(VI_RSRC_SRQ): 1. 资源概述:包括两个作用:一是作为服务请求的响应者,可监测系统的服务请求并获得状态信息;二是作为服务请求的发生者,可产生服务请求并提供状态信息。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_AUTOPOLL_EN 资源操作模式 VI_ATTR_STB 服务请求状态 VI_ATTR_TMO_UNIT    超时值单位 VI_ATTR_TMO_VALUE   超时值 3. 状态/服务请求资源定义的事件如下所示: 事件    说明 VI_EVENT_SERVICE_REQ    服务请求通知事件 4. 状态/服务请求资源定义的操作如下: viReadSTB(vi,status) viRequestServ(vi,request,status) 4.1.    viReadSTB(vi,status) 1) 目标:读取服务请求状态字节 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) status 输出    ViUInt16    服务请求状态 3) 返回状态值: 完成代码: VI_SUCCESS 服务请求状态字节读取完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_SRQ_NOCCURRED 服务请求未收到 VI_ERROR_TMO    超时错误 VI_ERROR_BERR   总线错误 4) 描述:该操作从一个服务请求者(消息基器件)中读取服务请求状态。 5) 相关项:参见viEventHandler()、viSetAttribute()、viGetAttribute()。 6) 实现要求:无。 4.2.    viRequestServ(vi,request,status) 1) 目标:向服务提供者(命令者)确认服务请求 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) request 输入    ViBoolean   服务请求目的 status 输入    ViUInt16    服务请求状态 3) 返回状态值: 完成代码: VI_SUCCESS 服务请求完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_INV_SERVICE_REQ    服务请求状态字节与请求参数不一致 VI_ERROR_TMO    超时错误 VI_ERROR_BERR   总线错误 4) 描述:该操作用于当前器件向服务提供者发送服务请求。 5) 相关项:参见VI_EVENT_SRQ_SERVICED事件。 6) 实现要求:无。 n   清除资源(VI_RSRC_CLR): 1. 资源概述:向器件发送清除命令。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_HW_SENSE_EN 硬件是否对接收到指令敏感 VI_ATTR_PHYS_ADDR   器件地址 VI_ATTR_TMO_UNIT    超时值单位 VI_ATTR_TMO_VALUE   超时值 3. 清除资源定义的事件如下所示: 事件    说明 VI_EVENT_CLEAR 器件清除命令接收事件 4. 清除资源定义的操作如下: viClear(vi) 4.1.    viClear(vi) 1) 目标:清除器件 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) 3) 返回状态值: 完成代码: VI_SUCCESS 器件清除完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_BERR   总线错误 VI_ERROR_TMO    超时错误 4) 描述:该操作向器件发送一个清除命令。 5) 相关项:无。 6) 实现要求:无。 n   高级存取资源(VI_RSRC_HL_ACC): 1. 资源概述:在接口级对器件的寄存器进行存取操作。 2. 资源属性表及属性描述: 属性名          描述 VI_ATTR_BUS_TYPE    接口总线类型 VI_ATTR_PHYS_ADDR   器件地址 VI_ATTR_TYPE    高级存取对象类型(器件还是接口) VI_ATTR_DEST_ACCESS_PRIV    写操作特性 VI_ATTR_DEST_BYTE_ORDER 写操作字节顺序 VI_ATTR_DO_RETRY    是否允许软件重入 VI_ATTR_SRC_ACCESS_PRIV 读操作特性 VI_ATTR_SRC_BYTE_ORDER 读操作字节顺序 VI_ATTR_USE_BLOCK   是否允许块传送 VI_ATTR_TRANSFER_MECH   传送机制 VI_ATTR_SRC_INCREMENT   源偏移量 VI_ATTR_DEST_INCREMENT 目标偏移量 3. 高级存取资源定义的事件如下所示:无 4. 高级存取资源定义的操作如下: viIn(vi,space,offset,width,value) viIn8(vi,space,offset,value) viIn16(vi,space,offset,value) viIn32(vi,space,offset,value) viIn64(vi,space,offset,value) viOut(vi,space,offset,width,value) viOut8(vi,space,offset,value) viOut16(vi,space,offset,value) viOut32(vi,space,offset,value) viOut64(vi,space,offset,value) viMove(vi,srcspace,srcOffset,srcWidth,destspace,destOffset, destWidth,length) 4.1.    viIn(vi,space,offset,width,value) viIn8(vi,space,offset,value) viIn16(vi,space,offset,value) viIn32(vi,space,offset,value) viIn64(vi,space,offset,value) 1) 目标:从接口总线读取8,16,32或64位字 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) space   输入    ViUInt16    地址空间类型 offset 输入    ViUInt32    读取接口/器件偏移量 width   输入    ViUInt16    读取数据长度 value   输出    ViBuf、ViPUInt(8、16、32、64)   读取数据 3) 返回状态值: 完成代码: VI_SUCCESS 读操作完成 错误代码: VI_ERROR_INV_SESSION    vi不能标识正当对话通道 VI_ERROR_RSRC_LOCKED    存取锁定模式不支持特定操作 VI_ERROR_BERR   总线错误 VI_ERROR_INV_SPACE 地址空间不合法 VI_ERROR_INV_OFFSET 偏移量不合法 VI_ERROR_NSUP_BYTE_ORDER    不支持特定字节顺序 VI_ERROR_NSUP_OFFSET    硬件不支持特定地址偏移量 VI_ERROR_NSUP_PRIV 硬件不支持存取特性 4) 描述:该操作用特定数据长度与地址空间读取位于一定地址的数据值。其中viIn8()、viIn16()、viIn32()、viIn64分别规定数据长度为8、16、32与64位。 5) 相关项:viOut()。 6) 实现要求:参数value值viBuf对应viIn(),viPUInt8对应viIn8(),viPUInt16对应viIn16(),viPUInt32对应viIn32(),viPUInt64对应viIn64()。 4.2.    viOut(vi,space,offset,width,value) viOut8(vi,space,offset,value) viOut16(vi,space,offset,value) viOut32(vi,space,offset,value) viOut64(vi,space,offset,value) 1) 目标:向接口总线写入8,16,32或64位字 2) 参数表: 参数名 输入/输出方向   数据类型    描述 vi 输入    ViSession   对话通道标识符(句柄) space   输入    ViUInt16    地址空间类型 offset 输入    ViUInt32    写入接口/器件偏移量 width   输入    ViU
/
本文档为【VISA汇总编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索