Visa指令简介

Visa指令简介

 

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):释放内存分配。

属性表:

1、VISA资源模板:

VI_ATTR_MAX_QUEUE_LENGTH 任一时间特定对话通道最大事件排队长度
VI_ATTR_RM_SESSION 资源管理器对话通道
VI_ATTR_RSRC_IMPL_VERSION 资源版本
VI_ATTR_RSRC_LOCK_STATE 资源存取锁定模式(取值为表中所列三种)
VI_ATTR_RSRC_MANF_ID 生产厂家标号
VI_ATTR_RSRC_MANF_NAME 生产厂家名
VI_ATTR_RSRC_NAME 资源名
VI_ATTR_RSRC_SPEC_VERSION VISA规范版本
VI_ATTR_USER_DATA 资源特定对话通道所用的私有数据

2、仪器控制资源:

通用仪器控制属性:

VI_ATTR_INTF_TYPE 对话通道接口类型
VI_ATTR_INTF_NUM 接口板号
VI_ATTR_IO_PROT I/O协议
VI_ATTR_RD_BUF_OPER_MODE 读缓冲区操作模式
VI_ATTR_SEND_END_EN 最后一个字节是否有END字符
VI_ATTR_SUPPRESS_END_EN 是否禁止END字符
VI_ATTR_TERMCHAR 终止符
VI_ATTR_TERMCHAR_EN 是否允许终止符
VI_ATTR_TMO_VALUE 超时值
VI_ATTR_TRIG_ID 当前触发机制
VI_ATTR_WR_BUF_OPER_MODE 写缓冲区操作模式
GPIB仪器控制属性:
VI_ATTR_GPIB_PRIMARY_ADDR GPIB主地址
VI_ATTR_GPIB_SECONDARY GPIB副地址
_ADDR
VI_ATTR_INTF_PAERNT_NUM GPIB板号

VXI仪器控制属性:

VI_ATTR_MAINFRAME_LA 主机箱地址
VI_ATTR_MANF_ID VXI器件制造厂家标识符
VI_ATTR_MEM_BASE 内存基地址
VI_ATTR_MEM_SIZE 内存大小
VI_ATTR_MEM_SPACE 内存空间类型
VI_ATTR_MODEL_CODE 器件标号
VI_ATTR_SLOT VXI器件槽位
VI_ATTR_VXI_LA VXI器件逻辑地址
VI_ATTR_CMDR_LA VXI总线控制器地址
VI_ATTR_IMMEDIATE_SERV 是否为立即从者
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_SRC_INCREMENT 源偏移量
VI_ATTR_DEST_INCREMENT 目标偏移量
VI_ATTR_WIN_ACCESS 当前窗存取模式
VI_ATTR_WIN_BASE_ADDR 总线基地址
VI_ATTR_WIN_SIZE 当前窗长度

异步串行仪器控制属性:

VI_ATTR_ASRL_AVAIL_NUM 接收缓冲区字节个数
VI_ATTR_ASRL_BAUD 波特率
VI_ATTR_ASRL_DATA_BITS 数据位
VI_ATTR_ASRL_END_IN 读操作终止方式
VI_ATTR_ASRL_END_OUT 写操作终止方式
VI_ATTR_ASRL_FLOW_CNTRL 数据流控制
VI_ATTR_ASRL_PARITY 检验极性
VI_ATTR_ASRL_STOP_BITS 停止位
VI_ATTR_DEST_INCREMENT 目标偏移量
VI_ATTR_FDC_CHNL FDC数据传送通道
VI_ATTR_FDC_GEN_SIGNAL_EN 是否允许通过FDC传送数据
VI_ATTR_FDC_MODE FDC模式
VI_ATTR_FDC_USE_PAIR 一对或一个FDC有效

对于属性的操作,一般用viSetAttribute(ViSession/ViEvent/ViFindList vi, ViAttr attribute, ViAttrState attrState)及viGetAttribute(ViSession/ViEvent/ViFindList vi, ViAttr attribute, ViPAttrState attrState)来进行属性设置与获取,属性的主体可以是器件句柄类型、事件类型、资源对象类型等,应该分情况对待。如例3.6与例3.7的事件中断子程序中的属性主体即为事件类型。

事件表:

VI_EVENT_SERVICE_REQ 服务请求通知事件
VI_EVENT_VXI_SIGP VXI总线信号或中断引发事件
VI_EVENT_TRIG 硬件触发产生
VI_EVENT_IO_COMPLETION 异步I/O操作已完成

事件处理方式分事件排队方式与事件回调方式,具体见例3.4~例3.7。

