l 信号功率分为三种:CW波功率、脉冲波功率、包络波功率
l 脉冲波功率要求脉冲是有周期,如果没有周期,则测的不准
l SCPI命令查询结果有3种方式:MEASure、READ、FETCH。FETCH不用等待count完成就取平均数,READ和MEASure都要等。READ可以指定count值,MEASure不可以。
l 功率计有三种触发模式:Free Run、Single Shot、Continuous Triger Mode。Free Run模式。功率计一直在取样工作;Single Shot模式下只工作一次,Continuous Triger模式下等待trigger触发事件。
l 功率计都提供两种测量方式:Average、Normal。Normal用来测量非周期信号,Average测试周期信号
l 功率计有3种可行的测量速度:Normal、Double、Fast。默认是Normal,Double是Normal的两倍,但不一定都支持,Fast最快,但精度低。
本文档存在的目的并不是详尽的介绍到参考书目的层次,而是纵览的让读者以最快的速度掌握测量设备的编程理论。
现代的安捷伦的设备编程,无论做任何的设备,都需要首先安装IOLibSuite,这个安装包包括三个软件实体:。。。。。。。。
解释该三个实体的关系和内容
该软件工作在IOLibSuite之上,其主要功能是相当于一个SCPI命令的IDE,并且可以从该IDE生成适用于其他各种编程方式的代码。
在SCPI之前的标准是IEEE 488.2,最新版的SCPI是99版的,99版的SCPI命令兼容IEEE 488.2中定义的基本命令,其定义的可选命令在SCPI中也不是必须的。
SCPI中(也存在于IEEE 488.2)定义了两种命令执行模式:堆叠和顺序。顺序模型必须要执行完上一条命令才能执行下一条,堆叠式可以并行执行。并且,有3个基本命令专门用来同步堆叠式的其他命令(*OPC、*OPC?、*WAI),这三个基本命令,即使在SCPI命令集中没有提供堆叠命令,也必须要提供者三条命令。
每一个堆叠式命令都和一个Pending Operation flag(POF)关联,当其在执行时该flag为true,执行完毕或者中断执行该flag为false。所有堆叠命令共享一个全局的No Operation Pending flag(NOPF)。有任何一个堆叠命令的POF为true,NOPF为false;没有堆叠命令在执行(所有POF为false),NOPF为true。并且,允许实现SCPI的设备指定某个堆叠命令不予NOPF关联。
SCPI命令有两种前缀:*表示普通命令,:表示设备相关命令。后缀只有?,表示查询。命令的总长度不超过12个字符。设备相关的命令都有短版和长版两种写法,长版的写法是命令的全称的前几个单词的第一个字母和最后一个单词,例如:relative velocity的长版为RVELOCITY。短版是长版的前4个字符,例如FREE的长版为FREE,短版写法也为FREE,而RVELOCITY的短版为RVEL。经常看到写法如RVELocity,只是用于突出前面的大写为短版写法,SCPI不区分大小写。特殊的,如果长版的第四个字符是元音字符,则短版为长版的前三个字符,例如SWEep。
无论是短版还是长版的写法,在最后都可以跟数字,这里的后缀可以用来区分该命令的作用对象,例如多个信道,后缀的1、2、3分别表示作用于这三个信道。
SCPI的命令是树形组装的,例如FREQuency:CENTer,每个设备都其命令集(通用命令是都支持的),也就是说每个设备都有其命令树,所有功能的组织和命名都在该命令树中完成。
对一个命令的定义通常采用上述格式,这是个两级树,FREQuency:SPAN 可以引用到类型为Boolean的SPAN域。[]表示可选,所以在设置CW域时,可以用FREQuency:CW引用,也可直接用FREQuency引用。如果没有定义[]单独的FREQuency是没有意义的。
查询命令在命令后加?,这种命令发送给设备后,设备的状态不应该发生任何变化(MEASurement除外)。
由于SCPI命令是分级的,各级都可以指定参数,而参数列表只有一个,这时就需要在参数列表中对参数作用的层次进行区分。每层的命令参数用()包含,最右的命令不需要,各层之间用逗号分隔。如果对应的层次不存在,该层的参数也不需要存在。
例如如下的
MEASure:
[:<presentation layer>]
[:<fundamental measurement layer>]
:<measurement function>?
[[[(<presentation parameters)>],
(<fundamental measurement parameters>)],
<measurement function parameters>]
[,source list]
命令可以为:MEASure:ARRay:VOLTage:RISE:TIME? (100),(5V),10,90,5MS。其中ARRay为presentation layer,VOLTage为fundamentalmeasurement layer,RISE:TIME为measurement function。10,90,5MS就对应了最右侧的measurement function 的parameters。
如果不需要指定中间两级的参数,由于这两级都有中括号,表明其可以不写出。还可以这样写:MEASure:RISE:TIME? 10,90,5MS。
其中10,90是表示RISE的范围,5MS表示TIME。
SCPI有5种表达式:数值表达式、信道列表、数值列表、数据交换格式表达式、设备说明表达式。数值表达式用于执行数据的运算,信道列表用于表示命令作用的信道列表,数值列表就是数值的范围,这三种表达式都用于命令的参数。数据交换格式表达式用于表示PC和仪器交换数据的格式,设备说明表达式用于说明设备类型(此处有待商榷)
信道列表用@开头,(@2)表示2信道,(@1,3,:5,9)表示同时测量1、3、4、5、9信道,(@1),(@2)表示从1信道到2信道的测试,(@1,2),(@3,4)表示同时测量1到3信道和2到4信道。
所有支持SCPI的设备都必须包含三个状态报告寄存器:QUEStionable Status、OPERation Status、Standard Event Status Register。此外,还有一些细节的寄存器,各个寄存器之间有级联的关系,细节的寄存器的任何一位被触发都可以导致归总寄存器的某一位被触发。
OPERation Status寄存器表示设备正在进行的状态,各位分别的意义为:
l 0-CALIbrating:设备正在进行校正
l 1-SETTing:设备正在等待命令
l 2-RANGing:设备正在改变范围
l 3-SWEping:一个sweep正在进行
l 4-MEASuring:设备正在进行测量
l 5-Waiting fpr TRIG:设备正在触发模式等待触发条件发生
l 6-CORRecting:设备正在进行校正
l 13-INSTrument Summary Bit:多个信道中的一个正在报告OPERtional Status的状态
l 14-PROGram running:一个用户定义的程序正在执行
QUEStionable Status,这个寄存器的位名称大都以Summery开头,表明其后可以跟随更细节的寄存器描述,甚至多个信道状态的并行合并,本寄存器包括:
l 0:-Summary of VOLTage
l 1:Summary of CURRent
l 2-Summary of TIME
l 3-Summary of POWer
l 4—Summery of TEMPerature
l 5-Summery of FREQuency:表示频率有问题,其后可能接子寄存器,详细的描述是什么问题。例如循环没有锁定、参考频率丢失
l 6-Summart of PHASe
l 7-Summary of MODUlation
l 8-Summary ofCALIbration
l 13-INSTrument Summery:通过这个位实现级联复杂的设备状态报告
l 14-Command Warning:表示发生了非致命的命令执行错误,例如参数被忽略
*RST让设备回复等待命令发来执行的默认状态,但是该命令不清状态寄存器。状态寄存器靠*CLS清除。
SCPI定义了一套设备模型,将一个设备分为若干模块,并且对各个模块进行了定义。设备可以实现预定义模块的必须和可选部分。也即SCPI也同时定义了设备的控制接口。
上图为总的设备模型,每个模块又可以细分为子功能模块。数据流是实线箭头,控制流是虚线箭头。
Signal Routing是设备的入口模块,如果有多个入口,这个模块和其对应的SCPI命令就可以指定信号在这些接口中怎么走。但是如果连接是固定的(只有一个接口),那么这个模块就不是必要的。
MEASurement模块是所有测量设备的核心模块,包括INPut、SENSe、CALCulate三个子模块。这三个子模块的具体功能在不同的设备中会有所不同。但是大体的,INPut负责处理输入的物理信号,例如过滤、贝叶斯、频率转换和衰减;SENSe负责将输入的物理信号转化为内部形式,例如范围、分辨率、门限时间等;CALCulate负责经过处理后的数据的计算,得到用户可用的结果。由于测量设备的本质是从电信号中获得数值信息,所以SENSe步的为提取各种参数做的信号处理由其重要,这也是所有测量设备都必须具备的模块。
这个模块的作用于测量是相反的,这个模块将数字描述的信号转化为实际的物理信号。
其也包括三个子模块:CALCulate、SOURce、OUTput。OUTPut模块与Input模块功能相同,但是作用相反。其对SOURce产生的信号进行过滤、贝叶斯、频率转化和衰减。SOURce模块的功能是将数字定义的信号转化为物理信号。CALCulate模块是将用户输入的数据转化为SOURce能理解的参数描述。
TRIGger模块用于有触发器的情形。用于产生触发信号控制Signal Routing、Signal Generation和Measurement三个模块的工作。
这个模块的作用是在设备内存储数据,内存在每个设备中都有,但是如果该内存不受用户控制,则该设备没必要实现MEMory子系统。用户可以通过MEMory模块对应的命令树对内存进行操作,例如存储计算后的数据,或存放用户定义的其他数据。
这个模块的作用是转化用户数据和内部数据的表示方法,例如ASCII转化为内部的表示方法。不改变数据内容,但是换一种表达方式。
命令子系统作用于设备模型,定义的诸多命令针对不同模型的不同模块,由于模块可以组成森林结构,命令按照模块也组织成森林结构。由于不同的设备会实现不同的设备模型模块,所以也就相当于不同的设备也实现了不同的命令树。
SCPI的命令是分层次的,有上层命令和下层命令。上层命令一般是下层命令的复合命令。例如测量命令MEASure,就是CONFigure和READ?的复合命令,而READ?又是INITiate和FETCH?的复合命令。使用上层命令的好处是通用性,例如MEASure命令是设备无关的,下层的CONFigure和READ?就需要了解设备的具体情况使用。
一般的,每个设备模型中的模块(可能是顶级模块,也可能是次级模块),都对应命令子系统,每个命令子系统就是一个SCPI命令树。通过树形结构的命令,实现分模块的命令组织。
最主要的命令树是MEASurement,这是所有测量设备都会存在的。其他的模块如信号产生器和触发器都根据设备的不同而不同。
测量模块包括INPut、SENSe、CALCulate三个子模块,对应的,SCPI命令子系统也包括这三个:CALCulate子系统、INPut子系统、SENSe子系统。在这之上,还有个总体的命令MEASure。
MEASure?可以一个命令完成设备的设备的配置、测量和返回数据,该命令是设备无关的,但是缺少更精细的控制。为此,开发者可以分别调用其两个组成命令,完成同样的过程:CONFigure和READ?。CONFigure提供更精细的配置细节,而READ?完成后续的过程。而READ?可以进一步分为INITiate[:IMMediate]和FETCh?。INITiate执行测量,(//TODO 不太清楚),FETCh?可以用来获取测量结果和对结果进行后续处理。通过分立的调用FETCh?可以不用再次进行测量就可以多次获取。
MEASure?的命令格式为:MEASure:<function>?<paramters>[,<source list>]。所以SCPI也只定义了查询版的MEASure命令。其命令相当于分立的调用:
ABORt;
CONFigure:<function> <parameters>;
READ:<function>? <parameters> [,<source list>]
该命令的返回值类型由FORMat命令定义。
function是一系列的命令,后续的CONFigure、READ?、FETCh?都是共享同样的function。function都是组织成层次结构的,基本的层次是:
MEASure:
[:<presentation layer>]
[:<fundamental measurement layer>]
:<measurement function>?
[[[(<presentation parameters)>],
(<fundamental measurement parameters>)],
<measurement function parameters>]
[,source list]
也就是说中间的表示层和测量层都是可选的([]表示可选),后续的实际测量函数是必须的。表示层是数据的表达方式,包括数组(ARRay)和标量(SCALar)两种。
基础测量层包括VOLTage、CURRent、POWer、RESistance、FRESistance、TEMPerature。通过名称就可以看出意义。其中FRESistance表示four RESistance,四线阻抗。
树叶命令集
measurement function有很多,针对不同的上层命令可以分为不同的模块。
最基本的是简单测试命令:AC、DC、FREQuency(BURSt、PRF),PERiod、PHAse。在括号内的表示是下层子命令。另一个是波形测量模块:AMPLitude、LOW、HIGH、RISE(TIME、OVERshoot、PREShoot)、RTIME、FALL(TIMe、OVERshoot、PREShoot)、FTIME、PWIDth、NWIDth等,细节的命令内容,可以参考设备手册和SCPi的spec。
//TODO画个波形图
CONFigure命令可以对设备的各个模块进行配置,但是该配置会使上次测量的数据结果变失效,所有CONFigure之后最好不要直接调用FETCh?,因为获得数据可能不对,要调用INITiate进行测量之后数据才可以稳定。但是对于display和format模块调用CONFigure不会有改变数据的副作用。
使用CONFigure的查询版本CONFigure?可以返回上次CONFigure和MEASure?的配置结果。但是该结果并不一定是当前执行命令的配置,所以执行命令前最好先配置。
CONFigure命令的格式是CONFigure:<function> <parameters>[,<source list>] 。例如CONFIGURE:VOLTage:AC 5,.001 @2,VOLTage:AC为CONFigure的子命令,对应定义的function,5,.001 为命令的参数,对应定义的parameters,@2为选择的信道,这个数据格式是channel_list格式,可指定多个信道。
CONFIgure后面跟的子命令与MEASure相同。
FETCh?命令执行数据的获取(在执行了INITiate启动了测量之后),然后将数据放到设备的输出缓存。如果当前的测量还没有完成(INITiate),数据还不可用,则FETCh?会阻塞等待数据完成。数据在以下情况会失效(FETCh?获得不到之前测量的正确数据):
l *RST执行
l INITiate执行
l 对signal routing、measurement、signal generation、trigger blocks调用了CONFigure
l SENSor模块开始新输入
FETCh?的命令格式为:FETCH[:<function>]?<parameters>[,<source list>]。可以看出FETCh?只有查询模式,没有对应的配置版本的命令。
//TODO 其他的命令子系统
使用linux
使用驱动
使用