VISA汇总编程Word文件下载.docx
- 文档编号:18871856
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:75
- 大小:44.63KB
VISA汇总编程Word文件下载.docx
《VISA汇总编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《VISA汇总编程Word文件下载.docx(75页珍藏版)》请在冰豆网上搜索。
3、资源属性的读取与修改;
4、操作激活;
5、事件报告;
6、并行与存取控制;
7、缺省值设置。
第二步是在资源管理器基础上,列出了各种仪器各自的操作功能,并实现操作功能的合并。
在这个基础上实现的资源实质可以包括不同格式的操作,如读资源包括了消息基器件的读,也包括了寄存器基器件的读;
既可以包括同步读操作,又可以包括异步读操作。
每一个资源内部,实质是各种操作的集合。
这种资源在VISA中即为仪器控制资源,包含各种仪器操作的资源称为通用资源,而将无法合并的功能,称为特定仪器资源。
第三步,需要定义与创建一个用API实现的资源,为用户提供单一的控制所有VISA仪器控制资源的方法,在VISA中称为仪器控制资源组织器。
与自顶向下的构成方式相比,VISA的构成模型是从仪器操作本身开始的,它实现的统一是深入到操作功能中去而不是停留于仪器类型之上。
在VISA的结构中,仪器类型的区别体现到统一格式的资源中的操作的选取,对于VISA使用者来说,形式上与用法上是单一的。
在理论层次上,自顶向下的方法属于归纳范畴,而自底向上的方法则属于演绎范畴。
因此,自顶向下是对过去所有仪器类型的总结,而不可能提供扩展接口,而自底向上的结构是从共性到个性的推广,它的兼容性不仅仅是过去、现在,还可以包括将来。
正由于这种自底向上的设计方法,VISA为虚拟仪器系统软件结构提供了一个共同的、统一的基础,来自于不同供应厂家的不同的仪器软件,可以运行于同一平台之上了。
VISA的结构模型如图3.1所示。
图3.1VISA结构模型概图
VISA结构模型自下往上,构成一个金字塔结构,最底层为资源管理器,其上为I/O级资源、仪器级资源与用户自定义资源集。
其中,用户自定义资源集的定义,在VISA规范中并没有规定,它是VISA的可变层,实现了VISA的可扩展性与灵活性,而在金字塔顶的用户层应用,是用户利用VISA资源实现的应用程序,其本身并不属于VISA资源。
3.1.3VISA的特点
基于自底向上结构模型的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结构考虑到了多种仪器类型与网络机制的兼容性,因此以VISAI/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_MODEFDC(高速数据通道)缓冲区存取模式
VI_ATTR_FDC1_AVAILFDC版本1是否有效
VI_ATTR_FDC2_AVAILFDC版本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_VERFDC协议版本
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
传送时读协议被破坏
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)
从器件异步读取数据
jobId
ViPjobId
异步读操作作业标识符
VI_SUCCESS异步读操作完成
VI_ERROR_QUEUE_ERROR
不能进行读操作排队
该操作将从器件读取的数据放于buf中,任一读资源通道可以登录多个异步读操作,进行排队处理。
参见viWrite()、viTerminate()、viWriteAsync()、viRead()、viReadStatus()。
无。
4.3.
viReadStatus(vi,jobId,jobStatus)
获取读操作状态
VijobId读操作作业标识符
jobStatus
ViPJobstatus
读操作状态
VI_SUCCESS状态获取完成
VI_ERROR_INV_JOBID作业标识符不当
当操作为同步时,标识符唯一确定,为VI_SYNC;
当操作为异步时,标识符为操作的输出参数值。
参见viReadAsync()。
格式化I/O资源(VI_RSRC_FMT_IO):
数据流格式化I/O操作,可进行格式化的器件读写操作,并可进行缓冲区的I/O格式化。
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_WR_BUF_OPER_MODE
写缓冲区操作模式
VI_ATTR_WR_BUF_SIZE写缓冲区大小
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…)
viVSc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VISA 汇总 编程