在VISA定义的操作函数列,只是VISA规范的一小部分,但有一些操作函数并没有在VISA规范中定义过,属于软件本身补充定义的,如打开资源管理器函数viOpenDefaultRM()函数在仪器系统初始化时进行调用,建立仪器系统资源管理器与VISA软件的关联;viStatusDesc()函数在VISA函数调用返回后调用,并将前一个VISA函数调用返回值作为输入参数,获取字符串形式的状态描述;viFindNext()函数是viFindRsrc()函数的补充,用于查寻VISA系统资源;viMemAlloc()函数与viMemFree()函数用于器件存储器内存操作。而对于VISA规范中的VISA仪器控制组织器资源与VISA特定接口仪器控制资源定义的操作,VISA1.1中均没有定义,这也为VISA软件今后的发展提供了方向。可以看到,应用VISA1.1函数,可以实现仪器系统基本编程要求,但对于特定的操作,尚需要进一步扩充,VISA软件本身是一个不断完善与发展的产物。如果要修改与开发VISA软件,必须遵循VISA规范,并基于VISA模型进行开发

三、 VISA(VPP-4)

VISA:Virtual Instrumentation Software Architecture,即虚拟仪器软件结构,是VPP系统联盟制定的I/O接口软件标准及其相关规范的总称。
VISA为虚拟仪器提供了标准化的I/O接口软件规范。VISA是整个工业界的统一的软件基础。
虚拟仪器软件结构中的标准 I/O 接口软件称为VISA库。

1. VISA的作用

为整个工业界提供统一的软件基础
对驱动程序、应用程序不必考虑接口类型
仅规定为用户提供的标准函数,不对具体实现作任何说明
用于编写符合VPP规范的仪器驱动程序,完成计算机与仪器之间的命令和数据传输,实现对仪器的控制。
VISA库作为低层 I/O 接口软件,运行于计算机系统中。

2. VISA的特点

适用于各类仪器:VXI, PXI, GPIB, RS-232, TCP, USB… …
与硬件接口无关
既适用于单处理器结构又适用于多处理器或分布式结构
适用于多种网络机制

3. VISA库函数

资源管理类函数

viOpenDefaultRM (ViPSession Rsrc_Manager_Handle);
viOpenDefaultRM(&defaultRMHandle);
ViStatus viOpen (ViSession Rsrc_Manager_Handle, ViRsrc Instrument_Descriptor, ViAccessMode Access_Mode, ViUInt32 Open_Timeout, ViPSession Instrument_Handle);
viOpen (defaultRMHandle,
“VXI0::24::INSTR”, VI_NULL, VI_NULL, &dmmHandle);
ViStatus viClose (ViSession Session_Handle);
viClose(dmmHandle);

资源操作类函数
寄存器基仪器通讯

viIn8, viIn16, viIn32
viIn16 (dmmHandle, VI_A16_SPACE, 0, &manufactureID);
viOut8, viOut16, viOut32
viOut16 (dmmHandle, VI_A16_SPACE, 4, 0);

消息基仪器通讯

viRead, viWrite
viRead (dmmHandle, readbuf, 100, &count);
viWrite (dmmHandle, writebuf, 100, &count);

格式化I/O

viPrintf, viScanf
viPrintf (dmmHandle,
“*IDN?\n”);
viScanf (dmmHandle, “%t”, result);

资源模板
事件处理

viEnableEvent, viDisableEvent
viInstallHandler, viUninstallHandler
viWaitOnEvent

资源属性

viGetAttribute, viSetAttribute

用VISA函数操作仪器的步骤

打开VISA资源管理器句柄,用到的函数:viOpenDefaultRM;
打开仪器句柄,用到的函数:viFindRsrc、viFindNext、viOpen等;
设置仪器状态、控制仪器操作、读取测量数据、处理仪器事件,用到的函数: viGetAttribute、viSetAttribute、viIn16、viOut16、viPrintf、viScanf、viInstallHandler、viUninstallHandler、viEnableEvent、viDisableEvent、viWaitOnEvent等;
释放仪器句柄,用到的函数:viClose;
释放VISA资源管理器句柄,用到的函数:viClose。

函数

viOpenDefaultRM

原型

ViStatus viOpenDefaultRM (ViSession sesn );

描述

这个函数用来初始化一个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

原型

ViStatus viOpen (ViSession sesn, ViRsrc rsrcName, ViAccessMode accessMode, ViUInt32 timeout, ViSession vi);

描述

连接一个指定的设备,返回一个可用于调用其他功能的连接标识符。

参数

名称

方向

类型

描述

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

原型

ViStatus viClose(ViSession vi);

ViStatus viClose(ViEvent vi);

ViStatus viClose(ViFindList vi);

描述

关闭一个资源管理器或者设备连接,并释放内存。

参数

名称

方向

类型

描述

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

原型

ViStatus viFindRsrc(ViSession sesn, ViString expr, ViPFindList findList,

ViPUInt32 retcnt, ViRsrc instrDesc);

描述

该函数用于查找VISA系统里与指定接口相连的资源设备。该函数查找的与expr参数相匹配的有效资源设备。

该函数成功完成将返回与exor相匹配的资源组中的第一个资源(instrDesc),还返回一个资源组中的个数(retnt)。

另外还返回一个找到的队列句柄,可以同过调用viFindNext传入这个句柄来获得其他找到的资源。当这个句柄不需要时必须调用viClose关闭。

