VISA常用函数.docx
《VISA常用函数.docx》由会员分享,可在线阅读,更多相关《VISA常用函数.docx(65页珍藏版)》请在冰点文库上搜索。
VISA常用函数
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
返回打开连接逻辑标识符。
参数
名称
方向
类型
描述
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表示不关心该值。
返回值
返回值为函数运行结果。
标识符
值
描述
I_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_V
OL
传输时写协议被破坏。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_TMO
超时。
viWrite
原型
ViStatusviWrite(ViSessionvi,ViBufbuf,ViUInt32count,ViUInt32retCount);
描述
同步写入数据。
写入的数据存储在buf中。
当数据写入完毕函数才返回。
任何时间都只能存在一个同步写入。
如果retCount的值为VI_NULL将不返回写入数据长度值。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
buf
IN
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
操作超时。
viWriteAsync
原型
ViStatusviWriteAsync(ViSessionvi,ViBufbuf,ViUInt32count,ViJobIdjobId);
注意:
在安捷伦设备中将调用同步写入。
描述
异步写入数据。
需要写入的数据存放在buf中。
当数据写入完毕函数才返回。
当数据传输完整结束时会触发一个I/O结束事件。
该函数返回一个jobId表示该操作的标识符,可以使用viTerminate函数传入jobId终止或者等待I/O结束事件来确定异步读操作完成。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
buf
IN
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被独占。
viWriteFromFile
原型
ViStatusviWriteFromFile(ViSessionvi,ViConstStringfileName,
ViUInt32count,ViUInt32retCount);
描述
从一个指定的文件中获取数据并同步写入设备中。
指定的fileName是以只读模式打开读取数据(读取全部数据或者数据长度达到count的值)。
读取到的数据都将写入到设备中。
该函数仅当操作完成才结束返回。
该操作通常是发送已经经过处理的数据。
VISA以ANSIC(标准C)文件操作,所以viWriteFromFile模式一般都是”rb”。
如果retCount参数设为VI_NULL,函数将不返回实际发送的数据长度,此操作常用于只需知道是否成功的操作。
参数
名称
方向
类型
描述
vi
IN
ViSession
对象标识符。
fileName
IN
ViConstString
读取的文件地址。
count
IN
ViUInt32
写入数据长度。
retCount
OUT
ViUInt32
实际写入长度。
如果为VI_NULL表示不关心该值。
返回值
返回值为函数运行结果。
标识符
值
描述
VI_SUCCESS
0
操作成功。
VI_ERROR_INV_SESSION
VI_ERROR_INV_OBJECT
vi不能标志正确的连接。
VI_ERROR_NSUP_OPER
vi不支持该函数。
VI_ERROR_RSRC_LOCKED
vi被独占。
VI_ERROR_TMO
超时。
V
_ERROR_RAW_RW_PROT_VIOL
传输时读协议被破坏。
VI_ERROR_RAW_RD_PROT_VIOL
传输时写协议被破坏。
VI_ERROR_OUTP_PROT_VIOL
传输时设备报告输入协议错误。
VI_ERROR_BERR
总线错误。
VI_ERROR_NCIC
非法控制器。
VI_ERROR_NLISTENERS
没有检测到听者。
VI_ERROR_IO
未知I/O错误。
VI_ERROR_FILE_ACCESS
打开文件错误。
可能是提供的无效路径或者没有访问权限。
VI_ERROR_FILE_IO
访问文件时发生错误。
VI_ERROR_CONN_LOST
连接丢失。
viPrintf
原型
ViStatusviPrintf(ViSessionvi,ViStringwriteFmt,arg1,arg2,...);
描述
格式化字符串并发送格式化后的字符串给设备。
(字符串格式化可以参照MFC里CString类中的Format函数。
)
不能在同一资源上同时使用viWrite和viPrintf函数。
部分VSIA函数的参数是可变的(如viPrintf,viScanf和viQueryf),导致VB不能调用。
用户可以使用与这些函数功能相当的函数代替。
writeFmt参数可以包含普通字符、一般格式化字符和特殊字符。
普通字符(包括空格)书写方式与平常一样,不用做任何修改。
特殊字符则要在该字符前面加一个反斜杠(\);格式化字符由百分号(%)和操作标志组成,操作标志后面介绍。
特殊字符
参照下表:
\n
发送一个ASCII码换行符,并且END标志自动一起发送。
\r
发送一个ASCII码回车。
\t
发送一个ASCII码制表符。
\###
发送一个指定的八进制数。
\”
发送一个ASCII码双引号。
\\
发送一个ASCII码反斜杠。
格式化字符
格式化说明符转换是根据后面的参数值来进行改变和格式化的。
格式化完成后直接发送给设备。
格式化字符串语法如下:
%[arraySize,][flags][width][.precision][F|N|h|l]type
arraySize表示数组的大小,逗号表示数组修饰符。
arraySize可以是常量,也可以用*代替。
*代替需要增加一个参数表示arraySize的值。
只支持type为d和f。
flags