VISA常用函数.docx
《VISA常用函数.docx》由会员分享,可在线阅读,更多相关《VISA常用函数.docx(71页珍藏版)》请在冰豆网上搜索。
![VISA常用函数.docx](https://file1.bdocx.com/fileroot1/2023-1/11/ce057b70-5988-44c0-9031-8fa1e5f7c20e/ce057b70-5988-44c0-9031-8fa1e5f7c20e1.gif)
VISA常用函数
函数
viOpenDefaultRM
原型
ViStatusviOpenDefaultRM(ViSessionsesn);
描述
这个函数用来初始化一个VISA资源管理器,此函数必须要在其他任何VISA函数之前调用。
函数通过sesn参数返回一个独立的VISA资源管理器ID。
参数
名称
方向
类型
描述
sesn
OUT
ViSession
返回一个独一无二的VISA资源管理器逻辑标识符
返回值
返回值为函数运行结果,如果成功sesn返回VISA资源管理器标识符,否则返回0。
标识符
值
描述
VI_SUCCESS
0
VISA资源管理器初始化成功。
VI_ERROR_ALLOC
系统资源不足。
VI_ERROR_INV_SETUP
配置文件无效或者不存在。
VI_ERROR_SYSTEM_ERROR
VISA系统初始化失败。
viOpen
原型
ViStatusviOpen(ViSessionsesn,ViRsrcrsrcName,ViAccessModeaccessMode,ViUInt32timeout,ViSessionvi);
描述
连接一个指定的设备,返回一个可用于调用其他功能的连接标识符。
参数
名称
方向
类型
描述
sesn
IN
ViSession
VISA资源管理器逻辑标识符。
rsrcName
IN
ViRsrc
地址名称。
accessMode
IN
ViAccessMode
连接打开方式,可以是以下值:
VI_EXCLUSIVE_LOCK独占方式打开;
VI_LOAD_CONFIG更具外部配置文件打开;
VI_NULL正常多访问打开。
timeout
IN
ViUInt32
如果是以独占模式连接,该参数是一个绝对时间(单位ms),超时就返回一个错误。
其他连接方式忽略此值。
vi
OUT
ViSession
返回打开连接逻辑标识符。
返回值
返回值为函数运行结果,如果成功vi返回设备连接标识符,否则返回0。
标识符
值
描述
VI_SUCCESS
0
连接成功。
VI_SUCCESS_DEV_NPRESENT
连接成功。
但是指定的地址无响应。
VI_WARN_CONFIG_NLOADED
指定的地址不存在或者地址格式不正确。
VI_ERROR_ALLOC
系统资源不足。
VI_ERROR_INTF_NUM_NCONFIG
指定的地址是有效的,但无法使用。
VI_ERROR_INV_ACC_MODE
非法的存取模式。
VI_ERROR_INV_RSRC_NAME
地址名称语法错误。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
无效的vi。
VI_ERROR_LIBRARY_NFOUND
VISA库加载不完全。
VI_ERROR_NSUP_OPER
资源管理器sesn不支持此函数。
VI_ERROR_RSRC_BUSY
sesn是有效的,但当前无法访问。
VI_ERROR_RSRC_LOCKED
sesn被独占。
VI_ERROR_RSRC_NFOUND
信息不足或者资源不存在。
VI_ERROR_TMO
0xBFFF0015
操作超时。
viClose
原型
ViStatusviClose(ViSessionvi);
ViStatusviClose(ViEventvi);
ViStatusviClose(ViFindListvi);
描述
关闭一个资源管理器或者设备连接,并释放内存。
参数
名称
方向
类型
描述
vi
IN
ViSession
ViEvent
ViFindList
需要关闭的对象。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
关闭成功。
VI_WARN_NULL_OBJECT
要关闭的对象是空对象。
VI_ERROR_CLOSING_FAILED
vi不能标识正当对话通道。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
无法释放与该对话通道相关联的内存数据结构。
viFindRsrc
原型
ViStatusviFindRsrc(ViSessionsesn,ViStringexpr,ViPFindListfindList,
ViPUInt32retcnt,ViRsrcinstrDesc);
描述
该函数用于查找VISA系统里与指定接口相连的资源设备。
该函数查找的与expr参数相匹配的有效资源设备。
该函数成功完成将返回与exor相匹配的资源组中的第一个资源(instrDesc),还返回一个资源组中的个数(retnt)。
另外还返回一个找到的队列句柄,可以同过调用viFindNext传入这个句柄来获得其他找到的资源。
当这个句柄不需要时必须调用viClose关闭。
expr参数不区分大小写,搜寻标准由两个部分组成:
一个资源的正则表达式和一个可选的属性值逻辑表达式。
这个正则表达式是与已知的VISA资源管理器相匹配。
如果这资源字符串与正则表达式相匹配,并且属性值也与逻辑表达式匹配,则这匹配是成功的,这资源将添加到资源查询队列(findList)中。
(安捷伦的VISA不支持匹配属性值。
)
这可选的属性逻辑表达式允许使用逻辑符号AND,OR,NOT。
相等(==)和不等(!
=)可以用与任何类型的属性比较。
另外的非等号比较的(>,<,>=,<=)只能用于数值类型的属性比较。
仅仅全局属性才能参与属性表达式。
如果findList参数传入的是VI_NULL,则会自动调用viClose关闭查找到的资源队列。
findList参数和retcnt参数都是可选的,如果只需要第一个匹配到的设备并且不需要知道连接了多少设备这两个参数都可以传入VI_NULL。
所有返回的字符串都需要经过viParseRsrc和viOpen函数的验证,不是所有查询到的资源都可以通过和查询的。
参数
名称
方向
类型
描述
sesn
IN
ViSession
资源管理器。
必须要被viOpenDefaultRM函数初始化。
expr
IN
ViString
表达要搜索的一个接口或者所有接口存在的设备。
(参照下面的格式描述字符串表)
findList
OUT
ViPFindList
返回一个搜索到的句柄标识符,这句柄可以作为viFindNext函数的参数传入。
如果为VI_NULL,自动动调用viClose关闭findList。
retcnt
OUT
ViPUInt32
匹配到的设备数量。
如果为VI_NULL,不返回找到的个数。
instrDesc
OUT
ViRsrc
返回一个设备识别地址字符串,可以直接传给viOpen建立一个会话。
expr参数描述字符串说明:
接口
表达
GPIB
GPIB[0-9]*:
:
?
*INSTR
VXI
VXI?
*INSTR
GPIB-VXI
GPIB-VXI?
*INSTR
GPIB和GPIB-VXI
GPIB?
*INSTR
AllVXI
?
*VXI[0-9]*:
:
?
*INSTR
ASRL
ASRL[0-9]*:
:
?
*INSTR
All
?
*INSTR
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
找到资源。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
传递的对象无效。
VI_ERROR_NSUP_OPER
不支持该函数。
VI_ERROR_INV_EXPR
无效的搜索指定。
VI_ERROR_RSRC_NFOUND
没有找到设备。
viFindNext
原型
ViStatusviFindNext(ViFindListfindList,ViPRsrcinstrDesc);
描述
返回查找资源队列上的下一个资源。
参数
名称
方向
类型
描述
findList
IN
ViFindList
查找队列句柄。
必须由viFindRsrc函数创建。
instrDesc
OUT
ViPRsrc
返回一个地址字符串。
字符串可以通过调用viOpen函数建立一个会话连接。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
找到资源。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
findList不能标志正确的连接。
VI_ERROR_NSUP_OPER
findList不支持该函数。
VI_ERROR_RSRC_NFOUND
没找到资源。
viParseRsrc
原型
ViStatusviParseRsrc(ViSessionsesn,ViRsrcrsrcName,ViPUInt16intfType,ViPUInt16intfNum);
描述
从语法上分析一个指向设备的资源字符串。
这操作分析字符串的有效性。
viFindRsrc函数返回的所有字符串都必须在分析成功后才能调用viOpen函数。
返回的intfType和intfNum分别对应VI_ATTR_INTF_TYPE和VI_ATTR_INTF_NUM属性。
这些值将与使用viOpen函数连接后使用viGetAttribute函数查询的值一样。
在viOpen函数中设置别名,viParesRsrc函数也能识别。
rsrcName参数不区分大小写。
参数
名称
方向
类型
描述
sesn
IN
ViSession
默认资源管理器(必须经过viOpenDefaultRM函数初始化)。
rsrcName
IN
ViRsrc
资源独立的名称。
intfType
OUT
ViPUInt16
会话连接的接口类型。
intfNum
OUT
ViPUInt16
会话连接的板号。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
资源字符串是有效的。
VI_ERROR_ALLOC
内存不足。
VI_ERROR_INTF_NUM_NCONFIG
接口类型是有效的,但接口号是无效的。
VI_ERROR_INV_RSRC_NAME
无效的资源指示字符串。
语法错误。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
sesn不能标志正确的连接。
VI_ERROR_LIBRARY_NFOUND
一个VISA必须库无法加载。
VI_ERROR_NSUP_OPER
给定的sesn不支持该函数。
例如,该函数仅仅支持默认资源管理器的sesn。
VI_ERROR_RSRC_NFOUND
位置信息不足。
viClear
原型
ViStatusviClear(ViSessionvi);
描述
清空设备,执行IEEE488.1系统的清空操作。
如果连接方式是使用VXI总线,将清空所有连接设备;
如果连接方式是使用GPIB数据采集板,将只清空指定地址的设备;
如果连接方式是使用TCPIP套接字,需要把VI_ATTR_IO_PROT属性设置成VI_PROT_4882_STRS,将相当于向设备发送”*CLS\n”字符串,其他设置操作无效。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
函数执行成功。
VI_ERROR_BERR
总线错误。
VI_ERROR_CONN_LOST
连接丢失。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_INV_SETUP
设置无效,不能执行操作。
VI_ERROR_NCIC
非法控制器。
VI_ERROR_NLISTENERS
没有检测到听者。
VI_ERROR_NSUP_OPER
vi不支持此函数
VI_ERROR_RAW_RD_PROT_VIOL
传输时读协议被破坏。
VI_ERROR_RAW_WR_PROT_VIOL
传输时写协议被破坏。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_TMO
操作超时。
viFlush
原型
ViStatusviFlush(ViSessionvi,ViUInt16mask);
描述
手动刷新格式化I/O缓冲区。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
mask
IN
ViUInt16
缓冲区类型。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
函数执行成功。
VI_ERROR_INV_MASK
缓冲区类型设置错误
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_IO
I/O错误
VI_ERROR_RSRC_LOCKED
存取锁定模式不支持特定操作
VI_ERROR_TMO
超时。
viReadSTB
原型
ViStatusviReadSTB(ViSessionvi,ViPUInt16status);
描述
读取一个服务请求状态。
例如,在IEEE488.2接口上,这消息将轮训所有的连接设备。
其他接口这消息只读取一个设备的服务请求状态。
连接方式是使用TCPIP套接字,如果VI_ATTR_IO_PROT属性的值为VI_PROT_4882_STRS,将向这设备发送字符串”*STB?
\n”查询状态,其他设置则操作将无效。
如果这个设备状态信息只有一个字节(BYTE)长度,则另外一个字节设为0。
如果服务请求没有在规定时间周期内完成,将返回VI_ERROR_TMO。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
status
OUT
ViUInt16
服务请求状态字节。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
函数执行成功。
VI_ERROR_BERR
总线错误。
VI_ERROR_CONN_LOST
连接丢失。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_INV_SETUP
设置无效,不能执行操作。
VI_ERROR_NCIC
非法控制器。
VI_ERROR_NLISTENERS
没有检测到听者。
VI_ERROR_NSUP_OPER
vi不支持此函数
VI_ERROR_RAW_RD_PROT_VIOL
传输时读协议被破坏。
VI_ERROR_RAW_WR_PROT_VIOL
传输时写协议被破坏。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_SRQ_NOCCURRED
对象没有收到服务请求。
VI_ERROR_TMO
操作超时。
viRead
原型
ViStatusviRead(ViSessionvi,ViBufbuf,ViUInt32count,ViUInt32retCount);
描述
同步读取数据。
读取的数据存储在buf中。
当数据读取完毕函数才返回。
任何时间都只能存在一个同步读取。
遇到以下情况同步读取结束:
收到END指示器
读取到终止符
读取的数据大小达到count的值
注意:
必须设置读取终止符。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
buf
OUT
ViBuf
返回数据存取地址。
count
IN
ViUInt32
指定读取长度。
retCount
OUT
ViUInt32
实际读取长度。
如果为VI_NULL表示不关心该值。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
成功读取,读取到END指示器结束。
VI_SUCCESS_MAX_CNT
成功读取,已经达到最大长度count。
VI_SUCCESS_TERM_CHAR
成功读取,读取到特定终止符。
VI_ERROR_ASRL_FRAMING
构架错误。
VI_ERROR_ASRL_OVERRUN
溢出错误。
VI_ERROR_ASRL_PARITY
同步错误。
VI_ERROR_BERR
总线错误。
VI_ERROR_CONN_LOST
连接丢失。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_INV_SETUP
设置无效,不能执行操作。
VI_ERROR_IO
未知I/O错误。
VI_ERROR_NCIC
非法控制器。
VI_ERROR_NLISTENERS
没有检测到听者。
VI_ERROR_NSUP_OPER
vi不支持此函数
VI_ERROR_OUTP_PROT_VIOL
设备记录一个输出协议错误。
VI_ERROR_RAW_RD_PROT_VIOL
传输时读协议被破坏。
VI_ERROR_RAW_WR_PROT_VIOL
传输时写协议被破坏。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_TMO
操作超时。
viReadAsync
原型
ViStatusviReadAsync(ViSessionvi,ViBufbuf,ViUInt32count,ViJobIdjobId);
描述
异步读取数据。
读取的数据存储在buf中。
当数据读取完毕函数才返回。
当数据传输结束时触发一个I/O结束事件。
该函数返回一个jobId表示该操作的标识符,可以使用viTerminate函数传入jobId终止或者等待I/O结束事件来确定异步读操作完成。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
buf
OUT
ViBuf
返回数据存取地址。
count
IN
ViUInt32
指定读取长度。
jobId
OUT
ViJobId
异步读操作工作标识符。
如果为VI_NULL表示不关心该值。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
异步读成功进入队列。
VI_SUCCESS_SYNC
读操作进行异步。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_QUEUE_ERROR
队列错误。
VI_ERROR_RSRC_LOCKED
vi被独占。
viReadToFile
原型
ViStatusviReadToFile(ViSessionvi,ViConstStringfileName,
ViUInt32count,ViUInt32retCount);
描述
同步读取数据并把数据保存到文件中。
fileName指定的文件只有只写权限。
如果VI_ATTR_FILE_APPEND_EN属性值为VI_FLASE,数据写入将直接覆盖原来的数据,否则在文件内容尾部添加数据。
仅当数据读取和保存操作完成此函数才返回。
此函数一般用于保存未处理的数据便于后期处理。
VSIA使用ANSIC(标准C)文件操作。
viReadToFile的模式通常是”wb”或者”ab”。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
fileName
IN
ViConstString
写入的文件地址。
count
IN
ViUInt32
读取数据长度。
retCount
OUT
ViUInt32
实际读取数据长度。
如果为VI_NULL表示不关心该值。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
操作成功。
VI_SUCCESS_MAX_CNT
读取的数据长度达到了count的值。
VI_SUCCESS_TERM_CHAR
读取到指定的终止符号。
VI_ERROR_ASRL_FRAMING
格式错误。
VI_ERROR_ASRL_OVERRUN
溢出错误。
VI_ERROR_ASRL_PARITY
同步错误。
VI_ERROR_BERR
总线错误。
VI_ERROR_CONN_LOST
连接丢失。
VI_ERROR_FILE_ACCESS
打开文件错误。
可能是提供的无效路径或者没有访问权限。
VI_ERROR_FILE_IO
访问文件时发生错误。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_INV_SETUP
设置无效,不能执行操作。
VI_ERROR_IO
未知I/O错误。
VI_ERROR_NCIC
非法控制器。
VI_ERROR_NLISTENERS
没有检测到听者。
VI_ERROR_NSUP_OPER
vi不支持此函数
VI_ERROR_OUTP_PROT_VIOL
设备报告输出协议错误。
VI_ERROR_RAW_RD_PROT_VIOL
传输时读协议被破坏。
VI_ERROR_RAW_WR_PROT_VIOL
传输时写协议被破坏。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_TMO
超时。
viWrite
原型
ViStatusviWrite(ViSessionvi,ViBufbuf,ViUInt32count,ViUInt32retCount);
描述
同步写入数据。
写入的数据存储在buf中。
当数据写入完毕函数才返回。
任何时间都只能存在一个同步写入。
如果retCount的值为VI_NULL将不