第三章 虚拟仪器系统IO接口软件(2)

2019-04-02 11:12

所含每个操作包括: X.4.Y 名字(含形参名) X.4.Y.1 目标 X.4.Y.2 参数表

X.4.Y.3 返回状态值 X.4.Y.4 描述

X.4.Y.5 相关操作项 X.4.Y.6 实现要求

表3.1 VISA资源描述格式 资源 缩写名 标准名

VISA资源管理器资源 VRM VI_RSRC_VISA_RM

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)


第三章 虚拟仪器系统IO接口软件(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:主立井改造施工组织设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: