visa打开与仪器的通信通道称为会话session

Posted littleheadache

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了visa打开与仪器的通信通道称为会话session相关的知识,希望对你有一定的参考价值。

Communication Channels: Sessions
The examples from Introductory Programming Examples used an operation called viOpen() to open communication channels with the instruments. In VISA terminology, this channel is known as a session. A session connects you to the resource you addressed in the viOpen() operation and keeps your communication and attribute settings unique from other sessions to the same resource. In VISA, a resource can have multiple sessions to it from the same program and for interfaces other than Serial, even from other programs simultaneously. Therefore, you must consider some things about the resource to be local, that is, unique to the session, and other things to be global, that is, common for all sessions to the resource.

If you look at the descriptions of the various attributes supported by the VISA resources, you will see that some are marked global (such as VI_ATTR_INTF_TYPE) and others are marked local (such as VI_ATTR_TMO_VALUE). For example, the interface bus that the resource is using to communicate with the device (VI_ATTR_INTF_TYPE) is the same for everyone using that resource and is therefore a global attribute. However, different programs may have different timeout requirements, so the communication timeout value (VI_ATTR_TMO_VALUE) is a local attribute.

Again, look at the message-based communication example. To open communication with the instrument, that is, to create a session to the INSTR Resource, you use the viOpen() operation as shown below:

status = viOpen(defaultRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &instr);

In this case, the interface to which the instrument is connected is important, but only as a means to uniquely identify the instrument. The code above references a GPIB device on bus number 0 with primary address 1. The access mode and timeout values for viOpen() are both VI_NULL. Other values are defined, but VI_NULL is recommended for new users and all instrument drivers.

However, notice the statement has two sessions in the parameter list for viOpen(), defaultRM and instr. Why do you need two sessions? As you will see in a moment, viOpen() is an operation on the Resource Manager, so you must have a communication channel to this resource. However, what you want is a session to the instrument; this is what is returned in instr.

For the entire duration that you communicate with this GPIB instrument, you use the session returned in instr as the communication channel. When you are finished with the communication, you need to close the channel. This is accomplished through the viClose() operation as shown below:

status = viClose(instr);

At this point, the communication channel is closed, but you are still free to open it again or open a session to another device. Notice that you do not need to close a session to open another session. You can have as many sessions to different devices as you want.

沟通渠道: 会话
编程入门实例中的例子使用了一个叫做viOpen()的操作来打开与仪器的通信通道。在VISA术语中,这个通道被称为会话。一个会话将你和你在viOpen()操作中寻址的资源连接起来,并使你的通信和属性设置与同一资源的其他会话保持一致。在VISA中,一个资源可以有多个会话从同一个程序中进入,对于Serial以外的接口,甚至可以同时从其他程序进入。因此,你必须考虑关于资源的一些事情是本地的,即对会话来说是唯一的,而其他事情是全局的,即对资源的所有会话来说是共同的。

如果你看一下VISA资源所支持的各种属性的描述,你会发现有些被标记为全局的(如VI_ATTR_INTF_TYPE),有些被标记为局部的(如VI_ATTR_TMO_VALUE)。例如,资源用来与设备通信的接口总线(VI_ATTR_INTF_TYPE)对使用该资源的每个人来说都是一样的,因此是一个全局属性。然而,不同的程序可能有不同的超时要求,所以通信超时值(VI_ATTR_TMO_VALUE)是一个本地属性。

再一次,看看基于消息的通信例子。为了打开与仪器的通信,也就是创建一个通往INSTR资源的会话,你可以使用viOpen()操作,如下所示:

status = viOpen(defaultRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &instr) ;

在这种情况下,仪器所连接的接口很重要,但只是作为唯一识别仪器的手段。上面的代码引用了一个总线号为0、主地址为1的GPIB设备。viOpen()的访问模式和超时值都是VI_NULL。可以定义其他的值,但对于新用户和所有的仪器驱动程序来说,建议使用VI_NULL。

然而,注意到该语句在viOpen()的参数列表中有两个会话,defaultRM和instr。为什么需要两个会话?稍后你会看到,viOpen()是对资源管理器的操作,所以你必须有一个与这个资源的通信通道。然而,你想要的是一个到仪器的会话;这就是在instr中返回的东西。

