📄 3.虚拟仪器系统io接口软件.txt
字号:
VISA仪器控制组织器资源 VICO VI_RSRC_VISA_IC_ORG
写资源 WR VI_RSRC_WR
读资源 RD VI_RSRC_RD
格式化I/O资源 FIO VI_RSRC_FMT_IO
触发资源 TRIG VI_RSRC_TRIG
清除资源 CLR VI_RSRC_CLR
状态/服务请求资源 SRQ VI_RSRC_SRQ
高级存取资源 HILA VI_RSRC_HL_ACC
低级存取资源 LOLA VI_RSRC_LL_ACC
器件特定命令资源 DEVC VI_RSRC_DEV_CMD
CPU接口资源 CPUI VI_RSRC_CPU_INTF
GPIB总线接口控制资源 GBIC VI_RSRC_GPIB_INTF
VXI总线器件配置资源 VXDC VI_RSRC_VXI_DEV_CONF
VXI总线接口控制资源 VXIC VI_RSRC_VXI_INTF
VXI总线零槽资源 VXS0 VI_RSRC_VXI_SLOT_0
VXI总线系统中断资源 VXSI VI_RSRC_SYS_INTR
VXI总线信号处理器资源 VXSP VI_RSRC_SIG_PROCESSOR
VXI总线信号资源 VXS VI_RSRC_VXI_SIG
VXI总线中断资源 VXIN VI_RSRC_VXI_INTR
VXI总线扩展器接口资源 VXEI VI_RSRC_VXI_EXTDR
异步串行总线接口控制资源 ASIC VI_RSRC_ASRL_INTF
表3.2 VISA资源类型定义
下面对VISA资源描述格式中各部分进行逐一分析:
1、 资源概述:简要说明资源所要实现的功能,一般不针对特定仪器类型或接口进
行描述,只提供一个通用概念。
2、 资源属性表及属性描述:资源属性表列出了资源所有属性,并在以后的属性描
述中作较详细的说明。资源属性表如表3.3所示。
属性符号名 存取特性 数据类型 取值范围
读/写特性 私有/公有特性
表3.3 VISA资源属性表
l 属性符号名:用于标识属性。
l 存取特性:包括读/写特性与私有/公有特性。读/写特性可选择R/W(可读可写)
与RO(只读);私有/公有特性可选择Local(对话通道私有)与Global(资源内所
有对话通道公有)。
l 数据类型:VISA数据类型是独立于编程语言定义的,在具体编程中调用VISA函数
进行实际操作时,VISA数据类型与具体数据类型将一一映射。VISA定义了两类数据
类型:基本数据类型与复杂数据类型。分别见表3.4和表3.5。
l 取值范围:定义了该属性数据的取值范围。
基本数据类型 数据类型描述 基本数据类型 数据类型描述
ViChar 字符类型 ViInt32 32位整型
ViPChar 字符指针类型 ViPInt32 32位整型指针类型
ViByte 字节类型 ViInt64 64位整型
ViPByte 字节指针类型 ViPInt64 64位整型指针类型
ViString 字符串类型 ViUInt8 8位无符号整型
ViPString 字符串指针类型 ViPUInt8 8位无符号整型指针类型
ViBoolean 布尔类型 ViUInt16 16位无符号整型
ViPBoolean 布尔指针类型 ViPUInt16 16位无符号整型指针类型
ViInt8 8位整型 ViUInt32 32位无符号整型
ViPInt8 8位整型指针类型 ViPUInt32 32位无符号整型指针类型
ViInt16 16位整型 ViUInt64 64位无符号整型
ViPInt16 16位整型指针类型 ViPUInt64 64位无符号整型指针类型
ViReal32 32位实型 ViReal64 64位实型
ViPReal32 32位实型指针类型 ViPReal64 64位实型指针类型
表3.4 VISA基本数据类型
复杂数据类型 数据类型描述 复杂数据类型 数据类型描述
ViRsrc 资源标识类型 ViHndlr 操作句柄类型
ViPRsrc ViRsrc指针类型 ViPHndlr ViHndlr指针类型
ViStatus 返回状态值类型 ViVAList 参数列类型
ViPStatus ViStatus指针类型 ViJobId 操作请求类型
ViBuf 数据块类型 ViPJobId ViJobId指针类型
ViPBuf ViBuf指针类型 ViJobStatus 操作请求状态类型
ViAddr 逻辑地址类型 ViPJobStatus ViJobStatus指针类型
ViPAddr ViAddr指针类型 ViSpaceInfo 内存映射类型
ViSession 资源对话通道类型 ViPhysAddr 物理地址类型
ViPSession ViSession指针类型 ViSigMask 信号过滤类型
ViVersion 资源版本类型 ViIntrMask 中断屏蔽类型
ViPVersion ViVersion指针类型 ViBusAddress 总线地址类型
ViObject 资源对象类型 ViBusSize 地址长度类型
ViPObject ViObject指针类型 ViAttr 资源属性类型
ViRsrcList 资源标识列类型 ViAttrState 资源属性值类型
ViClass 资源类类型 ViLock 资源进程/线程管理类型
ViEvent 资源事件类型 ViPLock ViLock指针类型
ViPEvent ViEvent指针类型 ViEventType 资源事件类型类型
ViAccessMode 控制存取机制类型 ViPEventType ViEventType 指针类型
表3.5 VISA复杂数据类型
3、 资源事件集:VISA定义了一种运行机制,用于在一定条件下通知应用程序一个
行为的发生,这些条件与发生被称为VISA事件。VISA事件模型如图3.2所示。
VISA事件模型由三部分组成。1)事件捕捉与通知:资源感知到事件发生,并与对
话通道相联系;2)事件请求与处理:告知应用程序事件已发生,VISA定义了事件
处理机制;3)事件响应:根据协议对事件进行响应。
图3.2 VISA事件模型
根据VISA事件引发的原因,事件类型可分为以下几种:
l 由硬件请求产生:如GPIB器件SRQ信号有效。
l 由硬件响应产生:如VXI总线中的SYSFAIL线有效。
l 由于资源行为的起始与结束所产生:如应用程序想知道系统服务是处于在线状态
还是离线状态。
l 由于资源转换到不正常操作,必须终止正常操作所产生的事件。
l 在应用程序正常运行过程中的错误散转情况。
在VISA中,定义了两种事件处理机制。一种是事件排队方式(Queuing),它主要
分两步进行:首先允许特定事件的处理机制,然后在一定时刻点去查询事件是否已
经发生(调用VISA中的viWaitOnEvent()函数,事件类型见VI_EVENT_类参数),在
事件发生之后,必须关闭特定事件的处理机制,以防止资源溢出。例3.4所示为用
事件排队方式处理VISA事件。
例3.4 排队方式处理VISA事件
另一种事件处理方式为回调方式(Callback),也即中断方式。它首先安装回调句
柄,然后在程序中允许事件处理机制,并应编写相应的中断子程序。利用回调方式
进行处理的事件类型主要有以下几种:
l VI_EVENT_SERVICE_REQ:该事件表示VXI器件服务请求
l VI_EVENT_TRIG:该事件表示从VXI器件接收到硬件触发信号
l VI_EVENT_VXI_SIGP:该事件表示从VXI器件接收到总线信号或总线中断信号
例3.5、例3.6与例3.7分别是利用回调方式对各种类型事件进行处理的实例,其中
例3.5是对HP公司推出的VXI数字万用表模块进行服务请求事件的处理,而例3.6与
例3.7是对浙江大学数字所自主开发的VXI数字输入/输出模块进行触发事件与总线
中断事件处理。事实上,这几种事件处理示例可直接推广应用到其它的消息基器件
与寄存器基器件中。
例3.5 利用回调方式对VXI模块进行服务请求事件处理:
例3.5 回调方式进行服务请求事件处理
在这种模式中,主程序安装的事件句柄类型为VI_EVENT_SERVICE_REQ,并须将服务
请求使能。当服务请求事件发生时,安装的事件句柄被激活,系统进入中断子程序
。中断子程序首先对事件类型进行判断,然后进行具体事件处理。在主程序退回时
,必须关闭事件允许机制,并将安装的事件句柄进行卸载。
例3.6 利用回调方式对VXI模块进行触发事件处理:
例3.6 回调方式进行触发事件处理
在这种模式中,主程序安装的事件句柄类型为VI_EVENT_TRIG,并须将服务请求使
能。本主程序利用设置仪器属性的方式进行触发总线的选择与有效,并利用软件进
行同步触发信号线TTL0。当触发事件发生时,安装的事件句柄被激活,系统进入中
断子程序。中断子程序首先对事件类型进行判断,然后进行具体事件处理。需要注
意的是,在中断子程序中获取事件的句柄不再是仪器句柄vi,而是ViEvent类型的
事件句柄ctx。在主程序退回时,必须将安装的事件句柄进行卸载。
例3.7 利用回调方式对VXI模块进行总线中断事件处理:
例3.7 回调方式进行总线中断事件处理
在这种模式中,主程序安装的事件句柄类型为VI_EVENT_VXI_SIGP,并须将服务请
求使能。本主程序直接对器件内部控制寄存器进行写操作,允许中断产生并强制中
断产生。当触发事件发生时,安装的事件句柄被激活,系统进入中断子程序。中断
子程序首先对事件类型进行判断,然后进行具体事件处理。同样,在中断子程序中
获取事件的句柄不再是仪器句柄vi,而是ViEvent类型的事件句柄ctx。在主程序退
回时,必须将安装的事件句柄进行卸载。
4、 资源操作集:包括了一系列VISA资源操作。而每个操作又分别包括以下各项:
l 名字(含形参名):用于操作函数原型的简单描述。
l 目标:简要描述相应的操作功能。
l 参数表:列出了操作中所有参数的相关信息,包括参数名、输入/输出方向、参
数数据类型及参数描述。操作参数表如表3.6所示。
参数名 输入/输出方向 数据类型 描述
表3.6资源操作参数表
l 返回状态值:VISA资源操作返回状态值类型是唯一的,即为ViStatus。操作返回
状态值包括完成代码与错误代码两类。
l 描述:对每个函数的功能及其中关键参数的含义等作较详细的描述。
l 相关操作项:可参考的其它相关操作。
l 实现要求:操作实现时应满足的一些条件与备注要求。
3.3 VISA资源定义
3.3.1 VISA资源模板
VISA资源模板相当于面向对象程序(OOP)中的基类,VISA其它资源类全部是它的
子类。VISA资源模板上本身没有定义资源,它定义的是公共属性、事件与操作,所
有VISA资源全部继承了资源模板的属性、事件与操作。在其它VISA资源定义中,实
际上是定义了资源特有的属性、事件与操作,VISA资源真正拥有的属性、事件与操
作包括资源模板定义的公共部分与资源特有的私有部分。
VISA资源模板中主要定义了以下几个共性功能:
l 资源定位与查寻
l 资源创建与删除
l 资源属性读取与修改
l 资源存取模式与权限控制
l 基本通讯服务(包括操作激活与事件报告)
VISA资源模板的定义也包括相应的属性、事件与操作,各自的描述格式与定义方式
与其它VISA资源描述是一致的,这主要是为了其他资源可以方便地从基类继承所有
属性、事件与操作。
资源模板定义的属性如表3.7所示:
属性符号名 存取特性 数据类型 取值范围
读写特性 公私特性
VI_ATTR_RSRC_CLASS 只读 公有 ViClass 无
VI_ATTR_RSRC_NAME 只读 公有 ViString 无
VI_ATTR_RSRC_VERSION 只读 公有 ViVersion 无
VI_ATTR_RSRC_LOCK_STATE 只读 公有
ViUInt16 VI_NO_LOCKVI_NON_EXCLUSIVE_LOCKVI_EXCLUSIVE_LOCK
VI_ATTR_MAX_QUEUE_LENGTH 可读可写 私有 ViUInt32 无
VI_ATTR_QUEUE_TRIP_POINT 可读可写 私有 ViUInt32 无
VI_ATTR_USER_DATA 可读可写 私有 ViAddr 无
表3.7 VISA资源模板属性表
VISA资源模板属性描述:
属性名 描述
VI_ATTR_RSRC_CLASS 资源所属类的标识符
VI_ATTR_RSRC_NAME 资源名标识符
VI_ATTR_RSRC_VERSION 资源版本标识符
VI_ATTR_RSRC_LOCK_STATE 资源存取锁定模式(取值为表3.7中所列三种)
VI_ATTR_MAX_QUEUE_LENGTH 任一时间特定对话通道最大排队的事件长度
VI_ATTR_QUEUE_TRIP_POINT 排队事件的触发点
VI_ATTR_USER_DATA 资源特定对话通道所用的私有数据
资源模板定义的事件如下所示:
事件 说明
VI_EVENT_ALERT 通知应用程序对话通道或资源退出、复位或关闭
VI_EVENT_RSRC_ACTIVE 通知应用程序资源已激活
VI_EVENT_RSRC_INACTIVE 通知应用程序资源未被激活
VI_EVENT_RSRC_LOCK_CHANGED 通知应用程序存取锁定状态已更新
VI_EVENT_QUEUE_FULL 通知应用程序等待操作事件队列已满
VI_EVENT_QUEUE_TRIP 通知应用程序事件等待操作触发点已到
VI_EVENT_RSRC_AVAILABLE 通知应用程序特定资源已有效
资源模板定义的操作如下:
viFindRsrc(vi,expr,accessLink)
viOpen(sesn,rsrcname,accessMode,timeout,vi)
viClose(vi)
viTerminate(vi,target,degree,jobId,immediate,flagFlushData)
viAttachRsrc(vi,rsrcName,refName)
viDetachRsrc(vi,refName)
viSetAttribute(vi,attribute,attrState)
viSetRsrcAttribute(vi,rsrcName,attribute,attrState)
viGetAttribute(vi,attribute,attrState)
viGetRsrcAttribute(vi,attribute,attrState)
viLock(vi,lockType,shareType,timeout,lockId)
viLockRsrc(vi,rsrcName,lockType,shareType,timeout,lockId)
viUnlock(vi,lockId)
viUnlockRsrc(vi,rsrcName,lockId)
viEnableEvent(vi,eventType,mechanism,context)
viDisableEvent(vi,eventType,mechanism)
viQueryEventMech(vi,eventType,mechanism)
viInstallHandler(vi,eventType,handler,userHandle)
viUnInstallHandler(vi,eventType,handler,userHandle)
viQueryHandlers(vi,eventType,handlers,userHandle)
viAcknowledgeEvent(vi,eventType,context)
viWaitOnEvent(vi,eventType,timeout,outContext)
viWaitOnMultipleEvent(vi,eventTypeList,timeout,outContext,
outEventType)
viDiscardEvents(vi,eventType,mechanism)
viGetEventInfo(vi,eventType,context,rsrcName,info)
viRaiseEvent(vi,eventType,context,target)
viEventHandler(vi,eventType,context,userHandle)
下面将分别对各个操作作一详细描述。
1、 viFindRsrc(vi,expr,accessLink)
1) 目标:查询VISA系统,进行资源定位
2) 参数表:
参数名 输入/输出方向 数据类型 描述
vi 输入 ViSession 资源对话通道标识符
expr 输入 ViString 用于资源名匹配的表达式
accessLink 输出 ViRsrcList 资源所在位置列表
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -