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返回VISA资源管理器标识符,否则返回0。
|
viOpen
原型 | ViStatus viOpen (ViSession sesn, ViRsrc rsrcName, ViAccessMode accessMode, ViUInt32 timeout, ViSession vi); | |||||||||||||||||||||||||||||||||||||||||||||
描述 | 连接一个指定的设备,返回一个可用于调用其他功能的连接标识符。 | |||||||||||||||||||||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果,如果成功vi返回设备连接标识符,否则返回0。
|
viClose
原型 | ViStatus viClose(ViSession vi); ViStatus viClose(ViEvent vi); ViStatus viClose(ViFindList vi); | |||||||||||||||
描述 | 关闭一个资源管理器或者设备连接,并释放内存。 | |||||||||||||||
参数 |
| |||||||||||||||
返回值 | 返回值为函数运行结果。
|
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。 所有返回的字符串都需要经过viParseRsrc和viOpen函数的验证,不是所有查询到的资源都可以通过和查询的。 | ||||||||||||||||||||||||||||||||||||||||
参数 |
expr参数描述字符串说明:
| ||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viFindNext
原型 | ViStatus viFindNext(ViFindList findList, ViPRsrc instrDesc); | |||||||||||||||
描述 | 返回查找资源队列上的下一个资源。 | |||||||||||||||
参数 |
| |||||||||||||||
返回值 | 返回值为函数运行结果。
|
viParseRsrc
原型 | ViStatus viParseRsrc(ViSession sesn, ViRsrc rsrcName, ViPUInt16 intfType, ViPUInt16 intfNum); | |||||||||||||||||||||||||||
描述 | 从语法上分析一个指向设备的资源字符串。这操作分析字符串的有效性。viFindRsrc函数返回的所有字符串都必须在分析成功后才能调用viOpen函数。 返回的intfType和intfNum分别对应VI_ATTR_INTF_TYPE和VI_ATTR_INTF_NUM属性。这些值将与使用viOpen函数连接后使用viGetAttribute函数查询的值一样。 在viOpen函数中设置别名,viParesRsrc函数也能识别。 rsrcName参数不区分大小写。 | |||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viClear
原型 | ViStatus viClear(ViSession vi); | |||||||||||||||||||||||||||||||||||||||
描述 | 清空设备,执行IEEE 488.1系统的清空操作。 如果连接方式是使用VXI总线,将清空所有连接设备; 如果连接方式是使用GPIB数据采集板,将只清空指定地址的设备; 如果连接方式是使用TCPIP套接字,需要把VI_ATTR_IO_PROT属性设置成VI_PROT_4882_STRS,将相当于向设备发送”*CLS\n”字符串,其他设置操作无效。 | |||||||||||||||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viFlush
原型 | ViStatus viFlush(ViSession vi, ViUInt16 mask); | |||||||||||||||||||||
描述 | 手动刷新格式化I/O缓冲区。 | |||||||||||||||||||||
参数 |
| |||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
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。 | ||||||||||||||||||||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viRead
原型 | ViStatus viRead(ViSession vi, ViBuf buf, ViUInt32 count,ViUInt32 retCount); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
描述 | 同步读取数据。读取的数据存储在buf中。当数据读取完毕函数才返回。任何时间都只能存在一个同步读取。遇到以下情况同步读取结束: 收到END指示器 读取到终止符 读取的数据大小达到count的值 注意:必须设置读取终止符。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viReadAsync
原型 | ViStatus viReadAsync(ViSession vi, ViBuf buf, ViUInt32 count, ViJobId jobId); | ||||||||||||||||||||
描述 | 异步读取数据。读取的数据存储在buf中。当数据读取完毕函数才返回。当数据传输结束时触发一个I/O结束事件。 该函数返回一个jobId表示该操作的标识符,可以使用viTerminate函数传入jobId终止或者等待I/O结束事件来确定异步读操作完成。 | ||||||||||||||||||||
参数 |
| ||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
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” 。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viWrite
原型 | ViStatus viWrite(ViSession vi, ViBuf buf, ViUInt32 count, ViUInt32 retCount); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
描述 | 同步写入数据。写入的数据存储在buf中。当数据写入完毕函数才返回。任何时间都只能存在一个同步写入。 如果retCount的值为VI_NULL将不返回写入数据长度值。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viWriteAsync
原型 | ViStatus viWriteAsync(ViSession vi, ViBuf buf, ViUInt32 count, ViJobId jobId); 注意:在安捷伦设备中将调用同步写入。 | ||||||||||||||||||||
描述 | 异步写入数据。需要写入的数据存放在buf中。当数据写入完毕函数才返回。当数据传输完整结束时会触发一个I/O结束事件。 该函数返回一个jobId表示该操作的标识符,可以使用viTerminate函数传入jobId终止或者等待I/O结束事件来确定异步读操作完成。 | ||||||||||||||||||||
参数 |
| ||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viWriteFromFile
原型 | ViStatus viWriteFromFile (ViSession vi, ViConstString fileName, ViUInt32 count, ViUInt32 retCount); | ||||||||||||||||||||||||||||||||||||||||||||||||
描述 | 从一个指定的文件中获取数据并同步写入设备中。指定的fileName是以只读模式打开读取数据(读取全部数据或者数据长度达到count的值)。读取到的数据都将写入到设备中。该函数仅当操作完成才结束返回。 该操作通常是发送已经经过处理的数据。VISA以ANSI C(标准C)文件操作,所以viWriteFromFile模式一般都是”rb”。如果retCount参数设为VI_NULL,函数将不返回实际发送的数据长度,此操作常用于只需知道是否成功的操作。 | ||||||||||||||||||||||||||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viPrintf
原型 | ViStatus viPrintf(ViSession vi, ViString writeFmt, arg1, arg2,...); | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
描述 | 格式化字符串并发送格式化后的字符串给设备。(字符串格式化可以参照MFC里CString类中的Format函数。) 不能在同一资源上同时使用viWrite和viPrintf函数。 部分VSIA函数的参数是可变的(如viPrintf, viScanf和viQueryf),导致VB不能调用。用户可以使用与这些函数功能相当的函数代替。 writeFmt参数可以包含普通字符、一般格式化字符和特殊字符。普通字符(包括空格)书写方式与平常一样,不用做任何修改。特殊字符则要在该字符前面加一个反斜杠( \ );格式化字符由百分号( % )和操作标志组成,操作标志后面介绍。 特殊字符 参照下表:
格式化字符 格式化说明符转换是根据后面的参数值来进行改变和格式化的。格式化完成后直接发送给设备。格式化字符串语法如下: % [ arraySize , ][ flags ] [ width ] [ . precision ] [ F | N | h | l ] type arraySize表示数组的大小,逗号表示数组修饰符。arraySize可以是常量,也可以用*代替。*代替需要增加一个参数表示arraySize的值。只支持type 为d和f。 flags表示规定输出格式,可用符号如下:
width表示控制显示数值的宽度,取值和含义如下:
precision用于控制小数点后面的位数,取值和含义如下:
F | N | h | l表示指针是否是远指针或整数是否是长整数。F表示远指针,N表示近指针,h表示短整数或单精度浮点数,l表示长整数或双精度浮点数。 type可用符号如下:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viScanf
原型 | ViStatus viScanf(ViSession vi, ViString readFmt, arg1, arg2,...); | |||||||||||||||||||||||||||||||||||
描述 | 这操作从设备读取一个字符串,然后格式化后保存值arg变量中。格式字符串包含说明符,空格字符和普通字符。 VISA中参数不确定的函数(如viPrintf, viScanf, 和 viQueryf)不能被VB调用。可以用功能相似的viVPrintf, viVScanf, 和viVQueryf函数代替。 隐式分割符(空格符,制表符,换行符,回车符)是被忽略的,除非是%c和%[]。除’%’外所有普通字符应该与从设备读取到的字符相匹配。 格式字符串的语法格式如下: % [ , arraySize ] [ width ] [ F | N | h | l ] type arraySize表示返回数组的大小,逗号表示数组修饰符。arraySize可以是常量,也可以用#代替。#表示把返回的数组大小保存到一个参数中。只支持type 为d和f。 width表示控制显示数值的宽度,取值和含义如下:
F | N | h | l表示指针是否是远指针或整数是否是长整数。F表示远指针,N表示近指针,h表示短整数或单精度浮点数,l表示长整数或双精度浮点数。 type可用符号如下:
viScanf函数以END结束符结尾或者所有格式字符都匹配完成。如果碰到一个不匹配的字符该函数也将结束,所以先在检测格式化字符串是否匹配前查找END符。 还有在格式化完成后在缓冲区还残留一些数据的话,这些数据将留个下一个viScanf函数使用。 | |||||||||||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viQueryf
原型 | ViStatus viQueryf(ViSession vi, ViString writeFmt, ViString readFmt, arg1, arg2,...); | |||||||||||||||||||||||||||
描述 | 这函数执行一个格式化写和进行一个读取操作请求。这函数提供一个机制“发送,然后读取”一个典型的从设备获取数据的命令。读取是在发送命令后立即执行的。 该函数相当于viPrintf函数和viScanf函数结合起来。arg先匹配writeFmt,然后在匹配readFmt。具体格式化格式请参考viPrintf函数和viScanf函数的说明。 该函数的返回值和viPrintf, viScanf, viFlush一样。 VISA中参数不确定的函数(如viPrintf, viScanf, 和 viQueryf)不能被VB调用。可以用功能相似的viVPrintf, viVScanf, 和viVQueryf函数代替。 | |||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
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_STATE和VI_ERROR_NSUP_ATTR_STATE都指明传递的值不是有效值。除特殊情况外,一般都返回错误代码VI_ERROR_NSUP_ATTR_STATE,如果返回完成代码VI_WARN_NSUP_ATTR_STATE表示不支持传递的值,但操作没有失败。 | ||||||||||||||||||||||||
参数 |
| ||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
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); | ||||||||||||||||
描述 | 返回指定对象的指定属性值。 | ||||||||||||||||
参数 |
| ||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viLock
原型 | ViStatus viLock(ViSession vi, ViAccessMode lockType, ViUInt32 timeout, ViKeyId requestedKey, ViKeyId accessKey); 注意:viLock函数不支持网络设备。 | |||||||||||||||||||||||||||
描述 | 该函数用于给一个资源加锁,加锁后可以使其他会话无法访问被加锁的资源。其他会话在访问被加锁的资源的时候会等待一段时间,如果等待结束资源还没解锁访问将返回一个错误。 共享锁能被一个或者多个会话加载在一个资源上,构成嵌套锁。 当lockType为VI_EXCLUSIVE_LOCK时,requestedKey和accessKey是无效的,应该设置为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时才为真正解锁。 | |||||||||||||||||||||||||||
参数 |
| |||||||||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viUnLock
原型 | ViStatus viUnLock(ViSession vi); | ||||||||||||||||||
描述 | 用于释放以前使用viLock函数加的锁。 | ||||||||||||||||||
参数 |
| ||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
viInstallHandler
原型 | ViStatus viInstallHandler(ViSession vi, ViEventType eventType, ViHndlr handler, ViAddr userHandle); | ||||||||||||||||||||
描述 | 该函数给一个会话安装事件回调函数。 | ||||||||||||||||||||
参数 |
| ||||||||||||||||||||
返回值 | 返回值为函数运行结果。
|
属性
一般的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_EVENT_VXI_SIGP
描述 | 设备发送的服务请求收到 | |||||||||||||||
属性 |
|
VI_EVENT_TRIG
描述 | 触发中断收到,对VISA, 唯一可以被感知的触发是VXI硬件触发。 | |||||||||||||||
属性 |
|
VI_EVENT_IO_COMPLETION
描述 | 异步操作完成。 | ||||||||||||||||||||||||||||||||||||||||
属性 |
|