在你与这个GPIB仪器通信的整个过程中,你使用instr中返回的会话作为通信通道。当你完成通信后,你需要关闭该通道。这可以通过viClose()操作来完成,如下所示:

status = viClose(instr);

在这一点上,通信通道被关闭了,但是你仍然可以自由地再次打开它或者打开一个会话到另一个设备。注意,你不需要关闭一个会话来打开另一个会话。你可以在不同的设备上有任意多的会话,只要你想。

原文地址:Communication Channels: Sessions - NI

labview与单片机串口通信

labview与单片机串口通信
 
VISA是虚拟仪器软件体系结构的缩写(即Virtual Instruments Software Architecture),实质上是一个I/O口软件库及其规范的总称。
VISA是应用于仪器编程的标准I/0应用程序接口,是工业界通用的仪器驱动器标准API(应用程序接口),采用面向对象编程,具有很好的兼容性、扩展性和独立性。用户可用一个API控制包括VXI、GPIB及串口仪器在内的不同种类的仪器。它还支持多平台工作、多接口控制,是一个多类型的函数库。
在LabVIEW中编写的VISA接口程序,当外部设备变更时,只需要更换几个程序模块即可使用,简单方便而且开发效率高。
在LabVIEW 中利用VISA节点进行串行通信编程。为了方便用户使用,LabVIEW将这些VISA节点单独组成一个子模块,共包含8个节点,分别实现初始化串口、串口写、串口读、中断以及关闭串口等功能。
一、基本步骤
在LabVIEW 中,进行串口通信的基本步骤分为3步:
第一:串口初始化,利用ⅥSA Configure Serial Port.vi节点设定串口的端口号、波特率、停止位、校验位、数据位。
第二:读写串口,利用VISA Read节点和VISA Write节点对串口进行读写。
第三:关闭串口,停止所有读写操作。
二、主要节点介绍
下面介绍一下VISA串口的主要节点及其功能:
1、串口配置
该节点主要用于串口的初始化,如图1所示。
技术分享
图1 串口配置节点
VISA资源名称:指PC的串口名,例:COMl,COM2等。
波特率:串口速率,默认为9600bps。
数据比特:一帧信息中的位数,LabVIEW 中允许5~8位数据,默认为8。
奇偶:奇偶校验位,可选为无校验、奇校验或偶校验,默认为无校验。
停止位:一帧信息中的停止位的位数,可选为1位、1.5位或2位。
流控制:设置传输机制使用的控制类型,可选为None、XON/XOFF软件流控或RTS/CTS硬件流控,默认为None。
终止符:设置一帧数据的结束符,即当接收串口数据时,当收到终止符时,软件自动结束一帧数据接收。
2、串口写入
该节点主要用于写入串口数据,如图2所示。
技术分享

 
图2 串口写入节点
写入缓冲区:串口发送的内容。
3、串口读取
该节点主要用于读取串口中的数据,如图3所示。
 
技术分享

图3 串口读取节点
字节总数:要读取的字节数量。
读取缓冲区:PC串口收到的数据。
返回数:实际读取的字节数,字节总数应大于或等于返回数,否则会丢数。
4、串口关闭
该节点主要用于关闭已打开的串口,释放串口资源,以便串口被其他程序所调用,如图4所示。
 
技术分享

图4 串口关闭节点
三、典型串口程序框图
按照串口编程的3个基本步骤,图5和图6给出了两个典型的串口读写程序框图。图5为读取的字节数为固定值,图中为4个字节,如果串口中数据字节数目不等于4个字节则会出错。图6则是先判断出串口中数据的字节数目,然后将其全部读取出来。相对而言,图6的通用性更好,但是出错的概率也会增大,因为不知道串口发来的数据是否与我们所需要的数据的字节数相等。
 

技术分享
图5 典型串口读写程序框图1

技术分享
 
图6 典型串口读写程序框图2









以上是关于visa打开与仪器的通信通道称为会话session的主要内容,如果未能解决你的问题,请参考以下文章

“会话”与“通道”(JSch 和 sshd)

如何在整个“会话”中保持 Netty NIODatagram 通道打开

Anritsu PyVISA 问题

qt实现visa的仪器类控制

qt实现visa的仪器类控制

qt实现visa的仪器类控制