expr参数不区分大小写,搜寻标准由两个部分组成:一个资源的正则表达式和一个可选的属性值逻辑表达式。这个正则表达式是与已知的VISA资源管理器相匹配。

如果这资源字符串与正则表达式相匹配,并且属性值也与逻辑表达式匹配,则这匹配是成功的,这资源将添加到资源查询队列(findList)中。(安捷伦的VISA不支持匹配属性值。)

这可选的属性逻辑表达式允许使用逻辑符号AND,OR,NOT。相等(==)和不等(!=)可以用与任何类型的属性比较。另外的非等号比较的(>,<,>=,<=)只能用于数值类型的属性比较。仅仅全局属性才能参与属性表达式。

如果findList参数传入的是VI_NULL,则会自动调用viClose关闭查找到的资源队列。findList参数和retcnt参数都是可选的,如果只需要第一个匹配到的设备并且不需要知道连接了多少设备这两个参数都可以传入VI_NULL。

所有返回的字符串都需要经过viParseRsrcviOpen函数的验证,不是所有查询到的资源都可以通过和查询的。

参数

名称

方向

类型

描述

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

All VXI

?*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

原型

ViStatus viFindNext(ViFindList findList, ViPRsrc instrDesc);

描述

返回查找资源队列上的下一个资源。

参数

名称

方向

类型

描述

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

原型

ViStatus viParseRsrc(ViSession sesn, ViRsrc rsrcName, ViPUInt16 intfType, ViPUInt16 intfNum);

描述

从语法上分析一个指向设备的资源字符串。这操作分析字符串的有效性。viFindRsrc函数返回的所有字符串都必须在分析成功后才能调用viOpen函数。

返回的intfTypeintfNum分别对应VI_ATTR_INTF_TYPEVI_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

原型

ViStatus viClear(ViSession vi);

描述

清空设备,执行IEEE 488.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

原型

ViStatus viFlush(ViSession vi, ViUInt16 mask);

描述

手动刷新格式化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

原型

ViStatus viReadSTB(ViSession vi, ViPUInt16 status);

描述

读取一个服务请求状态。例如,在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

原型

ViStatus viRead(ViSession vi, ViBuf buf, ViUInt32 count,ViUInt32 retCount);

描述

同步读取数据。读取的数据存储在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

原型

ViStatus viReadAsync(ViSession vi, ViBuf buf, ViUInt32 count, ViJobId jobId);

描述

异步读取数据。读取的数据存储在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

原型

ViStatus viReadToFile (ViSession vi, ViConstString fileName,

ViUInt32 count, ViUInt32 retCount);

描述

同步读取数据并把数据保存到文件中。fileName指定的文件只有只写权限。

如果VI_ATTR_FILE_APPEND_EN属性值为VI_FLASE,数据写入将直接覆盖原来的数据,否则在文件内容尾部添加数据。仅当数据读取和保存操作完成此函数才返回。此函数一般用于保存未处理的数据便于后期处理。

VSIA使用ANSI C(标准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

原型

ViStatus viWrite(ViSession vi, ViBuf buf, ViUInt32 count, ViUInt32 retCount);

描述

同步写入数据。写入的数据存储在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

原型

ViStatus viWriteAsync(ViSession vi, ViBuf buf, ViUInt32 count, ViJobId jobId);

注意:在安捷伦设备中将调用同步写入。

描述

异步写入数据。需要写入的数据存放在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

原型

ViStatus viWriteFromFile (ViSession vi, ViConstString fileName,

ViUInt32 count, ViUInt32 retCount);

描述

从一个指定的文件中获取数据并同步写入设备中。指定的fileName是以只读模式打开读取数据(读取全部数据或者数据长度达到count的值)。读取到的数据都将写入到设备中。该函数仅当操作完成才结束返回。

该操作通常是发送已经经过处理的数据。VISA以ANSI C(标准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

超时。

VI_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

原型

ViStatus viPrintf(ViSession vi, ViString writeFmt, arg1, arg2,...);

描述

格式化字符串并发送格式化后的字符串给设备。(字符串格式化可以参照MFCCString类中的Format函数。)

不能在同一资源上同时使用viWriteviPrintf函数。

部分VSIA函数的参数是可变的(如viPrintf, viScanfviQueryf),导致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表示规定输出格式,可用符号如下:

符号

作用

右对齐,左边填充0或空格。

-

左对齐,右边填充空格。

+

在数字前增加符号 + 或 - 。

空格

只对负数显示符号。

#

type = c, s, d, i, u时没有影响。

type = o, x, X时,分别在数值前增加'0',"0x","0X"。

type = e, E, f时,总是使用小数点。

type = g, G时,除了数值为0外总是显示小数点。

width表示控制显示数值的宽度,取值和含义如下:

符号

作用

按缺省宽度显示。

n(n=1,2,3...)

宽度至少为n位,不够以空格填充。

0n(n=1,2,3...)

宽度至少为n位,不够左边以0填充。

*

格式列表中,下一个参数还是width

precision用于控制小数点后面的位数,取值和含义如下:

符号

作用

按缺省精度显示。

0

type=d,i,o,u,x时,没有影响。

type=e,E,f时,不显示小数点。

n(n=1,2,3...)

type=e,E,f时表示的最大小数位数。

type=其他,表示显示的最大宽度。

*

格式列表中,下一个参数还是precision

F | N | h | l表示指针是否是远指针或整数是否是长整数。F表示远指针,N表示近指针,h表示短整数或单精度浮点数,l表示长整数或双精度浮点数。

type可用符号如下:

符号

作用

符号

作用

d / i

有符号10进制整数

u

无符号10进制整数

x

小写字母无符号16进制

X

大写字母无符号16进制

f / F

浮点数

e / E

科学记数法表示浮点数

c

单个字符

s

字符串

o

无符号8进制整数

%

显示百分号

p

指针的值

g

自动选择合适的表示法

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

writeFmt

IN

ViString

格式化字符串。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

参数成功格式化。

VI_ERROR_ALLOC

内存不足。

VI_ERROR_INV_FMT

writeFmt包含无效格式化说明符。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_IO

未知I/O错误。

VI_ERROR_NSUP_FMT

writeFmt有不支持的格式说明符。

VI_ERROR_RSRC_LOCKED

vi被独占。

VI_ERROR_TMO

操作超时。

viScanf

原型

ViStatus viScanf(ViSession vi, ViString readFmt, arg1, arg2,...);

描述

这操作从设备读取一个字符串,然后格式化后保存值arg变量中。格式字符串包含说明符,空格字符和普通字符。

VISA中参数不确定的函数(如viPrintfviScanf, 和 viQueryf)不能被VB调用。可以用功能相似的viVPrintf, viVScanf, 和viVQueryf函数代替。

隐式分割符(空格符,制表符,换行符,回车符)是被忽略的,除非是%c%[]。除’%’外所有普通字符应该与从设备读取到的字符相匹配。

格式字符串的语法格式如下:

       % [ , arraySize ] [ width ] [ F | N | h | l ] type

arraySize表示返回数组的大小,逗号表示数组修饰符。arraySize可以是常量,也可以用#代替。#表示把返回的数组大小保存到一个参数中。只支持type 为d和f。

width表示控制显示数值的宽度,取值和含义如下:

符号

作用

按缺省宽度显示。

n(n=1,2,3...)

表示输入数据所占列宽。

F | N | h | l表示指针是否是远指针或整数是否是长整数。F表示远指针,N表示近指针,h表示短整数或单精度浮点数,l表示长整数或双精度浮点数。

type可用符号如下:

符号

作用

符号

作用

d / i

有符号10进制整数

u

无符号10进制整数

x

小写字母无符号16进制

X

大写字母无符号16进制

f / F

浮点数

e / E

科学记数法表示浮点数

c

单个字符

s

字符串

t

以END结尾的字符串

T

以“\n”结尾的字符串

y

二进制数组。

viScanf函数以END结束符结尾或者所有格式字符都匹配完成。如果碰到一个不匹配的字符该函数也将结束,所以先在检测格式化字符串是否匹配前查找END符。

还有在格式化完成后在缓冲区还残留一些数据的话,这些数据将留个下一个viScanf函数使用。

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

writeFmt

IN

ViString

格式化字符串。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功读到数据并且格式化到arg参数里。

VI_ERROR_ALLOC

内存不足。

VI_ERROR_INV_FMT

writeFmt包含无效格式化说明符。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_IO

未知I/O错误。

VI_ERROR_NSUP_FMT

writeFmt有不支持的格式说明符。

VI_ERROR_RSRC_LOCKED

vi被独占。

VI_ERROR_TMO

操作超时。

viQueryf

原型

ViStatus viQueryf(ViSession vi, ViString writeFmt, ViString readFmt, arg1, arg2,...);

描述

这函数执行一个格式化写和进行一个读取操作请求。这函数提供一个机制“发送,然后读取”一个典型的从设备获取数据的命令。读取是在发送命令后立即执行的。

该函数相当于viPrintf函数和viScanf函数结合起来。arg先匹配writeFmt,然后在匹配readFmt。具体格式化格式请参考viPrintf函数和viScanf函数的说明。

该函数的返回值和viPrintf, viScanf, viFlush一样。

VISA中参数不确定的函数(如viPrintfviScanf, 和 viQueryf)不能被VB调用。可以用功能相似的viVPrintf, viVScanf, 和viVQueryf函数代替。

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

writeFmt

IN

ViString

写入格式化字符串。

readFmt

OUT

ViString

读取格式化字符串。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功完成一个查询操作。

VI_ERROR_ALLOC

内存不足。

VI_ERROR_INV_FMT

0xBFFF003F

writeFmt包含无效格式化说明符。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_IO

未知I/O错误。

VI_ERROR_NSUP_FMT

0xBFFF0041

writeFmt有不支持的格式说明符。

VI_ERROR_RSRC_LOCKED

vi被独占。

VI_ERROR_TMO

0xBFFF0015

操作超时。

viSetAttribute

原型

ViStatus viSetAttribute(ViSession vi, ViAttr attribute, ViAttrState attrState);

ViStatus viSetAttribute(ViEvent vi, ViAttr attribute, ViAttrState attrState);

ViStatus viSetAttribute(ViFindList vi, ViAttr attribute, ViAttrState attrState);

描述

修改指定对象的指定属性值。

如果一个资源属性不能被修改,并且该资源是有效的和属性说明不能指定为其他值,viSetAttribute将返回错误代码VI_ERROR_NSUP_ATTR_STATE

VI_WARN_NSUP_ATTR_STATEVI_ERROR_NSUP_ATTR_STATE都指明传递的值不是有效值。除特殊情况外,一般都返回错误代码VI_ERROR_NSUP_ATTR_STATE,如果返回完成代码VI_WARN_NSUP_ATTR_STATE表示不支持传递的值,但操作没有失败。

参数

名称

方向

类型

描述

vi

IN

ViSession

ViEvent

ViFindList

对象标识符。

事件标识符。

查找队列。

attribute

IN

ViAttr

要设置的资源属性。

attrState

OUT

ViAttrState

要设置的值。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功设置资源属性。

VI_WARN_NSUP_ATTR_STATE

设置的属性是有效的,但不支持此属性启用。(这请求将停止,但可能会有性能改变。)

VI_ERROR_ATTR_READONLY

只读属性。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_NSUP_ATTR

该资源中没有指定的属性。

VI_ERROR_NSUP_ATTR_STATE

传的值不是有效值,或者该属性不支持该定义的值。(该操作将被阻止并返回错误。)

VI_ERROR_RSRC_LOCKED

vi被上锁。

viGetAttribute

原型

ViStatus viGetAttribute(ViSession vi, ViAttr attribute, void _VI_PTR attrState);

ViStatus viGetAttribute(ViEvent vi, ViAttr attribute, void _VI_PTR attrState);

ViStatus viGetAttribute(ViFindList vi, ViAttr attribute, void _VI_PTR attrState);

描述

返回指定对象的指定属性值。

参数

名称

方向

类型

描述

vi

IN

ViSession

ViEvent

ViFindList

对象标识符。

事件标识符。

查找队列。

attribute

IN

ViAttr

要返回的资源属性。

attrState

OUT

void*

要返回的属性值存放位置的指针。由于属性值类型长度不同,所以必须要先明确属性类型来分配存放的内存空间。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功获取资源属性。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_NSUP_ATTR

该资源中没有指定的属性。

viLock

原型

ViStatus viLock(ViSession vi, ViAccessMode lockType, ViUInt32 timeout,

ViKeyId requestedKey, ViKeyId accessKey);

注意:viLock函数不支持网络设备。

描述

该函数用于给一个资源加锁,加锁后可以使其他会话无法访问被加锁的资源。其他会话在访问被加锁的资源的时候会等待一段时间,如果等待结束资源还没解锁访问将返回一个错误。

共享锁能被一个或者多个会话加载在一个资源上,构成嵌套锁。

lockType为VI_EXCLUSIVE_LOCK时,requestedKeyaccessKey是无效的,应该设置为VI_NULL。

lockType为VI_SHARED_LOCK时,可以通过requestedKey参数指定一个密匙。如果vi没有加锁,requestedKey的值将会作为访问密匙。如果vi加锁了,并且requestedKey的值与访问密匙相同,则vi取得访问权限,否则返回错误。

同样的requestedKey的值也可以定义为VI_NULL。如果vi没有加锁,将产生一个随机的唯一访问密匙通过accessKey返回。如果vi加锁了,则返回错误。

viLock可以对同一会话多次上同一类型的锁,会有一个内部计数。调用一次viLock计数+1,当计数大于0时调用一次viUnLock计数-1,当计数为0时调用viUnLock计数不变。当计数为0时才为真正解锁。

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

lockType

IN

ViAccessMode

指定加锁类型,可以是VI_EXCLUSIVE_LOCK(独占锁)或者 VI_SHARED_LOCK(共享锁)。

timeout

IN

ViUInt32

其他操作需要访问此被加锁的对象时等待timeout(ms)后未解锁就返回错误。除开数值外还可以设置为VI_TMO_IMMEDIATE (立即)和VI_TMO_INFINITE(一直等待)。

requestedKey

IN

ViKeyId

lockType为VI_EXCLUSIVE_LOCK时此值设为VI_NULL。

lockType为VI_SHARED_LOCK时,可以传入VI_NULL或者密匙。详情看描述。

accessKey

OUT

ViKeyId

lockType为VI_EXCLUSIVE_LOCK时此值设为VI_NULL。

lockType为VI_SHARED_LOCK时,此参数返回一个唯一的密匙,其他会话可以用该密匙与这个资源加共享锁。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功以指定模式上锁。

VI_SUCCESS_NESTED_EXCLUSIVE

成功上独占锁。(多次上锁)

VI_SUCCESS_NESTED_SHARED

成功上共享锁。(多次上锁)

VI_ERROR_INV_ACCESS_KEY

requestedKey不是改资源共享锁的密匙。

VI_ERROR_INV_LOCK_TYPE

指定的资源不支持上锁。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_RSRC_LOCKED

已经被一个与该函数加锁类型不兼容的锁加锁了。

VI_ERROR_TMO

操作超时。

viUnLock

原型

ViStatus viUnLock(ViSession vi);

描述

用于释放以前使用viLock函数加的锁。

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

成功解锁。

VI_SUCCESS_NESTED_EXCLUSIVE

函数调用成功,但对象还是被加了独占锁。

VI_SUCCESS_NESTED_SHARED

函数调用成功,但对象还是被加了共享锁。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

VI_ERROR_SESN_NLOCKED

vi没有被加锁。

viInstallHandler

原型

ViStatus viInstallHandler(ViSession vi, ViEventType eventType,

ViHndlr handler, ViAddr userHandle);

描述

该函数给一个会话安装事件回调函数。

参数

名称

方向

类型

描述

vi

IN

ViSession

对象标识符。

eventType

IN

ViEventType

事件逻辑标识符。

handler

IN

ViHndlr

回调函数地址。

userHandle

IN

ViAddr

传递一个值用以区分在同一事件内的回调函数。

返回值

返回值为函数运行结果。

标识符

描述

VI_SUCCESS

0

处理函数安装成功。

VI_ERROR_HNDLR_NINSTALLED

安装识别,可能是多个处理函数安装在同一个会话上的同一个事件上。

VI_ERROR_INV_EVENT

该会话不支持该事件。

VI_ERROR_INV_HNDLR_REF

处理函数无效。

VI_ERROR_INV_SESSION

VI_ERROR_INV_OBJECT

vi不能标志正确的连接。

属性

一般的INSTR资源属性

属性字段

权限

类型

范围

默认值

说明

VI_ATTR_INTF_NUM

RO

全局

ViUInt16

0 到 0xFFFF

0

给定接口的板号。

VI_ATTR_INTF_TYPE

RO

全局

ViUInt16

VI_INTF_GPIB(1)

VI_INTF_VXI(2)

VI_INTF_GPIB_VXI(3)

VI_INTF_ASRL(4)

VI_INTF_PXI(5)

VI_INTF_TCPIP(6)

VI_INTF_USB(7)

N/A

给定会话的总线类型。

VI_ATTR_INTF_INST_

NAME

RO

全局

ViString

N/A

N/A

给定接口的文本描述。

VI_ATTR_IO_PROT

RW

本地

ViUInt16

VI_NORMAL (1)

VI_FDC(2)

VI_HS488(3)

VI_PROT_488_2_STRS(4)

VI_NORMAL

指定使用哪个一个协议。在VXI中可以选择VI_NORMAL (正常字符)和VI_FDC (快速数据通道);在GPIB中额可以选择VI_NORMAL和VI_HS488(高速数据传输);在ASRL中可以选择VI_NORMAL和VI_PROT_488_2_STRS(488风格传输);在viAssertTrigger / viReadSTB / viClear函数中发送488.2定义的字符串。

VI_ATTR_RD_BUF_

OPER_MODE

RW

本地

ViUInt16

VI_FLUSH_ON_ACCESS

VI_FLUSH_DISABLE

VI_FLUSH_DISABLE

指定读取缓冲区的模式。

VI_FLUSH_DISABLE:仅当调用viFlush函数时才清空缓冲区。

VI_FLUSH_DISABLE:调用viScanf函数后就清空缓冲区。

VI_ATTR_SEND_END_

EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_TRUE

缓冲区是否以END结尾。

VI_ATTR_SUPPRESS_

END_EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_FALSE

是否支持END终止符。

VI_TRUE:END不终止读操作。

VI_FALSE:END终止读操作。

VI_ATTR_TERMCHAR

RW

本地

ViUInt8

0 到 0xFF

0x0A

(‘\n’)

结束字符。

VI_ATTR_TERMCHAR_

EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_FALSE

读操作时当遇到一个结束符时是否终止。

VI_ATTR_TMO_VALUE

RW

本地

ViUInt32

VI_TMO_IMMEDIATE

1 到 0xFFFFFFFE

VI_TMO_INFINITE

2000 msec

超时值,单位毫秒。

如果值为VI_TMO_INFINITE将一直等待下去。

VI_ATTR_TRIG_ID

RW

本地

ViUInt16

VI_TRIG_SW;

VI_TRIG_TTL0 到

VI_TRIG_TTL7;

VI_TRIG_ECL0 到

VI_TRIG_ECL1

VI_TRIG_SW

当前触发机制标识符。

VI_ATTR_WR_BUF_OPER_MODE

RW

本地

ViUInt16

VI_FLUSH_ON_ACCESS

VI_FLUSH_WHEN_FULL

VI_FLUSH_WHEN_FULL

指定写缓冲区的模式。

VI_FLUSH_WHEN_FULL:当写入一个END终止符或者缓冲区慢了的时候清空缓冲区。

VI_FLUSH_ON_ACCESS:调用viPrintf函数后就清空缓冲区。

VI_ATTR_DMA_ALLOW_EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

N/A

该属性规定是否I/O访问使用DMA (VI_TRUE)或可编程I/O (VI_FALSE)。在一些实现中,该属性有全局影响。

VI_ATTR_FILE_APPEND_EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_FALSE

该属性指定viReadToFile对文件操作是覆盖还是追加。

GPIB和VXI特殊的INSTR资源属性

属性字段

权限

类型

范围

默认值

说明

VI_ATTR_GPIB_PRIMARY_ADDR

RO

全局

ViUInt16

0 to 30

N/A

给定会话的GPIB主地址。

VI_ATTR_GPIB_SECONDARY_ADDR

RO

全局

ViUInt16

0 to 31,

VI_NO_SEC_ADDR

N/A

给定会话的GPIB次地址。

VI_ATTR_GPIB_READDR_EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_TRUE

这属性指定是否在读写操作之前重新寻址。

VI_ATTR_GPIB_UNADDR_EN

RW

本地

ViBoolean

VI_TRUE

VI_FALSE

VI_FALSE

这属性指定是否在读写操作之后不寻址。

VI_ATTR_GPIB_REN_STATE

RO

全局

ViUInt16

VI_STATE_UNKNOWN

VI_STATE_ASSERTED

VI_STATE_UNASSERTED

N/A

这属性返回当前GPIB REN线状态。

其他与GPIB无关的特殊INSTR资源属性

事件

VI_EVENT_SERVICE_REQUEST

描述

设备发送的服务请求收到

属性

属性名

说明

权限

数据类型

范围

VI_ATTR_EVENT_TYPE

事件类型

只读

ViEventType

VI_EVENT_SERVICE_REQ

VI_EVENT_VXI_SIGP

描述

设备发送的服务请求收到

属性

属性名

说明

权限

数据类型

范围

VI_ATTR_EVENT_TYPE

事件类型

只读

ViEventType

VI_EVENT_VXI_STOP

VI_ATTR_SIGP_STATUS_ID

在IACK循环或者信号寄存器中获取16位状态/ID值。

只读

ViUInt16

0 到0xFFFF

VI_EVENT_TRIG

描述

触发中断收到,对VISA,   唯一可以被感知的触发是VXI硬件触发。

属性

属性名

说明

权限

数据类型

范围

VI_ATTR_EVENT_TYPE

事件类型

只读

ViEventType

VI_EVENT_TRIG

VI_ATTR_RECV_TRIG_ID

指定哪个触发事件接收触发机制。

只读

ViUInt16

VI_TRIG_TTL0 到

VI_TRIG_TTL7;

VI_TRIG_ECL0 到

VI_TRIG_ECL1

VI_EVENT_IO_COMPLETION

描述

异步操作完成。

属性

属性名

说明

权限

数据类型

范围

VI_ATTR_EVENT_TYPE

事件类型

只读

ViEventType

VI_EVENT_IO_COMPLETION

VI_ATTR_STATUS

异步操作返回代码。

只读

ViStatus

N/A

VI_ATTR_JOB_ID

异步操作的作业ID。

只读

ViJobId

N/A

VI_ATTR_BUFFER

异步操作的寄存器地址。

只读

ViBuf

N/A

VI_ATTR_RET_COUNT

异步操作真实大小。

只读

ViUInt32

0 到0xFFFFFFFF

VI_ATTR_OPER_NAME

产生这事件操作的名称。

ViString

N/A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泷羽sec学习打卡-Windows基础命令2总结篇

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base2 一、Windows-Base2常见的协议和端口常用的cmd命令渗透写入文件的思路&…

面经—科大讯飞

1extern c 修饰才能使用c在c中 new delete 可以自动判断分配多少空间 形成多态的两个条件&#xff0c;1.继承关系

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

【51单片机】I2C总线详解 + AT24C02

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 AT24C02介绍存储器 I2C总线介绍I2C时序结构数据帧AT24C02数据帧 编程实例 —— 按键控制数据大小&存储器写入读出 AT24C02介绍 …

全球海工供应链,中国建造!第十一届全球FPSOFLNGFSRU大会在上海隆重召开

10月30日-31日&#xff0c;全球海洋工程与高端装备领域的年度国际交流盛会——第十一届全球FPSO&FLNG&FSRU大会暨海上能源全产业链博览会在上海隆重召开&#xff0c;同期举办第七届亚洲海洋风能大会。本次大会暨博览会由上海船舶工业行业协会、上海市工业合作协会、决策…

Linux网络编程——网络字节序和IP地址详解

一、网络字节序 1、大端模式和小端模式 字节序是指多字节数据的存储顺序&#xff0c;在设计计算机系统的时候&#xff0c;有两种处理内存中数据的方法&#xff1a;大端格式、小端格式。 小端格式(Little-Endian)&#xff1a;将低位字节数据存储在低地址&#xff1b; 大端格式(…

解析低代码开发在企业数字化转型中的多重优势

在数字化转型的浪潮中&#xff0c;企业面临着前所未有的机遇和挑战。为了在竞争激烈的市场中脱颖而出&#xff0c;企业需要迅速且高效地构建和更新应用程序&#xff0c;以适应不断变化的业务需求。数字化转型已不再是企业的选择&#xff0c;而是关乎生存和发展的必由之路。在这…

JMeter项目实战

目录 一、流程&#xff1a; 1.接口测试流程&#xff1a; 2.测试数据准备&#xff1a; 3.接口功能测试&#xff1a; 4.自动化测试流程&#xff1a; 5.情景压力测试分析&#xff1a; 6.生成图形化测试报告&#xff1a; 一、流程&#xff1a; 1.接口测试流程&#xff1a; …

SHARE 100M A10风力发电机动态巡检

背景 随着碳中和、碳达峰“3060”目标的提出&#xff0c;“十四五”时期乃至本世纪中叶应对气候变化工作、绿色低碳发展和生态文明建设提出了更高要求。在时代建设的背景下&#xff0c;清洁能源行业蓬勃发展&#xff0c;传统静态巡检模式与高度依赖人力的风机巡检运维手段已经无…

数据分析:宏基因组DESeq2差异分析筛选差异物种

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理:计算步骤:结果:加载R包准备画图主题数据链接导入数据Differential abundance (No BP vs 2BP TA)构建`countData`矩阵过滤低丰度物种构建DESeq数据对象DESeq2差异分析画图Di…

Linux进程信号(信号的产生)

目录 什么是信号&#xff1f; 信号的产生 信号产生方式1&#xff1a;键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…

【ESP】一小时速通入门笔记

【ESP】一小时速通入门笔记 前言: 之前上学时就用过一次esp32, 当时初次使用搭建编译环境费了老大功夫.在我第一篇esp32笔记中也有说明.以至于我好像忘记记录完整的入门笔记了.最近因为工作需要又开始接触esp32才发现,现在已经方便得多了.顺利的话一小时速通. 前排提醒: 本笔记…

22.04Ubuntu---ROS2使用rclcpp编写节点C++

节点需要存在于功能包当中&#xff0c;功能包需要存在于工作空间当中。 所以我们要想创建节点&#xff0c;就要先创建一个工作空间&#xff0c;再创建功能包。 第一步&#xff1a;创建工作空间 mkdir -p chapt2_ws/src/ 第二步&#xff1a;创建example_cpp功能包&#xff0c…

QML项目实战:自定义CheckBox

目录 一.添加模块 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.15 二.自定义CheckBox 1.CheckBox设置 2.勾选框设置 3.标签部分 4. 状态变化处理 5.文本设置 三.效果 1.当enabled为true 2.当enabled为true 3.当…

【Git】Liunx环境下Git的使用:“克隆,提交,推送“

目录 一、常用参数 二、我们为什么要使用Git&#xff1f; 三、创建远程仓库 第一步&#xff1a;创建对应代码托管平台账号。 第二步&#xff1a;在托管平台创建仓库 第三步&#xff1a;完善仓库内容&#xff08;选择性使用&#xff09; 开源和私有 四、克隆远程仓库到本…

《Python网络安全项目实战》项目4 编写网络扫描程序

《Python网络安全项目实战》项目4 编写网络扫描程序 项目4 编写网络扫描程序任务4.1 扫描内网有效IP地址任务描述任务分析任务实施任务拓展 任务4.2 编写端口扫描工具任务描述任务分析任务实施相关知识任务评价任务拓展项目评价 项目4 编写网络扫描程序 许多扫描工具是由Pytho…

软件设计开发规程,制度(word原件)

技术解决方案过程包括&#xff1a; 1、选择最佳解决方案&#xff1b; 2、制定架构设计&#xff1b; 3、制定概要设计&#xff1b; 4、制定详细设计和数据库设计&#xff1b; 5、利用准则进行接口设计&#xff1b; 6、实现设计&#xff1b; 7、进行单元测试&#xff1b; 8、进行…

Spring Boot框架的知识分类技术解析

2 开发技术 2.1 VUE框架 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题&#xff1a;这篇文章要解决的问题是大型语言模型&#xff08;LLMs&#xff09;在生成输出时存在的事实不准确性&#xff0c;即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色&#xff0c;但当遇到超出训练语料库范围的新知识时&#xff0c;它们通常会生…

Spark中的宽窄依赖

一、什么是依赖关系 这里通过一张图来解释&#xff1a; result_rdd是由tuple_rdd使用reduceByKey算子得到的&#xff0c; 而tuple_rdd是由word_rdd使用map算子得到的&#xff0c;word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系&#xff01; 二…