欢迎!

欢迎使用 Agilent VEE Pro 帮助。点击上面的 Contents 或 Index 按钮可以方便地找到您需要的内容。

现在 Agilent VEE Pro 还提供其他语言版本的帮助。您只需将安装目录下的 vee.chm 重命名为 English.chm，再将您想要的本地化版本的帮助文件重命名为 vee.chm 就可以了。比如，将veeJapanese.chm 重名为 vee.chm。

Agilent VEE Pro 8.0 新增功能

在 Agilent VEE Pro 8.0中所修复的错误

Microsoft/MS-DOS/Windows/MS Windows/Windows NT/Excel/Word/.NET/Outlook/ActiveX/Visual Basic/Visual C# 是微软公司在美国和/或其他国家的商标或注册商标。

PostScript 是Adobe系统公司的商标。

MATLAB 是 MathWorks 公司的注册商标。

National Instruments/NI/LabVIEW/和 SCXI/是国家半导体公司的注册商标。

PXI 是PXI系统联盟的注册商标。

IVI/and IVIplug&play 是IVI Foundation的注册商标。

Pentium Intel 公司在美国的注册商标。

Arial/和 Times New Roman/是Monotype公司在美国的注册商标。

Copyright (c) 1991-2007 Agilent Technologies, Inc.


Agilent VEE Pro 8.0 新功能

Watch Window

Watch Window 使用户在调试时，可以查看和修改变量和输入/输出端的值，之后程序还能用修改后的值继续执行。

点击工具栏上的 [image] 按钮，或选择 View [image] Watch Window 可以打开如下的Watch Window对话框。

详情请参阅 Watch Window

范例

Datatype.vee, Globals.vee, Terminals.vee

Code Completion 和 Code Insight

Code Completion 和 Code Insight 给那些编写 Formula 对象的用户带来了极大的好处因为它可以减少键盘输入和对外部文档的查阅和记忆。无需离开上下文，就可以完成对所需信息的查找，并将其加入程序中。 你甚至可以让 Agilent VEE 替你完成输入。详情请参阅 Code Completion 和 Code Insight。

Color Syntaxing

1. 注释被标记为绿色，常量字符串被标记为深红色，关键字为蓝色。

2. 公式中的错误被标记为红色波浪线。

3. 括号为灰色的框。

Code Completion 和 Code Insight 支持的对象

支持的对象

Code Completion

  • .NET objects

  • Named VEE Objects

  • COM objects

  • Built-in Constants

  • Built-in Functions

  • Records

Code Insight

  • Member functions of .NET and COM objects

  • Local UserFunctions

  • Imported UserFunctions

  • Built-in Functions

  • Imported Remote Functions

  • Imported Compiled Functions

Programmatic Properties

Programmatic properties 帮助用户更快地常见更好的GUI。它允许用户在程序运行时动态地读取/设置VEE对象, .NET 对象, 和 COM 对象的属性。请参阅范例程序ProgrammaticPropertyDemo.vee for a quick demo of this powerful new feature.

详情请参阅 To Change Properties Programmatically 和 To Change Object's Name and Scope。

范例

ProgrammaticPropertyDemo.vee DemoTabIndexChangeDemo.vee

Minimap

Minimap是整个详细视图的一个略图，其中的红色矩形框为当前程序可视部分。单击工具栏上的 [image] 按钮或选择View [image] Minimap可以打开 Minimap。 下图为一个 Minimap 的示例。

红色矩形框显示的是当前可视部分在整个详细视图的相对位置。点击Minimap上的一个位置，详细视图就可以迅速地跳到相应的位置。详情请参阅 Minimap 。

Home按钮

Agilent VEE 8.0 在工具栏上新增了一个Home [image] 按钮，它可以将快速地定位到当前上下文(Main, UserFunctions, 或 UserObjects)的左上角。

新的执行模式和数据类型

从8.0版开始，Agilent VEE支持两种新的数据类型- Int64 和 Boolean 以及一个新的执行模式（Execution Mode）- VEE 8。

虽然从5.0版开始，就可以把 TRUE 和 FALSE 当作常量来使用，但是那时候，TRUE 和 False都不是真正的 Boolean 常量。它们还是 Int32类型的。从Agilent VEE 8.0开始，这两个常量就是真正地Boolean型了。

Agilent VEE 8.0 支持的逻辑运算有 AND, OR, NOT, XOR, ==, 和 !=。

此外，Agilent VEE 8.0 也在Compiled Functions中支持 Boolean 类型。用户可以将 VEE_BOOL 作为返回类型和Complied Function的参数类型来使用。VEE_BOOL被作为Boolean来处理。详情请参阅 Boolean。

与Boolean有关的新菜单项和内置函数:

  • Data => Constant => Boolean

  • Data => Constant => Boolean Array

  • Data => Alloc Array => Boolean

  • asBoolean(x)

Int64可以表示最高精度的整数。Agilent VEE 提供两个built-in 数字常量来表示最大和最小的 int64 的值：MaxInt64 和 MinInt64。常量在不同 Execution Mode 下被解释为不同的数据类型。详情请参阅 Int64。

与Int64有关的新菜单项和内置函数:

  • Data => Constant => Int64

  • Data => Constant => Int64 Array

  • Data => Alloc Array => Int64

  • asInt64(x)

统一为VISA型设备

Agilent VEE 8.0 开始采用统一的方法(VISA) 来声明和使用I/O 设备，旧的不一致的I/O 设备的声明和使用方法（一些设备使用SICL 方法，一些设备使用VISA 方法）将被逐渐淘汰。虽然我们鼓励用户使用新型的设备，但是我们仍会对旧设备提供兼容支持。详情请参阅here。

在一个图形对象上通过一个输入端显示多条轨迹

这一功能可以让用户在事先不知道将要显示的轨迹的数目时，也能在Agilent VEE 的图形对象上动态地将这些轨迹( 一组轨迹) 显示出来。

图形对象的详细视图的属性中新增了一项被称为'MatrixInput'的Boolean属性。当这个MatrixInput属性设为True时，这个对象就可以接受一个 2D 数组作为输入数据并同时显示多条轨迹。这个数据容器从一个输入端输入。图形对象会知道一共有多少条轨迹（最多12条）要显示并给它们以合适数量的图例，然后绘制出点（列）。该属性在程序运行时不能来回切换，所以用户必须在编写Agilent VEE 程序时就清楚以后是否要用到这种新功能。h.

详情请参阅以下范例 2dXyTrace.vee, MatrixInputStripChart.vee.

增强的多事务操作功能

本功能增强了所有基于事务的Agilent VEE 对象（比如 Direct IO) 的操作。现在，用户不仅可以使用标准的快捷键对多个事务同时进行诸如复制、删除和选择等许多操作，还可以使用标准的快捷键对事务进行上移和下移。

主要新增功能包括：

* 任意选择，删除，复制和粘贴多个事务。

* Undo/Redo Add/ Insert/ Delete/ Cut/ Paste/ Edit/ Move up/ Move down 操作

* 标准 Windows快捷键

CTRL+X 将选择的事务剪切到"cut-and-paste"缓冲区(对象菜单 [image] Cut Trans)。

CTRL+V 将选择的事务从"cut-and-paste"缓冲区剪贴到当前所指位置(对象菜单 [image] Paste Trans)。

CTRL+C 将选择的事务复制到"cut-and-paste"缓冲区(对象菜单 [image] Copy Trans)。

Delete 删除列表中所选事务(对象菜单 [image] Delete Trans)。

Insert 将一个事务插入到所选事务前面 (对象菜单 [image] Insert Trans).

CTRL+Z undo最后一次操作。

CTRL+Y redo最后一次操作。

CTRL+Up 上移所选事务(对象菜单 [image] Move Trans Up)。

CTRL+Down 下移所选事务(对象菜单 [image] Move Trans Down)。

Shift+Up/Down 选择多个事务。

增强的Record 使用功能

这个新功能为声明，创建和拆分纪录变量和常数提供了一个快速便捷的方法。另外，使用新的内置函数 buildRecord()，用户还可以在运行时指定域名和域值来动态地创建一个记录。

Agilent VEE 8.0 从以下三个方面增强了记录的使用性：

1. 为 Record 类型的 Declare Variable 对象的上下文菜项 Generate 新增了三个子项。用户可以方便地生成 Record Constant 对象，Build Record 对象，以及 Unbuild Record 对象。

2.为 Record 类型的 Record Constant 对象新增了一个有两个子项的上下文菜项 Generate 。用户可以方便地生成 Declare Variable 对象和 Unbuild Record 对象。

3. 新增了一个内置函数： buildRecord (fieldNameTextArray, field1, field2, fieldN)

buildRecord()可以用于创建一个记录，其域名和值在运行前不可知。第一个参数为域名的字符串数组。接下来的参数为各个域的值。这些域的总数须与域名数组的长度相匹配。buildRecord()返回一个有指定域名和域值得标量记录。以下为两个范例：

buildRecord(fieldNameList2Long, field1, field2);

builldRecord(fieldNameList8Long, field1, field2, field3... field8);

详情请参阅 buildRecord()。

增加了对 NIDAQmx 的支持

Agilent VEE 8.0 增加了对 NI 新的数据采集驱动程序库 NIDAQmx 的支持。这不仅支持对库中所有函数的访问还包括对在线帮助的访问 。Instruments Manager 可以自动搜索到使用 NIDAQmx 驱动程序的仪器。

面板视图中的滚动条

当面板视图不足以放下所有的对象时，滚动条会自动出现。通过改变面板对象的"ScrollbarsEnabled" 属性可以将这一功能打开或关闭。缺省值是关闭。 详情请参阅 here 。

更多仪器使用范例

增加了16个新的仪器使用范例，它们都位于 examples\instrumentIO\InstrumentManagerIntegrated目录下。

此外还更新了许多范例程序。

另请参阅

以前版本的新增功能，在 Agilent VEE Pro 8.0中所修复的错误。


安装Agilent VEE

安装Agilent VEE和I/O库

您可以下载或订购评测版VEE。它是一个全功能版本的产品。在安装时，系统会提示您输入一个产品密码，输入没有引号的“eval”。

通过购买产品密码，您可以全面激活评测版本。一旦在邮件中收到产品密码，从主菜单Help [image] Product Key中输入密码。也可以订购或下载完整的产品。产品密码证书与产品一起发给您，或从网上下载时单独发给您。

VEE在下述操作系统上运行：Windows 2000 SP4和Windows XP.SP1(如果希望与Windows 98第二版, Windows NT 4.0 with Service Pack 6a或Windows Millenium Edition一起使用VEE Pro，应使用VEE Pro 7.03)

  • 从光盘上安装VEE。一定要作为有管理权限的用户登录。把光盘放在光驱中。应自动开始安装。如果没有自动安装，进入Start菜单，选择Run，输入：

[光驱盘符]:\cdsetup.exe

  • 从WWW下载中安装VEE。下载VEE自我解压的可执行文件。下载的自我解压文件位于选择的下载目录中。运行自我解压可执行文件，解压VEE安装文件。文件解压到您选择的目录中。从这个目录中，运行cdsetup.exe。

为协助您满足安全需求，系统会提示您是为PC所用用户安装程序还是只为一个用户安装程序。选择哪个选项满足您的安全需求。

如需与I/O库有关的更多信息，请参阅与其一起得到的安装资料。(VEE使用I/O库与仪器通信。)

安装和分发VEE Pro RunTime (Help [image] Contents和Index [image] Installing和Distributing VEE Pro RunTime)显示了怎样安装和分发RunTime版本的VEE Pro。RunTime版本用来在没有安装VEE软件的PC上运行VEE程序。如需与运行时环境有关的更多信息，请参阅联机帮助。选择Help, Contents and Index和Installing and Distributing Agilent VEE Pro RunTime。

另请参阅

配置VEE for Windows


配置Agilent VEE

VEE for Windows使用Windows Registry存储VEE环境信息。可以在VEE Default Preferences对话框中改变多个VEE窗口属性(使用File [image] Default Preferences)。这些属性保存在下面目录的默认文件VEE.RC中：

%userprofile%\LocalSettings\Application Data\Agilent\VEE Pro

或

在定义了HOME时，在 %HOME% 中。

颜色和字体设置

通过选择File Þ Save As，可把颜色和字体与程序一起保存。下图所示为 Save File 对话框。

对颜色和字体，只有改变的设置保存在VEE.RC默认文件中。

定制图标位图

可以把任何图标化对象显示的图标变成位图或像素图。VEE提供了许多文件，您也可以创建自己的文件。VEE for Windows支持24位.BMP位图文件 .GIF87, .GIF89a, .PNG (可移植网络图像)和.WMF (Windows图元文件)。为选择对象图标，点击对象菜单中的Properties特性，然后使用Properties对话框中的Icon栏。

可以使用任何编辑器为对象图标创建自己的位图，输出VEE支持的图形格式，如MS Windows Paint。应把图标的大小指定为48x48。图标越大，在VEE程序区中占用的空间越多；图标太小，查看起来会很困难。还可以在Paint中使用屏幕捕获工具，如Print Screen。

为面板视图选择一个位图

可以选择一个位图，作为面板视图的背景。这适用于面板视图中显示的UserObjects和VEE程序。面板视图图标必须使用VEE支持的格式。还可以使用创建的图标，如上一段所述。

为选择一个位图作为面板视图的图标，启动面板视图，以便Panel和Detail按钮出现在标题栏中(在面板中添加一个对象)。点击对象菜单，然后点击Properties。使用Properties对话框上的Panel栏，选择位图。

另请参阅

改变默认颜色, 改变默认字体


使用VEE范例程序

VEE包括许多范例程序，帮助您了解其怎样工作。范例程序作为VEE安装过程的一部分安装。

范例目录

默认的范例目录为：

C:\Program Files\Agilent\VEE Pro 8.0\examples\

运行范例

可以使用Help菜单加载和运行范例程序，具体如下：

1 点击菜单栏上的Help Þ Open Example。出现一个子目录列表，其中把类似的范例划分在一组中。(也可以使用File Þ Open Þ Examples加载VEE范例。)

2 双击所需的子目录，查看该组中的程序。

3 滚动列表，直到找到所需的范例。

4 点击范例名称，然后点击OK打开程序。系统会提示在工作区中保存任何现有的程序。

5 按工具栏上的Run按钮，运行程序。


启动Agilent VEE

可以启动在同一台PC上运行的多个VEE拷贝。但是，如果两个VEE拷贝试图同时存取相同的系统资源(如I/O接口)，那么可能会发生意想不到的结果。

如需与使用VEE Pro RunTime运行程序有关的信息，请参阅防止程序变化和在Windows中创建应用程序图标。

使用Windows Start按钮

1. 点击Start按钮，然后指向Programs [image] Agilent VEE Pro 8.0。

从Windows桌面启动

1. 根据Windows Help中的说明，使用Windows资源管理器在桌面上放一个Agilent VEE应用程序快捷方式。.

在默认情况下，VEE安装在：

C:\Program Files\Agilent\VEE Pro 8.0\vee.exe

除非您把它安装在另一个目录下。

2. 一旦建立了快捷方式，可以双击快捷方式图标，启动Agilent VEE。

另请参阅

使用命令行选项启动Agilent VEE


使用命令行选项启动Agilent VEE

Agilent VEE提供了多种命令行选项，可以使用这些选项启动VEE和VEE Pro RunTime。例如，可以指定在VEE启动时加载的一个VEE 程序文件。也可以选择在VEE Pro RunTime中加载和运行一个程序。

使用命令行选项启动VEE和VEE Pro RunTime

1. 点击Windows Start按钮，然后点击Run...

2. 输入vee 或 veerun，然后选择希望的选项，按Enter。veerun命令在选项后还要求一个程序文件名。

或

1. 打开一个MS-DOS窗口。

2. 输入 start vee.exe 或 start veerun.exe ，然后选择希望的选项，按Enter。veerun命令在选项后还要求一个程序文件名。

滚动本文内容，了解提供的选项和范例。

技巧

如果把VEE快捷方式放在桌面上，可以修改快捷方式的属性，使其包括命令行选项。

滚动本文内容，了解提供的选项和范例。

提供的选项

下表说明了在使用VEE或 VEE Pro RunTime时为每个平台提供的选项。表后面介绍了每个选项。

选项 | Windows
 | VEE | VEE Runtime
-d directory | X | X
-disallowclose |  | X
-enablewarnings |  | X
filename | X | X
-geometry | X | X
-help | X | X
-iconic | X | X
-ioconfig |  | X
-maximize | X | X
-noerrdisp | X |
-nologo | X |
-preconfig |  | X
-r filename | X |
-secure ProgramName | X |
-stderr:filename ProgramName | X | X
-stdout:filename ProgramName | X | X
-veeio path to filename | X | X

选项说明

-d directory

-d选项启动VEE，使用位于指定目录下、而不是默认VEE安装目录下的相关文件，如仪器驱程。

-disallowclose

防止用户在运行程序时关闭VEE Pro RunTime窗口。

-enablewarnings

在把程序加载到VEE Pro RunTime中时显示错误和警告对话框。如果没有这个选项，VEE Pro RunTime会在程序加载过程中抑制所有正常错误和警告对话。在禁用错误显示时，加载失败只会提供一条一般性(用处较差)信息，如："File format is invalid"。通过使用
-enablewarnings，可以看到更具体的导致问题的原因。

filename

这对vee命令是可选的，对veerun命令是必选的。vee命令启动VEE，在VEE工作区中打开filename指定的VEE 程序。veerun命令启动VEE Pro RunTime，运行filename指定的VEE 程序。对Windows，如果filename包含空格，那么整个文件名(包括路径)必须包括引号。

-geometry widthXheight+/-xoffset+/-yoffset
或
-geometry +/-xoffset+/-yoffset (使用默认窗口尺寸)

指定使用的初始窗口几何图形，而不是默认几何图形。几何图形值用像素表示。正偏置值相对于屏幕左上角定位窗口左上角。负偏置值相对于屏幕右下角定位窗口右下角。

偏置+0+0是屏幕的左上角。

范例： -geometry 640X480+20+20在640像素宽、480像素高的窗口中启动VEE，即从屏幕左上角向右20个像素，向下20个像素。

-help

显示VEE命令行选项。(不要与VEE联机帮助系统混淆，VEE联机帮助系统从VEE内部启动。)

-iconic

-iconic选项作为图标启动VEE，而不是窗口。双击图标，打开一个窗口。

-ioconfig

这个选项在VEE Pro RunTime窗口中打开Instrument Manager对话框，允许改变I/O配置文件vee.io。这个命令中不要包括程序文件名，否则会被忽略。

如果Instrument Manager对话框没有落在VEE窗口内部，那么也可以使用-geometry选项，放大VEE或VEERun窗口。

-maximize

这个选项在全屏的放大窗口中启动VEE。

-noerrdisp

这个选项可以与-r一起使用。如果与-r一起使用，且指定程序由于错误而没有运行，那么VEE会立即退出，而不会显示错误信息。

-nologo

这个选项在VEE开始运行前抑制出现的启动信息。在Windows上，不会出现启动信息对话框。

-prefconfig

这个选项在VEE Pro RunTime窗口中打开Default Preferences对话框，允许改变默认配置。这个命令中不要包括程序文件名，否则会被忽略。

如果Default Preferences对话框没有落在VEE窗口内部，那么也可以使用 -geometry选项，放大VEE或VEERun窗口。

-r filename

-r选项启动VEE，运行filename指定的VEE 程序。在程序运行结束时，VEE立即退出。但是，如果发生错误，在VEE退出前会显示一条错误信息。如果没有指定文件名，VEE会忽略-r选项。如果filename包含空格，那么必须在整个文件名外面加上引号，包括路径。一般来说，最好使用veerun命令，而不是-r选项。

-secure ProgramName

使用ProgramName作为源文件创建有安全保护的程序。下述命令在与源文件相同的目录下创建文件myProg.vxe：

vee -secure myProg

-stderr:filename ProgramName

创建一个名为filename的标准错误日志文件，在加载和运行ProgramName时记录VEE生成的错误信息(如果发生错误)。可以在filename中包括一个目录路径。

-stdout:filename ProgramName

创建一个名为filename的标准输出文件，在加载和运行ProgramName时记录VEE生成的错误信息(如果发生错误)。可以在filename中包括一个目录路径。

-veeio path to filename

VEE允许有多个I/O配置文件(vee.io)。这个选项允许指定在启动VEE时希望使用的配置文件。

范例: 使用文件名启动VEE for Windows

为启动Agilent VEE for Windows，自动打开程序myprog.vee：

1. 点击Windows Start按钮，然后点击Run...

2. 输入vee myprog.vee，按Enter。如果文件名中包含空格，应在文件名外面使用引号。

或

1. 打开一个MS-DOS窗口。

2. 输入start vee myprog.vee，按Enter。如果程序没有位于当前目录下，指定一条路径。如果文件名中包含空格，应在文件名外面使用引号。

范例: 使用-disallowclose启动VEE RunTime for Windows

为在VEE RunTime中运行程序myprog.vee，防止关闭执行窗口：

1. 点击Windows Start按钮，然后点击Run...

2. 输入veerun -disallowclose myprog，按Enter。如果文件名中包含空格，应在文件名外面使用引号。

或

1. 打开一个MS-DOS窗口。

2. 输入start veerun -disallowclose myprog，按Enter。如果程序没有位于当前目录下，指定一条路径。如果文件名中包含空格，应在文件名外面使用引号。

另请参阅

在Windows创建应用程序图标, 启动Agilent VEE


与Agilent VEE交互

本节介绍了怎样使用VEE图形编程语言，包括支持的系统列表、鼠标和菜单的工作方式、怎样获得帮助及怎样使用VEE窗口。

支持的系统

下述操作系统支持这一版VEE：

• Windows 2000 SP4或更高版本和Windows XP SP1或更高版本。

它要求下述额外软件：

• Agilent IO Libraries Suite 14.2或更高版本和/或NI Libraries 3.0版。

鼠标和菜单

您可能熟悉计算机鼠标驱动的和菜单驱动的界面：使用鼠标和键盘控制的下拉菜单、工具栏和对话框。VEE使用计算机界面。在使用鼠标操作菜单、图标、按钮和对象的指令中，常用技术如下：

• “点击”或“单击”项目是指把鼠标指针放在希望的项目上，迅速按下和放开鼠标左键。

• “双击”项目是指把鼠标指针放在希望的项目上，迅速连续按鼠标左键两次。

• “拖动”项目是指把鼠标指针放在希望的项目上，按住鼠标左键，把项目移动到相应位置，然后放开鼠标按钮。

备注

鼠标右键使用的频次较低。我们会建议是否需要点击鼠标右键。如果鼠标有一个中间按钮，VEE中不使用这个按钮。

Agilent VEE窗口

在已经安装和启动VEE后，您会看到VEE窗口，如下图所示。

下述项目描述了VEE窗口的各个部分。

屏幕指称 | 说明
标题栏 | 窗口中最上面一行包含着VEE图标、窗口名称及最小化、最大化和关闭按钮。拖动标题栏，可以移动窗口。点击VEE图标，会出现窗口菜单。
菜单栏 | 第二行包含菜单项，每个菜单项提供了VEE命令或对象。
工具栏 | 第三行包含图标或按钮，可以直接进入(或“以快捷方式”)最常用的菜单命令。(把鼠标指针放在一个按钮上，VEE会显示其功能。)
工作区 | 编程(编辑)窗口中的一个区域，如Main, UserObject或UserFunction，在这里放置对象，把对象连在一起。
Program Explorer | VEE窗口左侧区域，显示VEE程序的结构。上角显示当前程序名称，如myprog.vee，或显示Untitled。 Program Explorer允许在多个编程窗口之间移动。为调整Program Explorer大小，在右面边界上移动正常指针，直到它变成垂直分叉指针，点击鼠标，移动窗口。
主窗口 | 包含工作区的一个窗口，在这里可以开发和编辑VEE程序。可能还有其它编程/编辑窗口，如UserObject。
状态栏 | 最底下一行显示与VEE状态有关的信息，包括右角上的四个状态指示符。指示符(从左到右)显示： 执行模式 配置程序的状态 在已经修改程序时，出现MOD 启用Web服务器

获得帮助

VEE为VEE环境提供了联机帮助系统，并为各个对象和主题提供了联机帮助。此外，可以在计算机及操作系统自带的文档中获得帮助信息。PC联机帮助包括下述相关信息：

• 在菜单栏上选择命令

• 选择和解除菜单项

• 使用工具栏

• 了解标题栏和状态栏

• 点击鼠标和按钮

• 使用对话框

• 使用各类窗口

• 使用联机帮助

在开始时，您可能想从Help [image] Welcome屏幕开始，在这里可以使用VEE多媒体教程。会显示下面的Welcome屏幕。

VEE联机帮助是为您的操作系统设计的。点击Help，出现下面的菜单。帮助中包括目录和索引、Welcome菜单(教程所在位置)、仪器驱程、网站信息、范例和版本号。

尽管您不必使用VEE文档完成这一进度自定的培训，但可以查询产品文档，了解与某个功能或概念有关的更详细的信息。使用Help系统，搜索需要定位的VEE内容。Help系统可以“跳”到相关内容。

选择Contents and Index，启动VEE Help。

Help Contents栏包含下述内容。

What’s New in VEE | 定义
How Do I... | 为常用任务提供“怎样做”信息。
Tell Me About... | 解释VEE概念。
Guide to Agilent VEE Example Programs | 概括与VEE一起提供的范例程序。
Reference | 为所有函数和对象提供参考信息。
About Agilent VEE Support | 提供与获得VEE支持有关的信息。
Installing和Distributing Agilent VEE Pro Runtime | 解释怎样分发VEE Pro RunTime环境。

备注

获得选择的对象和对话框的帮助信息的快捷方式是按键盘上的F1。此外，点击对象菜单中的Help，可以获得与该对象有关的特定信息。

在开发程序时，如需与使用特定联机帮助功能有关的更多信息，请参阅使用联机帮助


处理对象

VEE程序由连接的多个对象组成。为创建程序，从VEE菜单中选择对象，如Flow, Data和Display。各个对象使用附在对象端的直线连接。(如需与端有关的更多信息，请参阅“了解端和终端")。创建一个程序，其中包括连接的一组对象。

本节介绍了怎样在程序中选择和使用对象。

1 启动VEE。在Windows中点击Start [image] Programs [image] Agilent VEE Pro。

2 根据本节说明做对象实验。

在工作区中添加对象

拉出相应菜单，点击希望的对象，把对象拖到工作区中相应位置，点击鼠标(外框消失，出现对象)。

1 例如，为在工作区中添加一个Function Generator对象，在菜单栏中选择Device [image] Virtual Source [image] Function Generator，如下图所示。工作区中出现对象外框。

备注

Virtual Source右面的箭头表明一个子菜单。菜单项后面的三个点表明后面有一个或多个对话框。例如，File [image] Save As...采取这种方式。

2 把Function Generator移动到工作区的中心，点击鼠标，放置对象，出现Function Generator。

在已经把一个对象放在工作区中后，可以拖动标题栏，移动对象，就象移动窗口一样。

备注

在本联机帮助中，使用速记符号解释指令。例如，选择Function Generator对象精简为下述格式：
Device [image] Virtual Source [image] Function Generator

备注

为在屏幕上提供更多的空间，点击View [image] Program Explorer。这会反选它，把它从屏幕中删除。在前面显示了一个对号时，菜单项被“选中”。

改变对象视图

VEE在“图标视图”或“Open View”中显示对象。

详细视图 图标视图

图标视图节约了工作区中的空间，使程序更加可读。Open View提供了更详细的信息，允许编辑对象的属性和设置。

1 为从Open View切换到图标视图，点击Minimize按钮 (对象标题栏右端的框)。

2 为返回Open View，双击对象图标视图(对象上任何地方)。

并不是所有对象都采用相同的结构或部分，但可以在Open View中编辑对象，在图标视图中节约空间。

备注

对象菜单还有Minimize和Restore选项。为显示对象菜单，点击标题栏左端的对象菜单按钮，或在对象上任何地方按鼠标右键。

选择对象菜单

每个VEE对象都有一个对象菜单，允许在对象上执行各种操作，如Clone, Size, Move和Minimize。大多数对象的属性类似，但也有差别，具体取决于对象的功能。

1 为选择对象菜单，在对象菜单按钮上单击鼠标。(所有对象菜单都以相同的方式打开。) 出现的对象菜单如下。(不要双击对象菜单按钮，这是删除对象的快捷方式。)

2 现在可以点击其中一个对象菜单选项，执行希望的操作。或者为解除菜单，可以点击菜单外面的空白区域。

也可以把鼠标指针放在对象实体的任何地方，按鼠标右键，选择对象菜单。这同时适用于Open View和图标视图。

移动对象

1 为移动Function Generator对象，点击对象菜单中的Move，然后点击按住鼠标左键。出现对象外框。

2 按住鼠标键，把外框移动到新位置。放开鼠标键，对象移动到新位置。

也可以通过下述方式移动对象：

• 点击对象Open View的标题区域，把对象拖到新位置。

• 除按钮、输入字段、端、终端或四个角(其用来调整对象大小)外，点击Open View对象的任何部分，把对象拖到新位置。

• 除四个角附近(其用来调整对象大小)外，点击图标视图对象的任何部分，把图标拖到新位置。

备注

位于状态栏(在VEE 窗口底部)中的Object Location Information提供了外框左上角相对于工作空间左上角的X和Y位置(用像素表示)。为查看对象的确切位置，在对象上按鼠标左键，选中对象，按住鼠标左键。状态栏中会显示位置。在需要把对象放在确切位置时，使用这些信息。

复制(或克隆)对象

Clone操作创建一个完全重复的对象，包括所作的任何变化，如确定大小或重命名。克隆是复制和粘贴的快捷方式。

1 打开对象菜单，选择Clone，出现复制的对象的外框。

2 把外框移动到希望的位置，点击放置对象。出现克隆的对象，原始对象保持不变。在下图中，Function Generator已经被克隆一次，对象菜单已经选择命令，再克隆一次。

复制对象

这一操作把一个对象复制到剪切板中，因此可以把它粘贴到VEE或另一个程序中，如MS Paint或MS Word。

点击一个对象，高亮度显示这个对象，然后点击Edit [image] Copy。

或

点击一个对象，高亮度显示这个对象，然后按Ctrl-C。

删除对象

为从工作区中删除对象，进入希望删除的对象的对象菜单，点击Delete。例如，进入Function Generator的对象菜单，点击Delete。对象从工作区中消失，但它保存在缓冲器中。

打开对象菜单，选择Delete。

或

选择对象(点击它)，按Ctrl-X。

或

把鼠标光标放在对象菜单上，双击鼠标。

备注

要注意，很容易会因为双击对象菜单按钮而意外删除对象。如果意外删除了对象，可以使用Undo工具栏按钮 (或Edit [image] Undo)，恢复对象及对象的所有连接。

粘贴对象

为把复制的对象粘回工作区，采取下述步骤。

在已经克隆、复制或删除了一个对象后 (使用Ctrl-X )，点击Edit [image] Paste。出现对象外框。放置对象，点击释放。

或

按Ctrl-V。

改变对象大小

把鼠标指针放在对象四个角的任何一个角上，直到看到一个确定大小的箭头，然后点击鼠标拖到希望的大小。释放鼠标调整大小。下图显示了使用确定大小的箭头调整的对象。

或

打开对象菜单，点击Size。鼠标指针变成“右下角”括弧。把括弧移动到希望的右下角位置，点击鼠标，调整大小。

改变对象的名称(标题)

1 打开对象菜单，选择Properties...。在屏幕左侧出现一个Properties窗口。选择Title属性，把属性值变成希望的值。

2 标题区中出现新的标题。如果最小化对象，新的标题出现在图标中。

或

双击对象标题栏，直接进入Properties对话框。

备注

可以使用标准键盘和鼠标编辑技术，节约时间。例如，在Properties对话框Title字段中，如果点击编辑区域最左边，那么这里会出现光标。然后可以增加新的文件本，而不必删除现有标题。

选择或反选多个对象

1 为选择一个对象，点击对象，对象后面出现阴影。例如，在下图中，选择了For Count对象。

2 为反选一个对象，把鼠标指针移动到任何打开区域，点击鼠标，阴影消失。例如，在下图中，没有选中Formula对象。

备注

“选择”一词也用来表示选择一个菜单项，但要视上下文而定。

选择多个对象

如果点击选择一个对象，那么将只选择一个对象。如果再次点击选择另一个对象，前一个对象会反选，其阴影消失。如果想选择多个对象，以一次在所有对象上执行操作，如Delete，采取下述步骤：

按住Ctrl按钮，点击不同的对象。在高亮度显示选择的所有对象后，放开Ctrl按钮。

或

按Ctrl，然后在要选择的多个对象周围点击画一个矩形。选择的对象出现阴影。

选择/反选所有对象

1 为选择所有对象，点击Edit [image] Select All。(或按Ctrl-A)

2 为反选所有对象，点击窗口中打开的区域。

复制多个对象

把光标放在一个对象上，复制选择的对象。按住Ctrl，同时使用鼠标左键，把多个对象(外框)拖到希望的位置。希望的位置出现每个对象的新实例。

或

或使用Edit [image] Copy，把选择的对象复制到缓冲器中。点击Paste (在Edit菜单中或在工具栏上)，把对象(外框)移动到希望的位置，按鼠标左键。下图是复制过程中的对象。

备注

在VEE中，剪切或复制的对象还会放在剪贴板上。可以把它们粘贴到支持Windows剪贴板的其它Windows程序中。

编辑对象

有多种方式在VEE中编辑对象。不同的编辑菜单显示不同的选项。选择一个编辑菜单或图标，具体如下：

点击VEE菜单栏上的Edit，显示Edit菜单，选择希望的操作。Edit菜单的命令对所有VEE相同。

或

点击VEE工具栏上的一个图标。VEE工具栏包含常用的编辑命令的图标，如Cut, Copy和Paste。

或

点击对象，打开对象的对象菜单，选择希望的操作。对象菜单包括一个对象特定的编辑操作，如Properties菜单，其没有位于主Edit菜单中。对象菜单中的命令视对象类型不同而变化。例如，比较一下Device [image] Formula和I/O [image] To [image] File对象中的对象菜单，这两个菜单包含对象专用的不同选项。

或

把鼠标指针放在空白工作区空间的任何地方，按鼠标右键。出现弹出Edit菜单。

备注

不活动的菜单项的阴影与活动项不同(它们“变成灰色”)。例如，Edit菜单中的Cut、Copy和Clone操作的阴影与活动菜单项不同，直到在工作区中高亮度显示一个对象。

创建对象之间的数据线

1 点击一个对象的数据输出端或点击数据输出端的外面，然后点击另一个对象的数据输入端，如下图所示(在从一个端移动到另一个端时，指针后面出现一条线。)

2 放开光标，VEE在两个对象之间划一条线。注意，如果重新确定对象位置，VEE会保持两个对象之间的线。

如需与端有关的更多信息，请参阅“了解端和终端"。

删除对象之间的数据线

按Shift-Ctrl，点击想删除的线。

或

选择Edit [image] Delete Line，点击想删除的线。

移动整个工作区

(在工作区中至少要有一个图标。) 把鼠标指针放在工作区背景的任何地方，按住鼠标左键，以任何方向移动工作区。

如果程序大于工作区，会出现滚动条，如下图所示。

备注

如果在端附近点击鼠标，可能会出现一条直线或“线”。如果发生这种情况，把指针移动到打开的区域，双击鼠标。

清除工作区

点击Edit [image] Select All，然后点击工具栏上的Cut按钮。这会把活动窗口中的所有对象剪切到Cut缓冲器中。

或

选择File [image] New，或点击工具栏上的New按钮。VEE询问是否想保存变化。

或

点击对象，使其活动，然后点击工具栏上的Cut按钮，清除各个对象。

改变默认首选项

Default Preferences对话框在VEE环境中改变默认设置。

点击工具栏上的Default Preferences按钮。

或

点击File [image] Default Preferences，出现Default Preferences对话框。

这个对话框有多个栏，允许选择要编辑的选项。

栏名称 | 说明
General | 出现Default Preferences对话框(如上所示)时的默认栏。可以改变显示的参数值，如Environment和Execution Mode。
Colors | 允许在VEE环境中定制颜色。
Fonts | 允许在VEE环境中定制字体。
Number | 允许改变默认数字格式。
Printing | 允许设置打印机的参数值。
Web Server | 允许启动内置Web服务器，从远程Web浏览器监测和诊断程序。

如需更多信息，从VEE菜单栏中选择Help [image] Contents and Index。然后浏览How Do I..., Tell Me About...,或Reference。

另请参阅

对象怎样运行, Agilent VEE程序怎样工作

Copyright (c) 1991-2006年安捷伦科技公司版权所有


了解端和终端

VEE程序由工作区中的对象及连接对象的线组成。连接VEE对象的线在对象线之间连接。每个对象有多个端。我们以Formula对象为例，可以使用任何对象。

端类型 | 说明
数据输入端 | 对象左侧的一个端(或多个端)。
数据输出端 | 对象右侧的一个端(或多个端)。
序列输入端 | 对象顶部的端。
序列输出端 | 对象底部的端。

连接数据输入端和输出端，在对象之间传送数据。在默认情况下，各端从上到下执行。序列端连接是可选的。如果连接，它们会决定执行顺序。

如需更多信息，请参阅“遵守对象内部的事件顺序"。

在对象的Open View中，数据输入端和输出端表现为输入终端和输出终端。(如果对象位于图标视图中，双击它，切换到Open View。) 终端传送详细信息，如终端名称、传送的数据类型和值。只有在Open View中，且只有对该对象启动了Show Terminals选项时(参阅对象菜单中的Properties...)，才能看到终端标记。

例如，下图包括两个Formula对象。左面的Formula对象显示了终端标记A和Result。右面的Formula对象关闭了Show Terminals，因此看不到标记。

启动Show terminals 关头Show terminals

为启动或关闭Show Terminals，从对象菜单中选择Properties。屏幕左侧出现属性窗口。选择属性ShowTerminals，把它设为True。

选择属性，把ShowTerminals设为False。再次选择属性，把ShowTerminals设为True。

添加一个终端

可以在一个对象中添加多个终端。例如，可以在Formula对象中添加第二个数据输入终端。

打开对象菜单，选择Add Terminal [image] Data Input。

或

在启动Show Terminals时，可以把鼠标指针放在“终端区域”中(Open View对象的左边距)，按Ctrl+A (同时按Ctrl键和A键)。

下图显示了为添加数据输入终端而打开的Formula 对象菜单，以及已经添加了第二个终端的另一个Formula对象。新终端标为B。如果数据输入象仪器驱程一样固定在特定函数，您会获得由这些函数组成的菜单。否则，终端命名为A, B, C... 。

编辑终端信息

为获得与终端有关的信息，双击标记区域。例如，双击B，出现对话框。

现在可以编辑终端。对话框有三种字段：

字段类型 | 说明
输入字段 | 背景为白色的字段，但没有箭头。在点击时，它会变成输入字段。例如，可以在Name字段中点击B，重命名终端。
状态字段 | 背景为灰色的字段，不能编辑。例如，Mode字段不能编辑。
选择字段 | 背景为白色的字段，同时在右侧有一个箭头。点击字段或其箭头，会显示一个下拉列表。例如，如果点击Required Type字段中的Any (或箭头)，可以点击列表，从列表中选择另一个数据类型，如下图所示。

如果为数据输入终端选择Any之外的数据类型，那么终端只接受指定数据类型或可以转换成该类型的数据。在大多数情况下，最好把Required Type和Required Shape字段设为Any。如需更多信息，从VEE菜单栏中选择Help [image] Contents and Index。然后，浏览How Do I..., Tell Me About...,或Reference。

删除终端

打开对象菜单，选择Delete Terminal [image] Input...或Delete Terminal [image] Output，选择要删除的输入或输出，点击OK。例如，下图显示了在选择Delete Terminal [image] Input...时出现的对话框。

或

把鼠标指针放在终端上，按CTRL-D。

如果确定不想删除终端，从任务栏中选择Undo按钮。

另请参阅

连接多个对象，构成一个程序


查找对象在菜单中的位置

为查找对象在菜单中的位置及显示与对象有关的信息，选择Help => Contents and Index，点击Index一栏，输入对象名称，点击Display。

例如，选择Help => Contents and Index，点击Index一栏，输入Collector。点击Display，显示Collector对象的Help主题。


打开范例程序文件

技巧

VEE Help 中的下述内容包含范例程序说明以及把它们加载到新的VEE窗口中的链接：

VEE范例程序指南

Agilent VEE

VEE提供了多个范例程序。这些范例位于下面的子目录中：
C:\Program Files\Agilent\VEE Pro 8.0\examples.
例如，在VEE中使用MATLAB Script的范例位于下面的子目录中：

C:\Program Files\Agilent\VEE Pro 8.0\examples\MATLAB

通过点击VEE 工具栏上的Open按钮，可以打开任何程序文件，包括范例。但是，为方便起见，可以从Help中打开范例程序：

1. 选择Help [image] Open Example，出现Open File对话框，但?#30446;标?#26159;范例目录。

2. 双击一个子目录名称。

3. 点击您想打开的范例文件的文件名，然后点击Open。


打开VEE程序文件

1. 点击VEE 工具栏上的Open按钮，出现Open File对话框。

Open File对话框在默认目录下查找要打开的程序文件：
C:\Documents and Settings\[your username]\My Documents\VEE Programs.
（在默认状态下，点击Save按钮，在该目录中保存程序。）

Open按钮

Save按钮

2. 点击想要打开的程序文件的文件名，然后点击Open。或在File name输入字段中输入一个文件名，然后点击Open。


从库文件中合并对象和程序

VEE提供了多个库对象(预建的UserObjects)和完整的库程序，可以把它们合并到自己的VEE程序中。

1. 选择File [image] Merge，出现Merge对话框。

在默认情况下，Merge对话框查看下述目录中的库对象和程序：
C:\Program Files\Agilent\VEE Pro 8.0\lib.
通过改变目录，还可以把任何VEE程序文件合并到工作区中。

2. 点击希望打开的库文件名称，然后点击Open。对象被合并到工作空间中。可以象任何VEE对象一样把它连接到程序中。


启动VEE程序

Agilent VEE为运行程序提供了多种执行模式，即VEE 3, VEE 4, VEE 5, VEE 6和VEE 8。使用Default Preferences设置模式。在默认情况下，使用VEE 8.0编写的程序在VEE 8执行模式下运行。在默认情况下，使用VEE 7.X或VEE 6.0编写的程序在VEE 6执行模式下运行。在默认情况下，使用VEE 5.0编写的程序在VEE 5执行模式下运行。在默认情况下，使用VEE 4.x在VEE 4执行模式下运行，老式程序在VEE 3执行模式下运行。您可以在较新的模式下运行较老的的程序，但它们可能不会以预期方式运行，可能需要修订。应按需修订VEE 3模式程序，才能在VEE 4模式中正确运行程序，然后才能在VEE 5或更高模式中运行程序。

为启动整个VEE程序，包括程序内的所有线程，在VEE工具栏上点击Run按钮。

Run按钮

不管是否有Start对象，工作区内的所有线程都会启动。

如果希望能够独立启动程序中的单个线程，在线程中添加一个Start对象 (在Flow菜单下)。在点击Start对象按钮时，将只启动包含Start对象的线程。

如果线程采用feedback，那么线程在反馈周期内部必须包含一个Junction对象，以在VEE 4或更高的执行模式下运行。只有在这种情况下，才要求Junction对象。如果运行的程序包括线程和反馈，但没有Junction对象，那么会报告错误。

范例: 两个线程，每个线程有一个Start对象

如果只想运行顶部线程，点击其Start按钮。 线程运行，在 AlphaNumeric对象中显示"Now is the time"，如上图所示。但是，底部线程不会运行。

如果点击底部线程中的Start，线程会运行，但顶部线程不会运行。

如果点击Run按钮，程序的两个线程都将运行。在每个线程中，传播从Start对象开始。

快捷方式

在键盘上按CTRL+G，可以运行VEE程序。

另请参阅

默认首选项


在VEE程序内进行分支

在VEE程序内建立分支

使用Flow 菜单下的If/Then/Else或Conditional [image] 对象，对VEE程序中的执行流程进行分支。

使用If/Then/Else对象建立条件分支

1、在工作区中添加If/Then/Else对象（从Flow菜单）。

2、根据需要修改条件测试表达式。例如，为了测试值是否满足?#22823;于等于0.5且小于0.6?#30340;条件，使用表达式.5<=A AND A<.6.（当调用UserFunctions并访问全局变量时，可以在If/Then/Else对象表达式字段中使用VEE支持的任何逻辑或关系数学运算符。）

3、如果新表达式需要，可以添加额外的数据输入端。在默认的情况下，只有一个输入端（A）。如果您想比较A、B值的大小（例如，A<=B），则需要添加一个名为B的数据输入端。

4、把要测试的数据源连接到数据输入端。

5、最后，连接Then和Else输出端，根据需要激活程序中的不同对象或分线程。

范例：使用If/Then/Else

使用表达式.5<=A AND A<.6测试Random Number对象的输出值。如果这个值位于指定的范围内，Then输出端激活顶部的AlphaNumeric对象，如上图所示，这个对象用来显示随机数字。如果这个值不在指定范围内，Else输出端激活底部的AlphaNumeric对象，这个对象用来显示Try Again。这个例子说明了一个简单的情况，您可以使用Then 和Else终端来激活任意类型的程序线程。这个例子作为manual01.vee保存在manual范例目录中（Help [image] Open Example）。

使用条件对象

Flow [image] Conditional [image] (If A == B, If A ~= B, If A != B, If A < B, If A > B, If A <= B, and If A >= B)下的对象实际上是预先定义的If/Then/Else对象。每个对象有两个数据输入端（A和B），执行预先定义的测试，比较A和B的值。Then 和Else输出端的作用与If/Then/Else对象中相同。实际上，可以象在If/Then/Else对象中一样，添加或删除端，改变表达式。例如，您可以在If A == B对象中添加一个C端，将测试改为A == B OR B <= C。

范例：增加Else If条件

If/Then/Else和Conditional对象还有另一个功能-- Else If 条件。可以增加一个或多个Else If条件(对象菜单 [image] Add Else/If)。如果前面的条件没有满足，那么会测试每个Else If条件。例如，下面的If/Then/Else对象有两个Else If条件：

这个对象的工作方式如下：

1、对表达式0<=A AND A<10求值，如果表达式为?#30495;?#65292;那么在Then端输出结果。（如果表达式的求值结果为一个非零值，则其为?#30495;?#12290;）

2、否则，对表达式A<20求值，如果表达式为?#30495;?#65292;那么在相应的Else If端输出结果。

3、如果A<20为?#20551;?#65292;则对表达式A<30求值，如果A<30为?#30495;?#65292;那么在相应的Else If端输出结果。如果为?#20551;?#65292;那么在Else端输出结果。

另请参阅

If/Then/Else


循环部分VEE程序

在VEE程序使用循环

可以使用下面列出的其中一个重复对象，循环(重复)部分VEE程序。可以在任何对象?#21457;起的?#24490;环中，包括Next和Break对象，其均位于Flow [image] Repeat菜单下。

继续向下滚动编程范例。

重复对象摘要

For Count

输出计数，从0开始，重复输入字段中指定的次数。默认值是10，这会使计数重复10次，从0到9。

For Range

在数据输出端重复输出一个值，从From值开始，在每次重复时增加值Step。如果Step为正，那么For Range重复，直到输出值大于Thru值；如果Step值为负，那么For Range重复，直到输出值小于Thru值。

For Log Range

与For Range类似，但采用对数标度。初始值输出是From，但第n个值是From*exp10(n/(/Dec))。如果/Dec为正，那么For Log Range重复，直到 输出值大于Thru值；如果/Dec为负，那么For Log Range重复，直到输出值小于Thru值。

For Each

对VEE数组支持，For Each语句处理由任何维数(1-10)、任何维数长度和任何类型组成的任何VEE数组。它将在ExecModes下工作。对COM支持，For Each语句处理可以枚举或循环的任何COM (ActiveX)对象。这类对象通常具有"Count"属性和"Item()"方法，表明它是一个集合，但严格地说，并不要求这些项目。COM/ActiveX用于ExecModes 5和更高版本中。对.NET支持， For Each语句处理可以枚举或循环的任何.NET对象，如StringCollection。这类对象通常也有"Count"属性和 "Item()"方法，表明它是一个集合，但严格地说，并不要求这些项目。.NET对象用于ExecModes 6&7和更高版本中。

Until Break

连续激活数据输出端，直到Break对象在线程范围内操作。

On Cycle

定期输出当前时间值(默认周期是1秒)，直到Break对象在线程范围内操作。

Next

使循环立即开始下一次迭代。

Break

使循环立即结束。

范例: For Count循环

在下面的范例中，For Count对象导致Random Number对象操作10次。For Count对象的序列输出端表明For Count什么时候完成操作(循环重复完成)。 Collector采集一个数组中的10个随机值，但只有For Count的序列输出端激活Collector上的XEQ端时，才会输出数组。

范例: 每秒获取一个读数

在下面的范例中，On Cycle对象每秒执行一次，导致HP 34401A万用表的仪器面板对象每秒输出一个读数。这个程序生成模拟的读数，因为HP 34401A的实地模式是OFF。每个读数输出到Logging AlphaNumeric 显示画面上，并输出到 If/Then/Else对象中。If/Then/Else对象导致Break对象操作，在第一个值大于等于7时停止循环。Logging AlphaNumeric显示画面到If/Then/Else对象的序列输出行保证在循环停止前显示最后读数。为Time Stamp格式配置的AlphaNumeric对象报告每次获取读数的时间。这个范例作为manual02.vee 保存在手册范例目录下(Help [image] Open Example)。

范例: 并行循环和嵌套循环

在下面的范例中，程序中包括多个并发运行的并行循环及一个嵌套循环。Thread 1和Thread 2是并行循环。 Subthread 1a嵌套在Thread 1内部。支持多级嵌套。

在使用循环时要避免下面的情况，这些情况会导致传播矛盾，产生意想不到的结果。在VEE 4或更高版本的执行模式下运行程序会产生错误。

1. 不要交叉连接多个并行循环。

2. 不要合并多个循环 (如使用JCT或Math对象)。

另请参阅

Help [image] Open Example...手册范例目录下的manual03.vee and manual04.vee 。


停止VEE 程序

一旦已经启动一个VEE 程序，它将根据传播规则运行，直到完成，然后停止运行。

在传播完以前停止VEE程序的方式

在VEE工具栏上点击Stop按钮。

Stop按钮

点击Pause按钮会临时暂停程序。然后点击Resume按钮继续执行程序，或点击Stop按钮停止程序。

Pause按钮

Resume按钮

使用Stop和Exit Thread对象。可以在您的程序中包括一个Stop或Exit Thread对象，定义什么时候终止程序。例如，可以使用If/Then/Else对象条件分支到Stop或Exit Thread对象。在这些对象运行时，程序会永久停止，就象点击Stop键一样。

使用Raise Error对象。您可以使用Raise Error 对象，导致发生错误，暂停程序。

快捷方式

在键盘上按CTRL+P暂停（不是停止）程序。

在键盘上按CTRL+G恢复暂停的程序。

备注

在VEE 4或更高执行模式中，如果在Default Preferences中打开Disable Debug Features，那么Pause命令会失效。

另请参阅

默认首选项 Exit Thread Stop 捕获错误


改变默认颜色

可以改变所有程序的默认颜色。

1. 点击VEE工具栏上的Default Preferences按钮，然后在对话框中选择Colors栏。

Default Preferences按钮

2. 点击Screen Element字段或其箭头。下拉菜单显示屏幕要素选项。

3. 点击列表中希望改变的屏幕要素。下拉列表消失，该屏幕要素的当前颜色显示在Color Value字段中。

4. 点击Color Value按钮，出现Select Color对话框，显示提供的颜色调色板。在调色板中用虚框显示屏幕要素的当前颜色选项。颜色还显示在Preview区域中。

5. 为选择新颜色，在调色板中点击不同的颜色，然后点击OK，返回Default Preferences对话框。

6. 根据需要为多个屏幕要素选择颜色，然后保存选择结果。

7. 选择希望怎样保存为屏幕要素选择的新颜色：

a. 如果想把选择的颜色保存为永久的默认颜色，点击Save。这会在vee.rc文件中保存新的默认颜色。未来的VEE会话将把新颜色作为默认值 (直到再次改变颜色)。

b. 如果想只对当前VEE会话使用选择的新颜色(直到选择File [image] New, Open,或Exit)，点击OK。

c. 如果想使用选择的新颜色，并把它与VEE程序一起保存，点击OK，然后进入File [image] Save As?/span>，在Options区域勾选Save colors and fonts。

d. 如果想取消选择的新颜色，点击Cancel。

e. 如果想放弃当前设置，返回默认文件vee.rc中的设置，点击Reset。

另请参阅

默认首选项 使用颜色 怎样选取颜色


改变对象的颜色

每个对象都有一个可以从对象菜单中进入的Properties Window。可以从这个窗口的Appearance类别中，改变某个对象的颜色。

1. 在对象上点击鼠标右键，打开其对象菜单。从对象菜单中选择Properties，然后从属性窗口中选择Appearance类别。.

可以改变的颜色取决于对象的特定类。一般来说，可以在对象的标题栏和Open View中改变背景和文本。

2. 选择想改变的属性。

3. 为选择新的颜色，点击列表中的不同颜色。

4. 选择的新颜色出现在对象中，覆盖默认颜色。变化只影响选择的对象，在保存程序时保存。

快捷方式

双击对象标题栏，进入Properties窗口。

备注

可以在对象菜单上使用Properties改变Main Window、UserObjects和UserFunctions的Panel View颜色。每个上下文必须存在Panel Views，然后才能改变颜色。在程序运行时，Main Window的面板颜色还应用到Execution Window中。必须打开UserObject和 UserFunction编辑窗口，才能设置其Panel View颜色。如需与创建Panel Views有关的详细信息，请参阅VEE Help在How Do I ?font style="font-family: 'Courier New';" face="Courier New"> Build an Operator Interface下的帮助内容。

另请参阅

使用颜色 怎样选取颜色


改变默认字体

可以在工作区中改变屏幕要素的默认字体。

备注

1. 点击VEE工具栏上的Default Preferences按钮，然后在对话框中选择Fonts栏。

Default Preferences按钮

2. 点击Screen Element字段或其箭头。下拉菜单显示屏幕要素选项。

3. 点击列表中希望改变的屏幕要素。下拉列表消失，显示该屏幕要素的字体值。

4. 点击Font Value按钮，出现Select Font对话框。

5. 点击相应的字段或其箭头，从两个下拉列表中选择字体名称和字号。点击相应的复选框，还可以选择Bold和Italic。点击OK，返回Default Preferences对话框。

字体列表允许选择系统中安装的任何字体。

6. 根据需要为多个屏幕要素选择字体，然后保存选择结果。

7. 选择希望怎样保存字体选择结果：

a. 如果想把选择的新字体保存为永久的默认字体，点击Save。这会在vee.rc文件中保存新的默认字体。未来的VEE会话将把新字体作为默认值 (直到再次改变字体)。

b. 如果想只对当前VEE会话使用选择的新字体(直到选择File [image] New, Open, 或Exit), 点击OK。

c. 如果想使用选择的新字体，并把它与VEE程序一起保存，点击OK，然后进入File [image] Save As?/span>，在Options区域勾选Save colors and fonts。

d. 如果想取消选择的新字体，点击Cancel。

e. 如果想放弃当前设置，返回默认文件vee.rc中的设置，点击Reset。

另请参阅

默认首选项 使用字体


改变对象的字体

每个对象都有一个可以从对象菜单中进入的Properties Window。可以使用这个窗口改变某个对象的字体。

备注

1. 在对象上点击鼠标右键，打开其对象菜单。从对象菜单中选择Properties，然后选择希望改变的Font 属性。

可以改变的字体取决于对象的特定类。一般来说，可以改变Title文本和Object 文本的字体。

2. 点击希望改变的文本属性，出现Select Font对话框。

3. 点击相应的字段或其箭头，从两个下拉列表中选择字体名称和字号。字体列表允许选择系统中安装的任何字体。通过点击相应的复选框，还可以选择Bold和Italic。

为使用Default Preferences中设置的默认字体，点击Default复选框。

点击OK返回Properties窗口。

选择的新字体出现在对象中，覆盖默认字体。变化只影响这个特定的对象，在保存程序时保存。

快捷方式

双击对象标题栏，进入Properties窗口。

另请参阅

使用字体


改变对象标题

1. 从对象菜单中选择Properties，出现Properties Window。

2. 从列表中选择标题，输入新标题。

快捷方式

双击对象的标题栏，进入Properties窗口。

备注

可以使用Main Window对象菜单上的Properties，改变Execution Window的标题。首先必须存在Panel View for Main。这个标题在Program Explorer中作为程序名称使用。如需与创建Panel Views有关的详细信息，请参阅How Do I ?!--[if gte vml 1]> [image] Build an Operator Interface。


重复操作

允许进行重复操作的一个Edit菜单选项。

用途

Undo命令会撤销操作结果。在Undo操作前，通过使用Redo命令，可以返回状态。

备注

Redo只能用于Undo支持的操作。对所有其它操作，它会变成灰色。

在撤销所有操作，然后启动新操作时，会清除列表重复操作。

如果想了解重复操作堆栈的限制及已知的异常问题，请参阅Undo部分。

位置

从Object Properties菜单中选择Redo。

从Main菜单中，Edit > Redo或CTRL+Y

从任务栏中

另请参阅

Undo


撤消操作

允许在VEE中执行逆操作的一个Edit菜单选项。并不是所有操作都是可以撤消的。

用途

对于Detail，可以撤消Main, User Objects和User Functions中的下述操作：

  • 剪切一条线

  • 增加/删除/修改一个端

  • 在UserObject或UserFunction中增加/删除一个端

  • 对象移动, 对齐

  • 替换一个对象

  • 剪切/粘贴对象

  • 自动滚动

对于Panel，可以撤消Panel, User Objects和User Functions中的下述操作：

  • 对象对齐

  • 对象删除

备注

Undo只适用于某些操作。如果这个图标变成灰色，那么不能进行撤消操作或Undo不支持该操作。

Undo对位置敏感。例如，可以撤消Formula对象删除操作。如果输入一个公式，删除部分内容，可以撤消这一删除操作。因此，不仅可以撤消对象操作，还可以撤消对象内部的文本操作。

Undo还有一个非常有用的Tooltip ( [image])，可以查看提供哪个撤消操作。

在撤消所有操作，并采取新的操作时，只能撤消最新的操作。之前的所有操作不能再撤消。

使当前细节视图和/或面板视图撤消操作堆栈无效的操作。

从在面板视图上拥有相应视图的细节视图中删除或剪切对象，会导致面板视图的撤消操作堆栈无效。

在细节视图中从选定对象创建UserFunction会导致细节视图的撤消操作堆栈无效。如果有一个与源细节视图相关的面板视图，那么面板视图会无效。

在细节视图中从选定对象创建UserObject会导致细节视图的撤消操作堆栈无效。如果有一个与源细节视图相关的面板视图，那么面板视图会无效。

把UserObject拆成细节视图会导致目的细节视图的撤消操作堆栈无效。

把UserFunction转换成UserObject会导致目标细节视图(放置UserObject)的撤消操作堆栈无效。如果有一个与UserFunction相关的面板视图，那么其撤消操作堆栈保持不变。

从UserObject中编制UserFunction会导致源(UOCarrier的位置)细节视图的撤消堆栈操作无效。如果有一个与UserObject相关的面板视图，那么其撤消操作堆栈保持不变。

把对象从一个上下文移动到另一个上下文会导致源细节视图和目的细节视图的撤消堆栈操作无效。如果有一个与源上下文相关的面板视图，且其中一个移动的对象位于面板上，那么源面板视图的撤消操作堆栈也会无效。

在面板驱程上添加导致创建多个输出的任何输出，会导致相关上下文的撤消操作堆栈无效。

以任何方式改变输入端或输出端(包括添加、删除或修改名称、类型或形状)会导致包含UserObject的UOCarrier的上下文视图的撤消操作堆栈无效。

已知异常情况

把Declare Variable, ActiveX Control或XYGraph类型的对象放到细节视图上，然后克隆这个对象，删除其中一个对象。现在重命名其余对象，以便其名称与刚刚删除的对象名称相同。现在按Undo。注意恢复的对象使用不同的名称，因为想使用的名称已经存在。它悄悄地变成了一个为其指配的唯一的新名称。

如果已经选择了一个上下文，按Paste，粘贴对象，然后把对象粘贴到不同的上下文中，将不会登记任何撤消操作。拖动-克隆到不同的上下文中也会发生这种情况。

位置

Edit > Undo或CTRL+Z

从任务栏中 -

另请参阅

Redo和Paste


通过搜索文本查找对象

使用Find对话框 (Edit [image] Find)搜索对象。在包含多个对象、UserObjects和 UserFunctions的大型程序中，Find可以更加简便地定位对象。可以作为搜索标准指定文本和对象属性，设置选项，限制搜索范围。还可以从工具栏按钮上使用Find。

Find button

1. 打开Find对话框(Edit [image] Find或使用工具栏按钮)，出现对话框。

2. 在Find:编辑字段中，输入想搜索的文本。

3. 在General栏中，设置希望为文本搜索定义的限制。

4. 在设置搜索标准后，点击Find，立即开始搜索。

点击Stop停止正在进行的搜索。显示已经找到的结果。

5. 在搜索结束时，Find对话框关闭，出现Find Results对话框。 Find Results包含着与搜索标准相匹配的对象列表。如需与查看列表中的对象有关的信息，请参阅查看查找操作结果。

下图显示了搜索文本upper的Find对话框设置。General 栏中设置的选项显示，搜索结果将包括嵌套的UserObject中的所有对象，并显示文本串中任何地方包含upper的情况。

快捷方式

在键盘上按CTRL+F，打开Find对话框。

备注

为限制Search in列出的搜索范围，在Program Explorer中使用上下文相关菜单。 在UserObject、函数或文件夹名称上点击鼠标右键，出现一个上下文相关菜单，然后点击Find，出现Find对话框，并包括包含上下文相关名称的Search in字段。

Find将不会搜索：

面板或面板上的对象

直线或直线值

端值

另请参阅

浏览程序结构

通过搜索属性查找对象

查看查找操作结果

查找

查找结果


通过搜索属性查找对象

使用Find对话框 (Edit [image] Find)搜索对象。在包含多个对象、UserObjects和 UserFunctions的大型程序中，Find可以更加简便地定位对象。可以作为搜索标准指定文本和对象属性，设置选项，限制搜索范围。还可以从工具栏按钮上使用Find。

Find按钮

1. 打开Find对话框 (Edit [image] Find或使用工具栏按钮)，出现对话框。

2. 在Find: 编辑字段中，输入想搜索的文本。如果打算只搜索对象属性，这一字段可以为空。

3. 在General栏中，设置Search nested UserObjects，控制搜索限制。如果在上一步中输入了文本，那么设置希望为文本搜索定义的其它限制。

4. 在Advanced栏上，可以设置最多三个属性及属性值。这把搜索结果限于包含指定属性和属性值的对象。

a. 点击Property下的按钮，设置属性名称，出现Property Name对话框，其中包含提供的所有对象属性。

滚动列表，双击名称，选择一个属性。按钮上出现属性名称。

b. Value下的按钮可以相对于选择的属性改变模式。选择属性值的方法包括：

从下拉列表中选择一个值。

从对话框中选择一个值。

从调色板中选择一种颜色。

输入文本或数字值。

c. 在必要时，点击Reset，返回Property (Object Type)和Value (All Types)的默认值。

5. 在设置搜索标准后，点击Find，立即开始搜索。

点击Stop停止正在进行的搜索。显示已经找到的结果。

6. 在搜索结束时，Find对话框关闭，出现Find Results对话框。 Find Results包含着与搜索标准相匹配的对象列表。如需与查看列表中的对象有关的信息，请参阅查看查找操作结果。

下图显示了搜索文本upper的Find对话框设置。Advanced栏显示搜索结果将只包括具有指定属性值的对象。注意在搜索中包括属性值时，Adv状态指示符(右上角)会高亮度显示。

快捷方式

在键盘上按CTRL+F，打开Find对话框。

备注

为限制Search in列出的搜索范围，在Program Explorer中使用上下文相关菜单。 在UserObject、函数或文件夹名称上点击鼠标右键，出现一个上下文相关菜单，然后点击Find，出现Find对话框，并包括包含上下文相关名称的Search in字段。

Find将不会搜索：

面板或面板上的对象

直线或直线值

端值

另请参阅

浏览程序结构

通过搜索文本查找对象

查看查找操作结果

查找

查找结果


查看查找操作结果

在使用Find搜索包含特定文本和属性的对象后，Find Results对话框将显示所匹配的信息。Find Results提供了一个简单的方法来查看所找到的对象。这一结果会保留到您进行新的Find操作，允许按需打开或关闭Find Results(Edit [image] Find Results)。

Find Results 按钮

下图显示了一个Find Results范例，它列出了包含文本upper的对象。

使用Find Results对话框

在列表的一行上双击鼠标，所列的对象UserObject或 UserFunction将出现在工作区中。打开UserObject和 UserFunction的编辑窗口，高亮度显示各个对象。

点击列标题，对列表排序。

当选择要查看的一个项目时，Keep Visible按钮的默认设置会保持Find Results打开。当选择一个项目时，点击按钮，切换至Find Results关闭状态。

Keep Visible按钮设置成打开Find Results

Keep Visible按钮设置成关闭Find Results

点击向左或向右箭头按钮，可以查看前面或后面的项目。

Previous 和Next 按钮

点击Find按钮，打开Find对话框，开始新的搜索。这会关闭Find Results，并清除它的内容。

Find 按钮

 当搜索在Find对话框的Advanced栏中指定属性值时，Adv的状态指示器会高亮度显示。

快捷方式

在键盘上按CTRL+R，可以打开Find Results对话框。

备注

Find Results的菜单项和工具栏按钮会变灰，直到Find完成。

在再次打开Find对话框时，将清除上一次Find操作产生的Find Results内容。

另请参阅

通过搜索属性查找对象

通过搜索文本查找对象

Find

Find Results


浏览程序结构

使用VEE Program Explorer (View [image] Program Explorer)，浏览程序的整个结构。Program Explorer可以简便地获得信息，导航程序，或改变程序内容。可以使用这个工具栏按钮迅速打开和关闭Program Explorer。

Program Explorer按钮

查看程序结构

1. 打开Program Explorer。在VEE工作空间左侧打开窗口。

2. 点击控件(+和-)展开和收缩树型图。根据程序内容，Program Explorer会显示由下述信息组成的完整列表：

从Main UserObject开始的UserObject 层级

本地UserFunctions。

导入的UserFunction Libraries和相关函数。

导入的Compiled Libraries和相关函数。

导入的Remote UserFunction Libraries和相关函数。

全局变量，包括声明变量和未声明变量。

相应上下文下的声明局部变量。

相应库下声明的库全局变量。

下图和列表显示了Program Explorer使用的表示各种上下文和变量的图标：

1. 表示整个程序。

2. 表示UserObjects。

3. 表示本地、导入和远程UserFunction。

4. 表示Compiled Function。

5. 表示声明的和未声明的Global Variables和声明的Library Variables。

6. 表示局部变量。

7. 表示库名称、Globals和UserFunctions等类别的容器。

使用上下文菜单

Program Explorer的上下文菜单可以存取程序中的对象和信息。为打开上下文菜单，在列表中一个项目上按鼠标右键，然后点击一个菜单选项。菜单内容根据项目变化。

为查看和存档程序信息，使用特定上下文菜单提供的下述菜单选项。菜单选项操作会相对于项目在程序结构中的位置发生变化：

Print打印程序、UserObject或函数(参阅Print Program和Print Objects)。

Document保存程序、UserObject或函数文档(参阅Save Documentation)。

Calls查找UserFunctions项目调用。

Called By查找调用项目的UserObject或函数。

View 使用变量的当前值打开一个对话框。

为存取程序内容进行改动，使用特定上下文菜单中提供的下述菜单项：

Open在工作空间中查看项目，这与双击项目的结果相同。

Find 打开Find对话框 (参阅Find)，这还会把搜索范围限制在高亮度显示的项目边界上，而不是整个程序。

Generate [image] 允许创建下面一个对象，其中包含一个参考UserFunction标题的表达式。可以把生成的对象放在程序的另一部分中(参阅Call, Formula, If/Then/Else, ShowPanel, HidePanel)。

Cut 打开一个Confirm对话框，允许从程序中删除项目。

Description 打开项目的Description对话框 (参阅Description)。

Properties 打开项目的Properties Window (参阅Properties (对象))。

References查找使用变量的对象。

快捷方式

为在工作空间中查看UserObject、UserFunction或其它上下文，在Program Explorer双击上下文名称。

为查看变量的当前值，双击变量名称，会出现一个对话框，包括与变量类型、形状和数据有关的信息。

技巧

使用Default Preferences，设置每次启动VEE时Program Explorer的默认状态。如果想总是打开或总是关闭Program Explorer，点击Program Explorer工具栏按钮，设置所需的状态，然后打开Default Preferences对话框，点击Save。

Program Explorer按钮

另请参阅

默认首选项


Minimap

关闭或打开Minimap窗口的一个View菜单项。迷你地图是整个细节视图的草图，用红色矩形框指明看得到的部分。红色矩形指明看得见的区域在整个细节视图中的相对位置。

用途

迷你地图显示整个细节视图的草图，用红色矩形指明看得见的部分。

通过使用Minimap，可以迅速跳到细节视图中的某个位置。为到达细节视图中的某个位置：

  • 点击Minimap上的位置

或

  • 把红色矩形拖到Minimap上的位置。

上下文菜单

Print... -- 打印整个细节视图的位图。可以调整Minimap窗口的大小，改变位图的打印尺寸。

Print Auto Fit ... -- 把整个细节视图的位图自动调整成一页大小，打印位图。调整后的位图宽度是页宽，位图高度与其宽度成比例。Copy To Clipboard ... -- 把整个细节视图的位图复制到剪切板中。

Send By Email ... --- 作为电子邮件附件发送整个细节视图的位图。

Save To File ... -- 把整个细节视图的位图保存到一个位图文件中。

备注

只能在细节视图中使用迷你地图，它会自动隐藏在Panel面板中，或在运行时隐藏。

范例

快捷方式

在VEE工具栏上按 [image] 按钮。

位置

View [image] Minimap

另请参阅

导航程序


使用联机帮助

这下面介绍了怎样更多地了解VEE。

1 首先，运行位于Help [image] Welcome菜单中的Multimedia Tutorials。多媒体教程演示了VEE的许多主要功能，可以帮助您加快速度。这些教程显示了构建和运行的VEE程序的屏幕演示，描述了您会看到的内容。这些教程还介绍了有效使用VEE的关键概念。

2 一旦熟悉了VEE，可以在对象菜单的Help项中找到更多信息。可以试验对象，直到了解其工作方式。如果需要了解与对象有关的更多信息，对象菜单提供了最具体的信息。可以先查阅对象菜单。

3 为使用Help内容、索引或搜索功能，在主VEE菜单栏上打开Help。

备注

为了解怎样打开主Help辅助工具及Help内容列表，请参阅“获得帮助"。

使用Help辅助工具

联机帮助提供了与下述内容有关的信息：

• 所有菜单项，及大多数菜单项的快捷方式

• 仪器驱程信息

• 频繁执行的任务及许多范例程序

• VEE术语定义

• 使用帮助辅助工具

• VEE版本

可以浏览内容，使用关键字索引，使用到相关内容的超级链接，甚至进行搜索。VEE中提供了许多Help功能，可以在开发程序中使用这些功能。

备注

VEE还包括开发和调试程序的其它有益功能，如线路探头。如需更多信息，请参阅“调试Agilent VEE中的程序"。

显示与对象有关的帮助

为获得与对象有关的帮助，点击对象菜单按钮，选择Help。

• 选择Flow [image] Repeat [image] For Count，创建一个For Count对象。点击对象菜单，选择Help。出现Help标题，描述For Count。

• 选择Device [image] Formula，创建一个Formula对象。点击对象菜单，选择Help。出现Help标题，描述Formula对象中显示的特定公式。

• 选择Device [image] Function & Object Browser。选择任意选项组合，点击Help。出现与选中的特定对象有关的Help内容。.

查找对象的菜单位置

为查找对象在菜单中的位置，及显示与该对象有关的信息，选择Help [image] Contents and Index，点击Index栏，输入对象名称，点击Display。

例如，选择Help [image] Contents and Index，点击Index栏，输入Collector。点击Display，显示Collector对象的Help内容。

使用Help辅助工具的其它实践练习

• 查找删除对象的快捷方式

选择Help [image] Contents and Index [image] How Do I... Use the Keyboard Shortcuts [image] Editing Programs [image] To Cut an Object or Text。

• 查找单词“terminal”

选择Help [image] Contents [image] Reference [image] Glossary [image] Terminal。

• 查找VEE版本号

选择Help [image] About VEE Pro。

• 找出这一版Agilent VEE中的新功能介绍

选择Help [image] Contents and Index [image] What’s New in Agilent VEE Pro。


存档Agilent VEE程序

通过使用File [image] Save Documentation...命令，可以自动生成程序文档。VEE列出所有对象，包括关键设置、默认值和用户名称、Description项目及任何“嵌套”。例如，UserObject内部的对象从主VEE环境中进行一级嵌套，这些等级用数字表示。

还可以使用Description编制各个对象的文档。

使用Description对话框存档对象,

自动生成文档


使用Description对话框存档对象

所有对象在其对象菜单中都有一个Description项，它提供了一个对话框，接受与该特定对象有关的文档。这个文档文件还为把文档与屏幕转储关联起来提供了一种方式。在本节中，您将在Description对话框中添加一个项目。

1 打开Random.vee程序。

2 从Description中删除模板信息，如下图所示

。

3 注意Description框是丰富文本格式(RTF)框。可以从创建RTF文件的任何程序中检索文件。RTF格式可以更灵活地表示文本数据。

4 在Main对象菜单中，点击Description。在对话框中输入文本：The Random.vee program generates random numbers。在完成时点击OK。

备注

用户看不到Description对话框中的项目，除非用户通过对象菜单存取这些项目。此外，注意可以在这个对话框中插入一个文件。

另请参阅

自动生成文档


自动生成文档

按下述步骤，可以产生一个程序文档文件:

1 打开 Random.vee. 单击 File [image] Save Documentation.... 以 txt 为扩展名输入文件名 （如 Random.txt), 单击 Save. 该文件默认会被保存在 C:\My Documents\VEE Programs 目录下。

2 可以用任一文本编辑器打开该文件以查看和打印。下面的图显示了 Windows 下用Notepad打开的文件。

第一个图显示的是文件开头部分，它包括该文件的信息，修改日期和系统IO配置。

Source file:"C:\\ My Documents \\ VEE Programs \\ Random.vee

Date documented: Wed Sep 27 10:31:08 2006

VEE revision: 8.0

Execution Mode: VEE 8

Convert Infinity on Binary Read: no

I/O Configuration

My Configuration (C:\vee.io)

文件中间部分：

M: Main

Device Type : Main

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name : Main

Declared Scope : Local to Context

Context is secured : off

TrigMode : Degrees

PopupPanelTitle : Untitled

PopupMoveable : on

Delete Globals at Prerun : off

M.0: Main/Int32

Device Type : Constant

Output pin 1 : Int32

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name :

Declared Scope : Local to Context

Wait For Input : off

AutoExecute : off

InitializeAtPrerun : off

InitializeAtActivate : off

InitialValue : 0

EnableStepping : off

DetentSize : 1

DataShape : Scalar

ArraySize : 10

ArraySizeFixed : off

ShowArrayIndices : on

EnableEditing : on

Int32 Value : 0

上图中显示了VEE 对象及其设置。对象前的数字指明了该对象的位置。例如，Main 中的第1个对象被列为M0. 下图是上述文件的其他部分。

M.1: Main/Int32

Device Type : Constant

Output pin 1 : Int32

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name :

Declared Scope : Local to Context

Wait For Input : off

AutoExecute : off

InitializeAtPrerun : off

InitializeAtActivate : off

InitialValue : 0

EnableStepping : off

DetentSize : 1

DataShape : Scalar

ArraySize : 10

ArraySizeFixed : off

ShowArrayIndices : on

EnableEditing : on

Int32 Value : 1

M.2: Main/random(low,high)

Device Type : Formula

Input pin 1 : low (Any, Any)

Input pin 2 : high (Any, Any)

Output pin 1 : Result

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name :

Declared Scope : Local to Context

Formula : random(low,high)

M.3: Main/AlphaNumeric

Device Type : AlphaNumeric

Input pin 1 : Data (Any, Any)

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name :

Declared Scope : Local to Context

ClearAtPrerun : on

ClearAtActivate : on

ShowArrayIndices : on

M.4: Main/Note Pad

Device Type : Note Pad

customHelpMenuName :

customHelpMenuDescription:

customHelpMenuHelpLink :

Declared Name :

Declared Scope : Local to Context

Note Contents : {\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Times New Roman;}}\r\n{\\colortbl ;\\red0\\green0\\blue0;}\r\n\\viewkind4\\uc1\\pard\\cf1\\f0\\fs24 This program , Random, generates a real number between 0 and 1, then displays the results.\\par\r\n}\r\n

注释

执行 Save Documentation 命令后，再执行 File => Print Program 命令 就可以将识别数字加到对象上，这样你就可以把文本文件和打印输出对上了。

另请参阅

使用Description对话框存档对象


合并Agilent VEE程序

利用现有程序最简便的方式是把过去的程序与当前测试合并。通过合并，然后编辑程序，适合当前需求，可以重用程序。

File [image] Merge...命令把一个程序或已经保存的对象集合的内容添加到工作区中，同时保留工作区中已有的内容。在默认状态下，File [image] Merge...显示与VEE一起提供的程序的目录，其中包括通常需要的程序，如柱状图显示屏及用户输入使用的数据输入小键盘(如ID号码)。

另请参阅：

实验9-4：合并柱状图显示程序

实验9-1: UserFunction操作，实验9-2: 创建和合并UserFunction库，实验9-3: 导入和删除库，在大型程序中查找函数


使用库对象

VEE包括可以‘‘Merge''到程序中的对象库。作为VEE安装过程的一部分，库对象安装在下面的目录中：

C:\Program Files\Agilent\VEE Pro 8.0\Lib\

大多数库对象是封装了各个对象的UserObject。可以为库创建UserObject，并把它们保存在：

C:\Program Files\Agilent\VEE Pro 8.0\Lib

Formula对象

另外还提供了可以合并到程序中的Formula对象。每个对象执行有效的转换功能，如从度转换成弧度。

这些文件位于下述位置：

C:\Program Files\Agilent\VEE Pro 8.0\Lib\convert\


使用键盘快捷键

可以使用键盘快捷键执行许多VEE任务。注意键盘快捷键不区分大小写。

文件控制

清除工作区
打开 VEE 程序
保存VEE程序到文件
保存VEE到新文件
打印或复制VEE窗口
退出VEE

程序编辑

VEE菜单导航
打开Function & Object浏览框
选择对象
打开弹出编辑菜单
打开弹出对象菜单
编辑Formula对象表达式
编辑事务
移动文本光标
终止在输入域中的编辑
终止在对话框中的编辑
复制或克隆一个对象或文本
剪切一个对象或文本
为一个对象增加一个数据输入端
为一个队形增加一个数据输出端
删除对象的输入或输出端
删除一条线
刷新VEE窗口

程序导航

查看Main窗口
选择窗口并滚动工作区
调出Find对话框
调出Find Results对话框
导航操作接口面板 在面板视图中启动滚动条

程序调试

运行，暂停，单步或恢复一个VEE程序
查看线上的数据
查看到对象的连接
切换断电设置
获得对象或对话框相关帮助


清除工作区

按CTRL+N。系统会提示您把变动保存到当前程序中(工具栏上New按钮及File [image] New的快捷方式)。


打开VEE程序文件

按CTRL+O。系统将提示您打开一个文件名称 (工具栏上Open按钮的快捷方式，File [image] Open)。


运行、暂停、步进或恢复VEE程序

把VEE程序保存到文件中

按CTRL+S，程序将重新保存到当前文件中，或者系统会提示您文件名(工具栏上Save按钮及File [image] Save的快捷方式)。

备注

保存的文件可能不能向下兼容。检测到第6版、并保存的第5版文件不再兼容第5版。


把VEE程序保存到新文件中

按CTRL+W，系统会提示一个新文件名，程序将保存在这里 (File [image] Save As的快捷方式)。

备注

保存的文件可能不能向下兼容。检测到第6版、并保存的第5版文件不再兼容第5版。


打印或复制VEE窗口

为把VEE窗口复制到MS Windows剪贴板上，在VEE作为活动窗口时，按Alt+Print Screen (工具栏上Print Screen按钮及File [image] Print Screen的快捷方式)。从剪贴板中，可以把VEE窗口粘贴到能够使用剪贴板的其它Windows程序中。

注意，即使在存在对话框时，仍可以使用这些快捷方式捕获VEE屏幕。


退出VEE

按CTRL+E退出VEE (File [image] Exit的快捷方式)。


在对象中添加数据输入端

把指针放在输入端区域，按CTRL+A，在指针位置插入另一个数据输入端(对象菜单 [image] Add Terminal [image] Data Input的快捷方式)。如果已经编辑了对象中的一个字段，您可能需要先按鼠标左键，然后按CTRL+A。

为使用CTRL+A添加一个端，必须激活Show Terminals对象属性，指针必须位于对象左侧的输入端区域上。


在对象中添加数据输出端

把指针放在输出端区域，按CTRL+A，在指针位置插入另一个数据输出端(对象菜单 [image] Add Terminal [image] Data Output的快捷方式)。如果已经编辑了对象中的一个字段，您可能需要先按鼠标左键，然后按CTRL+A。

为使用CTRL+A添加一个端，必须激活Show Terminals对象属性，指针必须位于对象右侧的输出端区域上。


取消输入字段中的一个编辑

按Esc，取消输入字段中的一个编辑。


取消对话框中的多个编辑

按Esc取消对话框中的所有编辑(相当于点击Cancel按钮)。


复制或克隆对象或文本

选择想复制的对象或文本，然后按CTRL+C。这会把对象或文本放到剪切-复制-剪贴缓冲器中(工具栏上Copy按钮及Edit [image] Copy的快捷方式)。注：只能使用CTRL+C、而不能使用工具栏按钮或菜单选项复制文本。

如果想把复制的对象粘贴到工作区中，使用CTRL+V (工具栏上Paste按钮及Edit [image] Paste的快捷方式)。然后点击想要放置对象的位置。将保留连接被复制对象的任何线。注：只能使用CTRL+V、而不能使用工具栏按钮或菜单选项复制文本。

如果想克隆选定的对象，按住CTRL的同时，按鼠标左键，把克隆的对象拖到新位置。

可以从一个工作区复制对象和文本，然后把其粘贴到另一个工作区中。在Windows中，还可以从VEE的一个实例中复制对象和文本，然后把其粘贴到VEE的另一个实例中。可以把对象和文本复制到能够使用Clipboard的其它Windows程序中。


剪切对象或文本

选择想剪切的一个或多个对象或文本，然后按CTRL+X。这会把一个或多个对象或文本放到剪切-复制-粘贴缓冲器中。(工具栏上Cut按钮及Edit [image] Cut的快捷方式)。注：只能使用CTRL+C剪切文本，而不能使用工具栏按钮或菜单选项剪切文本。

可以使用CTRL+V (工具栏上Paste按钮和Edit [image] Paste的快捷方式)，替换错误剪切的对象。然后点击希望放置对象的位置。将恢复对象及其连接。还可以从主菜单中使用Edit > Undo，撤消剪切操作。注：只能使用CTRL+C粘贴文本，而不能使用工具栏按钮或菜单选项粘贴文本。

从一个工作区剪切的对象和文本可以粘贴到另一个工作区中。此外，从VEE的一个实例中剪切的对象可以粘贴到VEE对象的另一个实例中。对象和文本可以粘贴到能够使用剪切板的其它Windows应用程序中。


删除一行

按住Shift+CTRL，把指针放在想删除的行上或附近，按鼠标左键(工具栏上Delete Line按钮和Edit [image] Delete Line的快捷方式)。对这一操作可以使用Undo。


从对象中删除端

把指针放到要删除的端上，按CTRL+D。 (对象菜单 [image] Delete Terminal [image] Input或对象菜单 [image] Delete Terminal [image] Output的快捷方式) 如果在对象中已经编辑了一个字段，可能需要先按鼠标左键，然后再按CTRL+D。

为使用CTRL+D删除端，必须激活Show Terminals对象属性，指针必须放在要删除的端上。

可以按CTRL+Z撤消删除操作。


编辑Formula对象的表达式

下面介绍了在Formula对象中输入一个表达式时提供的编辑操作。一般来说，如果在RTF文件中进行操作，那么就可以在Formula对象中进行操作。

按Enter，插入回车，把光标移到下一行。在一行的中间进行这一操作会断行，把光标后的字符插入到下一行上。在任何一行的开头进行这一操作会在上面插入一个空白行。

在一行的右端按Delete，把下一行与这一行合成一行，当前光标位置不变。

在一行的左端按Backspace，把这一行与上一行合成一行，当前光标位置不变。

向上箭头和向下箭头沿着行向上和向下移动光标，光标的水平位置保持不变。在光标位于最后一行时，按向下箭头会添加新的一行。向右箭头和向左箭头会向右和向左移动光标。

从一行的左端，Shift End会高亮度显示整个行。从一行的右端，Home Shift会高亮度显示整个行。

上一页和下一页功能可以正常使用。

双击一个单词，会高亮度显示这个单词。在一行上点击三下，会高亮度显示整个行。


编辑事务

当输入焦点在一个基于事务的对象(比如，Sequencer 或 To File 对象)的编辑框内时，可以使用下述快捷键：

CTRL+X 将选择的事务剪切到"cut-and-paste"缓冲区(对象菜单 [image] Cut Trans)。

CTRL+V 将选择的事务从"cut-and-paste"缓冲区剪贴到当前所指位置(对象菜单 [image] Paste Trans)。

CTRL+C 将选择的事务复制到"cut-and-paste"缓冲区(对象菜单 [image] Copy Trans)。

Delete 删除列表中所选事务(对象菜单 [image] Delete Trans)。

Insert 将一个事务插入到所选事务前面 (对象菜单 [image] Insert Trans).

CTRL+Z undo最后一次操作。

CTRL+Y redo最后一次操作。

CTRL+Up 上移所选事务(对象菜单 [image] Move Trans Up)。

CTRL+Down 下移所选事务(对象菜单 [image] Move Trans Down)。

Shift+Up/Down 选择多个事务。

注释

对于 Move 操作只支持单个事务。

详细信息请参阅 Help [image] Index and Contents [image] Tell me about... I/O Transactions。


移动文本光标

在字母数字文本输入区中 (如Note Pad对象中)，使用光标控制箭头键 (向上箭头, 向下箭头, 向左箭头, 向右箭头)，按箭头方向移动光标。


导航VEE菜单

通过使用键盘菜单加速器，可以导航VEE菜单。每个菜单项有一个带下划线的字母，可以与Alt键一起作为加速器使用。键盘加速器的字母不分大小写。换句话说，即使带下划线的字母是大写，仍可以使用小写作为加速器。让我们看一个例子。

在Device菜单中，D带有下划线(但也可以使用d作为加速器)，在Data菜单中，t带有下划线：

在PC上，按Alt+d，选择Device菜单，或按Alt+t，选择Data菜单。

每个子菜单都有自己的加速器，可以使用它导航，直到菜单树。例如，选择Data [image] Continuous [image] Real64 Slider。

在PC上，按Alt+t，然后按Alt+i，然后按Alt+r。


调出Function & Object Browser

按CTRL+H (工具栏上fx按钮及Device [image] Function & Object Browser的快捷方式)。


调出弹出编辑菜单

把指针移到Main Window工作区空白部分，按鼠标右键。(这也适用于UserObject和UserFunction工作区。)


调出弹出对象菜单

把指针移到对象的任何部分上，按鼠标右键。


刷新VEE窗口

按CTRL+Q，刷新VEE窗口。


选择对象

为选择一个对象，把指针移到对象上，按鼠标左键。选中的对象会使用阴影高亮度显示。

为选择和反选对象，按住CTRL，把指针移到对象上，按鼠标左键。如果目前还没有选中对象，那么这时会选中对象。如果目前已经选中对象，那么会反选。

有三种方式选择多个对象。

  • 按住CTRL，在希望选择的每个对象上按鼠标左键。

  • 在按CTRL的同时，点击并按住鼠标左键，然后在希望选择的多个对象上拖动一个外框。它会在对象选项之间切换。

  • 按CTRL+A，选择当前工作区中的所有对象(Main Window, UserObject或UserFunction)，而不管它们目前是否已经选中 (Edit [image] Select All的快捷方式)。


查看主窗口

按CTRL+M (View [image] Main的快捷方式)。


选择窗口和滚动工作区

为在VEE工作区打开的一堆窗口中移动：

按CTRL+Tab或CTRL +F6，从上到下移动通过一堆窗口。

按CTRL+Shift+Tab或CTRL+Shift+F6，从下到上移动通过一堆窗口。

把指针放在Main、UserObject或a UserFunction窗口工作区内部任何地方：

按Shift+向上箭头, Shift+向下箭头, Shift+向左箭头或Shift+向右箭头，按箭头键方向滚动工作区。

按Page Down，把工作区向上滚动一屏。

按Page Up，把工作区向下滚动一屏。

按Shift+Page Down，把工作区向左滚动一屏。

按Shift+Page Up，把工作区向右滚动一屏。

按Home，把程序的左上角移动到工作区的左上角。

按Shift+Home，把程序的右下角移动到工作区的右下角。


调出Find对话框

按CTRL+F (工具栏上Find按钮及Edit [image] Find的快捷方式)。


调出Find Results对话框

按CTRL+R (工具栏上Find Results按钮和Edit [image] Find Results的快捷方式)。在Find操作成功后可以使用这个命令。


导航操作人员接口面板

如果您或另一名VEE编程人员已经在VEE程序中创建了一个操作人员接口面板，那么可以使用下述键导航面板：

按Tab和Shift+Tab，从操作人员接口面板中的一个字段移到下一个字段。Tab键在字段之间把焦点向前移，Shift+Tab把焦点向后移。在输入字段有焦点时(通过反白指明)，可以编辑输入字段。在按钮有焦点时(通过虚框指明)，可以如下所述"按"这个按钮。

按空格键，"按"有焦点的按钮。

使用相应的字母数字键，输入目前有焦点的输入字段。按Enter或Return，结束和接受编辑；或按Esc中止编辑。

如果编程人员已经定义，按Enter或Return，在操作人员接口面板中"按"默认按钮。

How Do I... Build an Operator Interface下的VEE Help中详细介绍了操作人员接口面板视图及怎样使用这些视图。


在面板视图中启动滚动条

在Property窗口中，把ScrollBarsEnabled设置为True，为面板视图启动滚动条。在默认情况下，ScrollBarsEnabled为False。细节视图不能使用ScrollBarsEnabled。

另请参阅

导航程序, Minimap, 导航操作人员界面面板


运行、暂停、步进或恢复VEE程序

按CTRL+G (或F5)运行VEE程序 (工具栏上Run按钮及Debug [image] Run/Resume的快捷方式)。

按CTRL+P暂停正在运行的VEE程序 (工具栏上Pause按钮及Debug [image] Pause的快捷方式)。(为停止程序，必须点击工具栏上的Stop按钮。)

按F10步进暂停的VEE程序 (工具栏上Step Over按钮及Debug [image] Step Over的快捷方式)。

按CTRL+T (或F11)步进暂停的VEE程序 (工具栏上Step Into按钮及Debug [image] Step Into的快捷方式)。

按Shift-F11步进暂停的VEE程序 (工具栏上Step Out按钮及Debug [image] Step Out的快捷方式)。

按CTRL+G恢复暂停的VEE程序 (工具栏上Resume按钮及Debug [image] Run/Resume的快捷方式)。


查看线上的数据

把鼠标指针移动到想探测的线上，按鼠标左键(Debug [image] Line Probe的快捷方式)，将显示线上最后数据容器的相关信息。


查看到对象的连接

按下Shift，把指针指向希望探测的对象上，按鼠标左键 (Debug [image] Object Probe的快捷方式)。高亮度显示连接到被探测对象上的所有线和对象。


切换断点设置

选择一个或多个对象，然后按CTRL+B (工具栏上Toggle Breakpoint按钮和Debug [image] Toggle Breakpoint的快捷方式)。

每个选中的对象上的断点切换到相反的状态。


获得对象或对话框相关帮助

在选择一个对象时，按F1打开该对象的Help主题(对象菜单 [image] Help的快捷方式)。如果选择了多个对象，那么会为选择的第一个对象打开Help主题。如果没有选择对象，那么将打开主Help Contents窗口。

在打开一个对话框时，如Default Preferences，按F1打开该对话框的Help主题 (点击Help按钮的快捷方式)。


改变打印首选项

可以改变VEE在打印程序中使用的默认首选项。

为显示Default Preferences对话框，选择File >Default Preferences，然后点击Printing一栏。

在改变首选项后，选择希望怎样保存设置：

a. 为把设置保存为新的默认值，点击Save。这会在.veerc文件中保存新的值。这些首选项将作为未来VEE 会话的默认值使用(直到再次改变它们)。

b. 为只对当前VEE会话使用新的首选项(直到选择File [image] New, Open或Exit)，点击OK。

c. 为把首选项设回默认值，点击Reset。

d. 为取消变动，点击Cancel。

改变打印机调色板

1. Screen Element字段和B&W Printer Darkness字段都提供了下拉列表。为改变Detail View的黑色程度(灰度值)，点击B&W Printer Darkness (或箭头)。

2. 现在点击希望的黑色程度。如果希望Detail View的背景色为白色，点击0 % (White)。(大多数VEE要素在默认情况下设置为Automatic grayscale。屏幕调色板中的颜色自动转换成相应的灰色阴影。)

改变打印输出内容

1. 为改变Print Magnification值，点击这个字段，编辑其取值。(默认值是75%。可以设置大于或小于100的值，改变打印的图像的大小。)

2. 选择其它打印选项，定制报告格式：

Print Header and Index Page在每页的顶部打印标题，其中包含文件位置和日期/时戳，有一个索引，列出报告的各个章节及页码。

Print Program Explorer 打印Program Explorer的扩展视图。

Print Cover Page 包括程序的文件名、修订日期、执行模式、保存文件的格式及VEE修订版本号。

Print I/O Configuration 打印仪器配置的扩展树形图。可以在I/O [image] Instrument Manager?/font>中查看仪器配置。

另请参阅

改变默认字体


设置打印机

VEE支持使用HP LaserJet、HP DeskJet及大多数PostScript?/span>打印机进行VEE打印及绘图操作。此外，VEE支持大多数兼容HP-GL的绘图设备。

为改变VEE的打印机配置，采取下述步骤。(在大多数情况下，可以使用默认打印机配置)

1. 选择File [image] Print Setup，出现Print Setup对话框。

2. 在Print Setup对话框中使用标准Microsoft Windows技术，选择希望的打印机配置。

3. 点击Properties出现更多的打印选项，或点击OK确认选择结果。


打印VEE工作空间

可以打印VEE窗口中目前看得到的工作空间内容。

1. 为立即打印工作空间，在工具栏上点击Print Screen按钮。

Print Screen按钮

或

1. 使用File [image] Print Screen，出现Print对话框。

2. 如果打印配置可以接受，点击OK打印VEE工作空间。也可以改变参数，然后点击OK。打印工作空间，包括工具栏和状态栏。

技巧

还可以使用Print Screen对象，以程序化方式打印整个工作空间。

快捷方式

即使在显示了对话框、但工具栏按钮和菜单不能使用时，仍可以使用下述快捷方式捕获VEE屏幕：

在任何时候，在键盘上按Alt+Print Screen，在Microsoft Windows剪切板中捕获VEE窗口。(如果程序正在运行，它会在瞬间暂停。) 然后可以把图像粘贴到Microsoft Paint或其它Windows图形软件中。.

另请参阅

Print Screen对象


打印VEE程序

可以打印目前在VEE窗口中打开的代表的程序。可以打印整个程序或打印部分程序。

打印整个程序

1. 选择File [image] Print Program，出现Print Options对话框。这些选项允许控制打印程序的详细程度。

Print Nested UserObjects 打印程序中包含的所有UserObject中的内容。

Print Object Views 打印包含有用信息的对象的Open View。

根据改变打印首选项中描述的默认首选项设置其余选项。在每次打印程序时，您都有机会改变打印首选项。

2. 点击OK，出现Print对话框。在需要时改变打印配置。

3. 再次点击OK，打印代表的程序。

从Program Explorer中打印

可以从Program Explorer打印整个程序或部分程序：

1. 为查看Program Explorer，在工具栏上点击the Program Explorer按钮 (或使用View [image] Program Explorer)。

Show/Hide Program Explorer按钮

2. 使用鼠标右键，点击希望打印的Program Explorer中的上下文名称。您可能需要展开Program Explorer的树形图，查看提供的所有名称。

为打印整个程序，点击程序或顶部的文件名。

为打印程序中的一个上下文，如Main、UserObject或UserFunction，点击某个名称。

3. 在出现的上下文菜单中，点击Print，出现 Print Options对话框。上面介绍了其选项。

4. 设置首选选项，然后点击OK。

5. 出现Print对话框，在需要时改变打印配置。

6. 点击OK，打印程序。

下图显示了Program Explorer，它带有上下文相关菜单，准备打印UserObject。


在VEE程序中打印对象

可以在VEE程序中打印选择的对象。

1. 在程序中选择一个或多个对象。点击一个对象，选择这个对象。为选择多个对象，按住CTRL键，点击多个对象，或按住CTRL键，使用鼠标在多个对象周围画一个矩形。

2. 选择File [image] Print Objects，出现Print对话框。在需要时改变打印配置。

3. 点击OK，打印选择的对象。

技巧

通过在这些对象中添加Print控制输入，还可以以程序化方式打印对象。这适合打印图形XY画面对象。


把数据发送到打印机

可以把数据直接从VEE程序发送到打印机上。

1. 在程序中添加一个To Printer对象(I/O [image] To [image] Printer)，把数据输入端连接到希望打印的数据源。

2. 双击To Printer图标，显示Open View，其中包含输出数据的I/O处理。

3. 默认输出处理是WRITE TEXT a EOL。在需要时，改变处理，以某种其它形式输出数据。

4. 运行程序。在To Printer对象运行时，数据输出到打印机，打印机使用当前打印配置打印数据。

技巧

To Printer对象通过Windows打印机驱程输出数据，它会添加一个标题，并改变字体。为从VEE for Windows中直接把ASCII文本输出到打印机上，使用To File对象，把文件名设为LPT1 (或正在使用的打印机端口)。

另请参阅

编辑文件I/O处理

把数据写入文件


打印图表

有一种方式，可以从XY显示对象中打印图表，如XY Plot or Waveform (Time)对象。

从XY画面的对象菜单中选择Print命令。


加载仪器驱程

Agilent VEE支持使用仪器驱程和直接I/O控制仪器。仪器驱程包括Panel Driver (通过Panel Driver 和 Component Driver对象控制)、 VXIplug&play Driver (通过Plug&play Driver对象控制)和IVI-COM Driver (通过IVI-COM Driver对象控制)。Direct I/O对象允许使用仪器完成低级处理。

必须先安装相应的仪器驱程文件，然后才能使用任何仪器驱程对象。对与仪器通信的仪器驱程，还必须安装Agilent I/O库。

许多Panel Driver与Agilent VEE一起提供。在安装Agilent VEE时，可以选择希望安装的多组驱程。在默认状态下，将安装多个驱程，运行特定的范例程序。如果需要安装更多的驱程，运行VEE setup.exe程序，选择需要的驱程选项。

备注

VXIplug&play Driver由提供仪器的制造商提供。安捷伦科技为许多安捷伦仪器提供VXIplug&play Driver。随着时间推移，还会出现新的仪器驱程文件和更新的仪器驱程文件。为方便用户，安捷伦以电子方式提供这些文件。文件下载说明请参阅获得支持和下载仪器驱程。


增加基于USB或基于LAN的仪器

为了为VEE配置基于USB和基于LAN的仪器，必须使用与安捷伦I/O驱程库提供的安捷伦IO库套件。VEE要求IO Libraries Suite 14.0或更高版本。

对基于USB的仪器

1. 对USB，打开仪器电源；连接USB电缆。如果要从Instrument Manager中删除USB仪器，那么必须先拔、再插仪器的USB电缆。

2. 运行Agilent Connection Expert，它会自动感应到USB设备。

3. 在希望时编辑别名。通过提供一个可以管理的名称，而不是作为标准USB标识符的一长串序列号，别名简化了命名方案。

4. 运行Find Instruments，根据其别名识别USB设备。

对基于LAN的仪器

1. 运行Agilent Connection Expert

2. Configured Interfaces应包括TCPIP0

3. 高亮度显示这个列表，选择"Refresh this LAN interface"。如果LAN设备已经正确连接，那么应自动发现LAN设备。

现在启动Instrument Manager，选择Find Instruments。如果TCP/IP地址正确，且仪器联机，那么它会出现在Instrument List中。


添加仪器配置

一旦Instrument Manager配置中列出仪器，那么可以简便地使用仪器控制对象。

自动添加仪器

Auto Discovery为添加和配置IEEE-488.2和SCPI仪器提供了一种简单的方式。在仪器连接到计算机上并通电时，可以使用这种方法。

1. 选择I/O [image] Instrument Manager?/font>，出现Instrument Manager对话框，Instrument List区域中显示当前配置。

2. 点击Settings，出现Auto Discovery Settings对话框。

3. 点击Detect, identify和configure drivers...单选按钮，然后点击OK。

4. 点击Find Instruments。

Auto Discovery流程在运行时显示状态。在Auto Discovery完成时，会更新当前配置，增加一个名为"newInstrument"的仪器项。这个仪器项还显示仪器的型号和I/O地址。现在可以点击Save，保存这一配置，也可以选择编辑新仪器项的部分细节。(大多数人会改变仪器名称。) 参阅编辑仪器配置。

5. 点击Save按钮，关闭对话框，保存新配置。

手动添加仪器

1. 选择I/O [image] Instrument Manager?/font>，出现Instrument Manager对话框，Instrument List区域中显示当前配置。

2. 点击Add... ，出现Instrument Properties对话框。这个对话框允许为新仪器输入所需的基本配置信息。

3. 使用默认的Name或输入一个唯一的新名称。

4. 如果想改变Interface，点击接口名称，显示支持的接口列表。点击连接到仪器上的接口。

5. 点击Address字段，设置仪器地址。如需与确定某台仪器使用什么地址有关的信息，请参阅仪器用户手册。

6. 如果仪器连接到联网系统上的远程主机，那么Gateway主机名应该变化。

7. 可选：为设置其它设备属性，点击Advanced...按钮。如需与Advanced属性有关的信息，请参阅编辑仪器配置。(不管是增加新项目还是编辑现有项目，基本和高级"Instrument Properties"对话框的工作方式相同。)

8. 点击Save按钮，关闭对话框，保存新配置。

备注

如果添加或去掉系统上使用的接口卡，那么必须运行Agilent Connection Expert，更新I/O_config文件。如需与安装和配置接口有关的完整信息，请参阅Agilent I/O Libraries Suite的联机帮助。

VEE 7.0及以上版本支持NI Libraries 3.0及以上版本。

另请参阅

加载仪器驱程

编辑仪器配置

Instrument Manager

仪器用户手册


删除仪器配置

可以从Instrument Manager对话框中删除仪器。

1. 选择 I/O [image] Instrument Manager.... 然后点击选择希望删除的仪器配置。

2. 点击Remove按钮，从列表中删除选项。

3. 点击Save按钮，退出对话框，保存新配置。

备注

如果要增加或删除系统中使用的接口卡，那么必须运行Agilent Connection Expert，更新I/O_config文件。如需与安装和配置接口有关的完整信息，请参阅 Agilent I/O程序库套件联机帮助。

另请参阅

编辑仪器配置

Instrument Manager


编辑仪器配置

可以在当前的Instrument List中对任何仪器进行配置。

1. 选择 I/O [image] Instrument Manager，打开Instrument Manager对话框，当前配置出现在Instrument List区域。

2. 在Instrument List中双击要配置的仪器，打开Instrument Properties对话框。下面将描述如何改变各种仪器属性。

配置仪器的基本属性

在Instrument Properties对话框中，你可以指定下述属性：

Name: 它可以是任何有助于辨别仪器的名称。建议以字母开头且不包含空格。

Interface: 连接仪器的接口的类型。

VISA Alias: VISA地址的别名。

VISA Address: 仪器的VISA地址。

Board Number: 接口板的号码。该号从0开始编码，缺省为0。

Gateway: 如为本地接口，选择host。如为LAN-gatewayed接口，输入远程网关的主机名(或 IP 地址)。

注意除"Name"外，所有属性都必须准确反映仪器或接口硬件的物理特性。比如，不能将一个仪器的VISA Address中GPIB总线地址改为另外一个。只能先通过仪器上的开关或按钮改变它总线地址，然后再把这个新地址输入VEE Instrument Properties对话框中VISA Address域中。

1. 在Instrument Properties对话框中，单击要修改的域，输入(或选择)一个新值。修改所有要修改的域。

2. 单击Save按钮，关闭对话框并保存这个新的配置。

编辑仪器高级属性

1. 在Instrument Properties对话框中，单击Advanced... 按钮，打开Advanced Instrument Properties对话框。根据所选接口类型的不同，该对话框显示不同的栏。下表列出了各种接口的Advanced Instrument Properties对话框中会出现的栏。

栏 接口 | General Driver | Direct I/O Driver | Plug&play Driver | IVI-COM Driver | Panel Driver | serial Driver | A16 Space Driver | A24/A32 Space Driver
GPIB | Yes | Yes | Yes | Yes | Yes | No | No | No
ASRL | Yes | Yes | No | No | Yes | Yes | No | No
TCP/IP | Yes | Yes | Yes | Yes | Yes | No | No | No
USB | Yes | Yes | Yes | Yes | Yes | No | No | No
NIDAQ | No Advanced Dialog box
VXI | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes
GPIO | Yes | Yes | No | No | Yes | No | No | No

2.单击各个栏可以修改缺省配置或单击按钮修改状态。应该根据仪器和用于控制仪器的对象（比如，Panel Driver, Plug&play Driver, 或 Direct I/O）来修改设置。 Panel Driver, Plug&play Driver, or Direct I/O.

要使用一个仪器的驱动程序，必须在Panel Driver, IVI-COM 或 Plug&play Driver 栏中制定驱动程序，且该驱动必须已保存在硬盘上。

要参考各种配置的详细信息，请单击对话框上的Help按钮。

3.单击Save按钮，关闭对话框并保存这个新的配置。

注释

对NIDAQ接口，可以在它的Instrument Properties对话框中选择驱动程序类型。

另请参阅

添加仪器配置，Instrument Manager


嵌入式I/O配置和合并

VEE Pro可以从也包含着嵌入式I/O配置的程序文件中合并和导入程序要素。但是，不能合并或导入嵌入式I/O配置本身。如果合关(导入)的对象要求配置好的仪器，那么必须扩大局部I/O配置，包括这些仪器。

一种方案是在当前I/O配置中添加仪器，与"主"程序一起保存配置。(换句话说，程序文件包含着所有合并的要素，或程序文件执行Import Library) 另一种方案是保证在运行程序的计算机上，全局I/O配置文件(vee.io)中包含所有仪器。

VEE使用下述步骤搜索全局I/O配置文件：

1. 如果存在名为HOME的环境变量，VEE一直在这里查找I/O配置文件。(如果%HOME%目录中不存在I/O配置文件，那么将创建一个空白的I/O配置。)

2. 如果没有定义HOME环境变量，那么VEE会在下述目录中查找I/O配置文件：

<%USERPROFILE%>\Local Settings\Application Data\Agilent\VEE Pro

例如，如果JohnDoe登录并运行VEE程序，那么VEE会查找I/O配置文件：

C:\Document and Settings\JohnDoe\Local Settings\Application Data\Agilent\VEE Pro\vee.io


Dynamic I/O Automation Server

在以前的VEE版本中，VEE I/O配置文件中的仪器总线地址是静态的(固定的)。在6.0版中，Dynamic I/O Automation Server允许以程序化方式查找和识别仪器。这提供了全新的灵活性。例如，可以查找所有仪器，然后使用Programmable Instrument Properties设置Direct I/O对象。

用途

为从VEE中使用Dynamic I/O Automation Server：

选择Device [image] ActiveX Automation References，出现ActiveX Automation References对话框。然后复选Agilent VEE DynamicIO 1.0 Type Library，点击OK。

选择Device [image] Function & Object Browser，出现Function & Object Browser对话框。选择Type: ActiveX Objects，DYNAMICIOLib显示为Library。

范例

Help [image] Open Example� InstrumentIO目录中提供了VEE范例。

另请参阅

由于这一工具是独立式ActiveX自动服务器，因此也可以从其它应用程序中使用这一工具，如C++和Visual Basic。


使用Direct I/O对象

为增加直接I/O对象，使用Instrument Manager对话框。我们以HP 34401A万用表配置为例。

1. 选择 I/O [image] Instrument Manager...，出现一个对话框，其中列明已经配置的仪器。

2. 点击希望在工作区中增加的仪器。在本例中，点击dmm(hp34401a@(NOT LIVE))。

3. 点击Properties按钮，然后在Instrument Properties对话框中，点击Advanced?/span>按钮。在General一栏的Advanced Instrument Properties对话框中，把Live Mode设为ON。点击OK按钮，返回Instrument Manager。

4. 点击Direct I/O按钮，出现直接I/O对象的轮廓线。把轮廓线放在工作区中希望的位置，点击鼠标按钮。对象的标题条中包含仪器已配置的名称。

5. 双击处理区，输入仪器命令。

另请参阅

使用Direct I/O读取数据

Direct I/O

MultiDevice Direct I/O

实验3-3: 使用Direct I/O


使用直接I/O读取数据

这个程序说明了怎样使用直接I/O对象，从HP 34401A万用表中读取数据。

1. 在工作区中增加一个为地址722配置的直接I/O对象，如使用直接I/O对象所示。

2. 直接I/O对象使用处理与仪器通信。双击对象中"空白的"处理 (高亮度显示的字段)。这时会出现一个I/O Transaction对话框，变量a会高亮度显示。在这个位置输入字符串"MEAS:VOLT:DC?" (包括引号)。点击OK，创建处理WRITE TEXT "MEAS:VOLT:DC?" EOL。

3. 从对象菜单中选择Add Trans，增加第二个处理，或双击下一个空白处理。把处理对话框操作变成READ，把编码变成TEXT。点击OK。

4. 直接I/O对象现在有两个处理：

a. WRITE TEXT "MEAS:VOLT:DC?" EOL把命令串"MEAS:VOLT:DC?"写入地址722上的仪器。对HP 34401A万用表，命令串MEAS:VOLT:DC?意味着"output one dc voltage reading"(输出一个DC电压读数)。

b. READ TEXT x REAL64从地址722的仪器读取实际格式的文本数据，在X数据输出端上输出数据。

5. 为结束程序，在工作区中增加一个AlphaNumeric显示对象，并如下图所示进行连接。(如果您已经把HP 34401A万用表连接到地址722上的GPIB，那么可以运行这个程序。)

另请参阅

直接I/O

多设备直接I/O

实验3-3: 使用直接I/O

Help [image] Contents and Index [image] Tell Me About... I/O Transactions

具体仪器的编程手册


使用Plug&play Driver对象

使用Instrument Manager对话框，在工作区中添加一个 VXIplug&play Driver对象。

备注

VXIplug&play Driver对象不能与和同一程序中同一仪器通信的任何其它仪器控制对象(Panel Driver, Component Driver或Direct I/O)共用。

1. 选择I/O [image] Instrument Manager...，出现一个对话框，列出配置的仪器。

2. 点击想要添加到工作区中的仪器。如果它配有一个VXIplug&play驱程，Plug&play Driver按钮会激活。

3. 点击Plug&play Driver按钮，把To/From VXIplug&play对象放在工作区中。

4. 双点击一个空事务(或从对象菜单中选择Add Trans或Insert Trans)，出现Select a Function Panel对话框。它显示了划分成逻辑类别的函数面板。不同驱程的类别会有所不同。

点击[+]和[-]图标，展开和折叠文件夹和函数结构。

点击[f(x)]图标，选择想要使用的函数面板。

5. 在Select a Function Panel对话框上点击OK，出现Edit Function Panel对话框。

6. 把Edit Function Panel上的设置编辑成需要的值。使用Help按钮，可以获得与特定仪器驱程有关的更多信息。

7. 点击OK。如果想为仪器设置另一个函数，双击To/From VXIplug&play对象中的下一个事务。

另请参阅

To/From VXIplug&play


在VEE中使用NI数据采集

一次只支持一个PXI桥接器，且其PCI总线号码必须落在0 – 9(含)之间。

VEE中支持五种不同的National Instruments驱动程序库：niDMM, niSCOPE, niDAQ, niSWITCH, 和 niFGEN。

Instrument Manager象支持的任何其它仪器一样配置和发现使用这些库的仪器。

1 I/O [image] Instrument Manager

2 选择Add，输入仪器名称，使用Interface下拉框，选择“NIDAQ”。

3 命名仪器，从下拉列表中选择驱动程序类型。

4 为仪器指配一个地址，设置Live Mode。

• 对SCXI，地址是SCXI{Cage #}::Slot Number

• 对PXI，地址是PXI{Cage #}::Slot Number

• 对传统NIDAQ，地址是1 - 64

调用这些驱动程序库中的函数实际上会直接调用在计算机上已经安装的NI库，如下图所示。

为每个库中的所有函数提供了NI帮助。另外还提供了一些高级安捷伦函数，简化使用NI函数调用导致的不必要的复杂任务。

SCXI支持

目前，系统一次只支持一个SCXI卡槽，其机箱号码必须落在1 – 5(含)之间，与NI-MAX设置一致。

对VEE来说，有两种SCXI模块。这两种类型主要取决于SCXI卡槽连接到系统上的方式。在从Instrument Manager中选择Find Instruments后，SCXI设备会表现为NIDAQ、NI-SWITCH或两者。

通过NIDAQ模块，只能使用NIDAQ驱动程序中的SCXI_xxxx处理。使用任何其它处理(如Analog In, Analog Out, Digitial In等)会导致VEE错误817。例如，RTSI_Clear处理会导致错误，而SCXI_Calibrate则不会导致错误。

表现为NI-SWITCH的SCXI模块采用NI-SWITCH驱动程序。某些SCXI模块同时表现为NI-DAQ和NI-SWITCH这两种类型。可以互换使用这些模块，确定最适合需求的驱动程序。

SCXI Addressing：在确定SCXI设备地址时，其为SCXICageID::Slot#，如SCXI2::4。

另请参阅

配置仪器，使用面板驱动程序，使用Direct I/O，使用PC插件电路板，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


IVI-COM和Instrument Manager

IVI是IVI基金会正在开发的一种新的仪器驱动程序标准。IVI基金会是为促进测试仪器编程规范而建立的一家联合会。这些规范提供了多种优势，但主要优势是可以实现更简单的仪器互换能力。如需了解IVI基金会相关信息，请访问：http://www.ivifoundation.org/。

IVI标准的优势是仪器互换能力。假设两个厂商都为自己的DMM提供IVI-COM驱动程序。为满足IVI标准，基本类驱动程序必须能够互换。这意味着不管在系统上使用哪个驱动程序，这两家厂商提供的DMM都将正常运行。您的代码可以重用，而不需任何干预。

IVI-COM驱动程序方案有四种。在任何情况下，您必须先为将要使用的仪器下载和安装IVI驱动程序，然后应用下述四种方案中的一种方案：

1 在仪器互换能力不重要，使用一种设备驱动程序就足够了时使用这一方案。

启动Instrument Manager，添加一部仪器。双击仪器，进入属性页，选择Advanced。选择IVI-COM Driver一栏，选择与仪器相匹配的IVI驱动程序名称。现在您已经为仪器设置了一个仪器专用驱动程序。仪器专用设备驱动程序拥有制造商提供的功能，使其与同类其它仪器驱动程序区分开来。

这时，可以回到Instrument Manager，选择仪器，选择IVI-COM Driver按钮，创建一个To/From处理对象。

2 在仪器互换能力重要，使用一种设备驱动程序就足够了时使用这一方案。

启动Instrument Manager，添加一部仪器。双击仪器，进入属性页，选择Advanced。选择IVI-COM Driver一栏，选择与仪器相匹配的IVI驱动程序名称。在标有Instrument Interchangeabililty的框中，复选标有Use Class Compliant Interface的复选框。复选这个框告诉VEE您想让VEE与只使用符合仪器驱动程序类的接口的仪器通话。这使得仪器能够与同类其它仪器互换，如DMM或Scope。

3 在仪器互换能力不重要，使用IVI会话名称很重要时使用这一方案。

启动Instrument Manager，添加一部仪器。双击仪器，进入属性页，选择Advanced。选择IVI-COM Driver一栏，选择与仪器相匹配的IVI session名称。IVI会话名称将从IVI Config Store中收集仪器的配置信息，因此资源字符串将变成灰色。

如果您还没有定义会话，进入Instrument Interchangeability框，选择标有Configure IVI Driver Session的按钮。不要复选Use Class Compliant Interface复选框。出现的应用用来管理IVI Config Store信息。左上方的图标找到与您的计算机直接相连的仪器，读取 IVI Config Store中识别的其它仪器。

一旦已经找到仪器，在希望增加会话的仪器上点击鼠标右键，选择Add Instrument Session。在运行这个向导前，计算机上必须已经安装了IVI驱动程序。在向导完成时，可以选择刚刚创建的会话名。

您将使用具有IVI会话名的仪器专用驱动程序。

4 如果仪器互换能力和使用IVI会话名称都很重要时使用这一方案。

启动Instrument Manager，添加一部仪器。双击仪器，进入属性页，选择Advanced。选择IVI-COM Driver一栏，选择与仪器相匹配的IVI session名称。

如果您还没有定义会话，进入Instrument Interchangeability框，选择标有Configure IVI Driver Session的按钮。在任何情况下，复选Use Class Compliant Interface复选框。

出现的应用用来管理IVI Config Store信息。左上方的图标找到与您的计算机直接相连的仪器，读取 IVI Config Store中识别的其它仪器。

一旦已经找到仪器，在希望增加会话的仪器上点击鼠标右键，选择Add Instrument Session。在运行这个向导前，计算机上必须已经安装了IVI驱动程序。在向导完成时，可以选择刚刚创建的会话名。

您将使用具有IVI会话名的同类驱动程序。

另请参阅

配置仪器，使用面板驱动程序，使用Direct I/O，使用PC插件电路板，在VEE中使用NI Data Acquisition，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


使用Panel Driver对象

使用Instrument Manager对话框，在工作区中添加Panel Driver对象。我们以HP 34401A万用表配置为例。

1. 选择I/O [image] Instrument Manager...，出现一个对话框，在Instrument List区域中列出配置的仪器。

2. 点击想添加到工作区中的仪器。如果它配置了一个仪器驱程文件，Create I/O Object区域中的Panel Driver按钮激活。如需范例，点击dmm(hp34401a@(NOT LIVE))。

3. 点击Panel Driver按钮。仪器面板对象上出现外框。把外框放在工作区中所需的位置，按鼠标键。

4. 关闭活动模式(默认值)，hp34401a仪器面板生成仿真数据。试着点击显示字段中的?，出现仿真读数。只有Panel Drivers中才能使用活动模式。

关闭活动模式，即使不存在仪器，仍可以运行I/O程序。一旦已经测试了程序，并连接了仪器，可以把活动模式设置为ON。

5. 在默认情况下会显示Measure Panel，允许选择Function, Range等等。为改变Function设置，点击标有DC Volts的Function按钮。

6. 如果想把函数变成DC Amps，双击列表中的DC Amps。如果想变回DC Volts，点击Function按钮，其现在标为DC Amps，然后双击列表中的DC Volts。

在活动模式关闭时，这些变化都不会影响仪器，即使仪器连接到系统上。但是，如果活动模式打开，HP 34401A万用表连接到GPIB (正确确定地址和配置)，VEE仪器面板对象上的变化将自动改变仪器状态。

7. Measure Panel只是可以选择的多个面板之一。点击对象右上角的Measure Panel按钮。

8. 双击列表中的Status Panel，出现Status Panel。

9. 如果想返回Measure Panel，点击Status Panel按钮，双击Measure Panel。

仪器面板对象中的各种面板允许控制仪器的几乎所有函数。但是，您需要熟悉特定仪器，以有效使用仪器面板。如需进一步信息，请参阅仪器用户手册。如需与仪器面板对象有关的信息，从对象菜单中选择Help。

另请参阅

使用Panel Driver对象读取数据


使用Panel Driver对象读取数据

在这一程序中，您将建立一个简单的程序，从HP 34401A万用表的仪器面板对象中显示仿真的电压读数。

1. 为HP 34401A添加一个仪器面板对象 (I/O [image] Instrument Manager...)。

2. 从仪器面板的对象菜单中选择Add Terminal by Component [image] Select Output Component。

3. 点击HP 34401A显示画面，Reading端被添加到输出上。

4. 在工作区中添加一个AlphaNumeric显示对象，如下图所示连接这个对象，运行程序。由于活动模式关闭，因此会仿真数据，Simulated Data标注(及标题栏中的(NOT LIVE))表明了这一点。

5. 为打开活动模式，选择I/O [image] Instrument Manager...，在列表中选择dmm (hp34401a @ (NOT LIVE))，然后点击Properties。出现Instrument Properties对话框，显示HP 34401A万用表的配置。

6. 如果显示的地址(默认值为722)与仪器地址不匹配，输入正确的地址。(如需与某台仪器地址有关的信息，请参阅仪器用户手册。)

7. 点击Advanced?/font>按钮。点击Live Mode右面的按钮。按钮从OFF切换到ON。然后点击OK按钮，返回Instrument Manager对话框。

8. 点击the Save按钮。仪器面板现在打开活动模式。

新标题hp34401a (@ 722)表明活动模式打开，仪器面板配置成与GPIB地址722上的HP 34401A万用表通信。当然，程序将超时，除非在连接到计算机的地址722上的确有一台HP 34401A。

这时，如果有一台HP 34401A万用表，那么可以连接万用表，运行程序。否则，使用Advanced Instrument Properties对话框(I/O [image] Instrument Manager..., 点击Properties, 点击Advanced?/font>)，返回活动模式关闭状态。


使用组件驱程对象

通过使用组件驱程对象，可以稍微提高性能。我们使用HP 34401A万用表配置为例。

1. 选择I/O [image] Instrument Manager...。出现一个对话框，Instrument List区域中列出配置的仪器。

2. 点击想在工作区中添加的仪器。如果它配置了一个仪器驱程文件，Create I/O Object区域中的Component Driver按钮会激活。如需范例，点击dmm(hp34401a@(NOT LIVE))。

3. 点击Component Driver按钮，把对象外框放在工作区中。

4. 组件驱程对象作为图标出现。双击图标，显示open view。

5. 在组件驱程对象中添加一个Reading端(对象菜单 [image] Add Terminal [image] Data Output)。

另请参阅

手册范例目录中的manual22.vee ， Help [image] Open Example...， Component Driver


部分技术

本节介绍了以交互方式或在程序中使用Panel Driver和Component Driver对象的某些技术。

交互使用Panel Driver对象

Panel Driver对象打开的视图提供了一个图形控制面板，可以使用这个面板，以交互方式构建一个测量状态。如果把相应的物理仪器连接到计算机上，并打开Live Mode，可以在构建测量状态时交互控制物理仪器。

为改变各个设置，在图形控制面板中点击相应的字段，填写出现的对话框。为进行测量及查看结果，点击数字显示画面或XY显示画面的显示区。XY显示画面会用几秒钟的时间进行更新。

以程序化方式使用Panel Driver对象

为在程序中添加Panel Driver对象：

1 点击I/O [image] Instrument Manager...。出现Instrument Manager对话框。

2 点击希望的仪器，高亮度显示它，然后点击Panel Driver按钮。

备注

如果仪器还没有配置Panel Driver文件，那么Panel Driver按钮将不活动 ("变灰")。参阅配置程序。

3 在出现对象轮廓时，定位指针，点击一次，把对象放在工作区中。

为在程序中使用Panel Driver对象，通常使用输入端或输出端，设置组件值。每个输入端或输出端实际上与驱程中的组件对应。有两种方式添加一个端：

• 从Panel Driver对象菜单中选择Add Terminal [image] Data Input或Add Terminal [image] Data Output。出现一个列表框，列出还没有作为端使用的所有有效驱程组件。双击列表中希望作为端添加的组件。

• 选择Add Terminal by Component [image] Select Input Component或Add Terminal by Component。从Panel Driver对象菜单中选择 Output Component。在进行这一选择后，在图形控制面板中点击其中一个字段或显示区域，作为端添加相应的组件。

一般来说，使用上面列明的第一种方法要更加方便，因为您不必猜测希望使用的组件名称。但是，某些组件在图形控制面板的任何部分都看不到。必须使用第二种方法存取这些组件。

在程序中使用Component Driver对象

为在程序中添加Component Driver对象：

1 点击I/O [image] Instrument Manager...，出现已配置的仪器列表。

2 点击希望的仪器，高亮度显示仪器，然后点击Component Driver按钮。

备注

如果仪器还没有配置Panel Driver文件，那么Component Driver按钮将不活动 ("变灰")。参阅配置程序。

3 在出现对象轮廓时，定位指针，点击一次，把对象放在工作区中。

在需要重复执行一个仪器控制对象、同时只改变少量组件时，一般使用Component Driver对象。在这些情况下，Component Driver对象要优先于Panel Driver对象，因为Component Driver对象只读写指定的组件，执行速度略快。

下面的程序说明了这种情况。这个程序通过扫描fgen提供的输入频率，使用dvm测量响应，来测量滤波器的频响。由于附到For Log Range上的子线程重复执行，因此可以使用组件驱程，改善执行速度。注意，Panel Driver对象仍适用fgen和dvm的初始设置。

上面的程序存储在examples目录下的manual15.vee文件中。

获得Panel Driver帮助

为获得Panel Driver相关帮助，从Panel Driver或Component Driver对象的对象菜单中选择Help。然后，从出现的对话框中打开相应的帮助主题。


使用PC插件板卡

VEE为控制PC插件板卡提供了两种方式：

1 Data Translation的Visual Programming Interface。(通过Data Translation直接订购VPI应用程序)

2 PC板卡制造商提供的动态链接库，如ComputerBoards或Meilhaus。(如需与使用动态链接库有关的信息，请参阅“使用动态链接库"。)

Data Translation的Visual Programming Interface (VPI)

Data Translation的VPI与VEE一起使用，为PCI插件创建无缝的数据采集性能。通过利用Data Translation的Open Layers标准的灵活性，可以存取50多种数据采集板卡。

VPI直接与要求低通道数量的基于ISA、PCI和USB的数据采集插件一起使用。VPI在VEE中增加了一个菜单选项和特定的PC插件数据采集图标。这些图标驱动着Data Translation硬件功能。

Amplicon

Amplicon在200系列内部提供了各种模拟和数字I/O PC插件板卡，均支持VEE。

软件接口是Amplicon的AmpDIO驱动程序包的一部分，AmpDIO驱动程序包是一种适用于Windows、拥有多线程DLL的32位API，支持中断驱动的采集。API包含100多个调用，可以使用VEE专用定义文件及在一个程序中使用最多8个板卡的工具，作为汇编的函数高效灵活地进行编程。

除Amplicon自己的一系列插件板卡外(其中包括串行通信设备)，Amplicon还可以为数据采集、串行通信和GPIB应用提供来自许多其它制造商的板卡。

下图显示了VEE运行时软件(与Amplicon模拟输出板卡PCI224和PCI234及模拟输入板卡PCI230和PCI260免费提供)，在PC上同时提供了多个输入和输出信号。

ComputerBoards PC插件

ComputerBoards提供了功能强大、兼容VEE的低成本PC插件板卡。(如需支持的PC插件厂商的完整清单，请参阅VEE资料。)

您只需安装板卡及其I/O库，使用制造商提供的程序配置板卡。根据说明，把板卡连接到设备上。在VEE中，导入库，可以准备调用ComputerBoards I/O库中的测量功能。下图来自制造商提供的演示程序。

上图显示了使用这个100 KHz A/D板卡的演示程序的面板视图。下图显示了VEE调用使这些数据采集函数调用成为可能的ComputerBoards I/O库。

另请参阅

配置仪器，使用面板驱动程序，使用Direct I/O，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


轮询GPIB仪器

GPIB仪器随时在总线上发送服务请求("SRQ")。Agilent VEE提供了两个组件，帮助确定哪台设备请求服务及发生的问题。这两个对象都位于I/O [image] Advanced I/O下。

Interface Event对象报告整个总线的事件。例如，如果Interface Event设置成为hpib7报告SRQ，那么逻辑单元7的接口上的任何设备都可能会导致事件。还可以使用Interface Event对象，检测串行接口和VXI接口上的事件(如果配置了此类仪器)。

Instrument Event对象从某台状态返回状态字节。在GPIB上，使用Instrument Event对象轮询总线上的各台设备。

范例

下面的程序说明了怎样使用Interface Event和Instrument Event对象处理GPIB服务请求：

在这个程序中，Interface Event对象等待hpib7上的事件，即逻辑单元7上的GPIB接口。但是，Interface Event对象没有指明总线上哪台设备导致了事件。

Interface Event对象的event输出同时激活这两个Instrument Event对象，它们单独轮询两台GPIB仪器(HP 34401A和HP 54600A)。每个Instrument Event对象都把操作设置成Any Set，把其掩码设置成#H10。Any Set导致对象等到事件发生，然后对返回的值与掩码#H10执行逻辑AND运算，掩码#H10与状态字节中的第4位对应 (DAV或"data available")。status输出端返回结果。

另请参阅

Instrument Event

Interface Event


监测总线消息

Agilent VEE通过一系列消息与仪器通信。在GPIB上，总线消息遵守IEEE-488标准。在正常情况下，这些消息是看不到的。但是，在调试I/O程序时，可能要监测总线上的消息。为此，可以在程序中添加一个Bus I/O Monitor对象，还可以使用这个对象，监测VXI或串行接口消息。

备注

Bus I/O Monitor不显示从VXIplug&play驱程中完成的任何I/O。

添加Bus I/O Monitor对象

1. 选择I/O [image] Bus I/O Monitor，出现Select I/O Channel对话框。

2. 选择其中一个接口，如hpib7，点击OK。

3. 把对象放在工作区中。

范例

下面的程序显示了监测总线的Bus I/O Monitor对象：

每次运行程序时，会记录总线消息的顺序。在程序停止运行时，可以滚动消息。在默认情况下，Bus I/O Monitor对象可以在缓冲器中保存256行信息，但可以改变缓冲器大小。

Bus I/O Monitor对象会降慢程序速度，一般用于诊断目的。许多编程人员使用面板或组件驱程创建程序，控制仪器，然后使用Bus I/O Monitor "捕获"用来与仪器通信的命令和消息。然后可以使用这些命令和消息，使用Direct I/O与仪器通信，提高I/O性能。

另请参阅

Bus I/O Monitor


输入数字

可以使用下面的范例中所示的惯例，在任何VEE数字输入字段中输入一个数字。连字号(-)作为减号使用，句点(.)作为小数点使用。在需要时，可以在数字输入字段中包括一个加号(+)。注意，不允许使用逗号(,)作为分隔符。(文本输入字段支持任何任意字符串。)

输入普通数字

1001

1020768 (而不是1,020,768)

12.12

-1.223

输入指数数字

1.23E3 (等于1.23x10^3或1230)

6.0225E23 (等于6.0225x10^23)

6.6256E-27 (等于6.6256x10^-27)

使用ISO缩写输入数字

1.23k (等于1.23x10^3或1230)

3.61M (等于3.61x10^6)

2.3n (等于2.3x10^-9)

下表列出了VEE识别的输入数字使用的ISO缩写。

缩写 后缀 倍数

X exa 10^18

P peta 10^15

T tera 10^12

G giga 10^9

M mega 10^6

k或K kilo 10^3

m milli 10^-3

u micro 10^-6

n nano 10^-9

p pico 10^-12

f femto 10^-15

a atto 10^-18

VEE可以把输入的数字形式变成另一种同等形式，例如：

+1.23变成1.23 (去掉加号)

6.3E-9变成6.3n

6.0225E23变成602.25E21 (采用标准数字格式)

另请参阅

改变数字格式


改变数字格式

可以改变VEE中显示数字的所有对象使用的默认的全局数字格式，可以改变显示数字的各个对象使用的数字格式。

改变全局数字格式

1. 从File菜单中选择Default Preferences，然后在对话框中选择Number一栏。

2. 改变相应的字段，选择希望的数字格式：

a. Integer 决定着整数使用的基数：Decimal, Octal, Hexadecimal或Binary。 (点击字段或箭头，出现下拉列表。)

b. Real 决定着实数的格式：Standard, Fixed, Scientific或Engineering。(点击字段或箭头，出现下拉列表。)

c. Significant digits决定着有用的位数(极限是18)。输入希望的数字。

3. 选择希望怎样保存变动：

a. 点击Save，把变动在vee.rc中另存为新的默认值。

b. 点击OK，只对这个VEE会话使用变动 (直到选择File [image] New, Open或Exit)。

改变某些对象的数字格式

可以为下述对象独立选择数字格式。选择的数字格式不考虑全局数字格式，但只适用于特定对象。

菜单Data [image] Continuous上的数字滑尺和旋钮

菜单Data [image] Constant上的常数

菜单Display上的AlphaNumeric

菜单Display上的Logging AlphaNumeric

菜单Display [image] Indicator上的Fill Bar, Meter, Tank和Thermometer

菜单Display上的XY图形显示画面

1. 从对象的对象菜单中选择Properties，然后点击Number Format。

2. 点击复选框，关闭Global Format，然后点击数字格式字段(或其箭头)，出现下拉菜单。

3. 选择希望对象使用的数字格式，然后点击OK。


改变UserFunction弹出面板的大小

改变触发模式

在VEE，可以用度、弧度或梯度输入和显示三角值，具体视触发模式而定。

在当前VEE会话期间，将激活新的触发模式。在重启VEE时，触发模式会恢复到默认值(Degrees)。每个上下文(Main, UserObject和UserFunction)都有自己的触发模式设置。

1. 打开Main, UserObject或UserFunction Window的对象菜单，然后选择Properties。

2. 选择Trig Mode，选择(Degrees, Radians或Gradians)。

备注

所有内部计算都使用弧度完成。如果把触发模式设置成Radians，性能会略微加快，因为VEE不需要进行弧度转换。

快捷方式

双击Main, UserObject或UserFunction Window的标题栏，进入Properties对话框。


使用数据常数

VEE提供了多种数据常数。为使用标量数据常数：

1. 选择一个数据常数对象 (Data [image] Constant [image])。选项包括Text, UInt8, Int16, Int32, Real32, Real64, Coord, Complex, PComplex, Date/Time和Record。

2. 在常数对象中输入相应类型的数据。最常用的类型是Text, Int32和Real64常数对象：

a. 在Text常数中，可以输入任何文本字符串(最大长度为32,767个字符)。

b. 在Int32常数中，可以输入任何32位、2的补数整数(范围是-2147483648 到 +2147483647)。

c. 在Real64常数中，可以输入任何64位实数(范围是?.7976931348623157E308)。

在下面的范例中，Text, Int32和Real64常数对象连接到VEE程序线程中。收到数据的对象根据需要自动转换数据类型。在本例中，整数3转换成一个实数，加上6.24，得到实数值9.24。

另请参阅

创建数组常数

使用数据滑尺

使用数据选择对象

使用数据输入对话框

转换输入端上的数据类型


使用数据滑尺和旋钮

VEE提供了四类数据滑尺和旋钮对象：Real64 Slider, Int32 Slider, Real64 Knob和Int32 Knob。这些对象允许通过移动线性滑尺或圆形旋钮，在程序中输入一个值。

使用Real64滑尺或Int32滑尺

1. 选择Data [image] Continuous [image] Real64 Slider或Int32 Slider，把对象放在工作区中。默认情况下，Real64 Slider对象的范围为0 - 1；Int32 Slider的范围为0 - 100。

2. 使用下面三种方式之一改变当前值(显示在顶部字段中)：

a. 点击并按住滑尺旋钮，向上或向下移动。

b. 点击值旁边的旋转字段箭头。

c. 点击值，输入一个新值。

3. 为改变范围， 点击上限或下限字段，输入值。

使用Real64旋钮或Int32旋钮

1. 选择Data [image] Continuous [image] Real64 Knob或Int32 Knob，把对象放在工作区中。默认情况下，Real64 Knob对象的范围为0 - 1；Int32 Knob的范围为0 - 100。

2. 使用下面三种方式之一改变当前值(显示在底部字段中)：

a. 点击并按住圆形旋钮，旋转旋钮。

b. 点击值旁边的旋转字段箭头。

c. 点击值，输入一个新值。

3. 为改变范围，点击上限或下限字段，输入值。

另请参阅

Int32 Knob

Int32 Slider

Real64 Knob

Real64 Slider


使用数据选择对象

VEE提供了6类数据选择对象：Radio Buttons, Cyclic Button, List, Drop-Down List, Pop-Up List和Slider List。

使用数据选择对象

(下面的程序介绍了Radio Buttons对象，这一程序适用于所有6类数据选择对象。)

1. 选择Data [image] Selection Control [image] Radio Buttons，把对象放在工作区中。注意，默认的单选按钮选项是Item 1, Item 2和Item 3。

2. 为改变默认选项，从对象菜单中选择Edit Enum Values，出现Edit Enum Values对话框。

3. 根据需要编辑值。使用Tab (或向下箭头)前移字段，使用Shift+Tab (或向上箭头)上移字段。可以替换每个字段中的文本，或添加字段，用tab经过上一个字段，输入额外的文本。

4. 在字段编辑完成时，点击OK。

改变数据选择对象类型

1. 从对象菜单中选择Properties，出现Selection Control Properties对话框。

2. 在General一栏上，点击首选的Format类型，然后点击OK。

另请参阅

Selection Control


使用数据输入对话框

Data [image] Dialog Box下有三个内置对话框对象，可以用来提示用户在程序中输入数据，其分别是：Text Input, Int32 Input和Real64 Input。

(下面的程序描述了Real64 Input对话框对象，Int32 Input和Text Input对象的程序与之类似。)

1. 在工作区中添加一个Real64 Input对话框对象(Data [image] Dialog Box [image] Real64 Input)。

在Real64 Input对象运行时，它显示一个弹出对话框，要求用户输入一个实数。可以设置下述参数：

a. Prompt/Label确定对话框中显示的消息。

b. Default Value确定对话框中显示的可选的默认值。

c. Value Constraint确定输入值必须匹配的范围或其它测试。

d. Error Message确定在用户应答未通过Value Constraint测试的数据时显示的错误消息。

2. 把Prompt/Label字段变成Please enter a real value。

3. 运行程序，出现弹出对话框。

4. 在对话框中输入11，点击OK，出现错误信息。

5. 在错误消息框中点击OK。现在在Real64 Input对话框中输入一个位于0 - 10范围内的数字，然后点击OK。接受数字，在Value端输出数字。

另请参阅

Dialog Box

关于内置对话框对象


输入公式

VEE中的基本数学对象是Formula对象：

当放在工作区中时，对象包含一个预置的表达式，有一个数据输入端A。注意，表达式中的变量 A 与数据输入端 A 对应。

使用与变量名称相同的输入端上的数据替换表达式中的每个变量。变量名称和端名称不分大小写。在表达式a+1中，变量a与A端对应。

表达式中的变量必须有一个对应的输入端，否则会发生错误。如果使用全局变量，那么不要求对应的端。

使用Formula对象

1. 把Formula对象添加到工作区中(Device [image] Formula)。

2. 点击Formula对象中的表达式字段，根据需要修改表达式。例如，输入表达式2*A+abs(B)+sin(C)+6。通过按Enter，可以在多行上输入一个或多个表达式。

3. 根据要求添加数据输入端。(把指针放在数据输入端区域，按Ctrl+A。) 删除没有使用的任何数据输入端。(把指针放在端上，按Ctrl+D。)

4. 把所有数据输入端连接到相应的数据来源上，把Result数据输出端连接到显示对象上，完成程序。

从VEE 8.0开始，Formula中提供了Code Completion和Code Insight。

范例

下面的程序使用Formula对象对表达式求解及显示结果。注意在多行中的各项之间划分表达式。

另请参阅

创建变量

Formula

处理数据

Code Completion

Code Insight


使用数学运算符和函数

VEE以运算符和函数的形式提供150多种内置数学对象。这些对象实际上是Formula对象，预先配置了描述性标题、表达式和相应的数据输入端。为访问运算符和函数，使用Device [image] Function & Object Browser或工具栏按钮。

Function & Object Browser按钮

可以使用下述步骤修改数学对象：

1. 把表达式变成任何有效的VEE表达式。

2. 改变标题，描述新的表达式。

3. 根据要求增加或删除数据输入端。

技巧

1. 不要使用多个公式对象"连线"一个表达式。而是应该把数学运算符和函数组合到一个对象的一个表达式中。使用的对象数量越少，VEE程序的运行程度越快。

不要：

而要：

2. 在改变表达式时，确认变量名称有相应的输入端。

3. 在改变数据输入端的名称时(双击端，输入一个新名称)，确认在表达式中还改变了相应的变量名称。

4. 在把对象最小化成图标前，确认改变标题，描述新数学表达式的功能。一直改变对象标题是一个很好的编程作法。

另请参阅

处理数据


在表达式中使用混合数据类型

VEE根据需要自动转换数据类型，因此可以使用包含混合数据类型的表达式。您只需在数学对象中输入表达式，把数据源连接到相应的数据输入端即可。

范例

在下面的程序中，Formula对象在输入端A收到waveform数据，在输入端B收到real数据。Formula对象对表达式abs(A)+B求解，把实数值0.75加到波形中256个点每个点的绝对值上。

另请参阅

处理数据


在If/Then/Else对象中使用表达式

VEE可以对数学表达式求解，根据结果确定程序流程分支。基本条件对象是If/Then/Else对象。

可以在If/Then/Else对象中把默认表达式变成任何条件表达式，或使用Flow [image] Conditional下的对象。Conditional对象实际上是预先配置表达式、描述标题和数据输入端的If/Then/Else对象。

使用If/Then/Else对象

1. 在工作区中添加If/Then/Else对象(Flow [image] If/Then/Else)。

2. 点击If/Then/Else对象中的表达式字段，根据需要修改表达式。例如，输入表达式A==B或B>=C。

3. 根据要求添加数据输入端。(把指针放在数据输入端区域，按Ctrl+A) 删除任何没有使用的数据输入端。(把指针放在端上，按Ctrl+D)

4. 连接所有数据输入端，连接其中一个或两个数据输出端，完成程序。如果表达式为"true"，那么Then端输出表达式结果(一般为1)。如果表达式为"false"，那么Else端输出0。

5. 如果需要，在对象中添加Else If条件。

范例

在下面的程序中，如果表达式A==B或B*C==50为真，Then输出端会激活UserObject1。如果表达式为假，Else输出端会激活UserObject2。

另请参阅

在VEE程序内进行分支

Conditional

If/Then/Else

处理数据


在事务中使用表达式

VEE数学表达式可以求解，用于I/O事务对象中，如To File和From File对象。

对To File事务中的表达式求解范例

1. 在工作区中添加一个To File对象(I/O [image] To [image] File)。

2. 双击事务WRITE TEXT a EOL，出现I/O Transaction对话框。

3. 点击默认表达式a，把表达式变成a+sin(b)：

4. 点击OK，保存新事务(WRITE TEXT a+sin(b) EOL)。

5. 在对象中添加一个B数据输入端，连接数据输入端。

在下面的程序中，To File对象把a (1)的值加到sin(b)的值中(30度的正弦是0.5)，把结果1.5输出到名为myFile的文件中。

另请参阅

Formula, From File, To File

处理数据


查找第一个空行

查找字符串的长度

1. 使用Function & Object Browser在工作区中添加strLen(str)对象，在工具栏上点击 [image] 。

2. 把字符串数据来源连接到str数据输入端。根据需要连接Result输出。

3. 运行程序。在strLen(str)对象运行时，Result端输出字符串长度。

范例

strLen(str)对象作为Int32数值输出用字节表示的字符串长度。如果str是一个一维字符串数组，strLen(str)会返回一个数组，其中包含数组每个要素的长度：

另请参阅

strLen(str)


获得子字符串

两个函数可以获得子字符串：

strFromThru(str,from,thru)
strFromLen(str,from,len)

其中：

str是原始字符串。

from是子字符串开始的位置。

thru是子字符串结束的位置。

len是子字符串的长度。

字符串中的所有字符位置都基于零，也就是说，第一个字符的位置为0。

使用strFromThru(str,from,thru)获得子字符串

1. 使用Function & Object Browser在工作区中添加strFromThru对象。

在工具栏上点击 [image] ，然后查看
Type: Built-in Functions
Category: String
Member: strFromThru

2. 把字符串数据来源连接到str输入端。

3. 指定from值和thru值：

a. 把数据连接到from和thru输入端

或

b. 改变表达式，明确指定from和thru。例如，表达式strFromThru(str,0,5)返回字符串str的字符0 - 5 (前6个字符)。记住在进行此类操作时删除from端和thru端。

范例

下面的程序返回字符串的前6个字符：

另请参阅

strFromLen (str,from,len)

strFromThru (str,from, thru)


连接字符串

可以在VEE中使用加法(+)和乘法(*)连接多个字符串。

范例

可以连接两个字符串：

可以连接一个字符串和一个数字(数字转换成字符串)：

可以把一个数字乘以一个字符串，重复连接字符串：

另请参阅

Accumulator

Concatenator


比较两个字符串是否相等

下面的程序使用条件对象比较了两个字符串是否相等。如果两个字符串完全相同(包括空格)，那么表达式结果(在本例中是a 1)在Then端输出。否则Else端输出0。这一比较区分大小写(Now与now不同)。

另请参阅

Conditional

strPosStr (str1,str2)


把数字转换成字符串

可以使用To String把数字转换成字符串。下面的程序说明了怎样把用秒表示的当前时间转换成采用时戳格式的字符串：

1. 在工作区中添加一个To String对象 (I/O [image] To [image] String)。双击图标，显示Open View对象。

2. 双击默认事务WRITE TEXT a EOL，出现I/O Transaction对话框。

3. 点击DEFAULT FORMAT (或其箭头)，显示下拉菜单。选择TIME STAMP FORMAT，点击OK。

4. 使用Function & Object Browser添加一个 now()对象。

在工具栏上点击 [image] ，然后会看到：
Type: Built-in Functions
Category: Time & Date
Member: now

把now()连接到To String的数据输入端，把AlphaNumeric显示画面连接到To String的数据输出端。

5. 运行程序。now()对象输出用秒表示的时间。这个值转换成时戳格式，并进行显示。

另请参阅

intToChar(a)

To String

VEE高级技术："使用事务I/O"一章


把字符串转换成数字

如果字符串包括可以作为数字读取的数字信息，那么可以使用From String提取数字。

1. 在工作区中添加一个From String对象(I/O [image] From [image] String)。双击图标，显示Open View对象。默认事务是READ TEXT x REAL64，它作为文本读取字符串，如果可能，会输出一个实数。

2. 为查看结果，把Text常数对象连接到数据输入端，把AlphaNumeric显示画面连接到数据输出端。

3. 在Text常数中输入字符串Item number: A1222，运行程序。显示画面上输出实数值1222。

另请参阅

charToInt(a)

From String

VEE高级技术；"使用事务I/O"


创建数组常数

可以使用数据常数对象，如Text, Int32和Real64，创建一维数组。在希望手动设置一维数组中的每个值时，使用这种技术。

创建9个要素一维文本数组

1. 在工作区中添加一个Text常数对象(Data [image] Constant [image] Text)。

2. 从对象菜单中选择Properties，出现Text Constant Properties对话框。在默认情况下，Text常数对象配置为Scalar。

3. 为设置数组大小，点击Configuration下的1D Array，然后点击Size字段，把它变成9。

4. 为得到固定数量的要素，还要点击Size Fixed复选框。如果想在最后增加额外的要素，不要选中Size Fixed。

5. 点击OK。Text常数对象表现为要素0000:到0008:的数组。VEE数组基于零。

6. 为设置每个值，点击0000:右面，输入数组的第一个要素。使用Tab (或向下箭头)前移数组要素，使用Shift+Tab (或向上箭头)向回向上移动数组要素。为每个要素输入文本字符串。

9个要素一维文本数组范例

另请参阅

Constant

分配数组

在表达式中构建数组


分配数组

在希望以程序化方式创建数组，并相应设置其值时，可以分配数组。可以创建一维或多维数组。

对正在使用的数据类型，使用Data [image] Allocate Array下的相应对象，这些对象包括文本数组使用的Alloc Text，以及数字数组使用的Alloc UInt8, Alloc Int16, Alloc Int32, Alloc Real32, Alloc Real64, Alloc Coord, Alloc Complex和Alloc PComplex。

技巧

所有VEE数组索引都基于零，也就是说，在任何维度中第一个要素的索引都是0。

分配的数组可以是1维到10维，通常?#22635;充?#37325;复的初始值。

由多个值组成的数组作为一个数据容器在对象之间传送。

只能使用线性或对数值斜坡初始化一维整数数组和实数数组。

分配数组要求的内存取决于维数、维度大小和数据类型。

下面的规程显示了怎样分配各种类型的数组：

分配一维实数数组

1. 在工作区中添加一个Alloc Real64对象(Data [image] Allocate Array [image] Real64)。

2. 在默认情况下，Alloc Real64对象为一维数组分配取值的线性斜坡。点击Lin Ramp字段(或其箭头)，出现下拉菜单。

3. 可以选择Init Value, Lin Ramp或Log Ramp。点击Log Ramp选择取值的对数斜坡。

4. 把XY Trace显示画面对象连接到Alloc Real64对象上，运行程序。

分配两维或更大的实数数组

1. 在工作区中添加一个Alloc Real64对象 (Data [image] Allocate Array [image] Real64)。

2. 在默认情况下，Alloc Real64对象为一维数组分配取值的线性斜坡。点击Lin Ramp字段(或其箭头)，出现下拉菜单。

3. 点击从2到10的维度大小。对象调节成新的设置。

4. 把第一个维度的大小变成4，第二个变成3，依此类推。然后，把一个AlphaNumeric显示画面对象连接到Alloc Real64对象的输出。

5. 运行程序。如果Num Dims设为2，那么调整AlphaNumeric对象大小，显示整个数组。如果Num Dims大于2，那么AlphaNumeric对象显示数组大小，因为VEE画面对象显示的维度不能超过两维。

为显示两维以上的维度，可以使用To File对象的CONTAINER编码，把数据直接导出到PV-WAVE中，进行可视数据分析。

分配的数组越大，占用的计算机内存越多。在超过五维时，如果计算机采用建议数量的内存，可能需要声明较小的参数。如果数组太大，VEE流程可能会耗尽内存，导致错误。

另请参阅

在表达式中构建数组

改变数组中的值

创建数组常数

把数据采集到数组中

Allocate Array

To File


改变数组中的值

可以使用赋值运算符，如[2]=b，在已经分配的数组中以程序化方式改变值。通过修改赋值对象的公式和可用的端，可以把新值赋给特定的数组位置，并在程序的其它部分使用输出。

在一维实数数组中设置新值

1. 在添加数组分配对象后(Data [image] Allocate Array [image])，使用Function & Object Browser在工作区域中添加赋值运算符a[2]=b：

在工具栏上，点击 [image] ，然后查看
Type: Operators
Category: Assignment
Member: a[2]=b

2. 把赋值运算符的公式变成a[b]=c，添加一个数据输入端。

3. 把各个值连接到下述赋值运算符端：

a. 把Allocate Array对象的Array数据输出端连接到赋值运算符的数据输入端。

b. 把一个值连接到b数据输入端，确定数组位置。Int32数据常数之类的对象可以提供这一输入值。

c. 把一个值连接到c数据输入端。这是您希望为数组位置赋的新值。

下面的范例程序显示了连接情况。赋值运算符接受输入端a上的数组数据，然后把输入端c上的实数值赋给输入端b上确定的位置。输出端Result包含新值，输出端a包含修改后的数组。

另请参阅

manual范例目录中的manual06.vee和manual07.vee
Help [image] Open Example...

分配数组

Set Values

参阅范围

Manual06.vee和Manual07.vee


从数组中提取值

可以使用Get Values对象从数组中提取值：

1. 在工作区中添加一个Get Values对象(Data [image] Access Array [image] Get Values)。双击图标，显示打开视图对象。

2. 把输出数组的任何数据源连接到Get Values上的Ary数据输入端。在Get Values运行时，SubAry端输出一个依赖Get Values表达式字段中的表达式的子数组。默认表达式Ary会输出整个原始数组。

其余数据输出端提供与Ary端上的原始数组有关的信息：

a. Type输出数组的数据类型。

b. NumDims输出数组中的维数。

c. DimSizes输出一个一维数组，其中列明每个维度的大小(要素数量)。

d. TotSize输出数组的总大小(要素总数)。

另请参阅

manual08.vee

在表达式中构建数组

在表达式中使用数组或数组要素

Get Values


把数据采集到记录中

把数据采集到数组中

使用Collector把数据采集到大小未知的数组中。下面的程序构建了一个范例程序，演示了Collector。使用Sliding Collector采集1D数组数据。

1. 在工作区中添加一个Collector对象(Data [image] Collector)。双击图标，显示对象的打开视图。

2. 在工作区中添加For Count, random和AlphaNumeric对象，连接各个端，如下面的程序所示：

3. 运行程序。(调整AlphaNumeric画面，显示整个数组。)

Sliding Collector (Data [image] Sliding Collector)与Collector有两个明显区别：

1. 其输出一直是一维数组。

2. 没有XEQ端，而是把Sliding Collector设置成在指定数量的值之后触发。

另请参阅

在表达式中构建数组

Collector

Sliding Collector

参阅范例

Manual09.vee


在表达式中构建数组

通过在表达式中指定其它数组部分，还可以构建一个数组。但是，在表达式内部，指定的所有子数组必须拥有相同的维数，并在每个维度中包含相同数量的值。

假设B是一个5 x 5矩阵(一个两维数组)：

 | 0: | 1: | 2: | 3: | 4:
0: | 0 | 0.2 | 0.4 | 0.6 | 0.8
1: | 1 | 1.2 | 1.4 | 1.6 | 1.8
2: | 2 | 2.2 | 2.4 | 2.6 | 2.8
3: | 3 | 3.2 | 3.4 | 3.6 | 3.8
4: | 4 | 4.2 | 4.4 | 4.6 | 4.8

表达式[B[1,1],B[2,2],B[0,0],B[2,3]]返回下面的一维数组：

0: 1.2

1: 2.4

2: 0

3: 2.6

还可以在表达式中构建一个数组常数。例如，表达式[1.1,1.3,1.2]创建一个由三个要素组成的一维实数数组：

0: 1.1

1: 1.3

2: 1.2

另请参阅

从数组中提取值

在表达式中使用数组或数组要素


在表达式中使用数组或数组要素

从数组中提取值解释了可以在Get Values对象中使用表达式指定一个子数组。本文解释了还可以在带有表达式字段的任何VEE对象中，如Formula对象，在表达式中指定一个数组或子数组。

在表达式中，任何数组表示时都使用下述语法：

在数组名称后面使用括弧[ ]，括入指定子数组的参数。例如，如果B是一个两维数组，那么B[0,0]指明其中的第一个要素。

逗号(,)分隔数组维度。每个子数组操作必须为每个数组维度只分配一个指标。

冒号(:)分隔其中一个数组维度内部的一系列要素。

星号(*)是通配符，指定某个数组维度中的所有要素。

注意所有VEE数组索引都基于零，也就是说，在任何维度中，第一个要素的索引都是0。

范例

假设 A is一个一维数组，长10个要素：

0: 100m

1: 0.2

2: 0.3

3: 0.4

4: 0.5

5: 0.6

6: 0.7

7: 0.8

8: 0.9

9: 1

下面的表达式提取数组A的各个部分：

A或A[*]返回整个数组A。

A[1]返回一个标量，它是A中的第二个要素(索引1)：

0.2

A[1:1]返回只有一个要素的一维数组，它是A中的第二个要素：

0: 0.2

A[0:5]返回一个一维数组，其中包含A的前六个要素(索引0到5)：

0: 100m

1: 0.2

2: 0.3

3: 0.4

4: 0.5

5: 0.6

A[2:*]返回一个一维数组，其中包含第三个要素直到数组末尾；在本例中，是A的索引2到9。(在子数组中索引重新定义为0到7。)

0: 0.3

1: 0.4

2: 0.5

3: 0.6

4: 0.7

5: 0.8

6: 0.9

7: 1

假设B是一个5x5矩阵(一个两维数组)：

 | 0: | 1: | 2: | 3: | 4:
0: | 0 | 0.2 | 0.4 | 0.6 | 0.8
1: | 1 | 1.2 | 1.4 | 1.6 | 1.8
2: | 2 | 2.2 | 2.4 | 2.6 | 2.8
3: | 3 | 3.2 | 3.4 | 3.6 | 3.8
4: | 4 | 4.2 | 4.4 | 4.6 | 4.8

下面的表达式提取数组B的各个部分：

B或B[*,*]返回整个数组B。

B[*]返回错误，因为它只指定了一个维度，而B是一个两维数组。

B[1,2]从第二行(索引1)、第三个要素(索引2)返回一个标量值：

1.4

B[1,*]作为一维数组返回整个第二行 (索引1)：

0: 1

1: 1.2

2: 1.4

3: 1.6

4: 1.8

B[1,1:*]作为一维数组返回整个第二行 (索引1)，第一个要素除外(索引0)：

0: 1.2

1: 1.4

2: 1.6

3: 1.8

另请参阅

从数组中提取值

在表达式中构建数组


使用数组存储测试结果

可以以两种方式存储数据类型：

• 标量值 (即单个数字，如9或(32, @10))

或

• 1-10维的数组。

备注

数据类型中介绍了VEE数据类型概况。

数组索引在VEE中基于零，它使用括号指明数组要素的位置。例如，如果数组A包含要素[4, 5, 6]，那么：

A[0] = 4, A[1] = 5, A[2] = 6

数组语法如下：

Formula对象或任何表达式字段都可以使用上面的语法存取数组要素，如在To/From File对象中。

另请参阅

实验5-1: 为测试结果创建数组

实验5-2: 从数组中提取值


For/Each对象

For/Each对象用来迭代一个数组。它不能用于记录。下面的实例是在添加For/Each对象前使用提供的方法迭代一个一维数组。

这是使用For/Each对象时的同一流程，其中只使用三个对象，而上面的流程则要求五个对象。

在数组中添加维度时，老方法变得日益复杂，甚至达到几乎不能管理的地步。相比之下，For/Each对象支持10个维度，可以非常简便地扩展到VEE数组结构的整个范围。


数组函数运算

VEE中的大多数基本数学函数如log()、sin()和cos()，都可以作为参数接受数组，并返回一个数组。某些专用函数对执行数组数学运算和处理非常方便。其它函数不能用于数组。数组运算中可以使用的函数包括：

• ramp()可以用来生成“循环”数。

• concat()连接两个数组，返回一个一维数组。

• totSize()提供数组中的要素总数。

• signof()检测取值的符号(如果< 0则为-1, 如果= 0则为0, 如果> 0则为1)。

• abs(x)设置绝对值。

• rotate()旋转数组中的要素。

• sum()对数组中所有要素求和。

• sort()对数组分类。

• randomize()生成由随机数字组成的数组。

• min()查找数据集中的最小值。

• max()查找数据集中的最大值。

• clipUpper()限幅低于一定的最大值。

• clipLower()限幅高于一定的最小值。

Formula对象中的一个有用功能是能够作为数组定义表达式。注意，必须在数组要素之间插入逗号。下面的表达式生成一个数组，其中包含名为B的输入的两倍、倒数、平方和自然对数：

[2*B, 1/B, B*B, log(B)]

下面的实例说明了怎样使用Formula对象中的表达式处理数组。用户只需把包含数组的对象连接到Formula对象的输入端上。

实例

可以利用现有数组，使用指配表达式在选择的要素上执行数学计算。下面的实例改变了两维数组的一行值。Formula对象中的表达式在输入数组A=[1,2,3,4]上执行这一任务，其中第0行包含1和2，第1行包含3和4。

表达式把第二行中的要素乘以4，然后把结果指配给数组A。注意Result端只输出改变以后的值，A端输出带有新值的整个数组。


数组运算技术

VEE是为数组数学运算优化的。尽管可以使用传统循环结构执行数组运算，但这一般会降低程序的速度。本节说明了使用Formula和其它对象在数组上执行数学运算的几种方式。

备注

可以调整本节中的范例，使用赋值运算符，避免使用耗时的计算循环。由于这些技术并不总是非常明显，因此使用时一定要注意，确保全面存档程序。

本节说明了VEE的部分数组运算技术，包括数组运算技术比较、访问表达式中的数组、执行数组数学运算及在表达式中使用变量。

数组运算技术比较

下面两个图中的程序段比较了生成数组的技术，这个数组包含从0到360度每个度的所有正弦值和余弦值。如果尝试每种技术，您会发现第一种技术需要的时间更长。

把这一系列对象中包含的逻辑转换成数学运算，会得到下图Formula对象中所示的表达式。这一技术用更少的时间完成了相同的计算：

尽管这种技术的速度要快得多，并不能明显看出它执行相同的计算。下面解释了表达式的运算：

1 ramp()函数生成由0 - 359、共360个值组成的数组。

2 两个ramp函数生成完全相同的数组，通过sin()和cos()三角函数在每个数组上进行运算。在正常情况下接收和返回标量值的大多数VEE函数都能够作为参数返回一个数组。

3 尽管Formula对象实际上包含两个公式，但其输出转换成数组格式，因为它们包括在方括号内。

这一技术可能并不是所有程序的最佳选择。正弦和余弦运算在ramp()函数生成的整个数组上进行，而不是在生成的每个值上进行。如果程序必须在生成的每个值上进行运算，那么应使用循环结构，而不是在整个数组上执行运算的表达式。

访问表达式中的数组

可以象标量一样使用表达式中的数组。按名称指称数组。可以在表达式中直接输入数组常数(如[1,2,3])。VEE要求在数组要素之间插入逗号。

备注

数据索引基于0。索引从零开始，一直到n-1，其中n是特定维度中的要素数量。

可以使用表达式，访问数组的各个部分。一旦在表达式中指定了子数组，那么可以输出子数组，或在进一步的表达式中使用子数组。

从每个数组中只能访问相邻的子数组。为访问子数组，必须为数组中的每个维度指定一个参数。使用下面的字符，指定数组参数：

• 逗号“,”分隔数组的各个维度。每个子数组运算必须为每个数组维度提供一个指标。

• 分号“:”指定其中一个数组维度的要素范围。

• 星号“*”是一个通配符，指定特定数组维度中的所有要素。

备注

根据子数组中的点数调节波形时间跨度、频谱频率跨度和数组映射。例如，如果有一个256点的波形(WF)，要求WF[0:127]，那么您会得到波形的前半部分及是旧跨度一半的时间跨度。

范例：从数组中返回的值

下面的表达式显示了返回的值，其中A是一个长10个要素的一维数组(Array 1D)。

• A[1]访问A中的第二个数组，输出一个标量。

• A[0:5]返回一个一维子数组，其中包含A的前六个要素。

• A[1:1]返回一个一维子数组，其中包含一个要素，这是A的第二个要素。注意这与第一个范例A[1]之间的差别。

• A[2:*]返回一个一维子数组，其中包含A的第三个到第十个要素。

• A or A[*]返回整个数组A。

• A[1,2]返回错误，因为它为一个两维数组指定参数。

• B是一个5x5矩阵(一个Array 2D)。

• B[*]返回错误，因为它只指定了一个参数，B是一个两维数组。

• B[1,2]从第二行第三个要素返回一个标量值。

• B[1,*]作为Array 1D返回全部第一行。

• B[1,1:*]作为 Array 1D返回全部第一行，但不包括第一个要素。

• B[4,1:4]返回一个Array 1D，其中包含4个要素：第4行中第二个值到第五个值。

• B[5,5]返回错误，因为数组基于零。只能通过B[4,4]访问数组。

• B[1 1]返回错误，因为必须使用逗号分隔维度指示符。

在表达式中构建数组

可以从其它数组或子数组的要素中构建一个数组。表达式中的每个要素必须指明相同的维数，并在每个维度中包含相同的取值数量。

例如，下面的表达式显示了返回的值，其中A是一个长十10个要素的一维数组(Array 1D)，B是一个5x5矩阵。

• [1,2,3]返回一个由三个要素组成的Real Array 1D，其中包含取值1, 2和3。

• [A[0], A[5:7], A[9]]导致错误，因为同时指定了标量和Array 1D要素。

• [A[0:4], B[0,*]]返回一个由10个要素组成的Array 2D (大小为2 x 5)，其中包含A的前五个要素作为第一行，包含B的第一行作为第二行。

• [A[0], A[1], B[2,3], A[5]]返回一个由四个要素组成的Array 1D，其中包含A的第一个和第二个要素、B的第三行和第四列的要素及A的第六个要素。

执行数组数学运算

在数组上执行数学运算使用另一套简单的规则。在数组上执行基本标量代数运算简化了在数组中每个要素上执行运算的过程：

• A*2会把数组中的每个要素乘以2。

• A-4从数组中每个要素中减去4。

• 函数中使用的数组，如sin([1,2,3])，将把正弦函数应用到数组的每个要素中。

相同大小和维度的两个数组之间的数学运算在数组的相应要素之间执行运算：

• A*B把数组A的每个要素乘以数组B的对应要素。这不会执行“矩阵乘法”，矩阵乘法是把行乘以列的相对复杂的乘法，并进行加总，得到一个标量。VEE内置了一个矩阵函数来执行这一运算，称为matMultiply(A,B)。


组合数组

下面的实例说明了怎样级联多维数组。在用于Formula对象中时，尽管只能生成一维输出，但仍可以使用concat(x,y)函数。然而，只有行数或列数固定时(在实践中通常会满足这一限制)，才能使用这一函数。这里的Formula对象包含一个表达式，把拥有两行的一对数组级联起来：

concat()函数把两个数组级联起来，生成一个一维数组。表达式剥离出每个数组的行，把它们级联起来，然后把它们向回联接成一个两行的两维数组，其中包含每一行中要素数组合。

另请参阅

分开大型数组


分开大型数组

可以作为16个集合、每个集合128个要素显示一个由2048个要素组成的数组。尽管问题主要是数据显示，而不是数据生成，但它可能有助于找到一个解决方案，来分开数组。

下面的程序显示了怎样分开数组，以实现显示目标。

ramp()函数为测试目的简单地生成一个由2048个要素组成的数组，取值为0 – 2047。For Count对象勾出要生成的16个单独数组，Formula框则使用从计数中生成的索引选择相应的子数组：

A[0:127], A[128:255], A[256:384], ..., A[1920:2047]

当然，这假设数组大小、子数组数量和子数组大小都是固定的。如果任何条件不符，都会发生错误。

另请参阅

组合数组


矢量乘以矩阵

下面的范例说明了怎样乘以矢量

[ X1, X2, X3, X4 ]

乘以矩阵

[[ y11, y12, y13, y14 ],

[ y21, y22, y23, y24 ],

...

[ y51, y52, y53, y54 ]]

结果是

[[ X1*y11, X2*y12, X3*y13, X4*y14 ],

[ X1*y21, X2*y22, X3*y23, X4*y24 ],

...

[ X1*y51, X2*y52, X3*y53, X4*y54 ]]

VEE可以乘以标量，然后再乘以矢量，并可以执行矩阵乘法。标量乘法把矩阵中的每个要素乘以一个标量，得到与原始矩阵大小相同的矩阵。矩阵乘法是MxN矩阵和NxM矩阵之间的运算，得到一个标量。本例要求的运算与上面的情况均不相符。

这里的运算事实上是矩阵每一行的标量乘以矢量的每个要素。考虑一个数据集合，其中包括下述形式的矢量：

[ 1, 2, 3, 4 ]

矩阵M采取下面的形式：

[ [1, 2, 3, 4, 5, 6, 7, 8 ],
[10, 20, 30, 40, 50, 60, 70, 80 ],
[100, 200, 300, 400, 500, 600, 700, 800 ],
[1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000 ] ]

希望的结果是：

[ [1, 2, 3, 4, 5, 6, 7, 8 ],
[20, 40, 60, 80, 100, 120, 140, 160 ],
[300, 600, 900, 12K, 15K, 18K, 21K, 24K ],
[4000, 8000, 12K, 16K, 20K, 24K, 28K, 32K ] ]

下面Formula对象中的表达式进行乘法运算。矩阵数组连接到M端，矢量数组连接到V端。测试表明其速度仅比同一数组标量乘法的速度慢大约50%。


在数组中插入要素

下面的范例显示了把一个或多个数据要素插入现有数组中的一个表达式。输入是：

A 是Index Value
B 是New Data
C 是Original Array

在Result中输出修订后的数组。

A上的Index Value指明了新数据应该使用的起始索引。如果A小于等于0，那么B上的New Data被级联到C上Original Array的开头。

如果A大于等于Original Array的长度，那么New Data被级联到Original Array的末尾。如果A是其间某个值，那么Original Array被分成Index Value周期的几个段，New Data被接合到Original Array中。

下一个范例与上一个范例类似。它使用数组操作构建一个数据队列。队列在本质上是一个固定长度的数组，其中在一端添加新的要素，数字会位移到另一端，直到数字减少和丢失。

ramp()表达式分配由10个要素组成的一个初始空数组，作为一个队列。On Cycle循环 (周期设为1秒)开始，每秒把随机数字发送到队列开头。Formula: Queue获得OldData输入最后9个要素，把它与NewData输入上的新随机数字级联起来。Result上的数组输出反馈为OldData的下一个集合，发送到下一个程序段。在下一个周期中，一个新的随机数字被发送到NewData。


把矢量转换成矩阵

有时可以用处理对象代替数组函数，获得所需的结果。下面的实例采用From String对象，把矢量(一维数组)转换成矩阵(两维数组)。通过From String运行矢量，把喜欢的数组格式指定为下一个程序中所示的输出。VEE中自动进行Real数据类型和Text数据类型之间的转换。

例如，我们把由9个要素组成的一维数组转换成3x3二维数组：

ramp()函数的矢量输出是：

0,1,2,3,4,5,6,7,8

From String处理把它转换成按行排序的矩阵：

0,1,2
3,4,5
6,7,8

如果您首选按列排序的矩阵，使用transpose() (转置矩阵)函数获得下述结果：

0,3,6
1,4,7
2,5,8

把矢量转换成矩阵的另一种方式是使用Formula构建数组语法。大家知道，语法[1,2,3]会使用这三个要素生成一个一维数组。类似的，如果是一个由10个要素组成的一维数组，那么语法[a]会生成一个1x10的两维数组。如果想得到10x1矩阵，那么也可以使用transpose()。


把完全不同的元素组合到一个数组中

程序显示了从设备中获得多个数据集要求的方法，并得到一个数据集，其中包括各个数据集中的最大值：

这个程序使用Noise Generator模拟输入数据。它获得初始数据集，把它放到全局变量sumdata中，然后进入循环，获得新数据或退出程序。

按Get Data按钮，从Noise Generator中获得新波形，然后使用Get Variable对象恢复sumdata中的数据；这两个波形加总成一个Formula对象，Formula对象处理这些数据，使用Set Variable对象把结果放回sumdata中。

Formula对象在A端上接受新的数组数据，在B端上接受数组sumdata。表达式cliplower(a,b)输出结果数组，如果A > B，那么取值为A，否则取值为B。如果使用clipUpper，那么将得到最小值。


比较两个数组

本例比较了由随机数字组成的两个数组，确定第一个数组中有多少个数字大于第二个数组中的数字。取值之间的比较一般使用关系运算符(如==, !=和<=)和三元运算符(A < B ? C : D)，但这些方法没有解决这个问题。尽管其接受任意数据形状，但它们只返回标量结果。您仍可以通过其它方式执行关系运算，产生数组结果。

randomSeed()函数在随机数字发生器中填入一个随时间迅速变化的种籽。这保证数据在不同的程序运行时间变化。两个randomize()函数每个都生成范围为0-1的1000个随机数字组成的数组。最后，Formula对象中的表达式执行加总运算。

sum(clipLower(0,signof(A-B)))

下面介绍了表达式各个部分的工作方式：

1 A-B提供了一个数组，如果A > B，那么值为正；如果A == B，那么值为零；如果A < B，那么值为负。

2 signof(A-B)把正数转换成1，负数转换成-1，0仍为0。

3 clipLower(0,signof(A-B))把所有-1值剥离出数组，它得到一个数组，在A > B时为1，否则为0。

4 sum()累加1，输出A > B的比较数量。


使用其它表达式

可以对使用其它技术的数组运算实现传统的关系运算符：

• A == B: (1-abs(signof(A-B)))

• A != B: abs(signof(A-B))

• A > B: clipLower(0,signof(A-B))

• A < B: clipLower(0,-signof(A-B))

• A >= B: (1-clipLower(0,-signof(A-B)))

• A <= B: (1-clipLower(0,signof(A-B)))

注意从1中减去由1和0组成的数组怎样在数组上执行NOT运算。可以使用类似的技术，比较标量值，而不是其它数组。还可以在得到的1和0数组上执行Boolean运算。

例如，假设A1和A2是这样两个数组。执行下面的逻辑运算：

• NOT A1: 1 - A1

• A1 AND A2: A1 * A2

• A1 OR A2: signof(A1 + A2)

• A1 XOR A2: 1 - abs(signof((A1 + A2) - 1))

可以使用这些计算结果，通过乘法“掩盖”由原始值组成的数组。去掉与0相匹配的值，保留与1相匹配的值。


选择有效的技术

运用以前的技术会导致采用Formula对象的程序包含大量的维护困难的逻辑运算。尽管其目标是通过用Formula对象代替多个对象来消除或减少循环，但也可以使用UserFunctions。如果用户很好地理解数组处理技术，那么可以绕过复杂的正式逻辑运算，实现更直接的解决方案。

下面的实例说明了在数组处理中可以进行的选择。假设VEE把I/O设备中收到的8位未签名数据数组转换成32位签名整数数据，用户希望返回实数值。通过在返回数组的每个值中增加256，可以在一个表达式中完成这一运算：

(A + (clipLower(-1,clipUpper(0,A))) * (-256))

这一表达式执行下述操作：

1 clipUpper(0,A)把所有正值转换成0。

2 clipLower(-1,clipUpper(0,A))把所有负值转换成-1 (记住输入是整数，而不是实数)。这创建了一个数组，对每个负值为-1，否则为0。

3 clipLower(-1,clipUpper(0,A)) * (-256)把该数组乘以-256，创建一个数组，对每个负值为256，否则为0。然后把这个数组增加到原始数组中，把所有负值偏置到“真实的”正值。

另一个解决方案是使用上面所示的关系运算，但要比这种直接的解决方案复杂得多。

对数组计算来说，一个非常有用的对象是Comparator，它可以提取满足具体标准的数组要素。假设用户想确定下述数据流中的操作：

0 0 0 0 1 1 0 0 1 1 0

下面显示的解决方案为找到数组要素索引提供了最简便的方式，其中取值从0转换成1及从1转换成0。

尽管程序中包含Comparator，但关键是包含下述表达式的Formula对象

A[1:(totSize(A)-1)] - A[0:(totSize(A)-2)]

为查看其工作方式，在数据流中增加数组索引：

B0:0 1:0 2:0 3:0 4:1 5:1 6:0 7:0 8:1 9:1 10:0

在发生转换时标记数组索引。上面的表达式从中减去输入数组，用一个索引间隔开来，得到下面的新数组：

0:0 1:0 2:0 3:0 4:1 5:1 6:0 7:0 8:1 9:1 10:0

- 0:0 1:0 2:0 3:0 4:1 5:1 6:0 7:0 8:1 9:1 10:0

0:0 1:0 2:0 3:1 4:0 5:-1 6:0 7:1 8:0 9:-1

Comparator检查Result数组，查看哪些要素等于0。失败的数组要素是索引，在Failures端上返回为由X-Y坐标组成的数组，提供索引和失败值。为只检索索引值，Unbuild Coord对象把X值和Y值分开。然后X索引值加1，消除交错减法的影响。

减法中包含的数据不仅指明操作的索引，还指明其方向：1表示正转换，-1表示负转换。这一运算基本上是求微分使用的差分方程式法。


创建记录常数

查看怎样创建记录常数的最佳方式是尝试下面所示的范例。

创建一条记录

1. 在工作区中添加一个Record常数对象(Data [image] Constant [image] Record)。

2. 注意Record常数不同于任何其它常数对象。它有两个带名字的字段(默认值为A和B)，每个字段有一个输入字段。点击标有A的按钮，出现Record Field Attributes对话框。

3. 通过输入新的名称代替A，可以改变字段名称。把字段名称变成Name，但数据类型仍设为Text，维数仍设为0 (标量)。 点击OK。

4. 现在点击标有B的按钮。把字段名变成Empl_No，然后点击Real64 (或箭头)显示下拉菜单。

5. 点击Int32选择整数数据类型，但维数仍设为0。点击OK。

6. 在Name旁边的输入字段中输入John Doe，在Empl_No旁边的输入字段中输入111222，如下图所示。把AlphaNumeric显示对象连接到输出端，运行程序：

创建由多条记录组成的数组

1. 继续上面的程序，从Record常数的对象菜单中选择Properties。

2. 现在点击1D Array前面的收音机按钮，把Record常数转换成记录数组。把Size设置成3，然后点击OK。该对象会改变格式。

3. First, Prev, Next和Last按钮允许滚动由记录组成的数组。为改变数组中的每条记录：

a. 点击Next，滚动到第二条记录。把名称变成Sue Smith，把数字变成111223。

b. 点击Next，滚动到第三条(和最后一条)记录。把名称变成Richard Roe，把数字变成111224。

4. 现在运行程序。调整AlphaNumeric显示画面，显示整个记录数组：

另请参阅

把数据采集到记录中

Record Constant


使用 Records

使用记录存储混合数据类型

Record数据类型可以在一个数据容器中存储不同的数据类型。Record可以包括任何VEE数据类型。数据形状可以是Scalar或Array。可以在一个数据结构中存储测试名称、时戳和实数数组。

Record中的各个要素可以存储为字段，并使用圆点符号存取。例如，Rec.Name会存取称为Rec的Record内部称为Name的字段。在记录数组中，Rec[2].Name表示数组第三条记录中的Name字段。所有字段从零开始索引。

使用Record数据类型确定测试数据结构有许多好处：

• 可以在一个容器中创建多个混合数据类型逻辑组，使程序开发和维护更加简便。例如，可以对存储测试数据的记录使用下面的字段：测试名称, 返回值, 通过或未通过测试指示, 时戳, 预计额定值, 通过测试的上限, 通过测试的下限, 及测试描述。

• 可以处理一个数据容器，而不是8个不同的数据容器，使程序更加简单、更加可读。

• 在VEE中，可以在DataSets存储和检索Records。DataSet是为存储记录创建的一个专用文件。在从DataSet中检索记录时，您不必知道数据类型。VEE为检索、分类和搜索DataSets中存储的信息提供了多个对象。

另请参阅

实验5-4: 使用记录，创建记录常数，把数据采集到记录中，从记录中提取字段，改变记录中的字段，以程序化方式构建记录，存取记录，了解记录容器，构建记录


把数据采集到记录中

使用Build Record (Data [image] Build Data [image] Record)对象，构建由记录组成的大型数组。本节使用范例程序，说明怎样使用这个对象。

范例

1. 打开程序manual10.vee ，运行程序。

Build Record对象从数据输入端的数据中构建记录，在其Record输出端输出记录。程序的工作方式如下：

输入A上的Text数组是一个姓名列表。

输入B上的Int32数组是一个员工编号列表。

为Scalar输出形状设置Build Record对象，以便它输出标量记录{<Text Array 1D>, <Int32 Array 1D>}，其中由两个记录字段组成，每个字段包含一个一维数组。第一个记录字段是姓名数组，第二个记录字段是员工编号数组。输入数组的大小不一定相同。

2. 尽管默认值是Scalar，但仍可以改变输出形状：

a. 点击Scalar，显示Array 1D。

b. 运行程序。显示屏中出现一个记录数组。

Build Record对象匹配每个姓名和员工编号，在记录数组中形成单独的记录，输出到Record端。在输出形状设为Array 1D，输入数组的大小必须相同。

另请参阅

Build Record


从记录中提取多个字段

使用rec.field对象 (Data [image] Access Record [image] Get Field)从一个记录中提取一个字段，使用UnBuild Record对象 (Data [image] UnBuild Data [image] Record)提取所有字段。本文使用范例程序，说明了怎样使用这些对象。

Get Field范例

从手册范例目录中(Help [image] Open Example...)打开程序manual11.vee ，运行程序。

Build Record对象构建一条由字段A (波形)和字段B (标量)组成的对象。

上面的rec.field对象使用表达式rec.A，提取"记录rec的字段A" (波形)，其由Waveform对象显示。

下面的rec.field对象使用表达式rec.B，提取"记录rec的字段B" (时间)，其使用时戳格式由AlphaNumeric对象显示。

UnBuild Record范例

从手册范例目录中(Help [image] Open Example...)打开程序manual12.vee ，运行程序。

Build Record对象构建一条由字段A (波形)和字段B (标量)组成的对象。

UnBuild Record对象提取字段A和B，然后在各自端上输出数据。

另请参阅

在表达式中使用记录

Get Field

SubRecord

UnBuild Record


改变记录中的字段

从Data [image] Access Record [image] Set Field中使用赋值运算符对象，改变一条记录或一个记录数组中的字段。本节使用范例程序说明怎样使用这个对象。

改变记录中的字段范例

打开程序manual13.vee ，运行程序。

在标题为Set Name Field的赋值运算符中，表达式为：Let field Name of record Rec be equal to the value on data input terminal A (令记录Rec的字段名等于数据输入端A上的值)。记录连接到rec数据输入端。

在标题为Set Empl_no Field的赋值运算符中，表达式为：Let field Empl_no of record Rec be equal to the value on data input terminal A (令记录Rec的Empl_no等于数据输入端A上的值)。

在改变字段时，记录持续显示。

改变记录数组中的字段范例

在下面的程序中，表达式Rec[5].Name = A指明把记录Rec的Name字段中的数组要素5设置成等于输入端A上的数据。

另请参阅

Set Field


在表达式中使用记录

可以使用记录语法Rec.Field，其中Field是任何VEE表达式记录中Rec记录内部的字段名称。在下面的程序中，表达式(A.High + A.Med)/A.Low把记录A的字段High和Med相加，然后把结果除以字段Low。

技巧

为避免混淆，为记录字段提供描述性名称。

可以把记录语法与数组语法结合起来，从记录字段中访问数组要素。

另请参阅

manual14.vee ，位于手册范例目录Help [image] Open Example...下

处理数据


了解记录容器

有多个VEE对象，允许创建和处理记录，包括Record, Build Record, UnBuild Record, Merge Record, SubRecord, Set Field和Get Field。所有这些对象都位于Data菜单中。

Record数据类型的容器拥有代表数据的多个命名字段。根据需要，可以在一个记录中拥有多个命名字段。每个字段可以包含另一个记录、一个标量或一个数组。

通过为每个字段手动输入一个值，Record对象允许创建记录。您只需使用从对象菜单中存取的Properties对话框，把Record对象配置为标量(数组元素= 0)或配置为数组(数组元素=非0)。

下面的Record对象配置为具有四个数组元素的记录数组。记录由五个字段组成：Text字段 (Name, Address和City)和Int32字段(EmplNo和Zip)。Record对象允许使用First, Prev, Next和Last按钮，从一个数组元素到下一个数组元素逐步通过记录。可以编辑每个字段。

在程序运行时，整个记录输出在Record输出端。AlphaNumeric画面显示包括四个数组元素(0-3)的整个记录，每个元素由括在括号("{}")内的五个记录字段组成。

另请参阅

实验5-4: 使用记录，创建记录常数，把数据采集到记录中，从记录中提取字段，改变记录中的字段，以程序化方式构建记录，存取记录，了解记录容器，构建记录


存取记录

下面两个程序实例说明了存取记录和提取各个字段的方式。

使用Get Field对象，从记录中提取各个字段。Get Field位于Data [image] Access Record下。例如，在第一个程序中，Get Field对象用来提取整个Name和EmplNo字段：Get Field对象是一个Formula对象，默认表示式为rec.field。

使用"dot"语法，存取各个字段，如Rec[*].Name和Rec[*].EmplNo。处理数据中介绍了这种语法。

Rec[*].Name表示“从Rec输入端上的所有记录数组单元中获得Name字段”。这个语法可以用于Formula对象的表达式中，或用于在运行时评估的任何其它表达式中。例如，可以在To String对象的事务处理中使用这种语法。

使用语法Rec[1].Name和Rec[1].EmplNo，获得每个字段的第二个单元 ("element 1")，如下图所示。

为从记录中提取多个字段或所有字段，使用UnBuild Record对象，如下图所示：

UnBuild Record对象允许为记录中的每个字段增加输出，提供Name List和Type List输出。这些输出列明了记录中每个字段的名称和类型。

程序保存在样例目录下的 manual38.vee 文件中。

备注

不能在Record数据类型之间自动转换数据。例如，为把Record数据发送到Real输入端中，必须通过Unbuild Record对象从Record中提取字段，或使用Get Field及前面介绍的Rec.A语法。

另请参阅

实验5-4: 使用记录，创建记录常数，把数据采集到记录中，从记录中提取字段，改变记录中的字段，以程序化方式构建记录，了解记录容器，构建记录


以程序化方式构建记录

Record对象用来创建和编辑简单的记录。但是，创建大型记录会非常麻烦。您可能还希望从现有数据中创建记录。在这些情况下，可以使用Build Record构建记录。

在使用Build Record从各个数据组件中构建记录时，必须定义输出Record容器的数据形状。Build Record对象提供了两种Output Shape选项：Scalar和Array 1D。在大多数情况下，默认值Scalar是合适的Output Shape选项。

下面的实例显示了从两个输入数组中构建的输出记录中Scalar和Array 1D之间的差异：

在上面的程序中，在选择Scalar时，输出记录是由两个字段组成的一个标量记录，每个字段是其中一个输入数组。而在为相同的输入数据选择Array 1D时，输出记录是一个记录数组，其元素数量与两个输入数组的元素数量相同。数据逐个元素在输出记录中匹配。

如果两个输入数组拥有不同数量的元素，那么只允许使用Scalar作为Output Shape。为创建Array 1D输出记录，所有输入数组必须有相同数量的元素，否则会发生错误。但是，您可以混合标量和数组输入数据，如下面的实例所示。

在本例中，如果选择Array 1D，标量Real值1在输出记录数组中重复五次。

另请参阅

实验5-4: 使用记录，创建记录常数，把数据采集到记录中，从记录中提取字段，改变记录中的字段存取记录，了解记录容器，构建记录


使用 DataSets

DataSets可以检索一条或多条记录。VEE对象拆包记录。因此，通过把记录存储到DataSets、而不是文件中，您不必记住数据类型。还可以在数据上执行分类和搜索操作，创建自定义的测试数据库。

可以在记录中构建VEE数据(包括波形)，以后检索这些数据。还可以把记录存储到一个文件中，称为DataSet。To DataSet对象和From DataSet对象允许存储和检索DataSets中的记录。它们位于I/O菜单中。

DataSet是保存到一个文件中、以备以后检索的Record容器集合。To DataSet对象在输入上收集Record数据，把这些数据写入命名文件(DataSet)中。参阅下面的实例。

两个波形(一个正弦波和一个噪声波)输出到Build Record对象，Build Record对象构建一条记录。然后记录输出到To DataSet对象，To DataSet对象把数据写入文件myData中。复选Clear File at PreRun，清除myData中以前存储的任何数据。

一旦数据已经另存为DataSet，使用From DataSet检索记录，然后可以在希望时解除构建记录。下面的程序说明了这种技术。

From DataSet对象从myData检索记录数据，把数据输出到Unbuild Record，Unbuild Record把正弦波字段与噪声数据字段分开。在本例中，正弦波、噪声波形和两个波形之和都显示在单独的XY Trace对象中。

最后实例的一对程序保存在范例目录下的文件 manual40.vee 和manual41.vee 中。

定制简单的测试数据库

可以搜索和分类DataSet，以获得测试名称、时戳、测试参数、测试值、通过或未通过测试指示和测试说明等信息。因此，DataSet记录可以作为测试数据库使用。为搜索信息，可以使用From Data Set对象，具体如下：

• 在搜索操作中使用From Data Set对象中的表达式字段。

• 可以使用函数sort()，使用指定字段对记录分类。

另请参阅

实验5-5: 使用Datasets，实验5-6: 对DataSets使用搜索和分类操作


创建变量

可以创建声明变量或未声明变量及局部变量或全局变量。在使用Formula之类的对象中的表达式赋值，或使用Set Variable 对象赋值时，会创建未声明变量。但是，在赋值前声明变量有多个优势，包括范围优势、程序执行速度更快、保持变量的数据类型和形状等等。

创建未声明局部变量

在表达式中使用对象数据输入端上的数据时，会创建一个未声明局部变量。这个变量对于对象来说是局部变量。表达式中的变量名称必须与输入端的名称相匹配。下图说明了Real64 Constant对象连接到Formula上的实例。Formula表达式中的变量(A, B,和C)通过相应的输入端获得数据，对Formula来说是局部的。如果在Formula中添加输出端(及Result)，它们对Formula也是未声明局部变量。

创建未声明全局变量

1. 点击Data [image] Variable [image] Set Variable，把Set Variable对象放在工作区中。

2. 点击Name字段，根据需要输入新的变量名称。可以使用任何有效变量名称代替变量的globalA。

3. 把数据对象连接到Set Variable 对象的Data端。将创建变量，并设置成该数据值。这个未声明全局变量现在可以用于程序中的任何表达式。

创建声明局部变量或全局变量

1. 确定是否想声明全局变量或局部变量。如果想声明局部变量，打开使用变量的上下文(UserObject或UserFunction)或库。

可以在程序中任何地方声明和使用全局变量。必须在特定上下文或库中声明和使用局部变量。

2. 点击Data [image] Variable [image] Declare Variable，把Declare Variable对象放在工作区中。

3. 点击Name旁边的编辑字段，输入一个变量名称。这个名称应该是唯一的，以避免与其它变量冲突。

4. 点击Scope编辑字段，设置变量的范围。

Global可以在程序任何地方使用变量，而不管存在Declare Variable对象的上下文。

Local to Context限定变量仅用于存在Declare Variable对象的UserObject或UserFunction中(及其内部嵌套的任何UserObject)。
Local to Library限定变量仅用于存在Declare Variable对象的UserFunctions库(局部或导入)。

5. 点击Type编辑字段，设置变量的数据类型。在程序执行过程中为这个变量指配的数据必须与声明数据类型相匹配，否则会发生错误。

6. 点击Num Dims编辑字段，把变量设置为拥有选择维度的数组。

技巧

必须使用Set Variable或赋值运算符初始化声明变量，然后才能使用这个变量。

如果全局变量和局部变量使用相同的名称，那么会发生冲突，在这种情况下局部变量优先。

变量名称不分大小写(globalA与GlobalA相同)。

可以使用任何数据类型，如记录，设置未声明变量。

为查看程序中的变量列表，点击工具栏上的View Variables按钮(或使用View [image] Variables)。在打开程序时会列出声明变量。在程序运行后，会列出未声明全局变量。为查看列表中任何变量的最新内容，双击变量名称。Program Explorer也会列出变量名称。

View Variables按钮

Program Explorer按钮

另请参阅

删除变量

使用变量

使用全局数组

默认首选项(Delete Variables at PreRun)

Set Variable

View Variables


删除变量

1. 点击Data [image] Variable [image] Delete Variable，把Delete Variable对象放在工作区中。

2. 选择是删除某个变量还是所有变量。

为按名称删除某个全局变量，点击By Name (默认值)，然后点击文本字段，输入变量名称。

为删除所有变量，点击All Variables。

技巧

Delete Variable会把声明变量的数据容器中的值复位成没有初始化的值；它不删除变量的名称。

Delete Variable会删除未声明变量的值及其名称。

变量名称不分大小写(globalA等同于GlobalA)。

如果按名称参考的变量不存在，Delete Variable对象会发生错误。

可以作为控制输入在Delete Variable添加名称字段。

另请参阅

创建变量

Delete Variable


使用变量

使用Get Variable对象(Data [image] Variable [image] Get Variable)访问已经初始化的变量，或在表达式中使用变量名称。这些方法特别适合用于UserObject或UserFunction中。如果变量已经声明为局部变量或全局变量，那么必须在正确的上下文中使用Get Variable对象。

技巧

为避免使用以前运行的程序中过时的数据，在运行程序时，在PreRun时删除(清除)所有变量的值。为关闭Delete Variables at PreRun，点击工具栏上的Default Preferences按钮(File [image] Default Preferences)。

Default Preferences按钮

如果在PreRun时删除值，必须把Set Variable对象的序列输出端连接到使用变量的任何对象的序列输入端。否则会发生错误，因为变量没有定义的值。

可以在包括表达式的任何对象中使用一个变量。但是，不能在Get Variable对象的名称字段中包括表达式。

可以在VEE程序的主上下文中定义一个全局变量，然后从UserObject或UserFunction的上下文内部访问变量。这只要求到UserObject或到Call对象的序列输入连接。

范例程序manual18.vee 说明了在Main和UserObject上下文中怎样声明、初始化和使用变量。可以在Manual范例目录(Help [image] Open Example)下找到这个程序。

另请参阅

关于变量，创建变量，设置初始值，存取变量值，在库中使用变量

Get Variable，WatchWindow


使用全局数组

可以把变量声明为全局数组。这可以更简便地处理数组，因为可以从VEE程序的任何地方访问数组。下面使用范例程序说明了怎样使用对象。

范例

1. 从手册范例目录中打开程序manual19.vee (Help [image] Open Example...)，运行程序。

两个Formula对象使用数组语法，访问全局数组的要素。例如，表达式globalA[3]检索全局数组globalA中编号为0003的要素(第四个要素)。可以在记录中使用这种方法。

另请参阅

创建变量


设置初始值

在存取任何变量之前，必须已经设置了初始值，否则VEE会生成错误。下面是一个变量实例。

Set Variable必须先设置全局变量，然后Get Variable才能检索变量。为保证这一点，Set Variable对象的序列输出端连接到Get Variable对象的序列输入端。如果还没有连接，那么Get Variable可能会试图存取一个不存在的全局变量，会发生错误。

备注

如果没有设置属性Delete Variables at PreRun，那么可能不会收到错误信息，而会收到旧数据。

在创建声明变量时，它们没有初始化，必须先设置一个值，然后才能通过Get Variable存取变量或在表达式中使用变量。如果没有设置，程序会生成错误。可以通过Set Variable对象或使用Formula对象设置值。

如果变量是一个数组或一条记录，在使用Formula对象时，必须设置整个数组或记录的值，然后才能存取任何要素。下面的实例显示了从Formula对象中初始化值的两种不同方式。

另请参阅

关于变量，创建变量，存取变量值，使用变量，在库中使用变量


存取变量值

一旦命名了变量，用户可以在希望时在程序中多次存取变量值。可以使用多种方法，检索变量值。在下面的实例中，使用Get Variable对象检索全局变量globalA中存储的值一次，第二次存取可以在Formula对象的表达式中包括名称globalA，第三次存取可以在To File对象的事务处理中包括名称globalA：

备注

可以在Formula对象的任何表达式或运行时评估的任何其它表达式中包括任何全局变量的名称。

另请参阅

关于变量，创建变量，设置初始值，使用变量，在库中使用变量


在库中使用变量

由于只有在导入库时才加载UserFunction，因此在使用Declare Variable对象时，必须把它们放在其中一个UserFunction中，而不能放在库的Main窗口中。

当一个变量的范围为Global (全局变量)时，它只能用于局部程序中，而不能用于调用的任何Remote Function中。

· 在导入一个库时，将为指定范围定义导入的UserFunction中说明的所有变量 (通过Declare Variable对象)。例如，如果变量范围是Global，可以从程序的任何部分存取变量，直到库被删除。在库被删除时，其UserFunction中说明的所有变量也将被删除。

另请参阅

关于变量，创建变量，设置初始值，存取变量值，使用变量


Agilent VEE分析功能

VEE支持常见的数学运算和数百种其它函数。此外，VEE还包括MATLAB Script功能。MATLAB Script功能是The MathWorks提供的标准全功能MATLAB的一个子集。它在VEE中提供了额外的数学运算功能，包括信号处理、高级数学运算、数据分析及科学和工程图表。MATLAB Script功能全面集成VEE，可以在任何VEE程序中包括MATLAB Script对象。

如果VEE和MATLAB都没有提供用户需要的数学函数，那么仍有多个选项。可以使用Formula对象创建函数，可以在编译语言(如C语言)中编写函数，并链接到VEE，还可以从VEE与另一个应用软件通信。

另请参阅

使用Formula对象创建表达式

使用内置数学对象

在Agilent VEE中使用MATLAB脚本


使用Formula对象创建表达式

可以使用Formula对象，在VEE中编写数学表达式。表达式中的值是数据输入端名称或全局变量。表达式的求解结果将放在数据输出端。

下图显示了一个Formula对象。表达式的输入字段位于对象的中心。默认的表达式 (2*A+3) 指明了在哪里输入公式。双击字段，可以输入一个不同的表达式。

备注

可以在一行以上的行中输入一个Formula表达式。如果Formula表达式中包含Return，那么它被解释为多行单个表达式。如果Formula中包含用分号(;)分开的语句，那么它们被理解为Formula中的多个表达式。

Formula框是一个Rich Text Format框，可以使用标准编辑命令，在Formula中编辑表达式。例如，可以拖动鼠标，高亮度显示字符，使用Ctrl-C复制字符，使用Ctrl-V粘贴，使用Ctrl-X删除，使用End, Insert, Delete, Backspace等等。

备注

从Devices [image] Function & Object Browser Built-in type中创建的所有函数都是已经地相应设置了表达式的Formulas。可以修改这些公式，以把多个函数组合在一起，增加(或删除)输入。还可以在Formula对象中进行多行输入，为输出端赋值。

使用Formula对象对表达式求解

在下例中，将对表达式2*A^6-B求解，其中A=2和B=1。(注意^号表示指数。)

备注

变量名称不分大小写。

1 选择Device [image] Formula。点击Formula输入字段，输入2*A^6-B。

2 把鼠标指针放在数据输入区域上(但不是正好位于A输入上)，按Ctrl-A添加一个输入端。

备注

在默认情况下它将标为B，但可以进行重命名。

3 选择Data [image] Constant [image] Int32，从对象菜单中选择Clone进行复制，把两个Int32对象连接到Formula输入A和输入B上。

4 在A Int32输入框中输入2，在B Int32输入框中输入1。

5 选择Display [image] AlphaNumeric，把它连接到Formula的输出，运行程序。应显示结果127。

在Formula对象中使用Agilent VEE函数

本例使用Formula对象生成一个余弦波，计算标准偏差和均方根。

1 选择Function Generator, Formula和AlphaNumeric对象，使用数据端把它们连接起来。

2 打开对象菜单，选择Clone，复制Formula对象，把它放在第一个对象的下面。把Function Generator数据输出端连接到第二个Formula对象。

3 复制另一个AlphaNumeric画面，把它连接到第二个Formula对象。

4 在第一个Formula对象中输入sdev(A)，在第二个Formula对象中输入rms(A)。

sdev(A)和rms (A)是来自Device [image] Function & Object Browser对话框的两个数学函数。注意它们可以称为函数，也可以称为独立对象，其工作方式相同。

5 运行程序。在这些函数放到Formula对象中时，其显示的答案与作为独立对象使用时相同。

现在使用一个Formula对象计算标准偏差和均方根。公式可以有多个输出端，并为它们赋值。

6 双击对象菜单，Cut其中一个Formula对象。

7 在其余Formula对象中，把表达式变成：
B=sdev(A);
C=rms(A)

备注

在Formula对象中包含多个表达式时，必须在表达式末尾放一个分号，以把它与下一个表达式区分开来。例如，在公式B=sdev(A)中，分号表明表达式末尾。

备注

可以在Formula对象中的任何点上输入断行。只要没有分号，公式就会读为一个表达式。例如，可以输入一个表达式：

B=sdev
(A)

还可以在公式中添加空格，改善可读性。

8 在Formula对象中，添加一个输出端。重命名输出端B和C。把输出端B连接到其中一个Alphanumeric对象上，把输出端C连接到另一个Alphanumeric对象上。

9 运行程序，其应类似于下图：

自己练习

完成下述练习，检查结果如下：

1 在Built-in Functions的Generate类别下，使用ramp对象创建一个由数字1 - 2048组成的数组。计算这个数组的偏差，并显示标准偏差。

2 做上一步中描述的同一练习，在Formula对象中使用ramp()函数，而不是ramp对象。

3 嵌套函数，做上一步中描述的同一练习。只使用两个对象。

对第二个和第三个练习，必须在Formula对象上删除输入端A，避免错误信息，因为在对象运行前，必须连接所有数据输入端，并拥有数据。

另请参阅

Formula

Copyright (c) 1991-2006 安捷伦科技公司版权所有


使用内置数学对象

在VEE Device [image] Function & Object Browser中，可以存取VEE和MATLAB的内置(预先编程的)数学表达式。

存取内置运算符或函数

为存取VEE数学运算符和函数，选择Device [image] Function & Object Browser。例如，为创建一个公式，返回一个位于指定范围内的随机数字，选择Type: Built-in Functions, Category: Probability & Statistics, 和Functions: random。

注意Function & Object Browser显示了当前选项的简要说明。还可以点击Help按钮，获得当前选项的详细说明，及获得定义、用途、语法和实例等信息。

为存取MATLAB运算符和函数，选择Device [image] Function & Object Browser，在Type: 下选择MATLAB Functions。例如，为把根转换成多项式，选择Type: MATLAB Functions, Category: Interpolation & Polynomials, 和Functions: poly。

Function & Object Browser中再次显示当前选项的简要说明，点击Help显示与当前选项有关的更详细的说明。“在Agilent VEE中使用MATLAB脚本”更详细地讨论了MATLAB运行时引擎和脚本。

实例: 计算标准偏差

生成一个余弦波，频率1 kHz，幅度1 V，时间跨度20 ms，用256个点表示。计算标准偏差，显示余弦波。

1. 选择Device [image] Virtual Source [image] Function Generator。相应地设置Frequency，变成图标。

2. 选择Device [image] Function & Object Browser，然后选择Built-in Functions, Probability & Statistics, 和sdev。点击Create Formula。

备注

在工具条上按f x图标或按Ctrl-I，可以直接进入Function & Object Browser对话框。

3. 打开sdev()对象菜单，查询Help。

备注

sdev(x)对象定义为x变化量的平方根，x的类型可以是UInt8, Int16, Int32, Real32, Real64, Coord, 或Waveform。函数发生器输出Waveform数据类型。

4. 把函数发生器连接到sdev(x)上。

5. 选择Display [image] AlphaNumeric，把它连接到sdev(x)数据输出端。

6. 运行程序，其外观应该如下图所示。


显示标量值

使AlphaNumeric对象显示标量值。这个对象自行清除，只显示每次执行时收到的新数据。

1. 在用工作区中添加一个AlphaNumeric显示画面 (Display [image] AlphaNumeric)。

2. 把AlphaNumeric对象的数据输入端连接到一个标量数据来源上(如Real64常数对象)。

3. 运行程序，显示数据。

范例

另请参阅

显示一串对象值

AlphaNumeric


显示取值数组

使用AlphaNumeric对象显示一个数组。这个对象自行清除，只显示每次执行时收到的新数据。

1. 在工作区中添加一个AlphaNumeric显示画面(Display [image] AlphaNumeric)。

2. 把AlphaNumeric对象的数据输入端连接到一个数组数据来源上(如一个Alloc Real64对象)。

3. 运行程序，显示数据。

4. 调整AlphaNumeric对象，显示整个数组。

范例

一维数组是由10个要素组成的一个数据容器。

另请参阅

AlphaNumeric


显示一串对数值

使用Logging AlphaNumeric对象，显示一串对数值。这个对象会保留其收到的数据的"历史日志"。

1. 在工作区中添加一个Logging AlphaNumeric显示画面 (Display [image] Logging AlphaNumeric)。

2. 把Logging AlphaNumeric对象的数据输入端连接到重复的数据源上 (如For Count对象)。

3. 运行程序，显示数据的对数。

范例

Logging AlphaNumeric对象显示来自For Count对象的10个标量值的对数。

另请参阅

显示数据的模拟画面

Logging AlphaNumeric


显示数据的模拟画面

使用Indicator对象在模拟指示器上显示标量数据。这些对象提供了三色范围指示。

Fill Bar使用色条显示一个值。

Meter在模拟仪表上显示一个值。

Tank在坦克图形中使用色条显示一个值。

Thermometer在温度计图形中使用"水银"显示一个值。

下面的程序以Thermometer对象为例。对其它Indicator对象可以采用类似的技术。

显示Thermometer上的数据

1. 在工作区中添加一个Thermometer对象 (Display [image] Indicator [image] Thermometer)。

2. 把一个Int32 Slider对象连接到Thermometer的数据输入端。移动滑尺，选择一个值，运行程序。在把滑尺设置成允许的范围内的不同值，运行程序。

在改变滑尺值时，"水银"面和颜色会变化。值显示在Thermometer的底部。

3. 试着改变Thermometer标度范围。点击下方范围字段(0)，输入一个新值。对上方范围字段(100)进行同一操作。注意温度计标量变化，以符合新的范围。

配置Thermometer对象

1. 从Thermometer的对象菜单中点击Properties，出现Thermometer Properties窗口。

2. 试着改变部分参数：

a. 可以为Thermometer选择垂直(默认值)放置或水平放置。还可以打开或关闭数字显示。

b. 可以为每个范围(低, 中, 高)选择一个颜色。点击一个颜色按钮，显示可能的颜色。还可以设置下限值和上限值，确定每个颜色范围开始的位置。

3. Properties窗口中所作的变化立即生效。

另请参阅

显示颜色告警

Fill Bar

Meter

Tank

Thermometer


显示颜色告警

Color Alarm对象显示用户自定义颜色指示符和文本串，具体取决于其数据输入端的值。

使用Color Alarm

1. 在工作区中添加一个Color Alarm对象(Display [image] Indicator [image] Color Alarm)。

2. 把一个Real64 Slider对象连接到Color Alarm的数据输入端。移动滑尺选择一个值，运行程序，把滑尺设成允许的范围内的不同值，运行程序。

在滑尺位置变化时，Color Alarm显示的颜色和文本也会变化。

配置Color Alarm

1. 从Color Alarm对象的对象菜单中点击Properties，出现Properties窗口。

2. 试着改变部分参数：

a. 从对话框的Layout部分，可以为Color Alarm选择一个圆形(默认值)或矩形布局。还可以打开或关闭数字显示和"三维"边框。

b. 从对话框的Limits部分，可以为每个范围(低, 中, 高)选择一个颜色。点击一个颜色按钮，显示可能的颜色。可以改变每个范围的文本，还可以设置下限值和上限值，确定每个颜色范围开始的位置。

3. Properties窗口中所作的变化立即生效。

另请参阅

显示数据的模拟画面

Color Alarm


显示XY值

XY Trace和X vs Y Plot对象通常最适合图形显示。

绘制一串值

1. 在工作区中添加一个XY Trace对象(Display [image] XY Trace)。

2. 把一个数据源连接到XY Trace对象上的数据输入端。数据可以是连续生成的一串点，也可以是一个波形。Function Generator对象(Device [image] Virtual Source)非常适合这一范例。

3. 运行程序。

范例

在下面的程序中，For Range对象重复37次，生成一串值，0, 10, 20, 依此类推, 直到360。Formula对象计算每个值的正弦，把结果输出到XY Trace对象，然后绘制得到的曲线。

针对X值绘制一串Y值

1. 在工作区中添加一个X vs Y Plot对象(Display [image] X vs Y Plot)。

2. 把XData和YData1数据输入端连接到相应的数据源。可以针对X点绘制连续生成的一串Y点，也可以针对一个波形绘制波形图。但是，不能混合使用不同的数据形状。

3. 运行程序。

范例

在下面的程序中，For Log Range对象重复14次，生成一串对数的Y数据点。Counter把当前数输出到XData输入端，For Log Range对象则把一串对数输出到YData1输入端。X vs Y Plot对象显示得到的曲线。

另请参阅

显示波形

X vs Y Plot

XY Trace


显示波形

使用Waveform (Time)显示对象或XY Trace对象显示波形数据。使用X vs Y Plot对象相对于另一个波形显示一个波形。下面的范例说明了怎样显示波形。

备注

为改变对象的属性，如布局、网格类型和标尺，双击标题栏或点击对象菜单上的Properties。为迅速存取轨迹和标度属性，点击轨迹和标度标签。

在XY Trace对象上显示一个正弦波

1. 在工作区中添加一个XY Trace对象 (Display [image] XY Trace)。

2. 在工作区中添加一个Function Generator对象(Device [image] Virtual Source [image] Function Generator)。把Function Generator的Func 输出连接到XY Trace对象上的数据输入端。

3. 改变Function Generator上的设置，输出一个50 Hz正弦波，如下图所示。运行程序。

在下面的程序中，XY Trace对象在时域中显示波形。它针对0 - 20m (20毫秒)的时间标度绘制波形幅度，以与波形的时间跨度相匹配。如果输入数据是波形，XY Trace对象自动进行这一操作。否则，X轴只是绘制的点数。

在X vs Y Plot对象上相对于另一个波形显示一个波形

1. 在工作区中添加一个X vs Y Plot对象(Display [image] X vs Y Plot)。

2. 在工作区中添加两个Function Generator对象。

3. 把其中一个Function Generator的Func 输出连接到X vs Y Plot对象上的XData输入端。改变Function Generator上的设置，输出一个50 Hz正弦波，Phase设为0度。

4. 把另一个Function Generator的Func 输出连接到X vs Y Plot对象上的YData1输入端。改变Function Generator上的设置，输出一个 50 Hz正弦波，Phase设为45度。

5. 运行程序。

在下面的程序中，Function Generator对象生成两个50 Hz正弦波，这两个正弦波失相45度。彼此相对绘制这两个波形的曲线，显示典型的Lissajous图。

在Waveform (Time)对象上显示两个波形

1. 在工作区中添加一个Waveform (Time)对象(Display [image] Waveform (Time))。

2. 从对象菜单中点击Add Terminal [image] Data Input...，添加第二个终端。

3. 在工作区中添加两个Function Generator对象。

4. 把其中一个Function Generator的Func 输出连接到Waveform对象上的Trace1输入端。改变Function Generator上的设置，输出一个 50 Hz正弦波，Phase设为0度。

5. 把另一个Function Generator的Func 输出连接到Trace2输入端。改变Function Generator上的设置，输出一个 50 Hz正弦波，DcOffset设为-0.8，Phase设为 0度。

6. 运行程序。

在下面的程序中，Function Generator对象生成两个50 Hz正弦波，但第二个正弦波的d.c.偏置为-0.8。Waveform (Time)对象显示两个波形，分别为Trace 1和Trace 2。为改变两个轨迹的线样式属性，点击轨迹标签，然后在出现的对话框中改变Line Type和Point Type。

备注

还可以从仪器中使用XY Trace, X vs Y Plot和Waveform (Time)对象显示波形数据。

另请参阅

添加轨迹

改变轨迹的线型和点型

Waveform (Time)

X vs Y Plot

XY Trace


显示极坐标数据

使用Polar Plot显示对象，绘制极坐标数据。下面的程序说明了怎样使用这个对象。

1. 在工作区中添加一个Polar Plot显示对象 (Display [image] Polar Plot)。

2. 添加一个For Range对象和一个Formula对象。如下面的程序所示连接对象。在Formula对象中输入所需的三角公式，运行程序。

三角公式1-(sin(360-A)/3)-cos(A)创建"心形"图。可以输入所需的任何公式。For Range对象重复，从0度到360度每次把角度步进一度。Polar Plot对象针对角度绘制三角数据图。

另请参阅

Polar Plot


添加轨迹

可以在任何图形(XY)显示画面对象中添加轨迹。

1. 从显示画面对象的对象菜单中选择Add Terminal [image] Data Input。

2. 新输入以相应的标记添加到对象中。在某些显示画面上，只能看到端，看不到标记。

3. 为查看端的标记，从对象菜单中选择Properties，在Show Terminals中选择True。

4. 一旦已经添加了想要的端，把数据来源连接到每个端上。

另请参阅

改变轨迹的颜色

T改变轨迹的线型和点型


以程序化方式在图表中添加轨迹

XY Trace、X vs Y Plot、Polar Plot、Complex Plane和Strip Chart都可以作为Input Data接受二维数组，一次最多可以显示12条轨迹。可以以程序化方式在图形对象中添加多条轨迹。

绘制多条轨迹

下例说明了怎样在Graph对象中显示多条轨迹。

1. 创建一个类似下图的程序。

2. 从XY Trace对象的对象菜单中选择 Properties，出现Properties窗口。

3. 在Behavior类别下，点击MatrixInput。注意在默认情况下MatrixInput为假，把它变成True。

4. 在设置MatrixInput后，运行程序。注意XY Trace图中显示两条轨迹。

其它范例：2dXyTrace.vee, MatrixInputStripChart.vee.

备注

只有在没有Next Curve Control Pin、且XY Trace有一个单一输入数据端时，这个MatrixInput属性才能设置为True。类似的，不能在Matrix-Input图中添加额外的数据输入。

Panel View中没有提供MatrixInput属性，在运行时不能以程序化方式切换。

可以在运行时在所有轨迹上设置各个属性(颜色, 点的样式, 等等)。

另请参阅

添加轨迹, XY Trace, X vs Y Plot, Polar Plot, Complex Plane, Strip Chart


改变轨迹的颜色

可以改变图形(XY)显示对象中的轨迹颜色。

1. 直接点击显示画面打开视图中的轨迹名称，改变其属性。

2. 在Edit对话框, 点击Color旁边的按钮。从出现的对话框中，点击新的颜色，然后点击 OK。

3. 在改变轨迹颜色后，在Edit对话框中点击 OK，返回工作区。新的颜色现在激活。

4. 对需要改变颜色的每条轨迹重复上述步骤。

还可以从Properties窗口中编辑这些值。从任何XY显示画面的上下文相关菜单中，选择Properties。在Properties窗口，向下滚动到Design类别。点击希望的轨迹左面的"+"号，查看和编辑该轨迹的属性。

另请参阅

改变轨迹的线型和点型


改变轨迹的线型和点型

可以改变图形(XY)显示对象中的线型和点型。

1. 在显示画面打开视图中直接点击轨迹名称，改变其属性。

2. 在Edit对话框中，可以同时改变线型和点型：

a. 为改变线型，点击Line Type: 右面的按钮，每次点击时，线型会变化。持续点击，直到找到首选的线型。

b. 为改变点型，点击Point Type: 右面的按钮，每次点击时，点型会变化。持续点击，直到找到首选的点型。

3. 在变动完成后，点击OK返回工作区。

4. 对需要新线型和点型的每条轨迹重复上述步骤。

还可以从Properties窗口中编辑这些值。从任何XY显示画面的上下文相关菜单中， 选择Properties。在Properties窗口，向下滚动到Design类别。点击希望的轨迹左面的"+"号，查看和编辑该轨迹的属性。

另请参阅

改变轨迹的颜色


缩小或放大显示画面

可以在任何图形(XY)显示对象中缩小或放大显示画面。本规程使用范例程序，说明怎样使用缩放功能。

1. 从手册范例目录(Help [image] Open Example...)中加载程序manual23.vee 。运行程序，显示一条轨迹。

2. 从显示对象的对象菜单中选择Zoom [image] In。

3. 把指针移动到想要放大的区域的右上角。然后按鼠标左键，拖动外框，定义区域。

4. 放开鼠标键。显示放大后的区域。

5. 点击Auto Scale，可以返回原始显示画面。

6. 现在从显示对象的对象菜单中选择Zoom [image] Out 2 X。

7. 注意显示画面怎样缩小到原始大小的两倍。在任何时候点击Auto Scale，可以返回原始显示画面。.

快捷方式

按鼠标左键，在希望缩放的区域上拖动外框，然后放开鼠标键。


改变网格类型

可以改变任何图形(XY)显示对象的网格类型。

1. 从对象菜单中选择Properties，出现Properties窗口。

2. 在Grid Type上，选择希望的网格类型(默认值是Lines)。

3. Properties窗口中所作的变化立即生效。


在显示画面中设置标尺

可以在任何图形(XY)显示画面对象中设置标尺，识别波峰和波谷的位置。

1. 从对象菜单中选择Properties，出现Properties窗口。

2. 在Markers类别下，选择NumMarkers：

a. None关闭标尺(默认值)。

b. One打开一个标尺。标尺位置显示在对象的底部。

c. Two打开两个标尺。每个标尺位置显示在对象的底部。

d. Delta打开两个标尺。每个标尺的位置及两个位置之差显示在对象的底部。

此外，如果把MarkerInterpolate变成True，可以把标尺放在显示的多个数据点之间。(使用线性内插计算标尺位置。)

3. 在设置Markers后，使用鼠标点击和拖动标尺，可以沿着轨迹移动标尺。

范例

包含标尺的程序作为manual24.vee 保存在Manual范例目录下(Help [image] Open Example...)。

1. 加载和运行程序，在XY Trace对象上显示一个波形。

2. 试着移动标尺。注意XY Trace对象底部的位置数据。


获得和设置标尺属性

可以以程序化方式，在任何图形(XY)显示对象中获得和设置标尺值。

1. 假设有一个带标尺的XY显示画面，从对象菜单中选择Properties，出现Properties Window。

2. 在Name字段中输入一个名称。这个XYDisplay变成一个Local-to-Context变量，类型为Object，并给出名称。现在可以在任何Formula或表达式中使用这个名称指称这个XY Display，就象任何其它Declared Variable一样。

3. 得到一个Formula对象 (Device [image] Formula)。

4. 把所需的表达式输入Formula中，使用句点把对象名称与标尺属性分开，如：myGraph.marker1X

5. 如果在公式中没有使用，删除默认的输入端。

除直接输入公式外，还可以使用Function & Object Browser。假设有一个命名的XY显示画面：

1. 选择Device [image] Function & Object Browser。

2. 从最左面的列表中选择VEE Objects，选择XYDevice类别。然后，Member (最右面)一栏显示提供的所有标尺属性的列表。

3. 选择一个标尺属性，点击Create Formula按钮。修改自动生成的表达式，把默认名称"XYDevice"变成XY显示对象使用的名称。


自动调整显示画面大小

可以使用各种方法调整任何图形(XY)显示画面。在Properties窗口中，点击Scales，注意在默认状态下会启动Automatic Scaling属性。这会在收到数据后自动调整显示画面大小。另外在Properties的Layout类别中，可以把ShowAutoScaleButton变成True。如果关闭Automatic Scaling，那么可以手动调整显示画面大小。此外，对象菜单有一条Auto Scale命令。通常情况下，最好启动Automatic Scaling。

有时您可能会首选以程序化方式启动和关闭Automatic Scaling。为此，在显示对象中添加一个控制端，把正确信息发送给这个控制端。

1. 从图形显示对象的对象菜单中选择Add Terminal [image] Control Input。

2. 选择Scales控制输入。

3. 添加一个Record Constant对象 (Data [image] Constant [image] Record)。

4. 输入控制Scales参数的正确字段名和值，把其输出端连接到Scales控制输入。VEE帮助的每个显示画面主题中提供了与Scales参数有关的信息。

下图显示了这样的一个范例。Record Constant设置X标度的最大值和最小值，关闭Automatic Scaling。在数据发送到显示画面前使控制输入生效非常重要。为保证这一点，Record Constant序列输出端连接到Function Generator序列输入端。

另请参阅

Record Constant

XY Trace


自定义测试数据显示画面

可以通过各种方式自定义显示画面。不仅可以象所有VEE对象一样标注、移动和确定显示画面大小，还可以改变x/y标度，修改轨迹，添加标尺，或放大部分图形显示画面。

下例说明了部分功能。它使用Noise Generator生成波形，然后使用Waveform (Time)画面显示波形。下例还描述了怎样改变X标度，放大波段，使用标尺测量波形上各点之间的距离。这一原则同样可以适用于所有图形显示画面。

显示波形

1 选择Device [image] Virtual Source [image] Noise Generator。

2 选择Display [image] Waveform (Time)。

3 把Noise Generator的数据输出连接到Waveform (Time)的数据输入上，运行程序。

改变X和Y标度

1 双击Waveform (Time)标题栏，出现Y Plot Properties对话框，选择Scales文件夹，为X Maximum选择20m，输入1m。

它会提示显示的时间间隔为20毫秒到1毫秒。

2 双击Y轴上的Minimum字段，出现-1，输入- .5，点击OK。

放大部分波形

1 打开Waveform (Time)对象菜单，点击Zoom [image] In。

光标变成小直角。点击并拖动鼠标，可以在图上画一个方块，圈定想要放大的区域。

2 圈定波形区域，包括多个峰值，放开鼠标键。

显示画面放大到选定的波形区域。注意x和y标度会自动变化。

在显示画面中添加增量标尺

1 移到Noise Generator上的open view。

a 把Num Points设置变成16，再次运行程序。

b 打开Waveform (Time)对象菜单，选择Properties (或双击标题栏)，然后在Markers下面点击Delta。然后点击OK。

备注

可以在运行时获得和设置标尺值。如需更多信息，请参阅Contents and Index [image] How Do I... Display Data下的联机帮助内容。

您将在波形其中一个数据点上看到两个白箭头，一个箭头向上，一个箭头向下。另外，注意画面在底部记录这些标尺的x和y坐标。为测量两个峰值之间的x或y距离，点击并把箭头拖动到想要测量的峰值。您将看到其中一个标尺移动到新的峰值上，在画面底部记录新的坐标。

VEE将在波形数据点之间自动进行插补。打开对象菜单，选择Properties，然后在Markers下点击MarkerInterpolate。

改变轨迹的颜色

1 双击标题栏，进入Properties，然后双击Trace属性。

可以为这个文件夹中选定的Trace选择Color、LineStyle、Name和PointStyle属性。

通过使用Traces或Scales控制输入，还可以在运行时改变这些值。

2 现在轨迹将用新颜色显示。可以以与上面练习中的功能类似的方式，自定义其它显示特点，如GridType。

备注

VEE还在显示对象菜单中包括Plot，允许您在显示画面上绘制测试结果曲线，而不会打印输出程序的其余部分。

另请参阅

以程序化方式在图表中添加轨迹


检查有效数据

清除显示画面

可以使用下述方式，清除任何图形(XY)显示对象上的显示画面：

在显示对象的Properties窗口中，把Behavior类别中的ClearAtPreRun变成True。

从对象菜单中选择Clear Control [image] Display。

在对象中添加一个Clear控制输入端。从对象菜单中，点击Add Terminal [image] Control Input。选择Clear，点击OK。在通过到序列输出端的连接激活Clear端时，会清除显示画面。


把数据写入文件

使用To File对象把数据写入文件。

创建数据文件

1、在程序中添加一个To File对象(I/O [image] To [image] File)。

2、将To File对象的数据输入针脚连接到您想输出到的文件的数据源上。

3、点击To File按钮并在对话框内输入新的文件名以更改目标文件的名称。然后点击OK键。

To File对象通过一个写处理将数据输入到文件中。如果文件已经不存在，VEE将创建之。

将数据写入文件

这个过程显示了如何创建一个简单的程序将字符串和实数数据写入文件中。如果您的程序要求不同的选项，那么可以作为指南使用本规程。

1、将To File对象添加到您的程序中(I/O [image] To [image] File)。点击复选框打开Clear File At PreRun & Open（出现在复选框内的一个复选标志）。

一般来讲，您会希望打开Clear File At PreRun & Open，以确保文件内是被清除过的且文件中没有旧数据。

2、 在<Double-Click to Add Transaction>上双击，弹出I/O Transaction对话框。

3、点击DEFAULT FORMAT字段(或它的箭头)。出现一个下拉菜单。

4、 点击STRING FORMAT，然后点击OK。现在经修改的处理是WRITE TEXT a STR EOL。这项处理将变量a（输入针脚A上的数据）作为字符串各式的文本数据写入myFile，后面跟着行尾序列（回车/换行）。

5、在<Double-Click to Add Transaction>上双击鼠标，给To File对象(对象菜单 [image] Add Trans?/span>)增加第二项操作。

6、将变量字段(a 为默认值)改为b。

7、点击DEFAULT FORMAT字段 (或它的箭头)。出现下拉菜单。

8、点击REAL64 FORMAT，然后点击OK。第二项操作是WRITE TEXT b REAL64 STD EOL。这项操作将变量b作为REAL64 STD格式的文本写入myFile。

9、将Text常量对象连接到终端a上并将Real64常量对象连接到终端b上。完成的程序应当显示如下：

当您运行程序时，两行数据被写入到myFile，后面跟着行尾序列（回车/换行）。第一个是字符串String data。第二个是实数3.142。

另请参阅

从文件中读取数据

编辑文件I/O处理

以程序化方式选择文件名称

To DataSet

To File


使用To/From File对象

To File和From File 对象基于I/O处理读取文件中的数据。它们有以下特点：

• 在第一个READ或WRITE处理中打开一个数据文件。当程序结束时，VEE会自动关闭任何打开的文件。

• VEE每个文件保持一个读取指针和一个写入指针，不管有多少个对象存取文件。读取指针识别要读取的下一个数据项目，写入指针则指明应该在哪里写入下一个数据项目。

• To/From File对象可以把数据追加到现有文件后，或覆盖现有文件。如果在To File 对象打开的视图中复选Clear File at PreRun & Open设置，那么写入指针会从文件的开头开始。否则，指针位于现有文件的末尾。每个WRITE处理会把信息追加到写入指针位置的文件中 。如果执行EXECUTE CLEAR 处理，那么写入指针会移动到文件的开头，并删除内容。

• 读取指针从文件的开头开始，根据READ处理通过数据。可以在From File 对象中执行EXECUTE REWIND，把指针移回文件开始头，而不会影响任何数据。

另请参阅

了解I/O事务

实验5-3: 使用To/From File对象

实验2-3: 使用数据文件


从文件中读取数据

使用From File对象从文件中读取数据。

这一程序与把数据写入文件中是配套程序。它显示了怎样从该程序创建的文件中读取字符串和实际数据。如果程序要求的选项与本处介绍的选项不同，那么应以下面的程序为准。

1. 在程序中添加From File对象(I/O [image] From [image] File)。

2. 使用写入文件中描述的I/O Transaction对话框，把默认处理变成READ TEXT x STR。

3. 再次使用写入文件中描述的I/O Transaction对话框，添加第二个处理READ TEXT y REAL64。

4. 把AlphaNumeric画面连接到两个输出(X和y)上。

5. 把To File对象的序列输出端连接到From File对象的序列输入端。这保证在From File对象试图从文件中读取数据前把数据写入myFile。完成的程序应如下：

另请参阅

编辑文件I/O处理

以程序化方式选择文件名称

把数据写入文件中

From DataSet

From File


编辑I/O处理

编辑I/O事务

To File对象使用写入处理与指定的数据文件通信。默认处理是WRITE TEXT a EOL，作为文本把数据写入输入A上，后面跟着一个行尾序列(默认值是回车/换行)。From File对象使用类似的处理，从文件中读取数据。可以使用I/O Transaction对话框，编辑处理。

编辑处理

1. 双击To File or From File对象中的处理字段。出现I/O Transaction对话框。

2. 为改变操作，点击WRITE或READ，选择操作。

3. 为改变编码，点击Text，然后选择编码。

一般来说，如果想使用From File把数据检索回到VEE中，那么使用容器编码；如果想使用外部程序，如电子表格程序存取数据文件，那么不使用容器编码。

对话框适应选择的项目，提供相应的选项。

4. 根据需要改变其它字段项目，配置各种选项，如数据格式和行尾序列，然后点击OK。

5. 为添加另一个处理，双击最后一个处理下面的空白行。

另请参阅

From File

To File

了解I/O处理


存储和检索一个波形

最好以数据容器的形式存储和检索波形数据，基本程序如下：

1. 在To File对象中使用一个WRITE CONTAINER处理，把波形数据写入一个文件中。

2. 在From File对象中使用一个READ CONTAINER处理，从文件中读回波形数据。

范例

manual范例目录下的程序manual20.vee 演示了怎样使用波形数据。程序工作方式如下：

1. 来自Function Generator的波形数据由To File对象使用WRITE CONTAINER a处理写入wavedata文件中。

2. From File使用READ CONTAINER x处理从wavedata文件中作为波形容器读回数据。数据在X端输出，并通过Waveform（Time）画面显示。

3. 序列端连接保证在From File试图读取波形前把波形先写入文件中。

在比较典型的情况下，一个VEE程序可以把波形数据存储到一个文件中，然后第二个VEE程序可以把数据读回VEE，分析并显示数据。

另请参阅

把数据写入文件中

从文件中读取数据

编辑文件I/O处理

From File

To File


以程序化方式选择一个文件名

如果程序使用From File或To File之类的对象读取或写入数据，可以设置程序，在运行时请求一个文件名。下面的范例使用File Name Selection对话框对象及To File，说明了其工作方式。

1. 添加一个To File对象 (I/O [image] To [image] File)。

2. 点击Clear File At PreRun & Open。双击<Double-Click to Add Transaction>，点击OK。

3. 在To File对象中添加一个File Name控制输入端。(对象菜单 [image] Add Terminal [image] Control Input，点击OK。)

4. 在工作区中添加一个File Name Selection对象 (Data [image] Dialog Box [image] File Name Selection)，把其File Name输出连接到To File对象上的File Name控制端。在Cancel输出中添加一个Stop对象。

5. 把File Name Selection对象的序列输出端连接到To File对象的序列输入端，这可以保证只有在选择一个文件名时，To File对象才会运行。

6. 在File Name Selection对象中，把Select File For字段变成Writing。这可以保证在覆盖现有文件前向用户发出警报。

7. 添加一个Text对象，把它连接到To File的a端。

Windows范例

在运行程序时，出现Enter File Name对话框，提示一个文件名。输入一个新文件名，或点击现有的文件名。在Windows中，把Save as type项变成All Files (*.*)，因为要保存的文件不是一个程序文件。点击Save。

另请参阅

File Name Selection

From File

To File


为电子表格程序存储数据

可以使用VEE文件I/O生成能够通过电子表格程序读取的数据文件，如Microsoft Excel 或Lotus 1-2-3 。通常步骤如下：

1. 确定电子数据表程序要求的数据文件格式，如限定多少行和列？

2. 创建VEE程序，采集数据，然后使用相应的定界符把数据输出到ASCII文本格式的文件中。在正常情况下，To File对象是完成这一操作的最佳方式。

范例

manual范例目录下的程序manual21.vee 演示了怎样采集（或模拟）10V读数，每个读数带有一个时戳，并把数据输出到一个可以通过Microsoft Excel读取的文件中。程序工作方式如下：

1. For Count和Delay对象大约每隔10秒触发下述事件：

a. Counter对象进1。

b. Now对象输出当前时间（精确到1秒范围内），通过To String对象转换成时戳格式。

c. dmm (hp 34401a @ (NOT LIVE))仪器面板模拟来自HP 34401A Multimeter的读数。

2. Build Record对象为每个读数构建一个记录（每隔10秒），具体如下：字段Cnt是计数或测试编号，字段Tm是读数的当前时间（格式为hh:mm:ss），字段Vlts是仪器面板对象返回的模拟电压读数。

3. To File对象把数据写入文本形式的文件中。在WRITE TEXT a.Cnt，" "，a.Tm，" "，a.Vlts EOL处理中：

a.Cnt表示“记录a的字段Cnt” （计数）

" " 插入一个空格（作为一个定界符）

a.Tm表示“记录a的字段Tm” （时间）

" " 插入另一个空格（作为一个定界符）

a.Vlts表示“记录a的字段Vlts” （读数）, 和

EOL 插入行尾序列（回车/换行）。

因此，每个记录转换成字符串格式，并采取下述格式输出（使用空格作为定界符）：

1 11:29:06 5.687753697513882

在程序完成时，文件myfile由10行数据组成，例如：

1 11:29:06 5.687753697513882

2 11:29:16 6.437091378803515

3 11:29:26 7.064658105870967

4 11:29:36 7.439572075814199

5 11:29:46 7.465490768920665

6 11:29:56 7.135229243023529

7 11:30:06 6.53525004955898

8 11:30:16 5.795432812581498

9 11:30:26 6.154398687554457

10 11:30:36 6.844467171462198

在每一行中，第一个字段（计数）后面跟着一个空格（定界符），第二个字段（时间）后面跟着另一个空格，第三个字段（读数）后面跟着行尾序列。

输出文件将是一个Windows ASCII文件，其能够直接读入Microsoft Excel中。从Excel中打开文件，在要求时，告诉Excel文件是采用空格作为定界符的定界文件。

在Excel电子表格中，应出现下述数据：

通过使用相应的定界符，可以创建通过各种电子表格程序读取的文件。

可以使用ActiveX Automation和控件或DDE (动态数据交换)自动完成这一过程。在希望从VEE控制其他应用时，ActiveX比DDE功能更强。如需与使用ActiveX和DDE有关的更多信息，请参阅VEE高级技术。

另请参阅

把数据采集到记录中

Build Record

To DataSet

To File


在UserObject工作区中添加对象

放在UserObject编辑窗口工作区内部的任何对象都会变成UserObject的一部分。使用任何下述方法：

从菜单中选择相应的对象，把对象放在UserObject中。

把对象从Main工作区移动到UserObject。

使用Cut/Copy/Paste把Main工作区中高亮度显示的对象放到UserObject中。

在Main工作区中克隆对象，把克隆的对象移动到UserObject中。

另请参阅

UserObject


在UserObject中添加输入端和输出端

一般来说，可以使用任何其它对象使用的同一技术，在UserObject中添加输入端和输出端。在添加到编辑窗口中时，输入端和输出端还出现在UserObject图标上。

使用对象菜单

从对象菜单中，选择Add Terminal，然后选择希望添加的端的类型：Data Input, Control Input, Data Output,或Error Output。可以使用这种方法，直接在UserObject图标或相关编辑窗口中添加输入端和输出端。

使用鼠标和键盘

为添加数据输入端，把鼠标光标放在数据输入端区域上，按Ctrl+A。每按一下Ctrl+A，会在光标位置上在UserObject中添加一个数据输入端。

为添加数据输出端，把鼠标光标放在数据输出端区域上，按Ctrl+A。每按一下 Ctrl+A，会在光标位置上在UserObject中添加一个数据输出端。

备注

为删除输入端或输出端，把鼠标光标放在输入端或输出端区域上，按Ctrl+D。

另请参阅

UserObject


在程序中创建UserObject

下面的范例一步步地演示了怎样创建简单的UserObject，然后在VEE程序中连接这个UserObject。在理想情况下，在UserObject中一起使用的对象应执行某个特定的任务。

1. 在Main工作区中添加一个UserObject (Device [image] UserObject)，出现UserObject图标。双击图标，打开UserObject编辑窗口。

2. 在UserObject 工作区中添加多个对象，根据需要连接这些对象的各个端。

3. 添加和连接UserObject的输入端和输出端：

a. 把鼠标光标放在UserObject的输入端区域，按Ctrl+A。数据输入端出现在编辑窗口的端区域及UserObject的输入侧。

b. 在编辑窗口中，把输入端的端内部连接到UserObject内部的相应对象上。

c. 把鼠标光标放在 UserObject的输出端区域，按Ctrl+A。数据输出端出现在编辑窗口的端区域及 UserObject的输出侧。

d. 在编辑窗口中，把输出端的端内部连接到 UserObject内部的相应对象上。

e. 在Main Window中，把一个对象连接到UserObject图标上的输入端，把数据发送到UserObject。

f. 在Main Window中，把一个对象连接到UserObject图标上的输出端，从UserObject发送数据。

4. 把UserObject 标题变成描述名称，以便能够在程序中识别UserObject 。在UserObject 编辑窗口中双击标题栏。在Properties Window对话框中，输入一个新标题。

5. 运行程序，测试UserObject。

下例显示了打开UserObject 编辑窗口的程序。

另请参阅

在UserObject中添加输入端和输出端

构建UserObject面板

UserObject


在程序中使用多个对象创建UserObject

在编写好VEE程序后，您可能决定要把部分程序变成一个UserObject。下面的流程使用范例程序，说明了怎样把一个程序中的多个对象转换成一个UserObject。

1. 在手册范例目录下打开程序manual13.vee (Help [image] Open Example...)。这一程序改变一条记录中的多个字段。

2. 选择多个对象：Set Name Field和Set Empl_no Field。

为选择多个对象，按住Ctrl键，然后使用鼠标左键点击每个对象。在选中时，会用阴影高亮度显示这些对象。

3. 在选择完多个对象时，选择Edit [image] Create UserObject。在Create UserObject对话框中，把标题变成Change Record Fields，然后点击OK。

新的UserObject作为图标视图显示在Main Window中，包含到UserObject内部各个对象的所有端连接。另外还会出现UserObject编辑窗口，以便能够作出改动。

4. 运行程序。

下面的范例显示了该程序，其中打开了UserObject编辑窗口。

另请参阅

构建UserObject面板

UserObject


Execution Window

提前退出UserObject

在正常情况下，只有在内部的每个对象执行完时，UserObject (或UserFunction)才会执行完，传播输出端上的数据；但是有两个对象会在UserObject内部所有对象操作完成前使传播强制退出UserObject。

Exit UserObject，在激活时会立即从UserObject上下文退出到其外面的上下文(如Main程序)。

Raise Error生成用户自定义错误信息框，另外会导致传播退出UserObject。(UserObject不输出任何数据，除非有一个Error输出端。)

范例

下面使用范例程序说明怎样使用Exit UserObject：

1. 从手册范例目录中(Help [image] Open Example...)打开manual26.vee 。双击Add Random Number对象，打开UserObject编辑窗口，然后排列Main Window和UserObject编辑窗口，以便能够看到所有对象。

2. 为查看传播顺序，使用工具栏按钮启动Show Data Flow和Show Execution Flow。

3. 运行程序。在Add Random Number中，OK和Cancel按钮在程序运行时都会激活，并暂停UserObject中的执行操作。(Cancel按钮就是OK按钮，只不过变了标题而已) 按这两个按钮会导致下述操作：

OK: UserObject中上面的线程完成传播。A+B对象增加两个输入，结果传播到输出端X，然后激活Exit UserObject。在UserObject退出时，X端上的结果输出到AlphaNumeric显示画面上。

Cancel: 下面线程中的Exit UserObject操作。这会导致在没有传播完上面的线程的情况下退出UserObject。不输出任何数据。

另请参阅

Exit UserObject

Raise Error

UserObject


创建和使用UserObject库

可以把一个或多个UserObject保存在一个文件中，以便在其它程序中重新使用。

创建UserObject库

1. 在工作区中创建一个或多个UserObject。

2. 选择一个或多个UserObject。

3. 选择File [image] Save Objects。系统会提示输入一个文件名保存UserObject。

使用UserObject库

1. 选择File [image] Merge，系统会提示输入文件名。

2. 为库选择选择文件名。文件中的UserObject合并到工作区中。把它们放在程序中希望的位置。

另请参阅

在UserObject工作区中添加对象

在UserObject中添加输入端和输出端

在程序中创建UserObject

在程序中使用多个对象创建UserObject


保护UserObject安全

在UserObject设计的最后阶段，您可能想保存安全版本的程序。然后可以让别人在程序中添加UserObject，同时防止别人查看其内容或改变UserObject。这对原来的UserObject没有负面影响。

1. 在UserObject编辑窗口中，从对象菜单中选择Save Secured Version。

2. 系统将提示您输入一个文件名，保存安全版本的UserObject。输入一个描述性的文件名。文件名中将自动增加.vee扩展名。.

3. 点击Save。

如果想在程序中使用安全版本的UserObject，使用File [image] Merge。系统将提示输入文件名。

技巧

如果UserObject没有面板视图，安全版本将显示为图标。图标可以恢复成open view，但不能查看内部细节 (端除外)。任何人都不能查看或编辑其内容。

如果UserObject有一个面板视图，那么安全版本将显示为图标。图标可以恢复成open view，但只能看到面板视图及其端。看不到细节视图，不能修改面板视图。


在程序中使用多个对象创建UserFunction

在编写好VEE程序后，您可能决定要把部分程序变成一个UserFunction。下面的流程使用范例程序，说明了怎样把一个程序中的多个对象转换成一个UserFunction。

1. 在手册范例目录下打开程序manual13.vee (Help [image] Open Example...)。这一程序改变一条记录中的多个字段。

2. 选择多个对象：Set Name Field和Set Empl_no Field。

为选择多个对象，按住Ctrl键，然后使用鼠标左键点击每个对象。在选中时，会用阴影高亮度显示这些对象。

3. 在选择完多个对象时，选择Edit [image] Create UserFunctio。在Create UserFunction对话框中，把标题变成ChangeRecordFields，然后点击OK。UserFunction标题中不能包含空格。

程序中发生两个变化。多个对象被采集到新的UserFunction中，出现在UserFunction编辑窗口中，以便能够作出改动。Call对象出现在Main Window中。它保留所有端连接。

4. 运行程序，测试UserFunction。

下面的范例显示了该程序，其中打开了UserFunction编辑窗口，且open view中包括Call对象。

另请参阅

构建UserFunction面板

在程序中调用UserFunction

在程序中创建UserFunction

编辑UserFunction

UserFunction


编辑UserFunction

编辑UserFunction之前，必须先打开包含这个 UserFunction 的VEE程序，然后就可以在UserFunction的编辑窗口进行编辑了。

编辑 UserFunction

1. 打开包含要编辑的UserFunction的VEE程序。

2. 选择 Edit [image] Edit UserFunction打开Edit UserFunction对话框，该对话框会列出程序中包含的所有UserFunction。

3. 选择要编辑的UserFunction的名字并单击 OK 按钮，打开UserFunction 编辑窗口。

4. 在编辑窗口中编辑。

5. 关闭编辑窗口。对UserFunction所做的任何改变会影响所有对该UserFunction的调用。

快捷键

将鼠标指针移动到工作区的空白处，单击鼠标右键可以打开Edit UserFunction对话框。

从Call对象的上下文菜单中选择 Edit UserFunction 可以打开被调用的Edit UserFunction的编辑框.

在Program Explorer中双击UserFunction的名字可以打开它的编辑窗口。

另请参阅

在程序中调用UserFunction，在程序中创建UserFunction， 在程序中从对象创建UserFunction，UserFunction，从表达式中调用UserFunction，创建UserFunction程序库


在程序中调用UserFunction

一旦已经创建了UserFunction，那么可以在VEE程序内部多次调用UserFunction。本节使用范例程序说明了怎样调用UserFunctions。

打开manual范例目录下(Help [image] Open Example...)的manual51.vee程序。这个程序包含着RandomArray UserFunction，调用这个函数三次：

Call对象调用RandomArray，输出返回的数组。

Formula对象在表达式1+RandomArray()中调用RandomArray。表达式对返回数组的每个要素加1。

To File对象在WRITE CONTAINER RandomArray()处理中调用RandomArray。这一处理把RandomArray返回的数组作为容器写入文件myFile中。From File对象读取数据文件，把结果发送到显示屏。

技巧

可以在程序内部多次调用RandomArray UserFunction。

每次调用UserFunction都是独立的。(在本例中，每次调用RandomArray会生成一套不同的随机数字。)

在Call对象中，指定要调用的函数名称(例如：RandomArray)。但是，如果从表达式中调用UserFunction，那么必须使用表达式语法，如：RandomArray()。

UserFunction名称不分大小写。

UserFunction名称必须是唯一的。

可以从使用表达式的对象中调用UserFunction名称，如If/Then/Else, To File和Sequencer对象。

另请参阅

在程序中创建UserFunction

在程序中使用多个对象创建UserFunction

编辑UserFunction

UserFunction


从表达式中调用UserFunction

可以从Formula对象中的表达式或在运行时评估的任何表达式中调用UserFunction，如从ToFile对象中。这一程序演示了调用UserFunction的几种方式。

在程序中，Call对象调用UserFunction noiseUF，返回一个增加了噪声成分的正弦波。第一个Formula对象中的表达式abs(noiseUF(Y))返回由UserFunction返回的绝对值。因此，在正方向上矫正显示的有噪声的正弦波。

第二个Formula对象中的表达式abs(noiseUF(Y))-1.5也调用UserFunction，但在波形中增加了一个负的DC偏置。使用序列端，保证正确传播，因为UserFunction使用全局变量。

这个程序保存在范例目录下的manual43.vee 文件中。


UserObjects和UserFunctions之间的转换

为把UserObject转换成UserFunction，从UserObject的对象菜单中选择Make UserFunction。UserFunction窗口会代替UserObject窗口，但输入端和输出端相同。UserFunction Call对象会代替UserObject对象。

为把UserFunction重新转换回到UserObject，从UserFunction窗口的对象菜单中选择Make UserObject。任何UserFunction调用操作保持不变 (必须手动删除它们)，但UserFunction会自动转换成UserObject。


定制VEE菜单

可以在VEE开发环境中定制菜单。customMenu.mnu文件解释了对希望频繁使用的特定对象和函数怎样在菜单中添加菜单项。它还解释了怎样使用新的内置函数help()，在开发的程序的自定义Help标题中添加链接。

customMenu.mnu文件位于lib中的VEE安装目录下，可以在ASCII文本编辑器中打开这个文件。

另请参阅

help()


使用函数库

创建每种用户自定义函数及在VEE程序中使用这些函数的方法类似。所有这些函数都使用Call对象或从特定表达式中调用，如Sequencer或Formula对象中。可以使用库中三种用户自定义函数中的任何一种函数。采取下述步骤，使用函数库：

1 导入库。

使用Device [image] Import Library对象。选择Library Type (UserFunction, Compiled Function或Remote Function)，填写相应的字段。本章相关小节中介绍了与这些字段有关的具体信息。

2 调用库中包含的一个或多个函数。

从Device菜单中使用Call, Formula或Sequencer对象。还可以使用在运行时调用表达式的其它对象，如If/Then/Else或To File。如果想从函数中返回多个值，那么必须使用Call对象。

3 删除库。

如果担心内存管理或程序执行，使用Device [image] Delete Library对象，以程序化方式从内存中释放库。否则，在VEE退出时会自动删除库。

能够从表达式中调用UserFunction非常有用，特别是在Sequencer对象的事务中包括此类表达式时。如需相关信息，参阅Help => Contents and Index => How do I => Use Sequencer Objects。

另请参阅

创建UserFunction库，关于Compiled Functions，关于Remote Functions


创建UserFunction程序库

除在同一个程序内部创建和使用的局部UserFunctions外，还可以创建在外部存储、以后再导入到程序中的多个UserFunctions组成的程序库。

为创建UserFunction程序库，在VEE空工作区中创建多个UserFunction，然后把它们保存到一个文件中。例如，为创建由两个UserFunction--myRand1和myRand2组成的程序库 (在输入值中增加随机数字)，可以创建两个UserFunction，具体如下：

为创建UserFunction程序库，使用标识其为程序库的名称保存程序。例如，使用扩展名.vlb，而不是.vee。

备注

正常情况下，程序只应包含UserFunction。如果程序中有其它对象(如在Main中)，那么在导入程序库时会忽略这些对象。如果使用Declare Variable对象，把它们放在其中一个UserFunction中，而不是程序库的Main窗口中。


导入和调用UserFunction

为把UserFunction库导入程序中，使用Import Library对象。下面的程序从文件user_func_lib中导入库，调用UserFunction myRand1和myRand2。

Import Library对象允许指定库的类型：User Function, Compiled Function或Remote Function。如果选择UserFunction，还可以指定Library Name和File Name。

Library Name字段为程序内部的库指定一个局部名称。这使得Delete Library对象可以从程序中删除库。在本例中，Import Library把名称myLib附到从文件user_func_lib导入的库中。

File Name字段指定从中导入库的文件，在本例中是user_func_lib。如果点击File Name字段，可以从由所有库文件组成的列表中选择文件。

这个程序非常简单，因此不需在使用后删除UserFunction库。在调用大型库的大型程序中，在不需要时删除库可以降低程序的内存要求。

备注

不能编辑使用Device [image] Import Library导入的UserFunction，但可以查看其内容，设置调试断点。为查看导入的UserFunction，使用Program Explorer。

可以使用File [image] Merge Library 合并UserFunction库。一旦库被合并到程序中，可以使用Edit [image] Edit UserFunction编辑各个UserFunction。


使用Compiled Function

为使用Compiled Function，采取下述步骤：

1 编写外部程序。

2 创建DLL和一个定义文件。

3 导入库，从VEE中调用函数。

4 在完成时从VEE内存中删除库。

导入Compiled Function库及调用函数的方法与UserFunction库非常类似。Import Library对象把DLL附在VEE流程中，解析定义文件说明。

定义文件定义外部库和VEE之间传送的数据类型。(本部分后面讨论了这个文件。) 然后可以使用Call对象或从Formula和If/Then/Else之类的对象中调用Compiled Function。


构建 C 函数

下面的C函数接受实数组，对数组中的每个要素加1。修改后的数组返回到Array端上的VEE，数组尺寸返回到Ret Value端上。一旦连接到VEE，这个函数会变成Compiled Function，在VEE程序中可以通过下述方式调用这个函数。

/*

C code from manual49.c file

*/

#include <stdlib.h>

#ifdef WIN32

# define DLLEXPORT __declspec(dllexport)

#else

# define DLLEXPORT

#endif

/* The description will show up on the Program Explorer when you select "Show Description" from the object menu and the Function Selection dialog box in the small window on the bottom of the box.

*/

DLLEXPORT char myFunc_desc[] = "This function adds 1.0 to the array passed in";

DLLEXPORT long myFunc(long arraySize, double *array) {

long i;

for (i = 0; i < arraySize; i++, array++) { *array += 1.0; }

return(arraySize);

}

这一函数文件的定义是：

/*

definition file for manual49.c

*/

long myFunc(long arraySize, double *array);

(这一定义与C文件中的ANSI C原型定义相同。)

必须包括例行程序依赖的任何标题文件。程序库应链接解析其调用的系统功能所需的任何其它系统程序库。

程序范例采用ANSI C函数原型。函数原型说明VEE应传送到函数中的数据类型。

数组已经说明为指针变量。VEE将端中把Call数据上出现的信息地址放到这个变量中。数组尺寸已经说明为长整数。VEE将把数组尺寸值(而不是地址)放到这个变量中。数据输入端和变量说明的位置非常重要。为数据输入端(从上到下)提供的数据项目(或其值)的地址从左到右放到函数原型的变量中。

C函数(及相应的Call对象中的一个数据输入端)中的一个变量用来指明数组尺寸。arraySize变量用来防止把数据写入数组末尾以后。如果超出数组边界，那么结果取决于用户使用的语言。在执行边界检查的Pascal语言中，会发生运行时错误，停止VEE。在没有边界检查的C语言中，结果会变得不可预测，但可能会出现间歇性数据损坏。

这个范例把指针传送到数组，因此在使用信息前，必需先解除参考数据。

取值已经传送arraySize变量，因此没有显示为数据输出端。但是，我们在这里一直使用该函数的返回值，把输出数组的尺寸返回给VEE。这种技术适用于用户需要返回的数组要素少于输入数组要素的情况。

下面的程序调用C程序范例创建的Compiled Function：

上面的范例保存在范例目录下的 manual49.vee 文件中．Ｃ文件保存为manual49.c,定义文件保存为manual49.h,共亨程序库保存为manual49.sl．


创建动态链接库

VEE通过Call对象和Formula对象存取DLL。

备注

本节介绍了怎样调用DLL、而不是怎样编写DLL。VEE 3.2版及更高版本只能调用32位DLL，不能调用16位DLL。

创建DLL

在编写VEE程序前创建DLL。创建DLL的方式与任何其它DLL的创建方式相同，但其只支持C类型的一个子集。(参阅创建定义文件。)

说明DLL函数 如果使用Microsoft Visual C++ 2.0版或更高版本，函数定义应该是：

   __declspec(dllexport) long myFunc (...);

这个定义不需要使用.DEF文件从DLL中导出函数。使用下面的命令行，汇编和链接DLL：

   cl /DWIN32 $file.c /LD

/LD 创建一个DLL。使用/Zi生成调试信息。

MS链接程序在默认状态下链接到C多线程运行时程序库。如果使用GetComputerName()等函数，您需要链接Kernel32.lib。汇编/链接行类似于：

cl /DWIN32 file.c /LD /link Kernel32.lib

说明DLL函数 为处理VEE，可以使用Microsoft C++ 2.0版或更高版本，把DLL函数说明为__declspec(dllexport)，而不需要使用.DEF文件。例如，可以创建下面的通用函数：

__declspec(dllexport) long genericFunc(long a) {return (a*2); }

如果不使用Microsoft Visual C++，那么.DEF文件中包含：

EXPORTS genericFunc

函数定义类似于：

long genericFunc(long a);

创建Definition文件 Definition 文件包含由导入的函数原型组成的列表。VEE使用这个文件配置Call对象，确定怎样把参数传送到DLL函数。这些原型的格式是：

<return type> <modifier> <function name> (<type> <paramname>, <type> <paramname>, ...) ;

其中：

• <return type> 可以是：int, short, long, float, double, char*, 或空。

• <function name> 可以是后面跟着多个字母数字字符的一个字母字符，最多总计512个字符。

• <modifier> 可以是 _cdecl, _pascal, 或 _stdcall。

• <type> 可以是: int, short, long, float double, int*, char*, short*, long*, float*, double*, char**, 或空。

• <paramname>可以是后面跟着多个字母数字字符的一个字母字符，最多总计512个字符。参数名称是可选的，但建议使用参数名称。如果将参照传递参数，那么参数名称前面必须有间接符号 (*)。

例如：

传递4个参数，返回一个长型数：

long aFunc(double *,long param2,long *param3, char *);

没有输入参数，返回一个双型数：

double aFunc();

传递一个字符串，返回一个长型数：

long aFunc(char *aString);

传递一个字符串数组，返回一个长型数：

long aFunc(char **aString);

参数限制

从VEE中调用的DLL函数在堆栈上推送最多144个字节。这限制了函数使用的参数数量。只要不超过144字节限制，就可以使用任意参数组合。一个长型数使用4个字节，一个双型数使用8个字节，一个指针使用4个字节。例如，一个函数可以有36个长型数、或18个双型数、或20个指针和8个双型数。

Import Library对象

在使用Call对象或Formula框执行DLL函数前，必须通过Import Library对象把函数导入到VEE环境中。在Import Library对象上，在Library Type下选择Compiled Function。使用Definition File按钮输入正确的定义文件名。最后，使用File Name按钮选择正确的文件。Library Name按钮会为函数集指配一个逻辑名称，不需改动。

Call对象

在与Call对象使用DLL函数前，必须配置Call对象。最简便的方式是在Import Library对象菜单上选择Load Lib，把DLL文件加载到VEE环境中。然后在Call对象菜单中选择Select Function。

VEE将出现一个对话框，其中包括定义文件中列明的所有函数的列表。在选择一个函数时，VEE会使用正确的输入和输出端及函数名称自动配置Call对象。

通过修改函数名称，增加相应的输入和输出端，还可以手动配置Call对象：

1 在有多个参数传递到函数时，配置相同数量的输入端。最上面的输入端是传递到函数的第一个参数。从上面数第二个端是第二个参数，依此类推。

2 配置输出端，使参考传递的参数作为输出端出现在Call对象上。按值传递的参数不能指配为输出端。最上面的输出端是函数返回的值。从上面数第二个输出是参考传递的第一个参数，依此类推。

3 在Function Name字段中输入正确的DLL函数名称。

例如，对下述定义的DLL函数：

long foo(double *x, double y, long *z);

对x, y和z需要三个输入端，另外需要三个输出端，一个输出端用于返回值，两个输出端用于x和z。Function Name字段将包含foo。如果输入和输出端数量与函数中的参数数量不完全匹配，那么VEE会生成错误。

如果DLL程序库已经加载，并在Function Name字段中输入函数名称，那么您也可以使用Call对象菜单上的Configure Pinout选项，配置端。

Delete Library对象

如果您的程序非常大，您可能希望在使用完之后删除程序库。Delete Library对象与Import Library对象菜单上的Delete Lib选项一样，从内存中删除程序库。


使用动态链接库

在PC上，可以作为VEE程序的一部分，使用从动态链接库(DLL)中汇编的函数。DLL可以是自己编写的汇编的函数(编写DLL的相关文档请与微软联系)，也可以是购买的或从网上下载的DLL。

备注

VEE同时支持"_cdecl"和"_stdcall"调用协议。客户编写的大多数DLL采用_cdec1调用协议。大多数Win32 API调用采用_stdcall。VEE同时支持这两种命名约定，因此您可以使用市面上最流行的DLL及自己的DLL。

把DLL集成到Agilent VEE程序中

本节介绍了怎样把DLL导入VEE程序中。如上所述编写或获得DLL，然后根据下述步骤使用DLL：

1 选择Device [image] Import Library。

Library Type包括三个选项：UserFunction, Compiled Function, 和Remote Function。把Library Type字段变成Compiled Function (默认值是UserFunction)。对Compiled Function，Import Library对象包括一个Definition File使用的字段，具体如下。

下面介绍了各个字段：

备注

通过从对象菜单中选择Load Lib，还可以在开发过程中手动加载一个库。

2 选择Device [image] Call。

在使用Import Library 导入库时，选择Device [image] Call，创建一个Call对象。然后可以从 Call对象菜单中选择Select Function，从出现的列表框中选择希望的函数，调用Compiled Function。例如，下图显示的Call对象使用参数arraySize和array调用myLibrary中名为myFunction的Compiled Function。

VEE为Call对象自动配置函数名称及正确数量的输入端和输出端。第二个、第三个...输出端映射到参考传递到函数的任何参数。如果已经输入了函数名称，通过在对象菜单中选择Configure Pinout，也可以配置对象。

备注

还可以从表达式字段中调用DLL函数，只要已经加载了库。在采用这种方式时，必须把参数放在函数名称后面的圆括号内，函数只发回返回值。参考传递的任何参数只能使用Call对象检索。例如，可以在Formula对象中使用下面的表达式：

2 * yourFunc(a,b)

a 和b是指Formula对象上的两个输入端，yourFunc的返回值将乘以2，放在输出端。

3 (可选) 点击Device [image] Delete Library。

在开发程序时，还可以从对象菜单中选择Delete Lib，以程序化方式删除库。在程序中使用完毕后删除库可以降低加载时间，节约内存。

使用DLL的实例

在本练习中，您将导入一个DLL，从DLL中调用一个函数。使用的DLL是Windows上的VEE产品中自带的DLL。(同一程序是为在所有平台上工作而设计的。)

打开manual49.vee文件，其位置是：

<installation directory>\EXAMPLES\MANUAL\MANUAL49.

仔细查看这一实例。

上述程序的要素包括：

运行程序，注意第一个轨迹在波形所有点上都比第一条轨迹大1。

程序中另一个应注意的要点是使其能够移植到所有VEE平台使用的方法。Windows 98, Windows 2000, Windows NT 4.0和Windows XP采用Microsoft 32位汇编程序。这些DLL都使用*.dll扩展名指明。

称为Shared Library Name的UserObject识别使用的操作系统，然后把正确的库名传送到Import Library对象，如下图所示。

重命名的Formula对象一直使用whichos()函数，识别操作系统。扩展的If/Then/Else对象检查whichos()函数的输出，然后触发相应的文本常数。然后这个文件名扩展名被增加到使用重命令的Formula对象的MANUAL49文件中。(标为共享库的Formula对象上的输入终端也被变为扩展名)

File Name控制端已经被增加到Import Library对象中，因此在UserObject和Import Library之间有一条虚线。

备注

考察在混合环境中共享数据使用的To/From Socket，如把数据发送到数据库中。此外，Battleship和Euchre游戏实例都全面使用套接字在多个VEE流程之间通信。

在公式对象中使用DLL函数

还可以在公式对象中使用DLL函数。在公式对象中，只有返回值用于公式中。不能存取参考传递的参数。例如，上面定义的DLL函数是一个公式：

4.5 + foo(a, b, c) * 10

其中a是公式对象最上面的输入终端，b是第二个输入终端，c是最后一个输入终端。foo调用必须有正确数量的参数，否则VEE会生成错误信息。


导入和调用Compiled Function

可以使用Import Library对象把DLL导入到VEE程序中，然后使用Call对象调用Compiled Function。这个过程与导入UserFunctions库和调用函数非常类似。

为导入Compiled Function库，在Library Type字段中选择Compiled Function。

与UserFunction一样，Library Name字段附上一个名称，在程序内部识别库，File Name字段指明导入库的文件。对Compiled Function，有第四个字段，指明Definition File的名称，具体如下。

定义文件定义了在外部例程和VEE之间传送的数据类型。它包含着函数原型。

在使用Import Library导入库以后，可以在Call对象中指定函数名称，调用Compiled Function。例如，Call对象调用名为myFunction的Compiled Function。

从Call对象菜单中或从Function & Object Browser (在Device [image] Function & Object Browser)中使用Select Function选择希望的函数，或在Call对象中输入函数名称。

如果VEE识别函数，那么将为该函数自动配置Call对象的输入端和输出端。(由定义文件提供必要的信息。) 通过在对象菜单中选择Configure Pinout，可以重新配置Call输入端和输出端。

VEE为Call对象配置函数要求的输入端及函数返回值要求的Ret Value输出端。还有一个输出端，与其参考传送的每个输入相对应。

还可以从Formula对象的表达式中，或从运行时求解的其它表达式中，按名称调用Compiled Function。例如，通过在Sequencer或ToFile处理的表达式中包括其名称，可以调用Compiled Function。

但是，只能从表达式内部获得Compiled Function的返回值(Call对象中的Ret Value)。如果想从函数中获得其它参数，必须使用Call对象。

另请参阅

定义文件


在大型程序中查找函数

VEE在Edit菜单下提供了Find功能，帮助您在大型程序中定位对象和文本。例如，在Examples\Games目录下打开Solitaire.vee程序，进入细节视图，点击Edit [image] Find...，显示对话框。

如图所示，输入makeamove (Solitaire.vee程序中的一个UserFunction)，点击Find。VEE自动定位名为makeamove的UserFunction，显示它是从程序的哪个部分调用的。

可以使用Find定位任何对象或文本，如变量、标题、对象设置等等。双击Find Results对话框中的任何一行，可以定位一个对象。

备注

通过把鼠标指针放在Program Explorer中的对象上，点击鼠标右键，也可以使用Find功能。这将把搜索范围限于特定的UserFunction或UserObject。

另请参阅

实验9-1: UserFunction操作，实验9-2: 创建和合并UserFunction库，实验9-3: 导入和删除库，实验9-4: 合并柱状图显示程序，合并Agilent VEE程序


什么是面板？

面板视图（也叫做面板）是程序的用户界面。一般是在完成程序的功能部分之后会创建面板视图。详细视图（您的开发区域）和面板板视图是同一个程序在主视窗内出现的两个视图，就像同一个硬币的正反面一样。一般只将画面和数据输入对象复制到面板。只显示对象本身（而不是线或端）。可以在任一视图中运行您的程序。

在为您的程序创建完一个面板视图，程序也可以在VEE 工作区内的一个单独的执行窗口中运行。执行窗口使用您为面板视图设定的所有设置运行您的程序。您可以利用Main 窗口属性Show On Execute来控制执行窗口的使用。执行窗口可以让您同时观察程序细节和面板视图，并且显示出所完成的程序在VEE RunTime中的运行状况。当执行窗口为打开状态时，只有一小部分菜单项是可用的，这样可以防止程序被修改。无论如何，保护程序安全并在VEE RunTime里运行它，通常是交付给您的用户一个完成程序的最好方式。下面的三张图片显示了一个暂停的程序，分别显示它的详细视图，相应的面板视图和执行窗口当中。

细节视图

相应的面板视图

执行窗口

VEE具有三种面板类型，其创建、修改和使用方法类似：

Main Panel - 与主上下文有关的面板。如果对象在主工作区内，您可以选择并把它加入到Main面板。要创建Main面板，请参阅 在面板中添加对象和 从面板中删除对象。

UserObject Panel - 每个UserObject 可以有自己的面板。这个面板可以在它自己上面使用或者加到其它面板上，包括Main面板。在UserObject 运行时并且Show Panel on Execute属性为选中状态，此面板可以始终可见或随时弹出（像对话框一样）。创建UserObject面板的详情请参阅 构建UserObject面板。

 UserFunction Panel - 每个UserFunction 可以有自己的面板（就象UserObject）。这个面板可以在UserFunction运行时并且Show Panel on Execute属性为选中状态时弹出，或者在通过showPanel()函数调用方法来指定时弹出。创建UserFunction面板的详情请参阅 构建UserFunction面板。


在面板中添加对象

Main Panel是用户界面的基础。不管构建哪类面板，都使用与构建 Main Panel时相同的技术。

1. 把对象放在Open View中。在大多数情况下，您希望Open View位于面板上；一旦对象位于面板上，那么不能最小化对象或打开对象。

2. 选择希望添加到面板中的对象。按住CTRL，同时在每个对象上点击鼠标左键，或者按下鼠标键，拖动一个选择框以包括多个对象，可以选择多个对象。

3. 点击工具条上的Add to Panel按钮(或使用Edit [image] Add To Panel)。

Add to Panel按钮

现在在Main Window中会看到程序的Panel View。按 Main Window标题栏左侧的Panel按钮和Detail按钮，可以在Panel View和Detail View之间切换。当希望在面板中添加其它对象时，从Detail View开始，采取上述步骤。

备注

尽管在Detail或Panel View中可以确定Main Window大小，但Panel View中没有滚动条。在添加到面板中时，从Detail View中选择的对象被放在相对相同的位置，并移动到适应Panel View。如果重新确定窗口大小，您可能需要重新定位Panel View对象。

另请参阅

实验11-1: 使用菜单

实验11-3: 创建高冲击力警报


从面板中删除多个对象

1. 确保位于Panel View中。

2. 删除对象。从对象的对象菜单中选择Delete。

这个对象仍保留在Detail View中，但会从Panel View中删除。

如果从Detail View中删除(Cut)对象，会从Panel View中自动删除这个对象。

备注

如果在Detail View上Cut、然后Paste对象，将删除任何相关的Panel View对象，必须再次在面板中添加对象。这时应使用Copy和Paste。

备注

在运行程序时，Detail View和Panel View及执行窗口中不允许某些对象菜单操作，如Delete。必须先暂停或停止程序。


改变面板外观

一般来说，Panel View上的对象外观与Detail View上的外观没有链接。例如，如果在Panel View上改变对象的颜色，它不会改变Detail View上的相关对象的颜色(反之亦然)。但是，显示的数据和其它执行相关信息是链接的；如果在一个视图中改变这些数据和信息，在另一个视图中也会随之改变。下次运行程序时，Panel View中的变化会出现在执行窗口中。

在Panel View或Detail View上的对象继承Default Preferences中设置的默认属性时(即还没有改变对象的颜色或字体属性)，在系统默认值变化时，这些属性会变化。这些值在Panel和Detail之间仍没有链接。例如，Panel上的对象可以设置成金色，而Detail上的颜色仍保持默认值，反之亦然。

面板和细节视图之间没有链接的属性

Show Title Bar (如果对象显示在打开视图中)

Layout组属性：

Horizontal

Vertical

Show Digital Display

Show Tic Marks

Rectangular

Circular

Show Digital Display

Show 3-D Border

Scaled

Show Caption

Show Traces Legend

Show Scales Legend

Show Scale Labels

Show Scroll Bars

Show Auto Scale Button

Enable Trace/Scale Editing

Grid Type

Markers

Color属性：所有颜色

Font属性：所有字体

Traces: 除轨迹名称之外的所有属性

Scales: 所有属性

Label Justification属性

Editing Enabled属性(在Note Pad对象上)

Format属性：

Radio Buttons | Cyclic Button | List | Drop-Down List | Pop-Up List | Slider List

Button | Check Box | Vertical Paddle | Horizontal Paddle | Vertical Rocker | Horizontal Rocker | Vertical Slide | Horizontal Slide

Limits类别属性：

High Color

Mid Color

Low Color

Sub-Range Configuration类别属性：

Colors

Icon appearance类别一栏属性：

Picture文件和显示模式

Show Title

Layout类别属性 (只适用于Panel View)：

Size & Position (X, Y, Width, Height)

Border

所有其它属性在Panel View和Detail View之间是链接的(一个视图中的变化会同时改变两个视图)。


改变对象的边框外观

在Panel View中，通过指定边框选项，可以改变对象的深度外观。

1. 从对象菜单中选择Properties。

2. 进入Appearance类别。

3. 选择Border选项：None, Flat, Sunken或Raised。

下图显示了不同边框样式的外观。

边框样式

备注：在边框设为None时

在对象的边框设为None时，且颜色与背景颜色相匹配时，对象的颜色扩展到边框所在的位置。在移动或确定对象大小时，或如果改变对象的颜色，可以看到边框的位置。

不管边框设置如何，对象的大小不变。例如，如果已经确定OK对象的大小，且没有边框，然后选择有一个边框，那么边框可能会挡住部分对象文本。在下图中，两个对象的大小相同。左面的对象Border设为None，右面的对象Border设为Flat。

边框宽度范例

Copyright (c) 1991-2007 Agilent Technologies, Inc.


标注区域

如果想在面板上的区域中添加文本，使用Label对象。

1. 从Detail View中，选择Display [image] Label。

2. 从Label对象的对象菜单中，选择Properties。

3. 把标题变成所需的标注文本。

4. 选择Label对象，选择Edit [image] Add To Panel。把标注放在希望的地方。

在默认状态下，Label对象颜色捆绑到默认的Panel View颜色(从File [image] Default Preferences中设置)，以便标注背景融合到Panel View中，而不出现明显的色彩偏差。

可以使用Properties窗口改变标题文本，从Detail或Panel View中改变标注文本，也可以添加一个数据输入端，在运行时以程序化方式改变标注文本。还可以使用Properties窗口指定Left, Right或Center对齐方式，来改变文本对齐方式。


对准对象

在Panel View中添加对象时，其左上角自动与用户可以定义的栅格对准，但对象大小不变。在Panel View上移动对象时，其左上角与最近的栅格棘爪对齐。为根据栅格重新确定对象大小，把光标移到对象的右下角，出现拐角缩放光标，点击光标。如果拐角缩放光标使用困难，那么可以使用对象菜单上的Size。

可以通过几种方式对准对象：

1. 选择对象，使用Edit [image] Align或Distribute。

2. 选择多个对象，在Properties窗口中，可以设置所有对象的大小。


改变网格大小

1. 从Main Window的对象菜单中，选择Properties。

2. 选择Panel类别。

3. 设置PanelGridSize，最小的网格是2。

4. 把PaneDrawGrid变成True，查看网格。

在改变网格大小时，面板上的现有对象不会自动与网格对齐。在点击一个对象时，其左上角与最近的网格定位器对齐。在点击拐角调整区域时，对象把大小调整到最近的网格定位器。任何Move或Size都会把对象与当前网格大小对齐。

按住Shift键，同时点击移动和确定对象大小，可以在网格之外移动和确定对象的大小。

备注

每个面板都有自己的网格。为改变UserObject或UserFunction网格上的网格大小，从对象菜单中选择Properties，然后采用上述步骤。


匹配对象大小

您可能希望在Panel View中把一个对象的大小与另一个对象的大小匹配起来。

有多种方式进行匹配：

1. Open View [image] Properties。选择所有对象。在Properties窗口中，在Layout类下，设置大小值。

2. 选择所有对象。把光标移到一个对象的右下方，直到出现大小光标(有两个头的箭头)。按住CTRL键，同时按下鼠标左键。把所有对象大小拖到希望大小。如果大小与预期不符，使用Undo撤销操作。


在面板中添加图片

有两种方式在Panel View中添加图形图像，如位图。这些方法可以参阅Main Window，还可以与UserObjects和UserFunctions一起使用。

在Panel View背景中直接添加图像

为使用这种方法，Panel View必须已经存在。创建空白Panel View的快捷方式是点击Main Window对象菜单上的Create Panel。

1. 从Main Window的对象菜单中，选择Properties。

2. 转到Panel类别，这一栏在创建Panel View后出现。

3. 选择Panel BackgroundPicture，选择文件。

4. 选择显示模式：Actual, Centered, Scaled, 或Tiled。参阅下面的图片显示模式。

5. 点击OK。

把一个或多个可移动、可确定大小的图像放在Panel View上

1. 从Detail View中，选择Display [image] Picture。Main工作区中出现Picture对象。

2. 从Picture的对象菜单中，选择Properties。

3. 选择一个Picture文件。

4. 选择显示模式：Actual, Centered, Scaled, 或Tiled。参阅下面的图片显示模式。

5. 点击OK。

6. 选择Picture对象。

7. 选择Edit [image] Add To Panel。

技巧

通过在Picture对象中添加一个数据输入端，可以以程序化方式在Panel View上改变图像。

目前支持的图像格式如下：

位图 (*.BMP)

GIF87a (*.GIF)

Windows MetaFile (*.WMF)

可移值网络图像 (*.PNG)

图片显示模式

Actual - 按实际大小显示图片。重新确定对象或面板大小，以与图片大小相一致。

Centered - 按实际大小显示图片。图片在对象或面板上居中 (大小不变)。

Scaled - 图片缩放到对象或面板的当前大小。在选择这一选项后，缩放可能需要一段时间。

Tiled - 图片保持实际大小，但在水平方向和垂直方向重复，直到填充整个对象或面板。

下图显示了不同的显示模式。

具有不同显示模式的Picture对象

备注

为提高执行速度，VEE高速缓存图形图像。如果已经把图像加载到VEE中，然后改变包含图像的文件，那么您必需选择一个不同的图像文件，然后重新选择原始图像文件。一旦完成这一操作，将使用新的图像。

另请参阅：实验11-2: 为面板背景导入位图


什么是UserObject Panel?

UserObject Panel与Main Window的Panel非常类似。每个UserObject Panel都有自己的上下文，因此都有自己的Trig Mode和Edit菜单及自己的Panel View。UserObject Panel的显示方式要比Main Panel灵活。

有三种方式显示UserObject Panel

Independent Panel: UserObject上的Panel。

在希望把自己的UserObject与别人的UserObject捆绑在一起，以简化别人使用的程序部分，而又不需构建Main Panel时，可以使用这种方法。

Pop-Up Panel: UserObject上指定Show Panel on Execute的面板。

这种方法通常用于查询信息、然后消失的自定义对话框。这类面板在VEE窗口中的任何地方弹出。

Main Panel上的Panel: UserObject上的面板，然后添加到Main Panel中。

这种方法用来对功能分组。也可以把面板嵌套在其它面板上。

下图显示了不同类型的UserObject Panel。

有三种方式显示UserObject Panel

Copyright (c) 1991-2007 Agilent Technologies, Inc.


构建UserObject面板

1. 在UserObject的编辑窗口中，按Ctrl，然后在对象上按鼠标左键，选择对象。

备注
放在UserObject面板中的对象必须位于UserObject的Detail View中。不能从UserObject边界以外或从嵌套的UserObjects中选择对象。

2. 从UserObject's Edit菜单中，选择Add To Panel。

现在您已经创建了一个独立于Main Panel的UserObject Panel View。通过按编辑窗口标题栏左侧的Panel按钮和Detail按钮，在Panel View和Detail View之间切换。在任何时候想在UserObject面板中添加其它对象时，从Detail View开始，遵守上面的步骤。


构建弹出面板

一旦已经创建了UserObject Panel，可以采取下述步骤，在UserObject执行时弹出面板：

1. 从UserObject的对象菜单中，选择Properties。

2. 在Pop-Up Panel类别中，把ShowPanelOnExecute设为True。

3. 点击OK。

在程序运行及UserObject执行时，UserObject Panel弹出，在Main Window的Detail View和Panel View (如有)都可以看到面板。如果Main Window属性ShowPanelOnExecute启动，那么UserObject Panel只在Execution Window中弹出。

备注

为改变弹出面板的外观，在Properties窗口的 Pop-Up Panel类别中，设置ShowPopUpPanelTitle和ShowPopUpPanel Border属性。

为改变Panel View的背景颜色，在在 Properties窗口的Appearance类别中，设置BackColor属性。

备注

一般在创建自定义对话框中使用弹出面板。详情请参阅构建自定义对话框。

如果您需要简单的对话框，您可能不需要创建弹出面板。可以使用其中一个Dialog Box对象。详情请参阅关于内置对话框对象。


保持显示弹出面板

一旦已经创建并运行弹出面板，您可能会注意到它会闪烁，然后瞬间消失。之所以发生这种操作，是因为没有暂停UserObject执行，因此不能看到或应答弹出面板上的信息。使用下述步骤，添加OK按钮，保持执行UserObject，直到点击按钮。

1. 选择Flow [image] Confirm (OK)。

2. 把OK对象放在UserObject的Detail View上。

3. 选择OK对象。

4. 从UserObject的Edit菜单中，选择Add To Panel。

现在运行程序，弹出UserObject Panel，一直保持，直到按OK键。

如需与使用OK和Cancel键及创建自定义对话框有关的详情，请参阅构建自定义对话框。


改变弹出面板大小

Pop-Up Panel大小是UserObject的Panel View大小。采用下述步骤改变大小。

1. 按UserObject标题栏左侧的Panel按钮，把UserObject的编辑窗口放在Panel View中。

2. 把面板调整到希望的大小。

从对象菜单中，选择Size。也可以把光标定位到对象的边缘，拖动边缘来调整大小。

在调整UserObject Panel大小时，将包括标题和边框的大小。


改变弹出面板的位置

在第一次运行程序时，会在VEE工作区中心显示一个Pop-Up Panel (弹出面板)。在程序运行时，通过重新定位面板，可以改变Pop-Up Panel的位置。

1. 按Run。

2. 在面板弹出时，把它拖到希望的位置。

每次在程序运行时，面板将弹出到该位置。注意可以把Pop-Up Panel定位到任何位置，栅格不影响位置。如果关闭Main Panel属性Show on Execute，那么可以把UserObject Pop-Up Panel重新定位到VEE工作空间的任何地方。如果打开Show on Execute，那么Pop-Up Panel只能重新定位在Execution Window边界内部。

备注

整个Pop-Up Panel的左上角位置保持不变，而不管Pop-Up Panel属性如何，也不管是否选择Show Title Bar和Show Border。例如，如果设置了Pop-Up Panel位置，然后关闭Show Title Bar，面板将移动，从而Pop-Up Panel的左上角现在到达Pop-Up Panel标题栏左上角原来所在的位置。


在主面板中添加UserObject面板

一旦已经在UserObject编辑窗口中创建了Panel View，采取下述步骤，把这个面板添加到Main Panel中。

1. 在Main Window的Detail View中，在UserObject图标上按鼠标右键，然后选择Restore。

UserObject图标扩展到在UserObject编辑窗口中创建的Panel View中。

2. 选择UserObject。

3. 从主菜单中选择Edit [image] Add To Panel。

现在将看到Main Window的Panel View，上面显示了UserObject Panel。

可以采取上述步骤，把一个UserObject Panel嵌套在其父UserObject Panel上，但有一点除外，即必须使用父UserObject的Edit菜单。

一旦UserObject Panel已经添加到Main Panel中，象任何其它面板上的对象一样，改变其大小、位置和其它外观细节，参阅改变面板外观和相关主题。

备注

在把一个面板嵌套在另一个面板上时(如上所述)，您将制作一个内容拷贝，拷贝连接到原始面板上。但是，拷贝会被锁定；为改变面板，必须改变原始UserObject Panel。在从嵌套的面板中添加或删除对象时，或改变原始UserObject Panel时，拷贝也会变化。


在嵌套UserObject面板中添加对象

一旦已经在Main Panel (或在父 UserObject Panel)中添加了UserObject Panel，您仍可以在这个面板中添加对象。但是，必须在原始UserObject Panel中添加这些对象，然后调节相关对象和面板的大小和位置。

1. 按Main Window标题栏左侧的Detail按钮，返回Main Window的Detail View。

2. 进入UserObject的编辑窗口。

如果UserObject处于图标视图，双击它。

如果UserObject处于恢复视图，从对象菜单中选择Edit UserObject。

3. 按标题栏左侧的Detail按钮，把UserObject的编辑窗口置于Detail View。

4. 把任何希望的对象添加到UserObject的Detail View中。

5. 选择新的对象添加到面板中。从UserObject的Edit菜单中(按鼠标右键)，选择Add To Panel。

6. 在UserObject Panel View重新排列对象，保证美观。您可能需要调整面板大小。

7. 在Main Window中，点击Panel View按钮，查看带有新对象的UserObject面板。您可能需要调整面板大小，以便能够看到所有对象。


从嵌套UserObject面板中删除多个对象

1. 按Main Window标题栏左侧的Detail按钮，返回Main Window的Detail View。

2. 进入UserObject编辑窗口。

如果UserObject位于图标视图中，双击它。

如果UserObject位于恢复视图中，从对象菜单中选择Edit UserObject。

3. 按标题栏左侧的Panel按钮，把UserObject编辑窗口放在其Panel View中。

4. 从对象菜单中选择Delete，从嵌套UserObject面板中删除想要删除的对象。

这些对象仍存在于UserObject的Detail View中。如果想从程序中删除这些对象，那么应从Detail View中删除这些对象，这会同时从Panel View中删除这些对象。

5. 在UserObject Panel View上重新排列对象，以保证美观。您可能需要调整面板大小。

6. 在Main Window中，点击Panel View按钮，查看编辑后的UserObject面板。您可能需要调整面板大小。


从Main Panel中删除UserObject Panel

1. 在Main Window中，按标题栏左面的Panel按钮，进入Panel View。

2. 删除UserObject Panel。从对象菜单中，选择Delete或双击对象菜单按钮。

UserObject Panel仍然存在，但不再添加到Main Window的Panel View中。


什么是UserFunction Panel?

UserFunction Panel的构建和运行方式与UserObject Panel基本相同。但是，只有在UserFunction正在执行时(Pop-Up Panel)或只有在通过showPanel()以程序化方式显示UserFunction时，才能看到UserFunction Panel。UserFunction Panel不能添加到Main Panel (或父UserFunction或UserObject Panels)。


构建UserFunction面板

如果您有一个UserFunction，希望为它创建一个面板，采取以下步骤。

1. 按CTRL键，然后在希望的对象上按鼠标左键，在UserFunction编辑窗口中选择对象。

备注

UserFunction面板上的对象必须位于UserFunction细节视图中。不能从UserFunction面板范围外选择对象。嵌套在UserFuntion内部的UserObject Panels可以添加到UserFunction Panel中。如需了解添加方法，请参阅在Main Panel中添加UserObject Panel。

2. 从UserFunction的Edit菜单中，选择Add to Panel。

现在您已经创建了UserFunction Panel View。点击UserFunction左端的按钮，在Panel View和Detail View之间切换。

3. 在编辑完成时，关闭UserFunction编辑窗口。

在您希望在面板中添加其它对象的任何时候，从UserFunction的Detail View开始，采取上述步骤。

备注

如果已经创建了UserObject Panel，然后在UserFunction中添加UserObject，那么会自动存在UserFunction Panel。如果UserObject Panel已经添加到Main Panel中，它会自动删除，因为UserFunction Panel不能位于Main Panel上。


构建UserFunction弹出面板

1. 选择Edit [image] Edit UserFunction。

2. 选择UserFunction名称。

3. 从UserFunction的对象菜单中，选择Properties。

4. 在Pop-Up Panel类别中，把ShowPanelOnExecute复选框变成True。

UserFunction弹出面板的工作方式与UserObject弹出面板的工作方式相同，具体请参阅构建弹出面板。

备注: 构建状态面板

可以使用showPanel()，以编程方式弹出状态面板。详情请参阅构建状态面板。


改变UserFunction弹出面板的大小

1. 选择Edit [image] Edit UserFunction。

2. 选择UserFunction名称。

3. 把UserFunction切换到Panel View。

4. 把面板大小调整到希望的大小。

从对象菜单中，选择Size。或把光标定位在对象的边缘，拖动边缘调整大小。

在调整UserFunction Panel大小时，将调整整个UserFunction区域的大小，包括标题和边框。


改变UserFunction弹出面板的位置

其步骤与改变弹出面板的位置中介绍的UserObject Panel步骤相同。


使面板键盘可以导航

可能您的用户首选仅使用键盘在Panel View中导航，也有可能他们不能在环境中使用鼠标。对这些用户，构建一个可以使用键盘导航的面板。

一般来说，在使用键盘运行程序时，对象首先要获得焦点，然后可以改变对象的数据值或状态。

定义

Focus是指明在哪里可以执行操作的术语。在VEE中，有焦点的对象或字段外面有一个选取框(虚矩形)，对输入型字段，会显示一个垂直脱字符号，如果tab到对象，现有文本使用反转颜色显示(选择文本)；如果点击一个对象，它会获得焦点，但现有文本的外观不变。

键盘导航要注意以下事项：

用户很难告诉Panel View上的面板什么时候已经运行(OK按钮除外，除非可以选择，否则这些按钮会变成灰色)。应告知用户对象已经运行，或让用户指明什么时候完成变化 (如通过按OK按钮)。

如果没有鼠标，用户不能进入对象的对象菜单(这种存取适用于Display对象菜单选项，如Zoom和Auto Scale)。如果必需让用户使用这些参数，可以对部分参数添加控制输入端。

可以指定tab通过Panel View的tab顺序。Panel View导航技术中讨论了模式。

不同对象有不同的键盘交互规则。必须告诉用户这些规则；详情请参阅Panel View选择技术。


为对象或面板提供焦点

与焦点有关的部分信息

可以设置每个面板上多个对象的各栏的先后顺序。在每个对象上，设置TabIndex和TabStop的Properties。

只有在一个对象有焦点时，才能修改这个对象上的数据。

在弹出面板时，只有弹出面板上的对象获得焦点，直到面板关闭。

只有具有数据字段、按钮或选择区域的对象才能获得焦点。注意可以tab到每个数据字段、按钮或选择区域。

例如，如果在面板上有一个Slider(如下图所示)，那么第一个Tab为MinValue字段提供焦点。

面板上的Slider

为防止用户tab通过这些字段及改变字段，为这些字段添加控制输入端，如MinValue和MaxValue。

一旦程序开始运行，会立即执行Selection Control, Toggle Control和Slider对象，除非已经设置了Wait for Input属性。这一属性只允许在获得焦点、改变或选择值之后才执行对象。

如果Esc或Enter指配给一个OK按钮，然后按下这个键，那么OK按钮将得到并保持焦点。

如果一个功能键指配给OK按钮，然后按下这个键，那么焦点将保持在按下这个功能键前有焦点的对象上。

备注

在包含其它对象的键盘驱动的面板上，不要使用VEE的内置Dialog Box对象。在Dialog Box对象停止执行后，任何其它对象都不会获得焦点，因此不能通过键盘导航到其它对象。如需与Dialog Box对象有关的信息，请参阅关于内置对话框对象。


为Enter或Esc键指配OK按钮

在创建面板时，可以把Confirm (OK)按钮指配到键盘上的Enter和Esc键。使用程序的任何人都可以按某个键盘键，而不是Confirm (OK)按钮。否则，用户必须使用Tab移动到该按钮，然后按Space。这一功能特别适合使用弹出面板创建的自定义对话框。如需与构建自定义对话框有关的更多信息，请参阅构建自定义对话框。

如果想把键盘键指配给Confirm (OK)，采取下述步骤：

1. 选择Flow [image] Confirm (OK)。

2. 在面板中添加Confirm (OK)按钮。

3. 从OK按钮的对象菜单中，选择Properties。

4. 选择Assign to [Enter] Key和/或Assign to [Esc] Key to True。

备注
Enter键只能指配给每个上下文一个OK按钮，只能把Esc键指配给每个上下文一个OK按钮。如果把任何一个键指配给每个上下文一个以上的OK按钮，那么以前的指配会自动关闭。

5. 变动立即生效。

在程序运行时，指配给Enter的任何OK按钮都会用粗体显示其标记，表明它是默认按钮。

备注
从程序的Panel View (或UserObject/UserFunction)中，Enter和Esc键只能指配一个Confirm (OK)按钮。为所Confirm (OK)指配到其它键，参阅为功能键指配按钮。


为功能键指配按钮

在创建面板时，可以为功能键指配Confirm (OK)按钮 (键盘顶部的F1, F2, F3等)。使用程序的任何人都可以按相当于Confirm (OK)按钮的某个键盘键。否则，用户必须用Tab移到按钮上，按Space。如果想为Confirm (OK)指配键盘功能键，采取下述步骤：

1. 选择Flow [image] Confirm (OK)。

2. 在面板中添加Confirm (OK)按钮。

3. 从OK按钮的对象菜单中，选择Properties。

4. 选择Assign to Function Key下拉菜单。

5. 选择指配给这个OK按钮的功能键(F1 - F12)。某些键盘只有8个功能键，但VEE允许使用选择任何选项，支持跨平台开发；如需更多信息，请参阅通用技巧。在Windows中，F10键是一个预留键，其功能与Alt相同。

备注
可以把某个功能键指配给多个OK按钮。在按这个功能键时，目前活动的所有相关按钮都将运行。

OK按钮的标题自动变化，以反映功能键指配情况。可以改变标题，使其不包括功能键信息。

备注
可以使用功能键，从Panel View或Detail View中按OK按钮。在Main Window中打开ShowPanelonExecute属性时，还可以在执行窗口中指配键。


面板视图导航技术

在Panel View中导航时，使用Tab键前进，使用Shift+Tab后退。

对较早的版本

从VEE8.0版开始，可以以程序化方式(在运行时)在面板上配置对象的Tab顺序，而不会影响其设计时间值。如需与以程序化方式改变Tab顺序的更多信息，请参阅以程序化方式改变属性。

从VEE 7.0版开始，可以配置对象在面板上的Tab顺序。通过Properties窗口，可以为面板上的每个对象设置TabIndex和TabStop值。可以对新程序完成这一设置，也可以对导入7.0中的7.0以前的程序完成这一设置。

注：加载到 VEE 7.0及以后版本的7.0以前的程序在默认情况下根据揤EE 6.2及以前版本中创建的程序中的Tab顺序?#20013;介绍的算法，设置成面板上每个对象的TabIndex属性。因此，旧程序将在7.0中执行，其行为与以前版本的VEE相同。

可以修改加载到7.0中的程序，为每个面板上的对象明确设置TabIndex值。TabIndex属性设置为零值(0)的对象是在面板弹出时Tab的第一个对象。注：同一个面板上的多个对象的TabIndex值可能会相同(在这种情况下，这些对象的z顺序决定着Tab顺序)。我们不推荐这种方式，但允许使用这种方式。

TabStop用来从Tab顺序中删除对象。某些对象不允许操作人员进行任何输入，如AlphaNumeric显示画面，其TabStop值设为假。如果所需的行为是让对象出现在面板上，但不允许操作人员使用tab键到达该对象，其它对象可能会把这个属性设为假。

在VEE 7.0及以后版本中编辑程序时，在默认情况下添加到面板的新对象会把TabStop属性设置成高于面板上现有的最高TabStop值。例如，如果一个面板有三个对象，其TabStops设置为0、1和2，并在该面板上添加另一个对象，那么在默认情况下，新对象的TabStop属性会设置为3。

在执行面板时，TabIndex为零(或最低值)的对象会获得最初焦点。然后Tab将继续到使用下一个TabIndex值的对象，从零直到最大的TabIndex值。

对老版本(6.2及以前版本)，穿越的对象和面板顺序如下：

在按Run后，VEE把面板分成多组对象。第一组由最上面的(最低的y坐标值)对象确定，包含着y坐标接近最上面对象的所有对象。获得焦点的第一个对象是组中最左面的对象。Tab从左向右移动焦点。

备注
如果最左面的对象设置了Auto Execute，那么其在开始时不获得焦点，但可以用Tab到达该对象。

对象或面板的y位置由左上角的位置确定。

一旦焦点到达第一组中的最右面，它会从下一组中最左面的对象继续。

下一组由没有位于前一组中最上面的对象确定。Tab从这一组中最左面的对象开始，继续移动到右面。会在整个面板中重复这种顺序方式。

下图是典型的对象分组方式。

VEE 6.2及以前版本中创建的简单的Tab顺序范例

下图说明了更加复杂的对象分组。一开始，似乎Third Text对象应该包括在第一组中。但第一组由Second Text对象确定，因此Third Text对象太靠下，而没有落在第一组中。

第三组由Fifth Text对象确定。Fourth对象和Sixth对象在该组中的距离足够近。

复杂的Tab顺序范例

备注

只有在激活时才能使用Tab到达OK按钮 (文本没有变成灰色时)。

如果一个对象有多个字段，Tab会通过所有字段，然后到达下一个对象。

如果您处在嵌套在另一个面板上的UserObject Panel中，Tab会通过UserObject中的所有对象，然后继续到达UserObject Panel外面的下一个对象。

如果您处在Pop-Up Panel (UserObject或UserFunction)中，那么只能在Pop-Up Panel内部Tab，直到其执行完毕。

记住，不管对象是否执行，都可以Tab到这些对象 (OK对象除外)。


面板视图选择技巧

使用鼠标时，可以单击来选择或修改一个值。使用键盘时，可以使用tab键将焦点移到某个对象，然后用下面的技巧去选择或修改一个值。

Radio 按钮和列表:

和 [image] 进行选择。

Space 键确定当前的选择。

Cyclic 按钮:

Space 键确定当前的选择。

Drop-Down 列表:

打开列表。

和 [image] 选择想要得项。

Space 或 Return 关闭列表。

Esc 取消选择。

Pop-Up 列表:

Space 打开列表。

和 [image] 选择想要得项。

Space 或 Return 关闭列表。

Esc 取消选择。

所有 Toggle Control 对象:

Space 改变值。

所有编辑域 (例如 Constant 对象):

从键盘输入新值。

Tab 和 Enter 到下一个域。

Esc 取消选择。

Start 和 OK 按钮:

Space 选择它们。

有多个域的对象 (比如 Function Generator):

根据各个域的不同类型选用上面的技术，然后用Tab键到下一个域。

注释

如果你把Esc或Enter指定给了一个OK对象，而且你又在编辑域(比如 Constant 和 Slider 对象)中使用了Esc或Enter, 那么当编辑域中的数据完成输入后，这个OK按钮就会被按下。

当为一个Data [image] 对象设置了Wait For Input项，它就会象上面所描述的那样在你完成选择或改变了一个值后开始执行。当一个Data [image] 对象设置了Auto Execute项，它就会象上面所描述的那样在你完成选择或改变了一个值后开始一个线程。创建一个自修改面板 演示了如何使用Wait for Input。

Data [image] Constant 和 Data [image] Slider 对象的数据必须设置Wait For Input 或 Auto Execute才能工作。用同样的值替换原值被视为一次修改。


Most Important

最重要的事项

开发良好用户界面的相关内容包含着指导准则和通用界面开发信息。这些信息并不能代替Human Factors帮助或用户注释。

获得专业用户界面设计人员提供的建议，如Human Factors工程师或图形设计人员。本节中的信息只包含大体的指导准则。在与用户界面设计人员接触时，请他们查看Panel Views，提出意见。

获得用户反馈。让用户使用面板。询问他们能否找到所需的信息。确认他们能够识别应该采取的措施。验证颜色和字体是否有效，能否长期舒适地使用。

通用用户界面设计指导准则

了解用户及其环境。

授权给用户。让他们控制程序的基本特点。最大限度地减少用户使用系统时必须学习的规则数量。

用户交互、数据表示和布局要一致。对显示的信息进行分组和排序。

适应不同级别的用户，如为新手或间歇使用的用户提供默认值、帮助或模板，为高级用户或频繁使用的用户提供加速器或快捷方式。

使用户树立信心。帮助他们迅速、明确地完成任务。不要使用宾格语句，如用户错误。

为用户提供反馈。让用户确认数据输入，或直接看到操作结果。

面向用户。为用户提供足够的信息，使其了解当前程序状况及怎样对这种状况作出反应。

设计错误恢复功能。在用户犯错时，他们需要有机会恢复原状。

与程序的实际用户验证设计。


使用颜色

在使用颜色面板时，应考虑颜色对受众的限制及颜色的特定用途。

颜色基础知识

老人通常对颜色不敏感，可能需要更亮的颜色。老人分辨蓝色的能力较弱。而年轻的用户可能会发现颜色越亮，越容易让人疲劳。

8%的男性和0.5%的女性存在某种形式的颜色辨别缺陷。最常见的缺陷是无法分辨红色和绿色。

对颜色的感觉有各种变化。不同的监视器、不同的环境光线、文化和职业内涵及个人对颜色的偏好都会影响人们查看、分辨和感觉颜色的方式。

注意颜色在不同的文化中有不同的意义；最好使用大面积的中性颜色。

备注：冗余提示

由于上述原因，颜色只能作为另一种沟通形式。例如，为把Stop与Go按钮分开，不要只把颜色从Red变成Green；同样要保证改变说明文字。保证作为冗余提示的方式之一，是先创建一个没有指定颜色的面板，然后按需添加颜色。

尽量减少使用的颜色数量。如果在一个面板中有超过4种或5种不同的颜色，或在整个用户界面中有7种不同的颜色，可能会分散和混淆人们的视觉。

颜色会折射出对程序的印象。明亮的颜色可以折射出玩具类的质量。柔和的或微妙的颜色可以给人以完善或专业的印象。

对背景和文本（前景）组合，使用对比度高的颜色，但要避免把对立派系的颜色放在一起（像黄色和蓝色）。对比鲜明很好，但边界可能会相互渗透。下图显示了颜色轮上的颜色。

颜色轮

使用普遍接受的颜色编码，如Green for Go 或Normal Status 和Red for Stop 或Emergency 。这种颜色编码可能取决于文化或职业标准。

考虑受众的打印需求。如果用户用彩色打印机打印彩色屏幕，由于打印机的局限性，打印机的颜色不一定与屏幕上的颜色一致。如果在黑白打印机上打印屏幕，要保证把颜色很好地转换成黑色和白色。注意在Default Preferences Properties对话框上，Printing tab Screen Element 设置不适用改变默认的颜色。在改变默认颜色时，VEE会在打印输出中把颜色自动变成灰度。

既然这么麻烦，为什么还使用颜色？

增强外观。拥有令人悦目的颜色的界面长时间操作和查看起来更容易。

在视觉上把多个对象划分在一组。

帮助导航和识别。

增强可读性。

显示类似之处和不同之处。不同的颜色可以把不同的信息组区分开来。

引起注意某个对象或事件。如果颜色不同，那么很容易找到信息。

突出信息编码。颜色信息可以帮助理解，特别是使用共同的编码，如黄色为警告，红色是危险或失败，蓝色是麻烦或冰冷。

使用基本整体颜色方案，类似的函数使用相同的颜色，只在需要时才使用对比鲜明的颜色。


怎样选取颜色

下面介绍了部分指导准则，帮助您选取能够增强面板可用性和可读性的颜色。

一般来说，您想使用没有颜色的背景，最好使用白色或灰色。但是，背景颜色较浅会提高感觉的闪烁程度 (具体程度取决于系统监视器)。蓝色阴影也非常适合作为背景(包括对象和面板)。

如果背景颜色太亮，那么可能不能突出显示三维对象的边界。如果背景太暗，那么可能不能突出显示对象的边界阴影。

在显示文本时，选取的颜色应和背景形成强烈对比。例如，如果背景颜色是白色，那么最好使用下述颜色，但其效果对文本最差：

黑色 - 最好

蓝色- 最好

红色 - 最好

黄色 - 最差(对比度差)

青色 - 最差(对比度差)

如果背景颜色是黑色，那么最好使用下述颜色，但其效果对文本最差：

黄色- 最好

白色 - 最好

绿色 - 最好

蓝色 - 最差

红色 - 最差(可能会混合到背景中)

洋红色 - 最差(可能会混合到背景中)

注意，在VEE显示对象上(如X vs Y)，图形默认的背景颜色是黑色，您希望为图形的格线选取好的颜色。也可以改变轨迹线和点类型，区分图形轨迹。

下图显示了可以怎样使用这些颜色：

显示不同的颜色文本

这个程序作为colors.vee 保存在manual范例目录下。打开这个范例，查看这些颜色在屏幕上的显示效果。

不管使用什么样的背景颜色，一定要保证显示的文本颜色与亮度水平大体相比，对比度好。对象背景和文本的这些指导准则也适用于面板背景和放在上面的对象。

一般来说，蓝色阴影最适合作为背景。如果使用蓝色作为文本颜色，那么可以使用绿蓝色 (如呈绿色的蓝色)。


使用字体

字体基础知识

与在纸面上阅读文字相比，用户在计算机屏幕上阅读文字要增加大约25%的时间，但理解大体相同。因此，在面板中放大量的文字会降低用户的阅读速度。

字体分为成比例的字体和不成比例的字体。成比例的字体对不同的字母使用不同的宽度；例如，打印字母w使用的空间要比打印字母i使用的空间大。成比例的字体读起来一般要更容易。部分常见的成比例字体有： Lucida*， Arial* 和 Time New Roman*。

不成比例的字体对所有字母使用相同的宽度，在需要垂直对齐表格中的数据时使用。部分常见的不成比例的字体有（也叫做单空间字体）：Courier 和Courier New。

VEE中提供的字体取决于系统中安装的字体。

字号指明字符的高度，而不是宽度。所以，如果您想改变字体类型，但保持相同的字号，您可能必须调整对象大小，以适应文字宽度。

通常来说，一般阅读使用12号字。您可能想使用更大的字体或粗体，以起到强调作用。虽然字号在纸面上是一个绝对值（如英寸和厘米），但计算机屏幕上的字号则基于逻辑字号，其会根据监视器的分辨率变化。所以不管使用什么字号的字体，都必需保证其在屏幕上是可读的。下图显示了不同的字号。

字号

部分研究表明，用户在阅读衬线字体（在顶部有细线和/或在底部有字母主笔划的字体）的速度要比阅读没有衬线的字体快。必需确定这是否会影响用户。下图显示了衬线字体和没有衬线的字体。

衬线字体和没有衬线的字体

如果文字左对齐，并有一定的右边距，那么阅读起来会更快。

每个程序使用的字体类型应不超过三个，字体颜色应不超过四种。统一使用字体，帮助用户了解哪些文字更重要。一般来说，较大的文字最重要。

统一使用字体类型和字号，可以在屏幕上更简便地对准和平衡文字。

蓝色一般不适合用于文字?#30524;睛对这种颜色最不敏感。

验证程序用户对您选择的字体的反应情况，保证有效性。

* Arial 和 Times New Roman字体是Monotype Corporation 的产品。
Lucida 字体是Bigelow & Holmes公司的产品。


Layout Tips

布局技巧

即使在面板的内容变化时，仍应保持统一的布局。例如，如果在屏幕底部有一个消息区，在侧面有一个显示区，在顶部有一个状态区，那么应保持这种布局；在程序运行时不要来回移动各个单元。

把相关信息划分在一组中。

通过可用的屏幕区平衡信息。

记住留出白空间(没有对象的空白区)，以更简便地使用面板。如果屏幕已满，许多对象与其它对象紧挨着、中间没有空间，那么您的用户很难找到所需的信息。

一直把导航控件放在每个面板上的同一位置。

在相关组中对准和确定对象大小，以便其大小相同。水平或垂直对准对象，以便没有粗糙的边缘，破坏对象识别和扫描。对象之间的间距要保持不变。

使用对话框，表示不频繁的或使用少的功能。用户可以应答及使用这些信息，减少Main Panel上的混乱。


提请注意对象

使用醒目的属性，提请注意屏幕上的不同区域：

使用对象大小。人眼自然会注意较大的对象上，同时这还会暗示重要性。如果使用大小来区分信息，那么最多可以使用五种不同的大小。

使用边框特点区分多个对象。在突出表面使用较浅的颜色，在凹进表面使用较深的颜色。如果想查看不同的边框样式，请参阅边框样式图。

使用不同的颜色指明不同的重要程度。在一个面板上最多可以使用四种或五种不同的颜色。在整个用户界面中最多可以使用七种不同的颜色。如果决定使用更多的颜色，那么应提供图例，解释每种颜色的用途或意义。

对精细信息或小型区域，黑色、白色和灰色可读性最好。

较亮的颜色可以比较暗的颜色更引人注意(如使用蓝色、黄色或红色，而不是蓝灰色、金黄色或浅红色)。用户可以区分最多五种不同的亮度等级。

较亮的颜色和较暖的颜色(如红色)似乎更容易引起用户注意。较暗的颜色和较冷的颜色 (如蓝色)则较差。

使用字号。使用的字号至少要相差四号，才能指明相对重要性。

使用字体，如粗体和斜体。斜体文字读起来较慢，因此在要求快速阅读的文字不要使用斜体。

闪亮/闪烁可以有效引起注意。在VEE中，吸引注意的某些方式有：弹出一个面板，改变Picture对象中的位图，改变Color Alarm对象中的颜色和文字，或使用Dialog Box对象。闪亮或闪烁的项目一次不能超过四个。

吸引注意力的另一种方式是使用声音。使用Beep对象 (如果硬件支持)。

在整个程序中应统一使用每种属性。


关于内置对话框对象

在创建自定义对话框前，考虑内置Dialog Box对象 (位于Data菜单下)是否能满足自己的需求。它们使用简便，有许多有用的功能。

Dialog Box对象和Pop-Up Panels (用来构建自定义对话框)之间的区别是：

Dialog Box对象不必添加到面板中，它们会自动弹出。下图显示了一个Message Box对象及其生成的面板。

消息框

Dialog Box对象每个对象只执行一个操作 - 它们要求具体的用户输入。如果您需要立即对用户询问多个问题或显示数据，那么可以创建一个自定义对话框。

Dialog Box对象是程式对象。换句话说，在它们弹出时，程序其余部分会停止。这不同于Pop-Up Panel；在Pop-Up Panel弹出时，程序其余部分会继续执行。

Dialog Box对象不应用在键盘驱动的面板上。在执行完成后，没有任何其它对象得到焦点，因此不能通过键盘导航到其它对象。

Dialog Box对象已经有多种内置功能。您不必编写一个程序，获得检查限制或超时等功能。下表列出了Dialog Box对象的内置功能：

对话框对象功能

_________________________________________________________________________________________________

对话框对象

检查限制

掩盖口令

超时

自定义按钮文本

格式化选项

_________________________________________________________________________________________________

Text Input 获得文本输入 | X | X | X | X | X 字段宽度
Int32 Input 获得整数输入 | X | X | X | X | X 字段宽度
Real64 Input 获得实数输入 | X | X | X | X | X 字段宽度
Message Box 显示信息 | n.a. | n.a. | X | X | X 多行消息
List Box 允许从列表中选择一个或多个项目 | n.a. | n.a. | X | X | X 列表高度
File Name Selection 允许选择文件名 | X[1] | n.a. | n.a. | n.a. | n.a.

_________________________________________________________________________________________________

1 如果覆盖现有文件，那么会提供警报。不允许打开不存在的文件。

Dialog Box对象有额外的颜色和字体属性，因此可以简便地控制弹出面板的外观。下图显示了这些属性。

Colors和Fonts上的消息框属性

可以在没有鼠标的情况下简便地使用Dialog Box对象。按Enter键，按默认的按钮；或按Esc键，按最右面的按钮(通常是Cancel)。使用Tab和Shift+Tab，把焦点移动到输入字段或按钮上。按Space，按一个有焦点的按钮。如需与焦点有关的更多信息，请参阅使面板键盘可以导航。

如需更详细的信息，请参阅Dialog Box和在超时输出一个值。


在超时时输出一个值

在Dialog Box 对象上设置一个Timeout （通过Properties对话框），且过了超时周期时，Timeout 数据输出端会输出值1。在过了超时周期时，您通常希望输出一个值（如Default值）；为此，遵循下述步骤，其中使用Text Input 对话框：

1. 设置Timeout。

从对象菜单中选择Properties。选择Timeout Enabled 复选框。设置Pop-Up Duration。点击OK。

2. 添加Default Value数据输入端。

3. 选择Data [image] Constant [image] Text，输入默认值。（根据需求选择相应的Data [image] Constant对象，输入默认值。）

4. 在Text对象中输入默认值。

5. 把Text数据输出端连接到Default Value数据输入端。

6. 选择Flow [image] Gate。

7. 把Text 数据输出端连接到Gate 数据输入端。

8. 把Timeout数据输出端连接到Gate序列输入端。在过了超时周期后，默认值通过Gate 输出。

下图显示了在超时发生时使用JCT 对象输出输入值或默认值的程序。这个程序作为 timeout.vee 保存在manual范例目录下。

在超时时输出默认值

Copyright (c) 1991-2007 Agilent Technologies, Inc.


构建自定义对话框

如果内置Dialog Box对象没有满足需求，可以创建一个自定义对话框。下面的内容解释了怎样从Pop-Up Panels中创建自定义对话框。一旦已经创建了对话框，可以根据需要添加控制、显示或其它对象。如果选择不根据下面的步骤构建程序，那么打开包含对话框程序的文件(通过Help [image] Open Example)，修改文件，使其适应自己的需求。

为创建Pop-Up Panel，遵守构建UserObject面板中的步骤。可以从UserObject或UserFunction中创建Pop-Up Panel。 除另行指明外，这一组内容的说明假设使用UserObject。


构建基本对话框

1. 一旦已经构建了弹出面板，根据保持显示弹出面板中的步骤操作两次。第一次添加一个OK对象，以便用户能够确认选择，第二次把OK对象添加为Cancel按钮，以便用户能够取消选择。

2. 把Enter键指配给OK按钮，把Esc键指配给Cancel按钮。

为第一个OK对象选择Properties，把AssignToEnterButton属性变成True。

从OK对象的对象菜单中选择Properties。把Title变成Cancel，把Assign to [Esc]键复选框变成True。

现在，OK按钮被指配给Enter键 (在默认情况下)，Cancel按钮被指配给Esc键。

3. 选择Flow [image] Exit UserObject，把它放在UserObject的Detail View中。

4. 把Cancel按钮的数据输出端连接到Exit UserObject的序列输入端。

5. 选择Data [image] Constant [image] Text。(这可以是获得用户输入的任何对象。)

6. 把OK按钮的数据输出端连接到Text对象的序列输入端。

7. 在UserObject上创建一个数据输出端。

8. 把Text对象的数据输出端连接到UserObject的数据输出端。

9. 选择Flow [image] Exit UserObject。

10. 把Text对象的序列输出端连接到Exit UserObject的序列输入端。

现在，如果按OK (或Enter)，对话框会输出值。如果按Cancel (或Esc)，不输出值。

下图显示了使用这些步骤创建的程序。

基本自定义对话框

这个程序作为dialog1.vee 保存在manual范例目录下。

本范例详情：

OK按钮必须连接到Text对象上，如果没有连接，Text对象会在UserObject开始运行时运行。因此，默认数据会被传播到UserObject输出数据端。OK按钮防止Text对象操作，直到用户在输入Text对象后按OK。

使用OK和Cancel的线程必须连接到Exit UserObject对象上。如果没有连接，用户必须按OK和Cancel，才能从UserObject中输出数据，因为只有在其内部的所有对象操作完时，UserObject才会传播输出数据。

为查看演示的执行原理，遵守下述步骤：

1. 选择Show Execution Flow工具栏按钮。

2. 在Detail View中显示UserObject的编辑窗口。

3. 运行程序。


设置超时

如果想让对话框在一段时间后消失，可以设置超时。采用下述步骤，在构建基本对话框创建的自定义对话框中添加超时。

1. 选择Flow [image] Delay，把它放在UserObject的Detail View中。

2. 选择Flow [image] Exit UserObject。

3. 把Delay对象的序列输出端连接到Exit UserObject的序列输入端。

4. 在Delay编辑字段中指定弹出时长(单位为秒)。在超过这个时间时，弹出面板消失。

5. 在UserObject中添加第二个数据输出端。

6. 把Delay对象的数据输出端连接到第二个数据输出端，使其能够用于Main上下文中。

在超过超时周期时，这个端上输出一个空容器。

下图显示了使用这些步骤创建的程序。

带有超时设置的对话框

这个程序作为dialog2.vee 保存在manual范例目录下。

在dialog2.vee超过超时周期时，UserObject没有输出任何值。您通常希望在其超时时UserObject会输出默认值，如下图所示。

在超过超时周期时，默认值是输出

这个程序作为dialog3.vee 保存在manual范例目录下。


检查有效数据

下图显示了在输出取值前针对某个限制检查输入值的程序。如果取值不满足限制，那么会弹出另一个对话框，通知用户。

检查限制的对话框

这一程序作为dialog4.vee 保存在manual范例目录下。

这一范例的重要事项如下：

Until Break对象允许在Error Pop-Up Panel执行后重新输入一个数字，或在Enter a number...对象已经执行一次后重新输入一个数字。

Error Pop-Up Panel是一个UserObject弹出面板，显示一条信息，并对Enter或Esc作出响应。它在5秒后超时。


构建自我修改面板

创建一个自我修改面板，以根据以前的用户选项在面板中为用户提供多种选择。

下图显示了一个在Drop-Down List中更改选项的程序，它基于在Radio Buttons对象中所作的选择。弹出面板显示在图片的右上方。

自我修改面板

这个程序作为dialog5.vee保存在manual范例目录中。

这个范例的重要方面包括：

Select a Product（Radio Buttons）对象在Properties窗口内设置Wait for Input。

Phantom Tests、 Beetle Tests和 Viper Tests是Text型数组，它包含一个测试列表，通过Enum Values控制输入端输入Select the test to run和Drop-Down List 对象。

Select the test to run在Properties窗口设置Wait for Input，抑制向Gate发送数据，直到选择乘积后选择一个测试编号。


构建状态面板

为在测试运行时显示状态面板，并使用当前测试数据更新面板，可以使用UserFunction Panel。使用showPanel对象显示面板，使用Call对象运行面板。

在使用showPanel时，不能使用Show Panel On Execute (在UserFunction Properties窗口中)。下表概括了showPanel和Show Panel On Execute之间执行方式的区别。

showPanel和Show Panel On Execute之间的区别

_________________________________________________________________________________________________

showPanel

Show Panel On Execute

_____________________________________________________________________________________

面板一直保持到执行hidePanel对象或程序停止运行。 | 面板一直保持到UserFunction执行结束或程序停止运行。
使用Call执行UserFunction，使用showPanel显示面板。因此，在能够看到面板的同时，可以多次执行UserFunction。 | 使用Call执行UserFunction及显示面板。因此，每次调用UserFunction时，会自动显示面板；在UserFunction执行结束后，会自动隐藏面板。
在运行时可以以程序化方式设置显示的位置。 | 在开发时手动设置显示的位置。
显示的面板大小可能与Panel View大小不同。 | 显示的面板大小与Panel View大小相同。
在看得到时用户不能移动面板。 | 在看得到时用户能够移动面板。

_________________________________________________________________________________________________

另请参阅:

实验11-5: 创建状态面板


构建状态面板

如构建UserFunction面板中所述，通过构建UserFunction Panel，构建一个状态面板。在打开UserFunction的编辑窗口时，确保在Properties窗口中没有设置ShowPanelOnExecute复选框。

另请参阅

实验11-5: 创建状态面板


显示状态面板

使用showPanel对象显示状态面板。

1. 选择Device [image] Function & Object Browser。在Function & Object Browser中，选择Type: Built-in Functions，然后选择Member: showPanel。

出现showPanel对象及一个公式，其中包含五个参数及相关的UserFunction名称、位置和大小端。可以把包含数据的对象连接到输入端，也可以直接编辑参数，删除输入。

2. 在引号之间输入UserFunction名称，替换UFname。

3. 为指定位置，输入x和y坐标，在UserFunction Panel左上角的VEE窗口中指定位置。VEE窗口左上角的坐标是0, 0。showPanel对象上的编辑字段类似于： showPanel(MyFunc,300,300)。

如果没有指定位置，那么面板会显示在屏幕中心。

4. 为指定显示的面板大小，必须已经指定了位置。用像素指定面板的width和height。

如果指定的尺寸比现有的UserFunction Panel View小，那么会显示面板的左上部分。如果指定的尺寸比现有的Panel View大，那么显示的面板会在右下方增加额外的区域。

如果有背景图片，它会以指定的大小显示，并根据显示模式进行显示。例如，如果显示模式是Scaled，那么背景图像将缩放到showPanel对象中指定的大小。

在指定位置和大小时，showPanel对象上的编辑字段类似于：showPanel(MyFunc,300,300,100,100)。

每个UserFunction只能显示一个面板。如果执行第二个showPanel，那么将隐藏第一个面板，并根据第二个 showPanel调用指定的要求显示面板。

另请参阅

实验11-5: 创建状态面板


隐藏状态面板

在程序执行完毕时，将不再显示使用showPanel显示的所有面板。为在程序运行时隐藏面板，采取下述步骤：

1. 选择Device [image] Function & Object Browser。在Function & Object Browser中选择Type: Built-in Functions，然后选择Member: hidePanel。

2. 在引号中输入UserFunction名称，代替UFname。在这个对象运行时，会隐藏命名的面板。


更新状态面板

showPanel对象只显示面板，不执行UserFunction。使用Call 对象（位于Device [image] Call中），把新数据发送到状态面板，更新显示画面。还可以从任何表达式中调用UserFunction，如在Formula或Sequencer对象中。

还可以在任何表达式中使用showPanel，如在Formula 或Sequencer对象中。例如，在Sequencer的第一个处理中作为表达式使用showPanel 。在每项测试运行时，会更新状态面板上的数据。在Sequencer的最后处理中使用hidePanel。

在通过Call 对象发送新数据后，不需要再次调用showPanel；显示的面板内容会自动更新。


状态面板范例

下图显示了更新信息的一个简单的状态面板。在List Box对象中进行选择后，面板上显示与该测试有关的数据。

状态面板

下图是显示状态面板的程序。这个程序作为status.vee保存在manual范例目录下。

状态面板范例程序

对这个范例，应注意以下几个重要方面：

Record常数设置测试结果的记录。这可以是来自测试函数的对数输出。

Until Break对象允许多次选择测试信息。

Get Field对象把List Box复位成最后一次迭代中选择的值。

在List Box上按Done按钮时，隐藏状态面板，Until Break循环完成。

UserFunction包含一个Panel View，在每次调用UserFunction时，会更新这个Panel View。

apps范例目录下的mfgtest.vee程序演示了结合使用状态面板与Sequencer的更加完整的程序。

另请参阅

实验11-5: 创建状态面板


图片动画

可以使用showPanel和hidePanel执行动画。采用下述步骤，创建简单的动画程序：

1. 在Main Window的对象菜单上使用Create Panel，在Main Window中创建一个Panel View。

2. 在Main Window Properties中，把Execution Window Title变成A Simple Animation，一定要启用ShowPanelonExecute。

从Appearance Properties中，为Main Panel选择一个背景颜色。

这个颜色很重要，因为您将对动画文件的背景使用相同的颜色。

3. 为希望制作动画的图像创建一个图形文件。

4. 使用Device [image] UserFunction打开UserFunction编辑窗口。

5. 选择Display [image] Picture，把对象放在UserFunction窗口中。通过Properties窗口指定图形文件。

6. 在UserFunction Panel中添加Picture对象，然后从Picture对象菜单中选择Properties。

7. 关闭Picture边框和标题栏，把Picture放在UserFunction Panel的左上角。

8. 从UserFunction对象菜单中，选择Properties。

9. 把Title变成picture。从Pop-Up Panel类中关闭UserFunction Panel的标题栏和边框。

10. 把Panel View 背景颜色变成Main Panel的背景颜色。

11. 缩小UserFunction Panel尺寸。

12. 选择Device [image] Function & Object Browser，然后选择内置函数showPanel，把它放在Main Detail View中。

13. 在引号中输入UserFunction名称，用picture代替Ufname。

14. 删除除位置参数x和y的输入端。

15. 在编辑字段中使用端名称，如showPanel(picture,x,y)。

16. 选择Flow [image] Repeat [image] For Range。

17. 在For Range对象中，填写x和y坐标的范围，如From: -20, Thru: 500,和Step: 10。

18. 从Flow菜单中添加Gate和Delay对象。把Delay值设为.05。

19. 把For Range输出连接到Gate输入上，把Gate输出连接到showPanel X和Y输入上。

20. 把Gate序列输出连接到Delay序列输入上。然后把Delay输出连接到showPanel序列输入上。

21. 按Panel按钮，查看Panel View。

22. 运行程序，查看图片怎样在Panel View中移动。

下图显示了使用这些步骤创建的程序，包括UserFunction Panel。

简单的动画

这个程序作为animate.vee 保存在Manual范例目录下。

赛跑: 简单的动画

下图显示了在VEE中使用简单动画的部分Panel View。

这个程序作为Race.vee保存在Games范例目录下。Games目录下的Wheel.vee和Slots.vee 程序演示了更加复杂的动画。

使用多个图像

通过在Picture对象中添加一个数据输入端，在运行时在Picture 中以程序化方式输入文件名称，可以使用多个图像创建动画。在Picture显示模式是Scaled时，显示图像所需的时间要比选择Centered or Actual时的时间长。


构建非英语文本的面板

为构建非英语文本的面板，您必需设置环境，显示非英语字符。VEE有一些项目使用英语，不能在面板上改变这些项目：

某些对象有英语文本，如Data [image] Selection Control [image] Pop-Up List。在弹出列表时，弹出列表的标题是Make Selection。按钮是OK和Cancel。

与相关对话框一样，Panel View中的菜单选项使用英语，如Open, Save和Save As。

对象菜单选项使用英语。

在把环境设置成显示非英语字符后，可以在VEE中能够输入英语文本的任何地方输入非英语文本。例如，Labels, Constant对象，对象上的标题，Confirm (OK)按钮和Dialog Box对象(及上面的按钮)。


防止程序被修改

在把程序提交给别人运行时，您一般不想让别人修改程序。您只希望他们观察程序执行，运行任何控件。有两种基本方式防止意外修改程序：

File [image] Create RunTime Version - 在使用这个命令时，将把安全版本的当前程序保存到文件filename.vxe中，而不会给当前程序带来任何负面影响。用户可以在VEE RunTim环境中直接运行安全版本。必须创建一个Main Panel View，以便在程序执行时用户能够看到一个面板。这个选项可以防止任何人存取您的源程序。

警告
没有任何途径解除有安全保护(.vxe)的程序；一定要保存没有安全保护版本的源程序 (.vee)。

veerun filename - 这个命令主要用来运行安全VEE程序。但是，可以使用它运行没有安全保护的程序。在VEE启动时，它加载filename中的程序，在VEE RunTime环境中运行程序。一旦程序完成，运行时窗口会关闭。必须创建一个Main Panel View，以便在程序执行时用户能够看到一个面板。如果您不想维护两个文件(一个源文件和一个安全文件)，那么可以使用这个选项。

备注

用来运行程序的VEE RunTime版本必须相同于或新于用来开发程序的VEE版本。


防止改变程序

下面列出了在准备提交程序时使用的部分技巧：

为防止用户编辑添加到Panel View的Note Pad对象中的文本，关闭Note Pad的编辑功能。在包含Note Pad对象的Panel View中，编辑Note Pad Propertie；在Appearance类别中，把EditEnabled变成False。

为防止用户改变对象上的最大值和最小值，如Slider, Meter, Thermometer, Fill Bar和Tank对象，添加MaxValue 和 MinValue控制端。

为防止用户移动UserObject或UserFunction弹出面板，使用这些面板的对象菜单中的Lock Panel Position属性。此外，还可以使用UserFunction Panel，以程序化方式使用showPanel对象显示面板。showPanel详情请参阅构建状态面板。

为防止用户改变VEE图形Display对象上的标度，改变Layout。在包含对象的Panel View中，从对象的对象菜单中选择Properties；在Layout类别中，关闭Enable Trace/Scale Editing。

为防止使用目的系统上的任何VEE默认颜色和字本，与所有默认颜色和字体一起保存程序。

1. 选择File [image] Save As?/font>。

2. 选择Save colors and fonts with program复选框。

3. 点击Save。程序中使用的所有颜色和字体现在被明确保存在程序中。


保护程序安全

警告：没有任何方式解除有安全保护的(.vxe)程序，一定要保留源程序 (.vee)

如果决定在分发前创建有安全保护的程序版本，请采取下述步骤：

1. 选择File [image] Create RunTime Version。

2. 在Create RunTime Version对话框中，输入程序名称。不必输入文件扩展名，因为会自动添加.vxe。

3. 选择Save colors and fonts with program，在Default Preferences对话框中选择的程序文件中保存所有默认颜色和字体。这可以保证不管谁运行您的程序，都会获得您的所有默认颜色和字体。如果没有选择这个选项，那么只有在程序中明确设置的颜色和字体保存在程序文件中。使用您的程序的其它人可以保留自己的默认颜色和字体。如果加载现有程序，那么将根据程序以前保存的方式设置这个选项。

在默认状态下启用Save I/O configuration with program。如果不想要嵌入式I/O配置，可以反选这个选项。VEE允许在程序本身中嵌入I/O配置信息。如需与保护I/O配置有关的更多信息，请参阅Instrument Manager。

这一操作对源程序没有负面影响。有安全保护的程序保存到不同的文件名中。例如，没有安全保护的程序prog.vee会保存为有安全保护的程序prog.vxe。

可以在VEE RunTime中运行有安全保护的程序，VEE RunTime是仅运行版本的VEE。可以在数量不限的计算机上分发程序和VEE RunTime。

备注

如果用户必须在程序执行时观察程序或与程序交互，那么必须以Main Panel View或Pop-Up Panel的形式创建Panel View。如果希望程序在没有用户干预的情况下运行，那么不需要Panel Views。但是，某类状态指示很有裨益。


重新保护程序安全

在把有安全保护的程序分发给用户，每次在改变原始程序时，必须再次把它保存为具有安全保护的程序，并重新分发程序。参阅保护程序安全。


保护UserObject安全

在把UserObject分发给别人使用时，您可能希望保护UserObject安全，防止别人修改它。他们只能使用图标视图或UserObject Panel View。如果用户必须与UserObject交互，一定要创建一个Panel View。

1. 打开UserObject的Edit Window。从对象菜单中，选择Save Secured Version。

2. 在Save Secured Version对话框中，输入UserObject文件名，它会自动添加.vee扩展名。

如果已经保存包含UserObject的程序，或者已经通过File [image] Save Objects保存UserObject，您可能不想再次保存UserObject。如果您仍想保存有安全保护的版本，可以使用不同的文件名。

3. 在别人想使用有安全保护的UserObject时，他们需要选择File [image] Merge，然后选择有安全保护折UserObject的文件名。他们可以在程序中象任何其它对象一样，使用有安全保护的UserObject。


包括所有所需文件

创建发布包

在把程序分发到其它系统时，应该在VEE程序中嵌入仪器配置。在大多数情况下，嵌入式I/O配置是最佳选择。如果程序中没有嵌入I/O配置，那么可以在目标系统上编辑配置；参阅 配置VEE Pro RunTime 。

在程序(如果使用)中必须包括的文件有：

数据文件

用于编写的仪器驱程的*.cid文件

用于目的系统上没有安装的仪器驱程的*.cid文件

VXIplug&play 仪器驱程

IVI-COM 驱程

已经创建的图形文件

调用的DLL或汇编的函数

此外，必须包括.NET Framework再分发包 (dotnetfx.exe)，必须在安装运行时程序前安装这个包。如果没有安装.NET，那么不能安装VEE Pro运行时产品。

一旦拥有要求的所有文件，可以把它们复制到其它系统中。如果程序控制仪器，那么还必须安装安捷伦I/O库套件第14版或更高版本。

把所有文件放在分发媒体上

可以创建包含与程序一起使用的VEE Pro RunTime的分发媒体。

1. 把所有程序和配套文件复制到一张磁盘上。

2. 把VEE Pro RunTime设置文件从VEE光盘复制到可擦写光盘或Zip盘。这些文件位于VEE光盘的子目录runtime下。

3. 把安捷伦I/O库套件(第14版或更高版本)复制到另一张可擦写光盘(如果程序控制仪器)。

4. 编制产品文档。

您负责向最终用户或客户解释怎样从分发盘中安装所有文件。对VEE Pro RunTime，runtime子目录包含安装产品的setup.exe程序及安装.NET Framework的dotnetfx.exe文件。

如需与VEE Pro RunTime有关的更多信息，请参阅 关于Agilent VEE Pro RunTime产品 。


创建应用程序图标

您的用户可以双击程序图标，方便地运行VEE程序。为设置图标，在目的系统上采取下述步骤。如需详细了解程序信息，请参阅 MS Windows文档和联机帮助。

可以把程序快捷方式放在桌面上或放在工具栏的Start菜单下。具有安全保护的程序或没有安全保护的程序步骤类似。但是，在运行没有安全保护的程序时，一定要在快捷方式中使用veerun命令，以防止存取源代码。

桌面快捷方式

1. 在Windows Explorer中，在程序文件名称上点击鼠标右键，然后选择Create Shortcut。列表中出现文件名Shortcut to filename。

2. 把快捷方式文件名称拖到桌面上，出现快捷方式图标。

3. 对没有安全保护的程序(.vee)，改变快捷方式命令，在Target 命令中包括veerun。具有安全保护的程序(.vxe)自动使用veerun；如果想使用任何veerun选项，您只需改变命令。

a. 在快捷方式图标上点击鼠标右键，然后选择Properties，出现Shortcut Properties对话框。

b. 在Shortcut栏，改变Target，使其类似于：

"C:\Program Files\Agilent\VEE Pro RunTime 8.0\veerun.exe" MyApp.vee

一定要包括引号及所需的任何veerun选项。如需命令行选项列表，参阅使用命令行选项启动Agilent VEE。

如果Start in路径正确，在Target中不需指定程序路径。

c. 点击OK。

4. 为改变快捷方式图标的标记，点击图标，然后点击标记。输入新的标记。双击快捷方式，运行程序。

Start菜单快捷方式

1. 在Windows任务栏上，点击Start [image] Settings [image] Taskbar。

2. 在Taskbar Properties对话框中，在Start Menu Programs栏，点击Add，出现Create Shortcut对话框。

3. 输入命令，运行程序。输入命令时应使用引号。

对没有安全保护的程序 (.vee)，包括veerun及程序的文件名和各自路径。具有安全保护的程序(.vxe)自动使用veerun，因此命令中只需包括程序文件名和路径。没有安全保护的程序的命令应类似于：

"C:\Program Files\Agilent\VEE Pro RunTime 8.0\veerun.exe" "C:\Document and Settings\[username]\My Documents\VEE Programs\MyApp.vee"

包括所需的任何veerun选项。对具有安全保护的程序，需要在命令中包括veerun，以使用选项。如需命令行选项列表，请参阅使用命令行选项启动Agilent VEE。

点击Next，出现Select Program Folder对话框。

4. 选择放置快捷方式的文件夹。可以选择已有文件夹，也可以创建新文件夹。点击Next，出现Select a Title for the Program对话框。

5. 为程序快捷方式输入一个可以使用的名称。这个名称将出现Start菜单上，点击Finish。

6. 点击OK。选择Start [image] Programs，使用快捷方式。

另请参阅

使用命令行选项启动Agilent VEE


范例：Sequencer事务

Sequencer对象在其open view中显示由序列事务组成的列表。每项事务与其它类型的事务类似。下面的程序说明了Sequencer怎样使用事务执行表达式和调用函数。

这一程序在后台中有两个UserFunction没有显示：myRand1，它会在输入值中加一个从0到1的随机数字；myRand2，它会在输入中加一个从0到100的随机数字。在展开事务时，您会看到这两个UserFunction调用。如需与创建和使用UserFunction有关的进一步信息，参阅Help [image] Contents和Index [image] How Do I... Create Custom Objects and Functions [image] Creating and Using UserFunctions。

在点击一项事务时，对话框会"展开"事务，以便能够查看和编辑事务。下面的对话框显示了第一项事务test1：

序列事务既可是TEST事务，也可以是EXEC事务。在这一事务中，类型是TEST:，名称字段是test1，标称规范是1.25，使用RANGE:规范，范围是1 <= ... <= 1.5。

只有1到1.5的值才会通过测试。表达式myRand1(A)使用Sequencer的A输入端上的值作为其输入参数调用UserFunction。

该事务启用了登录，因此会自动创建一个名为Test1的局部变量，包含这一测试结果的日志记录。这个日志记录还作为Log输出端的一部分使用。IF PASS条件和IF FAIL条件都设置成THEN CONTINUE。也就是说，不管是否通过测试，在test1完成时，都将执行下一项事务test2。

DESCRIPTION字段是这一测试的注释区域。

备注

除"存档"目的外，SPEC NOMINAL值不用于RANGE或LIMIT测试。但是，如果使用基于TOLERANCE或%TOLERANCE值的测试，那么会计算相对于SPEC NOMINAL值的容限。

第二项事务test2也是一项TEST事务。

这第二项测试与第一项测试类似。它使用表达式myRand2(A)调用UserFunction myRand2。然后测试得到的值，看它是否位于1 - 51的范围内，标称规范为26。不管是否通过测试，Sequencer也会继续执行下一项事务。

第三项事务是一项EXEC事务：

与TEST事务不同，EXEC事务不会把函数结果与规范或范围执行比较。EXEC事务用来执行不要求通过/未通过测试的操作。

例如，EXEC事务可以调用一个例程，在执行TEST事务前设置外部配置，也可以在一系列测试后执行关机程序。(EXEC事务是指定"always pass"测试条件的快捷方式。)

在本例中，名为finish的事务把B的值返回Sequencer对象的Return输出端。由于没有执行任何测试，因此EXEC事务没有发生登录。

可以使用DESCRIPTION字段，简单地描述任何事务。

在运行程序时，三项事务按下述顺序执行。

登录的测试结果在Log输出端上输出并显示。结果作为Record数据类型(记录的记录)登录。在这种情况下，test1的值为1.396，通过测试；test2的值为85.05，没有通过测试。第三项事务在B输入上返回值，即字符串Done!。

启用登录的每项事务创建一条名为事务名称的日志记录。在本例中，为前两项测试启用了登录，因此名为Test1和Test2的变量包含着这些事务的日志记录。

日志记录中包含的字段在Properties对话框中定义。为进入登录配置，点击Sequencer对象菜单中的Properties，然后点击Logging一栏。在默认情况下，日志记录包含着Name, Result和Pass字段。

Test1和Test2局部变量名称可以用于Sequencer内部的任何表达式中，访问当前或以前执行的事务的结果。例如，Test3可能已经使用Test1.Result作为参数调用一个函数，以传送第一项测试的结果。也可以使用Test2.Pass作为表达式，如果Test2通过测试，那么其解为1，如果Test2未通过测试，那么其解为0。

还有一个局部变量thisTest，用来访问登录记录。thisTest的值总是与当前执行的事务的登录记录相同。您可以编写事务表达式，然后用于许多事务中，而不必包括每项事务的名称。

Sequencer上的Log输出端生成的数据结构是记录的记录，如下图所示。

Log输出端生成的记录对启用登录的每项事务包含一个字段，在本例中是Test1和Test2。每个字段是指定事务的日志记录，其中包含字段Name, Result和Pass。

这条记录的记录在Log输出端上提供，可以通过使用记录"句点"语法用于其它对象。例如，在这种情况下，表达式Log.Test1.Result会返回值1.396，如上图所示。同样，Log.Test1.Name会返回test1，Log.Test1.Pass会返回1。

Log输出端上登录的数据总是来自每项事务最后一次执行提供的数据。如果想登录每项事务每次执行的结果，在Sequencer Properties 对话框的Logging一栏上，把Logging Mode设置成Log Each Transaction To:。这个选项会在每项事务结束时调用指定函数(或表达式)。

如果想在发生时把测试结果登录到文件或打印机上，而不是一直等到Sequencer结束，那么也可以使用这个选项。局部变量thisTest可以作为登录函数的参数使用，传送刚刚结束的事务的日志记录。


范例：登录测试结果

下图显示了登录测试结果的范例，其中迭代器导致Sequencer一次次地重复测试及登录结果。

在本例中，For Count对象导致Sequencer执行其系列测试(前面的范例中的test1和test2)四次。例如，如果一条装配线上正在测试4个"小器件"，那么每次执行Sequencer会测试一个小器件。

Collector采集Log输出端中得到的序列记录，显示为一个记录数组。可以使用To File对象，使用WRITE CONTAINER I/O事务把这个数组输出到一个文件中，也可以使用DataSet。

可以把本例中的Collector输出视为由记录的记录组成的数组，如下图所示。

每个数组要素(Log[0], Log[1], 等等)代表着定序列器迭代一次，是记录的记录。登录的输出用于表达式分析。在本例中，Log[*].Test1.Result是来自数组的"核心范例"。事实上，Log[*].Test1.Result会返回由取值组成的数组(范例结果为1.396, 1.353, 1.319和1.016)。

备注

登录的数组并不是一个三维数组，而是由记录的记录组成的数组。这一点非常重要，因为记录的各个字段可能是不同的数据类型。Name字段可以是Text，而Result字段可以是Waveform，等等。此外，Test2.Result字段可以是Waveform，而Test1.Result字段则可以是Real值。

但是，各个字段在整个数组中的数据类型必须是统一的。例如，字段Test1.Result不能对Log[0]是Real值，对Log[1]是Waveform值。

下面的范例把上面的范例扩展到迭代Sequencer十次，并增加了部分登录数据分析。Formula对象中的表达式log[*].test1.result返回一个由10个要素组成的Real数组，其中包含test1的结果。然后以min(x), max(x), mean(x)和sdev(x)对象方式统计分析这个数组。

本例保存在范例目录下的文件manual44.vee Manual44.vee 中。


范例：登录测试结果

范例：登录到DataSet

可以使用DataSet存储登录的测试结果。在下面的程序中，Sequencer对象Log输出端连接到To DataSet对象上。

在For Count对象完成时，它导致From DataSet对象检索存储的DataSet (myDataSet)。From DataSet配置成从myDataSet中检索所有记录，但会针对条件Rec.test1.pass AND Rec.test2.pass测试每条记录。只有在该记录的test1和test2都通过测试时，才会检索某条记录。

在检索的记录中(如有)，表达式Rec[*].test1.result会返回所有test1.result记录字段，然后统计分析这些字段。(如果没有记录满足Rec.test1.pass AND Rec.test2.pass，那么这个程序会发生错误。)

本例保存在范例目录下的文件Manual45.vee 中。


范例：分箱

下面的范例测量炭质电阻器的电阻值。

以前，炭质电阻器是使用相当不精确的工艺制造的，然后再进行测试、分拣和标记。那时选用的是标准电阻值(如220W, 270W和330W)，以10%的容限交迭，以便能够使用每个电阻器。如果电阻器值超出220W的10%，那么它会标注为270W电阻器，依此类推。

下图显示了一个程序，其中Sequencer调用一个UserFunction，返回一个电阻值。然后Sequencer运行一系列测试，确定电阻器满足哪个标称电阻值及容限百分比。也就是说，定序器返回一个结果，确定把电阻器放在哪个箱子中。

使用Sequencer调用UserFunction的优势之一是可以替换不同的UserFunctions。在本例中，我们使用UserFunction (simResist)，在开发过程中在预计范围内返回一个随机电阻值。可以替换另一个执行Instrument I/O、返回实际电阻值的UserFunction。

解决这个问题最简单的方法是使用一系列扩展的序列事务，每个事务针对标称值和容限测试电阻值。

在本例中，第一个序列事务 (test1)使用表达式simResist()调用UserFunction simResist。(这个UserFunction不要求输入)。下面是第一个序列事务。

test1进行测试，查看simResist返回的电阻值是否位于标称值330W的±2%范围内。如果是，那么在Return输出端会返回两个要素的Real数组[330 2]，To String对象会把这个值转换成字符串330 Ohm, 2%。如果未通过测试，那么Sequencer会进入下一个测试。

第二项事务test2的工作方式与test1类似，但它不是再次调用simResist，而是FUNCTION字段中包含表达式test1.result。这是第二项序列事务。

备注

启用登录的任何事务会使用与测试相同的名称创建一个"local" Record变量。这条记录包含为登录记录指定的字段。对事务 test1，表达式test1.result会返回test1中调用的函数返回的值。

在本例中使用表达式test1.result的原因有两个。第一，通过在事务test2到test9中使用test1.result，我们可以保证每项事务都使用相同的函数结果，即使我们以后改变test1，调用一个不同的函数。

最重要的是，在本例中，每次在调用UserFunction时，会返回一个新的电阻值。我们想对后续标称值和容限测试原始电阻值，而不是新值。因此，事务test2到test9都在FUNCTION字段中包括表达式test1.result。这些事务的工作方式与第一个事务类似，如果通过测试，那么会返回相应的数组([330 5], [330 10], [270 2], 等等) 。

如果没有通过测试，前八项测试会继续进行下一个测试。但是，如果所有测试都没有通过，我们需要指示。因此，test9配置成IF FAIL THEN ERROR。Error输出端导致执行题为Error Condition的字母数字画面，显示文本Out of Range。

尽管这种方法很简单，但其效率并不是很高。您需要创建数量相当多的序列事务，测试多个电阻值，而且在每种情况下都有三个容限。下图显示了改进版本的"分箱"范例。

本例保存在范例目录下的文件Manual46.vee 中。

这一程序的部分要点包括：

• 这一程序使用两个Sequencer对象。第一个对象(标为Test Bounds) "重用"第二个对象中的测试(标为Test Value & Tolerance)。

• 程序左上角中的Real64数组包含五个要素，每个要素代表着一个标准电阻值。但是，在本例中可以扩展取值列表。不管数组要素数量是多少，TotSize(x)函数都会返回该数字，以便For Count对象迭代正确的次数。Formula对象中的表达式R[i]负责进行索引。

• 在名为Test Bounds的Sequencer中，第一项事务(test1)使用表达式simResist()调用UserFunction simResist，如下图所示。

返回并测试仿真的电阻测试值，查看是否至少为数组中最低值(150W)的90%。(序列事务中的任何取值字段都可能会包含一个表达式，如min(a)*.9。)

第二项事务 (test2)测试查看取值(test1.result)是否小于等于数组中最高值(330W)的110%。下图显示了这一事务。

如果这两项测试都没有通过，那么会发生错误。

• 如果确实发生错误，那么名为Error Condition的UserObject会使用一个Triadic表达式，确认是显示Out of Range: LOW还是显示Out of Range: HIGH。UserObject配置为Show Panel on Exec，如果发生任何一个错误条件，那么会“弹出”一个画面显示错误。这会在每运行程序几次发生一次，因为UserFunction simResist返回100–400范围内的随机值。(如果想继续，按弹出对话框中的OK。)

• 第一个Sequencer中的事务 test1是唯一调用UserFunction simResist的事务。(test2包括表达式test1.result，而不是simResist) 这一点在本例中必不可少，因为我们想在一个电阻值上运行多项测试。否则，每次调用UserFunction时会返回一个新值。但还有一个原因。

由于UserFunction simResist只调用一次，因此可以用调用不同的UserFunction代替它。范例(manual46.vee)中包含第二个UserFunction，称为measResist，它使用一个Panel Driver调用配置为进行电阻测量的HP 3478A数字电压表。如果有一台HP 3478A仪表，那么通过GPIB连接仪表，把test1中的FORMULA字段变成表达式measResist()，运行程序。

• 不管是获得仿真电阻值还是测得电阻值，都会显示Test Bounds返回值，设置为一个全局变量(globalOhms)。例如，在Sequencer中标为Test Value & Tolerance的三项事务中，每项事务都使用表达式globalOhms调用这个全局变量。下图显示了扩展的第一项事务。

如果一项测试通过，那么会输出相应的实数数组(如[220 2])。To String对象把数据转换成一个字符串(如220 Ohm, 2%)。根据需要多次执行Sequencer，直到找到Bin Sort结果。

• 由于我们在两个Sequencer中都没有使用Log输出端，因此我们删除了这个输出端，以加快执行速度。

• 如果想查看这个程序的流程，试着打开Show Execution Flow和Show Data Flow，多次运行这个程序。

如需使用Sequencer的进一步范例，参阅范例目录。


了解VEE Execute Program对象

除ActiveX自动化外，还有两种方式从VEE运行使用其它语言编写的程序：

1 使用Execute Program对象退出VEE，运行另一个程序、应用或操作系统命令。这种方法最通用、使用最简便。

2 在PC上通过动态链接库把其它语言汇编的函数链接到VEE上。尽管这执行起来略微困难，但它可以明显提高性能。如需与动态链接库有关的更多信息，请参阅“使用动态链接库"。

Execute Program对象位于I/O菜单中。注意，Execute Program对象不使用I/O处理与程序通信，因此不用增加数据输入端和输出端，把数据传送到汇编的程序中。

另请参阅

执行程序 使用Execute Program对象 使用系统命令 编写可以简便移植的程序


使用Execute Program对象

下图显示了PC上的Execute Program对象。

使用Execute Program对象从VEE中运行：

• 使用其它语言汇编的程序

• *.BAT或*.COM文件

• MS DOS系统命令，如dir

• 带有识别的扩展名的任何文件或URL。在文件中调用“open”操作。如果“open”操作不存在，那么将对文件调用默认操作。URL实例是：http://www.agilent.com/find/vee。

Execute Program对象中的字段如下：

字段名称 | 说明
Run Style | 确定窗口大小。Normal指明标准窗口，Minimized指明图标，Maximized指明最大窗口。Working directory是保存与程序有关的任何文件的目录。
Wait for prog exit | 指明什么时候启动序列端。 • 在设为Yes时，直到程序执行结束时才启动序列端。 • 在设为No时，在执行指定程序前启动序列输出端。注意在启动文件或URL时，如果文件或网站加载到已经运行的应用程序中，只有应用程序存在时VEE才会等待。
Prog with params | (Program with parameters) 这个字段保存着在DOS提示符下输入的相同单词。例如，为在C中运行程序，输入可执行文件名myprog.exe。(可以省略扩展名.exe。) • 如果程序有多个参数，那么会在可执行文件名后面加一个连字符，如： myprog -param1 -param2 • 为运行DOS系统命令，先运行DOS命令解释程序，并带有/c选项。例如，对Windows 98，输入命令command.com /c <系统命令>。 • 对Windows NT 4.0、Windows 2000和Windows XP，输入命令cmd /c <系统命令 > 这个选项告诉命令解释程序把/c后面的字符串作为系统命令读取。

另请参阅

执行程序, 使用系统命令, 编写可以简便移植的程序


使用系统命令

为调用使用另一种语言汇编的程序，可以在Execute Program对象中输入可执行文件及任何参数。

然而，为执行MS DOS系统命令，必须先运行DOS命令解释程序。参阅实验: 使用系统命令。

另请参阅

执行程序, 使用Execute Program对象, 编写可以简便移植的程序


编写可以简便移植的程序

VEE在Function & Object Browser [image] System Information中包括下述系统信息对象。这些对象也可以作为函数使用。

Function & Object Browser中常用的增强程序移植能力的系统信息函数如下：

函数名称 | 说明
installDir | 指明VEE安装目录。
whichOS | 确定操作系统，发出其中一个下面的字符串：Windows_98, Windows_2000, Windows_NT, Windows_ XP。 当包含其他语言编写的程序时，程序可以基于这些结果出现分支。例如，查看examples\manual目录下的manual49.vee，查看程序使用whichOS()，保证导入正确类型的库。在PC上，它将导入一个动态链接库。
whiclatform | 确定VEE运行的硬件系统，然后返回一个字符串，指明该平台。
whichVersion | 指明VEE版本，用于程序维护和调试。

另请参阅

执行程序， 使用Execute Program对象， 使用系统命令


在Agilent VEE中包括MATLAB Script对象

在Agilent VEE中使用MATLAB Script对象

在VEE程序中使用MATLAB对象时，它看上去类似于VEE Formula对象。有两种方式在程序中添加MATLAB Script对象：

1 选择Device [image] MATLAB Script，点击把对象放在程序中，这会创建一个默认的MATLAB Script对象，可以根据自己的目的编辑这个对象。

2 选择Device [image] Function & Object Browser，选择Type: MATLAB Functions。选择一个预先定义的MATLAB函数，点击Create Formula。点击把对象放在程序中。下图显示了可以添加到VEE程序中的部分预先定义的MATLAB函数。

注意，每个对象的名称是MATLAB Script<函数名称>，帮助您把它与其它VEE公式对象区别开来。每个对象已经包括它将执行的函数，以及可能需要的输入端和输出端，就象内置VEE公式对象一样。还可以编辑MATLAB Script对象，就象编辑任何其它VEE对象一样。

备注

如需与MATLAB函数有关的更多信息，从主VEE窗口中选择Help [image] MATLAB Script [image] Help Desk。

另请参阅

处理数据类型 在Agilent VEE中使用MATLAB Script。

Copyright (c) 1991-2006年安捷伦科技公司版权所有


处理数据类型

作为MATLAB对象的输入和输出，只支持VEE数据类型的一个子集。

VEE自动转换某些一维数组，因此对同时包含VEE函数和MATLAB函数的程序更加方便。例如，在输入MATLAB Script对象时，VEE一维文本数组将自动转换成两维字符数组，在从MATLAB Script对象输出时，来自MATLAB Script对象的字符一维数组将自动转换成Text Scalar。

备注

如需VEE数据类型和MATLAB数据类型之间自动转换的完整列表和说明，请参阅MATLAB脚本。

还可以使用输入端数据类型限制，保证来自另一个对象的数据输入转换成支持的类型，如下例所示。

1 选择Data [image] Constant [image] Int32，点击放置对象。把值变成7。复制对象，把第二个Int32放在第一个Int32下面。把其值变成20。

2 选择Device [image] MATLAB Script，把该对象放在常数对象的右面。

3 选择Display Alphanumeric，把它放在MATLAB Script对象的右面。

4 把输出端从顶部Int32对象连接到MATLAB Script对象的输入端A。把底部 Int32对象的输出端连接到MATLAB Script对象的输入端B。把MATLAB Script对象的输出端连接到Alphanumeric对象的输入端。

运行程序，生成一个VEE Runtime Error，表明预计输入是Real64, Complex, Waveform或Text，但收到的输入是Int32。

为避免这类错误，改变MATLAB Script对象上的输入端数据类型。

5 双击A端，打开Input Terminal Information对话框。点击Required Type:显示一个下拉菜单，选择Real64，点击OK。双击B端，也把它变成Real64。

6 运行程序。现在Int32数据在输入端自动转换成Real64，然后传送到MATLAB。

另请参阅

在Agilent VEE中使用MATLAB Script， MATLAB Script。


使用ActiveX Automation

列出ActiveX Automation类型库

为查找计算机上安装的Automation对象，点击Devices [image] ActiveX Automation References。

备注

如需与ActiveX Control References有关的信息，请参阅Help菜单下Contents and Index中的How do I ... build an Operator Interface。另请参阅 “Active X Automation Server”。

Devices [image] ActiveX Automation References列出了PC上安装的Type Libraries。作为Automation Server的每个程序和ActiveX Component都可以注册一个Type Library。VEE显示PC上提供的库。这些库包括与ActiveX客户端看到的程序或组件功能有关的信息。

类型库一般由一个类集合组成。某些类可以由编程人员创建。其它类一直由程序或组件创建。类由属性、方法和事件组成，但这些属性、方法和事件不一定全部存在。Type Library同时为编程人员和VEE环境提供了使用ActiveX接口利用程序和组件所需的信息。

在ActiveX Automation References框中的Type Library旁边打勾时，库对象可以用于VEE程序中。例如，下图中勾选了Microsoft Excel 9.0。

在Agilent VEE中创建和使用ActiveX程序

VEE对ActiveX程序包括一个称为Object的数据类型。数据类型指定为Object的VEE对象是指向Automation Server保存的某个东西或某些数据的指针。例如，一个Object可以指向MS Excel内部的一个工作表，或指向该工作表内部的一个单元格。(在技术上，一个Object是指向MS Excel或Server返回的IDispatch 接口的指针。)

例如，如果选择Data [image] Variable [image] Declare Variable，把Name设为App，把数据类型设为Object，那么可以使用变量App，直到ActiveX Automation对象，如Excel Automation Server。下图是数据类型Object的范例：

使用ActiveX语句执行操作

为与ActiveX Automation服务器通信，如Excel Automation Server，在VEE Formula对象中输入ActiveX命令。下例显示了名为Set Up Excel Worksheet的VEE Formula对象。它包含一个命令列表，把Excel工作表设置成显示测试结果。

上例使用标准Microsoft Visual Basic语法，创建命令或语句。命令和语句执行三种操作：获得属性，设置属性，调用方法。

• 获得属性语句通常指获得某类数据。语法是<对象>.<属性>。例如，sheet.application获得表格对象的应用属性。

• 设置属性语句通常指把某个数据类型设成等于某种东西。语法是<对象>.<属性> = <属性类型>. 例如，object.property= MaxSize会设置一个属性。

• 调用方法会调用一个方法。一个方法会请求对象执行一项操作。方法拥有多个参数，允许传送和返回数据。语法是 <对象>.<方法>(参数)。

备注

数据类型Objects的语法与VEE获得Record字段rec.field及调用UserFunction, myLib.func()的语法类似，因此为变量指配描述名称非常重要。

使用CreateObject和GetObject

注意，上一节中设置Excel工作表的其中一个语句包含CreateObject()函数调用。CreateObject()和GetObject()是VEE Function & Object Browser中的函数，它们是为把指针返回到VEE中的ActiveX对象专门设计的。

例如，CreateObject("Excel.Sheet")启动Excel，把一个参考返回其中的工作簿。(Microsoft语句“sheet”会返回一个工作簿。)使用GetObject()获得正在运行的Excel中已经存在的某个东西或某些数据，或把一个文件加载到正在运行的Excel中。

CreateObject和GetObject位于Device [image] Function & Object Browser, Type: Built-in Functions, Category: ActiveX Automation下。下图是CreateObject和GetObject范例。

另请参阅

实验6-1: 把Agilent VEE数据发送到MS Excel

实验6-2: 根据MS Excel模板创建Agilent VEE

实验6-3: 使用MS Word编制Agilent VEE报告


EE Excel Library简介

VEE Excel Library简介

2005年5月，安捷伦收购了PASS科技公司的Vxl产品。它现在称为Excel Library，是在Microsoft Excel和VEE之间建立透明链接的一个UserFunction库。过去在Microsoft Excel中使用ActiveX获得基本功能通常十分困难，而现在则可以简便地在VEE和Microsoft Excel之间传送数据，使用Microsoft Excel图表，格式化Microsoft Excel数据。

VEE Excel Library要求Microsoft Office 2000或更高版本。


初始化VEE Excel库

在使用 VEE Excel Library 之前，必须用Initialize先导入UserFunction库。

位置

Excel [image] Initialize Excel Library


设置VEE Excel Library会话默认值

Settings UserObject用来为VEE Excel Library会话定义默认值。UserObject有两个对象：Call xlLib.Settings和Record。

Open View参数

Record对象定义设置，Call xlLib.Settings对象调用一个UserFunction实现这些设置。下面列出了Record对象的open view参数：

  • Visible -- 在VEE Excel Library操作过程中能够看见Microsoft Excel。在希望把用户注意力放在VEE程序时，在操作人员界面中把它设置为False。默认值为Visible。Print Preview也可以看到Excel。

  • WindowMode -- 指Microsoft Excel程序窗口。选项包括：Normal (打开Microsoft Excel窗口，但不最大化), Minimized和Maximized。默认值为Normal。

  • BookWindowMode -- 指选定工作簿的Microsoft Excel工作簿窗口。选项包括：Normal (打开工作簿窗口，但不最大化), Minimized和Maximized。默认值为Normal。

  • ArrangeWindows -- 如果打开多个工作簿，这会排列其显示顺序。选项包括：Cascade, Horizontal, Tiled,或Vertical。只有在BookWindowMode设置为Normal时才能使用这个参数。默认值为Cascade。

  • Error Action -- 确定VEE Excel Library怎样处理错误情况。默认值为RaiseError。选项包括：

  • RaiseError -- VEE Excel Library在程序处理器内部生成错误。这是推荐设置。

  • Quit -- VEE Excel Library关闭所有工作簿；如果在发生错误前还没有保存工作簿，那么会丢失新数据。最后，VEE Excel Library会卸载Microsoft Excel会话。

  • OKCancel -- 出现一个对话框，超时周期为30秒。如果选择OK，那么会忽略错误。如果选择Cancel，那么会生成错误。如果过了超时周期，也会生成错误。

  • Ignore -- 忽略错误。错误可能会再次发生，因此最好在用户能够干预时使用这一选项。

  • DisplayAlerts -- 默认设置是True。在出现时会显示Microsoft Excel消息对话框。为减少对话框数量，选择False。注意：把DisplayAlerts设置为假可能会导致Microsoft Excel挂起。如果想处理Microsoft Excel重写提示，参阅'Save Workbook As'对象。

备注

在使用Select Workbook时，这些设置应用到选定的工作簿中。

在这些项目遵循Settings项目时，设置不适用于Open Workbook或New Workbook。只有在Settings遵循Open或New时，才会影响工作簿，而且只影响直接的工作簿。

在创建和调试程序时，应把Settings -> Visible参数设置为True。如果程序失败或未能正确退出Microsoft Excel会话，那么可能会激活多个Excel会话。这些会话会耗尽相当大的一部分内存，可能会导致Excel操作错误。如果发生这种情况，应使用Windows Task Manager删除不需要的会话。

位置

在VEE主菜单上Excel [image] Settings


退出VEE Excel Library插件

Call xlLib.QuitExcelLibrary对象调用一个UserFunction，关闭所有工作簿，卸载Microsoft Excel会话，退出VEE Excel Library插件。

注意：在退出Excel Library时，不会自动保存工作簿。应调用Save All Workbooks或Save Workbook As，以免丢失已经修改的Excel工作簿中所作的任何变化。

位置

从VEE主菜单中Excel [image] Quit Excel Library


打开新的工作簿

Open New Workbook菜单选项用来创建一个新的Microsoft Excel工作簿。

用途

Call xlLib.NewWorkbook对象调用一个UserFunction，创建一个新的Excel工作簿。对该Book，工作簿采取默认的名称，如Book8。为保证工作簿采取相应的工作簿，在xlLib.NewWorkbook对象后面加上一个SaveWorkBookAs对象，或以后在程序中使用SelectWorkbook选择工作簿，然后使用SaveWorkBookAs。

位置

从Excel的主菜单中 [image] New WorkBook

另请参阅

把工作簿保存成新名称和新格式, 打开现有的工作簿


打开现有的工作簿

Open a Workbook打开一个Microsoft Excel工作簿文件。

Open View 参数

Open Workbook菜单选项包含一个对象File Name Selection和一个UserObject OpenWorkbook。在OpenWorkBook UserObject内部有一个对象Open Workbook和一个UserFunction调用Call xlLib.OpenWorkbookRW。

File Name Selection对象是Data [image] Dialog [image] File Name Selection上的一个标准对象。如需与这个对象有关的更多信息，请参阅VEE联机帮助。

Open Workbook 的open view参数是：

  • ReadOnly -- 这会设置文件是以只读方式打开还是可以写入的方式打开。可能的值是True或False。默认值是False。

位置

从Excel的VEE主菜单中 [image] Open Workbook

另请参阅

打开新的工作簿和File Name Selection


保存工作簿

Save Workbook菜单项会以重写的方式保存工作簿。

用途

Call xlLib.SaveWorkBook UserFunction保存工作簿，它会重写已有的工作簿文件。

备注: 这并不是'保存所有工作簿'功能，而是只保存活动的工作簿。

如果Settings [image] DisplayAlert设置为False，那么在重写已有的文件时系统不会提供提示信息。

位置

从VEE主菜单中Excel [image] Save Workbook


把工作簿保存成新名称、新格式或新位置

这一功能可以使用新名称、新格式或在新位置保存活动的工作簿。

用途

SaveWorkbookAs UserObject用来使用新名称、新格式或在新位置保存工作簿。在Select Workbook后，调用Save Workbook As。Save Workbook As只适用于活动的工作簿。

在SaveWorkbookAs的输入端上，设置一个文本常量或带有整个路径和文件名的公式(包括文件扩展名)。这将是新的文件名。

注意：如果Settings对象中的DisplayAlerts设置为False，那么可能会在Microsoft Excel不弹出警告对话框的情况下覆盖已有文件。

Open View中提供了两个对象：Call xlLib.SaveWorkbookAs和Workbook Type。

Workbook Type记录有一个Workbook Type按钮。Workbook Type选项有：

  • Normal -- Normal用来把文件保存到Microsoft Excel 2000及更高版本中。

  • CSV --逗号分隔值文件。除分隔符是逗号外，这个文件的特点与Text文件相同。

  • MSDOSCSV -- MS-DOS逗号分隔值文件。

  • WINDOWSCSV -- Windows逗号分隔值文件。

  • Text -- 文本文件格式保存活动的工作表的单元格中显示的文本和值。数据列用制表符分隔，每个数据行用回车结束。包含逗号的单元格用双引号引起来。所有格式、图形、对象和其它非文本工作表内容会丢失。将保存每个单元格中的所有行以及数据和所有字符。如果一个单元格有一个公式，但没有值，那么这个公式会保存为文本。欧元符号会转换成问号。

  • TextPrinter -- 输出一个对打印机准备就绪的文本文件。在新的文本文件内，数据的相对位置与电子表格中相同。Text输出中提到的所有其它规则同样适用。

  • Excel9795 -- 输出兼容Excel 97/95格式的电子表格数据。

  • xlHTML -- xlHTML是一个转换器，可以把Excel电子表格数据变成HTML。

备注

如果企图SaveAs到相同的文件名，那么会出现一个对话框。如果选择否，那么会得到VEE运行时错误。为避免这种错误，总是提供唯一的名称，或使用I/O菜单下的VEE To File对象。在写入文件前，使用To File及Execute Delete事务，防止发生错误，并防止出现对话框、要求用户交互。

位置

从Excel的VEE主菜单中 [image] Save Workbook As


选择工作簿

这个UserObject从当前打开的工作簿中选择一个Microsoft Excel工作簿。

用途

使用Open Workbook对象或后面跟着Save Workbook As对象的New Workbook，打开一个工作簿。以后在程序中使用SelectWorkbook对象选择要处理的工作簿。在输入端，放一个文本常数或一个公式及选中的工作簿的全名。工作簿名称可以是打开的工作簿的整个路径名称或工作簿名称(包括.xls扩展文件名)或新增的工作簿名称，如"Book1"。选中的工作簿变成活动的工作簿。

备注

VEE Excel Settings应用到选中的工作簿中。

为进行调试，可能要枚举工作簿。这一功能列出当前打开的工作簿，它提供了一个很好的途径，来区分选中的工作簿能否使用。参阅Enumerations [image] Enumerate Workbooks。

位置

从VEE主菜单中Excel [image] Select Workbook


关闭工作簿

Close a Workbook和Close All Workbooks用来关闭打开的一个或所有Microsoft Excel工作簿。

用途

Close Workbook用来关闭当前选中的工作簿，而Close All Workbooks则结束所有打开的工作簿会话。

注意：在Close Workbooks时，不会自动保存工作簿。应调用Save All Workbooks或Save Workbook As，以免丢失已经修改的Excel工作簿中所作的任何变化。

位置

从VEE主菜单中Excel [image] Close Workbook或Excel [image] Close All Workbooks

另请参阅

把工作簿保存成新名称、新格式或新位置或保存工作簿


打开一个新工作表

使用New Sheet菜单选项，在选定的工作簿中创建一个新工作表。

用途

创建一个文本常数或一个包括新工作表名称的公式(在名称中不要使用* % $ # @ ! .)。把这个文本常数或公式连接到NewWorksheet UserObject的输入端。还可以发送一个空字符串("")，让Excel自动命名工作表。

新工作表自动变成活动的工作表，不需进行工作表选择操作。

备注

NewWorksheet只能用于活动的工作簿。

位置

从VEE主菜单中Excel [image] New Sheet


选择工作表

使用Select Sheet菜单选项选择一个工作表。

用途

在输入端上使用一个文本常数或公式，提供一个工作表名称。这个工作表变成打开的工作簿中活动的工作表。

位置

从VEE主菜单中Excel [image] Select Sheet


枚举Microsoft Excel工作簿、工作表和功能

主菜单选项Enumerations有四个选项：Workbooks, Worksheets, Charts和Names，它用来创建这些项目的列表和计数。

用途

所有enumeration对象的结构相同。它们调用一个UserFunction，这个UserFunction有两个输出端。上方的输出端用来把打开的项目名称输出到一维数组中；下面的输出端用来在上方输出端上提供数组大小。

在程序开发过程中，在需要确定项目是否提供时，特别适合使用枚举。例如，确定是否可以选择一个工作簿，是否存在工作表、图表或命名范围。

在使用非英文版Microsoft Excel时，也适合使用枚举。Microsoft Excel对不同语言的工作表使用不同的名称。通过Enumerate Worksheets，可以捕获工作表的名称。参见examples\ExcelLibrary\BarChart.vee下的范例BarChart.vee ，检查 "Localize..."用户对象。

位置

从Excel [image] Enumerations [image] Enumerate Workbooks下的VEE 主菜单中
从Excel [image] Enumerations [image] Enumerate Worksheets下的 VEE 主菜单中
从Excel [image] Enumerations [image] Enumerate Charts下的 VEE 主菜单中
从Excel [image] Enumerations [image] Enumerate Names下的 VEE 主菜单中

另请参阅：

实验8-2: 使用工作簿枚举


格式化文本

Format Text菜单选项用来格式化单元格中的文本、范围、命名范围、行或列。

用途

FormatText UserObject有一个输入端，用来捕获要格式化的区域。可以为FormatText UserObject提供一个单元格、一行、一列、一个命名的范围或一个范围。单元格的地址格式是a9 (不分大小写)，范围格式是a9:j22。

FormatText UserObject包含UserFunction xlLib.FormatText和Text Format Settings对象调用。Text Format Settings对象用来管理数据在单元格中的外观，如字体、黑体、斜体等字体特点、对齐及部分其它特性。如需更多信息，请参阅open view参数。

参阅格式化单元格，了解怎样格式化单元格背景参数，如背景颜色、格线和数字格式。

Open View参数

Text Format Settings记录对象的open view参数如下：

  • FontName -- 在默认情况下，字体是Courier New。您只需在FontName字段中输入字体名称，就可以把字体设置为系统支持的任何字体。

  • ForeColor -- 在默认情况下，前景颜色是黑色。可以把前景颜色设置成46种不同颜色中的任何颜色。

  • Bold -- 可以是真或假。默认值为True。

  • Italic -- 可以是真或假。默认值为False。

  • Underlined -- 可以是真或假。默认值为False。

  • Size -- 点的大小范围为8 - 72点。默认值为14点。

  • HorizontalAlignment -- 可以选择左对齐、居中、右对齐、调整和大致对齐。默认值为left。使用General格式格式化的数字显示方式与输入时相同。但是，如果单元格没有足够宽度来显示整个数字，General格式会对带小数点的数字进行舍入，对大的数字使用科学符号。

  • VerticalAlignment -- 可以选择顶部对齐、底部对齐和中间对齐。默认值为bottom。

  • WordWrap -- 把文本值包在单元格内部。文本不会"溢出"到相邻的空单元格中。Wordwrap只能处理文本值。

  • ShrinkToFit -- 缩小文本字号，以适合单元格。只有在关闭WordWrap且单元格太小、不能放在当前字号的当前值时，才能使用这一选项。

位置

从Excel的VEE主菜单中 [image] Formatting [image] Format Text

另请参阅

格式化单元格和范例FormatTextAllColors.vee


格式化单元格

使用Format Cells菜单选项把单元格格式化要求传送到Excel。

用途

Format Cells UserObject把单元格格式化传送到Excel。可以定义要格式化的一个单元格、一列、一行、一个指明范围或一个单元格范围。

有一个输入端，可以为要格式化的一个或多个单元格提供一个值。

UserObject内部是一个xlLib.FormatCells调用和一个称为Cell Settings的对象。Cell Settings包含编制一个或多个单元格使用的所有格式化选项。

参阅格式化文本，了解怎样格式化单元格前景参数，如前景颜色、字体和对齐方式。

Open View参数

  • BackColor -- 单元格的背景颜色，可以从46种不同颜色中选择。默认值为SeaGreen。

  • NumberFormat -- 应用到数字值的格式。可以选择指数符号, 掩码(###.0)(其中取值是可选的), 0 (其中相应位置会出现一个数字或零), 百分比, 货币, General或Custom。Custom是默认的数字格式。使用General格式格式化的数字显示方式与输入方式相同。如果单元格不够宽不能显示整个数字，General格式会对带小数点的数字进行舍入，对大的数字使用科学符号。如果想了解非英文版Microsoft Office的相关问题，请参阅下面的?#22791;注?#12290;

  • CustomNumberFormat -- 已经定义使用的自定义数字格式。

  • BorderEdges -- 有多种方式显示单元格的边框。

  • Grid -- Grid采用Excel电子表格单元格布局，每个单元格都有顶部、底部和侧面。

  • GridThickThin -- GridThickThin把单元格重新格式化成细边框，即使该单元格已经使用中等边框或粗边框。

  • Outline -- Outline采用Excel电子表格单元格布局，每个单元格都有顶部、底部和侧面。

  • LeftRight -- LeftRight设置单元格左侧和右侧的边框。

  • TopBottom -- TopBottom设置单元格顶部和底部的边框。

  • Top -- Top设置单元格顶部的边框。

  • Bottom -- Bottom设置单元格底部的边框。

  • Right -- Right设置单元格右侧的边框。

  • Left -- Left设置单元格左侧的边框。

  • BorderThickness -- 边框粗细有三种：Thin, Medium和Thick。Thin的单元格边框比通过Excel的Page Setup菜单选择Print Grid Lines的边框颜色要暗。

  • Pattern -- Pattern描述了单元格的背景，其可以以多种不同方式显示。

  • Solid -- Solid是单元格采用一致的背景。

  • LightDots -- LightDots是带点的背景，这些点的大小与细边框相同。

  • MediumDots -- MediumDots是带点的背景，但这些点的大小与中等边框相同。点的密度要高于LightDots选项。

  • Checkered -- Checkered是单元格中带有小方格的背景。这些小方格是与单元格边框成对角线的许多平行直线相交得到的。

  • Grid -- Grid也是单元格中带有小方格的背景。这些小方格是与单元格的水平边框和垂直边框平行的许多平行直线相交得到的。

  • VerticalBars -- VerticalBars是单元格中带有竖条的背景，这些竖条与单元格两侧平行。

  • HorizontalBars -- HorizontalBars是单元格中带有横条的背景，这些横条与单元格的顶部和底部平行。

  • CrissCross -- CrissCross是多个小x相连的背景。其看上去与Checkered选项非常类似，但x的密度要厚。

备注

NumberFormat可能不能在某些非英文版Microsoft Office中工作。特别是，俄语Office 2003不能接受"General"之外的任何NumberFormat值。由于某些其它非英文版Office能够正确运行，如日语、德语、西班牙语和瑞典语，因此似乎这个问题是俄语Microsoft Russian Excel独有的问题。补救方法是自己在Formula中设置NumberFormat，如使用本地化千和小数点分隔符：'aRange.NumberFormat = "0,00"'。

位置

从 Excel的 VEE主菜单中 [image] Formatting [image] Format Cells

另请参阅

参阅范例FormatCellsAllColors.vee


自动调整栏

使用Auto Fit Columns根据数字值或短文本描述调整栏宽。输入端可以接受单元格、单元格范围或命名范围。这是为短文本值设计的，而不是为冗长的描述设计的。

位置

从VEE主菜单中Excel [image] Formatting [image] Auto Fit Columns


移动到一个相对单元格地址

从活动的单元格地址移动到相对于起点的一个地址。

用途

Cell Relative有三个输入端。上面的端是活动的单元格地址。中间的端是把单元格指针上移或下移的距离。下面的端是把单元格指针左移或右移的距离。

在默认情况下，正数把单元格指针向右或向下移动，负数把单元格指针向上或向左移动。

位置

从VEE主菜单中Excel [image] Navigation [image] Cell Relative

另请参阅

移动到一个绝对单元格地址


移动到一个绝对单元格地址

CellAbsolute对象把活动的单元格地址移动到电子表格上某个位置。这个位置并不是相对于任何其它位置，而是在CellAbsolute对象中直接指明。

用途

CellAbsolute有两个输入端。上面的端与电子表格的中列相符，下面的端与电子表格中的行相符。这两个端都预计一个数字值。

有一个输出端。这个端可以与AlphaNumeric对象一起使用，或把数据推送到一个输入端，如DataToCells对象的地址端。

位置

从VEE主菜单中Excel [image] Navigation [image] Cell Absolute

另请参阅

移动到一个相对单元格地址


查找第一个空行

FindFirstEmptyRow对象在提供的范围内查找第一个空行。

用途

有一个输入端。这个端用来定义搜索空列的范围。例如， "A1:H60"将搜索第1 - 60行中的第一个空行。

如果在指定范围内存在一个空行，那么会返回列的编号。否则，FindFirstEmptyRow对象返回-1。

还可以使用在Excel电子表格中已经定义的指明范围作为输入参数。只有VEE Execution Mode 6或更高模式才支持这一操作。

位置

从VEE主菜单中Excel [image] Navigation [image] Find First Empty Row

另请参阅

查找第一个空列


查找第一个空列

FindFirstEmptyColumn对象在提供的范围内查找第一个空列。

用途

有一个输入端。这个端用来定义搜索空列的范围。例如，"A1:H60"将搜索第A - H列中的第一个空列。

如果在指定范围内存在一个空列，那么会返回列的编号。否则，FindFirstEmptyColumn对象会返回-1。使用Excel [image] Navigation [image] Alpha Column from Numeric Column，转换FindFirstEmptyColumn返回的数字列地址，创建有效的行/列地址。

还可以使用在Excel电子表格中已经定义的指明范围作为输入参数。只有VEE Execution Mode 6或更高模式才支持这一操作。

位置

从VEE主菜单中Excel [image] Navigation [image] Find First Empty Column

另请参阅

查找第一个空行, 从数字列转换成字母列


Alpha Column from Numeric One

如果有一栏数字输入，把它转换成相应的字母Excel栏参考值。

位置

从VEE主菜单中Excel [image] Navigation [image] Alpha Column from Numeric Column

另请参阅

确定单元格行和列的数字值


确定单元格行和列的数字值

返回与Excel样式的单元格地址输入对应的行和列的数字值。如果输入是一个范围，那么只使用左上方的单元格。

位置

从VEE主菜单中Excel [image] Navigation [image] Numeric Row and Column from Cell。


发送数据设置

Send Data Settings控制数组的方向及处理DataToCells调用的多维数组。

Open View参数

这个UserObject由xlLib.SendDataSettings UserFunction调用和SendDataSettings对象组成。SendDataSettings对象有三个参数。

  • Orientation -- 这是数组数据流动的方向。有两个选项：Vertical和Horizontal。例如，一维数组横向将创建一个数据行，两维数组纵向将创建两个数据列。默认值为Vertical。

  • ThreeDArrays -- 这控制着Excel Library和DataToCells怎样处理三维数组。

  • CreateNewSheets -- 为三维数组创建新的工作表，其中每个Z维度是一个新的工作表。每个工作表包含其中一个两维数组。

  • CopyStartingSheet -- 复制开始的工作簿格式，把它们应用到从三维数组流程新建的工作表中，包括单元格格式化、图表等等。

  • UseSingleSheet -- 把所有三维数据放在一个工作表上，每个二维数组用一个空行分开。

  • ZLabel -- 用来标注作为三维数组的一部分表示的每个二维数组。

备注

对所有三维设置，每次打印两维数组时，其前面会有一行包含第三个维度中的当前要素值。

位置

从VEE主菜单中Excel [image] Send Data [image] Send Data Settings

另请参阅

把数据发送到单元格中


把数据发送到单元格中

Data to Cells用来把数据从VEE传送到Excel中。

用途

传送的数据可以是标量或最多三维的数组。不能传送下面的数据类型：Complex, PComplex, Spectrum, Coordinate, Waveform, Object和Record。使用Send Data [image] Record to Named Ranges把记录发送到Excel。尽管DataToCells UserObject不能直接支持上述数据类型，但我们提供了一些范例，来解决这些问题，参阅目录\Program Files\Agilent\VEE Pro 7.5\Examples\ExcelLibrary\SendingData。

DataToCells有两个输入端。上面的输入端接收要传送的数据。下面的输入端接收单元格地址。尽管可以指定一个范围或命名的范围，但会忽略这些范围，而使用左上角的地址，确定数据在工作表中的位置。例如，范围C4:K22会在C4中开始显示数据，而忽略范围的结束地址K22。

由于忽略范围的结束地址，DataToCells对象对边界不敏感。如果把10个要素组成的数组发送到Excel范围B4:B8中，DataToCells会重写B8之后的五个值。记住，在范围中，只有第一个值是重要的。第二个值并不是有效边界。

DataToCells函数根据SendDataSettings对象水平放置数组或垂直放置数组。由于忽略单元格范围，而只使用范围的第一个值，因此指定"A1:A11"或"A1:J1"并不会改变数据的行或列的方向。如果想改变行或列的方向，应使用SendDataSettings对象。

处理两维和三维数组的范例可以参阅目录Examples\ExcelLibrary\SendingData。

位置

从VEE主菜单中Excel [image] Send Data [image] Data to Cells

另请参阅

发送数据设置和把记录发送到指明范围中


把记录发送到指明范围中

把VEE记录发送到Microsoft Excel中的指明范围中。

用途

Call SendRecord UserFunction有一个输入端和两个输出端。

输入端用来把VEE记录发送到Call SendRecord UserFunction中。然后UserFunction把字段值放到VEE Excel Library选中工作簿的相应指明范围中。例如， 如果VEE字段名叫作reading，那么字段名将放在叫作reading的Microsoft Excel工作簿单元格中。

为创建Microsoft Excel指明范围，高亮度显示要使用的单元格组，然后进入Insert [image] Name [image] Define。输入范围名称，选择Add。还可以使用Define Range对话框右下角的图标( [image])，在指定单元格和define range对话框之间切换。

两个输出端用来跟踪丢失的名称，计算丢失了多少名称。在与VEE字段不匹配的 Microsoft Excel工作表中定义了多个名称时，将填写Missing Names。因此，如果VEE记录不完整或Microsoft Excel工作表定义不正确，那么在这个端上将有多个值。第二个端Size只提供了Missing Names的数量。

位置

从VEE主菜单中Excel [image] Send Data [image] Record to Named Ranges

另请参阅

把数据发送到单元格中和发送数据设置


创建折线图

根据VEE输入的数据在Microsoft Excel中创建一个折线图。

Fields

CreateLineChart是由xlLib.CreateLineChart(Data,Settings)函数调用和Line Chart Settings记录对象组成的UserObject。Line Chart Settings有多个不同的字段，下面列出了这些字段。

  • Title -- 图表的标题，标题在图表的边界内居中显示。

  • TitleFont -- 标题使用的字体。这里可以使用VEE支持的任何字体。在其出现在VEE字体列表中时，只需输入字体名称即可。

  • TitleFontSize -- 可以选择菜单中提供的字号，或选择Autosize，由 Excel自动选择一个字号。

  • Type -- 图表的类型。

  • Line -- 标准折线图。

  • Line with Markers -- 折线图，每个数据点上带有标尺。

  • 3D Line -- 表示三维折线图。

  • Logarithmic -- 提供数据的对数图，每个数据点上带有标尺。一定要保证数据中没有零值或负值，否则Excel Library会生成553错误。如需了解与非英文版Microsoft Office有关的问题，请参阅下面的?#22791;注?/span>。

  • NumericMarkers -- 这会把数据点值放在图表中的数据点旁边。

  • FillEffects -- 影响着图表的背景。None值提供灰色背景，Two Color值提供黑/白混合背景。这个参数不影响对数图和三维直线图。

  • Names -- 名称列表中的每个名称被应用到图表中的取值数组中。例如，如果有一个由正弦值组成的数组，一个由余弦值组成的数，一个由方波值组成的数组，那么可以使用名称参数在图例中标注这些数组。如果数组数量超过10个，那么在名称列表中应增加更多的值。

  • XaxisLabel -- 输入图表X轴值的标签。对频谱和波形，不输入任何值，VEE Excel Library会创建一个合成X轴标签，其中包括时间跨度/频率信息。

  • YaxisLabel -- 为Y轴输入所需的任何描述。

  • ChartSheet -- 输入希望图表出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • DataCell -- 数据块开始的单元格。

  • DataSheet -- 输入希望数据出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • PlotBy -- 可以选择Columns或Rows。这决定着是根据列中的数据还是根据行中的数据创建图表。还可以在VEE主菜单Excel [image] Send Data [image] Send Data Settings中设置这个字段。

  • Width -- 从标准尺寸中定标图表的宽度。

  • Height -- 从标准尺寸中定标图表的高度。

  • MoveRight -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数右移表格。负值会左移图表。移动递增单位是像素。

  • MoveDown -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数下移表格。负值会上移图表。移动递增单位是像素。

备注

Line Chart设置会忽略ChartSheet设置，总是把图表放在第一个或最左面的表格中。目前这个问题没有解决办法。

ChartSheet和DataSheet值在默认状态下设为"Sheet1"。这一设置在许多非英文版Microsoft Office中不能工作。例如，在德语版Microsoft Excel中，默认值是"Tabelle1"。如果您首选改变表格名称，那么应改变这两个值。如果您希望使用默认名称，那么有一个简便地方式本地化这些值。

断开"Bar Chart Settings"对象和"Call xlLib.CreateBarChart"对象之间的线，从左下方和"Localize..."对象的输出到"Call xlLib.CreateBarChart"对象的输入连一条线。这会把ChartSheet和DataSheet的ChartSettingsRecord值变成相应的值，可以用于任何版本Microsoft Office Excel的第一个现有工作表。

Chart Type "Logarithmic"在许多非英文版Microsoft Office中不能工作。为使其工作，先打开Excel，进行Insert [image] Chart，然后在Chart Wizard对话框中，进入第二栏"Custom Types"。注意Logarithmic自定义类型的拼写方式。例如，在德语版Office中，拼写方式是"Logarithmisch"。

然后转到Create Line Chart对象，打开这个对象。在最左面附近，您会看到一个公式和部分说明及类似于:xlApp.ActiveChart.ApplyCustomType(xlBuiltIn, "Logarithmic")的一行文字。根据这一公式的说明操作。

与Microsoft Office版本本地化中的情况一样，Excel只接受这个Chart Custom Type字符串。但是，Excel不提供这些本地化名称。因此，Excel Library不能为您完成这一操作。

位置

从 VEE主菜单Excel [image] Create Chart [image] Create Line Chart

另请参阅

创建柱状图, 创建饼图, 创建XY图, 释放ActiveX参考


创建XY图

根据VEE输入的数据在Microsoft Excel中创建一个XY图。

字段

CreateXYChart是由xlLib.CreateXYChart(Data,Settings)函数调用和XY Chart Settings记录对象组成的UserObject。XY Chart Settings有多个不同的字段，下面列出了这些字段。

  • Title -- 图表的标题，标题在图表的边界内居中显示。

  • TitleFont -- 标题使用的字体。这里可以使用VEE支持的任何字体。在其出现在VEE字体列表中时，只需输入字体名称即可。

  • TitleFontSize -- 可以选择菜单中提供的字号，或选择Autosize，由Excel自动选择一个字号。

  • Type -- 图表的类型。

  • XYScatter -- 标准XY图。

  • XYScatterLines -- XY图，用直线连接每个数据点。数据点带有标尺。

  • XYScatterLinesNoMarkers -- XY图，用直线连接每个数据点。数据点没有标尺。

  • XYScatterSmooth -- XY图，数据点之间使用圆滑的直线连接。数据点带有标尺。

  • XYScatterSmoothNoMarkers -- XY图，数据点之间使用圆滑的直线连接。数据点没有标尺。

  • XGridLines -- 有两个选项：Major和Minor。Major指只有少量网格线(如有)。Minor指有许多直线。

  • YGridLines -- 有两个选项：Major和Minor。Major指只有少量网格线(如有)。Minor指有许多直线。

  • Names -- 名称列表中的每个名称被应用到图表中的取值数组中。例如，如果有一个由正弦值组成的数组，一个由余弦值组成的数，一个由方波值组成的数组，那么可以使用名称参数在图例中标注这些数组。如果数组数量超过10个，那么在名称列表中应增加更多的值。

  • Scale -- Scale是Linear或Logarithmic。Linear简单明了。Logarithmic只适用于Y轴。取值为零或负数会导致错误。

  • FillEffects -- 影响着图表的背景。None值提供灰色背景，Two Color值提供黑/白混合背景。这个参数不影响对数图和三维直线图。

  • XaxisLabel -- 输入图表X轴的标签。

  • YaxisLabel -- 输入图表Y轴的标签。

  • ChartSheet -- 输入希望图表出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • DataCell -- 数据块开始的单元格。

  • DataSheet -- 输入希望数据出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • PlotBy -- 可以选择Columns或Rows。这决定着是根据列中的数据还是根据行中的数据创建图表。还可以在VEE主菜单Excel [image] Send Data [image] Send Data Settings中设置这个字段。

  • Width -- 从标准尺寸中定标图表的宽度。

  • Height -- 从标准尺寸中定标图表的高度。

  • MoveRight -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数右移表格。负值会左移图表。移动递增单位是像素。

  • MoveDown -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数下移表格。负值会上移图表。移动递增单位是像素。

备注

ChartSheet和DataSheet值在默认状态下设为"Sheet1"。这一设置在许多非英文版Microsoft Office中不能工作。例如，在德语版Microsoft Excel中，默认值是"Tabelle1"。如果您首选改变表格名称，那么应改变这两个值。如果您希望使用默认名称，那么有一个简便地方式本地化这些值。

断开"Bar Chart Settings"对象和"Call xlLib.CreateBarChart"对象之间的线，从左下方和"Localize..."对象的输出到"Call xlLib.CreateBarChart"对象的输入连一条线。这会把ChartSheet和DataSheet的ChartSettingsRecord值变成相应的值，可以用于任何版本Microsoft Office Excel的第一个现有工作表。

位置

从 VEE主菜单Excel [image] Create Chart [image] Create XY Chart

另请参阅

创建柱状图, 创建折线图, 创建饼图


创建柱状图

根据VEE输入的数据在Microsoft Excel中创建一个柱状图。

字段

CreateBarChart是由xlLib.CreateBarChart(Data,Settings)函数调用和Bar Chart Settings记录对象组成的UserObject。Bar Chart Settings有多个不同的字段，下面列出了这些字段。

  • Title -- 图表的标题，标题在图表的边界内居中显示。

  • TitleFont -- 标题使用的字体。这里可以使用VEE支持的任何字体。在其出现在VEE字体列表中时，只需输入字体名称即可。

  • TitleFontSize -- 可以选择菜单中提供的字号，或选择Autosize，由Excel自动选择一个字号。

  • Type -- 图表的类型。

  • ColumnClustered -- 如果PlotBy是多个行，且多个数据值来自同一行，那么竖条会彼此相邻显示。如果PlotBy是多个列，那么数组中的多个要素会作为相邻竖条显示。

  • ColumnStacked -- 如果PlotBy是多个行，且多个数据值来自同一行，那么横条会彼此相邻显示。如果PlotBy是多个列，那么每个数组要素会作为竖栏显示，每个要素有一个彩边。

  • Stacked100 -- 在PlotBy是多个行时，显示一个竖条中的数组要素。数组要素加在一起，每个数组要素用其占总量的百分比表示。如果PlotBy是多个列，数组会作为竖栏显示，每个要素有一个彩边。

  • 3DColumn -- 在PlotBy是多个行时，使用三维竖条，前面是第一个数组要素，后面显示后续的数组要素。在PlotBy是多个列时，每个数组要素都有自己的由多个列组成的行。

  • 3DColumnClustered -- 如果PlotBy是多个行，且多个要素来自同一行，那么三维竖条会彼此相邻显示。显示画面的前面一行是数组要素。如果PlotBy是多个列，那么每个数组会表现为多个列组成的集群，一个数组要素等于一列。

  • 3DColumnStacked -- 如果PlotBy是多个行，且多个数据值来自同一行，那么三维竖条会彼此相邻显示。如果PlotBy是多个列，那么每个数组有一个列，每个数组要素有一个彩边。

  • 3DStacked100 -- 在PlotBy是多个行时，在三维单个竖条中显示数据。多个要素加在一起，每个要素用其占总量的百分比表示。如果PlotBy是多个列，那么每个数组有一个列，每个数组要素有一个彩边。

  • BarClustered -- 如果PlotBy是多个行，且多个数据值来自同一行，那么横条会彼此相邻显示。如果PlotBy是多个列，那么数组中的每个要素有一个横条，且多个横条集中在一起。

  • BarStacked -- 如果PlotBy是多个行，且多个数据值来自同一行，那么横条相互堆叠在顶部显示。如果PlotBy是多个列，那么每个数组有一个横条，每个数组要素有一个彩边。

  • BarStacked100 -- 在PlotBy是多个行时，在单个横条中显示数据。多个数组要素加在一起，每个数组要素用其占总量的百分比表示。如果PlotBy是多个列，外观相同。

  • 3DBarClustered -- 如果PlotBy是多个行，且多个数据值来自同一行，那么三维横条会彼此相邻显示。如果PlotBy是多个列，那么数组要素用一个横条表示，且多个数组集中在一起。

  • 3DBarStacked -- 如果PlotBy是多个行或多个列，且多个数据值来自同一行，那么三维横条相互堆叠在顶部显示。如果PlotBy是多个列，那么每个数组用一个横条表示，数组要素联合并堆叠在一起。

  • 3DStacked100 -- 在PlotBy是多个行时，在三维单个横条中显示数据。多个数组要素加在一起，每个要素用其占总量的百分比表示。如果PlotBy是多个列，那么每个数组用一个横条表示，数组要素联合并堆叠在一起。

  • Numeric Markers -- 这会把要素值放在图表中的标尺旁边。

  • FillEffects -- 影响着图表的背景。None值提供灰色背景，Two Color值提供黑/白混合背景。这个参数不影响对数图和三维直线图。

  • XaxisLabel -- 输入图表X轴的标签。

  • YaxisLabel -- 输入图表Y轴的标签。

  • ChartSheet -- 输入希望图表出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • DataCell -- 数据块开始的单元格。

  • DataSheet -- 输入希望数据出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • PlotBy -- 可以选择Columns或Rows。这决定着是根据列中的数据还是根据行中的数据创建图表。还可以在VEE主菜单Excel [image] Send Data [image] Send Data Settings中设置这个字段。

  • Width -- 从标准尺寸中定标图表的宽度。

  • Height -- 从标准尺寸中定标图表的高度。

  • MoveRight -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数右移表格。负值会左移图表。移动递增单位是像素。

  • MoveDown -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数下移表格。负值会上移图表。移动递增单位是像素。

备注

ChartSheet和DataSheet值在默认状态下设为"Sheet1"。这一设置在许多非英文版Microsoft Office中不能工作。例如，在德语版Microsoft Excel中，默认值是"Tabelle1"。如果您首选改变表格名称，那么应改变这两个值。如果您希望使用默认名称，那么有一个简便地方式本地化这些值。

断开"Bar Chart Settings"对象和"Call xlLib.CreateBarChart"对象之间的线，从左下方和"Localize..."对象的输出到"Call xlLib.CreateBarChart"对象的输入连一条线。这会把ChartSheet和DataSheet的ChartSettingsRecord值变成相应的值，可以用于任何版本Microsoft Office Excel的第一个现有工作表。

位置

从VEE主菜单Excel [image] Create Chart [image] Create Bar Chart

另请参阅

创建折线图, 创建饼图, 创建XY图


创建饼图

根据VEE输入的数据在 Microsoft Excel中创建一个饼图。

字段

CreatePieChart是由xlLib.CreatePieChart(Data,Settings)函数调用和Pie Chart Settings记录对象组成的 UserObject。Pie Chart Settings有多个不同的字段，下面列出了这些字段。

  • Title -- 图表的标题，标题在图表的边界内居中显示。

  • TitleFont -- 标题使用的字体。这里可以使用VEE支持的任何字体。在其出现在VEE字体列表中时，只需输入字体名称即可。

  • TitleFontSize -- 可以选择菜单中提供的字号，或选择Autosize，由 Excel自动选择一个字号。

  • Type -- 图表的类型。

  • Pie -- 标准饼图，不带装饰边。

  • Pie Exploded -- 饼图，每块饼从中心'探出'，以便能够单独查看这些块。

  • 3DPie -- 三维饼图，不带装饰边。

  • 3DPieExploded -- 三维饼图，每块饼从中心'探出'，以便能够单独查看这些块。

  • PieOfPie -- 饼图的饼图。通常会把最初饼图中最大的一块饼再分成第二个饼图。

  • NumericMarkers -- 每个数据点上的标尺，帮助解释底层值。

  • None -- 不存在标尺。

  • Label - 每个数组要素用来标记一块饼。

  • Value -- 每块饼标上生成这块饼的值。

  • Percent - 每块饼标上生成其占整个饼的百分比。

  • LabelAndPercent - 使用每个数组要素及其百分比，标记一块饼。

  • NumericMarkersMore

  • LegendKey - 在饼图的每个要素旁边放在一个描述性标签。

  • LeaderLines - 在每个饼的要素的标签变得太挤时，可以选择引出线。引出线是使用描述标签连接饼的要素的直线。

  • LegendKeyAndLeaderLines - 自动显示描述标签及引出线。

  • None - 不提供图例信息。

  • FillEffects -- 影响着图表的背景。None值提供灰色背景，Two Color值提供黑/白混合背景。这个参数不影响对数图和三维直线图。

  • ChartSheet -- 输入希望图表出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • DataCell -- 数据块开始的单元格。

  • DataSheet -- 输入希望数据出现的已有表格的名称。如需了解对非英文版Microsoft Office本地化这个字符串的相关信息，请参阅下面的?#22791;注?#12290;

  • PlotBy -- 可以选择Columns或Rows。这决定着是根据列中的数据还是根据行中的数据创建图表。还可以在 VEE主菜单Excel [image] Send Data [image] Send Data Settings中设置这个字段。

  • Width -- 从标准尺寸中定标图表的宽度。

  • Height -- 从标准尺寸中定标图表的高度。

  • MoveRight -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数右移表格。负值会左移图表。移动递增单位是像素。

  • MoveDown -- Microsoft Excel总是把图表放在与工作表相同的位置。可以使用这个参数下移表格。负值会上移图表。移动递增单位是像素。

备注

ChartSheet和DataSheet值在默认状态下设为"Sheet1"。这一设置在许多非英文版Microsoft Office中不能工作。例如，在德语版Microsoft Excel中，默认值是"Tabelle1"。如果您首选改变表格名称，那么应改变这两个值。如果您希望使用默认名称，那么有一个简便地方式本地化这些值。

断开"Bar Chart Settings"对象和"Call xlLib.CreateBarChart"对象之间的线，从左下方和"Localize..."对象的输出到"Call xlLib.CreateBarChart"对象的输入连一条线。这会把ChartSheet和DataSheet的ChartSettingsRecord值变成相应的值，可以用于任何版本Microsoft Office Excel的第一个现有工作表。

位置

从 VEE主菜单Excel [image] Create Chart [image] Create Pie Chart

另请参阅

创建柱状图, 创建折线图, 创建XY图


把面板图像发送到图片

把VEE图像导出到Microsoft Excel中。

用途

Panel Image to Picture是一个UserFunction，它有4个输入端。

  • userFunctionName：为这个UserFunction创建一个图片名称，作为图像发送到Microsoft Excel。

  • upperLeftCell是Microsoft Excel工作单中图片的起始点。

  • relativeSizeX和relativeSizeY影响着图片的高度和宽度。在这两个端上，取值1会把图片保持在100%的原始尺寸。取值小于1会缩小图片，取值大于会提高尺寸。

备注

这个UserFunction调用VEE内置函数SavePanelImage()。BMP文件可能会严重失常。建议使用.jpg图片。

位置

从VEE主菜单中Excel [image] Send Panel Image [image] Panel Image to Picture

另请参阅

设置面板图像


设置面板图像

为发送到面板函数建立颜色数量和文件类型。

用途

Image Settings对象有两个参数。

NumberColors - 默认值是256，这是VEE支持的最高颜色数量。

FileSpecifier - 这是把图片传送到Excel使用的临时文件。指定到文件的绝对路径。确认提供一个文件名及扩展名。扩展名决定着文件格式。如果Excel Library中的文件扩展名为空，那么使用.jpg格式。

位置

从VEE主菜单中Excel [image] Send Panel Image [image] Image Settings

另请参阅

把面板图像发送到图片


从单元格中导入数据

把数据从Excel电子表格导入到VEE。

用途

Get Data有两个端。输入端接受一个单元格、一个单元格范围或指明范围，用来识别从Excel中导入的单元格。输出端收到导入的数据。例如，附在这个端上的字母数字对象显示已经导入的值。

如果单元格中包含一个常数，那么会返回这个值。如果单元格是空的，那么会作为字符串返回公式，其格式与格式栏中显示的格式相同 (包括等号)。

注意，从ActiveX服务器中获得数据的行为在VEE Execution Mode 5与Execution Mode 6中是不同的。具体地讲，Execution Mode 6中改进了获得数据数组时的数据类型转换。Calling in 在Execution Mode 5及在Execution Mode 6中调用DataFromCells可能会产生不同的结果。参阅Agilent VEE 6.0有哪些新特点的?#22686;强功能?#37096;分，相关内容是Variant to VEE Data type Conversion - Improved Array Handling。

位置

从VEE主菜单中Excel [image] Get Data [image] Data from Cells


对单元格公式求解

给出单元格公式的运算结果。

用途

提供一个单元格地址。然后Evaluate Cell Formula会返回该单元格中公式的结果。

位置

从VEE主菜单中Excel [image] Get Data [image] Evaluate Cell Formula


搜索数组

VEE Excel Library包括一个称为Search Array的辅助功能。对一维数组，Search Array返回一定Search Array值的索引。

对二维数组，Excel Library使用用户提供的值作为索引值，返回相应的[n,1]要素，如具有下述值的一个两维数组：[0,22], [1,24], [2,26]。搜索数组值2会得到24，24是数组中的第二个要素。

位置

从VEE主菜单中Excel [image] Utilities [image] Search Array


使用字符串替换

用一个不同的字符串部分替换一个字符串部分。可以控制字符串替换是否区分大小。

用途

stringReplace不要求打开工作簿。stringReplace UserObject上有四个输入端：

  • string - 将改变的字符串。
  • outSubString - 正在删除的子字符串。
  • inSubString - 替换outSubString的子字符串。
  • caseSensitive - 使用0忽略大小写。使用1强制在inSubString和outSubString之间进行大小写比较。如果不匹配，那么不能完成替换。为增强性能，在替换时应尽量使用区分大小写Case Sensitive，而不是使用不分大小写Case Insensitive。

位置

从VEE主菜单中Excel [image] Utilities [image] String Replace


建立打印设置

使用这个UserObject准备打印使用的打印机。

Open View参数

PrintSettings UserObject由PrintSettings UserFunction调用和Print Settings对象组成。Print Settings记录对象包含配置打印机所需的所有open view参数。

  • PrintCopies -- 使用这个字段设置要打印的份数。至少要打印一份。

  • ActivePrinter -- 输入打印机名称。如果为空，那么会使用默认打印机或指向Excel上次使用的打印机。例如：\\servername\printername。

  • PrintFromPage -- 打印作业从这里选择的页开始，默认值为1。

  • PrintToPage -- 打印作业在这一页结束。默认值是32767。

备注

使用非英文版Office的用户可能会注意到默认纸张大小有问题。Excel 2002试图解决这个问题，它增加了一个属性Application.MapPaperSize。在使用Excel Library的VEE程序中，这一属性是"xlApp.MapPaperSize"。如果这一属性设为真，Excel 2002及以后版本会试图在不同国家的标准纸张尺寸之间自动切换。安捷伦测试表明，MapPaperSize属性在Excel 2002和2003中默认为真，但没有编制默认值文档。

位置

从VEE主菜单中Excel [image] Printing [image] Print Settings

另请参阅

打印工作簿和工作表和预览打印作业


预览打印作业

把活动的工作表检索到Excel的打印预览屏幕中。

备注

如果从打印预览屏幕中选择打印，之后在程序中对同一工作表使用Print Worksheet对象，那么这个工作表会打印两次。

Print Preview可以自动看到Microsoft Excel。

位置

从VEE主菜单中Excel [image] Printing [image] Print Preview

另请参阅

打印工作簿或工作表和建立打印设置


打印工作簿或工作表

打印活动的工作簿或工作表。

用途

Print UserObject包含一个Print记录对象和一个xlLib.Print UserFunction调用。

Print对象有一个下拉菜单项，可以选择工作表或工作簿。

位置

从VEE主菜单中Excel [image] Printing [image] Print Workbook or Worksheet

另请参阅

建立打印设置和预览打印作业


Vxl和Excel Library之间的区别

本文列出了在VEE 7.5的Excel Library中使用Vxl 2.0程序时Vxl 2.0用户遇到的问题。

不影响当前Vxl程序的变化：

A. Excel Library UserFunction库文件ExcelLibrary.vxe拷贝安装在旧的Vxl 2.0位置~installDir\lib\vxl\vxlLibrary.vxe下。Vxl 2.0程序会正常工作，因为它们会在旧位置下找到新库。建议升级程序，使用新位置~installDir\lib\ExcelLibrary\ExcelLibrary.exe。

B. 下表中提到了7个重新命名的函数，但旧函数名称作为经过函数保留下来，在面板上标为?#19981;赞成使用?#12290;也就是说，Vxl 2.0程序的工作方式会保持现状，但这些函数名称将来可能会消失。

C. 还保留了Vxl 1.0时代的另一个经过函数Open。这允许所有Vxl 1.0程序的工作方式保持不变。Vxl 1.0中的Open在Vxl 2.0中重新命名为OpenRW，现在在Excel Library中重新命名为OpenWorkbookRW。

D. 菜单上的部分项目已经重新命名。例如，Data From Cells变成Get Data，Initialize Vxl变成Initialize Excel Library。新名称对Vxl程序没有任何影响。

E. 菜单用来创建菜单对象的.vee文件已经重新命名，但这应该不会影响程序。例如，Save.vee现在是SaveWorkbook.vee。除非进行下面的#4操作，否则其无关紧要。

F.菜单上的菜单项作了移动。例如，菜单底部的About Vxl已经移到顶部(重新命名为What is this menu?)。

G. Vxl Samples原来安装在~installDir\examples\Vxl\下，现在安装在 ~installDir\Examples\ExcelLibrary\下。

H. UserFunction Library中专用UserFunctions名称发生变化。这些UserFunction不从任何菜单中调用，只在库内部调用。将不会为这些函数名称变化编制文档。事实上，所有这些专用函数都已经重新命名，变成以zzInternal开头，以便明确不应直接调用这些函数。

I. 没有删除任何样例，只删除了FourInARow.xls游戏，但这并不是一个VEE程序。所有Samples已经重新命名，以去掉前面的单词Example，其中多个范例进一步重新命名，以使其功能更加明确。

可能会中断Vxl程序的变化：

1. 主菜单 Initialize Vxl [image] Import Library [image] Library. vxl被重新命名为xlLib。它用于所有库调用中，如vxl.Initialize调用现在变成xlLib.Initialize调用。如果只修改程序，以考虑已经存档的其它中断变化，那么这一特定重新命名无关紧要，程序会象VEE 7.5中一样运行。但是，如果想通过从Excel菜单中添加另一个对象来修改程序，那么新对象将不能工作。必须修改从Excel菜单中创建的每个新对象，以使用旧的vxl名称，或修改程序，以使用新的xlLib名称。

2. 名为xl的导入的全局变量被重新命名为xlApp。在默认情况下，没有任何菜单项直接使用这个变量，因此不可能会影响您的程序。但是，某些范例使用这个变量，主菜单项Settings的Notepad项目告诉您怎样直接使用这个变量(如set xl.DisplayAlerts=False)。如果已经使用这个变量，那么必须把使用方式变成xlApp.DisplayAlerts=False。

3. 如果已经自定义Vxl菜单，那么必须重做这一工作，从VEE 7.5 Excel菜单文件入手，这是因为上面(E)中所作的变化。

4. 如果调用了库中的任何专用UserFunctions，上面(H)中提到的重新命名将中断程序。

变动表

黄色突出显示了变化部分。

Vxl菜单项名称 | Excel菜单项名称 | Vxl UserFunction名称 | VEE 7.5 Excel Library UserFunction名称 | 备注
 | QuickStart / ShortCuts |  |  | 7.5中新增内容
Initialize Vxl | Initialize Excel Library | Initialize | Initialize | 参阅中断变化(1)
Open Workbook | Open Workbook | OpenRW | OpenWorkbookRW | 重新命名UserFunction
Navigation -> Alpha Column From Numeric Column | Navigation -> Alpha Column From Numeric Column | vxlData2CellsAlpha ColFromNumericCol | AlphaColFrom NumericCol | 重新命名UserFunction
Navigation -> Numeric Row和Column From Range | Navigation -> Numeric Row和Column From Range | vxlData2CellsNumeric RowColFromRange | NumericRowCol FromCell | 重新命名UserFunction
Send Data -> Data To Cells | Send Data -> Data To Cells | Data2Cells | DataToCells | 重新命名UserFunction
Send Panel Image -> Panel Image to Picture | Send Panel Image -> Panel Image to Picture | PanelImage2Picture | PanelImageToPicture | 重新命名UserFunction
Data From Cells -> Evaluate Cell Formula | Get Data -> Evaluate Cell Formula | EvalScalar | EvalCellFormula | 重新命名UserFunction
Quit Vxl | Quit Excel Library | QuitVxl | QuitExcelLibrary | 重新命名UserFunction
Utilities -> Iterate Record | Utilities -> Iterate Record | <none> | <none> | New in 7.5


调试Agilent VEE中的程序

调试Agilent VEE程序

VEE显示开发过程中及程序运行时的错误信息，并可以显示下面的小心信息、错误信息和提示信息：

• 在运行程序时，VEE可以显示黄色标题的小心框。

• 在运行程序时，VEE可以显示红色标题的错误框。

• 如果在创建程序时发生错误，如在Int16常量中输入超出范围的值33000，VEE会显示一个深蓝色标题条的错误信息框。

• VEE还会在状态条中显示错误和小心相关信息。状态条位于VEE窗口底部。

另请参阅

查看数据流程和程序执行

控制断点

单步执行程序

查看调用堆栈

查看一行中的数据

检查端

使用字母数字显示进行调试

找到线的端点

捕获错误

解决错误

定位错误

查看最新错误

遵循对象内部的事件顺序

遵循程序中的对象执行顺序

在复杂的程序中找到一个对象


查看数据流程和程序执行

可以在运行时在VEE程序的Detail View中查看数据流程和程序执行流程。可以在Main Window及UserObject和UserFunction编辑窗口中查看数据流程和程序执行。

查看数据和执行流程

1. 切换到相关上下文的Detail View。

2. 点击工具栏上的Show Data Flow和Show Execution Flows。

Show Data Flow

Show Execution Flow按钮

3. 运行程序，查看数据和执行流程：

沿着线移动的小方标表明数据流动。这些小方标表示数据容器。如果想改变小方标移动速度，请参阅下一个标题。

在运行时通过高亮度显示每个对象，可以显示执行流程。在对象执行时，对象外面会有一个浅绿色外框进行高亮度显示。在对象执行后，高亮度显示变成深绿色。

改变数据流动速率

1. 从File菜单中选择Default Preferences。

2. 在General一栏上，在Debug组中，点击Data Flow Rate箭头，出现下拉列表。可以在1 (最慢)到10 (最快)范围内设置速率。

3. 如果想把变化保存为新的默认文件VEE.RC，点击Save。如果想只对这个VEE会话使用变化，点击OK (直到选择File [image] New, Open或Exit)。

技巧

通过一次只打开一个功能，可以独立显示数据和执行流程。

不管程序是否运行，都可以打开和关闭这些功能。

确认在不需要时关闭这些调试功能，否则程序会变得相当慢。

Show Data Flow和Show Execution Flow命令位于Debug菜单中。命令旁边的对勾表明该功能打开。

在VEE 4及更高的执行模式下，如果打开Disable Debug Features默认首选项，那么调试功能会失效。

另请参阅

默认首选项

查看调用堆栈


控制断点

如果在程序中的一个对象上设置断点，那么在该对象运行前，程序将暂停。然后可以使用Line Probe查看每条线上的数据容器，可以Step或Resume程序执行。可以使用命令，在选择的对象上切换断点设置，控制整个程序的断点。

切换断点

1. 选择想改变断点设置的对象。如果想选择多个对象，按住Ctrl键，然后用鼠标左键点击多个对象。

2. 点击工具栏上的Toggle Breakpoint按钮 (Debug [image] Toggle Breakpoint)。将切换选择的对象上的断点设置。如果以前已经设置好断点，那么将清除断点，对象的高亮度外框消失。如果以前已经清除断点，那么将设置断点，对象显示高亮度外框。

Toggle Breakpoint按钮

3. 运行程序。在设置断点的对象前面，程序会暂停。

4. 如果想继续，点击其中一个程序控制按钮：

Resume按钮恢复执行。

Step Into按钮进入UserObject或UserFunction。

Step Over按钮转到下一个对象。

Step Out按钮离开UserObject或UserFunction。

Stop按钮停止运行程序。

激活所有断点

1. 点击Debug [image] Activate Breakpoints。

菜单命令中的对号表示在运行程序时将激活设置的所有断点(默认值)。

清除所有断点

1. 点击Debug [image] Clear All Breakpoints。

将清除程序中的所有断点，对象中的高亮度外框消失。

快捷方式

按CTRL+B切换断点。

技巧

还可以从对象菜单中使用Properties控制对象的断点。在Behavior类别上，把 BreakpointEnabled变成True或False，设置或清除对象的断点。

在VEE 4及更高的执行模式下，如果打开Disable Debug Features默认首选项，那么将禁用调试功能。

另请参阅

查看调用堆栈

Default Preferences


单步执行程序

可以使用三个Step按钮及工具栏上的其它程序控制按钮运行程序，一次一个对象。程序控制按钮包括：

Step Into按钮

Step Over按钮

Step Out按钮

Run/Resume按钮

Pause按钮

Stop按钮

程序控制按钮的交互关系

从停止的程序中，在第一次点击Step按钮时，程序会PreRun。点击Step Into按钮依次运行每个对象。然后会运行用黄色外框高亮度显示的对象。

Step Into按钮

如果运行程序时启用断点，程序将PreRun，然后一直执行到该断点。然后可以从断点开始使用Step Into按钮依次运行每个对象。

Step Into按钮

在逐步通过程序的任何一点上，可以点击Resume按钮，继续运行程序。如果想暂停程序，点击Pause按钮。如果停止程序，那么在重启时程序会直达PreRun。

Resume按钮

Pause按钮

逐步通过UserObject或UserFunction

The three types of Step按钮s let you control how the program steps through another context in the program such as a UserObject或UserFunction:

Step Into进入上下文，在Detail View中打开编辑窗口，逐步通过其中的对象。

Step Over执行整个上下文，转到程序中的下一个对象。

Step Out离开逐步通过的上下文，它执行其中所有其余对象，然后转到程序中的下一个对象。

技巧

在VEE 4及更高的执行模式下，如果打开Disable Debug Features默认首选项，那么会禁用调试功能。

另请参阅

查看调用堆栈

Default Preferences


查看调用堆栈

使用Call Stack对话框(View [image] Call Stack)查看要执行的下一个对象及暂停的程序中调用上下文。在保持打开的同时步进通过程序或使用断点时，最适合使用Call Stack。可以在程序暂停或停止时，从菜单中或使用工具栏按钮打开和关闭Call Stack。

Call Stack按钮

Call Stack对话框在状态行中显示要执行的下一个对象，列出UserObjects或UserFunctions的当前调用，包括输入变量。下图显示了Call Stack及取样数据。要执行的下一个对象是Main程序中包含的UserObject Gen Sine Waves内包含的Function Generator。Gen Sine Waves有三个输入：Freq1, Freq2和Phase。

与程序控件交互

在Call Stack打开时，只有在程序暂停时它才包含信息。在程序正在运行或停止时，它不提供任何信息。

每次在程序暂停时，Call Stack会自动更新，并与程序执行流程保持同步。

在通过下述方式暂停程序时，Call Stack显示信息：

按Pause按钮

使用Step Into, Step Over和Step Out按钮

设置断点

程序执行错误

存取Call Stack内容

在程序暂停及Call Stack打开时，会显示当前上下文，高亮度显示要执行的下一个对象。

如果想存取当前Call Stack列表中的任何上下文，双击上下文名称，程序将显示上下文。

另请参阅

查看数据流程和程序执行

控制断点

逐步通过程序


查看线上的数据

使用Line Probe命令(Debug [image] Line Probe)查看任何VEE数据线上传送的数据容器。必须暂停或停止程序。

为迅速探测一条线，只需把鼠标指针移到所需的线上。指针改变形状，出现线的末端，概括数据。点击这条线，出现Line Value对话框，如下图所示：

如果探测一条没有传输数据的线(或已经传输序列端"ping"的线)，Line Value对话框会报告Nil (empty) container。


检查端

为检查端，在打开的视图中双击端。如果对象被图标化，把鼠标指针放在端上，VEE会自动弹出端名称。


使用字母数字显示进行调试

可以在程序中不同点上增加Alphanumeric或Logging Alphanumeric显示，跟踪数据流动。在程序正确运行时，删除这些显示。AlphaNumeric显示一个数据容器(一个Scalar值, 一个Array 1D, 或Array 2D)；Logging AlphaNumeric (Scalar或Array 1D)作为以前的值历史显示连续输入。还可以使用Counter，查看对象运行的次数。


找到线的端点

使用Line Probe命令(Debug [image] Line Probe)追踪一条线，显示其端点。必须暂停或停止程序。

为迅速探测一条线，只需把鼠标指针移动到所需的线上。指针形状改变，线会高亮度显示，并表明端点，点击线，查看数据容器。


捕获错误

在正常情况下，所有VEE错误都通过Error Message对话框报告。但是，通过在某个对象中添加一个Error输出端，可以捕获该对象生成的错误。

为在对象中添加Error输出端，从对象菜单中选择Add Terminal [image] Error Output。

如果有Error输出端的对象生成错误，那么不会出现正常的VEE Error Message对话框。而是由Error端输出必须由程序处理的错误编号。

可以通过各种方式使用Error输出端：

使用Error输出，激活另一个对象，如Raise Error。

使用If/Then/Else，根据错误编号确定操作。

使用errorInfo()，查看最后一次捕获的错误。

范例

打开手册范例目录中的程序manual37.vee (Help [image] Open Example...)，其中介绍了捕获错误的部分技术。

另请参阅

errorInfo()

Error Output (对象菜单)

Raise Error


解决错误

如果在运行程序时得到错误信息，VEE自动把一个红色轮廓放在发现错误的对象周围。

您可以校正错误，轮廓会消失；您也可以点击Stop按钮，这将删除红色轮廓，然后修复错误。如果点击Stop，那么通过使用View [image] Last Error，在恢复前可以再次查看错误。


使用Go To按钮定位错误

下图显示了运行时错误消息范例。在这个程序运行时，VEE显示一个Run Time错误，在UserObject AddNoise周围显示一个红色轮廓。在按Go To按钮时，VEE打开UserObject AddNoise，在 A输入端连接丢失的A + B对象周围显示一个红色轮廓。在大型程序中，Go To功能可以帮助您迅速定位错误来源。


查看最后一次错误

VEE错误由Error Message对话框报告。在报告错误时，可能需要关闭错误对话框，以访问程序中的问题。为再次查看错误消息，点击View [image] Last Error。

使用这条命令不能查看对象Error输出端上处理的错误。

在程序再次运行或加载新的程序时，会清除Last Error缓冲器。


遵循对象内部的事件顺序

下图显示了对象内部的事件顺序。

各端运行如下：

这一事件顺序有几种例外情况：

• 可以增加错误输出端，捕获对象内的错误。错误输出端要优先于标准对象行为。如果在对象执行时发生错误，那么错误端会发出一条信息，数据输出端不会启动。

• 可以在某些对象中增加控制输入端，它们可能会导致对象立即执行某些操作。例如，可以使用控制端执行对象子函数，如Waveform (Time) 画面中的Title或Autoscale。到对象的控制线在VEE程序显示为虚线。

例如，下图显示了为波形画面设置自定义标题的一条控制线。注意为执行这个操作，对象不要求在控制端有数据。对象不执行，而只执行设置标题等操作。可以点击Show Data Flow，查看到Title控制输入的控制线怎样先传送数据。


遵循程序中的对象执行顺序

在VEE程序运行时，各对象按下述顺序执行：

1 先运行Start对象。

下图显示了有两个线程的VEE程序，线程是在VEE程序中用实线连接的对象集合。Start对象位于Flow [image] Start下，用来运行程序中的各个线程。如果程序包括Start对象，那么它们先执行。

2 然后运行没有数据输入端的对象。Data [image] Constant对象通常属于这类对象。

3 只有满足了所有连接的输入时，有输入端的对象才会运行。(记住连接序列输入是可选的。)


在复杂程序中查找对象

为找到某个对象，特别是在大型程序中，选择Edit [image] Find。在弹出对话框中输入对象或函数名称，VEE会显示程序中该对象或函数的所有实例和位置。(更详细的信息请参阅“ 在大型程序中查找函数" 。)


在程序中添加结构

下面的技巧说明了可以怎样在VEE程序中添加结构。

1. 分析VEE程序的功能。您是否能识别一起执行某项子任务的一组对象？从这些对象中创建一个UserObject。

2. 是否有子任务多次出现在程序中？如果是，创建一个UserFunction完成这一任务，每次在需要时调用UserFunction。

3. 继续构建程序，使用UserObjects和UserFunctions构建层级结构。

4. 如果把一个数据容器传送到多个对象，考虑使用全局变量传送该数据。

另请参阅

在程序中创建UserObject

在程序中创建UserFunction

UserObject

UserFunction


存档程序

通过使用下面的技巧，可以更简便地使用、调试和维护程序：

1. 为程序提供一个描述性名称。在保存程序时，使用表明其功能的文件名。这个名称还会出现在Program Explorer顶部。如果Main Window有一个面板视图，那么使用其Properties Window为相关的Execution Window输入一个标题。这个标题会代替Program Explorer中的文件名，在运行程序时出现在Execution Window的标题栏中。这些名称与程序存档功能Save Documentation一起使用。

2. 把对象重命名为对您更有意义的名称。例如，Repeat 100x可能要优于For Count。(在对象的Properties Window中，改变Title项目。)

3. 把输入端和输出端重命名为描述性名称。例如，如果A端输入一个流速，您可能希望把名称变成Flow_Rate。(双击这个端，在对话框中改变标题。) 不能改变某些端的标题。

4. 使用对象菜单中的Description，为主要对象和函数添加描述。信息可以包括为什么使用该特定对象，输入和输出详细信息，以及在对象上使用的选项。应使用简短描述，以减少程序容量。

5. 使用Note Pad显示对象(Display [image] Note Pad)为自己或别人添加注释。信息可以包括：

您的姓名和电话号码及创建程序的日期。

这个程序的功能。

作出改动的日期及改动内容。

6. 通过添加描述性位图，定制图标，如UserObject图标。

7. 使用打印命令，打印输出程序的硬拷贝。打印命令位于File菜单、Main Window和UserObject/UserFunction编辑窗口的对象菜单及Program Explorer上(用鼠标右键点击名称)。

另请参阅

在图标中添加位图

在面板中添加图片

Description

Save Documentation


在图标中添加位图

可以在任何图标化的VEE对象中添加位图。

添加标准位图

1. 从对象菜单中选择Properties。在Icon Appearance类别中，选择IconPicture。

2. bitmaps目录中提供的位图显示在Picture组中。滚动列表，点击希望的文件名。例如，如果点击beep.icn，那么Preview区域中会显示Beep图标。

为浏览其它目录，点击Browse，出现Select File对话框，允许您浏览目录，选择一个位图文件。

3. 下图是带有Beep位图的UserObject图标：

添加自定义位图

添加自定义位图的程序与添加一个标准位图的程序相同。但是，必须先创建位图。为创建自定义位图，使用计算机中的相应位图编辑器(如Microsoft Paint程序)。支持下述文件格式：

BMP, ICN或GIF

默认位图目录是：

C:\Program Files\Agilent\VEE Pro 7.5\bitmaps

另请参阅

在面板中添加图片


概况执行参数

使用Profiler (View [image] Profiler)收集与程序有关的执行信息。Profiler测量与程序运行时每个上下文(Main, UserObject或UserFunction)使用的汇编程序时间数量有关的执行参数。在希望修改程序，以最大限度地提高效率，改善执行速度时，这些信息具有重要意义。可以从菜单中或使用工具栏按钮打开和关闭 Profiler。

Profiler按钮

Profiler画面中的数据显示了执行每个上下文使用的汇编程序时间数量。下图是一个概况范例，其中包括每个上下文的执行次数以及经过的程序时间中使用的时间百分比和秒数：

编制程序概况

1. 打开程序。

2. 打开Profiler (View [image] Profiler或使用工具栏按钮)。

在必要时点击Options，改变显示数据及把数据保存到文件中的方式。

3. 点击Profiler上的Start Profiling按钮。VEE Window状态栏中高亮度显示状态指示符PROF。可以保持打开Profiler，或关闭Profiler；一旦启动Profiler，不管是否打开，它都会收集数据。

4. 运行程序。

5. 在Profiler打开时，点击Refresh按钮更新显示画面。

可以在任何程序状态中刷新显示画面，包括正在运行时、暂停时或停止时。在Profiler运行时会一直收集新数据，但必须刷新显示画面才能看到新数据。数据会一直保留，直到点击Clear，打开另一个程序，或点击File [image] New。

如果想按栏对显示的数据分类，点击一个栏的标记，可以按相反的顺序对数据重新分类。

6. 点击Save，把概况数据写入文件中。必须先点击Refresh，然后再点击Save，才能包括最新数据。保存的文件中包括计算得出的%Time and Time(sec)总量。

7. 点击Stop Profiling，停止收集数据。

技巧

为在工作空间视图中调用Main Window、UserObject或UserFunction，双击Profiler显示画面中的上下文名称。

另请参阅

Profiler


消除程序性能障碍

下面介绍了可以用来改善程序执行速度的通用技术。

使用VEE的VEE 4或更高执行模式，禁用Default Preferences对话框上的调试功能。这些模式在汇编的执行模式下运行程序。

在UserObjects和UserFunctions上，选择数据输入端上要求的具体数据类型和形状；不要把它们设置成Any。指定这些参数可以帮助程序在VEE 4及更高执行模式下更快地运行。对其它对象，把数据类型和形状设置为Any。然后VEE只在必要时转换数据类型，节约执行时间。参阅转换输入端上的数据类型。

在不需要时，在显示画面上关闭Clear at PreRun和Clear at Activate。

在数据对象上使用Initialize at PreRun和Initialize at Activate，而不是使用控制端设置默认值。

把图形显示数据采集到数组中，一次绘制整个数组的曲线，而不是绘制各个标量点的曲线。如果曲线的X值间隔固定，使用XY Trace对象，而不是X vs Y Plot对象。

从面板视图中运行程序。如果面板视图包含的对象数量少于细节视图，那么程序的运行速度要更快。

图形画面的设置要尽可能简单。更新时间更快的设置是禁用Grid Type [image] None和所有Layout功能。只在需要时才使用Auto Scale控制输入，因为它会降慢程序执行速度。

在指示符上关闭不必要的数字显示，如Fill Bar, Meter, Tank和Thermometer对象。

如果不需要查看显示的信息，那么图标化连续更新画面的对象(如Timer, Counter, Accumulator, AlphaNumeric和图形显示对象)。

如果使用Strip Chart显示画面，缓冲器容量设置得要尽可能小。

收集数据，在数据中进行处理，然后作为数组处理数据。

在表达式中使用Complex数据，而不是PComplex。大多数数学运算库将把PComplex转换成Complex，计算结果，把Complex转换回到PComplex。

为显示PComplex数据，把Trig Mode (在File [image] Default Preferences下)设置成Radians。VEE在内部作为弧度存储PComplex值。

如果导入函数库(Device [image] Import Library)，在程序不再需要时删除函数库(Device [image] Delete Library)。

对要求快速执行程序段，使用文本编程语言创建汇编函数。

一般来说，需要运行的对象越少，程序运行速度越快。在每个对象中执行尽可能多的函数。

另请参阅

减少程序中的对象数量


减少程序中的对象数量

许多VEE对象可以执行一套功能。通过使用下述技术，程序可以变得更紧凑、更容易维护、运行速度更快：

在Formula对象中输入公式，而不是把多个常数和单函数数学对象连接到Formula上的输入端。可以把多个函数嵌套在一个Formula对象中。例如，可以输入表达式(sin(ramp(100, 0, 360)))。

在多种条件下使用一个If/Then/Else对象(例如, A == B OR A<=C AND A>D)，而不是使用多个If/Then/Else或Conditional对象。

如果想输入一维数据数组，使用一个配置为数组的Constant对象，而不是对每个值使用一个Constant对象、然后再建立数组。

如果想读取文件中所有"其余"数据，在From File对象中使用ARRAY 1D TO END:(*)事务。这要比在单要素读取上循环、然后把结果采集到数组中更简单、更快速。

使用Sequencer控制多个UserFunctions的执行流程。

在使用Sequencer时，只对要求Log记录的事务启动记录功能。如果没有使用Log输出端，删除它，可以略微加快执行速度。

另请参阅

Sequencer


提高I/O性能

一般来说，直接I/O提供的I/O性能最快。为优化VEE程序的I/O性能：

1. 使用与仪器通信的仪器面板对象(或组件驱程对象)创建程序。测试和调试程序和仪器配置。

2. 在程序中添加一个Bus I/O Monitor对象。运行程序，"捕获"仪器面板或组件驱程发送到仪器的消息及从仪器收到的消息。

3. 重写程序，以便使用Direct I/O对象与使用"捕获的"消息的仪器通信。这将加快最终程序中的I/O性能。对由仪器命令组成的长字符串，考虑把它们存储在连接到Direct I/O对象的数据输入的Text对象中。

4. 在要求极快速I/O时，可以创建一个汇编的函数，执行仪器I/O功能。

另请参阅

Bus I/O Monitor

Direct I/O

使用Direct I/O对象

使用Compiled Function


程序化地设置和读取对象属性

用户可以在运行时设置或读取对象的属性，且不影响该属性在设计时的值。

程序化地设置和读取属性

在对象的Properties 窗口，Design栏中，填入Declared Name 域。Declared Name的值将隐式地声明一个对象变量，该变量的范围为Local to Context。设置Declared Name后，你就可以设置/读取那个对象的属性了。例如，你可以改变它的背景色，大小, 位置，标题等等。下表显示了可被程序化设置和读取得对象及其属性。

属性 | 对象
BackColor, ForeColor, Title, Size, Location, and Visibility | 所有VEE对象
Value | Toggle Controls, Constants, Continuous Controls
EnumValue, EnumValues, EnumIndex | Selection controls
EnableOnPing | Confirm (OK) 对象
EnableEditing | 有"Enable/Disable Editing"控制输入端的VEE数据对象。
PopupPanelTitle | Main, UserFunctions, 和 UserObjects
Size and Location | Main 或 UserFunctions的 PopupPanel
Tab index | 面板视图中的VEE对象
BackColor | UserFunction/UserObject 和Main的面板视图

上表中所有属性都称为运行时属性。不同的VEE对象具有不同的运行时属性。

NOte

在程序化设置/读取VEE对象的属性(除 Title，EnableEditing，EnableOnPing，EnumValue，EnumValues，Value 和EnumIndex属性外)，该VEE对象必须要先加入面板视图。

不能为Declare Variable对象设置Declared Name 或改变其Variable Scope.

通常，在设置 VEE 对象的属性时，你可以使用 Declared Name. property = 属性值。比如，DeclaredName.BackColor = "Blue"。

虽然你不能设置UserFunction的Declared Name 或改变它的 Variable Scope，但是可以使用Title 而非 Declared Name来设置它的属性。例如，为一个 UserFunction设置BackColor, 你可以使用Title.BackColor ="Blue"。 注意UserFunction的Title是可以改变的。

范例：设置X_Y Trace对象的ForeColor

1. 选择 Device [image] Virtual Source [image] Noise Generator。

2。 选择 Display [image] Waveform (Time)。设置它的Declared Name 为 waveform1并把它加入面板视图。

3。 连接 Noise Generator 的数据输出端和 Waveform (Time) 的数据输入端，并运行该程序。

4. 选择 Device [image] Formula。 输入waveform1.BackColor = "blue".

5. 选择 Flow [image] Confirm (OK)。把它加入面板视图。连接Waveform的sequence输出端和Confirm (OK)对象的sequence输入端。

6. 运行该程序，Waveform的BackColor变为蓝色。

注释

Confirm (OK) 按钮的EnableOnPing属性缺省为True，表示当该按钮被ping时它会变为有效。如果EnableOnPing 属性为 False，Confirm 按钮即使被ping也处于无效不能被按。

在下述范例中，OK1是一个初始值为无效的Confirm按钮对象。在Formula对象中，OK1的EnableOnPing属性被设置为TRUE。当OK按钮被按下后，OK1就会变为有效，因为按下OK按钮会 ping OK1 按钮。

如果上例中的OK1按钮的EnableOnPing被设为False, 那么即使OK按钮被按下，OK1 按钮也不会变为有效。

另请参阅

Programmatic Properties，改变对象的Declared Name和Declared Scope

ProgrammaticPropertyDemo.vee, DemoTabIndexChangeDemo.vee


改变对象的Declared Name和Declared Scope

Agilent VEE 8.0为Properties窗口下Design栏增加两个新项。它们是Declared Name和Declared Scope.

在一个VEE对象的Properties窗口中的Declared Name域中输入一个名称会隐式地为那个VEE对象声明一个变量，这个变量具有Object数据类型，且它的Declared Scope为Local to Context。

必须先设置一个VEE对象的Declared Name，才能在运行时改变它的属性。

注释

你可以为除Main, Declared Variable, 和UserFunctions之外的所有VEE对象设置Declared Name。

为VEE对象设置Declared Name后，再次进入那个VEE对象的Properties窗口，就可以改变它的Declared Scope。 Declared Scope的初始值为Local to Context。它也可以为Global。如果在一个UserFunction中，它还可以为Local to Library。这使得改变在其他上下文中声明的VEE对象称为可能。

缺省状态下，.NET和COM就有Declared Name， 所以可以不设置它们的Declared Names就修改它们的Declared Scopes。

范例

下面的例子，在一个UserFunction中定义了一个XY Trace对象，然后在Main中把它的BackColor改为绿色。

1. 在UserFunction中定义一个XY Trace对象，并把Function Generator连接到它的输入端。

2. 将XY TraceSet的Declared Name设为xy_uf，再把它的Declared Scope改为Global；Declared Scope初始为 Local to Context, 表示不可以从该UserFunction之外访问它。

3. 在一个Formula对象中把XY Trace的BackColor设置为红色；然后把这个XY Trace加到面板视图中。

4. 在Main中，首先调用那个UserFuncion。 在5秒延迟后，把XY Trace的BackColor改为绿色。

5. 运行程序，XY Trace先为红色然后变为绿色。

另请参阅

Programmatic Properties，程序化地设置和读取对象属性


Agilent VEE编程介绍

什么是Agilent VEE?

欢迎使用Agilent VEE Pro。Agilent VEE是为用于电子仪器而优化的一种图形编程环境。更快地实现更好的测量，最简单地描述其价值。与使用低级语言相比，使用Agilent VEE可以明显提高软件原型速度，同时它提供了数百种强大的函数，帮助您分析测量数据。

Agilent VEE构件

通过把图形对象放在工作区上，然后使用直线编写这些对象，来创建Agilent VEE程序。这个图形视图就是您的程序。您不必执行任何模糊的、容易出错的步骤，如预处理、汇编或链接，而只需编制"方框图"，按Run。

VEE用"对象"表示程序中使用的构件。VEE对象执行各种任务，如添加数字，制订逻辑决策，读取文件，显示微波频谱，控制仪器等等。有两种通用方式创建VEE对象：从VEE的 Function & Object Browser中，及从VEE的下拉菜单中。

Function & Object Browser按类别整理了200多种VEE函数，如"Trig," "Matrix,"和"Data Filtering"。它创建一个预先配置了选择的函数的Formula对象。Function & Object Browser还提供了500多种MATLAB函数。

存取Function & Object Browser的一种简便方式是按工具栏上的 [image] 按钮，您只需点击希望的 Type、Category和Function，然后按Create Formula按钮，就可以获得放在工作区上的对象。

另外450多种VEE对象整理在五个下拉菜单中。只需点击主菜单，然后使用相应的子菜单(如有)，点击希望的对象，把它放在工作区上即可。下面简要概括介绍了五个下拉对象菜单：

Flow 这些对象影响着程序流程。某些对象执行传统执行控制，如条件分支和循环。其它对象使用延迟和选通等操作改变程序和数据定时。

Device 这是划分在一组中的各种各样的对象，包括使用的子菜单，如Virtual Sources和ActiveX Controls。它提供了方便的实用度具对象，如计数器、定时器和比较器。这里提供了Import Library和Sequencer对象。(如果在检查的第一个菜单中没有找到对象，那么应在Device菜单中查找对象。)

I/O 这些对象与VEE程序外面的软硬件交互。这个菜单包括与仪器、文件、打印机、其它流程等通信的对象。第一个菜单选项是功能强大的Instrument Manager。

Data 这些对象声明、生成和存取数据。这个菜单包括图形输入对象 (按钮, 旋钮, 滑尺等)、每种数据类型的常数、全局变量及方便的函数，如Unbuild Array, Merge Record, Concatenator等等。

Display 这些对象帮助您查看数据。这个菜单包括图形指示器(仪表, 温度计等)、字符数字显示、波形(示波器)显示、各种X-Y图、频谱极坐标图等等。

如需所有VEE函数和对象的字母列表，选择这个Help文件的Contents and Index，点击"Reference"部分。

Agilent VEE编程基础知识

作为程序构件，VEE对象在工作区中表现为一个矩形框。这些框执行程序操作，框之间使用直线连接。这些直线传送程序数据。数据从对象左侧(输出端)发出，进入右侧的下一个对象(输入端)。数据一直从左向右流动(如任何给定对象所看到的那样)。

在所有输入端收到数据后，对象执行操作。在执行操作后，对象把数据发送到所有输出端。这个周期持续通过程序图，直到所有对象完成所有操作。如需更详细的VEE程序流程介绍，请参阅了解传播内容。

VEE数据传播模型中的程序流程与C之类的文本语言中的程序流程不同。传统语言迫使编程人员在非常低的等级上定义执行程序。下面是一个简单的范例，它为变量赋值，计算变量和。这一任务的C代码段如下：

a = 2;
b = 3;
c = a + b;

C语法要求确定是应该先为"a"赋值还是应该先为"b"赋值。但是，实际上这一细节无关紧要，任何顺序都是可以的，只要在"a"和"b"相加前都有数据。对VEE陌生的编程人员有时会觉得在数据流程模型中?#32570;乏控制?#32780;感到不舒服，而资深的VEE编程人员则会提高效率，因为他们不需要控制这些细节。

由于只有在收到所有数据时对象才能完成作业，因此所有输入端必须被连接到某个数据源上。这要求注意另一个重要的VEE功能：数据类型/形状转换由输入端自动处理。例如，如果一个对象预计浮点数据，收到整数数据，那么其输入端会自动把收到的数据转换成正确的类型。尽管VEE为强制实施类型检查提供了多种可选的方式，但输入端的默认行为可以把您从类型检查和类型转换细节中解脱出来。这同样适用于数据形状。输入端可以收到一个数组或一个标量值，对象自动采取相应的操作。如需与VEE自动数据转换有关的更详细的信息，请参阅在输入端转换数据类型。

Agilent VEE和仪器

VEE编程环境有力支持电子仪器和测量任务。对早期原型阶段，VEE提供模拟信号源和显示画面。可以在没有任何外部硬件的情况下，实验程序流程和数据处理。如需更多信息，请参阅虚拟来源和波形显示内容，然后链接到其它模拟的设备上。

在准备实际环境数据时，VEE提供了一个Instrument Manager和一个动态I/O服务器，简化了发现、配置和管理外部仪器的任务。VEE支持多种仪器驱程，允许选择最适合首选项和/或仪器特点的驱程。在没有提供仪器时，只需在Instrument Manager中按一个按钮，就可以使驱程"脱机"，继续开发程序。如需更多信息：

参阅Instrument Manager内容。

在本Help文件的Contents中选择"How Do I..." [image] "Control Instruments"。

在本Help文件的Contents and Index中选择"Tell Me About..." [image] "Instrument Control Fundamentals"。

Agilent VEE编程提示

Agilent VEE是一种独特的编程环境，拥有某些其它程序中可能没有见过的特点。如果您对Agilent VEE感到陌生，那么大多数独特的特点会给您一个惊喜。即使如此，许多新的VEE用户仍会发现下述提示很有裨益：

工具栏为程序控制提供了方便的按钮，包括：
(Run), [image] (Pause), [image] (Stop),和 [image] (Step).

如果意外关闭Main窗口，可以使用 View [image] Main (或Ctrl-M)恢复窗口。

如果任何输入端没有连接，那么不能运行任何VEE程序。如果不想连接一个输入端，删除它。

如果意外选取错误的对象，按Esc键取消。在选取的对象没有打开的工作区接收对象时，也可以采取这种校正措施。按Esc键，取消对象，恢复正常鼠标操作。

VEE窗口的底部是一个状态栏。要养成检查底部状态栏，确定状态信息和有益提示的习惯。

更多地了解Agilent VEE

安捷伦提供了许多资源，可以帮助您更多地了解Agilent VEE，例如：

联机教程
VEE提供了对新VEE编程人员极具吸引力的多媒体教程。从Welcome Window中选择"Tutorials"，可以查看这些内容。在启动VEE开发环境时，会出现Welcome Window。如果VEE已经运行，可以从VEE主菜单条中选择Help [image] [image] Welcome，进入Welcome Window。

范例程序
VEE提供了100多种工作程序，作为各种概念的范例。从Welcome Window中选择"Example Programs"，可以浏览这些范例。也可以在这个Help文件的Contents 中，选择"Guide to Agilent VEE Example Programs"。

联机帮助内容
这个Help文件为定位信息提供了多种方式。Contents栏提供了字母"Reference"、与概念有关的"Tell Me About..."部分、"How Do I..."任务指南及其它有用部分。Index栏可以简便地搜索特定内容，Find栏中提供了全文搜索(定位没有合理地位于Index中的任何单词)。

培训班
安捷伦举办许多客户培训班，包括与VEE有关的培训班。如需更多信息，请选择：
Help [image] Agilent VEE on the Web [image] Education/Training

另请参阅

使用Agilent VEE的优势


Agilent VEE程序怎样工作

在测试开发中使用Agilent VEE的优势

Agilent VEE是为构建测试测量应用及带有操作人员界面的程序而优化的一种图形编程语言。本版Agilent VEE产品面向的是需要构建复杂的测试测量系统的工程师群体。

VEE在测试开发中提供了许多优势：

• 大幅度提高生产效率。许多客户报告称，其程序开发时间缩短了最多80%。

• 在各种应用中使用VEE，包括功能测试、设计检验、校准和数据采集与控制。

• 通过仪器I/O灵活地控制GPIB, VXI, 串行, GPIO, PC插件和LAN仪器。使用“面板”驱程, VXIplug&play驱程, 标准接口承载的“直接I/O”或从多个厂商导入的库。

• 在PC上使用ActiveXAutomation和控件，控制其它应用，如MS Word、Excel和Access，协助编制报告、显示和分析数据或把测试结果放在数据库中，以备将来使用。

• 提高吞吐量，轻松构建大型程序，更加灵活地进行仪器管理。VEE有一个汇编程序，适合大型复杂程序的专业开发环境，及先进的仪器管理功能。

• VEE支持Visual Studio .NET汇编程序，这意味着VEE支持真正支持Visual Studio .NET的任何文本语言。

• 可以进一步利用在文本语言中的投资，因为VEE还支持其它文本语言，如C/C++, Visual Basic, Pascal和Fortran。

通过从菜单中选择对象，把这些对象连接起来，可以创建VEE程序。VEE中的结果类似于一个数据流程图，比传统代码行使用和理解起来更容易。使用VEE没有繁琐的编辑-汇编-链接-执行周期。

下面两个图先比较了使用文本语言(ANSI C)编程的简单函数及之后使用VEE编程的函数。在这两种情况下，这个函数都创建一个由10个随机数字组成的数组，找出最大值，显示数组和最大值。

采用ANSI C文本语言的程序：

/* Program to find maximum element in array */

# include <math.h>

main( )

{

double num[10], max;

int i;

for (i=0;i<10;i++){

num[i]=(double) rand( )/pow(2.0,15.0);

printf("%f/n", num[i]);

}

max=num[0];

for (i=0;i<10;i++){

if (num[i]>max) max = num[i];

}

printf("/nmax; %f/n", max);

}

VEE中的程序：

在VEE中，程序使用称为对象的程序单元构建。对象是VEE程序的构件。它们执行各种函数，如I/O操作、分析和显示。如上图所示，在查看对象及其所有连接时，这称为细节视图。细节视图与文本语言中的源代码类似。

在VEE中，数据以统一的方式从一个对象移动到下一个对象：左面是数据输入，右面是数据输出，上面和下面是运行序列端。

多个对象连接在一起，构成一个程序。程序遵守从左到右的顺序。在上面所示的“随机”程序中，随机数字添加到Collector - Create Array对象中10次，创建一个数组。然后程序查找数组中的最大值，显示Max Value和Array Values。

通过使用VEE及其模块化编程方法，可以降低创建控制仪器、创建定制数据画面和开发操作人员界面的程序所需的时间。这种测试开发方法可以较传统技术大大改善生产效率。

备注

在上图中，部分对象详细显示，而部分对象只显示了名称。详细显示的对象在Open View中显示。Open View允许查看对象细节。为节约空间，提高程序执行速度，可以图标化对象，或减少这些对象，以便只显示名称。

例如，在上图，标有Random Number的对象显示为一个图标。标为Create Array的对象显示为Open View。Open View更大，更详细。

在Agilent VEE中创建操作人员界面

在VEE中编程的另一个优势是只需几分钟就可以创建操作人员界面。

使用上面的“随机”程序，选择操作人员所需的对象，并放到面板视图中。面板视图只显示了操作人员运行程序及查看得到的数据所需的对象。下图显示了上面“随机”程序的面板视图。

备注

程序及其操作人员界面是同一VEE程序的不同视图。通过点击VEE窗口标题栏中的细节视图按钮和面板视图按钮，可以从一个视图转到另一个视图。在程序中所作的任何编辑或更新(细节视图)都在操作人员界面(面板视图)中自动实现。还可以保护操作人员界面，防止有人作出不想要的变动。

如需与创建操作人员界面有关的更多信息，请参阅“创建面板视图(操作人员界面)"。

在VEE中，可以在几分钟内执行文本语言中可能要用几天才能完成的某些任务。

• 为程序创建直观的彩色前端。

• 创建可以与键盘或鼠标一起使用或只使用键盘输入的操作人员界面。

• 广泛的一系列用户输入和数据显示功能可供选择。

• 使用弹出面板，创建焦点，节约屏幕空间。

• 防止有人篡改程序。

• 使用标记，选择颜色和字体，增加各种格式的蜂鸣器、写字板、按钮和开关。

• 使用自己的或标准的商用ActiveX控件，实现用户输入或显示数据。

与Agilent VEE一起利用已有的测试程序

在支持的所有操作系统上，VEE为链接传统测试程序及商用应用提供了多种机制。例如，可以使用VEE，对C, C++, Visual Basic, Fortran或Pascal中 (或操作系统上任何汇编的语言或解释的语言)的现有测试排序。也可以使用真正支持Visual Studio .NET的任何语言。

VEE还提供了大量的流程间通信功能，与商用应用共享数据，如数据库或电子表格。VEE还支持与ActiveX Automation和控件及DLL的标准捆绑关系。

使用Agilent VEE控制仪器

VEE为控制及与仪器通信提供了多种选项。

• 在Windows 2000或Windows XP中使用不同厂商提供的450多种仪器的面板驱程(仪器驱程)，及使用各种厂商提供的兼容VXIplug&play的所有驱程。

• 使用VEE的直接I/O，通过标准接口发送仪器命令串，如GPIB (IEEE - 488), GPIO, RS 232, VXI或基于LAN的仪器，进行远程测试。

• 控制任何制造商生产的PC板卡，只要电路板提供动态链接库即可。

• 使用直接VXI背板控件，采用嵌入式PC或工作站。

• 简便的、有条理的仪器管理功能，控制各种仪器类型。

使用Agilent VEE改善测试功能

VEE产品提供了下述功能和优势：

• 图形编程，降低了开发和维护时间。

• 与传统语言集成，如C, C++, Visual Basic, Pascal和Fortran。

• 方便灵活的操作人员界面功能。

• 支持最流行的测试平台。

• 使用ActiveX Automation和控件。

• 安捷伦科技杰出的支持选项系列。

• 简便强大的存档工具。

• 简便地把测试数据移植到标准电子表格和字处理程序中，编制报告。

• 流程间通信工具，与其它程序链接起来，如关系数据库或统计分析软件包 (6.0版及更高版本)。

• 调试工具，高效开发和维护大型复杂程序(6.0版及更高版本)。

• 产品中包括强大的测试执行工具(6.0版及更高版本)。

• 使用VEE的Web监测功能，实现远程测试功能 (6.0版及更高版本)。

• 分发程序运行时不受限制(6.0版及更高版本)。

• 低价站点许可(6.0版及更高版本)。

另请参阅

VEE介绍, 安装Agilent VEE

Copyright (c) 1991-2006年安捷伦科技公司版权所有


执行模式

执行模式

改变执行模式的影响

相关读物


Execution Mode

了解执行模式

什么是执行模式?

每个VEE版本都有多个执行模式。(在以前的版本中，它们称为"兼容能力模式") 这些模式允许较新版本的VEE运行使用较旧版本的VEE创建的程序，其运行方式与旧VEE完全相同。这称为?#21521;下兼容能力?#65292;通过使用这些执行模式，所有VEE版本都实现了100%向下兼容能力。

例如，VEE 4.0版有两种执行(兼容能力)模式：VEE 3.x和VEE 4。这允许VEE 4.0运行使用VEE 3.0 (或以前版本)创建的旧程序，其方式与VEE 3.0中完全相同。如果想在Compiled模式下运行VEE 3程序，您可以切换模式，VEE 4将在Compiler下运行程序。

同样，VEE 5.0版有三种执行(兼容能力)模式：VEE 3.x, VEE 4和VEE 5。在VEE 6.0版中，增加了VEE 6执行模式。VEE程序知道创建程序的VEE版本及使用的执行模式。在VEE加载程序时，VEE把自己放到相应的执行模式下，因此程序会以与旧版本VEE完全相同的方式运行。

一旦使用执行模式编写并保存程序，程序将保留该执行模式，除非用户改变它。例如，假设您在5.0版中开发和保存了一个程序。这个程序使用Execution Mode VEE 5保存。如果在6.0版中加载并保存程序，程序仍有Execution Mode VEE 5。除非改变执行模式(使用Default Preferences对话框或其它方式)，否则程序的执行模式不变，而不管哪个VEE版本加载程序。

VEE 6执行模式将用于VEE 7中。此外，在以前的VEE版本中，有可能在旧版本中运行在新版VEE中创建的程序，这取决于程序中包含哪些功能。但是，不能在以前的版本中运行使用VEE 7编写的程序。

为什么应该改变执行模式?

如果在现有程序中增加了新功能，那么应该改变执行模式。例如，假设有一个程序是使用5.0版编写的(使用相关的Execution Mode VEE 5)。为增加6.0版中提供的新功能(如新的数据类型)，应把执行模式变成VEE 6。如果改变程序，但没有改变执行模式，那么程序中新增的功能可能不能正确运行。

什么时候应该改变执行模式?

在大多数情况下，只要执行模式没有变化，使用以前的VEE版本编写的程序将100%在新版本VEE中运行。但是，只有在使用最新的执行模式时，您可能才能增加新功能。

下表列出了各种版本和执行模式将运行的程序组合。注意，只要执行程序不变，旧程序将在任何版本中运行。只有在切换执行模式时，才会发生潜在问题。

执行模式中创建的程序：

在VEE中运行 | VEE 4 | VEE 5 | VEE 6&7 | VEE 8
VEE 4版 | 运行 | CNA | CNA | CNA
VEE 5版 | 运行 | 运行 | CNA | CNA
VEE 6版 | 运行 | 运行 | 运行 | 运行
VEE 7版 | 运行 | 运行 | 运行 | 运行
VEE 7.5版 | 运行 | 运行 | 运行 | 运行
VEE 8.0版 | 运行 | 运行 | 运行 | 运行

CNA表示不保证兼容能力。如果没有包括较高版本中独有的任何功能，那么在较高版本的VEE中创建的程序可能能够在以前版本的VEE中加载和运行。利用新增功能的程序将不能在旧版本VEE上正确运行，在某些情况下，程序甚至不能加载到旧版本VEE中。执行模式的重要作用是保证现有程序将在新版本VEE上运行，但不能保证新功能在旧版本VEE上运行。

执行模式切换指导准则

在开发新程序时，应使用最新的执行模式。

通过选择相应的执行模式(VEE 3用于VEE 3.x程序, VEE 4用于VEE 4.x程序, VEE 5用于VEE 5.x程序)，可以运行任何现有的VEE程序。在加载程序时，会自动为旧程序设置相应的模式。

如果加载设置成VEE 5或更低执行模式的程序，并切换到VEE 6执行模式，旧程序可能会正确运行，也可能不会正确运行。大多数程序将正确运行。参阅下面的?#28431;洞修复?#23454;例，这种漏洞可能会导致程序以不同的方式运行。

例如，假设有一个5.0版程序(Execution Mode VEE 5)，包括一个进行WRITE BINARY BYTE事务的To File。在5.0版(及以前版本)中，可以发送"300"，得到"44"写入文件中。(从技术上看，这是一个漏洞，因为"300"不能放到一个字节中。)

在VEE 5执行模式中，仍可以获得"44"，保留程序的兼容能力。但是，在VEE 6执行模式中，您会得到一条错误信息，表明VEE不能把300转换成UInt8 (超出范围)。

位置

File [image] Default Preferences [image] Execution Mode

另请参阅

执行模式


改变执行模式的影响

下面的范例演示了在更新程序时速度提高情况。本例的重点是没有仪器I/O时的程序速度。

1 打开examples\Applications子目录下的chaos.vee程序。

这个程序演示了人口呈爆炸性增长。可以修改程序，如下图所示，使用Timer对象检查结果。这些范例在采用Windows 98操作系统的300MHz Pavillion PC上运行，同时还运行另外两个大型程序。

程序定时执行，在VEE 3执行模式下打开显示画面。

下面的画面在没有打开汇编程序的情况被图标化，以改善速度。这使执行时间缩减了大约1/6。

最后，在使调试功能失效的情况下打开汇编程序。为实现最优性能，在全面调试程序，准备投入使用时，在File [image] Default Preferences中复选Disable Debug Features框。

调试工具启用多种工具，如Show Execution Flow和Activate Breakpoints。在复选Disable Debug Features时，这可以改善程序的大小(在内存中)及程序的速度。可以看到，程序运行速度提高了大约12倍。这三个图显示了通过结合使用优化技术和汇编程序，可以怎样实现最佳的速度结果。

在下面的两个程序中，在涉及迭代标量数学例程的程序区域中使用汇编程序，改善VEE速度。本例计算标量值的平方根。(没有保存结果) 通过使用汇编程序，其速度比使用VEE 3执行模式提高了大约107倍。

VEE包括执行模式，因为在老版本VEE中允许的许多编程选项在当前版本中都不允许(它们现在会生成错误信息)。此外，由于ActiveXAutomation和控件功能的某些进步，过去在VEE 4或VEE 5模式下运行的部分程序只需稍作修改，就可以在VEE 6模式下运行。如需与各执行模式之间的区别有关的详细信息，请参阅VEE Pro高级技术手册。对所有新程序，您应该在VEE 6模式中开始。


执行模式变化: 从VEE 3到VEE 4

使用VEE 4.0以前版本编写的VEE程序的运行方式与在VEE 3模式下完全相同。为保证这一点，在加载旧程序时，会自动启动解释程序。本节介绍了VEE 4.0版、即VEE 4模式下的新功能和增强功能。

汇编程序模式下线的颜色

在汇编程序模式下，VEE根据线上流过的数据类型为连接对象的数据线指配不同的颜色。下面列出了默认的颜色及颜色属性名称。可以在从File菜单选择的Default Preferences对话框中改变其设置。在Screen Element框中选择想改变的线，点击Color Value框，打开调色板，点击首选的颜色。点击OK，为选择的线型保留新颜色。

  • 深天蓝色: 数字(IInteger或Real类型)

  • 深天蓝色: 复数(Complex和PComplex类型)

  • 中橙色: 字符串(String类型)

  • 中天蓝色: 序列输出(空值, 通常来自序列输出线)

  • 洋红色: 高亮度显示

  • 黑色: 未知类型或类型没有优化(如Record类型)

如果数据类型是一个数组，那么VEE会显示较宽的线。为提高速度，应检查程序，确定带颜色的线。非黑线越多，程序的运行速度越快。

潜在的兼容能力问题

使用VEE 4.0以前版本编写的程序自动在VEE 3模式下运行。使用VEE 4.x编写的程序自动在VEE 4模式下运行。使用VEE 5.x编写的程序自动在VEE 5模式下运行。但是，可以随时改变程序的执行模式。

在把现有程序从VEE 3变成VEE 4时，在某些区域可能会出现兼容能力问题。下面介绍了潜在的问题区域。使用老版VEE的相关信息与使用解释模式或VEE 3模式相同。

分时UserFunction

在VEE 4.0以前的版本中，UserFunction在程序其余部分不进行分时。在汇编模式下，在从不同的线程调用时，UserFunction将进行分时。在不希望并行化时，一定要使用Call对象之间的序列端。

只有在从Call, Formula, If/Then/Else或Sequencer对象调用时(只从Function字段调用时)，UserFunction才进行分时。在从Call或上面列出的其它对象调用时，现在断点也可以用于UserFunction中。

在从To File、To String或类似对象调用，或通过控制端提供公式时，UserFunction不进行分时，也不能使用断点。

如果正在执行UserFunction，再次从程序的另一部分调用它，那么将阻塞该调用，直到原始调用返回。

UserObjects

UserObject将一直在以前版本中分时，但在汇编模式下，其只在从不同线程调用时才进行分时。

函数优先次序

从Formula对象调用的函数优先次序已经变成：

1 内部函数(如sin()和totSize())

2 局部UserFunction

3 导入的UserFunction

4 汇编的函数

5 远程函数

在VEE 3执行模式下，内部函数的优先次序最低，因此可以使用自己的函数覆盖内部函数，如totsize()或fft()。

Auto Execute和Start

在使用某些对象的Auto Execute功能时，行为略有变化。在汇编模式下，其行为就象对象直接挂到Start对象、按下Start按钮一样。这一变化对大多数程序没有影响。

OK按钮和Wait for Input

大多数异步对象如OK对象，或已经启动Wait for Input的任何对象，将在下面两个领域中在汇编模式下更好地工作：

步进：在以前的版本中，这些对象上的步进通常会结束程序。在汇编程序模式下，步进可以正常工作。

CPU使用：在以前的版本中，执行这些对象通常会提高CPU使用量。在汇编程序模式下，CPU保持空闲状态。

没有数据的Collector

在以前的版本中，如果ping还没有使用数据ping通的Collector的XEQ端，那么会输出一个空容器。在汇编程序模式下，如果在汇编时已知数据类型，那么会得到该数据类型的零个要素的数组。否则，会得到Integer类型的零个要素的数组。

这一变化允许类型推论更加一致，从Collector对象下游生成更好的p代码。注意空totSize()会得到一个1，而零个要素的数组的totSize()会得到一个零。

没有数据的Sample & Hold

在以前的版本中，如果ping还没有使用数据ping通Sample & Hold对象的XEQ端，那么会输出一个空容器。在汇编程序模式下，会产生下面的错误(错误号937)：

Sample & Hold was not given any data.

这一变化允许类型推论更加一致，从Sample & Hold对象下游生成更好的p代码。

Timer对象

在以前的版本中，如果在Time1端之前ping Time2端(底部数据输入端)，Timer对象会输出一个没有定义的结果。在汇编程序模式下，如果执行各端时失序，Timer对象会生成错误。

反馈周期

在汇编程序模式下，在反馈周期内部要求一个Junction对象。不再要求Start对象。在检测到没有Junction的反馈时，会生成下面的错误(错误号935)：

在反馈周期内部要求一个Junction，下面是两个范例。

VEE 4.0及更高版本不允许无效连接，如对象的数据输入端连接到数据输出端，或对大多数对象把序列输出端连接到数据输入端。

并行线程

在VEE 3执行模式中，独立线程将在每个线程之间循环，这意味着将在一个线程中执行一个对象，然后将在其它线程中执行一个对象，依此类推。在汇编程序模式下，这一行为没有保障。

循环范围

为提高循环性能，只在第一个迭代开头、而不是在每次迭代时检查迭代器的范围(如For Range对象中的Step字段)。对象的字段在运行时变成灰色，表示不能改变其值。如果在正在运行循环时取值变化，那么将忽略到迭代器的数据输入。

例如，如果在循环运行时通过数据输入端改变For Range对象的Step值，那么在VEE 4及更高的执行模式中将忽略它。在以前的版本中，在每次迭代时都会检查步进值。

UserObjects和Calls With XEQ Pins

在4.0以前的版本中，可能会在满足所有数据输入端之前在UserObject或Call对象上的XEQ端运行UserObject或UserFunction。其没有定义连接到未清除的数据输入的UserObject或UserFunction内部的对象行为。在VEE 4及更高的执行模式中，不允许进行这种操作。这些对象上的XEQ端将生成错误，在这些对象中不再添加XEQ端。

OK Buttons With XEQ Pins

在4.0以前的版本中，在按OK按钮或在XEQ端发送数据时，带有XEQ端的OK对象只执行一次。在VEE 4及更高的执行模式中，每次在XEQ端发送数据时，都会执行OK按钮。在OK对象中不再添加XEQ端。

带有EOF端的From File

在4.0以前的版本中，From File对象上的数据输出端处理方式不同于VEE中的其它数据输出端。如果From File位于循环中，那么在执行EOF数据输出端时，输出端上的数据会保持有效。

在VEE 4及更高的执行模式中，每次在执行循环时，将不检验来自From File对象的数据输出(与所有其它对象上一样)。因此，在执行EOF端时，数据输出已经无效，不能传播。

下面的范例说明了这种情况。在4.0以前的版本中，即使执行另一个循环迭代，输入到Formula上A中的数据仍保持有效。为在Formula的B中输入有效数据，将执行EOF端(在底部)，然后执行Formula。

.

在VEE 4及更高的执行模式中，只要下一个循环迭代开始，那么将不会检验输入A的数据。由于Formula在相同的循环迭代上没有获得有效输入，因此它永远不会执行。

并行联接

在VEE 4.0以前的版本中，如果有与Junction对象并行连接的没有限制的对象，那么连接顺序会影响执行顺序。在VEE 4及更高的执行模式中，连接的顺序无关紧要。

循环相交

在VEE 4.0以前的版本中，可以使迭代对象相交。其没有定义执行顺序，但会受到连接顺序的影响。在VEE 4及更高的执行模式中，只允许使用通过Junction对象相交的循环。任何其它相交循环会生成错误938。VEE不能汇编这部分程序。参阅下面的范例。

通过联接使循环相交

在VEE 4.0以前的版本中，下面的范例将先执行Integer。在程序遇到Break时，它将停止。在VEE 4及更高的执行模式中，下面的范例在Integer对象后运行For Count对象，因为Break没有停止程序。

Open View对象变化

在VEE 4.0以前的版本中，可以在程序正在运行或程序暂停时改变open view字段中的数据。这些变化将影响程序行为，结果没有保障。在VEE 4及更高的执行模式中，在程序正在运行或程序暂停时许多对象不允许进行这类修改(输入字段变成灰色)。部分范例如下：

  • Formula和If/Then

  • Collector

  • 所有Transaction对象的事务

  • Get Mappings和Set Mappings

  • Get Values和Set Values

  • 常数的属性，如设置Scalar或1D Array, Wait for Input或Auto Execute

  • 设置属性，如Clear at PreRun

  • UserObject和UserFunction Trig Mode

  • Dialog Box属性

在对象上增删输入端或输出端在运行时会变成灰色(但在暂停时不会)。如果在程序暂停时进行这一操作，那么程序会停止(与VEE 4.0以前的版本中一样)。

表达式中的数组语法

在程序加载时，将重新解析输入数组语法、没有逗号的表达式，如[1 2 3]，并自动修改成使用逗号，如[1,2,3]。这适用于VEE 3和VEE 4模式下的程序。


执行模式变化: 从VEE 4到VEE 5

在VEE 5.0中，VEE 4和VEE 3模式保留了VEE 4.0中设置的兼容能力定义。其只是略有变化，不影响原来的执行模式下(VEE 3或VEE 4)运行的现有程序。如果您计划把程序从旧模式变成新模式，那么了解这些变化非常重要。

关于VEE 5执行模式

VEE 5执行模式是VEE 4模式的超集。VEE 5模式保留了上面介绍的汇编程序功能，引入了影响程序兼容能力的明显变化。大多数变化可以支持ActiveX Automation和控件。

如果使用本节中介绍的任何功能，即使不使用ActiveX，其它变化可能仍会影响编程技术。如需与在VEE中使用ActiveX有关的更多信息，请参阅在VEE中使用ActiveX Automation。

把程序变成VEE 5执行模式

旧程序将以相应的旧执行模式自动打开。如果您想把旧程序变成新模式，您必须使用文件菜单下的Default Preferences手动完成这一操作。在把程序变成VEE 5模式时，可能会发生错误。会出现一个列表，解释出现的问题。您需要修复这些错误，然后VEE 6.0才能接受切换到VEE 5模式。VEE 6.0不会自动修订任何程序部分来修复错误。

VEE 5执行模式变化

为帮助您了解怎样修复错误，下面介绍了VEE 5模式兼容能力变化。

备注

如果您想把VEE 3.x程序变成VEE 5模式，您应该先确认其在VEE 4模式下工作，然后把它们变成VEE 5模式。如需转换相关帮助，请参阅“执行模式变化：从VEE 3到VEE 4" 。

菜单变化

作为VEE 5.0中增加的ActiveX支持的一部分，Device菜单略有变化。已经增加了下面的新菜单项：

ActiveX Automation References…

ActiveX Control References…

ActiveX Controls

此外，用来打开Select Functions对话框的菜单项Math & Functions现在叫作Function & Object Browser，用来打开Function & Object Browser。仍可以以相同的方式使用它，为程序选择数学运算符和函数，其扩展功能支持ActiveX。

表达式

下面的变化影响着包含表达式的对象，如Formula：

  • SET和ByRef是ActiveX automation使用的新关键字。这些关键字被预留，不能作为端的名称使用。

  • ActiveX automation支持新的语法，如excel.worksheets(1).cells(1,2) = 2。

  • 在VEE 3和VEE 4模式下，在程序加载时，会重新解析输入的没有逗号的数组语法表达式，如[1 2 3，并自动修改成使用逗号，如[1,2,3]。在VEE 5和更高模式下，输入没有逗号的数组语法，如[1 2 3]，在Formula丢失焦点时会导致错误。

  • 1值会返回一个INT32，1.0会返回一个REAL64。以前这两个值都会返回一个REAL64。

  • ActiveX automation有两个新的内置函数：CreateObject()和GetObject()。

  • ActiveX automation有两个新的内置常数：true和false。

变量

下面的变化影响着变量：

  • 在打开Delete Variables at PreRun时(在Default Preferences中)，如果其参考ActiveX控件，那么不会删除全局变量。

  • Declare Variable对象有一个新的变量类型，称为Object，用于ActiveX automation。

  • 输入端还作为Required Type提供了新的Object变量类型，但其不能强制转换到另一种类型或从另一种类型强制转换过来。

全局名字空间

全局名字空间规则已经变化，它通过以下方式影响着为变量、函数和库提供的名称：

  • Local UserFunctions、Library名称、全局声明变量和未声明变量和库局部声明变量现在都处在同一个名字空间中，必须拥有唯一的名称。如果现有程序包含一个以上的名称实例，那么这会影响现有的程序。例如，不能有名字都是daily_results的UserFunction和声明全局变量。在把程序切换到VEE 5模式时，这会导致错误。

  • 在Library内部，本地UserFunctions和库局部声明变量处在同一个名字空间中，必须拥有唯一的名称。在把程序切换到VEE 5模式时，或者如果把包含名称冲突的Library导入到VEE 5模式程序中，这会导致错误。

  • 在所有模式下，Formula对象都允许使用新的语法，如：

    lib.func(a,b) = RightHandExpr

    这在所有模式下都会正确解析。但是，它只能在VEE 5和更高模式下正确执行，在VEE 3和VEE 4模式下会导致运行时错误。

在VEE查找Formula中使用的变量和函数名称时，全局名字空间变化还把VEE 5和更高模式下使用的优先顺序变成下面的顺序：

1 本地输入/输出端。

2 声明的上下文局部变量。

3 在UserFunction上下文中时声明的库局部变量。

4 全局声明变量和未声明变量, 局部UserFunctions, Library名称。这些名称必须是唯一的。

5 内置函数, 如sin()和totSize()。

6 ActiveX控件和automation常数，这取决于使用Device [image] ActiveX Automation References或ActiveX Control References参考了哪个库。例如，Excel的自动库中存在许多常数，如xlMaximized。

7 Imported UserFunctions, Compiled Functions和Remote Functions按随机顺序出现。为保证获得正确的函数，与myLib.func()中一样，应包括导入的Library的名称。

这一新顺序怎样导致旧程序失效的异常范例可能会涉及一个Formula，其中包含表达式sin(90)，并有一个名叫sin的数据输入端(一个变量)。在VEE 3和VEE 4模式下，VEE忽略输入端名称，调用sin()内置函数。

但VEE 5和更高模式采用新的优先顺序，查找函数和变量名称。因此，VEE 7.0查找端名称，假设它在输入上有一个ActiveX对象，试着调用对象的默认方法。调用ActiveX对象默认方法的表达式cells(1,1)与sin(90)类似。如需与ActiveX有关的信息，参阅在VEE中使用ActiveX Automation。

READ TEXT事务

在VEE 3和VEE 4模式下，采用TOKEN格式及EXCLUDE CHARS的READ TEXT事务不会使读指针前移，以便不包括指定字符。下面是VEE 4模式下的范例：

这是意想不到的结果。预计结果是排除字符"*"隔开的每个短语都会出现在单独的字母数字显示画面中，如上面的VEE 5模式范例中所示。

To/From File和To/From DataSet之间交互

在VEE 3和VEE 4模式下，在EXECUTE REWIND事务中使用To File或 From File对象访问与To DataSet或From DataSet对象相同的数据文件的程序可能会导致意想不到的交互。更具体地说，如果程序使用From File (对EXECUTE REWIND)从文件中读取数据，然后使用To DataSet把数据写回同一个文件，数据写入可能会不正确。

在使用From DataSet和To File时，可能会发生类似的交互。在VEE 5和更高模式下，解决了这种意想不到的交互，从而数据会正确写入文件。但是，我们仍不建议在同一个文件上混合使用To/From File操作和To/From DataSet操作。


执行模式变化：从VEE 5到VEE 6

在VEE 6.0中，VEE 4和VEE 3模式保留了VEE 4.0中设置的兼容能力定义。其只是略有变化，不影响原来的执行模式下(VEE 3或VEE 4)运行的现有程序。如果您计划把程序从旧模式变成新模式，那么了解这些变化非常重要，具体变化如下。

关于VEE 5执行模式

VEE 5执行模式是VEE 4模式的超集。VEE 5模式保留了上面介绍的汇编程序功能，引入了影响程序兼容能力的明显变化。大多数变化可以支持ActiveX Automation和控件。

如果使用本节中介绍的任何功能，即使不使用ActiveX，其它变化可能仍会影响编程技术。如需与在VEE中使用ActiveX有关的更多信息，请参阅在VEE中使用ActiveX Automation。

新的数据类型

Int16, Real32, Variant和UInt8是VEE 6.0中新的数据类型。所有新数据类型和新事务，如WRITE TEXT INT16，会出现在所有执行模式中。但是，新事务在旧模式下采取旧的行为方式。

例如，在VEE 5模式下，WRITE BINARY INT16实际上作为WRITE BINARY INT32操作，不会把数据转换成Int16。在VEE 6模式下，WRITE BINARY INT16则会把数据转换成Int16。如需了解VEE执行模式怎样改变程序行为方式，参阅了解传播。

Variant到VEE数据类型转换 - 改善了数组处理能力

在从ActiveX Automation Server (如Excel)或ActiveX控件返回数据时，VEE必须把automation数据类型转换成VEE数据类型。在VEE 5.0中，Variants的数组转换成VEE Record。在VEE 6.0中(在VEE 6执行模式下)，如果所有要素的数据类型相同，那么由多个Variant组成的数组转换成一个VEE数组。(对混合数据类型，较VEE 5.0行为没有变化。)

如果一个数组的所有要素的数据类型相同，那么Variant数据类型与VEE数组数据类型的映射如下。

备注

这一功能只在VEE 6执行模式下提供。

Variant数组数字类型 | VEE 7.0数据类型
VT_UI1 VT_BOOL VT_I2 VT_UI2 VT_I4 VT_UI4 VT_R4 VT_R8 VT_DATE VT_CY VT_BSTR VT_DISPATCH | UInt8 Int16 Int16 Int16 Int32 Int32 Real32 Real64 Real64 Real64 Text Object

但是，新的VEE 6数据类型和ActiveX automation servers之间的兼容能力方面仍有一些空白：

• Boolean (VT_BOOL), Date (VT_DATE), Currency (VT_CY)和Error (VT_ERROR)之类的数据类型没有相应的内置VEE数据类型。下面介绍的Set函数和Query函数中支持对ActiveX中的"ByRef"使用这些数据类型。

• 某些特殊的Variant值，如Empty (VT_EMPTY)和NULL (VT_NULL)，没有同等值，不能唯一地识别这些值。

Set函数

Set函数告诉VEE在ActiveX Automation操作过程中，这些函数返回的容器将特殊对待。Set函数包括：

asVariantBool()

asVariantCurrency()

asVariantDate()

asVariantError()

asVariantEmpty()

asVariantNull()

Query函数

Query函数用于从自动操作方法和属性的返回值创建的容器中。Query函数包括：

isVariantBool()

isVariantCurrency()

isVariantDate()

isVariantError()

isVariantEmpty()

isVariantNull()

更新的函数

VEE 6.0中更新了下述函数：

whichOS() — 更新了"Windows_98"和"Windows_2000"的返回值。

createObject() — 更新了可选的第二个参数，指定了远程主计算机的名称。


执行模式变化: 从VEE 6&7 到VEE 8

在Agilent VEE 8.0中，VEE 6&7、VEE 5、VEE 4和VEE 3执行模式保留其兼容能力定义集。它们略有变化，但不影响在原始执行模式下运行的现有程序。如果您计划把程序从旧模式转换成新模式，那么有必要知道这些变化。下面介绍了这些变化。

关于VEE 8执行模式

VEE 8执行模式是VEE 6&7模式的超集。主要变化是VEE 8.0引入了两种数据类型。

新数据类型

Int64和Boolean是Agilent VEE 8.0中新的数据类型。

Int64表示从-9223372036854775808到9223372036854775807的值，有22位数据精度。

Boolean表示一个值，其可以是True或False。

在所有执行模式下，将在事务中添加新的事务格式WRITE TEXT INT64和WRITE TEXT BOOLEAN。在每种执行模式下，输入数据将转换成Int64或Boolean。如需了解VEE执行模式改变程序行为的方式，参阅了解传播。

Integer常数运算

Integer常数运算在VEE 8模式下可能会返回不同的数据类型。

运算 | 数据类型
MaxInt32+1 | Int64
MaxInt32-1 | Int32
MaxInt64+1 | 数据溢出#514错误
MaxInt64-1 | Int64
MinInt32-1 | Int64
MinInt32+1 | Int32
MinInt64-1 | 数据溢出#514错误
MinInt64+1 | Int64

内置数字常数

True和False是VEE 8执行模式下的Boolean数据类型，它可以用来直接设置.NET或COM属性。例如，可以在下面的公式中设置TreeView的ShowLine属性：

TreeView.ShowLines = true;

MaxInt64和MinInt64提供了最大Int64 Constant或最小Int64 Constant。

在VEE 8模式下，.NET运算构建程序将对Boolean数据类型使用True/False，在VEE 6&7模式下则使用asVariantBool( )。

Variant到Agilent VEE数据类型转换 - 新增VT_I8

Variant数组成员类型 | Agilent VEE 8.0数据类型
VT_UI1 VT_BOOL VT_I2 VT_UI2 VT_I4 VT_I8 VT_UI4 VT_R4 VT_R8 VT_DATE VT_CY VT_BSTR VT_DISPATCH | UInt8 Boolean (Agilent VEE 8.0中新的数据类型) Int16 Int16 Int32 Int64 (Agilent VEE 8.0中新的数据类型) Int32 Real32 Real64 Real64 Real64 Text Object

两个新的内置类型转换函数

asBoolean()

asInt64()

另请参阅

执行模式变化: 从VEE 5到VEE 6&7


相关资料

如需与本手册中讨论的仪器控制内容有关的更详细的信息，请参阅下述资料。

• 惠普接口总线教程说明(惠普公司, 1987), 部件编号5021-1927。

本文简要介绍了IEEE 488.1和IEEE 488.2中包含的重要概念。如果您不熟悉IEEE 488.1接口，最好看一下这个文件。

• IEEE标准488.1-1987, IEEE程控仪器标准数字接口 (电气和电子工程师学会, 1987)。

这个标准定义了设计和构建GPIB (IEEE 488.1)接口要求的技术细节。这个标准包含与协议有关的各种电气规范和信息，超出了大多数编程人员的需求。

• IEEE标准488.2-1987, 与ANSI/IEEE标准488.1-1987一起使用的IEEE标准代码、格式、协议和常用命令 (电气和电子工程师学会, 1987)。

本文介绍了实现程控仪器标准命令(SCPI)的仪器使用的底层消息格式和数据类型。

• IEEE标准728-1982, 用于ANSI/IEEE Std 488-1978等的IEEE推荐代码、格式转换惯例(电气和电子工程师学会, 1983)。

• VMEbus仪器扩展, 包括: "VXI-0, Rev. 1.0: VXIbus规范概述"和"VXI-1, Rev. 1.4: 系统规范," VXIbus协会公司, 1992。

• HP VISA用户指南(惠普公司, 1998), 部件编号E2090-90035。

本文适合创建自己的VXIplug&play驱程的用户，提供了与处理和使用VXIplug&play驱程有关的其它信息。


关于汇编程序

关于汇编器

为使用汇编器，并包括ActiveX Automation和控件，应把Execution Mode设置成VEE 6&7 or higher。如果想把VEE 3程序转换成VEE 8模式，那么应先确认其能够在VEE 4、VEE 5和VEE 6&7模式下工作，因为每个模式之间会存在一些程序执行差异。

备注

为使用汇编器，不一定要了解本节中的信息。本节介绍了汇编器背后的概念，仅供参考。与汇编器有关的信息适用于VEE 4及更高模式，但略有变化。

汇编器可以用于在VEE 4, VEE 5, VEE 6&7或VEE 8模式下运行的程序。VEE汇编器把VEE程序转换成p代码，但没有机器语言或生成可执行程序。

汇编器允许VEE：

• 在汇编时预测(而不是在运行时确定)对象执行顺序

• 确定某些数据线上流动的数据类型

• 优化代码生成

• 为任何给定的VEE对象生成和执行最优的p代码

在按Run按钮时，VEE程序透明地进行汇编。它全面支持步进和断点，并支持Show Execution Flow、Show Data Flow和Line Probe。

在以后运行相同的没有修改的程序时，不要求重新汇编。在修改程序时，只需重新汇编需要重新汇编的上下文(这在很大程度上与增量汇编器类似)。使用汇编器可以为大多数程序带来好处，但实际结果可能会变化。例如，使用多级嵌套循环的程序的速度提高程度要高于进行大量I/O或屏幕更新的程序(如显示画面)。

在汇编模式下，迭代器和公式在执行速度改善程度上最好。使用以前版本的VEE编写的程序运行方式可能不会与汇编器完全相同。这可能是由于具体编程技术、使用没有存档的负面效应、甚至存档行为略微变化导致的。


仪器控制基础知识

VEE支持与仪器通信的多种对象。

下表概括了这些仪器控制对象之间的区别。

VEE对象 | 仪器访问 | 主要好处 | 支持的接口
Direct I/O | 直接与任何仪器通信。 | 快速I/O。可以控制任何仪器 | GPIB, 串行, GPIO, VXI和LAN
To/From VXIplug&play | 要求仪器制造商提供每个平台专用的VXIplug&play 驱程。要求安装VISA。 | 快速I/O。驱程可以由多个应用软件使用 | GPIB, VXI, USB, LAN和串行
IVI-COM Driver | 与安装了IVI驱程的仪器通信 | 仪器互换能力 | GPIB, VXI, LAN, USB, 串行
NIDAQ Driver | 驱程通过多个不同的接口类型与National Instruments插件通信 | 简便易用的NI仪器 | NI-DAQmx, NI-DMM, NI-SCOPE, NI-FGEN, NI-SWITCH和传统 NI-DAQ
Multi-Instrument Direct I/O | 直接与多台仪器通信 | 快速I/O。可以控制任何仪器 | GPIB, 串行, GPIO, VXI和LAN
Panel Driver | 要求VEE提供的Instrument Panel Driverb | 简便易用 | GPIB和VXI
Component Driver | 要求VEE提供的Instrument Panel Driver | I/O速度比Panel Driver快 | GPIB和VXI
PC Plugin Card Driverc | 要求仪器制造商提供ODAS驱程 | 快速I/O。驱程可以由多个应用软件使用 | PC插件插槽

b. Panel Driver有时也称为"VEE驱程"。

c. VEE 8.0中不再提供PC插件支持。

To/From VXIplug&play、Panel Driver、Component Driver、IVI-COM Driver、NIDAQ Drive和Plug&Play Driver对象允许控制仪器，而不用了解仪器编程助记符和语法细节。如果您首选通过发送低级助记符与仪器通信，或者如果没有为仪器提供驱程，那么可以使用Direct I/O。

备注

可以使用所有这些方法，与VEE程序内部的不同仪器通信。但是，不要与任何其它方法一起使用VXIplug&play驱程，与同一程序中的同一台仪器通信，否则可能会发生意想不到的结果。


Direct I/O介绍

Direct I/O对象在很大程度上允许以与读写文件相同的方式读写任何仪器数据。您可以全面存取任何仪器的任何程控功能。它不要求仪器驱程文件，但必须详细了解仪器的编程命令，才能使用Direct I/O。为使用Direct I/O与GPIB、VXI或Serial设备通信，必须安装I/O库。

Direct I/O对象还方便地支持学习字符串。学习字符串是某些仪器支持的专用功能，允许从物理仪器的前面板设置测量状态。一旦配置仪器，可以从Direct I/O对象菜单中选择Upload，把仪器的整个测量状态上传到VEE。通过使用Direct I/O对象，可以从程序内部调用测量状态。

Direct I/O范例

下图显示了从HP 34401A万用表获得识别字符串的Direct I/O对象设置：

Direct I/O对象中的第一个处理把文本字符串*IDN?写入GPIB地址722上的HP 34401A。这导致HP 34401A发送识别字符串，第二个处理读取这个字符串，输出到AlphaNumeric对象。

如需与怎样配置VEE使用Direct I/O有关的信息。请参阅配置Direct I/O对象。如需与怎样使用Direct I/O对象有关的详情，请参阅使用Direct I/O对象。

MultiInstrument Direct I/O

MultiInstrument Direct I/O对象允许使用直接I/O处理从一个对象控制多部仪器。这个对象看上去与Direct I/O对象相同，但MultiInstrument Direct I/O对象中的每个处理只能寻址单独的一部仪器。

这个对象是标准处理对象，可以用于VEE支持的所有接口。由于MultiInstrument Direct I/O对象不一定控制一部仪器，因此标题中没有列出仪器名称、地址或实地模式条件。

通过使用MultiInstrument Direct I/O，可以减少程序中仪器专用Direct I/O对象的数量，从而提高性能，这对VXI接口特别重要。在进行仪器控制时，VXI接口的速度要比GPIB快。

下图显示了MultiInstrument Direct I/O对象及其I/O Transaction对话框。对象被设置成与HP E1413B、HP E1328和HP 3325通信。

如需与使用MultiInstrument Direct I/O对象的进一步信息，请参阅“使用MultiInstrument Direct I/O对象"。


VXIplug&play介绍

VXIplug&play是允许多个厂商提供兼容硬件和软件的接口规范。VXIplug&play驱程是用来控制某台仪器的一个函数库。驱程由硬件厂商编写，与仪器一起提供。

可以为非VXI仪器编写VXIplug&play驱程。

VEE 3.2到VEE 6.0支持满足WIN95/98或WINNT, VXIplug&play规范3.0或更高版本的驱程。VEE 7.0不支持HP-UX或Windows 95。VEE 8.0支持Windows XP或Windows 2000。VEE 8.0不支持Windows 98和Windows NT。

开始

在开始使用VXIplug&play前，必须已经完成下述步骤：

1 安装接口(GPIB或VXI)。

2 安装VISA。如果正在使用安捷伦接口卡，那么使用与VEE一起提供的VISA。详情请参阅“安装Agilent I/O库(VEE for Windows)”。否则，必须安装与接口卡一起提供的VISA。

3 为每个硬件接口配置VISA。如果正在使用安捷伦接口卡，那么遵循安装Agilent I/O库中的说明。否则，必须配置接口制造商指定的VISA。

备注

VISA (虚拟仪器软件架构)是VXIplug&play驱程用来控制仪器的I/O库。VXIplug&play要求使用VISA，VISA提供了VXIplug&play驱程使用的VISA函数调用。

需要哪些文件

对每个VXIplug&play驱程，VEE需要下面四个文件：

• 库文件

• 函数面板文件

• 头文件

• 帮助文件

与每个VXIplug&play驱程一起安装的文件总是包括上述文件。另外还会安装其它文件。

备注

并不是所有VXIplug&play驱程都支持所有架构(平台)。此外，并不是所有架构都支持某些VISA版本。请与相应的厂商进行核对。

安装VXIplug&play驱程软件

遵循仪器制造商在驱程中提供的说明，安装每个驱程所需的文件集。

文件的位置

VXIplug&play文件位于WINNT\目录下。这是相对于VISA安装注册时存储的根驱动器和目录值的位置。根驱动器和目录的默认值是C:\Program Files\VISA\。

下表说明了VEE需要的VXIplug&play驱程文件：

文件名a | 位置 | 用途
PREFIX_32.DLL | BIN | 仪器驱程库
PREFIX.FP | PREFIX | 仪器驱程函数面板文件
PREFIX.H | INCLUDE | 仪器驱程头文件
PREFIX.HLP | PREFIX | 仪器驱程帮助文件

a a. PREFIX指仪器的名称，如HPE1410。

术语摘要

VXIplug&play驱程的处理方式不同于使用VEE其它类型的I/O。下面汇总了不同类型的I/O怎样结合在一起。

• VEE程序调用VXIplug&play函数。

• 函数(拥有可以通过函数面板设置的参数)是VXIplug&play驱程的一部分。函数通过VISA软件与仪器通话。

• 仪器通过VISA传回数据，传送到函数参数中。

VXIplug&play范例程序

下图显示了使用To/From VXIplug&play对象启动电压测量，从HP E1410A万用表中获得读数的范例程序。

进一步信息

如需与怎样配置VEE使用VXIplug&play有关的进一步信息，参阅配置VXXIplug_play驱程。如需与怎样在VEE中使用VXIplug&play有关的进一步信息，参阅运行VEE程序和从Call对象中使用VXIplug&play函数 。


程序兼容能力:

以前的VEE版本一直支持VXIplug&play驱程。VEE 3.2版提供了To/From VXIplug&play对象。使用这一对象的VEE 3.2程序可以兼容以后版本的VEE。

VEE 3.1版只提供了到VXIplug&play驱程的直接Call访问能力。如果使用Call对象在VEE 3.1版中控制VXIplug&play仪器，那么在进行部分改动，使用32位版本的驱程后，程序可以在以后版本的VEE中工作。

必须安装32位版本的VXIplug&play驱程，您可能必须改变Import对象，才能使用VXIplug&play驱程文件的新位置。如需与使用Call对象访问VXIplug&play驱程的更多信息，请参阅从Call对象中使用VXIplug&play函数。

为使用VXIplug&play驱程与仪器通信，必须安装相应的VXIplug&play驱程文件和VISA I/O库。如需VISA安装信息，请参阅VXIplug&play介绍。还必须根据配置VXIplug&play驱程中的说明为仪器配置VEE。

在VEE中与VXIplug&play驱程通信的主要手段是To/From VXIplug&play对象，下一节对此进行了介绍。还可以从VEE Call对象中调用VXIplug&play函数(参阅从Call对象中使用VXIplug&play函数)。后一种方法用来实现与 VEE 3.1版的向下兼容能力。


运行VEE程序

To/From VXIplug&play对象中的各项处理从上向下执行。本节介绍了在To/From VXIplug&play对象执行时发生的情况。

初始化和关闭驱程

在加载或创建程序后第一次运行程序时，会发生延迟，以初始化使用To/From VXIplug&play对象控制的每部仪器。这个初始化把仪器设置成已知的初始状态。以后每次运行程序时，程序会正常执行，而不会执行初始化操作。

在VEE会话中，程序控制的每部仪器必须初始化一次。VXIplug&play Resource Manager执行"仪器查找"操作，检验仪器是否连接到地址上，把仪器设置成已知状态。其需要的时间数量不确定，可能每部仪器最多10秒。在第一次执行每部仪器的To/From VXIplug&play对象时，会发生这种延迟。

由于初始化每个VEE会话只执行一次，因此每次在程序运行时应执行函数(如清除或复位)，把仪器设置成已知状态。在加载另一个程序或退出VEE时，VXIplug&play 驱程会自动关闭。

高级初始化信息

本节介绍了VEE实现的VXIplug&play初始化的部分细节。成功地编写采用VXIplug&play 驱程的VEE程序并不要求了解这些概念。

要求每个VXIplug&play 驱程有一个PREFIX_init()函数和一个PREFIX_close()函数。VEE自动调用这些函数。

init()函数的用途是把仪器设置成已知状态，获得一个"会话句柄"。在配置时，第一次在程序中执行时，VEE Name指定的每部仪器分配一个唯一的会话句柄。程序中使用该会话句柄唯一地识别该仪器。

与同一部仪器通信的所有To/From VXIplug&play对象(使用相同的VEE Name)由相同的会话句柄识别。会话句柄显示在函数面板的Panel一栏左下角的vi字段中。VEE自动负责在各种To/From VXIplug&play对象之间传送这个会话句柄。

由于init()调用通常是一个冗长的操作，因此只在必要时调用它。在程序中执行第一个To/From VXIplug&play对象时，会调用相应的init()函数。在调用init()时，它还执行标识查询和/或复位操作，具体取决于您怎样配置驱程。

close()函数的用途是关闭会话句柄(其数量有限)，使仪器脱机，清除与仪器有关的任何数据，在需要时执行仪器专用操作。VEE在下述情况下调用close()函数：

• 在选择New, Open或Exit后。

• 在删除一个VEE Name (如dvm)的所有To/From VXIplug&play对象后。

• 在改变VXIplug&play Instrument Properties对话框中的Address或init() 参数值时。在本例中，调用close()，以便使用新值再次调用init()。

错误和警告检查

在执行每个处理后，函数把一个状态值返回VEE，VEE自动检查这个值。如果这个值表明成功执行函数，那么将执行下一个处理。

错误检查 如果返回的状态值表明错误，VEE会停止程序，报告错误。如果有一个错误输出端捕获错误，错误输出端会传播，而不是停止程序。使用errorInfo()对象，获得错误消息细节。

VEE自动调用PREFIX_error_message()函数，以便从 VXIplug&play 驱程中获得制造商提供的尽可能多的错误信息。这些信息输出在VEE错误信息中，或从errorInfo()输出。

备注

在发生错误后，仪器保持在未知状态。除非在程序开始时调用特定的复位或清除函数，否则不知道下次启动程序时仪器的状态。

警告检查 如果返回的状态值是警告，程序会暂停，显示一个警告对话框。警告对话框包含仪器制造商提供的信息，允许选择继续运行程序或停止程序。

不能以程序化方式捕获警告消息。但是，如果知道驱程提供的常用警告消息，那么可以在VEE程序中处理这些消息。例如，如果得到一条警告消息表明仪器没有准备读取数据，那么可以使用Delay对象，或把To/From VXIplug&play对象放在循环中，重试读取对象。

如果在VEE程序中处理已知的警告条件，您可能想抑制警告消息对话框。为此，从To/From VXIplug&play对象的Properties对话框中，选择复选框Ignore Cautions Returned。

备注

一般来说，没有必要、也不鼓励忽略警告消息(复选Ignore Cautions Returned复选框)，除非您知道怎样在程序中处理警告条件。

传送参数

根据VXIplug&play 规范，在请求数据前，必须分配内存，把它传送到驱程中。某些VXIplug&play函数把数据读取放到数组中。大多数VXIplug&play函数还有一个参数，指定发送的数组大小，如果数组不够大，会发生错误。在本例中，您可以分配任何大小的数组，告诉函数数组的大小。然后函数将只以指定的大小把数据写入数组中。

警告

其它VXIplug&play函数假设传送的数组对数据读写足够大，而不管其实际大小如何。这尤其常用于文本字符串中。如果分配的内存不足，那么这一操作将覆盖内存，导致一般保护问题或分段违规。由于VXIplug&play DLL直接链接到VEE中，因此这种情况会导致VEE崩溃并退出。

备注

为数组或字符串数据输入分配内存最简明的方法是使用Auto-Allocate功能。参阅“获得 VXIplug&play函数面板相关帮助 "。您仍需确定要分配的内存容量，但一旦指定容量，将自动分配内存。

查阅驱程帮助文件，确定数据需要多少内存。从To/From VXIplug&play对象的对象菜单中选择Instrument Help。这个帮助文件将告诉您数组必须有多大。

如果不使用Auto-Allocate，那么必须创建一个对象，分配内存，把它连接到To/From VXIplug&play对象的数据输入端：

• 对数组输入，使用相应类型的Alloc Array对象，相应地设置大小。

• 对字符串输入，使用Formula对象。从Formula对象中删除数据输入端，输入表达式，如256*"a"。这会创建一个长256个字符的字符串(加一个零字节)，其中填充a。大多数VXIplug&play函数写入Text参数的字符数量不会超过256个字符。但是，最好查看要求确定Text输入的每个函数面板上的帮助文件。

范例程序

下图显示了一个简单的程序，它使用To/From VXIplug&play对象与HP E1410A VXI万用表通信：

VXIplug&play的限制

在VEE中使用VXIplug&play 驱程有某些限制：

• 由于Bus I/O Monitor对象只显示到达和来自VEE的I/O本身，因此它不显示来自VXIplug&play 驱程的任何I/O。VXIplug&play 驱程是链接到VEE的C程序。我们建议在需要时使用硬件总线监视器。

• VEE不支持VXIplug&play 规范不要求的某些可选功能，如回叫。

• VXIplug&play不支持所有I/O [image] Advanced I/O对象(包括Interface Operations, Instrument Event (SPOLL)和Interface Event)。

• VXIplug&play 不支持LIVE MODE/NOT LIVE MODE概念。在运行程序时，程序中使用的所有仪器都必须连接到计算机上。但是，可以在不连接程序中使用的仪器的情况下打开程序。此外，还可以在没有连接仪器的情况下创建程序。只要安装VXIplug&play 驱程，就可以使用To/From VXIplug&play对象，指定函数调用。

• 不能使用VXIplug&play 驱程及任何其它VEE仪器控制方法 (Direct I/O, Panel Driver,或Component Driver对象)，与同一程序中同一部仪器通信。但是，可以在同一程序中对一部仪器使用VXIplug&play 驱程，对其它仪器使用其它仪器控制方法。

备注

VXI plug&play 规范在持续更新和增强。VXI plug&play 联盟在VEE不同修订版本之间可能会表决规范中的新增功能。由于VXI plug&play 规范没有指定驱程库中应包括修订信息，因此VEE不能检查驱程的兼容能力。所以必须与仪器制造商核对，以保证驱程满足当前支持的VXI plug&play 规范。


在Call对象中使用VXIplug&play函数

您可能想在VEE Call对象中使用VXIplug&play，原因如下：

• 兼容现有的程序：如果现有的程序使用的VXIplug&play是采用VEE 3.1版创建的，那么您可能想在最大限度地减少修改内容的情况下继续使用这些程序。但是，如果您计划在长期内维护这些程序，那么最好使用To/From VXIplug&play对象中的标准函数面板访问重写这些程序，具体参阅“使用To/From VXIplug&play对象"。

• 访问旧的驱程：某些早期版本的非HP VXIplug&play 驱程(1995年及以前)是根据早期版本的VXIplug&play规范编写的。仍可以通过VEE Call对象访问这些驱程。

除上述原因外，应该采用“使用To/From VXIplug&play对象"中介绍的方法，使用VXIplug&play驱程。

在VEE中使用动态链接库或共享库

本节将介绍在安装了所需的文件之后把VXIplug&play驱程加载到VEE中的步骤。

为在VEE程序中使用VXIplug&play驱程，进行如下操作：

1 导入库。

2 运行使用库的例程。

3 在程序完成时删除库。

与这三个步骤相关的三个VEE对象是Import Library、Call和Delete Library。

导入库

在使用Call对象 (或Formula对象)执行驱程前，必须通过Import Library对象把函数先导入到VEE环境中。

在Import Library对象中，在Library Type下，选择Compiled Function。使用Definition File按钮输入PREFIX.h的路径和名称。参阅 驱程文件的位置。

然后使用File Name按钮选择PREFIX_32.DLL的路径和名称。Library Name按钮为一套函数指配一个逻辑名称。建议使用的名称是PREFIX，其中PREFIX指仪器的名称，如HP E1410。

在Call对象中使用驱程前，必须先配置Call对象。最简便的方式是从Import Library对象菜单中选择Load Lib，把驱程文件加载到VEE环境中。从Device菜单中调出一个Call对象。然后在Call对象菜单上选择Select Function。VEE将调出一个对话框，其中包括由驱程文件中导入的头文件内列出的所有函数的列表。

从VEE中调用VXIplug&play驱程

使用Call对象，调用VXIplug&play驱程。

调用顺序 VXIplug&play驱程的调用顺序非常重要。顺序如下：

1 调用初始化函数。(这一函数返回一个会话句柄。)

2 使用初始化函数返回的句柄，执行驱程调用。

3 调用关闭函数。

初始化函数 初始化函数PREFIX_init有三个输入端和两个输出端。

这三个输入参数是：

• Instrument Address

参阅“配置VXIplug&play 驱程"，获得与VXIplug&play地址有关的信息。

• Identification Verification Flag

如果检验标记是1，那么初始化函数检查仪器的身份。这通过使用"*IDN?"查询或仪器制造商指定的其它方式检查制造商ID和型号完成。如果不应检查，那么把标记设置为0。

• Reset Flag

如果初始化函数把仪器置于预先定义的状态，那么复位标记应为1。如果不应复位，那么把标记设置为0。

两个输出参数是：

• Return Value

VXIplug&play把VXIplug&play驱程返回的值定义为执行的操作状态。通过从单独的Call对象中调用PREFIX_error_query，返回的整数可以转换成有意义的消息。如果返回值是0，那么init()调用成功。

• Handle for VXIplug&play Functions

如果初始化函数返回的值为0，那么输出参数中包含一个仪器句柄。仪器句柄是把函数调用与这个初始化关联起来的一个数字。大多数VXIplug&play函数作为输入参数要求这个句柄。

每次初始化会在输出参数vi中返回一个唯一的句柄。可以由不同的名称调用参数，如session handle，但它总是从init()函数中返回的最后一个参数。在调用close()函数时，句柄返回到系统。

调用VXIplug&play函数 可以使用Call对象调用其它函数。对调用的每个函数，必须为Call对象的instrID输入端提供PREFIX_init函数的句柄。

使用其它常用的VXIplug&play函数 除PREFIX_init和PREFIX_close函数外，VXIplug&play驱程可以实现其它常用的驱程函数，包括：PREFIX_reset, PREFIX_self_test, PREFIX_revision_query, PREFIX_error_query和PREFIX_error_message。

作为参数使用数组 VXIplug&play规范规定，调用程序必须为数组或文本参数分配空间。这意味着在作为参数传送到VXIplug&play函数之前，VEE必须分配数组，如本范例中所示。

使用Close函数 关闭函数PREFIX_close有一个输入参数，没有输出参数。输入参数是从PREFIX_init中返回的句柄。执行PREFIX_close使仪器脱机，清除与仪器句柄有关的任何数据。还可能有与关闭仪器有关的某些其它驱程特定操作。仪器函数不能再次使用句柄。必须再次调用PREFIX_init例程，以获得一个新句柄。

删除库

在使用完VXIplug&play驱程后，需要为加载的每个驱程调用Delete Library对象。在卸载库以后，必须使用Import Library对象再次加载库，然后才能调用使用该库的任何函数。

简单的范例

下面是在VEE中使用VXIplug&play驱程的范例程序。这个程序导入库，初始化设备，关闭设备，删除库。(每个程序线程使用Start按钮单独启动)

比较完整的范例

下图显示了比较完整的范例程序，它使用VXIplug&play驱程，作为输出参数分配一个数组。

部分有用提示

追踪句柄 连续的驱程函数必须使用PREFIX_init返回的句柄。有两种方式完成这一操作：

• 连接各个端

通过把PREFIX_init例程数据输出端连接到每个函数上的vi数据输入端，可以传送句柄的值。

• 在全局范围内追踪句柄

句柄可以保持为全局变量。PREFIX_init例程的句柄连接到Set Global对象上。使用这个句柄的每个函数从Get Global对象中获得句柄。

控制流程 驱程需要按特定顺序执行操作(初始化, 调用函数, 关闭)。必须写入VEE程序，保证句柄对要求使用的所有函数有效。


使用To/From VXIplug&play对象

在VEE仪器配置中添加VXIplug&play仪器后，可以在程序中使用VXIplug&play驱程。使用驱程中包含的函数访问仪器。To/From VXIplug&play对象可以访问VXIplug&play函数面板。

为获得To/From VXIplug&play对象：

选择I/O [image] Instrument Manager，出现Instrument Manager，显示当前配置的所有VXIplug&play仪器(及配置的任何其它仪器)。

选择想要通信的仪器，点击Plug&play Driver按钮，出现对象的轮廓。

把To/From VXIplug&play对象的轮廓放在工作区中所需的位置，单击鼠标，出现下面的对象。

选择一个函数

从To/From VXIplug&play对象中选择VXIplug&play函数。

1. 双击一项空白事务，或从对象菜单中选择Add Trans或Insert Trans，出现Select a Function Panel对话框。它显示了分成多个逻辑类别的函数面板，如Measure或Configure。每个驱程有不同的类别。

• 点击[+]图标，查看函数面板的分级结构。

• 点击[-]图标，在分级结构中隐藏函数面板。

• 点击[f(x)]图标，选择函数面板。在对话框的下方会看到函数面板的简短描述。

选择要展开的项目，按*键，完全展开一个树枝。

一般来说，您只会看到遵守VXIplug&play 3.x版规范及VEE允许的函数面板。

备注

VEE在适当的时间自动调用init()。但是，在列表中可能会有其它初始化函数，如init_all(), init_next()或init_first()。VXIplug&play规范中没有定义这些函数，VEE不支持这些函数。

不要选择这些函数。如果必须使用这些函数，需要以不同的方式创建程序，从Call对象中调用VXIplug&play驱程，参阅“从Call对象中使用VXIplug&play函数"。

没有PREFIX_init()或PREFIX_close()项目。
VEE自动执行这些函数。

2 在Select a Function Panel对话框上点击OK。

3 出现一个带标注的对话框，称为Edit a Function Panel，允许为函数面板指定参数。

编辑函数面板参数

Edit a Function Panel对话框允许设置传送到选定VXIplug&play驱程的函数的控件和参数。共有两栏：Panel和Configuration。

Panel栏。Panel栏允许指定传送到函数的常数(控件)值。

• Controls - 这个对话框的顶部部分包含着指定常数参数的控件。控件名称是从函数面板文件中指定的标注。

• vi - 显示仪器唯一的"虚拟仪器"句柄(也称为"会话句柄")。根据驱程版本，这个字段的名称可能会变化，但位置一直在函数面板的左下角。

• Error - 在执行这个函数面板时，如果发生错误，那么会显示一个非零值。根据驱程版本，这个字段的名称可能会变化，但位置一直在函数面板的右下角。

• Function call - 对话框底部是在对象执行时发送到驱程的C函数和参数。这个命令字符串也作为事务显示在对象的open view上。

获得VXIplug&play函数面板相关帮助

在Edit Function Panel对话框中，在Panel栏的背景上按鼠标右键，获得与函数面板有关的帮助。出现包含函数描述的对话框。

在一个控件(而不是标注)上按鼠标右键，得到参数说明。

如需完整的VXIplug&play驱程帮助，从To/From VXIplug&play对象的对象菜单中选择Instrument Help。

Configuration栏

Configuration栏允许指定传送到函数的变量。这允许以程序化方式设置参数值。

参数值分组显示。每一组的名称是VXIplug&play函数面板中指定的参数的标注名称。Function和reading是标注。每一组可能会包含下面的信息。

• Parameter Type - 这提供了与参数数据类型及参数是Input Only、Input/Output还是Output Only有关的信息。

• Parameter Value - 在选择Constant时，这个参数作为Panel栏上设置的常数值传送。在选择Variable时，这个参数作为变量传送。可以以程序化方式改变参数值。某些字段一直是变量，如读数输出。

Name - 在Parameter Type设置为Variable时，这个字段可以编辑。在默认情况下，变量名称设置成其标注名称(或使其成为有效的VEE变量名称的类似名称)。可以在VEE中把它变成任何有效的变量名称。如果变量是一个输入变量，那么还可以在这个编辑字段中放一个表达式、函数调用或全局变量。

Create Terminal - 在Parameter Type设置成Variable时，这个字段可以编辑。在勾选复选框，且Name目前没有作为端名称存在时，按OK会作为输入端、输出端或输入/输出端创建端(使用Name中指定的名称)，如对话框中所示。一旦创建后，如果想删除一个端，那么必须从对象菜单中使用Delete Terminal。

如果Name变化，并勾选Create Terminal，那么会添加一个新的端。

如果Name设置为无效的端名称，那么Create Terminal会变成灰色。

• Auto-Allocate Input - 这会出现在已经设置成Variable、而不是Constant的Input/Output参数上。下一节提供了更多的信息。

按NOP按钮，保存这个对话框中显示的最新设置，使这一事务"不操作"。这与在基于文本的计算机程序中注释一行代码的作用相同。

按Help按钮，获得与To/From VXIplug&play对象有关的帮助。在编辑完成时，按OK按钮。

按Instr Help按钮，获得驱程开发人员编写的特定仪器帮助信息。

Auto-Allocate功能(传送数组和字符串)

某些VXIplug&play函数希望在数组或Text字符串中返回数据。VXIplug&play规范要求应用程序(VEE)为数组或字符串分配内存，因为VXIplug&play函数不能传回分配的内存。VEE必须分配内存，函数可以写入该内存。

Auto-Allocate功能允许简便地告诉VEE分配多少内存。VEE以要求的容量分配相应的数据类型和形状。

如果到函数的参数是一个要求数组或Text字符串的变量，那么Parameters栏会显示另一个字段：Auto-Allocate输入。例如，在下面的对话框中，读数可以输入一个数组。Parameters栏显示选中了Auto-Allocate输入：

在选择Auto-Allocate输入时，Size字段激活。默认大小为5000，但也可以输入任何相应的容量，分配输入数据。必须确定需要传送多大的数组或字符串。没有为这个参数创建一个输入端，VEE自动为该参数分配内存。

对数组，Size指明了数组中的要素数量。对文本字符串，Size指明了字符数(字节数)。参阅Instrument Help，或在Panel背景或参数上按鼠标右键，获得与函数要求的数组或字符串大小有关的更多信息。

备注

如果使用Auto-Allocate输入功能，那么不会为函数创建一个数据输入端。如果数据输入端已经存在，那么应从To/From VXIplug&play对象中删除这个数据输入端。

如果没有选择("勾选") Auto-Allocate输入，那么在默认情况下会为函数同时创建输入端和输出端。必须创建一个对象，分配正确的类型、形状和内存数量，并把它连接到输入端。如需与怎样手动分配输入所需内存的相关信息，请参阅传送参数。

确保为函数希望返回的所有值分配足够的内存。如果分配的内存不足，那么这一操作会覆盖内存，导致General Protection Fault(一般保护问题)或Segmentation Violation(分段违规)。由于VXIplug&play DLL直接链接到VEE中，因此这种情况可能会导致VEE崩溃和退出。

获得VXIplug&play驱程相关帮助

从To/From VXIplug&play对象的对象菜单中，选择Instrument Help，访问仪器制造商提供的帮助文件。这一帮助主题包含与使用VXIplug&play驱程有关的信息，包括参数要求的数据类型。

如需每个特定函数有关的帮助，参阅获得VXIplug&play函数面板相关帮助。


Panel Driver和Component Driver介绍

只有在一个驱程文件支持该仪器时，Panel Driver和Component Driver 对象才能用于某部仪器。VEE安装程序允许选择希望安装的驱程。如需与怎样为仪器选择和配置正确的驱程文件有关的进一步信息，请参阅Help [image] Tell Me About ...下的Configuring Instruments。另外，还必须安装I/O库。

Panel Driver

Panel Driver在VEE中有两种用途：

• 它们允许定义测量状态，指明所有仪器函数设置。在Panel Driver运行时，相应的物理仪器将自动编程，与Panel Driver中定义的设置相匹配。

• 它们作为交互控制仪器的仪器控制面板使用，适合用于开发和调试程序，还适合用于仪器没有物理前面板的情况。

如这个图所示，Panel Driver打开的视图中包含一个相关物理仪器使用的图形控制面板。如果物理仪器正确连接到计算机上，您可以点击图形控制面板中的字段，控制仪器。还可以点击数字显示画面和XY显示画面，进行测量，显示结果。

即使仪器没有连接到计算机上，仍可以使用图形面板定义仪器状态。事实上，如果想在购买仪器前或在别处使用仪器时开发程序，这种功能是一个优势。

例如，假设您想对HP 3325B函数发生器编程，提供两个不同的输出信号：

1 一个频率为20 kHz、幅度为20mV rms的方波。

2 一个频率为50 kHz、幅度为50mV rms的正弦波。

下图显示了提供希望信号的两个Panel Driver。

Component Driver

在仪器驱程中，每个仪器函数和测得的值称为组件。组件与驱程内部的变量类似，记录函数设置或测得值。因此， Component Driver是一个只读取或写入指定为输入端和输出端的组件的对象。而Panel Driver则自动为多个组件或所有组件自动写入值。

Component Driver用来帮助改善程序的执行速度。速度是其较Panel Driver提供的唯一优势。一般来说，在仪器控制对象连接到必须运行多次的迭代器对象上时，对程序执行速度的影响最大。在这种情况下，通常只会改变一个或两个组件，Component Driver正是为处理这种情况设计的。

Component Driver实现的执行速度提高程度在不同情况之间变化很大。提高程度主要取决于使用的特定驱程文件。没有一种简便的方式可以预测确切的执行速度提高程度。

例如，假设您想对HP 3325B函数发生器编程，进行下述操作：

1 输出一个初始频率为10 kHz、幅度由操作人员输入决定的正弦波。

2 每10 Hz五步，从10 kHz到1 MHz扫描频率输出。

在本例中，最好使用Panel Driver执行初始设置，使用Component Driver重复设置输出频率。下图显示了完成这一操作的程序。

进一步信息

如需与怎样配置VEE有关的信息，请参阅Help [image] Tell Me About ... 下的Configuring Instruments。如需与怎样使用Panel Driver和Component Driver 对象有关的进一步信息，请参阅揭秘Panel Driver和Panel Driver操作。

支持基于寄存器的VXI设备

在使用仪器控制对象直接寻址VXI背板上的VXI设备时，必需知道设备是基于消息还是基于寄存器。VEE通过SCPI(程控仪器标准命令)消息与基于消息的设备通信。

VEE还为大多数基于寄存器的惠普和安捷伦设备提供Interpreted SCPI (I-SCPI)支持。I-SCPI驱程允许与基于寄存器的设备通信，尽管其基于消息。这意味着VEE程序可以使用标准SCPI消息与基于寄存器的设备通信，只要该设备有I-SCPI驱程。如果没有适用于基于寄存器的设备的I-SCPI驱程，VEE必须通过直接存取寄存器来与该设备通信。

I-SCPI驱程使您能够灵活地使用任何首选的仪器控制对象。可以使用Panel Driver，简化编程工作；也可以在Direct I/O中使用SCPI命令，加快执行速度。在把VEE编程为使用SCPI消息与基于寄存器的设备通信时，VEE将通知您是否有要求的I-SCPI驱程。在这种情况下，您需要使用Direct I/O或MultiInstrument Direct I/O直接存取设备寄存器。


揭秘Panel Drivers

VEE Panel Driver和Component Driver对象都要求有相应的Panel Driver ("ID")，且仪器配置给该驱程。这些仪器驱程有时称为"VEE drivers"或"Instrument Drivers"。Panel Driver文件(the.cid file)必须存在，并配置成使用Panel Driver和Component Driver对象。但是，这些文件不用于Direct I/O或VXIplug&play操作。

Panel Driver文件

每个 Panel Driver 描述了某部测试仪器的独特个性。为使用Panel Driver和Component Driver对象控制任何仪器，要求使用驱程文件。

在安装VEE时，Panel Driver文件 (.cid文件) 可以选择性地复制到系统磁盘上。每个驱程文件包含两种基本信息类型：

• 仪器功能及用来设置和查询功能的命令说明。

• Panel Driver对象的打开视图中可以看到的图形控制面板的外观和行为说明。

组件

在内部，Panel Driver和Component Driver对象把每种仪器功能表示为组件。组件名称与编程语言中的变量名称类似；组件用来保存仪器功能设置值或测得值。

下图显示了HP 3478A电压表中的部分组件。

组件名称 | 仪器功能
ARANGE | 自动量程开或关
FUNCTION | 测量功能是电压、电流或电阻
TRIGGER | 触发源为内部、外部、快速或单一
READING | 最新的测量值

以交互方式或通过程序存取组件。为以交互方式存取组件，在Panel Driver的打开视图中点击一个带标记的按钮或显示画面。为使用图形程序存取组件，把它们添加为输入端或输出端。下面是一个实例。如需使用组件的详细程序，请参阅“ 部分技术" 和“ 在程序中使用Component Driver对象" 。

状态

仪器状态是某个驱程中所有组件值的特定集合。把电压表驱程中的所有组件设置为AC电压测量的特定值。使用一套不同的组件值，测量DC电流。电压表有两种状态。本例显示了两种电压表状态。

在VEE中，Panel Driver的每个实例代表一种单独的测量状态。(Panel Driver对象通常称为"状态驱程"。)程序中通常有一个以上的Panel Driver，其中每个Panel Driver会把同一部物理仪器编程为唯一的测量状态。

使用仪器名称创建的每个Panel Driver对象与同一部物理仪器通信。


基于Panel Driver的I/O怎样工作

在把一个Panel Driver或Component Driver对象放在程序中时，VEE在内存中建立一条状态记录。这条状态记录专用于某个仪器名称。“ 名称的重要性" 中更详细地讨论了名称。

参考某个名称的所有基于驱程的对象都共享一条状态记录。状态记录反映了每个仪器组件的当前值。在使用Panel Driver或Component Driver对象写入组件时，VEE会同时更新物理仪器和状态记录。

如果使用Direct I/O写入仪器，VEE会把状态记录标为无效，因为状态记录不再与物理仪器的实际状态相符。但是，后续使用Panel Driver或Component Driver对象会导致VEE再次调用仪器状态，进而再次同步物理仪器和状态记录。

在Panel Driver对象和Component Driver对象操作时，会出现重要的差异。

另请参阅

Panel Driver 操作


Panel Driver操作

在Panel Driver运行时，它只发送必要的命令，使物理仪器的状态与图形控制面板中定义的状态相匹配。

在必要时，Panel Driver发送命令，复位和更新相应物理仪器中的所有设置。Incremental Mode设置影响着这一行为，具体参阅Advanced Instrument Properties对话框: Panel Driver栏。

如果把Incremental Mode设为ON，VEE比较当前状态记录与Panel Driver定义的希望状态，确定必须改变哪些组件。VEE只发送更新影响的组件要求的命令。

如果把Incremental Mode设为OFF，或如果当前状态记录标为无效，VEE会明确发送命令，更新每个组件，以保证希望的状态与物理仪器状态之间同步。

在激活序列输入端时，或在点击打开视图中看到的其中一个控制面板按钮时，Panel Driver运行。

Component Driver操作

在Component Driver运行时，它只写入作为输入端出现的组件，只读取作为输出端出现的组件。正因如此，Component Driver对象的运行速度一般要比Panel Driver快。Panel Driver可能会写入多个组件，以实现某个状态；Component Driver只写入指定的组件。

组件读写顺序采用其作为端出现的顺序，从上到下。在希望仪器根据另一个组件的值改变一个组件的值时，这种操作顺序尤其重要。这种交互称为耦合。在组件驱程中，可以手动完成这一操作。

多个驱程对象

在使用多个对象时会发生混淆的某些情况包括：

• 使用相同的仪器名称

• 使用相同的仪器地址

• 使用相同的驱程文件

名称的重要性：Instrument Properties对话框中的Name字段在逻辑上把每个仪器对象映射到物理仪器的地址及其它配置信息。为确定仪器对象的Name，点击对象菜单中的Show Config。对象标题中的文本不一定与Name相同。

一般来说，只应有一个配置的Name指向某部物理仪器。多个Name指向同一部仪器地址会在使用Panel Driver对象的程序中导致不可预测的结果。VEE的内部仪器状态记录按Name排列。具有不同名称的两个Panel Driver对象会盲目地写入同一个地址，使彼此的状态记录无效。

在涉及Direct I/O的某些情况下，对同一部物理仪器可能需要一个以上的Name。如果Advanced Instrument Properties对话框中Direct I/O栏的某些设置根据直接I/O操作变化，那么可能会发生这种情况。

例如，您可能想把某些命令发送到示波器上，其在最后字符中确认EOI，同时想发送某些没有EOI的命令。在这种情况下，您可以为一部仪器配置Name Scope_EOI，为另一部仪器配置Name Scope。Scope和Scope_EOI拥有相同的Address设置，但 END on EOL设置不同。

在从菜单中选择时，配置的Name作为默认标题出现在仪器对象中。编辑标题不会影响与Name的关系。

Name对保存和打开包含仪器的程序至关重要。在保存程序时，将在程序中保存每个仪器对象的Name。在打开程序时，VEE在当前I/O配置中查看加载的每部仪器的Name。

例如，如果用名称My_Scope保存包含一个Direct I/O对象的程序，那么在当前I/O配置中必须有一部名为My_Scope的仪器。如果考察的对象是Panel Driver或Component Driver，那么当前I/O配置中的ID Filename (驱程文件)必须与保存的程序中使用的一个文件相匹配。

Name必须完全相匹配，包括空格，但Name不分大小写。

重用驱程文件

可以有多个不同名称的对象使用相同的驱程文件(这种情况并不少见)。例如，您可能有一个测试系统，在三个不同的地址上使用三个程控电源，其分别为Supply1、Supply2和Supply3，但都使用hp665x.cid驱程文件。由于Name不同，VEE为每个名称维护一条单独的状态记录； Supply1的Panel Driver对Supply2或Supply3的相关项目没有任何影响。


概述

本节概括介绍了怎样使用Instrument Manager和配置对话框，在VEE中查找和配置仪器。本文给出了部分实例，对许多应用，可以在大多数参数中使用默认值。但是，在这些对话框中配置字段的详情请参阅属性对话框细节。

概述

为配置仪器，选择I/O [image] Instrument Manager或点击工具条上的Instrument Manager按钮。

其外观如下：

出现下面的Instrument Manager对话框。只有在找到和添加仪器时，对话框中才有仪器。

Instrument Manager显示四个部分：

• Auto Discovery按钮允许查找仪器，并为它们配置驱程。如果点击Find Instruments按钮，VEE会自动更新配置的所有GPIB和VXI仪器，显示连接到计算机上的任何其它GPIB和VXI仪器。如果点击Settings按钮，VEE会显示下一节中介绍的Auto Discovery Settings对话框。

• Instrument List显示目前配置的仪器。这个配置由I/O配置文件定义 (如需进一步信息，请参阅“ I/O配置文件”)。默认配置是空白 (空)。

• Instrument按钮允许修改仪器配置。本章后面更详细地介绍了Instrument按钮操作。

• Create I/O Object按钮允许选择Direct I/O, Plug&play Driver, NI-DAQ Driver, IVI-COM Driver, Panel Driver和Component Driver对象，把它们放在程序中。

另请参阅

Auto Discovery, 仪器列表, 仪器配置, 重命名仪器


Auto Discovery

Auto Discovery区域包含三个按钮：Find Instruments, Configure Drivers和Settings。

• Find Instruments按钮更新任何现有的GPIB和VXI仪器配置，把连接到计算机上的任何没有配置的GPIB和VXI仪器添加到Instrument List中。Find Instruments还会找到、并把任何Serial和GPIO接口添加到Instrument List中，而不是连接到这些接口上的仪器。

• Configure Drivers按钮为已经找到的仪器及Instrument List中的仪器配置驱程。

• Settings按钮允许确定怎样配置仪器和驱程。

在Instrument List中高亮度显示My Configuration，点击Find Instruments，更新所有现有的GPIB和VXI仪器配置，在列表中添加任何没有配置的GPIB和VXI仪器。对找到并通电的仪器，打开活动模式。(如果没有找到配置的仪器，活动模式设置不会从开切换到关。)

然后点击Settings，出现对话框，允许控制怎样检测和配置仪器和驱程。这个对话框有两个部分：Find Instruments和Instrument Identification。

Find Instruments部分有两个单选按钮：

• Detect only

• Detect, identify, and configure drivers for each instrument.

如果选中"Detect only"，那么在点击Find Instruments按钮时VEE会检测所有活动的总线地址。如果选中"Detect, identify, and configure drivers for all instruments"，那么VEE会检测所有活动的总线地址，向检测到的所有仪器发送"*IDN?"，并试着为每台仪器配置驱程。

下面的部分控制着Configure Drivers按钮。如果选中"Ask before sending "*IDN?" to each instrument?"，那么在配置每个驱程前VEE会停止，询问是否想继续操作。如果没有选中这个框，那么VEE会自动配置每个驱程。


仪器列表

如果Find Instruments找到一台仪器连接到计算机上，Instrument Manager的外观会类似于下图。在本例中，Find Instruments找到一个Serial Interface，但没有显示可能连接到这个接口上的任何仪器。新发现的仪器被命名为"newInstrument", "newInstrument1", 依此类推。如后面所述，可以为它们指定含义更丰富的名称。

为使用Instrument Manager，点击GPIB7 Interface选项。它会高亮度显示，Properties按钮变成活动按钮。点击GPIB7前面的[-]图标，"折叠"其下面的选项。下面是折叠后的配置。

为再次"展开"选项，点击GPIB7前面的[+]图标。(为展开整个树，选择My configuration，按*键。) 现在点击选项newInstrument@722或它前面的"instrument"图标，高亮度显示它。窗口应类似于下图：


仪器配置

注意，Instrument下面的所有按钮现在都是活动按钮，包括Properties。这意味着可以删除、编辑或手动配置现有仪器的配置，或在列表中增加新的仪器。

另外注意，Create I/O Object下面的一个按钮现在是活动按钮。这意味着可以为仪器选择和放置一个Direct I/O Object。在其它仪器配置中，这时Plug&play Driver、Panel Driver和Component Driver按钮可能是活动按钮，具体取决于已经安装的驱程。

点击Configure Drivers按钮，更新仪器配置。出现Identify Instrument对话框，询问是否想把*IDN? (identification)消息发送给仪器。下图是这个对话框。

点击OK。如果打开了连接到GPIB接口上的仪器，那么仪器会应答。在本例中，仪器是HP 34401A，而且已经打开。下图显示了这时的Instrument List外观。

注意已经发生两个变化：

1 仪器标识已经变成newInstrument(HP34401a@722)。

2 newInstrument(HP34401a@722)前面的"instrument"图标已经变化，表明仪器连接到计算机上。

(如果仪器没有通电，那么标识和图标不变。)


重命名仪器

在已经确定仪器后，可以在Instrument List中为其提供一个含义更丰富的名称。为进行这一操作，点击Properties按钮。在Properties对话框出现时，点击Name字段，输入首选的名称。下图显示了为HP 34401A输入名称"dmm"，替换"newInstrument"。

点击OK完成变动。下图显示了包括HP 34401A新名称的Instrument List。

添加仪器配置

为添加仪器，点击Add...按钮，出现Instrument Properties对话框，如下图所示。

在默认情况下，新的配置会显示名称newInstrument。可以输入一个新名称，如dmm2。在Interface字段中保持选中GPIB。(如果想改变接口类型，点击GPIB右面的箭头，显示下拉列表。) 然后点击address字段，把地址变成723。下图显示了这些变化后的Instrument Properties对话框。

备注

如果想在对话框中各个字段之间移动，点击所需的字段，或使用Tab键。如果按Enter 或 Return，对话框会退出。

现在点击Advanced...按钮，显示Advanced Instrument Properties对话框。

这个对话框中的General一栏允许指定超时值，打开或关闭活动模式，选择字节排序，及增加描述。点击Description字段，输入hp34401a。

备注

如需与Instrument Properties和Advanced Instrument Properties对话框中各个字段有关的进一步信息，参阅“Properties对话框细节"。

Advanced Instrument Properties对话框中显示的各个栏和字段取决于选中的接口。

现在选择Panel Driver一栏，显示下面的对话框。

点击ID Filename字段，系统提示选择一个Instrument Driver文件。

双击ag34401a.cid，选中该文件。

现在点击每个对话框上的OK，返回Instrument Manager，如下图所示。

这时可以点击Save按钮，保存新的配置。


配置Direct I/O对象

下面的范例说明了怎样配置Direct I/O对象。在本例中，我们在逻辑单元1 (COM1)上为Direct I/O配置一台Serial Instrument。

1 选择My Configuration

2 点击Find Instruments

3 在Find Instruments完成时，选择Serial1，点击Add...

4 应该看到下面的对话框

Instrument Properties对话框允许选择新仪器的名称和地址。把名称变成Serial1。

点击Advanced...，出现Advanced Instrument Properties对话框，有两个相关的栏。

Serial一栏允许指定串行参数，如波特率。如需与各个参数和字段有关的进一步信息，参阅“Properties对话框细节"。对许多应用，可以使用默认值。

如下图所示，Direct I/O一栏允许为Direct I/O指定大量的参数，包括EOL序列。对大多数应用，可以使用默认值。

备注

Direct I/O一栏显示的字段选择取决于已经选中的Interface。此外，对仅VXI，有另外两栏：A16 Space和A24/A32 Space。

这些栏允许为Direct I/O对象中的WRITE or READ事务配置VXI设备的寄存器。如需与每一栏显示的参数和字段有关的进一步信息，参阅“Properties对话框细节"。

在每个对话框上点击OK (或点击Cancel不进行变动)，返回Instrument Manager。在本例中，在Serial1接口下已经添加一台新仪器Serial1。为在工作区中添加一个Direct I/O对象，点击Direct I/O按钮，放置对象，再点击，出现下面的画面。

备注

Direct I/O对象使用基于事务的I/O与仪器通信，而不使用仪器驱程。参阅使用Direct I/O对象。


配置VXIplug&play驱程

配置To/From VXIplug&play对象的程序与配置Panel Driver、Component Driver和Direct I/O对象的程序非常相似。但是，必须先安装相应的VXIplug&play驱程文件，如VXIplug&play介绍中所述。

备注

如果正在使用Windows操作系统，那么VISA Assistant辅助程序会提供与VXIplug&play驱程有关的有用信息。这些信息可以帮助您确定VXIplug&play 驱程配置要求的有效地址。在Windows Start菜单Program Files [image] Agilent I/O Libraries [image] VISA Assistant中，可以找到VISA Assistant。

例如，我们将为HP 34401数字万用表添加VXIplug&play配置。选择I/O [image] Instrument Manager，点击Add....，出现Instrument Properties对话框。把名称变成vxiDevice，Interface type选择VXI。

Address字段不用于VXIplug&play驱程。点击Advanced...，出现Advanced Instrument Properties对话框，然后选择Plug&play Driver一栏。

然后，从Plug&play Driver Name下拉列表中选择名为HP34401的驱程。除非以前已经安装了驱程，否则不能选择VXIplug&play驱程。

在默认情况下，Address字段显示VXI0::0::INSTR，它假设仪器的VXI逻辑地址为0。一般来说，您需要提供正确的逻辑地址。例如，如果HP 34401的逻辑地址是24，那么把Address字段变成VXI0::24::INSTR。如需与Plug&play Driver一栏中的字段有关的进一步信息，参阅 “Properties对话框细节”。

备注

只有Plug&play Driver一栏适用于配置VXIplug&play驱程。General, Direct I/O, Panel Driver, A16 Space和A24/A32 Space栏对VXIplug&play配置没有影响。例如，会忽略General一栏上的Live Mode设置，因为VXIplug&play设备一直视为活动。

在配置仪器后，在每个对话框上点击OK，返回Instrument Manager，显示新增的仪器，如下图所示。

点击Plug&play Driver按钮，添加一个To/From VXIplug&play对象。

如需与使用To/From VXIplug&play对象有关的信息，参阅 “使用To/From VXIplug&play对象”。


属性对话框细节

本节详细介绍了Instrument Properties 对话框、Advanced Instrument Properties对话框的每一栏及Interface Properties 对话框。

Instrument Properties 对话框

在选择一部仪器，并在Instrument Manager中点击Add...按钮或Properties按钮时，会出现Instrument Properties 对话框。这个对话框的实例如下：

下面几节介绍了各个字段。

Name字段

VEE Instrument control对象要求Name字段唯一地识别特定仪器配置。仪器名称是Instrument Control对象的每个实例及与该名称对应的所有配置信息之间的符号链接。通常情况下，这个字段用来为仪器提供描述性名称，如Oscilloscope或Power_Supply。

如果您希望以程序化方式获得/设置其属性，那么Name必须是有效的VEE变量名称。名称必须以字母字符开头，后面跟着字母数字字符或下划线。

名称必须是唯一的。例如，不能配置两部名称都是Scope的仪器。尽管可以创建指向同一部物理仪器的两个不同名称，但如果在同一程序中在Panel Drivers或VXIplug&play驱程内同时使用这两个名称，那么会导致问题。

不要混淆仪器名称与Instrument Control对象中作为标题出现的文字。Instrument Control对象的默认标题是名称，但可以改变标题，对名称没有影响。如果需要确定Instrument Control对象的特定实例的名称，选择Instrument Control对象菜单中的Properties (如Direct I/O, MultiInstrument I/O)。

备注

正确使用名称非常重要。本节只讨论了比较常见的情况。如需与VEE使用名称有关的更详细信息，请参阅“名称的重要意义”

Interface字段

Interface字段指明了与仪器通信使用的硬件接口类型：GPIB, VXI, GPIO, 或Serial。

Address字段

Address字段指明了仪器的地址。对使用GPIO或串行接口的仪器，地址与接口逻辑单元相同。接口逻辑单元是计算机用来识别某个接口的数字。

对采用GPIB接口的仪器，地址采用xxyyzz的形式，其中：

• xx是1位或2位接口逻辑单元。大多数GPIB接口出厂时默认的逻辑单元是7。

• yy是仪器的2位总线地址。对小于10的总线地址，前面要加零。例如，使用09而不是9。

• zz是仪器的二级地址。使用多个插入模块的卡槽类仪器一般使用二级地址。二级地址用来通过C型VXI主机中的命令模块存取设备，及在B型VXI主机中找到设备地址。

备注

二级地址是IEEE 488.1中定义的二级地址。它是仪器硬件接口技术数据的一部分。仪器硬件设计决定着是否要求二级地址。二级地址与驱程配置无关。

不要把二级地址与Advanced Instrument Properties 对话框中使用的Sub Address字段弄混了。子地址是与驱程有关的特性，用得非常少。

对使用VXI接口的仪器 (连接到嵌入式控制器或直接存取VXI背板的控制器上)，地址采用xxyyy的形式，其中：

• xx是嵌入式或外部控制器VXI背板接口的1位或2位逻辑单元。

• yyy是VXI设备的逻辑地址。对小于100的逻辑地址，前面要加零。例如，使用008而不是8。

备注

把Address字段设为0具有特殊意义。把Address字段设为0 (对任何接口)表示没有任何与这一设备描述相匹配的物理仪器连接到计算机上。地址0自动把Live Mode设为OFF。

· GPIB地址实例1 为使用逻辑单元7的GPIB接口卡控制总线地址9上的GPIB仪器，仪器的Address字段设置为709。如需与推荐的逻辑单元有关的信息，请参阅“逻辑单元和I/O地址”。

· GPIB地址实例2 为使用逻辑单元14的GPIB接口卡控制总线地址12上的仪器，Address字段设置为1412。

· VXI地址实例3 为使用逻辑单元16的嵌入式VXI控制器控制逻辑地址28上的VXI仪器，Address字段设置为16028。如需与推荐的逻辑单元有关的信息，请参阅“逻辑单元和I/O地址”。VXI仪器的逻辑地址是1 – 255(含)。

· VXI地址实例4 为通过逻辑单元7的GPIB接口使用HP E1406 GPIB命令模块寻址逻辑地址24的VXI仪器，Address字段设置为70903。

对HP E1406命令模块，VXI仪器使用的二级地址等于仪器的逻辑地址除以8。如逻辑地址是24，二级地址是3。因此，完整的地址是70903。

· 串行地址实例 为使用逻辑单元9的COM1串行端口控制仪器，仪器的Address字段设置为9。如需与推荐的逻辑单元有关的信息，请参阅“逻辑单元和I/O地址”。

· GPIO地址实例 为使用逻辑单元13的GPIO接口控制定制仪器，仪器的 Address字段设置为13。如需与推荐的逻辑单元有关的信息，请参阅“逻辑单元和I/O地址”。

Gateway字段

使用Gateway字段，设置远程流程中使用的LAN网关的名称。如需进一步信息，请参阅“LAN网关”。

另请参阅

Advanced Instrument Properties 对话框


Advanced Instrument Properties对话框: General栏

下图是Advanced Instrument Properties(高级仪器属性)对话框General栏的实例：

下面详细介绍了各个字段。

备注

General栏中指明的参数适用于Direct I/O, Panel Driver和Component Driver对象，但不适用于To/From VXIplug&play对象。

Timeout (sec)字段

Timeout字段指明在产生错误前VEE将等待多少秒的时间使仪器响应通信请求。默认值为5秒，这适用于大多数应用。

一般来说，不应把这个字段设为0，否则VEE会永远检测不到超时。VXI设备寄存器或存储器存取使用的某些Direct I/O操作不支持超时。

Live Mode字段

Live Mode字段确定VEE是否企图与指定地址的仪器通信。为与连接到计算机上的仪器通信，必须把Live Mode设为ON。

如果Live Mode对某部仪器设为OFF，可以运行包含Panel Drivers, Component Drivers或Direct I/O对象的程序，否则会读写这部仪器。但是，实际上并没有发生仪器通信。如果在没有提供仪器时用户希望开发或调试部分程序，那么特别适合使用这种方式。

Byte Ordering字段

使用这个字段指明读写二进制数据的设备使用顺序。VEE使用这个字段中的值确定是否需要交换字节。点击这个字段，可以选择MSB (先发送最有用的字节)或LSB (先发送最没有用的字节)。在默认情况下，所有IEEE 488.2标准设备都必须设为MSB顺序。具体信息请参阅设备手册。

Description (可选)字段

Description字段一般用来记录制造商的产品型号。例如，HP 54504A示波器的Description可以是hp54504a。这个字段是为方便用户而提供的，VEE不使用这个字段。


Advanced Instrument Properties对话框: Direct I/O栏

下图是Advanced Instrument Properties(高级仪器属性)对话框Direct I/O栏的实例(显示的接口为GPIB接口)：

下面详细介绍了各个字段。

备注

在VXI背板上直接处理VXI设备时，如果存在I-SCPI驱程，可以使用SCPI消息控制基于寄存器的设备。如果没有提供要求的I-SCPI驱程，VEE会通知用户。

如果没有提供I-SCPI驱程，那么用户必须通过直接读/写存取设备寄存器或设备存储器，来控制基于寄存器的设备。详情请参阅“Advanced Instrument Properties 对话框: A16 Space (仅适用于VXI)栏" 或“Advanced Instrument Properties 对话框: A24/A32 Space (仅适用于VXI)栏" 。

Read Terminator字段

Read Terminator字段指明了终结READ操作的字符。这个字段中的项目必须是带双引号的单个字符。双引号是指ASCII 34十进制字符。VEE把任何ASCII字符识别为Read Terminator，并识别下表所示的换码符。

应该指明的字符取决于仪器设计。大多数GPIB仪器在把数据发送到计算机上以后会发送换行符。详情请参阅仪器编程手册。

Write EOL Sequence字段

EOL Sequence字段指明了在使用EOL ON的WRITE操作结束时发送的字符。这个字段中的项目必须是带双引号的零个或更多字符。双引号是指ASCII 34十进制值。VEE识别EOL Sequence内部的任何ASCII字符，包括上表所示的换码符。

Write Multi-field As字段

Multi-field As字段指明 WRITE TEXT操作的多字段数据类型的格式化样式。VEE中的多字段数据类型是Coord, Complex, PComplex和Spectrum。其它数据类型和其它格式不受这一设置影响。

在指定(...) Syntax的多字段格式时，应在每个多字段项目外面加上圆括号。指定Data Only会省略圆括号，但保留分隔逗号。例如，在使用(...) Syntax时，复数 2+2j写为(2,2)，在使用Data Only语法时写为2,2。

Write Array Separator字段

Array Separator字段指明WRITE TEXT操作编写的数组各要素使用的字符串。这个字段中的项目必须是带有双引号的单个字符。双引号是指ASCII 34十进制字符。VEE把任何ASCII字符识别为Array Separator，并识别上表所示的换码符。

写入数组的Direct I/O对象中的WRITE TEXT STR操作是一个特例。在这种情况下，将忽略Array Separator字段中的值，使用换行符(ASCII 10十进制)分隔数组的各个要素。这一行为与大多数仪器的需求相一致。

VEE支持多字段数据类型数组。例如，用户可以创建复数数组。在这种情况下，如果Multi-Field Format设置为(...) Syntax，那么数组表示为：

(1,1)array_sep(2,2)array_sep ...

其中 array_sep 是Array Separator字段中指定的字符。

Write Array Format字段

Array Format字段决定写入多维数组的方式。例如，数学家编写的矩阵如下：

1 2 3 4 5 6 7 8 9

VEE根据Array Format设置，使用两种方式之一编写同一矩阵。在下面的两个实例中，EOL Sequence设为"\n" (换行)，Array Separator设为" " (空格)。

1 2 3 块数组格式

4 5 6

7 8 9

1 2 3 4 5 6 7 8 9 线性数组格式

不管采用哪种数组格式，都使用Array Separator字符分隔数组的每个要素。块数组格式则更进一步，使用EOL Sequence字符分隔数组中的每一行。

在比较常见的情况下(两维以上的数组)，每次在最右面的下标之外的下标变化时，块数组格式会输出一个EOL Sequence字符。例如，如果在这一操作中使用块数组格式编写三维数组A[x,y,z]：

WRITE TEXT A

每次在x或y值变化时，都会输出EOL Sequence。如果A中每个维度的尺寸是2，那么这些要素的编写顺序是：

A[0,0,0] A[0,0,1]<EOL Sequence>

A[0,1,0] A[0,1,1]<EOL Sequence>

<EOL Sequence>

A[1,0,0] A[1,0,1]<EOL Sequence>

A[1,1,0] A[1,1,1]<EOL Sequence>

注意在编写A[0,1,1]之后，x和y同时变化，结果写了两个<EOL Sequence>。

Write END (EOI) On EOL字段 (仅适用于GPIB)

END on EOL控制着EOI (End或Identify)的行为。如果END on EOL是YES，在下述情况之一时，在写入最后一个数据字节时将在总线上确认EOI行：

1 在EOL ON时执行WRITE操作。

2 作为Direct I/O对象中列明的最后操作执行WRITE操作。

3 在没有确认EOI的情况执行一个或多个WRITE操作，后面跟着非WRITE操作，如READ。

许多仪器接受EOI或换行作为有效的消息终结符。某些块传送可能要求EOI。详情请参阅仪器编程手册。

Conformance字段

Conformance指明仪器是否符合IEEE 488.1或IEEE 488.2标准。参阅仪器编程手册，确定仪器符合的标准，然后相应地设置Conformance字段。

每个标准都为GPIB接口定义了通信协议。但是，IEEE 488.2指明了IEEE 488.1下没有规定的块包头及学习字符串的规则。所有基于消息的VXI仪器都符合IEEE 488.2标准，都是I-SCPI驱程支持的基于寄存器的VXI仪器。

如果把Conformance设为IEEE 488 (表示IEEE 488.1)，可以选择指明其它设置，处理块包头和学习字符串，具体参阅下面的介绍。

Binblock字段

Binblock字段指明WRITE BINBLOCK操作使用的块数据格式。Binblock可以指定IEEE 728 #A, #T,或#I块包头。如果Binblock是None，WRITE BINBLOCK会写入一个IEEE 488.2 Definite Length Arbitrary Block Response Data块。

IEEE 728块包头采用下述形式：

#A<Byte_Count><Data>

#T<Byte_Count><Data>

#I<Data><END>

其中：

<Byte_Count>是16位无符号整数，它指明了<Data>中后面跟着的字节数。

<Data>是任意字节流。

<END>表明确认EOI最后一个数据字节已经传输。

State (Learn String)字段

State字段表明仪器是否配置为上传和下载学习字符串。如果State项目是Not Config'd，用户希望把仪器配置成用于学习字符串，那么点击State字段，将出现Upload String字段和Download字段。如果State项目是Not Config'd，把Upload String字段和Download String字段设为空字符串。

Upload String字段

Upload String字段指明在从Direct I/O对象菜单中选择Upload State时发送到仪器的命令。指定导致仪器输出学习字符串的命令。详情请参阅仪器编程手册。命令必须带有双引号。

Download String字段

Download String字段指明Direct I/O对象中WRITE STATE操作导致的在学习字符串前立即发送到仪器的字符串。这个字段用来支持在下载学习字符串时要求命令前缀的仪器。详情请参阅仪器编程手册。


Advanced Instrument Properties对话框: Plug&play Driver栏

下图是Advanced Instrument Properties(高级仪器属性)对话框Plug&play Driver栏的实例(显示的接口为GPIB接口)：

Plug&play Driver栏是Advanced Instrument Properties对话框中唯一与VXIplug&play驱程配置对应的栏。

下面介绍了各个字段。

Plug&play Driver Name字段

这个字段指明VXIplug&play驱程的名称。在要求这个参数时，必须选择一个驱程名称。下拉列表显示了已经安装的所有VXIplug&play驱程。如果列表中没有项目，要么是还没有安装任何VXIplug&play驱程，要么环境变量可能设置不正确。

Parameters to init() call字段

Address

输入识别仪器的地址。地址格式取决于仪器连接到的接口：

· VXI address string (嵌入式VXI, VXLink, 或MXIbus控制器)。

对带有嵌入式控制器、VXLink控制器或MXIbus控制器的VXI仪器，地址串采用的形式如下：

VXI[board]::VXI logical address[::INSTR]

例如，VXI::24::INSTR表示逻辑地址24上的仪器。

board 编号对第一块电路板是可选的(VXI::24::INSTR等同于VXI0::24::INSTR)。但是，后续的电路板(VXI1, VXI2, 等等)则要求 board 编号。

· GPIB-VXI address string (命令模块)。

对从连接到命令模块的GPIB卡控制的VXI仪器，地址串采用的形式如下：

GPIB-VXI[board]::VXI logical address [::INSTR]

例如，GPIB-VXI::24::INSTR (或GPIB-VXI0::24::INSTR)表示VXI逻辑地址24上的仪器。

· GPIB address string (GPIB仪器)。

对从GPIB卡控制的非VXI仪器，地址串采用的形式如下：

GPIB[board]::GPIB primary address::[GPIB secondary address][::INSTR]

例如，GPIB::23::INSTR (or GPIB0::23::INSTR)表示主地址23上的GPIB仪器。(很少使用可选的二级地址。)

Perform Identification Query

如果用户在第一次执行驱程的功能面板时希望驱程查询仪器标识，选择这个复选框。一般应选择这个复选框，只在极少数情况下仪器不支持这一操作。

Perform Reset

如果用户在第一次执行驱程的功能面板时希望向仪器发送复位，选择这个复选框。一般应选择这个复选框，只在极少数情况下仪器不支持这一操作。注意，所有VXI仪器都支持这一操作。

Download Drivers

如果用户需要新的驱程或需要升级驱程，点击Advanced Instrument Properties对话框中的URL。


Advanced Instrument Properties对话框: Panel Driver栏

下图是Advanced Instrument Properties(高级仪器属性)对话框Panel Driver栏的实例：

备注

只有在I-SCPI驱程支持时，才能把基于寄存器的VXI设备配置成基于消息。

这一栏用来配置Panel Driver对象和Component Driver对象。下面介绍了各个字段。

ID Filename字段

ID Filename字段指明包含希望的Panel Driver的文件。点击这个字段，出现Read from what Instrument Driver?对话框，选择一个文件。根据仪器型号命名文件。

一定要选择与使用的仪器型号完全对应的名称，因为有许多类似的文件名称，如hp3325a.cid和hp3325b.cid。

Sub Address字段

Sub Address字段指明某些驱程用来识别卡槽型仪器中插件模块的子地址，如数据采集系统和交换机。如果没有为其中一个插件配置驱程，把这个字段设为"" (NULL字符串)。

备注

由于使用subaddresses的驱程非常少，因此几乎所有情况下都使用默认设置"" (NULL字符串)。

如果为其中一个插件配置驱程，请参阅仪器驱程的联机帮助，确定是否使用及怎样使用子地址。

备注

不要弄混Sub Address字段与GPIB仪器的二级地址。子地址是driver配置的一部分，而不是硬件地址的一部分。

Error Checking字段

Error Checking字段确定在设置组件值后VEE是否查询仪器的错误。把这个字段设为ON，除非执行速度不可接受。

Incremental Mode字段

Incremental Mode字段指明Panel Driver对象是否使用递增状态调用。

备注

在几乎所有情况下，Incremental Mode的正确设置都是ON。

在Incremental Mode设为ON时，VEE自动使发送到仪器改变状态的命令数量降到最少。为此，VEE会把物理仪器当前状态记录与Panel Driver中指定的新状态进行对比。

VEE确定哪些组件的设置不同，然后只发送所需的命令，改变与希望的状态不匹配的组件。在大多数情况下，应把Incremental Mode设为ON，因为这种模式提供了最佳的执行速度。

在Incremental Mode设为OFF时，在相应的Panel Driver操作时，VEE明确设置每个组件的值。这种模式一般只用于VEE的仪器状态记录有可能与仪器实际状态不匹配时。

Incremental Mode设置影响着Panel Driver对象操作，但不影响Component Driver对象操作。在下述情况下，建议把Incremental Mode设为OFF：

• 在VEE程序控制仪器的同时，允许使用前面板操作仪器

• 在VEE程序控制仪器的同时，通过C程序或外壳命令在VEE环境外部改变仪器设置。

在程序中结合使用Component Drivers, Panel Drivers和Direct I/O对象，并不意味着必需把Incremental Mode设为OFF。


Advanced Instrument Properties对话框: Serial栏

下图是Advanced Instrument Properties(高级仪器属性)对话框Serial栏的实例(只适用于串行接口)：

可以为串行(RS-232)接口设置下述字段：

• Baud Rate – 默认值为9600 (位/秒)。

• Character Size – 默认值为8 (bits)。允许的值为5, 6, 7, 8, 和None。

• Stop Bits – 默认值为1。允许的值为1和2.

• Parity – 默认值为None。允许的值为None, Odd, Even, Mark,和Space。

• Handshake – 默认值为None。允许的值为None和Xon/Xoff。

• Receive Buffer Size – 默认值为4096 (bytes)。


Advanced Instrument Properties对话框: GPIO栏

下图是Advanced Instrument Properties(高级仪器属性)对话框GPIO栏的实例 (只适用于GPIO接口)：

GPIO栏只有一个字段：Data Width。Data Width字段指明通过GPIB接口作为一个单位传输的并行数据位数。这个字段把接口配置成读写宽8位或16位的数据。不需要与这个字段一起设置硬件开关。


dvanced Instrument Properties对话框：A16 Space (仅适用于VXI)栏

Advanced Instrument Properties对话框：A16 Space (仅适用于VXI)栏

下图是Advanced Instrument Properties(高级仪器属性)对话框A16 Space栏的实例。只有VXI接口才会出现这一栏，它仅用于基于寄存器的直接I/O操作。

下面详细介绍了各个字段。

Byte Access (D8)字段

Byte Access字段指明了VXI设备是否支持8位A16存储器存取。这个字段的可能选项有：

• NONE – 设备不支持字节存取。

• ODD ACCESS – 设备支持字节存取，但只在奇数字节边界上支持存取(D08(O))。

• ODD/EVEN ACCESS – 设备支持在所有边界上进行字节存取(D08(EO))。

Word Access (D16)字段

Word Access字段不能编辑。所有VXI设备都必须支持16位存取 (D16)。

LongWord Access (D32)字段

LongWord Access字段指明了VXI设备是否支持32位A16存储器存取。可能的选项包括：

• NONE – 设备不支持32位存取。

• D32 ACCESS – 设备支持32位A16存储器存取。

Add Register字段

在点击Add Register字段时，它会在对话框中增加一行字段。这些字段允许配置存取设备的A16存储器。共有四个字段：

• Name – 寄存器的符号名称，用来指明使用READ REGISTER或WRITE REGISTER操作的直接I/O对象中的特定寄存器。

• Offset – 配置的寄存器距设备A16存储器相对基数的字节偏置值。

• Format – 将读取或写入配置的寄存器的数据格式。将在Offset字段指明的字节上进行读取或写入存取操作。可能的格式如下：

• BYTE – 读取或写入字节。设备必须支持、并能够使用上面介绍的BYTE字段正确配置8位存取。如果BYTE字段是ODD，那么Offset字段中指明的字节位置必须是奇数。

• WORD16 – 读取或写入16位字。16位用2的补数整数表示。所有VXI设备都明确支持这种格式。

• WORD32 – 读取或写入32位字。32位用2的补数整数表示。即使LongWord Access字段指定为NONE (使用两个D16存取来读取或写入所有32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将存取全部32个位。

• REAL32 – 读取或写入32位字。32位用IEEE 754 32位浮点数表示。即使LongWord Access字段指定为NONE (使用两个D16存取来读取或写入所有32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将存取全部32个位。

• Mode – 指明寄存器将支持哪种I/O模式，选项如下：

• READ – 这个寄存器选项将只出现在READ REGISTER操作中。

• WRITE – 这个寄存器选项将只出现在WRITE REGISTER操作中。

• READ/WRITE – 这个寄存器选项将同时出现在READ REGISTER操作和WRITE REGISTER操作中。

Delete Register字段

在点击Delete Register字段时，会显示当前配置的寄存器的符号名称列表。将从对话框中删除选定的寄存器。

实例

下图显示了HP E1411B VXI万用表的寄存器配置下的A16 Space栏。注意在使用Add Register增加其它寄存器时，寄存器列表会滚动。

备注

扩展的(A24/A32 Space)存储器配置与此类似，但它由存储器"位置"、而不是"寄存器"构成。

Offset字段配置成每个寄存器距设备的A16空间相对基数的字节偏置。状态寄存器(图中Name: = stat)配置4字节偏置，配置模式为READ模式。

图中没有显示控制寄存器。控制寄存器一般在WRITE模式下配置成4字节偏置。尽管两个不同的寄存器位置可以有相同的模式，但Name字段必须是唯一的。但是，可以在READ/WRITE模式下，在字节位置4上把寄存器命名为statuscontrol。


Advanced Instrument Properties对话框: A24/A32 Space (仅适用于VXI)栏

下图是Advanced Instrument Properties对话框的A24/A32 Space栏范例。只有VXI接口才会出现这一栏，其只用于基于寄存器的Direct I/O事务。

下面几节介绍了各个字段。

备注

"扩展存储器"一词指VXI设备中的A24或A32存储器。(VXI设备可以实现A24或A32存储器，但不能同时实现这两者。)

Byte Access (D8)字段

Byte Access字段指定VXI设备是否支持8位存储器访问。这个字段可能的选项包括：

• NONE - 设备不支持字节访问。

• ODD ACCESS - 设备支持字节访问，但只在奇数字节边界(D08(O))上支持字节访问。

• ODD/EVEN ACCESS - 设备在所有边界(D08(EO))上支持字节访问。

Word Access (D16)字段

Word Access字段不能编辑。对所有存储器空间，所有VXI设备必须支持16位访问(D16)。

LongWord Access (D32)字段

LongWord Access字段指定VXI设备是否支持32位存储器访问。可能的选项包括：

• NONE - 设备不支持32位访问。

• D32 ACCESS - 设备支持32位A16存储器访问。

QuadWord Access (D64)字段

QuadWord Access字段指定VXI设备是否支持64位扩展存储器访问。可能的选项包括：

• NONE - 设备不支持64位访问。

• D64 ACCESS - 设备支持64位存储器访问。

Agilent I/O Libraries G.02.02支持对某些VXI I/O仪器的存储器空间进行64位访问。这一功能使得VEE程序能够对支持这一模式的VXI仪器读/写64位单位的存储器。如果已经安装了G.02.02版，那么可以使用Advanced Instrument Configuration对话框上的A24/A32 Space Tab启动这种访问模式。

为启动这一模式，先启动QuadWord Access (D64)访问，选择格式WORD32*2或REAL64。如果选择WORD32*2格式，那么将把一个64位值读入INT32数组的两个相邻数字中。

位置：I/O [image] Instrument Manager [image] (select VXI instrument) [image] Edit Instrument [image] Advanced I/O Config... A24/A32 Space Tab。

Add Location字段

在点击Add Location字段时，它会在对话框中添加一行字段。这些字段允许配置到设备扩展存储器的访问，共有四个字段：

• Name - 位置的符号名称，用来指明READ MEMORY或WRITE MEMORY事务的Direct I/O对象中的特定存储位置。

• Offset - 配置的位置距设备扩展存储器相对基数的偏置，单位为字节。

• Format - 将读取或写入配置的位置的数据格式。将在Offset字段指定的字节上进行读或写访问。可能的格式包括：

• BYTE - 读或写一个字节。设备必须使用上面讨论的BYTE字段支持、并正确配置成8位访问。如果BYTE字段是ODD，那么Offset字段中指定的字节位置必须是一个奇数。

• WORD16 - 读或写一个16位字。16位表示为2的补数整数。所有VXI设备都明确支持这种格式。

• WORD32 - 读或写一个32位字。32位表示为2的补数整数。即使LongWord Access字段指定为NONE (通过使用两个D16访问，读或写全部32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，可以访问全部32位。

• REAL32 - 读或写一个32位字。32位表示为IEEE 754 32位浮点数字。即使 LongWord Access字段指定为 NONE (通过使用两个 D16访问，读或写全部 32位)，VEE仍支持这种格式。如果 LongWord Access字段指定为 D32 ACCESS，可以访问全部 32位。

• WORD32*2 - 作为两个32位字读或写一个64位字(作为两个Int32)。必须启动 QuadWord Access。

• REAL64 - 作为REAL64读或写一个64位字。必须启动QuadWord Access。

• Mode - 指定这个位置将支持哪种I/O模式，选项包括：

• READ - 这个位置将只作为READ MEMORY事务中的选项出现。

• WRITE - 这个位置将只作为WRITE MEMORY事务中的选项出现。

READ/WRITE - 这个位置将同时作为READ MEMORY和WRITE MEMORY事务中的选项出现。

Delete Location字段

在点击Delete Location字段时，将显示当前配置的位置的符号名称列表。将从对话框中删除选中的位置。


了解I/O事务

VEE使用I/O事务与仪器、文件、字符串、操作系统、接口、其它程序和打印机通信。例如，看一下下面的To File对象。

这个To File对象把数据发送到指定文件 myFile。它可以包括称为事务的输入，接受来自程序的数据。例如，这个To File对象包括事务WRITE TEXT和一个EOL。在双击事务时，会出现I/O Transaction对话框，配置特定的事务语句。

根据对象，这个对话框有几种不同形式，但所有这些形式都包含某些共同的要素，包括“actions”、“encoding”、“expression list”、“format”和“end-of-line” (EOL)序列。


I/O 事务格式

写入数据的I/O事务通常采用下述格式：

<操作> <编码> <表达式列表> <格式> <EOL>

下面是最常见的操作：READ, WRITE, EXECUTE, 和WAIT。
操作 | 说明
READ | 使用指定编码和格式从指定来源读取数据。
WRITE | 使用指定编码和格式把数据写入指定目标。
EXECUTE | 执行特定命令。例如，EXECUTE REWIND把文件读取或写入指针重新定位到文件开头，而不会擦除内容。EXECUTE CLOSE关闭一个打开的文件。
WAIT | 在下一个事务前等待指定秒数。

备注

通过查看菜单中的对象，还可以考察许多I/O Advanced I/O Operations操作。

编码和格式是指数据打包和发送的方式。例如，TEXT编码作为ASCII字符发送数据。TEXT编码可以采用多种方式格式化。例如，为把由字母和数字组成的字符串发送到一个文件中，WRITE TEXT STRING事务将发送ASCII字符表示的整个字符串。WRITE TEXT REAL事务只从同一个字符串中提取Real数字，然后对各个位使用ASCII字符发送。下面简要介绍了编码。

编码 | 说明
TEXT | 以人可读的、可以简便编辑或移植到其它应用软件的形式(ASCII)读取或写入所有数据类型。VEE数字数据自动转换成文本。
BYTE | 把数字数据转换成二进制整数，发送或接收最无效的字节。
CASE | 把一个枚举值或一个整数映射到一个字符串，读取/写入该字符串。例如，可以使用CASE接受错误数字，写入错误信息。
BINARY | 以机器专用的二进制格式事务所有数据类型。
BINBLOCK | 在二进制文件中使用IEEE488.2有限长度块包头及所有VEE数据类型。
CONTAINER | 使用VEE专用文本格式及所有数据类型。

在写入事务中，“表达式列表”是需要求解、生成发送的数据的逗号分隔的表达式列表。表达式可以由数学表达式、数据输入端名称、字符串常数、VEE函数或全局变量组成。在读取事务中，表达式列表应由逗号分隔的输出端名称组成，这些名称指明在读取时在哪里存储数据。

“怎样控制仪器” 中介绍了数据格式及从仪器中读取数据。大部分格式适用于所有I/O事务。

可以关闭、也可以打开EOL (行尾字符序列)，通过打开大部分I/O [image] To对象的对象菜单，选择Properties...，可以指定EOL序列，然后选择Data Format，在Separator Sequence下进行改动。


创建和读取事务

这里讨论的所有I/O对象都包含事务。事务指定了低级输入或输出操作，如怎样读取或写入数据。每个事务都表现为I/O对象打开视图中列明的一行文本。为查看典型事务，点击I/O [image] To [image] String，创建一个To String对象。

为增加事务，双击对象。

下图是使用To String对象说明事务怎样运行的简单程序。这个程序使用两个事务，一个事务写入字串文字，另一个事务写入固定十进制格式的数字。

对基于事务的对象，一般至少需要进行两项操作：

1 增加要求的额外事务。

2 增加输入端或输出端或两者。在增加或编辑事务时，大多数端会根据需要自动增加。

另请参阅

编辑事务, 读取事务数据 , 事务开发建议


编辑事务

使用鼠标和键盘编辑

下表简要介绍了怎样使用鼠标编辑事务。

要进行的操作... | 鼠标操作...
在列表末尾增加另一个处理。 | 双击对象，或在对象菜单中增加Trans。
把高亮显示条移到不同的处理上。 | 任何未高亮显示的处理。
在高亮显示的处理上方插入一个处理。 | 对象菜单中Insert Trans。
剪切(删除)高亮显示的处理，把它保存在处理“剪切和粘贴”缓冲器中。 | 对象菜单中Cut Trans。
把高亮显示的处理复制到处理“剪切和粘贴”缓冲器中。 | 对象菜单中Copy Trans。
把缓冲器中当前处理粘贴到高亮显示的处理上方。 | 对象菜单中Paste Trans。
编辑处理。 | 双击处理。

下表简要介绍了怎样使用键盘编辑事务。

要进行的操作... | 按这个键...
把高亮显示条移到下一个处理。 | CTRL+N
把高亮显示条移到上一个处理。 | CTRL+P
把高亮显示条移到不同的处理。 | Home,Up/Down Arrow,
在高亮显示的处理上方插入一个处理。 | Insert line或CTRL+O
剪切(删除)高亮显示的处理，把它保存在处理“剪切和粘贴”缓冲器中。 | Delete line或CTRL+K
把缓冲器中当前处理粘贴到高亮显示的处理上方。 | CTRL+Y
编辑高亮显示的处理。 | 空格键

为编辑事务内部的字段，双击事务，把它扩展到I/O Transaction对话框，如下图所示。

I/O Transaction对话框中所示的字段对不同I/O操作类型不同。为改变字段中的信息，点击箭头，从出现的列表中选择相应信息。没有箭头的字段要求输入文本。点击OK接受选项，返回I/O对象。

点击NOP，保存对话框中所示的最新设置，使该事务“不操作”。其效果与在基于文本的计算机程序中注释一行代码的效果相同。

根据需要自动增加输入端和输出端。也可以使用Object菜单，增加或删除端。

编辑数据字段

数据字段要求输入文本。下图说明了READ事务及数据字段中可以输入的内容实例。

下图说明了WRITE事务及数据字段中可以输入的内容实例。

WRITE事务允许指定一个表达式列表(变量、常数和运算符)，而READ只支持变量列表。数据字段的典型项目如下：

在接受文本输入作为使用双引号定界的字符串的任何字段中，可以包括换码符，如下表所示。

备注

READ事务允许在数据字段中使用空变量。把数据读入空变量中会丢弃数据。这适用于删除不需要的数据。

另请参阅

创建和读取事务 , 读取事务数据 , 事务开发建议


增加端

VEE在需要时自动增加输入端和输出端。为手动增加端，在对象菜单中点击"Add Terminal"，或使用键盘快捷键CTRL+A。

WRITE操作把数据从VEE传送到与对象有关的目的地，要求数据输入端。WRITE操作还从全局变量或表达式中写入数据，如"abs(globalA)"。

READ操作把数据从与对象有关的来源传送到VEE，要求数据输出端。

出现在端上的变量名称必须与操作规范中的变量名称相匹配，如下图所示。

编辑端变量名称的步骤如下：

1 双击端，把它扩展到Terminal Information对话框中。

2 在对话框中编辑Name字段。

VEE中的变量不分大小写，也就是说，s和S相同，Signal和signal相同。


读取事务数据

为把数据读入变量中，VEE必须知道要读取的数据要素数量或特定终止条件。READ事务查找指定数量的数据要素或文件末尾(EOF)指示。 这些内容在I/O Transaction对话框的最后一个字段中指定。

读取指定数量的数据要素的事务

事务对话框最后一个字段中的默认值是SCALAR。这指明了READ事务只读取一个要素。为改变这种配置，点击SCALAR字段，从提供的选项列表中选择。

列表中的选项指明了READ事务的维数。例如，SCALAR表示维度为0，ARRAY 1D表示一维数组，ARRAY 2D表示二维数组，依此类推。

在选择一个维度时，事务对话框为指定的每个维度显示一个填充字段。下图显示了一个事务对话框，它配置成把一个三维二进制整数数组读入名为matrix的变量中。SIZE:后面三个字段中的每个字段都包含着相应维度的整数数量。(在本例中，每个维度有两个要素。)

在指定一个以上的维度时，先填充最右面或“最里面”的维度。在本例中，按下述顺序读取各个要素：

matrix[0,0,0] read first

matrix[0,0,1]

matrix[0,1,0]

matrix[0,1,1]

matrix[1,0,0]

matrix[1,0,1]

matrix[1,1,0]

matrix[1,1,1] read last

在点击事务对话框中的OK按钮时，会出现事务结果及ARRAY: 关键字，后面跟着维度大小。例如：

READ BINARY matrix INT32 ARRAY:2,2,2

如果事务配置成读取一个标量值，那么会出现下面的事务：

READ BINARY x INT32

可以在SIZE:字段中使用变量名称，以程序化方式指定数组维度。例如，下述事务会读取一个三维矩阵：

READ BINARY matrix INT32 ARRAY:xsize,ysize,zsize

在本例中，xsize, ysize和zsize可以是以前的事务在同一个对象中设置的输入端名称，也可以是输出端名称。

读取到文尾事务

某些VEE对象支持读取到文件末尾(EOF)的READ事务，可以使用一个事务读取文件内容。这些事务称为读取到文尾事务。下面的VEE对象支持读取到文尾事务。

• From File

• From String

• To/From DDE

下图显示了From File对象的事务对话框，它读取由二进制整数组成的三维数组，但配置成读取到文尾：

标量不支持读取到文尾事务。为配置成读取到文尾，必须为至少一维数组配置事务。如果VEE对象支持读取到文尾，那么事务对话框中会出现SIZE:字段。点击SIZE:字段可以启用读取到文尾，会出现TO END:字段。

如果读取一维数组到末尾，那么只有在找到EOF时才知道数组中的要素数量。未知的数组长度在事务中用星号(*)表示。

在读取多维数组到末尾时，除最左面或“外面”的维度外，必须为每个维度提供要素数量。上面的实例显示了这个维度用(*)代替了事务中的大小。只有在读取到文尾事务结束时，才知道这个维度的大小。

三维数组只是把多个两维数组划分在一起。两维数组的维度是“行”和“列”。把两维数组堆叠在一起(象卡片一样)，增加了第三个维度“深度”。

在三维数组的读取到文尾事务中，指定了“行”数和“列”数，但只有在遇到EOF时，才知道“深度”。多维读取到文尾事务也是如此。如果数组有n个维度，那么必须指定这些维度的n-1大小。只能有一个(最左面)维度的大小是未知的。

在维度大于ARRAY 1D的读取到文尾事务中，读取的要素总数必须能够被已知维度乘积均匀除尽。例如，如果三维数组的读取到文尾实例来自于一个共有16个要素的文件，那么事务将读取四个2x2数组，因为事务指定“行”数和“列”数等于2。因此，在读取结束时，未知维度"深度"的大小是4。

如果文件实际包含18个要素，那么其中一个2x2数组不完整。它将只包含两个要素。如果为“行”和“列”维度指定的大小是2，那么这个文件的读取到文尾会导致错误(将不会读取任何数据)。而如果“行”数等于1，“列”数等于3，那么可以读取这个文件，这个文件读取到文尾操作会得到“深度”为6。

如果不知道文件中数据要素的绝对数量，那么可以一直使用ARRAY 1D进行读取到文尾操作。

备注

读取到文尾操作适用于返回要素数量未知的外壳命令程序中的Execute Program对象。

另请参阅

创建和读取事务 , 编辑 事务, 读取事务数据 , 事务开发建议


事务开发建议

开发所需事务的最佳方式通常是使用试错方法。I/O事务中的大部分数据是文本(还有某种二进制数据)。编写为TEXT的数据特别适合试验，因为人可以读。尽管使用TEXT并不是最紧凑、最快速的方法，但使用这种方法几乎可以完成一切操作。

可以使用To String对象，准确地模拟写入文本的其它I/O对象的输出行为。下面的程序显示了完成这一操作的其中一种方式。


选择正确的事务

本节概括了各种I/O 对象及其支持的事务。它还提出了一个程序建议，为特定目的确定正确的对象和事务。事务编码和格式详情请参阅I/O 事务格式。

下表概括了VEE中提供的基于事务的对象及其支持的动作。

表1：

对象 | 说明
To File From File | 把数据写入文件。 从文件中读取数据。
To String From String | 把文字写入VEE容器。 从VEE容器中读取文字。
To Printer | 把文字写入VEE文本打印机。
To StdOut To StdError From StdIn | 把数据写入VEE标准输出。 把数据写入VEE标准错误。 从VEE标准输入中读取数据。
Direct I/O MultiInstrument Direct I/O Interface Operations | 直接与GPIB, VXI, 串行或GPIO仪器通信。 直接与同一对象中的多部GPIB, VXI, 串行或GPIO仪器通信。 在GPIB或VXI接口上发送低级总线命令和数据字节。
To/From DDE | 在Microsoft Windows下运行的程序之间动态交换数据。

表2

动作 | 说明
EXECUTE | 执行低级命令，控制与基于操作的对象有关的文件、仪器或接口。这一动作用来调节文件指针，清除缓冲器，关闭文件和管道，为硬件接口提供低级控制。
WAIT | 在执行下一个操作前等待指定的时间周期。对Direct I/O到GPIB的VXI仪器、基于消息的VXI仪器和的支持I-SCPI、基于寄存器的VXI 仪器，WAIT也可以等待特定的串行轮询响应。
READ | 从相关对象中读取数据。
WRITE | 把数据写入相关对象中。
SEND | 把IEEE 488定义的总线消息(命令和数据)发送到GPIB接口。

选择正确的对象和事务

1 确定I/O事务的来源或目的及数据传输形式。

2 使用上面的表1确定支持来源或目的地的对象类型。

3 使用上面的表2确定正确的事务类型。

4 为确定事务的其余规范，如编码和格式，请参阅WRITE 事务, READ事务

实例: 选择对象和事务

例如，假设需要读取一个文件，其中包含两栏文本数据。每一行包含一个时戳和实数，中间用白空格分开。每一行末尾是换行符。文件的部分内容如下：

14:18:00 1.001

14:18:30 -2.002

14:19:00 1.0E-03 . . .

根据前面的选择对象和事务的程序，可以采取下述步骤解决这个问题：

1 来源是一个文本文件。数据由24小时的时分秒表示的时戳和科学和小数符号表示的签名实数组成。

2 从表1中可以看出，读取文件使用的对象是From File。

3 从表2中可以看出，从文件中读取数据使用的事务类型是READ。

4 要求的事务是：

   READ TEXT x TIME

  READ TEXT y REAL

使用To String和From String

通过事务，使用To String创建格式化Text。Text写入VEE 容器中。

使用From String，从VEE 容器中读取格式化Text。

如果To String 对象中的所有事务都生成一个字符串，输出容器是一个Text标量。如果To String中的事务生成一个以上的字符串，那么输出是Text一维数组。

使用EOL ON的WRITE事务一直终结当前输出串。这会导致下一个事务开始写入输出容器的下一个数组单元。

以EOL OFF结束的WRITE事务将不会终结输出串，导致下一个WRITE事务输出的字符追加到当前字符串的末尾。To String的最后事务一直终结当前字符串，而不管该事务的EOL设置如何。

在大多数情况下，To String使用的正确事务类型是WRITE TEXT。TEXT之外的编码详情请参阅WRITE 事务, READ事务。

From String可以读取Text标量或数组，具体视READ TEXT事务的配置而定。READ TEXT在遇到EOL时会终止读取，或者会消耗EOL，继续读取。这取决于格式。格式详情请参阅WRITE 事务, READ事务。

备注

READ和WRITE兼容能力

一般来说，必须知道怎样写入数据，以便正确读取。这特别适合有问题的数据是某种二进制格式、不能直接检查确定其格式的情况。必须使用与写入相同的格式读取数据。


使用基于事务的对象

本节提供使用基于事务的对象的指导准则，包括执行规则和Object配置。

执行规则

事务I/O对象遵守VEE 程序的所有通用规则。另外，事务本身也有一些自己的规则：

• 事务在执行时从最上面的事务开始，顺序向下进行。

• 列表中的每个事务要完全执行之后，才能开始下一个事务。某个对象中的多个事务不能以重叠方式执行。同样，一次只有一个事务对象能够存取某个来源或目的地。

• 存取同一个来源或目的地的基于事务的 I/O 对象可能存在于不同的线程中，也可能存在于同一程序的同一线程中。

对文件相关对象，每个文件只有一个读取指针和一个写入指针。存取某个文件的所有对象共享相同的指针。

对象配置

在大多数情况下，任何事务的结果事实上取决于两个因素：

• 事务中的规范

• 对象菜单中通过Properties存取的设置

在大多数情况下，您不需要考虑Properties设置，因为通常可以使用默认值。

写入数据的基于事务的 I/O对象（Direct I/O除外）在Properties对话框中新增了一栏，允许编辑数据格式。得到的对话框允许查看和编辑各种设置。

备注

Direct I/O 对象在对象菜单中包括一个Show Config功能，允许查看（但不能编辑）配置设置。为编辑Direct I/O对象的配置，必须使用I/O Manager。

如下图所示，双击事务I/O 对象的标题栏，出现下面的Properties Window窗口。

Properties Window窗口中有一个Data Format栏，包含着影响WRITE事务写入特定数据的方式的设置。 End Of Line (EOL)影响着设置EOL ON的任何WRITE。其余Data Format字段只影响WRITE TEXT 事务。

下一节详细解释了Data Format一栏中的字段。

End Of Line (EOL)字段

End Of Line (EOL)字段指定使用EOL ON的WRITE 事务最后发送的字符。这个字段的项目必须是带有双引号的0个或多个的字符。“双引号”表示ASCII 34十进制值。VEE识别End Of Line(EOL)内的任何ASCII 字符，包括 换码符表 中所示的换码符。

Array Separator字段

Array Separator字段指定用来分隔WRITE TEXT事务写入的一个数组中各个要素的字符串。这个字段的项目必须使用双引号。“双引号”表示ASCII 34十进制值。VEE把任何ASCII 字符识别为Array Separator，并识别 换码符表 中所示的换码符。

在Direct I/O 对象中写入数组的WRITE TEXT STR事务是一个特例。在本例中，Array Separator字段中的值被忽略，换行符(ASCII 10 十进制值)用来分隔数组中的要素。这一行为是与大多数仪器的需求相一致。

Multi-Field Format字段

Multi-Field Format字段指定WRITE TEXT 事务多字段数据类型的格式化样式。在VEE中，多字段数据类型是Coord, Complex, PComplex和Spectrum 。这一设置不影响其他数据类型和其他格式。

圆括号内每个多字段项目指定(...)Syntax的多字段格式。指定Data Only数据会省略圆括号，但保留分隔逗号。例如，复数2+2j可以使用(...) Syntax写为(2,2)，或使用Dtaa Only语法写为2,2。

VEE 支持多字段数据类型的数组。例如，您可以创建一个Complex数据组成的数组。在这种情况下，如果Multi-Field Format设为(...) Syntax，那么数组将写为：

(1,1)array_sep(2,2)array_sep ...

其中array_sep是Array Separator字段中指定的字符。

Array Format字段

Array Format字段确定写入多维数组的方式。例如，数学家对矩阵的写法如下：

1 2 3

4 5 6

7 8 9

VEE 用两种方式之一写入同样的矩阵，具体取决于Array Format的设置。在下面这两个范例中，End Of Line (EOL) 设为"\n" (换行)，Array Separator设为" " (空格)。

1 2 3 码 组数组格式

4 5 6

7 8 9

1 2 3 4 5 6 7 8 9 线性数组格式

不管是哪种数组格式，都使用Array Separator字符分隔数组中的每个要素。码组数组格式增加了一步，使用End Of Line (EOL)字符分隔数组中的每一行。

在一般情况下（数组大于二维），每次在最右面的下标之外的下标变化时，码组数组格式会输出一个End Of Line (EOL)字符：

例如，如果在这一事务中使用Block数组格式写入三维数组A[x,y,z] ：

WRITE TEXT A

每次在x或y值变化时，会输出一个End Of Line (EOL)字符。

如果A中每个维度的大小是2，按下述顺序写入要素：

A[0,0,0] A[0,0,1]<EOL 字符>

A[0,1,0] A[0,1,1]<EOL 字符>

<EOL 字符>

A[1,0,0] A[1,0,1]<EOL 字符>

A[1,1,0] A[1,1,1]<EOL 字符>

在写入A[0,1,1]之后，x 和 y 同时变化，因此同时写入两个<EOL 字符>。


与文件通信

本节提供了与文件通信有关的指导准则，包括使用文件指针和导入数据。

使用文件指针

VEE每个文件保持一个读取指针和一个写入指针，而不管有多少个对象存取文件。读取指针指明要读取的下一个数字项目的位置。类似的，写入指针指明应该在哪里写入下一个项目。下表显示了对象和源/目的文件。

源或目的 | 对象
数据文件 | To File, From File
标准输入 | From StdIn
标准输出 | To StdOut
标准错误 | To StdErr

这些指针的位置受到下述因素影响：

• READ, WRITE或EXECUTE操作

• 在打开的To File视图中，PreRun & Open设置下的Clear File

存取同一文件的所有对象都拥有相同的读取指针和写入指针，即使对象处于不同线程或不同上下文中。

在满足下述条件之一时，将打开一个文件，以进行读取和写入。

• 存取某个文件的第一个对象在PreRun后第一次运行。这是最常见的情况。

• 新的数据到达可选的指明文件名称的控制输入端。这种情况发生的比较少。

读取指针

在From File打开一个文件时，读取指针位于文件的开头。后续的READ操作根据要求推进文件指针，以满足READ。可以在任何时候使用From File对象中的EXECUTE REWIND操作，强制读取指针到达文件开头。这一操作不影响文件中的数据。

写入指针

写入指针的初始位置取决于打开的To File视图中PreRun & Open设置下的Clear File。如果在PreRun & Open下启用Clear File，那么将擦除文件内容，在打开文件时，写入指针位于文件的开头。否则，写入指针位于文件的末尾，并追加数据。

可以在任何时候使用From File对象中的EXECUTE REWIND操作，强制读取指针到达文件开头。REWIND会保留文件中已有的任何数据。但是，从新位置开始，新数据将覆盖旧数据。CLEAR会擦除文件中已有的数据。

备注

To DataSet 和 From DataSet对象也与To File 和 From File对象每个文件共享一个读取指针和一个写入指针。但是，建议不要在同一个文件上混合进行To DataSet 和 From DataSet 运算及To File 和 From File 运算。

关闭文件

VEE保证在最后操作执行完成及所有输出端已经激活时，To File写入的任何数据都将写入操作系统。

VEE在PostRun时自动关闭所有文件。在所有活动线程执行完成时，会发生PostRun。

通过同时在To File和From File中使用EXECUTE CLOSE操作，可以以程控方式关闭文件。这提供了一种手段，可以连续读取或写入另一个程序可能已经创建的文件。

还可以使用EXECUTE DELETE操作，以程控方式删除文件，这适合删除临时文件。

下面是采用EXECUTE CLOSE的实例。这个程序保存在范例目录下的 manual48.vee 文件中。

Execute Program执行一条外壳命令(date)，创建并把日期和时间写入一个文件中(\tmp\dateFile)。在同一线程内部，From File使用READ TEXT x STR操作从文件中读取数据。EXECUTE CLOSE操作必不可少，因为For Count多次执行子线程。

成功执行Execute Program将覆盖文件。但是，由于From File只打开文件一次，因此在第二次执行From File时，读取指针将过时。它不再指向文件，因为Execute Program已经重新建立了文件。程序将发生错误。

在读取文件后，From File必须使用EXECUTE CLOSE操作关闭文件。EXECUTE CLOSE操作在每次执行时强制From File重新打开文件。

在本例中，可以使用NOP显示错误，"注释" EXECUTE CLOSE操作。错误将指明到了文件末尾或没有找到数据。删除NOP后，程序会正常运行。

EOF 数据输出

From File支持独特的数据输出端，称为EOF (end-of-file)。在用户试图读取的位置超出文件末尾时，会激活这个端。在用户希望读取未知长度的文件时，可以使用EOF端。

read-to-end特性 还为读取未知长度的文件提供了一种手段。但是，文件内容将放在一个VEE容器中。如果要读取一个文件，一次读取一个要素，且每个要素都装在自己的容器中，那么可以使用EOF端。

下一个实例说明了EOF的典型用途。读取的文件包含未知长度的X-Y数据列表。典型的文件内容是：

1.0

5.5

2.1

8

.

.

.

导入数据

由于VEE为分析和显示数据提供了一个方便的环境，因此用户可能想从其它程序把数据导入VEE中。从另一个应用软件中导入数据的一般程序是：

1 把数据保存在文本文件中(ASCII文件)。

2 使用文本编辑器检查数据文件，确定数据格式。

3 使用From File对象及READ TEXT操作，读取数据文件。

导入 X-Y 值

一个十分常见的问题是读取包含未知数量的X和Y值的文本文件，并绘制图表。下面的程序解决了这个问题。

上面的程序保存在范例目录下的 manual29.vee文件中。

READ TEXT REAL64操作简便地处理Y值使用的所有不同符号，包括标记、小数点和指数。部分数据文件如下：

.

.

.

8 8.555555

9 9e0

10 1.05e+01

11 +11.

12 12.5

13 1.3E1

导入波形

其它应用软件有许多不同的惯例，把波形保存为文本文件。一般来说，文件由描述波形属性的许多单独值及一维Y值数组组成。本节介绍了怎样导入使用其中一个惯例保存的波形。

• 固定格式的文件标题。波形属性列在文件开头的固定位置，后面跟着一个一维Y值数组。

• 可变格式文件标题。在文件开头列明可变数量的属性，后面跟着一个一维Y值数组。其位置用专门的文本令牌标出。

固定格式的标题

固定标题的部分数据文件如下：

NAME Noise1

START_TIME 0.0

STOP_TIME 1.0E-03

SAMPLES 32

DATA

.243545

.2345776

.

.

.

由于这是固定格式的标题，因此NAME和SAMPLES等标记不相关。波形属性一直出现及位于相同的位置。下面的实例说明了读取上述波形数据文件的程序。

上面的程序保存在范例目录下的 manual30 .vee文件中。

From File中的操作完成了这里列出的大多数工作。下面介绍了每种操作的工作方式：

1 第一个操作剥离NAME标记。必须先完成这一操作，然后才能读取波形名称中的字符串，或作为单个字符串一起读取NAME和Noise1。

2 第二个操作读取波形的字符串名称。

3 第三个到第五个操作读取指定的数字数量。VEE读取并忽略文件中构建数字不需要的任何前面“多余”字符。

4 第六个操作使用上一个操作确定的ARRAY SIZE，读取一维Y值数组。Samples必须作为这一操作中使用的输出端出现。

可变格式标题

下面列明了采用可变格式标题的部分数据文件：

First Line Of File

<MARKER1> 1 2 3

<MARKER2> A B C

<DATA>

1 1.1

2 2.2

3 2.9

.

.

.

在这种情况下，文件中的确切内容和数据位置是未知的。与这一文件有关的唯一已知的情况是XY值列表遵守特殊文本标记<DATA>。

为简化这一实例，这一程序只查找与<DATA>有关的数据。在您自己的应用中，您可能需要搜索多个标记。

这一程序保存在范例目录下的 manual31.vee 文件中。

From File #1一次读取一个令牌(用白空格分隔的字)，搜索<DATA>。一旦找到<DATA>，那么From File将读取XY对，直到到达文件末尾。

另请参阅

实验5-3: 使用To/From File对象


与程序通信

本节提供了与程序进行通信的指导准则，包括：

• 使用Execute Program

• 使用Dynamic Data Exchange (DDE)

下表显示了程序和相关对象。

程序 | 对象
MS-DOS 命令 | Execute Program
Windows程序¨ | Execute Program To/From DDE
C程序 | Execute Program Import Library Call Function Formula

¨ VEE支持ActiveX自动化，允许控制其它Windows程序。如需与使用这一功能有关的信息，请参阅Help [image] Content和Index [image] Tell me about [image] Active X。

使用Execute Program

可以使用Execute Program对象，执行从操作系统命令行中正常完成的任务。下面是Execute Program对象的实例。

可以使用Execute Program，运行任何可执行文件，包括：

• 汇编的C程序

• 任何MS-DOS程序 (*.EXE或*.COM文件)

• .BAT文件

• MS-DOS系统命令，如dir

Execute Program 字段

下面几节介绍了在打开的Execute Program视图中可以看到的字段。

Run Style

如果希望执行的程序在窗口中运行，那么Run Style会指明窗口样式：

• 在标准窗口中正常运行程序

• 在最小化为图标的窗口中最小化运行程序

• 在放大到最大尺寸的窗口中最大化运行程序

Wait for Prog Exit

Wait for prog exit确定VEE什么时候结束Execute Program对象操作及激活任何数据输出。如果Wait for prog exit设为Yes，VEE将：

1 执行Execute Program对象中指定的命令。

2 等到流程结束，然后激活Execute Program对象的任何输出端。

如果Wait for prog exit设为No，VEE将：

1 执行Execute Program对象中指定的命令。

2 激活Execute Program对象上的任何数据输出端。

在Wait for prog exit设为No时，Execute Program执行速度更快，其它方面相同。

Prog With Params

Prog with params 指定下面其中一项：

1 可执行文件和命令行参数的名称。

2 发送到MS-DOS进行解释的命令。

如果在AUTOEXEC.BAT文件的PATH变量中包括相应的路径，那么您不必在Prog with params字段中包括路径。在Prog with params字段中一般会输入的内容实例：

为执行MS-DOS 命令：

COMMAND.COM /C DIR *.DAT

为运行汇编后的C程序：

MyProg -optionA -optionB

为在浏览器中打开URL：

http://www.agilent.com/find/vee

为打开文件：

D:\path\word.doc

工作目录

工作目录是指您想执行的程序可以找到所需文件的目录。例如，如果您想在c:\progs\cprog1目录下使用makefile运行程序nmake：

1 在Prog with params:中输入nmake。

2 在Working directory:中输入c:\progs\cprog1。

使用Dynamic Data Exchange (DDE)

备注

DDE是一种过时的(但仍然支持的)功能。VEE for Windows支持ActiveX自动化，允许控制其它Windows程序。如需与使用这一功能有关的信息，请参阅Help [image] Content and Index [image] Tell me about [image] Active X。安捷伦强烈推荐采用ActiveX自动化，而不是DDE。

Dynamic Data Exchange (DDE)定义了Windows程序之间通信使用的基于消息的协议。这一通信发生在DDE客户端和DDE服务器之间。DDE客户端请求与DDE服务器通话。然后客户端从服务器程序请求数据和服务。服务器作出响应，发送数据或执行规程。

支持DDE的Windows程序可以作为客户端、服务器或两者。VEE只提供了客户端功能。它使用To/From DDE对象实现DDE功能。

To/From DDE对象采用4种处理：

READ(REQUEST) -- 从DDE传送中读取数据。

WRITE(POKE) -- 把 (pokes) 数据写入DDE传送。

EXECUTE -- 把命令发送到与VEE通信的DDE服务器。然后服务器执行命令。

WAIT -- 等待指定数量的时间 (单位：秒)。

To/From DDE对象作为功能的一部分发起和终止DDE操作。您不必明确执行发起功能和终止功能。

如下所示，To/From DDE对象有三个主要字段：Application, Topic和Timeout。

在Application字段中，输入希望与之通信的Windows程序的DDE程序名称。一般来说，这是EXE类型的文件名称。对每个具体程序，参阅手册，确定其DDE程序名称。

Topic字段包含数据型程序的特定识别符。例如，字处理程序的标题将作为文件名称。

Timeout字段允许指定在程序没有应答时VEE等待的超时周期。默认值是5秒。

最后一个字段包含与其它程序通信的处理。对READ(REQUEST)和WRITE(POKE)处理，还必须在处理中填写Item名称。Item名称是每个数据的专用识别符。例如，电子表格数据项目可以是单元格位置，字处理程序数据项目可以是书签名称。

下面的To/From DDE对象与MS Windows Program Manager通信，创建一个程序组，在程序组中增加一个项目，显示5秒时间，然后删除程序组。

如果服务器DDE程序目前没有运行，VEE会试图启动该程序。只有程序的可执行文件名称与程序字段中的名称相同时，这一操作才会成功。还必须在PATH中定义可执行文件的目录。VEE将试着在Timeout字面中输入的时间量内启动程序。

如果可执行文件的目录没有位于PATH内，那么在To/From DDE对象前使用Execute Program对象，运行应用程序，如下：

下一个实例说明了通过To/From DDE对象使用输入和输出端。

DDE 实例

下面提供了与各种Windows应用软件通信的部分实例。在每个实例中阅读写字板，可以获得与实例有关的重要信息。

Lotus 123 DDE实例：

Excel DDE实例：

Reflections DDE实例：

Word for Windows DDE实例：

WordPerfect DDE实例：


在 Direct I/O 和 InterfaceOperations中使用事务

三个VEE对象允许使用I/O事务与仪器通信：

• Direct I/O 对象允许通过GPIB、VXI、串行和GPIO接口及通过LAN连接与仪器传送数据。

• MultiInstrument Direct I/O对象允许从一个对象到多部仪器执行直接I/O事务。

• Interface Operations对象允许发送低级GPIB或VXI消息、命令和数据。

对于任何对象来说，消息都通过I/O事务方式“构建”和发送。

备注

只有在I-SCPI驱程支持时，才能把基于寄存器的VXI设备作为基于消息的设备使用。

在使用Direct I/O、MultiInstrument Direct I/O和 Interface Operations对象之前，必须正确配置VEE，以与仪器通信。详情请参阅Instrument Manager。


使用 Direct I/O 对象

Direct I/O对象允许使用仪器的内置命令直接控制仪器，而不需要VEE仪器驱程 (ID)或VXIplug&play驱程来使用Direct I/O控制仪器。

发送命令

使用WRITE处理，把命令发送到采用Direct I/O的仪器上。把命令发送到GPIB, 基于消息的VXI仪器、I-SCPI支持的基于寄存器的VXI 仪器及串行仪器的最重要的WRITE处理是：

• WRITE TEXT

• WRITE BINBLOCK

• WRITE STATE

Direct I/O只使用WRITE BINARY和WRITE IOCONTROL处理，把命令发送到GPIO仪器。

Direct I/O使用WRITE REGISTER和WRITE MEMORY处理，把命令发送到基于寄存器的VXI仪器和部分基于消息的VXI仪器。这些处理是与I-SCPI驱程不支持的基于寄存器的VXI仪器通信的唯一方法。

WRITE TEXT 处理

在要求Direct I/O的绝大部分情况下，您只需WRITE TEXT处理就可以设置仪器。大多数GPIB仪器、基于消息的VXI仪器和串行仪器采用人可读的文本字符串进行命令编程。可以使用WRITE TEXT处理，把这些命令简便地发送到仪器中。

例如，满足IEEE 488.2规范的所有仪器都把*RST识别为一条复位命令。用来复位此类仪器的处理是：

WRITE TEXT "*RST" EOL

仪器通常会在语法中定义非常精确的"标点"。它们可能需要在每条命令后或在一组命令结尾发送特定的字符。此外，GPIB仪器以不同的方式使用信号线End-Or-Identify (EOI)。

如果在这方面怀疑有问题，在Advanced Instrument Properties对话框中，检查Direct I/O一栏中的END(EOI)on EOL和EOL Sequence字段。参阅Advanced Instrument Properties 对话框: Direct I/O栏 。参阅仪器编程手册，为仪器确定正确的命令语法。

· Direct I/O允许在仪器要求时使用TEXT之外的WRITE编码。最常用的TEXT之外的编码是BINBLOCK和STATE。

WRITE BINBLOCK 处理

BINBLOCK编码使用IEEE定义的码组格式把数据写入仪器中。这些码组格式一般用来传送大量的相关数据，如来自示波器和频谱分析仪的轨迹数据。在接受BINBLOCK数据前，仪器通常要求大量的命令。详情请参阅仪器编程手册。

为使用BINBLOCK处理，必须在Advanced Instrument Properties对话框的Direct I/O一栏中正确配置Conformance字段 (及可能配置BINBLOCK)。参阅Advanced Instrument Properties 对话框: Direct I/O栏 。

WRITE STATE 处理

某些GPIB仪器和基于消息的VXI仪器支持学习字符串功能，允许上传所有仪器设置。然后可以使用WRITE STATE处理下载学习字符串，调用仪器的测量状态。在希望下载测量状态，但没有仪器驱程时，特别适合使用学习字符串。

备注

WRITE STATE处理只适用于 GPIB仪器和基于消息的VXI仪器。

使用学习字符串的典型程序如下：

1 把仪器配置成希望的测量状态。这一般使用仪器前面板完成。

2 在为仪器配置的Direct I/O对象的对象菜单中，点击Upload State。仪器状态现在与Direct I/O对象的这一特定实例相关。

3 在Direct I/O对象中添加WRITE STATE处理：

· 在使用时，WRITE STATE一般是Direct I/O对象中的第一个处理。WRITE STATE把上传的学习字符串写入仪器中，同时设置所有仪器函数。后续的WRITE处理可以以递增方式修改仪器设置。

在GPIB仪器和基于消息的VXI仪器中，Upload和WRITE STATE的行为受到Direct I/O一栏中Conformance和State (Learn String)设置的影响。

如果Conformance是IEEE 488.2，VEE使用IEEE 488.2 *LRN?定义自动处理学习字符串。如果Conformance是IEEE 488，Upload String指明查询状态使用的命令，Download String指明下载时字符串前面的命令。

基于消息的VXI仪器和I-SCPI支持的基于寄存器的VXI仪器满足IEEE 488.2规范。

点击Direct I/O对象菜单中的Upload State，结果有三个：

• 立即上传学习字符串。

• 只要存在，学习字符串保留在该特定的Direct I/O对象，直到下一次Upload。学习字符串与程序一起保存。

• 如果复制Direct I/O对象，复制中会包括相关学习字符串。

学习字符串范例

例如，假设您想使用学习字符串对HP 54100A数字示波器编程。示波器的主要情况如下：

• 示波器满足IEEE 488规范，不满足IEEE 488.2规范。

• 用来查询示波器学习字符串的命令是SETUP?。

• SETUP命令必须位于下载到仪器上的学习字符串的前面。在SETUP的P和下载的学习字符串第一个字符之间要有一个空格。

必须使用Instrument Manager为示波器指定正确的直接I/O配置。下图显示了学习字符串的设置。

为从示波器上传学习字符串，在控制示波器的Direct I/O对象的对象菜单中，点击Upload。为下载学习字符串，使用下面的处理：

WRITE STATE

读取数据

为从使用Direct I/O的仪器中读取数据，可以使用READ处理。

备注

仪器返回各种格式的数据。一般来说，必须知道希望VEE从仪器中读取的数据类型及数据数量。仪器类型决定着在处理中必须指定的编码和格式。读取的数据数量决定着在处理对话框的SCALAR或ARRAY字段中必须使用的配置。

在GPIB仪器、基于消息的VXI仪器和串行仪器中，Direct I/O使用的最重要的READ处理是：

• READ TEXT

• READ BINBLOCK

Direct I/O只使用READ BINARY和READ IOSTATUS处理从GPIO仪器中读取数据。

Direct I/O使用READ REGISTER和READ MEMORY处理从基于寄存器的VXI仪器和某些基于消息的VXI仪器中读取数据。这些处理是与I-SCPI不支持的基于寄存器的VXI仪器通信的唯一方法。

备注

如果从仪器中读取数据有困难，试着使用Bus I/O Monitor检查数据格式。

READ TEXT 处理

因查询而从仪器中读取的数据通常是一个数字值，其格式为文本格式。例如，电压表以指数形式的单个数字返回每个读数，如-1.234E+00。从电压表中读取值的处理是：

"READ TEXT a REAL"

某些仪器对查询应答字母信息及数字测量数据。一般来说，这不是什么问题，因为READ TEXT REAL处理会丢掉前面的字母字符，提取数字值。

备注

在从仪器中读取数字数据时，在必要时会根据仪器I/O数据类型转换中列出的规则，自动转换仪器数据的数据类型。


使用MultiInstrument Direct I/O 对象

MultiInstrument Direct I/O 对象 (I/O [image] Advanced I/O [image] MultiInstrument Direct I/O) 允许使用直接I/O 处理从一个对象中控制多部仪器。这个对象是标准的处理对象，可以用于VEE支持的所有接口。

其外观与Direct I/O 对象相同，但每次MultiInstrument Direct I/O中的每个处理会寻址单独的仪器。由于MultiInstrument Direct I/O 对象不一定象Direct I/O 对象那样控制某部仪器，因此其标题没有列出仪器名称、地址或是实地模式条件。

通过使用 MultiInstrument Direct I/O，可以减少程序中仪器专用的Direct I/O 对象数量，以优化图标-图标的解释时间。这种性能提高对VXI接口尤为重要，VXI接口的仪器控制速度要比GPIB快。

下图是MultiInstrument Direct I/O 对象及其配置成与四部仪器通信的I/O Transaction对话框。

Transaction对话框

I/O Transaction对话框与Direct I/O使用的对话框类似，但它额外增加了两个字段。共同的字段工作方式相同。下面几节介绍了两个新增的字段。

Instrument字段

Instrument字段包含当前配置的仪器名称。点击向下的箭头，会出现一个配置的仪器列表。可以为每个处理选择不同的仪器。

Address字段

Address字段指明Instrument字段中列明的设备地址。Address字段有两种格式：Default Address和Address:。

Default Address把VEE设置成使用仪器最初配置时输入的地址。Address:包括一个文本框，允许输入一个不同的地址。

您可以输入某个数字值、一个变量名称或一个表达式。这个项目必须求解为一个有效的地址。在仪器执行时，输入的Address:值将改变设备地址，其与地址控制端操作类似。下图显示了使用Address:的I/O Transaction对话框。

编辑处理

在您使用I/O Transaction对话框编辑处理时，只接受仪器类型允许的处理。例如，如果Instrument字段中显示的名称配置为通过VXI背板控制的VXI设备，那么您可以配置REGISTER或MEMORY 存取处理。

如果I/O Transaction对话框是为某类处理配置的，您可以改变Instrument字段名称，必须对不同仪器保持正确处理。如果处理不正确，I/O Transaction对话框中的项目将变成该仪器类型最后有效的处理。如果把Instrument字段名称变成非VXI仪器，对VXI设备的REGISTER存取处理将不正确。

对象菜单

MultiInstrument Direct I/O对象菜单与Direct I/O 对象类似。MultiInstrument Direct I/O菜单不包括Show Config…或Upload State菜单选项。这些菜单选项适用于特定的仪器配置。使用Direct I/O对象显示仪器配置，或上传物理仪器的设置。

在处理中没有为任何可能的设备提供实地模式指示符。为控制仪器的实地模式，点击I/O [image] Instrument Manager..., 然后编辑选择的工具配置。.


使用 Interface Operations 对象

Interface Operations对象 (I/O [image] Advanced I/O [image] Interface Operations)允许使用低级命令控制GPIB仪器、VXI仪器和串行仪器。Interface Operations支持提供这种低级控制的两种处理：EXECUTE和SEND。

EXECUTE处理

EXECUTE处理采用下面的形式：

EXECUTE Command

其中Command是 EXECUTE命令摘要 (Interface Operations)表中汇总的其中一条总线命令。尽管这个表中列出的命令名称与Direct I/O中的EXECUTE命令名称相同，但它们之间有一个重要区别。

• Direct I/O EXECUTE命令会确定一部仪器的地址来接收命令。

• Interface Operations EXECUTE命令可能会影响多部仪器。对GPIB，必须确定这些仪器的地址以收听信息。

EXECUTE命令摘要 (Interface Operations)：

命令 | 说明
ABORT | 通过确认IFC (Interface Clear)行，清除GPIB接口。为清除和复位VXI接口，使用CLEAR。
CLEAR | 通过发送DCL (Device Clear)，清除所有GPIB设备。对VXI，应复位接口，运行Resource Manager。
TRIGGER | 对GPIB，通过发送GET (Group Execute Trigger)，触发确定收听信息的所有设备。对VXI，触发TTL、ECL或外部触发器。
REMOTE | 对GPIB，确认REN (Remote Enable)行。VXI没有相对应的部分。
LOCAL | 对GPIB，释放REN (Remote Enable)行。VXI没有相对应的部分。
LOCAL LOCKOUT | 对GPIB，发送LLO (Local Lockout)消息。在发送LLO时远程模式下的任何设备都将锁定前面板操作。VXI没有相对应的部分。
LOCK INTERFACE | 在共享资源的多流程系统中，在关键段中让一个流程锁定资源供自己使用，防止另一个流程试图使用这些资源。
UNLOCK INTERFACE | 在一个流程已经锁定共享资源供自己使用的多流程系统中，解锁资源，允许其它流程存取资源。
PASS CONTROL | 把控制传送到指定地址的GPIB设备，只要设备能够成为活动主控方。VXI没有相对应的部分。

SEND处理

SEND处理采用下面的形式：

SEND BusCmd

其中BusCmd是 SEND总线命令表中列出的其中一条总线命令。IEEE 488.1中详细定义了这些消息。BusCmd仅用于GPIB，VXI没有相对应的部分。

SEND总线命令：

命令 | 说明
COMMAND | 把ATN设为真，发送指定的数据字节。ATN为真表明数据代表总线命令。
DATA | 把ATN设为假，发送指定的数据字节。ATN为假表明数据代表设备相关信息。
TALK | 在指定一级总线地址(0-30)上寻址发话的设备。
LISTEN | 在指定一级总线地址(0-30)上寻址收听的设备。
SECONDARY | 指定一个二级总线地址，后面跟着TALK或LISTEN命令。卡槽类仪器一般使用二级地址，其中卡槽采用一级地址，每个插入模块采用二级地址。
UNLISTEN | 强制所有设备停止接听；发送UNL。
UNTALK | 强制所有设备停止发话；发送UNT。
MY LISTEN ADDR | 寻址接听的运行VEE的计算机；发送MLA。
MY TALK ADDR | 寻址发话的运行VEE的计算机；发送MTA。
MESSAGE | 发送多行总线信息。详情请查询IEEE 488.1。VEE支持的多行信息是： DCL Device Clear SDC Selected Device Clear GET Group Execute Trigger GTL Go To Local LLO Local Lockout SPE Serial Poll Enable SPD Serial Poll Disable TCT Take Control


I/O配置技术

这节提供了使用VEE配置仪器的信息。

I/O配置文件

每个程序的I/O配置可以嵌入程序文件中(建议)，也可以存储为单独的文件。如果存储为单独的文件，那么它是VEE.IO文件，这个文件存储在下面的路径中：

%userprofile%\Local Settings\Application Data\Agilent\VEE Pro 8.0

在不包含嵌入式配置的新程序中配置仪器时，新设置将保存在存储器中，用于其余工作会话和VEE.IO或.veeio文件。

在与程序一起保存I/O配置时，会禁用Instrument Manager中的Save按钮。为保存配置，可以点击OK，保存程序。这会与程序一起保存更新后的配置。

不能打开包含仪器控制对象的任何程序，除非I/O配置中包含一台带有匹配Name的设备。在本讨论中，Name是指Instrument Properties对话框Name字段中输入的内容，而不是对象标题栏中的文本。

如果对象是Panel Driver或Component Driver，那么ID Filename必须与配置相匹配。Name和ID Filename以外的设置不影响打开这些程序的能力，但其它设备可能会影响程序的运行方式。

改变配置文件

一般来说，VEE负责处理VEE.IO文件。但是，有时您可能想在VEE环境外擦除、更新或复制这个文件。

如果想运行别人开发的仪器控制程序，但程序中没有嵌入I/O配置，那么您需要该程序使用的I/O配置。有三种方式获得I/O配置：

1 可以使用Instrument Manager和配置对话框，把所有仪器手动添加到配置中。

2 可以使用这一段开头给出的路径，把该程序的VEE.IO文件复制到Agilent目录下。

如果使用文件复制方式，那么在以后需要时，把原始VEE.IO文件拷贝复制到另一个名称(如VEEIO.OLD)。

3 可以使用嵌入式配置保存程序。使用Save As选项，确认复选"Save I/O configuration with program"选项。

备注

范例程序与嵌入式I/O配置一起保存，因此I/O配置是自含式的。它们不依赖外部I/O配置文件。

程序I/O配置

可以以程序化方式修改仪器配置。首选的I/O配置编程方式是使用Function and Object Browser中的程序仪器配置。出现浏览器窗口，在Type窗口中选择Instruments。选择Instruments会激活窗口底部的Create Set Formula按钮。

点击Create Set Formula，出现Formula Object对话框。

以前版本的VEE允许通过控制端进行程序配置。这些端已经被淘汰，但对GPIB和串口的传统SICL式接口，仍支持这些端。控制端可以用于Panel Driver、Component Driver和Direct I/O仪器控制对象，允许为设备地址和超时输出其它值。设置超时值的控制端还可以用于Interface Operations、Instrument Event和Interface Event对象。

在把新的超时或地址发送到其中一个控制端时，会在全局范围内为该设备改变新值。这意味着与特定设备通信的所有仪器控制对象都开始使用新的超时或地址值。新值可以不同于Instrument Properties对话框输入的、放在VEE配置文件中的值。但是，这个新值永远不会写入VEE配置文件。

下面的范例说明了带有一个Address控制端的Direct I/O对象。HP E1413B在开始时配置给地址16032，如标题栏所示。到控制端的输入是16040 (新地址)。在把新地址发送到控制端时，与HP E1413B通信的任何其它对象都使用16040。

LAN网关

VEE可以访问LAN网关，控制仪器。LAN网关是一个控制器，允许从远程流程上访问其VXI、GPIB、GPIO和Serial接口及这些接口上的仪器。

客户端-服务器模式最好地表示了其排列方式。在访问远程计算机上的LAN网关(服务器)时，VEE流程作为客户端使用。服务器有一个约定流程，称为守护程序，它是服务器上运行的SICL流程的一部分。守护程序与VEE客户端通信，允许访问其接口及其设备。

客户端流程调用SICL，以控制SICL支持的接口上的设备。这些接口通过在运行SICL流程的LAN网关上配置。通过使用LAN网关，这些接口可以位于远程计算机上。

对客户端来说，接口及其设备以物理方式连接到远程计算机这一事实是透明的。

配置

为使用LAN网关，必须配置VEE和LAN硬件。

VEE配置：在设备配置期间为网关访问配置VEE，如Properties对话框细节所述。下面显示了Instrument Properties对话框。Gateway字段显示了默认设置This host：

通过点击Gateway字段，可以选择网关名称。出现一个列表框，显示以前配置的所有网关。这个主机一直指向运行VEE的计算机。

如果网关没有其它选项，那么可以输入一个网关名称。名称必须能够使用符号主机表或名称服务器解析成一个IP地址。也可以输入句点格式的IP地址，如55.55.55.555。

除选择网关外，其它配置流程相同。Panel Driver和Direct I/O对象配置如下。下面显示了为远程计算机上的接口和设备配置的各种I/O设备。

LAN硬件配置：SICL LAN网关支持要视运行VEE的机器配置、运行网关守护程序的机器及LAN的整体配置而定。在配置LAN时请咨询系统管理员，确保可以解析名称和IP地址。

对运行网关守护程序的机器，假设守护程序安装流程将正确配置本地联网文件。如果您正在使用E5810A LAN/GPIB Gateway，那么它是自含式文件，已经完成了所有内部配置。

执行行为

在理想情况下，通过网关的I/O操作就象接口和设备直接连接到客户端计算机上一样工作。但是，响应时间可能会变化，具体视LAN配置而定，包括连接的主机数量、LAN到LAN网关及当前负荷。有时，电缆断开或LAN上的计算机故障会终止连接。在配置超时周期时，必须要适应这些事件。

在服务器收到客户端应用发来的I/O请求时，VEE、也就是服务器会使用在Instrument Properties对话框中输入的超时值。这称为SICL超时。如果服务器操作在指定时间内没有完成，服务器会向客户端发送一个回复，表明发生超时，然后会发生普通VEE超时错误。

在客户端向服务器发送一个I/O请求时，客户端启动一个定时器，等待服务器应答。如果服务器没有及时应答，那么会发生超时，产生VEE超时错误。这称为LAN超时。

客户端超时与服务器超时不同，因为服务器的I/O事务时间通常不同于LAN上的传输时间。服务器可能会在五秒内(VEE默认超时周期)完成I/O事务，但通过LAN传回客户端的实际时间可能要比五秒钟长。

这两个超时采用不同的值，可以使用SICL配置文件中的两个项目调节这两个值：

sicl_infinity | 如果Advanced Instrument Properties对话框中输入的用户自定义超时(SICL超时)是无穷大(0)，那么服务器使用这个项目。服务器不允许使用无穷大的超时周期。这个值指定事务在服务器内部等待结束的秒数。
lan_timeout_delta | 这个值加上服务器的超时值，确定客户端的超时周期(LAN超时)。计算得出的LAN超时只会提高必要的程度，以满足I/O设备需求，而永远不会下降。这可以避免每次在SICL超时变化时重新调节LAN超时的开销。

保护关键段

在多流程测试系统中，在流程之间共享资源要求一种锁定机制，保护关键段。在其中一个流程需要独有地访问共享仪器资源时，需要一个关键段。

为防止另一个流程在关键段期间访问仪器，第一个流程会锁定仪器。在完成任务所需的时间内，锁定会一直有效。在此期间，第二个流程不能与仪器执行任何交互，包括试图锁定仪器供自己使用。

下面的EXECUTE 事务允许保护关键段，可以用于Direct I/O, MultiInstrument Direct I/O和Interface Operations事务对象中。事务语法视使用的接口和事务对象变化。对GPIB、Serial和GPIO，将锁定整个接口。对VXI，锁定各台设备。

为通过在Direct I/O对象中直接访问背板来锁定VXI，使用事务：

   EXECUTE LOCK DEVICE

EXECUTE UNLOCK DEVICE

在MultiInstrument Direct I/O对象中，使用事务：

   EXECUTE vxiScope LOCK DEVICE

EXECUTE vxiScope UNLOCK DEVICE

其中vxiScope是VXI示波器的配置名称，如HP E1428B。

为在Interface Operations对象中锁定GPIB, Serial和GPIO接口，使用事务：

   EXECUTE LOCK INTERFACE

EXECUTE UNLOCK INTERFACE

支持的平台(EXECUTE LOCK/UNLOCK)

平台 | 执行的I/O接口
Windows 2000, Windows XP | USB, TCP/IP, VXI (带有或嵌入VXLink的PC)a

a 不能锁定VXI设备的寄存器和存储器访问(READ/WRITE REGISTER/MEMORY 事务)。如果存储器使用另一个流程中的前一个锁定映射到VEE流程空间中，那么只能锁定试图直接访问存储器的第一个事务执行。之后，没有任何方式防止多个流程同时访问一个存储位置，因为这是共享存储器。

执行行为

在执行某个版本的EXECUTE LOCK事务时，它试图获得设备或接口锁定。如果预先不存在属于另一个流程的锁定，那么事务会全面执行，成功获得锁定。如果存在以前的锁定，那么事务会堵塞，堵塞时间是为设备或接口配置的当前超时周期。

如果另一个流程在超时周期内放弃锁定，那么事务结束，获得锁定。如果过了超时周期，那么会发生错误，出现一个错误消息框。事务对象上的错误端可以捕获这个错误。

在获得锁定后，来自Direct I/O、MultiInstrument Direct I/O、Panel Driver、Component Driver和Interface Operations对象的所有后续 I/O都会防止任何其它流程试图与该设备或接口通信。

在经过关键段后，可以执行相应版本的EXECUTE UNLOCK事务。

锁定只保护越过流程边界的关键段。通过顺序执行两个EXECUTE LOCK事务，一个流程可以创建嵌套锁定。只要另一个流程以前没有锁定，那么两个事务都将成功。

然后，流程必须执行两个EXECUTE UNLOCK事务。如果只执行一个EXECUTE UNLOCK事务，那么设备或接口会保持锁定。如果事务在以前没有锁定时试图解锁，那么会发生运行时错误。

只有在执行VEE程序时才存在锁定。在VEE程序执行完毕时，将从设备和接口中删除所有锁定。这可以防止在程序由于正常结束、运行时错误或按Stop按钮而停止执行，其不执行任何EXECUTE UNLOCK事务时仍锁定设备或接口。

范例: EXECUTE LOCK/UNLOCK事务 - VXI

下面的范例程序显示了MultiInstrument Direct I/O对象中的EXECUTE LOCK/UNLOCK DEVICE事务。可以使用Direct I/O对象，而不是MultiInstrument Direct I/O，但这会对每个设备使用一个对象，而不是对每组设备使用一个对象。For Count对象驱动一个线程，其试图在三台不同设备上获得锁定。在用户对象中完成I/O活动后，会执行一系列解锁。

每个事务会试图针对每个设备配置的超时周期分别获得锁定。如果三个事务中任何一个事务超时，那么会发生错误，错误端会捕获错误。如果在成功锁定后进行的操作产生超时错误，那么错误端会捕获错误。

在程序能够重新执行锁定事务前，必须解锁所有获得的锁定。正因如此，MultiInstrument Direct I/O对象连接到错误端。非常重要的一点是，这个对象试图以与第一个对象获得锁定相同的顺序解锁每台设备。

由于在锁定事务前执行解锁事务会产生错误，因此在解锁事务的对象中还添加了一个错误端。如果事务未能在第一个对象中获得锁定，那么后面对象的同一解锁事务会失败。


I/O 控制技术

本节介绍了部分其它仪器I/O控制技术。

轮询

VEE支持IEEE 488.1定义的所有串行轮询操作。所有GPIB仪器和所有VXI 基于消息的仪器都支持串行轮询操作。根据定义，VXI 基于消息的设备满足IEEE 488.2规范。如果提供I-SCPI驱程，VXI基于寄存器的设备满足IEEE 488.2规范。VEE不支持并行轮询操作。

可以通过两种方式获得仪器的串行轮询响应：

对象 | 串行轮询行为
Instrument Event | Instrument Event对象可以轮询指定仪器一次，输出一个标量整数，这是使用 NO WAIT选项的串行轮询响应。Instrument Event对象还使用用户提供的位掩码及ALL CLEAR和ANY SET选项，在串行轮询响应字节内部等待指定的码型。
Direct I/O | GPIB仪器的Direct I/O对象支持WAIT SPOLL处理。这个处理使用用户提供的位掩码和ALL CLEAR或ANY SET选项重复轮询仪器，直到串行轮询响应与某个码型相符。如需与Direct I/O有关的其它信息，请参阅 I/O处理。

在配置成Spoll时，Instrument Event对象具有专用执行属性，下一节" 服务请求 "中讨论了这一点。这一行为允许使用掩码值和ALL CLEAR或ANY SET选项，在等待某个码型时继续执行其它并发线程。

NO WAIT将立即执行，返回GPIB仪器或基于消息的VXI仪器的状态字节。这两个对象都从对象菜单(Add Terminal)中提供了一个Timeout控制输入，因此可以以程序化方式设置超时周期。下图显示了一个范例。

服务请求

为检测VXI仪器的服务请求(SRQ消息)，使用Instrument Event对象 (I/O [image] Advanced I/O [image] Instrument Event)。为检测GPIB仪器或RS-232的服务请求，使用Interface Event对象 (I/O [image] Advanced I/O [image] Interface Event)。

Instrument Event和Interface Event对象为中断类执行提供了专门行为。为查看这一行为，您可能希望在启用Debug [image] Show Execution Flow的情况下运行程序。

例如，Interface Event在程序中的行为如下：

1 在Interface Event对象 (为GPIB配置，并指定WAIT选项)运行前，执行会正常继续，每个线程以同等优先权共享执行。

2 在Interface Event对象运行时，附在Interface Event数据输出上的线程在Interface Event对象上会暂停执行。没有附在Interface Event上的其它线程会继续执行。

3 在指定接口上删除SRQ时，Interface Event的数据输出被激活。这时，将闭锁所有其它线程的执行，直到附在Interface Event数据输出上的线程执行完毕。

范例: 服务请求。下面的程序显示了处理服务请求的一种方式。在本例中，dvm 或 scope 可能会负责服务请求。这个程序保存在范例目录下的 manual16.vee 文件中。

备注

只有在指定仪器连接、配置并通电时，这个程序才会运行。但是，可以使用这个程序作为自己的程序中使用的编程技术范例，也可以修改程序，与自己的仪器通信。

这个程序使用Instrument Event获得每个仪器的状态字节，确定服务请求的发起人。每个状态字节使用If/Then/Else和bit(x,n)函数测试，确定第6位是否为真。如果设置了第6位，那么相应的仪器负责服务请求。

Until Break对象自动再次启用整个线程，以处理任何后续的服务请求。Instrument Event对象配置成NO WAIT，表示在不使用掩码值的情况下返回状态字节。如果使用的掩码值是64，Instrument Event对象配置成ANY SET，那么不需要使用If/Then/Else和bit(x,n)函数。

不同的仪器对清除和重新启用服务请求有不同的要求。在上面的程序中，dvm只要求一个串行轮询，就可以清除和再次启用其SRQ功能。但是，scope要求另外一步清除发起的事件寄存器。

可以使用Instrument Event对象，检测来自基于消息的VXI仪器的服务请求。把请求真事件(RT)写入VXI控制器的信号寄存器中的仪器收到一条Read STB字串行协议命令，这一请求求解为服务请求。

基于消息的仪器把其状态字节发回控制器，把请求假事件(RF)写入VXI控制器的信号寄存器。状态字节与提供的掩码值及ANY SET或ALL CLEAR选项一起使用，确定设置哪个位(除了第6位外)。因此，可以使用一个对象Instrument Event检测来自基于消息的VXI设备的服务请求，确定为什么会发生请求。

这两个对象都从对象菜单(Add Terminal)中提供了一个Timeout控制输入，因此可以以程序化方式设置一个超时周期。如需进一步信息，请参阅仪器事件和接口事件。

监测总线活动

可以使用Bus I/O Monitor对象 (I/O [image] Bus I/O Monitor)，记录在VEE与任何发话方和接听方之间传送的所有总线消息。Bus I/O Monitor只记录VEE入局或出局的总线消息。

可以使用Bus I/O Monitor监测支持的任何接口(GPIB, VXI, 串行或GPIO)。每个Bus I/O Monitor对象实例只监测一个硬件接口。

下面的程序显示了发送的在GPIB地址717上的仪器中写入*RST的总线消息。

Bus I/O Monitor的显示区域包含五列：

• 第1列 – 行号

• 第2列 – 总线命令 (*), 或出局数据 (>), 或入局数据 (<)

• 第3列 – 发送的字节的十六进制值

• 第4列 – 与发送的字节对应的7位ASCII字符

• 第5列 – 总线命令助记符(仅总线命令, 对数据为空白)

在作为图标执行时，Bus I/O Monitor的速度要远远快于作为打开的视图对象执行的速度。

低级总线控制

可以以下面两种方式发送低级消息。

如需与Interface Operations和Direct I/O有关的进一步信息，请参阅 在Direct I/O和Interface Operations中使用处理。

仪器下载

某些仪器允许下载宏命令、测量例程或整个测量程序。例如，某些HP仪器支持HP Instrument BASIC，可以编写在仪器内部执行的完整的HP Instrument BASIC 程序。使用VEE把测量例程下载到仪器中的其中一种方法如下：

1 使用文本编辑器，如Note Pad，创建和维护测量例程。在普通文本文件中保存测量例程。

2 使用From File读取文件。

3 使用Direct I/O把文件内容写入仪器中。

本节介绍了使用这种方法下载的整个范例。如需与Direct I/O有关的进一步信息，请参阅使用Direct I/O对象。

下面的范例程序把一个测量子程序下载到HP 3852A中。这个范例下载子程序 BEEP2，该子程序发出蜂鸣声两次，显示一条消息。这个程序保存在范例目录下的 manual17.vee 文件中。

备注

只有在指定仪器连接、配置并通电时，这个程序才会运行。但是，可以使用这个程序作为自己的程序中使用的编程技术范例，也可以修改程序，与自己的仪器通信。这个程序manual17.vee拥有嵌入配置。

下面是下载的文件manual17.dat的内容。manual17.dat文件在范例目录下提供。

DISP MSG "LOADING BEEP2"

WAIT 1

SUB BEEP2

DISP "BEEP2 CALLED"

BEEP

WAIT .5

BEEP

SUBEND

DISP MSG "BEEP2 LOADED"


逻辑单元和I/O寻址

为存取I/O设备，您需要确定正确的地址，使用Instrument Manager在Instrument Properties对话框的Address字段中输入地址，如Instrument Manager所述。

本节介绍了VEE I/O寻址方式，包括接口逻辑单元和仪器地址，其支持Direct I/O、Panel Driver和Component Driver I/O操作。这种寻址方案不用于VXIplug&play I/O操作。如需与VEE中VXIplug&play寻址有关的信息，请参阅“配置VXIplug&play驱程”。

备注

VEE支持GPIB接口、RS-232串行接口和GPIO接口。此外，通过使用连接到支持的其中一个GPIB接口上的HP E1406命令模块，可以存取VXI设备。

VEE还支持使用VXI背板直接存取嵌入式VXI控制器及存取PC中的E1383A和E1483A VXLink接口。

VEE寻址方案采用逻辑单元，可以使用I/O Config实用程序设置逻辑单元，作为安装和配置VEE包括的I/O库的一部分。如需了解安装和配置安捷伦I/O库及使用I/O Config设置逻辑单元的相关信息，请参阅“安装安捷伦I/O库”。建议根据下面的推荐I/O逻辑单元表为接口设置逻辑单元。

推荐I/O逻辑单元表

逻辑单元 | PC (Windows 98, NT)
1 | GPIB (82340或82341)
2 | GPIB (82340或82341)
3 | GPIB (82340或82341)
4 | GPIB (82340或82341)
5 | GPIB (82340或82341)
6 | GPIB (82340或82341)
7 | GPIB (82340或82341)
8 | GPIB (82340或82341)
9 | COM1串行端口
10 | COM2串行端口
11 | COM3串行端口
12 | COM4串行端口
13 | GPIO (HP E2075)
14 | GPIB0 (National GPIB卡)
15 | GPIB1 (National GPIB卡)
16 | VXI (嵌入式,或使用VXLink 的PC)
17 | GPIB2 (National GPIB卡)
18 | GPIB3 (National GPIB卡)

VEE推荐的I/O逻辑单元

推荐在VE中使用下述接口逻辑单元。如需了解安装和配置I/O库及使用I/O Config实用程序为接口设置逻辑单元的相关信息，请参阅“安装安捷伦I/O库。”

备注

逻辑单元 7是第一张GPIB卡推荐的默认值。每张卡必须有一个唯一的逻辑单元。

PC上的National GPIB卡只支持逻辑单元14, 15, 17和18。

I/O寻址

下面几节介绍了各类设备的寻址方案。

寻址串行端口

通过使用I/O Config为串行端口指配的逻辑单元，支持串行端口。通常情况下，COM1串行端口指配逻辑单元 9。在本例中，使用9作为连接到COM1的设备地址。

寻址GPIO设备

通过使用I/O Config为GPIO接口指配的逻辑单元，支持GPIO设备。通常情况下，GPIO使用逻辑单元13。在本例中，使用13作为GPIO设备的地址。

寻址GPIB接口和设备

GPIB设备使用下述方案寻址：

SPA[SA]

其中：

S -- 是GPIB接口的逻辑单元。

PA -- 是GPIB设备的一级地址 (有效范围是00 - 30)。

SA -- 是可选的二级地址(有效范围是00 - 31)。

两个范例如下：

• 对逻辑单元 7、一级地址01上的GPIB设备，在Instrument Properties对话框的Address字段中输入701。

• 对逻辑单元 14、一级地址09、二级地址02的GPIB设备，在Instrument Properties对话框的Address字段中输入140902。

GPIB逻辑单元 通过使用I/O Config为GPIB接口指配的逻辑单元，支持GPIB接口。上面的推荐 I/O逻辑单元表列出了GPIB接口推荐的逻辑单元。如果I/O库为GPIB接口配置了推荐的逻辑单元(1 - 8)，那么在理论上VEE可以存取最多8张GPIB卡，且可以组合采用支持的卡。

• 对82340或82341，由软件指配逻辑单元。逻辑单元的指配顺序如下：7, 8, 1, 2, 3, 4, 5,和6。但是，每张卡必须设置唯一的基本地址。(如需了解设置基本地址的相关信息，请参阅用户手册。)

National Instruments GPIB驱程配有最多四张GPIB卡，分别标为GPIB0, GPIB1, GPIB2和GPIB3。为存取这些GPIB卡，必须使用I/O Config把逻辑单元14, 15, 17和18指配给GPIB卡。VEE对GPIB卡不支持任何其它逻辑单元。否则，地址与任何其它GPIB卡相同。

寻址GPIB上的VXI设备

为使用HP-IB命令模块通过GPIB存取VXI设备，可以使用二级地址。如果在VXI卡槽中使用HP E1406命令模块，那么一级地址由命令模块上的开关设置(默认值= 09)，二级地址是各个VXI设备的逻辑地址除以8。

例如，假设在C型主机中有一个HP E1406A命令模块 (地址= 09)，其中HP E1406A连接到逻辑单元 7的GPIB接口上。对逻辑地址设为24的VXI插槽中的HP E1326B万用表，万用表地址是70903。

提供了两个仪器驱程，帮助您为通过GPIB命令模块连接的VXI设备提供正确的地址：

• 使用hpe140x.cid驱程定位C型VXI主机中通过HP E1405或HP E1406 GPIB命令模块连接的VXI设备。

• 使用hpe1300a.cid驱程定位B型VXI主机中通过HP E1306 GPIB命令模块连接的VXI设备。(这个驱程学支持HP E1300和HP E1301 B型VXI主机，其中包括内置命令模块。)

为使用任何一个驱程，使用Instrument Manager为驱程添加一个仪器面板，如联机帮助：Help [image] Content和Index [image] Tell me about... Instrument Control Fundamentals中所述。

备注

除VXI开关设备中的模块外，不要为VXI输入子地址值。详情请参阅下一节。

设置地址值/子地址值

大多数GPIB和VXI仪器不使用子地址。不要输入子地址值，除非存取VXI开关设备或使用子地址的其中一个主机仪器，如HP 3235A开关/测试单元或HP 3488A开关/控制单元。

备注

只有在对支持子地址的设备使用HP Instrument Driver时才使用子地址。如果使用Direct I/O，不要使用子地址：

两个范例如下：

• 为存取HP 3235A开关/测试单元中的模块，使用Instrument Manager，在Instrument Properties对话框的Address字段中输入HP 3235A本身的GPIB 地址(如701)，如 Instrument Manager中所述。

在Advanced Instrument Properties对话框 (在Panel Driver一栏中)的Sub Address字段中输入各个模块的子地址。如需与Sub Address字段各个项目有关的信息，请参阅HP 3235A仪器驱程的联机帮助 (Help [image] Instruments)。

• 为存取VXI开关设备中的模块，在Address字段中输入开关设备的GPIB地址(如70902)，在Sub Address字段中输入各个模块的子地址。如需与Sub Address字段各个项目有关的信息，请参阅VXI开关设备仪器驱程的联机帮助。

直接寻址VXI背板

VEE可以直接寻址下述系统的VXI背板：

• HP 623x VXI Pentium控制器

• EPC-7或EPC-8 VXI控制器，但需要安装EPConnect软件

• 使用HP E1383A或HP E1483A VXLink (ISA到VXI)接口连接到VXI卡槽上的PC，但需要安装EPConnect软件

• HP V743 VXI嵌入式控制器

假设已经使用I/O Config设置了推荐的逻辑单元，VEE通过逻辑单元 16存取VXI背板。VXI设备的地址是逻辑单元 (16)，后面追加上VXI设备的逻辑地址。

例如，假设在VXI主机中安装了一部HP EPC-7 VXI控制器和一部HP 1411B数字万用表。如果HP 1411B的逻辑地址设为24，那么VXI地址是16024。不用象通过GPIB存取VXI设备那样把逻辑地址除以8。


仪器I/O数据类型转换

在仪器I/O事务上，VEE根据下面的规则执行自动数据类型转换。在VEE 6执行模式中，使用新的数据类型，不进行转换。但是，在VEE 5及以前的模式中，仍象VEE 5.0版一样执行下面的转换，以实现向下兼容能力。例如，READ BINARY Int16在VEE 6模式下将返回Int16，但在VEE 5及以前的执行模式下将返回Int32。

备注

这些数据类型转换完全是自动的，因此通常不需要关注这些转换。但是，下面列出了在VEE 5及以前执行模式下发生的情况。

在READ事务上，仪器中的Int16或Byte (UInt8)值转换成Int32值，保留标记的扩展名。此外，仪器中的Real32值转换成64位Real数字。

在WRITE事务上，整数或实数值转换成相应的仪器输出格式。

如果仪器支持Real32格式，VEE会把64位Real值转换成Real32值，然后输出到仪器中。如果Real64值超出Real32值的范围，那么会发生错误。

如果仪器支持Int16格式，那么VEE会把Int32值截短到Int16值，然后输出到仪器中。实数值先转换成Int32值，然后再截短和输出。但是，如果实数值超出Int32的范围，那么将发生错误。

如果仪器支持Byte格式，VEE把Int32值截短到Byte (UInt8)值，然后输出到仪器中。实数值先转换成Int32值，然后再截短和输出。但是，如果实数值超出Int32的范围，那么将发生错误。


了解传播

传播是通过VEE程序的通用执行流程。传播准则定义了VEE对象运行的顺序。一般来说，传播由数据流程确定，即VEE程序内部对象之间的数据流程。

传播摘要

下面概括介绍了在VEE4或更高的模式中运行程序时VEE遵守的传播规则：

数据流程从左到右经过各个对象?/span>序列对象从上到下经过各个对象。

必须连接所有数据和XEQ 输入端。

没有数据输入端或序列输入端连接的对象先运行。

所有数据输入端在对象运行之前必须激活（JCT对象除外）。

如果连接了序列输入端，在对象运行之前必须激活它。

对象只运行一次，除非连接到重复对象（例如，For Count）上，或由XEQ 端强制运行。

控制端立即执行，不会导致对象运行或传播。

在有Error端的对象生成错误时，Error端传播，而不是数据输出端。但是，序列输出端会被激活。（如果没有Error端，会显示一条错误信息。）

并行子线程可以以任何顺序运行。

多个线程可以以任何顺序运行。

基本传播顺序

基于传播规则，在按Run时，VEE程序中在VEE4或更高模式执行的对象按下述基本顺序运行：

1. 没有数据输入端的对象及没有连接序列输入端的对象先运行。

2. 其它对象按数据流程确定的顺序运行。换句话说，只有在所有数据输入上存在数据时，有数据输入端的对象才运行，对象怎样运行中介绍了例外情况。

3. 通过连接序列端，可以改变传播顺，端和传播中介绍了修改方式。


端和传播

本节汇总了所有类型的端及其对传播的影响。

数据端输入或输出一个数据容器。

只有在其所有数据输入端都激活时，一个对象才会运行。(JCT对象除外，这个对象在任何数据输入端激活时运行。)

在对象运行后，其数据输入端传播(如果没有发生错误条件)。

控制端(可选)是影响对象状态、但对传播没有影响的输入。

常用控制端包括Clear, Reset和Default Value。控制端使用虚线连接，表明对传播没有影响。

序列端只用来指明执行顺序。

只有在其所有数据输入端和序列输入端(如果连接)激活后，一个对象才会运行。

在其所有数据输入端激活、且数据流量传播得尽可能远之后，序列输出端才会传播。

最好不使用序列端来实现正确传播 -- 而是让数据流量确定执行顺序。

存在数据容器时会激活序列输入端，但会忽略容器中的数据。在激活时，序列输出端会传播一个空(零)容器。

错误端 (可选)。可以添加一个Error端，捕获对象生成的错误条件。如果发生错误条件，Error端会传播相应的错误编号。

如果发生错误，Error端会传播，而不是任何数据输入端。只有错误端和序列输出端 (如果连接)会传播。

XEQ端是强迫对象立即运行的端(即使数据输入端还没有激活)。只有Collector和Sample & Hold对象使用XEQ端强迫对象立即执行，并传播其数据。

存在数据容器时会激活XEQ端，但会忽略容器中的数据。

备注

不要使任何数据输入端或XEQ端未连接，否则在运行程序时会发生错误。

可以使数据输出端、控制端和Error端未连接。更经常的情况是序列端应该保持未连接。


了解序列端

本文概括了序列端在传播中的作用，重点介绍了其建议用途。

序列端是VEE对象的顶部端和底部端。如果已经连接，那么必须在对象执行前先ping顶部的输入端。可以简便地把这个端视为触发端或触发抑制端。

底部的输出端将在对象的数据(或Error)输出传播后传播，传播会持续到尽可能远的下游对象。

在大多数程序中， 一般不需要连接这些序列端，某些用户程序经常会过度使用序列端。过度使用序列端会使汇编人员引起混淆，更重要的是，可能会使试图了解、修改和维护程序的其它编程人员(或您在不使用程序一年以后)引起混淆。但是，有些情况要求这些连接。

循环

通常连接Loop的顶部序列输入 (For Count, For Range, 等等)，以保证只在其它事项完成后才开始循环。类似的，Loop的底部序列输出通常连接到程序中应在循环完成之后才执行的对象上。从下图中可以简便地看到这种一般流程：

到/自文件或DataSet

如果VEE程序写入一个文件，以后再从该文件中读取程序，您可能需要序列端，保证只有程序完成写入后，程序才能从文件中读取。下面是两个范例：

设置和获得变量

一般需要连接Get Variable (或使用变量的Formula)的序列输入，以保证Set发生在Get之前。例如：

传送数据的控制输入端

遗憾的是，到VEE对象的许多控制输入端实际上传送数据，如ToFile上的"FileName" 输入或Formula上的"Formula"表达式输入。在这些情况下，要求一条序列线，保证只有在已经收到进入控制输入的数据时，才会执行带有控制输入的VEE对象。

在弹出面板上使用Confirm/OK按钮

Confirm按钮通常作为弹出面板上的"Ok"和"Cancel"按钮使用，防止执行对象，直到操作人员完成数据输入。序列排序有时会给新用户带来混淆，因为用户的本能反应是把Ok放在Knob后面(因为操作人员以该顺序交互)。有VEE经验的人员更容易会把Ok按钮看作"触发抑制"，可以用来释放其下面的数据。下面的范例显示了VEE Confirm按钮的正常配置。

在Knob之后连接Ok，尝试这个程序 (打开Show Data Flow和Show Execution Flow)，了解为什么必须先执行Ok。把显示画面连接到UserObject的输出上，查看在每个配置中是否传播新值或旧值。

多条数据输出线与控制流程混合

在有些情况下，程序在同一端使用多条线输出，把数据流程与控制流程混合。这可能会导致很难发现的编程错误。在下面的范例中，假设操作人员在Knob上选择一个值，按Ok。

是Formula和UserObject传播先发生呢？还是Exit UserObject在Formula前发生呢？还是UserObject 输出端在Exit UserObject执行前获得一个值呢? 这是不确定的，是随机的。这时需要使用序列端。

上一个范例说明了最好连接Exit UserObject 序列端。

过度使用序列端的常见情况

拥有过程语言背景的编程人员有时希望在不需要时连接序列端。下面是部分常见范例，其中VEE编程人员新手连接序列端，但数据流程已经确定程序流程。

在这些简化图中，可以简便地看到不必要的序列连接。但是，某些编程人员一般会在大型程序中增加序列连接，即使流程模式与这些图基本相同。

上一个控制端范例可能会给某些人带来混淆。在数据端要求可以接受的程序流程时，其不需要序列线。但是，控制端不象数据端那样要求程序流程。下面两个图类似，但并不一样。

控制流程模型(蓝色虚线)需要序列端的帮助，数据流程模型(蓝色实线)则不需要。


线程和子线程的传播

非常简单的VEE程序通常只包含一个线程。比较复杂的程序通常会包括影响程序传播的更多的线程和子线程。

线程 ?通过数据线和序列线(实线)连接的对象构成一个线程。只通常控制线(虚线)连接的对象不视为线程。一个程序可以包含多个线程。例如，下面的程序包含两个并行线程。这两个线程相互独立，因为它们没有使用数据线或序列线连接。

子线程-- 线程的一个分支称为子线程。在两个线程从同一个对象的同一个数据输出端开始，且它们之间没有序列线或数据线时，它们是并行子线程。下面的程序显示了从Real64常数对象的数据输出端分出的两个并行子线程：

并行线程和子线程以相互随机的顺序运行。将运行线程中的一个或多个对象(或所有对象)，然后运行另一个线程中的一个或多个对象。但是，这一规则有两种例外情况：

如果一个线程中包含一个Interface Event or Device Event对象，那么在捕获一个事件时它会接管执行。例如，如果Interface Event检测到GPIB SRQ消息，那么线程将继续操作，直到完成，然后才能继续任何其它线程。其它线程会被保持，允许服务该事件。如需进一步信息，请参阅接口事件和设备事件。

如果一个线程中有一个Start对象，且通过按Start按钮启动线程，那么线程会运行，直到完成，然后才能启动任何其它线程。


对象怎样运行

VEE对象的运行方式如下：它在输入端上接受数据，处理这些数据，然后在输出端上返回得到的数据。只有在使用上面的数据激活所有数据输入端时，VEE对象才会运行。(有一个例外：只要使用数据激活其中一个数据输入端，JCT对象就会运行。)

让我们看一下简单的范例。在下面的程序中，只有在两个数据输入端上都有数据时，a+b对象才会运行。因此，两个Real64常数对象必须先运行(不使用特定顺序)。

在a+b对象运行时，它添加数据，使用得到的数据激活其输出端。只有在其数据输入端有数据时，AlphaNumeric对象才会运行，因此它最后运行，显示结果。

可以看到，数据流程决定着上面的程序中对象的运行顺序。也就是说，数据流程决定着传播顺序。

除数据端外，序列端可以作为触发抑制手段使用，控制什么时候运行对象。在希望防止数据输入端接受任何数据，直到提供了有效数据时，这一功能非常有用。在下面的程序中，Confirm OK对象被添加到上例中：

Confirm OK对象的序列输出端连接到a+b对象的序列输入端。序列输入端不需要连接。也就是说，如果没有连接序列输入端，对象会忽略这个端。但是，如果连接了序列输入端，那么只有在其激活时对象才会运行。因此，在上例中，只有在按(点击)OK按钮时，a+b对象才会运行，然后数据输入端接收数据。

XEQ端对对象运算的影响相反。在使用数据输入端上存在的任何数据激活XEQ端时，对象会立即传播。在一个对象上同时使用XEQ端和序列输入端时，考虑这一点非常重要。XEQ端必须连接，只有XEQ端激活时对象才会传播。下面举出了一个范例：

For Count对象重复五次，把数据输出到Collector上的Data输入端。Collector把五个值采集到一个数组中，在For Count对象的序列输出端激活时，XEQ端会传播这个数组。

备注

记住，可以从对象菜单中使用Properties，启动Show Terminals。在启动Show Terminals时，数据输入端和输出端变成"终端"，显示其名称。


部分UserObject概念

UserObject为把执行某个任务的一组对象封装到一个自定义对象中提供了一种方式，这种封装允许：

  • 在构建VEE程序中使用模块化技术。您可以通过井井有条的方式解决复杂的问题。UserObjects允许使用从上到下的设计技术，创建更加灵活、更加可维护的程序。

  • 构建用户自定义对象，然后可以把这些对象保存在库中，以备以后重用。

一旦创建和保存了一个 UserObject，那么可以在其他程序中 Merge 它。

UserObject特点

当把UserObject 添加到Main Window中时，它会出现在一个图标视图中，并在程序中一直保持这种方式。在双击图标时，UserObject 编辑窗口弹出，显示工作区，您可以在工作区中添加和连接对象，构建某个程序段。端区域容纳数据端和控制端，以便UserObject能够与程序的其它部分通信。下图显示了名为UserObject1 的UserObject的图标视图和编辑窗口。

上下文和UserObjects

在VEE程序内部，Main Window和UserObjects代表着不同的上下文 ，就象子程序在C程序或BASIC 程序中代表着不同的上下文一样。如上图所示，可以把UserObjects嵌套在VEE程序中，这会导致额外的上下文。在上图中，有三个上下文。在每个上下文中可以添加更多的对象。

1. Main Window是包含UserObject1 的上下文。

2. UserObject1 是包含UserObject2的上下文。

3. UserObject2是包含其他对象的上下文。

传播和UserObjects

由于UserObject是一个不同的上下文，这影响着包含多个UserObject的程序的传播。UserObject传播规则如下：

在UserObject 内部的任何对象运行前，UserObject的所有数据输入端（及连接的序列输入端）必须激活。

一旦UserObject的数据输入端被激活，UserObject会运行。UserObject内部的对象根据传播规则运行。

VEE4.0版本以前编写的程序可能包含可选的XEQ 端。如果它被激活，那么UserObject会立即开始运行其工作区内部的对象，其中使用UserObject未激活输入端上可能存在的任何?#26087;?#25968;据。在大多情况下，您不需要对UserObject使用XEQ端。VEE4.0及以后的版本中不能使用XEQ端。如果在VEE4.0或更高执行模式中运行，UserObjects上带有XEQ端的现有程序将不能汇编。

UserObject数据输出端只有在UserObject内的所有对象运行完时才会传播（除非UserObject由于错误或由Exit UserObject永久退出）。只有从UserObject内部激活的输出端才把数据传送到UserObject外部的对象上。当激活时，每个数据输出端只传播一个数据容器。

在VEE4.0版本以前编写的程序中（在VEE3执行模式下运行），UserObject内部的对象在运行时与不同子线程上的外部对象共享时间，也就是时间分片。UserObject不会阻塞UserObject外部的对象运行 。在VEE4或更高执行模式下运行的程序中，只有在不同线程调用时，UserObject才会进行时间分片。

如需了解与传播规则有关的更多信息，请参阅了解传播。

备注

如果在UserObject中有一个Start对象，按Start只运行与Start对象连接到同一线程的对象。将不能从UserObject 输入端读取数据，也不会传播输出端。因此，在UserObject外部不发生传播。

UserObject的数据输出

根据传播规则，UserObject的每个数据输出端只在UserObject内部的对象传播完成时，才把一个数据容器(端收到的最后一个数据容器)传播到UserObject外部的上下文中。如果忽略这一点，您的程序中可能会发生意想不到的结果。下面的范例说明了这种情况：

尽管For Count对象把10个数据容器（数字0到9）发送到Count 输出端，但从UserObject中只传播一个数据容器（最后一个数字）。但是，可以使用Collector 对象，把For Count对象中的数据采集到一个数组中。Array输出端也只传播一个数据容器，但这个容器是由10个值（0到9）组成的一维数组。


控制程序流程

尽管VEE中的传播规则具有逻辑特点，但程序传播方式并不是一直非常明显。VEE编程样式的部分规则如下：

• 使用清楚的、以分层方式传播的程序流程构建程序。如果能够简便地可视化流程，那么通常不会有什么问题。

• 如果对象之间的执行顺序很重要，但不明确，连接序列输入端和序列输出端。尽管应该不必经常使用这些端，但有些情况下必需使用这些端，保证程序要求的执行顺序。

• 避免对迭代使用反馈循环。这些构造会导致不可预测的结果。循环旨在把带数据的容器传回到线程开头。如果必须使用反馈，那么在反馈循环中要求JCT (Junction)对象。

• 避免由循环对象输入并行线程，因为很难区分将执行哪个线程。

• 避免使用Gate对象和Sample & Hold对象。这些对象主要在缺少传播规则知识时作为补丁程序使用。良好的编程样式有助于避免对这些对象的需求。

另请参阅

基本程序控制 高级程序控制


基本程序控制

了解基本对象组合怎样共同控制程序流程非常重要。下面的程序说明了怎样生成循环使用的简单计数，这是一种常用的程序控制功能。在程序运行时，For Count对象从0数到9。

可以嵌套For Count对象，创建嵌套循环。在下一个程序中，对外部循环的For Count发送到顺序输入端上的每个计数，内部循环的For Count从0数到9。直到内部For Count完成整个循环时，外部For Count才会发送下一个输出数量。

在For Count发送最后一个数量时，它从顺序输出端输出一个脉冲，激活Beep对象。这是此类循环对象的一个重要功能。直到执行了其驱动的线程之后，它们才生成顺序输出脉冲。

连续循环

为生成连续循环，可以使用Until Break对象，如后面的实例所示。Delay对象控制着程序，每秒更新一次。较好的方法是用On Cycle代替Until Break，它可以生成一个容器，支持驱动now()对象的任何延迟设置。可以在Number一栏的Properties对话框中设置AlphaNumeric显示格式。

连续循环用来重复程序操作，直到满足某个条件。如果要在任何时候结束循环，那么只要增加OK对象、Break对象和Next对象即可，如下面的程序所示。

这个实例说明了两个并行线程中控制构造的另一种特性。该程序的目的是连续更新时间，直到用户按OK强制Break。如果没有Next对象，Until Break会生成一个容器，然后等到其执行所有下行操作。时间将会更新，程序会一直等待，直到用户按OK。Next对象强制Until Break连续输出容器，直到用户按OK。

在这种情况下，可以使用Stop对象代替Break对象，而不会有任何差异。

为更直接地控制连续循环，可以使用Toggle对象。下面的程序说明了怎样使用Toggle (采用Button格式)中断循环。

Toggle输出连接到Reset控制输入上。默认初始值是0，在每次循环过程中输出到If/Then/Else。在Toggle值保持为0的同时，程序流程会一直继续到Now对象。点击Toggle的Button，把值拨到1，满足If/Then/Else中的表达式条件，激活Break对象。

实现程序互动

鉴于以前的循环技术，下面的程序说明了怎样为互动程序创建一个通用结构。考虑一个简单的程序，其中用户可以选择两个操作中的一个操作，或通过点击相应的Toggle按钮退出程序：

其概念是，每个单独的操作都有自己的并行线程。循环持续检查If/Then/Else表达式中每个Toggle对象的输出(初始值为0)。在按一个按钮时，Toggle的输出变成1，把相应的Text输出发送到AlphaNumeric显示屏上或结束程序。可以根据需要增加多个并行线程，执行I/O和计算。

这种结构的意义在于，必须完成执行线程以后才能执行另一个线程。如果执行线程要用很长的时间才能完成，那么用户必须等到这个线程完成以后，才能执行另一个线程。


高级程序控制

如果用户扩展 基本技术，那么程序可以执行更复杂的控制任务。

实例: 发起程序任务

例如，下面的程序允许用户选择多项任务中的一项任务，或允许仪器发出的服务请求(SRQ)发起任务。

在程序运行时，点击Task 1或Task 2按钮，获得相应的显示输出。如果在Panel Driver的Status Panel上按Clear Status，那么会得到SRQ!消息输出，然后返回执行另一项任务。在点击Quit按钮时，程序会停止。

Until Break对象驱动着程序内部由三个Toggle按钮(Task 1, Task 2, Quit) Interface Event对象 (SRQ:GPIB7)控制的四个并行线程。

Task 1和Task 2按钮定义的两个线程在Message对话框中显示文字Doing Task 1和Doing Task 2。Quit按钮定义的线程会停止程序并清屏。

相关线程涉及SRQ。设置连接到Until Break对象的HP 54501A Panel Driver，其SPoll Enable (在Status Panel上)设为请求服务。在Status Panel上按Clear Status按钮时，发送服务请求。通过设置模板，处理SRQ的线程使用Interface Event对象等待SRQ，具体设置如下。

在发生SRQ时，Interface Event对象会ping通Instrument Event对象，进行串行轮询，在示波器上清除SRQ。

由于设置为NO WAIT，这个对象进行串行轮询，然后ping通Text对象。SRQ!消息发送到Message对话框，声称发生了SRQ。Message对话框配置成等待操作人员应答。模板值不相关。

调用功能

下面的程序类似。可以调用用户定义的三个功能中的一个功能：A, B或C，发起操作，然后程序继续执行选择的功能。

Radio Buttons对象列出了提供的功能。Toggle按钮允许执行选择的功能或退出程序。如果选择执行一个功能，那么功能名称将输出为Text Formula对象。AsText是把输入转换成Text数据类型的一种内置功能。

文本功能名称输出到Call Function对象控制输入Function Name中，从而调用选择的功能。在程序运行时，操作人员在Radio Buttons对象中选择功能名称，按Execute Function按钮。

备注

控制输入对象的传播没有影响。asText序列连接到Call Function序列输入中，抑制Call Function传播，直到收到Function Name后。

清除条形图

在相关的程序流程问题中，下述程序生成条形图，在计算特定数量的点后或在用户按一个按钮时，会清除这个条形图：

Until Break对象驱动着程序。它通过序列输入和输出端控制Quit Toggle, Random Number, Clear Chart Toggle和Counter对象。Random Number (随机(高, 低)内置功能)对象把值输送到Strip Chart显示画面上。Counter计算每个循环迭代，把数量输出到If/Then/Else。在用户按Clear Chart按钮或Count等于100时，If/Then/Else清除Strip Chart和Counter。

Until Break连续驱动Toggle Control对象，在大多数时间中生成0。点击Toggle Control，把它拨到1，然后通过反馈连接复位。1是到If/Then/Else的输入。使用Properties (对象菜单)，隐藏Title Bar，然后增加Reset端，改变Toggle Control对象的外观。


错误处理

错误处理是VEE中的一个重要概念。它允许用户执行一项操作，然后在发生错误后重复操作或继续。下述程序使用对话框表示具有不同结果的操作，演示了这一概念。

这一程序弹出Exclamation Message Box，询问是Stop、Retry还是Ignore。

• Stop会ping Stop对象，停止程序。

• Retry会ping Next，重复循环，重新显示同一个Message Box。

• Ignore会ping Break对象，停止Until Break循环。

在Until Break停止时，它会ping Question Message Box，提供更多的程序控制选项。

注意在“I/O”循环后顺序执行的N要素被连接到Until Break的序列输出端；它们没有连接到任何循环要素上。

要避免作为标准方式使用错误处理，特别是在处理中包含复杂数学公式的Transaction对象中。VEE为执行这些公式分配内存，如果在执行过程中发生错误，那么不会释放内存，从而导致内存漏洞加大。


捕获控制端错误

由于控制端立即执行，不会导致对象传播，因此某些条件可能会导致程序不能正确工作。如果控制端导致错误，那么必须使用专门的编程技术，以程序化方式捕获错误。

在控制端导致对象错误的情况下，程序会停止，VEE显示错误对话框。为以程序化方式捕获和解决错误，典型方案是在对象中增加Error输出。这个解决方案适用于大多数情况，但控制端导致的错误除外。由于控制端不影响对象的传播，因此对象不会传播错误信息。也就是说，由于控制端不会导致对象执行，因此对象不会传播。不允许传播任何输出端，包括Error端，直到其执行。为捕获控制端导致的错误，必须在包含对象的上下文中增加Error输出。

下面的程序说明了捕获控制端导致的错误的不正确方式。程序在XY Trace画面中显示一个波形。XY Trace有一个Scales控制输入，要求Record数据类型在显示屏上改变标度。Text和Integer为Scales控制输入提供Build Record值。XY Trace上的Error输出预计将捕获任何错误情况，并把它发送到errorInfo() function。

这一程序通过显示错误编号和信息来处理错误。它将捕获XY Trace中生成的任何错误，但Scales控制端输入导致的错误除外。

运行程序表明，问题源于其试图以程序化方式捕获控制端导致的错误。Scales控制端预计Record中至少包含一个值识别改变的标度。允许的值是X, Y, Y1, Y2和Y3。

控制端生成错误，因为它从Text中收到错误值T。由于这是一个控制端错误，因此XY Trace中没有进一步传播，Error输出没有收到错误信息。程序突然停止，VEE显示下面的错误对话框。

如前所述，捕获控制端错误的正确方式是在包含对象的上下文中增加Error输出。下一个程序显示了解决方案，其中Build Record和XY Trace被放到UserObject中。注意，它已经删除了XY Trace画面的错误输出，在UserObject中增加了Error输出。此外，UserObject的Error输出已经连接到errorInfo()。


控制端上的数据传播

在一个对象的控制端收到数据时，如文件名或默认值，应连接该对象的序列输入端，否则程序可能会失败。由于控制端不影响对象的传播，因此即使在没有设置控制端值的情况下，在数据输入收到数据时，对象仍将传播。

下面的程序显示了这个排序问题。在dataFile2文件名被发送到File Name控制端前，Alloc Array把数据发送到To File。在To File收到数据时，它立即改变dataFile1中的内容，而不是预计的dataFile2。To File确实在控制端上收到新的文件名，但是太迟了。

为解决这个问题，使用To File的序列输入抑制对象操作，直到控制端收到数据。下面的程序说明了把File Name的序列输出连接到To File的序列输入上可以保证把数据写入正确的文件中。


构建记录

在试图构建由下面三个波形组成的记录时，Build Record对象从来不会传播。在Function Generator把输出发送到DeMultiplexer之后，For Range对象会开始循环，从0数到2。每次计数都会把相应的Addr out从DeMultiplexer发送到各自的Build Record输入。

备注

在循环内部，当拥有多个输出的对象(如DeMultiplexer)在每个循环迭代上发送来自一个输出的数据时，在每个循环开头将使其它输出值失效。这可以防止可能旧的、不正确的数据传播到下一个对象。这也适用于拥有多个输入的对象，如Build Record。

当一个输入收到每个循环迭代的数据时，将在每个循环开头使所有其它输入的值失效。VEE通过这种方式，防止程序使用以前的值、而不是当前值，以免导致不正确的结果。

Build Record对象从不会由于VEE循环工作方式传播其Record输出。在这一程序中，每个For Range迭代将使从上一个迭代放在Build Record输入上的数据失效。由于Build Record对象在每个循环迭代上只收到一个输入，因此一次只有一个输入有效，所以没有Record输出。

自己构建这一程序，打开Show Data Flow，查看每次通过循环时DeMultiplexer怎样只传播一个数据输出。

下一个程序通过使用UserObject，使这一解决方案以预期方式工作。这一解决方案正常运行，因为UserObject的输出端保持数据，直到迭代完成。数据在Build Record输入上有效，因为UserObject同时发送三个输出。在这三个输入都包含有效数据时，Build Record对象会输出预计结果。

通过用Shift Register代替DeMultiplexer，下面的程序解决了这个问题。DeMultiplexer一次只有一个有效输出，与此这不同，Shift Register的三个输出同时有效，因为它们同时发送到Build Record的三个输入上。不含数据的Shift Register输出会传播一个零。

这一特定程序把三个波形的时钟输入到Shift Register中，然后ping通Build Record，生成记录。如果首选数组，而不是记录输出，那么可以使用Collector。


到一个Formula的多个输入

如果在不同的循环周期中发送值，那么把值发送到循环内部一个Formula对象的多个输入上可能会导致传播问题。如前面构建Record对象所示，如果任何输入端包含无效数据，那么Formula将不能运行。在循环内部使用DeMultiplexer对象进一步提高了混乱。下面的程序说明了这一问题。

DeMultiplexer由For Count对象驱动，为每个计数周期输出一个值(0 - 3)。每个周期只输出一个值，因此在每个周期后到Formula对象的输入无效。由于两个Formula输入A和B永远不会同时有效，因此Formula永远不会执行，没有Formula输出。

您可能会确定在下一个循环迭代期间仍可以使用A端的值班，但VEE没有这种眼光。循环仍可能会为同一个公式计算多个系数。对有一半旧系数、有一半新系数的公式求解，是不符合逻辑的。一般来说，对编程来说，最安全的方式是假设来自以前迭代的数据是“旧的”。正因如此，VEE在每次循环迭代开始时都会使对象的输入失效。

处理循环

有多种方式处理没有变化的输入值在循环迭代后失效的情况。上一节中的范例显示了一个Shift Register怎样同时提供多个有效的输出。实现大多数任务的直接方式涉及使用变量。下面的程序显示了怎样使用变量为Formula对象提供有效值。

对于全局变量Nval在这一程序中的使用方式，有两点需要注意。第一，Nval在程序开始运行时初始化。在这个特定程序中不一定要这样做，因为VEE先初始化、然后才使用它，但这是一个很好的编程惯例。第二， Nval一直设置一个新的值，然后Formula才使用它。

在对象必须使用变量前，必须一直设置变量，否则程序会发生类似于无效数据的问题。如果变量初始化，那么其值可能会不正确。如果变量没有初始化，那么程序会导致错误，如Variable was not found。


定时事件

根据其在程序中连接的方式，Timer对象可能会显示奇怪的(可能是差的)结果。下面的程序演示了VEE传播问题怎样影响程序中连接对象的方式。

这个程序中的“模块”是包含着某种VEE对象组合的任意线程。Timer已经被添加到执行Block 2所需的时间中。这个程序可能会运行，也可能会导致错误。如果程序运行，Timer可能会产生错误结果。有两个问题影响着Timer启动定时和结束定时的时间。

第一，Block 1序列输出同时“ping” Block 2和Timer的Time1输入。程序没有指定哪一个先ping，因此可以选择任何一个。如果它选择先ping Block 2，那么直到Block 2 ping完时才会ping Time1。这种情况会导致定时结果差，如果在Tim1被ping之前Block 2的输出ping Timer2，会导致发生错误。

即使打开Show Data Flow调试功能帮助识别问题，但数据流量指标可能仍不会全面指明实际传播。在这种情况下，传播取决于把Block 1序列输出的线连接到Tim1和Block 2的顺序。

第二个问题与Block 2输出和Timer的Time2输入的连接有关。由于它还连接到Block 3和4的输入上，因此不能保证哪个输入先运行，这可能会导致定时结果差。

下面显示了修订程序保证正确传播和准确定时的一种方式。在Block 1和Block 2之间插入一个Do对象，把Block 2序列输出连接到Time2输入上。Do对象强制实现对象运行顺序，如程序中该对象周围的编号所示。

Block 2上的输出端以其周围的编号所示的顺序运行。通过把Block 2序列输出端连接到Time2输入上，在Block 2及其输出端驱动的所有模块完成后，Timer显示结果。同样，如果有其它模块连接到Block 2的序列输出端，那么插入另一个Do对象，保证正确传播。


了解数据容器

数据通过VEE程序传播的过程由数据容器从一个对象移动到另一个对象的过程组成。数据容器是VEE内部数据格式。每个数据容器都有一个数据类型(文本, 实数, 等等)和一个数据形状(标量, 一维数组, 等等)。

数据容器中可能只有一个值，也可能有由多个值组成的数组。不管是哪种情况，在对象运行时，从某个数据输出端只会传播一个数据容器。

在下面的范例程序中，Real64常数对象配置为一个一维数组。Int32常数对象配置为一个标量。

正如您可能预期的那样，在程序运行时，Real64常数对象会传播一个作为一维实数数组的数据容器。Int32常数对象输出一个作为整数标量(值1)的数据容器。那么VEE怎样相加这两个容器呢？没问题，因为VEE提供了自动数据类型转换功能。VEE会"晋级"整数值1，使其成为一个同等的实数值(1.0)。然后a+b对象在一维实数数组的每个要素中相加实数值1.0，输出得到的一维实数数组，如下图所示。

如果您对任何VEE数据行上传送的特定容器感兴趣，可以使用Line Probe查看这些信息。把鼠标指针移动到所需的行上，高亮度显示这一行，然后按鼠标左键，出现Container Information框。例如，从我们的Real64常数对象范例中在数据输出行上传送的容器如下图所示。

一般来说，VEE会自动转换数据类型，在可能时解析数据形状。通常不需要担心怎样完成这一操作。但是，如果想了解与转换过程有关的技术信息，请参阅转换输入端上的数据类型和仪器I/O数据类型转换。

终端信息

终端显示对象输入类型和形状要求，显示与输入或输出容器有关的信息。端则是终端的连接点。如果存在但看不见终端，可以显示终端：在对象菜单上点击Properties，复选General栏上的Show Terminals。

为查看或修改终端的属性，双击终端的信息区域(而不是端)，将出现一个对话框，显示终端信息。

如果对话框中的所有字段都显示为灰色，那么不能修改终端。但是，如果部分终端是输入字段(白色背景)或按钮，可以改变值。

终端的特点如下：

Name是终端的名称，通常可以修改这个字段。在公式表达式中，可以在公式中使用终端名称。

Mode显示终端名称，如Data, Control, Trigger或Error。不能修改这个字段。

Required Type和Required Shape (仅输入端)指定与对象预期的输入数据有关的信息。在某些对象上，可以修改Required Type或Shape，但通常不需要这样做。

Container Information包含对象将处理(根据输入端上的输入要求)或已经处理(在输出端上)的容器有关的信息。这些信息包括数据类型、数据形状、大小(如果数据是数组)、任何映射和数据本身。


Data Types

数据类型

VEE提供所有VEE操作使用的多个数据类型，也就是说，在VEE对象之间发送的每个VEE数据容器都属于其中一种类型。

备注

如果VEE对象上的输入端指定Any (在许多情况下是默认值)，它将接受任何VEE 数据类型的容器。

复合数据类型 (Waveform, Spectrum, Record, Coord和Object)与特定的数据形状相关。

UInt8是8位2没有符号的互补整数(0 - 255)。

Int16是16位2的互补整数 (-32768到32767)。

Int32是32位2的互补整数 (-2147483648到2147483647)。

Real32是符合IEEE 754标准的32位实数(�3.40282347E�38)。

Real64是符合IEEE 754标准的64位实数(大约16个有效十进制位或�1.7976931348623157E308)。

PComplex是采用(mag, @phase)形式的幅度和相位部分。相位是目前活动的三角单位。例如，在Trig Mode设为Degrees时，30 degrees的PComplex数字4表示为(4, @30)。每个部分都是Real64。

Complex是矩形或笛卡尔复数。每个复数有一个实数部分和一个虚数部分，采用的形式是(real,imag)。每个部分是Real64。例如，复数1 +2i表示为(1,2)。

Waveform是复合数据类型的时域值，其中包含等间隔线性映射点的Real64值和波形总时间跨度。Waveform的数据形状必须是Array 1D (一维数组)。

Spectrum是复合数据类型的频域值，其中包含多个点的PComplex值及最小频率值和最大频率值。Spectrum允许把域数据统一映射为对数或线性。Spectrum的数据形状必须是Array 1D。

Coord是复合数据类型，其中包含至少两个部分，采取的形式是(x, y, ...)。每个部分是Real64。Coord的数据形状必须是Scalar或Array 1D。

Enum是有一个相关整数值的文本字符串。Enum 数据类型由Data [image] Selection Control下的对象传播 (如Radio Buttons对象)。可以使用这些对象的 ordinal输出端，或使用ordinal(x)函数存取这些整数值。Enum的数据形状必须是Scalar。Enum不能作为要求的数据输入类型。

Text是由字母和数字组成的字符串。

Record是由多个字段组成的数据类型。每个字段有一个名称、可以是任何类型(包括Record)的一个容器及一个Scalar或1D Array的数据形状。

Object是在使用VEE的执行模式时为ActiveX Automation Objects and Controls使用的变量预留的数据类型。Object可以作为输入和输出在UserObjects和UserFunctions之间传送，但不能传送到远程UserFunctions及汇编的函数。Object变量包含Dispatch接口名称使用的值(如"Range"或"Application")及Dispatch的指针值(从Automation Object中导出)。Object的数据形状必须是Scalar。

Variant并不是独特的数据类型，它用于表达式中，表明其表示的值可能是许多其它数据类型中的一种。它是当时保持的数据类型。

如需与数据类型和数据类型转换有关的更多信息，请参阅转换输入端上的数据类型和仪器I/O 数据类型转换。

如需与Agilent VEE对ActiveX Automation and Controls的支持情况有关的更多信息，请参阅VEE高级技术手册。

特殊的仪器I/O 数据类型 (VEE 5和较低的执行模式):

VEE作为Int32 数据类型存储和处理所有整数值，作为Real (或Real64) 数据类型存储和处理所有实数。但是，仪器一般支持16位整数或8位字节。此外，部分仪器支持32位实数格式。因此，VEE支持下面三种数据类型，这些数据类型仅用于涉及仪器的I/O事务：

Byte是8位2的互补字节(-128到127)。(字节用于READ BINARY, WRITE BINARY和WRITE BYTE仪器I/O事务。WRITE BYTE事务用来为GPIB仪器提供专门的字符输出。)

Int16是16位2的互补整数 (-32768到32767)。

Real32是符合IEEE 754标准的32位实数 (�3.40282347E�38)。


数据类型的线颜色

在VEE 4或更高版本的Execution Modes下，VEE根据流过直线的数据类型为数据线指配不同的颜色。下面是默认的颜色及颜色属性名称(可以通过File [image] Default Preferences改变)：

• 蓝色：数字 (Integer或Real类型)

• 蓝色：复数 (Complex和PComplex类型)

• 橙色：字符串 (String类型)

• 灰色：序列输出 (零值, 通常来自一条序列输出)

• 黑色：未知类型或没有优化的类型(如Record类型)

备注

如果数据类型是数组，VEE显示较宽的线。为提高速度，检查程序中的彩色线。非黑线越多，程序运行速度越快。


Data Shapes

数据形状

复合数据类型(波形, 频谱, 记录, 坐标和对象)与特定的数据形状相关：

Waveform和Spectrum数据类型一直是一维数组。

Record和Coord数据类型可以是标量或一维数组。(它们不能是两维或多维数组)

Object数据类型一直是标量。

所有其它数据类型可以有标量数据形状或数组数据形状：

Scalar是单个数字，如10或(32, @10)。

Array是由1-10个维度组成的数组。

数组可以映射。(映射是表示数组独立变量的一套连续值或离散值。)

在许多情况下，VEE对象拥有输入数据形状要求为Any的数据端，意味着该对象接受由一个以上的数据形状组成的容器。


转换输入端上的数据类型

在传统编程语言中，您需要手动转换不同的数据类型，VEE则自动转换大多数数据类型。

输入端上的数据形状不进行转换，但在用于数学函数中时，数据类型和形状可以自动转换。如需更多信息，请参阅处理数据。

大多数对象在数据输入端接受任何数据类型，但少数对象要求特定的数据类型或形状。对这些对象，数据输入端自动试着把输入容器转换成所需的数据类型。

例如，Magnitude Spectrum显示画面需要Spectrum数据。如果Function Generator的输出(波形)连接到Magnitude Spectrum显示画面上，那么Magnitude Spectrum的输入端会自动进行FFT，把时域数据转换成频域数据(把波形转换成频谱)。

类型转换可以是晋级，也可以是降级。晋级是从信息较少的数据类型转换到信息较多的数据类型。例如，从Int32转换到Real64就是晋级。这种晋级会根据需要自动发生，而很少需要用户关注。

降级是丢失数据的转换过程。例如，从Real32转换到Int32就是降级，因为部分Real32数字丢失。只有在为对象上的输入指定某个数据类型时，才会发生数据类型降级。一旦已经指定了数据类型，那么在需要并且可能时，将自动发生降级。

例如，如果把Formula对象上的输入变成Int32，另一个对象为该输入提供一个Real64数字(如28.2)，那么值将降级为Int32 (28)。

为把Formula输入上的数据类型从Any变成Int32，只需双击输入端的信息区域(而不是端)，然后点击Required Type字段即可。在下拉列表中点击Int32，改变类型。

备注

在VEE 5及以前的执行模式下对仪器I/O事务进行数据类型转换是一个特例。如需更多信息，请参阅仪器I/O数据类型转换。

Record数据类型的优先权最高。但是，VEE不会自动晋级到Record数据类型或从Record数据类型降级。为实现Record数据和非Record数据之间的转换，可以使用Build Record和Unbuild Record。如需更多信息，请参阅VEE高级技术手册中的"使用Records和DataSets"。

对象数据类型也不会自动晋级或降级，不能转换成其它数据类型。 ActiveX automation对象使用Object数据类型。可以使用CreateObject和GetObject函数，创建和使用automation对象。

在不能完成转换时，VEE会返回错误。下表说明了什么时候自动完成转换("是")，什么时候VEE返回错误("否")。

在数据形状或类型选择"Any"时，要知道"Any"表示不转换、不检查。空值不能转换成数据类型，但在端设置成Any Shape和Any Type时可以传送空值，这适用于所有VEE对象。

数据输入上的空值行为在VEE 7.03及以后版本中已经变化，具体指的是发送到输入端的空数据，其中数据类型或形状限制设为"Any"之外的任何其它值。如果输入端的数据形状和/或类型设置为Any之外的其它值，其行为在7.03变化，即使要求的输入端是Int32标量，仍将传送空值。VEE 7.03及以后版本中已经解决了这个问题，其会发送错误信息，表明是否设置了输入端限制及传送空值。输入端将转换空值，否则会发出错误信息。

表格：输入端中的类型晋级和(降级)

_________________________________________________________________________________________________

到: | UInt8 Int16 Int32 | Real32 Real64 | Complex | PComplex | Waveform | Spectrum | Coord | Enum | Text
从: |  |  |  |  |  |  |  |  |

_________________________________________________________________________________________________

UInt8 Int16 Int32 | (是)[3] | 是 | 是[1] | 是[1] | 否 | 否 | 是[2] | 否 | 是
Real32 Real64 | (是)[3] | (是)[3] | 是[1] | 是[1] | 否 | 否 | 是[2] | 否 | 是
Complex | 否 | 否[4] | -- | 是 | 否 | 否 | 否 | 否 | 是
PComplex | 否 | 否[4] | 是 | -- | 否 | 否 | 否 | 否 | 是
Waveform | (是)[3] | (是)[8] | 否 | 否 | -- | 是[5] | 是 | 否 | 是
Spectrum | 否 | 否 | (是)[8] | (是)[8] | 是[5] | -- | 否 | 否 | 是
Coord | 否 | 否 | 否 | 否 | 否 | 否 | -- | 否 | 是
Enum | 否[6] | 否 | 否 | 否 | 否 | 否 | 否 | -- | 是
Text | (是)[7] | (是)[7] | (是)[7] | (是)[7] | 否 | 否 | (是)[7] | 否 | --

_________________________________________________________________________________________________

注：

是 = 晋级

(是) = 降级

-- = 不适用

[1] 整数或实数值晋级到Complex (值, 0)或PComplex (值, @0)。

[2] 独立部分即n-field Coord的第一个n-1字段，是值的数组索引，除非数组有映射关系。如果数组有映射关系，那么独立部分从每个维度的映射中导出。相关部分是数组要素。如果容器是一个Scalar (非数组)，那么转换失败，生成错误信息。

[3] 如果值位于目标类型的额定范围之外，这些降级会导致错误。

[4] 这一降级不会自动完成，但可以使用re(x), im(x), mag(x)和phase(x)对象或Data [image] Build Data/UnBuild Data [image] 对象完成。

[5] FFT或逆FFT自动完成。

[6] 这一降级不会自动完成，但可以使用ordinal(x)对象完成。

[7] 如果文本值不是数字 (如34或42.6)或没有采用可以接受的数字格式，这一降级会导致错误。可以接受的格式如下：(忽略除每个数字内部的空格以外的空格)：

降级到整数或实数类型的Text还可能包括：

前面的符号，如-34。

后缀e或E，后面跟着可选的符号或空格和整数，如42.6E-3。

降级到Complex的Text必须采用下述格式： (数字, 数字)。

降级到PComplex的Text必须采用下述格式：(数字, @数字)。在这一转换中，相位(第二个部分)视为采用弧度，而不管Trig Mode设置如何。

降级到Coord类型的Text必须采用下述格式：(数字, 数字, ...)。

[8] 这些降级保留Waveform和Spectrum映射关系。


使用对象和函数转换数据类型

VEE提供了把数据从一种类型转换成另一种类型的多个对象和内置函数，它们用来处理VEE在输入端上不能处理的特殊类型转换。

通过使用Function & Object Browser，或在接受表达式的任何对象中输入函数名称，可以在程序中添加VEE内置的类型转换功能。在Browser中，选择Type: Built-in Functions and Category: Type Conversion，得到可用的函数。

  • 例如，函数asText(x)把输入x转换成数据类型Text，返回与x相同的数据类型。x可以是任何形状和任何类型。在表达式asText(3.4)中，结果是Text值"3.4"。

备注

在VEE 5.0以前，在直接输入到对象中的表达式时，如Formula，Integer会转换成Real。在VEE 5.0及以后的版本中，在Execution Mode设置成VEE 5 或更高时，表达式中的Integer不再转换成Real。这种变化不影响输入端上的数据类型转换。例如，Formula表达式“2^4”在VEE4及以前的模式中会得到Real64值16.0，但在VEE5及更高模式中会得到Int32值16。

Record数据类型的优先次序最高。但是，VEE不会自动晋级到Record数据类型或从Record数据类型降级。为在Record数据与非Record数据之间实现转换，应使用对象Build Record和Unbuild Record。

通过使用Using_records中描述的语法，可以在表达式中获得类似的结果。

Coord数据类型有一些相关的特殊规则：

• 尽管Int32和Real数据类型的数组可以晋级到Coord，但Coord不能转换成任何其它数字类型。

• 在没有映射的数组转换成Coord时，将从数组索引中创建独立的Coord值(第一个Coord字段)，相关Coord值(最后一个Coord字段)则包含着要素值。例如，如果数组A转换成Coord，A包含[1,5,7]，那么它转换成一个Coord数组，其中包括[(0,1),(1,5),(2,7)]。

• 在映射的数组转换成Coord时，独立Coord参数的范围为映射的低值到Xmin+(Xmax-Xmin/N)*(N-1)值。

Object数据类型也没有自动晋级或降级功能，它不能转换成其它数据类型。ActiveX automation对象使用Object数据类型。通过使用函数CreateObject和GetObject，可以创建和使用automation对象。如需与VEE支持ActiveX Automation和控件有关的更多信息，请参阅在VEE中使用ActiveX Automation。

另请参阅

Help => Index and contents => Tell me about... => Active X


处理数据

为处理数据，可以使用Function & Object Browser中提供的数学函数在数据上进行运算。使用Function & Object Browser工具栏按钮，打开浏览器。可以把多个函数组合起来，创建数学表达式。

备注

还可以在运行程序前，使用数字输入字段处理数据，如Constant对象中的数字输入字段。某些对象上的数字输入字段支持使用任意公式。公式会立即求解；得到的值用于字段中。不能在Constants中使用变量。此外，输入的公式必须求解为一个正确类型的标量，或可以转换成该对象预计类型的标量值。一般来说，可以在数字输入字段中使用任何二元运算符、嵌套圆括号、函数调用和预先定义的数字常数PI (3.1416...)。

Function & Object Browser包含一个数学函数集，以各种方式处理数学。每个函数都是在Formula对象中输入的表达式，并拥有相应的标题、输入和输出。可以在每个Formula对象的open view中改变表达式，还可以改变其属性。Function & Object Browser中列出的所有函数都可以用于支持表达式的其它菜单中的任何对象。支持表达式的其它菜单中的对象是：

Data [image] Access Array [image] Set Values

Data [image] Access Array [image] Get Values

Data [image] Access Record [image] Get Field

Data [image] Access Record [image] Set Field

Device [image] Sequencer

Flow [image] If/Then/Else

Flow [image] Conditional (所有条件对象)

使用事务的I/O对象

表达式可以包含数据输入端名称、数据输出端(仅适用于I/O事务和Formulas)、变量(全局变量和声明变量)、用户自定义函数(汇编的函数, 远程函数和UserFunctions)及Function & Object Browser中的任何数学表达式。数据输入端名称作为变量使用。对USASCII键盘使用的表达式内部的输入变量名称，VEE不分大小写。对非USASCII键，VEE只对7位ASCII字符不分大小写。在运行时对表达式求解。


一般概念

如果把一个数组传送到一个函数中，除另行说明外，函数在数组的每个要素上运行。例如，标量sqrt返回一个标量；sqrt(4)返回2。但是，数组sqrt返回相同大小的数组；sqrt([1,4,9,64])返回数组[1,2,3,8]。

在VEE 5和更高的执行模式下，没有小数点或"E"指数的表达式字段中的所有数字都视为Int32。在VEE 4和VEE 3模式下，所有数字都视为Real64值，除非使用圆括号指定Complex或PComplex值。因此，2视为Real64或Int32，具体取决于程序的执行模式。(1, @2)是一个PComplex数字，(1, 2)则是一个长方形Complex数字。1.0和1E3总是Real64。

备注

VEE把圆括号中包含的多个值理解为Complex或PComplex值。如果需要在表达式中使用Coord值，那么可以使用coord(x, y)函数。coord函数使用两个或多个参数。coord(1, 2)返回有两个字段的Scalar Coord容器。

在Coord数据上运行的所有函数只在每个Coord的相关(最后)字段上运行。例如，abs(coord(-1, -2, -3))返回Coord (-1, -2, 3)。

除函数ordinal(x)外，在每个数学运算前Enum容器总是转换成Text。它不支持Enum数组。如果想创建Enum数组，其会创建Text数组。

如需与具体数据类型定义有关的信息，请参阅数据类型。

在表达式中使用字符串

表达式内部的字符串必须用双引号引起来。可以在字符串内部使用下面的脱字序列：

________________________________________

换码符

意义

________________________________________

\n | 换行
\t | 横栏
\v | 竖栏
\b | 退格
\r | 回车
\f | 换页
\" | 双引号
\’ | 单引号
\\ | 反斜杠
\ddd | 字符值。d是一个八进制位。

________________________________________

在表达式中使用数组

表达式中的数组使用方式与标量相同，只是提到其名称。可以把数组常数直接输入表达式中(如[1,2,3])。函数中使用的数组，如sin([1,2,3])，把sin函数应用到数组的每个要素中。VEE要求在数组要素之间使用逗号。

备注

数组索引基于0。索引开头为0，直到n-1，其中n是该特定维度中的要素数量。

可以使用表达式存取数组的多个部分。一旦已经在表达式中指定子数组，可以输出子数组，或在进一步表达式计算中使用子数组。

从每个数组中只能存取相邻的子数组。为存取子数组，必须为数组中的每个维度指定一个参数。

使用下面的字符指定数组参数：

逗号","分隔数组维度。每个子数组运算必须为每个数组维度提供一个指标。

冒号":"从其中一个数组维度中指定一个要素范围。

星号"*"是通配符，从该特定数组维度中指定所有要素。

备注

可以根据子数组中的点数调节Waveform时间跨度、Spectrum频率跨度和数组映射关系。例如，如果有一个256点的Waveform (WF)，并请求WF[0:127]，您将获得Waveform的上一半及一半旧波形的时间跨度。

范例

A是长10个要素的Array 1D。

A[1]存取A中的第二个要素，输出一个标量。

A[0:5]返回一个一维子数组，其中包含A的前6个要素。

A[1:1]返回一个一维子数组，其中包含一个要素，这个要素是A的第二个要素。注意这与第一个范例A[1]之间的区别。

A[2:*]返回一个一维子数组，其中包含A的第一个到第十个要素。

A或A[*]返回整个数组A。

A[1,2]返回错误，因为它指定两维数组的参数。

B是一个5x5矩阵(一个Array 2D)。

B[*]返回错误，因为它只指定一个参数，B是一个两维数组。

B[1,2]从第二行第三个要素返回一个标量值。

B[1,*]作为Array 1D返回所有第一行。

B[1,1:*]作为Array 1D返回所有第一行，第一个要素除外。

B[4,1:4]返回一个Array 1D，其中包含四个要素：第4行中第二个到第五个值。

B[5,5]返回错误，因为数组基于零。只能通过B[4,4]存取数组。

B[1 1]返回错误，因为必须用逗号把维度指定符分开。

在表达式中构建数组

可以从其它数组或子数组的要素中构建数组。表达式中的每个要素必须指定相同数量的维度，在每个维度中包含相同数量的值。

范例

A是有10个要素的Array 1D。B是一个5x5矩阵。

[1,2,3]返回3个要素的Real Array 1D，其中包含取值1, 2和3。

[A[0], A[5:7], A[9]]导致错误，因为它同时指定标量和Array 1D要素。

[A[0:4], B[0,*]]返回10个要素的Array 2D (大小为2 x 5)，其中第一行是来自A的前五个要素，第二行是来自B的第一行。

[A[0], A[1], B[2,3], A[5]]返回4个要素的Array 1D，其中包含A的第一个要素和第二个要素，来自第三行的要素和B的第四列及A的第六个要素。

在表达式中使用变量

通过使用Declare Variable和Set Variable对象，可以创建和设置变量；通过使用Get Variable对象，可以存取变量。如需进一步信息，请参阅Declare Variable, Set Variable和Get Variable。

此外，通过在数学表达式中包括变量名称，可以存取变量。可以在Formula对象或具有延迟求解表达式字段的任何对象中，在数学表达式内包括一个变量。这些对象有If/Then/Else, Get Values, Get Field, Set Field及在事务中使用表达式的所有设备，包括To File, From File, From DataSet, From Stdin, To/From Socket, Sequencer和Direct I/O。

为在表达式中包括变量，只需象输入变量一样使用变量名称。例如，假设程序使用Set Variable对象定义变量numFiles。在程序中其它地方，带有输入A的Formula对象可以使用表达式numFiles+3*A。

备注

变量名称不分大小写。可以使用大写字母或小写字母。因此，GLOBALA等同于globalA。

为避免错误或意想不到的结果，在表达式中包括多个变量时，要知道有两个限制：

1. 局部输入变量要优先于全局变量。也就是说，在变量名称重复时，会选择局部变量，而不是全局变量。例如，如果有Freq输入(局部变量)的Formula对象中包括表达式Freq*10，同时还有一个全局变量名为Freq，那么将使用局部变量Freq、而不是全局变量对表达式求解。对这种重复，将不会报告错误。

2. 根据程序流程，对包含变量的表达式求解的对象可以在定义变量之前执行。例如，假设使用Set Variable对象设置变量globalA，Formula对象中包括表达式globalA*X^2。根据程序流程，Formula对象可以在Set Variable对象执行前执行。在这种情况下，Formula对象不能对表达式求解，因为没有定义globalA。这时会出现一条错误信息。

采取措施保证正确传播非常重要，应先执行Set Variable。在这种情况下，可以把Set Variable对象的序列输出端连接到Formula对象的序列输入端，或连接到包括要求解的表达式变量的任何其它对象的序列输入端，来保证正确传播。如果使用Get Variable对象，其序列输入端也应连接到 Set Variable的序列输出端。另外，如果使用Declare Variable对象声明变量，必须使用Set Variable初始化变量。如需进一步信息，请参阅VEE高级技术中的"变量"一章。

备注

在默认情况下，会复选(启用)Default Preferences对话框中的Delete Variables at PreRun，因此在运行程序时，会从变量中删除值。这可以防止变量中包含"旧"数据，导致意想不到的结果。

变量可以是数组。可以使用数组语法存取变量，就象是输入变量一样，如GlobAry[2]。如果变量Record，可以使用记录存取语法，如globRecord.numFiles。

在表达式中使用记录

可以使用表达式存取一条记录的一个字段或子字段。使用A.B子字段语法存取记录A的B字段。如果A是带有字段 B的记录，其本身又是带有字段C的记录，那么可以以递归方式使用A.B语法存取C字段。也就是说，使用表达式A.B.C。如果A没有B字段，或B没有C字段，那么会发生错误。

表达式中可以使用的A.B.C.D.E.F的递归数量没有限制。注意，字段名称不分大小写(大写字母和小写字母相同)。可以在子记录中复制字段名称，因此可以使用表达式A.a.A。

记录特别适合作为变量，以便一个变量可以保持多个不同的值。注意，Formula对象可以代替Get Variable。因此，可以在一个对象中完成GlobRec.numFiles存取，而不是同时使用Get Variable和Formula对象拆除记录。

可以在表达式中结合使用记录和数组语法，存取记录数组的字段(如A[1].B)，或存取作为一条记录的一个字段的数组的一部分(如 A.B[1])。注意A[1].b和A.b[1] (均支持)之间的区别：

第一个用于带有字段 b的记录 1D。A[1].b存取记录数组A的第二个记录要素的字段 b。

第二个用于带有字段 b的标量记录，这是一个1D数组。A.b[1]存取记录A的字段b的第二个要素。

为改变记录中的字段，使用Formula对象中的赋值运算符。例如，假设有一条记录R带有字段 A，您想把R.A的值变成sin(R.A)。您只需把表达式变成R.A = sin(R.A)，以后可以在VEE程序中继续使用记录R (及字段 A的新值)。


使用赋值运算

Formula对象支持使用表达式，这些表达式使用赋值运算改变部分数组和记录的值，为局部变量和全局变量赋值。Result输出端包含变化的数组或记录部分，而不是整个数组或记录。例如，在表达式A[2] = 4的Formula中，Result端包含着值为4的数组要素A[2]。它不包含数组A的所有要素。可以在Type: Operators, Category: Assignment的Function & Object Browser中获得预置赋值的Formula对象。

备注

只有Formula对象才允许使用赋值运算。

允许的语法

Formulas支持用分号分隔的多个表达式。表达式左侧支持改变数组和记录要素及变量值的语法。右侧必须与修改的左侧完全匹配。对记录，不能改变设计项目(字段类型、形状或大小)，只能改变记录的值。下面的范例说明了数组使用的左侧语法：

A[2]=
A[2, 3, 4:5]=
A[2:4, 4:6, 3:*, *]=

下面的范例说明了记录使用的左侧语法：

RecA.B=
RecA.B.C.D=
RecA[1].B=
RecA.B[1]=
RecA.B.C.D[1]=
RecA[1].B[2].C[3].D=
RecA.B[2:3].C[3:4]=

允许使用下面的左侧语法，直接设置全局变量和局部变量，初始化声明的局部变量：

GLOBAL=2
TMP_LOCAL=4

下面的赋值范例说明了右侧必须与修改后的左侧部分匹配。右侧的数据类型必须能够强制转换成左侧的数据类型，如从整数到实数或从实数到字符串。不能从Complex强制转换成实数。

ArrayA[2:4] = ArrayB (ArrayB必须是有三个要素的一维数组。)

ArrayA[2, 3, 4:5, 7, 8:9] = ArrayB (ArrayB必须是大小为2 x 2的两维数组。)

Rec[3:4].field = ArrayB (ArrayB必须是有两个要素的一维数组。)

Rec[3:4].field[4:5] = ArrayB (ArrayB必须是大小为2 x 2的两维数组。)

在赋值左侧，不允许不明确使用记录数组。如果Rec是记录数组，那么表达式Rec.A=2将导致错误，请求使用完整的明确语法Rec[*].A=2。如果Rec是标量记录，B是数组，那么Rec.B=2会发生类似的错误；得到的提示将要求使用明确的Rec.B[*]=2。

备注

在VEE 4.0及更高版本中，Set Values和Set Field对象实际上是带有赋值表达式的Formula对象。这些对象的定义不同于以前版本的VEE。在VEE 3.x及以前版本中编写的使用Set Values和Set Field对象的现有程序将保留以前的定义。

赋值中的全局变量和局部变量

Formula对象中的赋值可以用表达式改变全局变量和局部变量的值，如A=2或GlobalA[5]=2。由于变量可以是未声明全局变量、声明全局变量或局部变量、或直接设置的局部变量，因此Formula对象将使用下面的优先顺序查找变量A：

1. 作为输入端的局部变量，这会覆盖输入端值，包括其类型和形状。

2. 作为输出端的局部变量。这个变量创建、并放在输出端上。

3. 全局变量。变量必须已经存在。完全改变其值，包括其类型和形状。

根据这些规则，如果Formula包含赋值tmp=2，其中tmp未能满足上述标准之一，那么会发生错误。

为全局数组和记录赋值要更加注意，因为这些变量可以是未声明变量或声明变量。在使用Set Variable之类的对象创建时，或使用Declare Variable声明时，会存在全局变量。对未声明全局变量，可以使用赋值表达式改变其类型和形状；但是，对声明全局变量，赋值右侧必须强制转换成全局的声明类型。

非常重要!

在使用Declare Variable对象声明全局数组或记录变量时，必须在整体上初始化整个变量，然后才能改变全局变量的一部分。下图显示了在Formula中的赋值改变各个部分前声明和初始化了GlobalAry变量。

端上的数据容器内容

Formula对象输入端和输出端影响着赋值改变变量值的方式。Result输出端上的数据容器包含着赋值表达式左侧修改后的部分，包括任何数据类型和形状变化。在表达式为ArrayA[2:4] = ArrayB[5:6]的Formula中，Result输出端包含着ArrayA[2:4]，带有ArrayB[5:6]中的值。在表达式ArrayA[2]=4、其中ArrayA数据类型是Complex中，输出端的ArrayA[2]值转换成Complex (4,0)。

可以使用下面的输出端名称：

Result是Formula上默认的输出端。它是一个预留的名称，包含着赋值表达式的结果。可以删除Result，使用其它输出，然后再在需要时再重新添加Result，但不能重命名输出端Result。

输入端名称。这个值从输入中复制。如果在赋值中改变，那么输出上使用新值。变量必须存在、并有一个值，然后才能作为输入端名称使用。

赋值表达式创建的局部变量名，如tmp=2创建的tmp。

可以使用Formula上额外的输出端，从对象中获得修改后的数组或记录的各个部分。这可以把变量的修改部分传出一个端，把整个变量传出另一个端。为在输出端获得整个数组或记录，可以在赋值表达式中使用全局变量，或在数组或记录的Formula对象中添加一个输出端。如果存在没有赋值的输出端，那么会发生错误。

将忽略数组上的映射，除非修改整个容器。例如，ArrayA[2:4] = ArrayB[2:4]不会修改ArrayA上的映射。但A = ArrayB[2:4]将设置A上的映射，因为它被ArrayB替换。

错误恢复

由于Formula可能包含一系列表达式，包括赋值和其它运算，因此其以某些方式处理错误。如果赋值或其它运算完成，然后后面的表达式发生错误，那么将不会撤消前面的表达式。如Formula中的表达式Global[2]=24; 2/0。Global[2]设置成24，然后除以零，发生错误。VEE将不会把Global[2]设置回到以前的值。

备注

如需了解使用赋值运算的相关程序，请参阅Help [image] Contents [image] How Do I ?/font> [image] Work with Data部分，然后查看Working with Arrays (如改变数组中的值)及Working with Variables下的相关内容。

另请参阅

在VEE中使用ActiveX Automation, 在VEE中使用ActiveX控件


使用二元运算符

二元运算符集合有多种额外的条件和指导准则。在Type: Operators的Function & Object Browser的下述类别中可以看到二元运算符：

Category: Arithmetic

a + b

a - b

a * b

a / b

a ^ b (指数)

a mod b (模数 - 返回除法的余数)

a div b (整除 - 没有余数)

Category: Comparison

a ~= b

a == b

a != b

a < b

a > b

a <= b

a >= b

Category: Logical

a AND b

a OR b

a XOR b

NOT a (一元运算符，其指导准则与二元运算符相同)

在数组上使用二元运算符时，数组大小、数组形状和数组映射(如有)必须匹配。对Coords，每个Coord的独立变量的值必须匹配。

二元运算符的优先次序

这个列表列出了二元运算符的优先次序，优先次序从高到低，同一级别上列出了优先次序相同的运算符。

1. 用来对表达式分组的圆括号( and )

2. ^

3. unary minus -

4. * / MOD DIV

5. + -

6. ~= == != < > <= >=

7. NOT

8. AND

9. OR XOR

数据类型转换

对二元运算符，输入值晋级到最高的数据类型，然后执行运算。输出的数据类型是最高的数据类型。例如，在复数(2, 3)加上字符串"Dog"时，"Dog"+(2,3)，得到字符串"Dog(2, 3)"。

备注

这一规则有一个例外。在把Text字符串乘以Int32时，结果是重复的字符串。例如，"Hello"*3返回HelloHelloHello。在这种情况下不会进行数据类型晋级。

数据类型顺序(从最高到最低)是：

1. Object

2. Record

3. Text (Enum作为Text处理)

4. Spectrum

5. PComplex

6. Complex

7. Coord (不会转换到任何其它可能的数字类型)

8. Waveform

9. Real64

10. Real32

11. Int64

12. Int32

13. Int16

14. UInt8

15. Boolean

16. Variant

Variant数据类型不"固定"为具体的数据类型，它可以是需要的其它数据类型之一。

Object考虑因素: Object不会自动降级到其它类型。Object本身不支持任何二元运算，但由于大多数Object的默认属性是String或Integer值，因此可以在Object上进行大多数运算。其区别在于，您要在默认属性上完成运算。如需与Object及其怎样在VEE中与ActiveX automation一起使用，参阅在VEE中使用ActiveX Automation和在VEE中使用ActiveX控件。

Record考虑因素: Record在所有数据类型中的优先次序最高，但只能使用特殊对象，如Build Record，才能把其它数据类型转换成Record数据类型。Record将不会自动降级到其它类型，其它类型也不会自动晋级到Record类型。

二元运算符支持记录和其它数据类型组合，但在这种情况下它们总是返回一个记录。在记录上和非记录上进行二元运算将把非记录运算应用到记录中的每个字段。例如，记录R有两个字段：A是一个标量实数，值为(2.0)；B是一个标量Complex，值为(3,30)。表达式R+2将生成一条记录R，它有两个字段：A是标量实数，值为4；B是标量Complex，值为(5,30)。如果不能在记录中每个字段上执行运算，那么会发生错误。

在记录和任何其它类型上进行二元运算将返回具有相同"计划"的记录，因此得到的记录拥有相同的字段、相同的名称、类型和形状。二元运算可能不会改变记录字段的类型或形状。例如，记录R有两个字段：A是一个标量实数，B是一个标量Complex。表达式R+(2,3)将导致错误。VEE先试着把(2,3)加上R.A，然后对R.B进行同一运算。由于R.A字段是实数，R.A+(2,3)的结果是Complex，因此会发生错误。Complex不能降级到实数，存储回到R.A中。

在使用数组的记录上进行二元运算会把记录处理成优先次序高于数组。例如，[1,2,3] + [3,4,5]生成[4,6,8]，因此数组逐项组合在一起。但是记录的优先次序要高于数组。这意味着，如果R是有两个字段A和B的记录，表达式R + [1,2]将试着把数组[1,2]加到R的每个字段中。它将不会把1加到R.A中，把2加到R.B中。

在把数组与记录数组组合在一起时，情况会变得更加复杂。例如，假设R是记录1D数组，长为2，有三个字段A, B和C。表达式R + [1,2,3]或表达式R + [1,2]将把整个数组加到R每个要素的每个字段A, B和C中。尽管R是一个数组，但它是记录这一事实要更加重要。

在两个记录上进行二元运算将把逐个字段组合起来，因此两个记录的"计划"必须相同。也就是说，每个记录必须拥有相同数量的字段，每个字段必须有相同的名称、类型和形状，且采取相同的顺序。

如果想在字段A中加1，在字段B中加2，依此类推，最简便的方式是使用多个赋值(参阅Assignment)。在Formula对象中，输入表达式R.A=R.A+1,R.B=R.B+2，然后可以在程序中使用R.A和R.B及其新值。

Coord考虑因素: Coord数据类型有相关的一些特殊规则：

尽管整数和实数数据类型的数组可以晋级到Coord，但Coord不能转换成任何其它数字类型。

在没有映射的数组转换成Coord时，将从数组索引中创建独立的Coord值(第一个Coord字段)；相关Coord值(最后的Coord字段)包含着要素值。例如，如果数组A转换成Coord，且A中包含[1,5,7]，那么它会转换成包含[(0,1),(1,5),(2,7)]的Coord数组。

在映射的数组转换成Coord时，独立Coord参数位于映射的低值到Xmin+(Xmax-Xmin/N)*(N-1)值之间。

Spectrum考虑因素: 如果选择使用dB标度，必须自己跟踪标度。尽管dB标度的数据正确显示(Waveform (Time)显示画面上除外)，但许多数学函数，如fft(x)、ifft(x)及涉及PComplex数字的函数在dB标度的数据上不能正确运算。如果需要使用这些运算，应先把dB标度的数据转换成线性标度，然后再进行运算。

在使用特定的dB单位时，某些数学函数提供了有意义的结果，但只适用于这些单位的限制范围以内。例如，如果把20加到dBW标度的Spectrum，那么20将加到每个要素的幅度中(其效果与把Spectrum转换成线性标度，然后再把每个要素乘以100，然后再转换回到dBW相同)。

Variant考虑因素: 二元(+-*/, 等)求解和函数结果不能是Variant。

在表达式b=a中，b的类型与a相同，即使其是一个Variant。

在表达式b=a+2中，不管a是什么，b永远不是Variant。

在表达式b=sin(a)中，不管a是什么，b永远不是Variant。

函数func(2+a)总是发送一个非Variant，而不管a是什么。

如果a是一个Variant，函数func(a)将发送一个Variant。

仅变量名称a、一元运算符-a或圆括号(a)不会改变a的数据类型。

数据形状考虑因素

对两个运算对象(输入)都是数组的二元运算，数组的大小和形状必须匹配。运算结果是大小和形状与输入数组相同的数组，关系运算符除外(==, <, 等等, 其总是返回标量)。如果数组拥有不同的维数或大小不同，VEE将返回错误。例如，[1,2] + [1,2,3]会返回错误。

如果在标量和数组上进行运算，那么处理标量的方式就象标量是大小和形状与数组运算对象相同的常数数组一样。例如，2 + [1,2,3]作为[2,2,2] + [1,2,3]处理，结果是[3,4,5]。

在n维数组转换成Coord时，Coord数据形状是一个Array 1D，在每个Coord要素中有n+1个字段。


显示测试数据

下表介绍了不同VEE对象的显示功能。

显示 | 说明
字母数字 | 显示文本或数字值。要求SCALAR, ARRAY 1D或ARRAY 2D。
蜂鸣 | 提供听得见的声音，突出显示程序中的某个位置。
复平面 | 在实数对虚数据轴上显示复数, 极坐标复数(PComplex)或坐标数据值。
指示灯 => Meter, Thermometer, Fill Bar, Tank, Color Alarm | 所有这些指示灯都显示数字及其名称的图形表示。它们都有色码范围，通常是三个范围，但仪表有五个范围。Color Alarm可以仿真LED，在每个范围的告警中闪烁文本信息。
标签 | 用来在Panel View中贴上文本标签的对象。在Panel View中，通过对象菜单中的Properties...，可以简便地调节颜色和字体。
登录字母数字 | 在重复登录时，显示文本或数字值。要求SCALAR或ARRAY 1D。
写字板 | 使用文本注释阐明程序。
图片 (PC) | 用来把图像放在Panel View上的对象。支持的格式包括：*.BMP (位图), *.GIF (GIF87a和GIF89), *.JPEG, *.PNG和*.WMF (Windows图元文件)
极坐标图 | 在为半径和角度数据提供单独的信息时，以图形方式在极坐标上显示数据。
频谱 (频率) | 包含频域画面的菜单：幅度频谱, 相位频谱, 幅度对相位(极坐标)和幅度对相位(Smith)。输入必须是波形, 频谱或坐标数组。波形输入通过快速傅立叶变换(fft)自动转换成频域信息。
带状图 | 以图形方式显示程序运行时连续生成的最新数据历史。对每个y输入值，x值递增指定的步进尺寸。在新数据离开显示屏右侧时，显示画面会自动滚动，显示最新数据。
波形(时间) | 以图形方式显示实时域中的波形或频谱。频谱使用反向快速傅立叶变换(ifft)自动转换成时域信息。x轴是输入波形的取样单位。
X与Y图 | 在为X和Y数据提供单独的数据信息时，以图形方式显示取值。
XY轨迹 | 在使用均匀间隔的x值生成y数据时，以图形方式显示映射的数组或取值集合。自动生成的x值取决于轨迹数据的数据类型。例如，Real轨迹会生成均匀间隔的Real x值；而Waveform轨迹会在不同时间生成不同的x值。


关于变量

VEE中有两种变量：未声明变量和声明变量。这两种变量都可以包含任何数据类型，包括复合数据类型，如波形和记录。它们也可以是任何数据形状，包括标量和数组。

关于未声明变量

未声明变量使用起来最简便，但执行速度比较慢，不允许确定范围(参见下面的关于声明变量)。未声明变量包括：

• 可以在程序中任何地方使用的全局变量。这些变量使用Set Variable对象创建。如果在PreRun属性下设置Delete Variables，那么在程序运行前将删除这些变量。必须先创建全局变量，然后才能通过Get Variable对象访问这些变量或把这些变量用于表示式中，否则程序会发生错误。

如果用户不知道取值将是哪种数据类型或形状，或者如果取值可能会改变类型或形状，那么可以使用未说明全局变量。如果用户希望确定范围的变量(即局部变量)，那么可以使用声明变量 (参见关于声明变量)。

• 只用于 Formula 对象中的临时变量。通过增加输出端，用户可以在Formula中创建临时变量，如tmp。例如，为在Formula对象的端a和b之间交换输入值，可以使用临时变量tmp。表达式的形式将类似于tmp=a, a=b, b=tmp。如需与临时变量有关的更多信息，请参见指配。

• 作为对象内部的变量使用的端名称(如在交易或Formula对象中)。

关于声明变量

声明变量是在使用之前定义的变量。它们增加了确定范围的特点，使VEE运行速度更快，因为在运行时之前数据类型和形状是已知的。但是，如果用户对声明变量的设置值不同于说明中设置的数据类型或形状，那么程序将发生错误。

为声明变量，使用Data Þ Variable Þ Declare Variable对象。在放到上下文中时，它会在任何其它对象执行前声明变量。在已经说明了变量时，只有在通过Set Variable或Formula对象进行设置时才会有取值。

必须在Declare Variable对象中指明声明变量的范围。确定的范围如下：

• Global – 这种变量可以用于程序中的任何地方。

• Local to Context – 这种变量只能用于单个UserObject或UserFunction中，或用于Main中。这种变量可以用于Declare Variable对象所在的上下文及嵌套在上下文内部的UserObjects中。这种变量不能用于从上下文调用的UserFunctions中。

• Local to Library – 这种变量只能用于使用Declare Variable对象的UserFunctions程序库内部。Declare Variable必须位于其中一个UserFunctions中。

不能定义名称和范围相同的多个变量，否则会发生错误。

关于变量命名

变量可以使用任何有效的变量名称。第一个字符必须是字母。名称其余部分可以使用字母、数字和下划线字符。变量名称不分大小写(大小写均可)。不允许使用特殊字符，包括空格。

为提取变量值，必须使用说明或设置变量时指定的名称。

在Default Preferences中的Execution Mode设为VEE 5模式或更高时，某些名称必须是唯一的。在Execution Mode设为VEE 4或VEE 3模式时，在命名的变量名称与另一个变量名称相同时，会出现优先问题。优先顺序(从最高到最低)如下：

1 输入端名称 (如在Formula或交易对象中)

2 临时变量(如在Formula对象中)

3 Local to Context 声明变量

4 Local to Library 声明变量

5 全局声明变量

6 全局未声明变量

如果两个名称相同的变量位于一个对象中，那么会发生冲突，在这种情况下将使用优先权最高的变量。

另请参见

执行模式，创建变量，使用变量，设置初始值，存取变量值，在库中使用变量


用户定义的函数概述

VEE有三种用户定义的函数。下面概括介绍了每种函数：

1 UserFunctions

• 为创建UserFunction，可以选择Device [image] UserFunction，或点击Edit [image] Create UserFunction，选择多个对象。

• 为从程序不同位置调用UserFunction，可以使用Call myFunction (Device [image] Call)对象，或在对象内部使用表达式(如从Formula中)。还可以使用UserFunction对象菜单，选择相应选项，如Generate [image] Call，从UserFunction在Main程序中生成调用对象。

• 为编辑UserFunction，可以点击Edit [image] Edit UserFunction... ，从出现的列表窗口中选择相应的UserFunction。

• 为把UserFunction从一个程序传送到另一个程序，可以在程序开发过程中合并多个UserFunction，或在运行时导入多个UserFunction (Device [image] Import Library)。

2 Complied Function

• 为创建Complied Function，使用汇编语言在VEE外面操作，然后把函数放到程序库中，如DLL。

• 为把Complied Function链接到程序上，可以使用Import Library对象，它在运行时把程序库链接到VEE上。(如需更详细的讨论，请参阅“ 优化Agilent VEE程序 )。

• 为调用Complied Function，可以使用Call myFunction对象，或在VEE对象内部编写一个表达式。

3 远程函数

• 远程函数与UserFunction类似，但它们在网络上连接的远程主计算机上运行。

另请参阅

实验9-1: UserFunction操作，实验9-2: 创建和合并UserFunction库，实验9-3: 导入和删除库，实验9-4: 合并柱状图显示程序，在大型程序中查找函数，合并Agilent VEE程序


关于UserFunctions

UserFunction是为创建用户自定义函数专门设计的。通过从Device菜单中选择UserFunction或把现有对象或UserObject转换成UserFunction，可以创建UserFunction。

可以在程序中使用Call对象(Device Þ Call)或下面确定的其它对象来调用UserFunction。UserFunction可以保存在库中，并使用Import Library对象导入到程序中。

创建UserFunction和使用UserObject相比，其优点是可以在程序中多次调用同一个UserFunction。因此，用户只需编辑和维护一个UserFunction，而不是一个UserObject的多个实例。

在VEE 4或更高的Execution Mode下执行时，从Call, Formula, If/Then/Else或Sequencer对象中(仅从Function字段中)调用UserFunction时, 它会进行时间分片。

从To File, To String或类似对象中调用UserFunction时或通过控制端提供Formula对象的公式时,UserFunction不进行时间分片。

UserObjects和UserFunctions之间的差异

VEE之所以同时提供UserObject和UserFunction，是因为这两者拥有不同的特点，因此可以用于不同的目的。下面介绍了UserObject和UserFunction之间的差异：

UserObject (位于Device [image] UserObject下)是用户定义的、在VEE中可以象任何其它对象一样使用的对象。用户可以象子程序一样对UserObject编程，但它一直以图形方式保留在屏幕上。如果用户想在程序中其它地方使用它，那么必须对它进行复制，并保存所有拷贝。注意，如果多次复制UserObject，程序会变得比较大，加载起来比较慢。当在一个UserObject中增加某个特性时，如果用户希望其所有拷贝保持完全相同，那么必需将这一特性添加到其所有拷贝中。

而UserFunction (位于Device [image] UserFunction下)在内存中只有一个子例程拷贝. 只有在用户希望时，它才以图形方式在工作空间中显示其窗口。否则，它会被存储，以便从Call对象或任何其它表达式字段中调用。程序中调用某一UserFunction的所有例程都将继承该UserFunction的变化。用户还可以创建UserFunction库，以便更多地重用代码。

另请参阅

UserObjects和UserFunctions之间的转换，从表达式中调用UserFunction，创建UserFunction程序库，使用函数库，导入和调用UserFunction


Compiled Function概述

可以在VEE程序中使用Compiled Function ，如DLL (动态链接库)。为此，必须获得Compiled Function或根据下述步骤创建Compiled Function：

1 在C, C++, Fortran或Pascal中编写函数，然后汇编这些函数。

2 为函数编写一个定义文件。

3 创建一个包含Compiled Function的共享库。

使用Compiled Function的优势

在VEE程序中使用Compiled Function提供了下述优势：

• 加快执行速度

• 利用当前使用其它语言编写的测试程序

• 使用其它语言开发数据过滤器，并把它们集成到VEE程序中

• 获得专有例程

备注

增加Compiled Function在开发流程中增加了复杂度。因此，只有在下述情况没有提供您所需的功能或性能时，才使用Compiled Function：VEE UserFunction, Execute Program换到操作系统, 或ActiveX Automation调用另一个程序。

使用Compiled Function设计考虑因素

如果您打算在VEE程序中使用Compiled Function，应考虑下述信息：

• 可以使用操作系统中提供的任何辅助工具，包括数学运算例程、仪器I/O等等。但是，不能从要链接的程序内部存取任何VEE内部变量。

• 必须在Compiled Function内提供检错功能，因为VEE不能捕获外部例程中的错误。

• 必须解除分配外部例程中分配的任何内存。

• 在把数据传送到外部例程时，一定要把Call对象输入端配置成例程要求的数据类型和形状。

• 系统I/O资源可能会被锁定，因此外部例程应能够处理这类事件。

• 如果外部例程接受数组，那么对其将要检查的数据类型必须有一个有效的指针。此外，例程必须检查数组的长度。如果例程改变了长度，那么您必需把新的长度传回VEE程序。

• Compiled Function必须使用return()语句作为最后语句，而不是exit()。如果退出Compiled Function，那么也将退出VEE，因为Compiled Function被链接到VEE上。

• 如果覆盖数组的边界，那么结果取决于使用的语言。在执行边界检查的Pascal中，将发生运行时错误，停止VEE。在没有边界检查的C语言中，结果不可预测，但可能会导致间歇性数据损坏或导致VEE崩溃。

使用Compiled Function指导准则

在VEE程序中使用Compiled Function时，遵循下述指导准则：

• 象调用UserFunction一样调用和配置Compiled Function。可以使用Select Function从Call对象菜单中选择希望的函数，也可以输入名称。不管是哪种情况，提供的VEE都会识别函数，并自动配置 Call Function对象的输入端和输出端。必要的信息由定义文件提供。(如果已经导入库，VEE将识别它。)

• 在对象菜单中选择Configure Pinout，重新配置Call输入端和输出端。不管是哪种方法，VEE都为Call对象配置函数要求的输入端及函数据返回值使用的Ret Value输出端。此外，将有一个输出端与参考传递的每个输入相对应。

• 按名称从Formula对象的表达式中或从运行时求解的其它表达式中调用Compiled Function。例如，通过在To File处理中在表达式内包括其名称，可以调用Compiled Function。

备注

从表达式内部只能获得Compiled Function的返回值 (Call对象中的Ret Value)。如果想获得函数中返回的其它参数，那么必须使用Call对象。

• 在Device菜单中使用Delete Library对象，删除Compiled Function库。通过使用Import Library, Call和Delete Library对象，在程序完成调用时导入和删除函数库，可以缩短程序加载时间，节约内存。

另请参阅

导入和调用Compiled Function，Definition文件， 构建 C 函数，Execute Program对象与Complied Function比较


Definition文件

Call对象或Formula表达式决定着它应根据Definition文件的内容传送到函数中的数据类型。Definition文件定义了函数返回的数据类型、函数名称和函数接受的自变量。数据的形式如下：

<return type> <function name> (<type> <paramname>, <type> <paramname>, ...) ;

其中：

• <return type>可以是：byte, int, short, long, int64, float, double, char*, VEE_BOOL,或 void。

• <function name>可以是一个由一个字母字符后面跟着字符数字字符的字符串，最长总共512个字符。

• <type>可以是：byte, int, short, long, int64, float, double, VEE_BOOL, byte*, int*, char*, short*, long*, int64*, float*, double*, char**, VEE_BOOL*, 或 void.

• <paramname>可以是一个由一个字母字符后面跟着字符数字字符的字符串，最长总共512个字符。参数名称是可选的，但推荐使用参数名称。如果参考传送一个参数，那么参数名称前必须有间接符号(*)。

有效的返回类型是：

• 字符串 (char*, 与VEE Text数据类型对应)

• 整数 (byte, short, int, long, int64, VEE_BOOL, 与VEE Uint8, Int16, Int32,Int64, 和 Boolean 数据类型对应)

• 单和双精度浮点实数(float和double与VEE Real32和Real64数据类型对应)

如果在参数名称前加上*，为某个参数指定"pass by reference"，那么VEE将把信息地址传送到函数中。如果没有*，为某个参数指定"pass by value"，那么VEE将把值(而不是值的地址)复制到函数中。如果外部例程改变数据，以传回VEE，那么您需要参考传送数据。必须参考传送所有数组。

参考传送到Compiled Function的任何参数都作为Call对象上的输出端提供。输出端将是函数返回值的Ret Value，外加参考传送的每个输入参数的输出。

VEE在堆栈上推送144个字节。这允许把最多36个参数参考传送到Compiled Function。可以按值传送最多36个长整数参数或18个双精度浮点参数。

VEE允许在Definition文件中同时使用"enclosed"注释和"to-end-of-line"注释。

"Enclosed"(封闭)注释使用分隔符序列/*comments*/，其中/*和*/分别表示注释的开头和结尾。

"To-end-of-line"(行尾)注释使用分隔字符//，表明运行到当前行尾的注释开头。


Execute Program对象与Complied Function比较

在决定是使用Execute Program对象还是使用Complied Function把汇编的语言程序与VEE集成起来时，考虑下述信息。

Execute Program对象

Execute Program对象的特点如下：

• 使用比较简便

• 启动时间比较长

• 地址空间受到保护

• 可以选择同步执行或异步执行

• 异步事件服务

• 比较安全 (如果调用的程序崩溃，您会得到一条错误信息)

• 更适合连续数据采集

Complied Function

Complied Function采用Import Library和Call对象， 其特点如下：

• 启动时间短

• 通过传递与VEE共享的堆栈和存储空间实现通信

同步执行

• 不会阻塞或导致信号和异常条件(如GPF信息)

• 要求正文语言汇编程序

• 使用比较复杂。使用风险较多。(出界数组错误或覆盖内存会导致VEE崩溃。)


Sequencer

执行一系列序列事务的对象，每个序列事务可以调用一个UserFunction、Compiled Function或Remote Function。

用途

通过指定一系列序列事务，使用Sequencer控制调用一系列UserFunction、Compiled Function、Remote Function或任何其它VEE函数的顺序。一般来说，Sequencer用来执行一系列测试。

Sequencer包含着序列事务的列表。每个事务对VEE表达式求解，其中可能包含UserFunction、Compiled Function或Remote Function调用。在对VEE表达式求解后，事务比较该表达式返回的值与测试规范。根据是否通过测试，事务会对不同表达式求解，选择要执行的下一个事务。事务可以选择性地把结果记录到Log输出端，或记录在Properties窗口Logging类别上指定的UserFunction、Compiled Function或Remote Function。

在序列完成时，可以使用Sequencer的Return输出端返回结果。在默认情况下，Return输出端的值为零，但Next Operation是Then Return的事务将把Return输出端设置为指定值。

定序器的Log输出端包含一个记录，对已经启动登录的每个事务包含一条登录记录。如需更多信息，参阅 "Logging栏"的"Properties"。

Open View参数

open view显示了要执行的事务列表。

对话框信息

可以改变各个事务的参数。只需双击一个事务，就可以显示该事务的Sequence Transaction对话框。提供的参数如下：

Sequence Mode:

TEST - 执行指定表达式，针对规范测试结果。(如果表达式调用UserFunction、汇编函数或Remote Function，那么将使用相应的UserObject最上面输出端上的结果。)

EXEC - 执行指定表达式，针对规范执行通过/未通过测试。在 EXEC 事务上从来不执行记录。

Transaction Name - 事务唯一的名称，不能与任何UserFunction相同。必须是有效的VEE变量名(必须以字母开头，但可以包括字母和数字)。这一事务或其它事务中的表达式可以参考这个名称，它将包含最新执行的这一事务的登录记录。

Enable Condition Type:

ENABLED - Sequencer无条件地执行这一事务。

DISABLED - Sequencer从不执行这一事务。

ENABLED IF: - 只有在给定表达式不为零时，Sequencer才执行这一事务。

DISABLED IF: - 如果给定表达式不为零，Sequencer不执行这一事务。

SPEC NOMINAL: - 测试结果的标称(预计)值。在计算RANGE或LIMIT规范测试时不使用这个值，但这个值可以包括在登录记录中。

Spec Type - 所有规范测试的完成方式与Comparator对象相同。因此，测试结果可以是一个波形，测试极限可以是另一个波形或Coord类型的数组。规范测试将自动执行必要的插补，确定每个数据点是落在规范内还是落在规范外。此外，所有测试都使用"约等于"算法，检查至少6个有效位是否相等或不相等。如需更多信息，请参阅Comparator对象说明。选项包括：

RANGE: - 指定应用的上下限和比较运算符。

LIMIT: - 指定应用的单个极限和比较运算符。可以用来测试上限或下限或是否完全匹配。HighLimit记录字段将登录极限值。

TOLERANCE: - 指定与Nominal值的加减容限。允许容限值为零。在容限应用到Nominal值以后，HighLimit和LowLimit登录记录字段包含规范范围。

%TOLERANCE: - 指定与Nominal值的加减百分比容限。允许容限值为零。在容限应用到Nominal值以后，HighLimit和LowLimit登录记录字段包含规范范围。

FUNCTION - 指定测试的一个VEE表达式。表达式可能只是UserFunction、Compiled Function或Remote Function调用，也可以是由输入端名称 、UserFunctions、Compiled Functions、Remote Functions、变量和这个Sequencer以前事务中的测试记录组成的更大的表达式。如果这是测试事务，那么可以针对规范测试来自这个字段的单一结果。UserFunction或Remote Function调用结果是相应UserObject最上面的输出端的值，如果不存在输出端则为空。

Logging Mode:

LOGGING ENABLED - 把这个事务的字段添加到Log记录输出端(如有)。如果已经在 Properties窗口的Logging栏中指定了"Log Each Transaction To:"程序，那么在这个事务结束后将立即调用登录程序。

LOGGING DISABLED - 将不为这个事务生成登录记录，将不调用"Log Each Transaction To:"程序。(参阅"Properties"下的"Logging tab"，了解选项和更多信息。)

Pass Operation:

IF PASS - 如果通过规范测试(测试值位于极限范围内)，那么将执行指定的"then"操作。

IF PASS CALL: - 如果通过规范测试(测试值位于极限范围内)，那么将对指定的VEE表达式求解，并执行指定的"then"操作，VEE表达式中可能包括UserFunction、Compiled Function或Remote Function调用。(忽略IF PASS CALL返回的值。)

Fail Operation:

IF FAIL - 如果未通过规范测试(测试值位于极限范围外)，那么将执行指定的 "then"操作。

IF FAIL CALL: - 如果未通过规范测试(测试值位于极限范围外)，那么将对指定VEE表达式求解，并执行指定的"then"操作，VEE表达式中可能包括UserFunction、Compiled Function或Remote Function调用。

Next Operation: (适用于EXEC事务，或适用于TEST事务中的"Pass"或"Fail"操作。)

THEN CONTINUE - 转到Sequencer列表中的下一个事务。(这是默认操作。)

THEN RETURN - 退出执行这个Sequencer中的事务，把指定表达式的值(可以调用一个函数)放在Sequencer的Return输出端上。然后Sequencer对象将启动输出端，程序内部的执行流程将继续正常进行。

THEN GOTO - 转到这个Sequencer中带有指定事务名称的事务。

THEN REPEAT - 再次执行这个事务，一直重复到指定次数。如果在最低重复次数后仍存在Pass/Fail条件，那么继续下一个事务。

THEN ERROR - 使用给定错误号生成错误条件，停止执行Sequencer。可以使用这个Sequencer上的Error输出端或在任何密封的UserObject上捕获错误。

THEN EVALUATE - 对给定表达式求解，这个表达式可能会调用UserFunction、Compiled Function或Remote Function；使用字符串结果确定下一个操作。表达式的有效字符串结果是：

CONTINUE
RETURN <expr>
GOTO <name>
REPEAT <expr>
ERROR <expr>

其中：<expr>是任何有效的VEE表达式，<name>是这个Sequencer中的事务名称。在UserFunction(可能有用户交互)需要确定Sequencer下一步应执行哪项操作时，可以使用这一操作。

DESCRIPTION - 这个事务的"Comment"字段。在这个字段中输入的文本将显示在Sequencer open view中事务缩写文本的末尾。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

属性

LogRecordField: 选择将在登录记录中为每个事务生成哪些字段。(Log输出端包含记录的记录 -- 在启用登录时每项事务一条登录记录。在每项事务登录操作中，可能会有下面指定的选定字段。) 名称(没有空格)是登录记录的字段名。选项包括：

 LogName - 识别这个事务的唯一字符串(不是程序名称)。

 LogResult - 对测试程序求解返回的值。

 LogNominal - 标称测试值。

 LogHighLimit - 规范测试中使用的上限。为Tolerance和%Tolerance规范提供实际极限值，而不是偏置。

 LogLowLimit - 规范测试中使用的下限。为Tolerance和%Tolerance规范提供实际极限值，而不是偏置。

 LogPassed - 一个Int32值，"Pass"的值为"1"，"Fail"的值为 "0"。

 LogTimeStamp � 一个实数值，包含测试结束的周几、日期和时间。

 LogDescription - Transaction中包含描述"comment"字段的Text值。

LoggingControl Category:

LogToOutputOnly - 在启动Logging Enabled的每个事务的Log输出端上的记录中，将存在一条登录记录。如果在一个Sequencer执行过程中，事务执行了一次以上，那么将只在Log输出端的记录上存在该事务最新的登录记录。如果在Sequencer执行过程中没有执行事务，那么该事务的登录记录将对除Name和Description字段及Pass字段以外的每个字段包含"0" (Real64)值，Name和Description字段将包含空字符串，Pass将包含一个Int32值。

LogToFunction - 指定在启动Logging Enabled的每个事务后面将调用的UserFunction、Compiled Function或Remote Function表达式。如果想把当前事务的登录记录传送到UserFunction、Compiled Function或Remote Function，可以使用预留的变量名"ThisTest"。Log输出端将以与"LogToOutputOnly"模式相同的方式继续操作。

备注

可以添加一个ExecTrans数据输入端。ExecTrans数据输入只使用数据输入上的Text标量或1D数组提供的顺序，执行指定名称的事务。高亮度显示条将移动到目前正在执行的事务上。将照常对IF Pass或IF Fail表达式求解，但Then字段的结果对执行的下一个事务没有影响。

所有字段表达式(如ENABLED IF, FUNCTION或规范极限)可能包含输入端名称、UserFunction调用、Compiled Function调用、Remote Function调用、VEE数学函数或以前运行的事务的记录名称。在启动LOGGING ENABLED的测试事务中，预留的变量thisTest将包含已经计算的登录字段的记录。例如，为使用来自test4的测试值(其已经启动登录)，可以在任何表达式中使用名称test4.result。或为了在任何表达式中使用当前名称，可以使用thisTest.name。或Enabled If表达式可以是random()<0.25，导致测试只执行25%的时间。

注意，在"ENABLED IF"表达式中不应使用"thisTest"变量，因为只有在事务确定是否启动时才能正确创建这个变量。因此，在"ENABLED IF"表达式中使用"thisTest"将出现thisTest尚未创建的错误信息，或thisTest可能会存在上一个事务中的"过时"数据。

快捷方式

为迅速插入一个事务，把光标放在事务上。按Insert键在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow key或Down Arrow键。

位置

Device [image] Sequencer

另请参阅

Build Record, Call, Comparator, Formula, Raise Error, UnBuild Record, UserObject, Object Menu和

编辑事务


Sequencer对象

Sequencer对象位于Device菜单中。为有效使用Sequencer对象，应了解几个方面的内容，包括：

• Instrument I/O Operations (参阅Help [image] Contents and Index [image] Tell me about... Instrument Control Fundamentals)

• Transactions (参阅Help [image] Contents and Index [image] Tell me about... I/O Transactions)

• UserObjects (参阅Help [image] Contents and Index [image] Tell me about... Propagation [image] Propagation in UserObjects)

• Records和 DataSets (参阅Help [image] Contents and Index [image] How Do I... Work with Data [image] Working with Records, 及Working with DataSets)

• UserFunctions (参阅Help [image] Contents and Index [image] How Do I... Create Custom Objects and Functions [image] Creating and Using UserFunctions)

什么是Sequencer对象?

Sequencer对象控制着一系列测试的顺序。其完成方式是先执行一项测试，然后把每项测试的结果与规范进行对比，然后使用对比结果确定下一项操作。

Sequencer对象执行一系列预先确定的序列事务。每项事务对VEE表达式求解，其中可能包含UserFunctions, Compiled Functions, Remote Functions或其它VEE函数调用。事务把该表达式返回的值与现有的测试规范进行对比。根据是否通过测试，事务对不同的表达式求解，选择要执行的下一项事务。在点击事务出现的Sequence Transaction中，可以指定事务行为。

事务可以把其结果登录到Log输出端或登录到UserFunction、Compiled Function或Remote Function。在发生时可以读取结果，把结果采集在Log Record中，或同时进行这两项操作。登录操作在Logging一栏上的Sequencer Properties对话框中指定。

登录测试结果

对某些情况，必须注意把Sequencer日志记录采集到记录数组中。正如使用记录中所有解释的那样，为构建由记录组成的数组，某个字段的所有数组要素必须拥有相同的类型、形状和大小。对记录的记录，如Sequencer的Log输出端生成的记录的记录，子记录的每个字段的类型、形状和大小必须匹配。

例如，假设要采集多次执行Sequencer的登录结果，这可以使用Collector构建数组完成，也可以通过把结果发送到DataSet完成。不管是哪种情况，如果某个事务的任何登录结果在不同的Sequencer执行之间改变类型、形状或大小，那么会发生错误。Collector或To DataSet对象会生成错误，因为不能构建记录数组。

如果没有在每次执行Sequencer时执行事务，如指定的ENABLED IF条件，那么很容易会发生这种情况。如果事务没有执行，那么仍会生成日志记录，但NAME和DESCRIPTION字段是空字符串，所有其它字段包含Real标量值零。

如果在之后执行Sequencer时执行相同的事务，登录的结果不是Real标量，那么会发生错误。(在这种情况下，您可能会考虑使用To File，而不是使用To DataSet，把每条登录的记录输出写入采用容器格式的文件中。)

如果测试返回不同大小的数组，如失败的点数组成的数组，也可能会发生错误。在这种情况下，您可能想设计测试，添充数组，以便总是返回相同大小的数组。


可以调用的VEE ActiveX Automation Server

在Windows 2000和Windows XP中的VEE上，可以把VEE对象集成到使用标准语言(如MS Visual Basic或C)编写的其它商用测试系统和专有测试系统中。可以调用的VEE ActiveX自动化服务器封装VEE UserFunction，以集成到自动化应用中，如MS Excel和MS Visual Basic。可以调用的VEE ActiveX自动化服务器实现了一个独立于语言的自动化接口。支持调用自动化服务器的任何应用都可以使用这个接口。

备注

VEE可以使用ActiveX自动化和控件，从VEE控制其它应用。可以调用的VEE ActiveX自动化服务器允许其它应用(如MS Visual Basic)控制VEE。

可以调用的VEE ActiveX自动化服务器通过属性和方法与其客户端通信。从中调用可以调用的VEE ActiveX自动化服务器的环境，如Visual Basic或C，决定着调用方式。可以调用的VEE ActiveX自动化服务器在调用的环境内部提供了全面的联机帮助。

备注

可以调用的VEE ActiveX自动化服务器代替VEE 5.0版标配的可以调用的VEE ActiveX控件。

关于可以调用的VEE

在某些情况下，您可能想用另一种语言构建应用程序，同时仍使用VEE UserFunctions。正如Remote Functions允许一个VEE访问另一个VEE的UserFunction一样，可以调用的VEE允许从C程序或可以访问C例程的任何语言中调用UserFunction。

以前版本的VEE提供了两种方式，从其它开发环境中执行VEE代码：VEE RPC API和可以调用的VEE ActiveX控件。VEE 6用可以调用的VEE Automation Server代替了可以调用的VEE ActiveX控件，可以简便地从Visual Basic之类的编程环境中访问VEE代码。

备注

为运行UserFunction，必须能够在服务器系统上访问VEE，其不能自行执行。UserFunction必须整理到VEE可以加载和执行的库中。

另请参阅

使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


使用VEE RPC API

VEE提供了支持VEE RPC API所需的工具：

  • 一个名为libvapi.lib的C库位于VEE安装目录的lib子目录下。这个库链接到C程序上。

    这个库支持两个应用程序接口(APIs)。其中一个API (VEE RPC)设置和控制C程序和VEE之间的远程程序调用(RPC)。API中的函数原型    位于veeRPC.h中，执行下述操作：

  • 加载和卸载VEE服务器。

  • 加载和卸载VEE库。

  • 列出VEE库中的UserFunction。

  • 从UserFunction中调用和接收数据。

  • 执行相关状态和事务管理。

第二个API (VEE DATA)执行C数据类型和VEE数据类型之间的转换。这个API中的函数原型位于veeData.h中。

备注

在使用Borland汇编程序时，libvapi.lib库不能链接到程序上。

  • VEE Service Manager, veesm.exe与其它VEE可执行程序一起位于VEE安装目录下。它使用UserFunction处理目录VEE运行，允许远程客户端作为服务器调用VEE。

    CallableVEE\RPC_API目录下的范例程序演示了怎样使用    VEE RPC API，其名字为callVEE.c和callVEE.exe。

关于 VEE RPC API

VEE RPC API 负责处理 C 客户端程序和 VEE 服务器之间的建立、维护和关闭连接的操作。

VEE RPC API 在操作中使用下列三种句柄之一：

VRPC_SERVICE; // VEE 服务器句柄。

VRPC_LIBRARY; // VEE UserFunction 库句柄。

VRPC_FUNCTION; // VEE UserFunction句柄。

另请参阅

启动和停止服务器，加载和卸载库, 选择UserFunctions, 调用UserFunctions, 其它函数, VEE RPC API错误代码。


启动和停止服务器

最基本的API函数有两个，即启动和停止VEE服务器。

为加载VEE服务器，使用：

VRPC_SERVICE vrpcCreateService( char *hostName, char *display, char *geometry, double aTimeoutInSeconds,unsigned long flags );

这一函数在hostName提供的主机上启动VEE服务器。hostName可以采取文本形式

(例如, mycomputer@lvld.agilent.com)或数字形式(15.11.55.105)。

这一函数返回一个服务器句柄。如果发生错误，那么会返回一个NULL (实际上是零)。然后可以使用下一节介绍的veeGetErrorNumber()和veeGetErrorString()函数获得精确的错误信息。

参数 display 使用文本形式的网络地址(babylon:0.0)指定远程显示画面。

参数 geometry 指定VEE窗口大小和位置。例如，800x500+0+0把一个800x500 VEE窗口放在显示屏的左下角。

参数 aTimeoutInSeconds 给出启动服务时等待的秒数。这个值用于会话中以后的所有调用，除非vrpcSetTimeout()改变这个值。

在正常情况下，不使用标记参数。但是，可以把它的值设置为VEERPC_CREATE_NEW，在服务器上启动新的VEE拷贝，而不是使用已经启动的VEE拷贝。

为停止VEE服务器，使用：

VRPC_SERVICE vrpcDeleteService( VRPC_SERVICE aService );

唯一的参数是在最初启动服务器时获得的服务器句柄。如果一切正常，那么返回一个NULL指针，否则返回一个非NULL指针。

另请参阅

使用VEE RPC API，加载和卸载库, 选择UserFunctions, 调用UserFunctions, 其它函数, VEE RPC API错误代码。


加载和卸载库

一旦启动了服务器，您需要把库加载到VEE的远程拷贝中。这使用下面的语句完成：

VRPC_LIBRARY vrpcLoadLibrary( VRPC_SERVICE aService, char *LibraryPath );

这个函数接受服务器句柄和LibraryPath指定的UserFunction库的路径名作为参数，返回一个库句柄。如果失败，您会得到一个NULL。

一旦加载，可以使用下面的语句为库指定正常执行模式或调试执行模式：

void vrpcSetExecutionMode( VRPC_LIBRARY aLibrary, unsigned long executionMode );

在这个函数中，您为库指定一个句柄和一个executionMode标记。执行模式可以设置成VRPC_DEBUG_EXECUTION (通过目标系统上的UserFunction可以指定单步执行)；其默认的模式是VRPC_NORMAL_EXECUTION。

可以以类似方式使用下述语句卸载库：

VRPC_LIBRARY vrpcUnLoadLibrary( VRPC_LIBRARY aLibrary );

唯一的参数是库句柄。

另请参阅

使用VEE RPC API，启动和停止服务器，选择UserFunctions, 调用UserFunctions, 其它函数,

VEE RPC API错误代码。


选择UserFunctions

在连接到服务器上并加载一个库之后，您需要获得UserFunction的一个句柄。

使用下述语句获得一个函数句柄：

VRPC_FUNCTION vrpcFindFunction( VRPC_LIBRARY aLibrary, char *aFunctionName );

其输入参数为一个库句柄和一个作为UserFunction名称的字符串。返回一个函数句柄，或在发生错误时返回一个NULL。

为获得函数相关信息，使用：

struct VRPC_FUNC_INFO* vrpcFunctionInfo( VRPC_FUNCTION aFunction );

这会返回一个数据结构，或在发生错误时返回一个NULL。数据结构采取下面的形式：

typedef struct VRPC_FUNC_INFO

{

   char *functionName; // Name of function.

   long numArguments; // # of input pins on function.

   enum veeType *argumentTypes; // List of argument types.

   veeShape *argumentShapes; // List of argument shapes.

   long numResults; // # of output pins on function.

   enum veeType *resultTypes; // List of output types.

   veeShape *resultShapes; // List of output shapes.

};

如果得到一个NULL，那么它会占用进程空间中的内存，如果想去掉NULL，可以使用：

struct VRPC_FUNC_INFO* vrpcFreeFunctionInfo(struct VRPC_FUNC_INFO *funcinfo);

可以使用下面的语句确定库中有哪些函数：

char** vrpcGetFunctionNames( VRPC_LIBRARY aLibrary, long *numberOfFunctions );

其输入参数为库句柄和库中的函数数量。它返回一个指针，指向用空字符串结束的字符串数组，直接给出函数名称。如果发生错误，会返回一个NULL指针。字符串数组存在于进程空间中。

另请参阅

使用VEE RPC API，启动和停止服务器， 加载和卸载库, 调用UserFunctions, 其它函数, VEE RPC API错误代码。


调用UserFunctions

使用下面的语句调用和接收一个函数：

VDC* vrpcCallAndReceive( VRPC_FUNCTION aFunction, VDC *arguments );

这个函数将阻塞直到函数（aFunction）结束或发生超时。其输入参数为一个函数句柄和一个VEE Data Containers (VDCs)的数组。处理VDC是VEE DATA API的功能，具体可以参阅关于VEE DATA API。

在阻塞模式下调用一个UserFunction，可以使用：

long vrpcCall( VRPC_FUNCTION aFunction, VDC *arguments );

这个函数不会"阻塞"。它立即返回，而不管其是否工作。如果所有都正常，那么它返回0，否则会返回一个错误代码。

由于大多数UserFunction会在某个时候返回，因此您如想得到一个值，可以使用；

VDC* vrpcReceive( VRPC_FUNCTION aFunction, unsigned long waitMode );

其输入参数是一个函数句柄和一个waitMode标记。 该标记其可以有下面三个值之一：

• VRPC_NO_WAITING 调用立即返回，带有结果或不带结果。

• VRPC_WAIT_SLEEPING 一直等到数据超时(服务器睡眠)。

• VRPC_WAIT_SPINNING 一直等到数据超时(服务器忙)。

如果函数失败，那么会返回NULL。

另请参阅

使用VEE RPC API，启动和停止服务器， 加载和卸载库, 选择UserFunctions, 其它函数, VEE RPC API错误代码。


其它函数

这一节列出了VEE RPC API中的其它辅助函数：

  • 这个函数允许改变超时。指定一个服务器句柄和超时秒数。如果一切正常，那么返回0，否则返回一个错误代码。

long vrpcSetTimeout( VRPC_SERVICE aService, double aTimeoutInSeconds );

  • 这个函数允许设置默认的接收数据的C客户端行为：

long vrpcSetBehavior( VRPC_SERVICE aService, unsigned long flags );

其输入参数为一个服务器句柄和标记，返回0或一个错误代码。标记如下：

VRPC_WAIT_SLEEPING 一直等待数据直到超时(客户睡眠)。
VRPC_WAIT_SPINNING 一直等待数据直到超时(客户端忙)。

还可以在标记VRPC_BUFFER_EXPAND中进行OR运算，指定C客户端分配和保留更大的缓冲器，以适应服务器返回的不断提高的数据尺寸。

  • 可以使用下面的语句查询远程veesm修订版本号：

long vrpcGetServerVersion( VRPC_SERVICE aService );

其接收一个服务器句柄作为参数，返回一个修订代码或0 (如果遇到错误)。

另请参阅

使用VEE RPC API，启动和停止服务器， 加载和卸载库, 选择UserFunctions, 调用UserFunctions,

VEE RPC API错误代码。


VEE RPC API错误代码

在不能建立到VEE服务器的连接时，返回下面的错误代码：

错误代码 | 含义
850: eUnknownHost | 不能解析主机名称或IP地址。
851: eNoServiceManager | 在服务器主机上找不到veesm。
861: eServiceManagerTO | 服务管理器超时。
863: eServiceNotFound | 不能找到VEE服务。
864: eServiceNotStarted | 不能启动VEE服务。
866: eConnectRefused | 拒绝到veesm或inetd的连接。

下面是到VEE服务器的连接建立后(连接已经终止)发生的重大错误：

错误代码 | 含义
852: eHostDown | VEE服务器主机瘫痪。
853: eConnectTimedOut | 连接超时。
855: eConnectBroken | 连接中断。

下面的错误反映了业务内部的非重大状态：

错误代码 | 含义
865: eSomeInternalError | 发生非重大内部错误。
869: eVeeServiceError | UserFunction内部发生错误。
870: eWouldBlock | 对非阻塞RPC返回这个错误代码。
871: eDebugTermination | 用户在调试会话过程中按了停止。

RPC函数调用返回下面的错误：

错误代码 | 含义
851: eInvalidArgument | 有一个无效的自变量。

另请参阅

使用VEE RPC API，启动和停止服务器， 加载和卸载库, 选择UserFunctions, 调用UserFunctions, 其它函数。


关于VEE DATA API

对UserFunction执行Call或Receive要求处理VEE Data Container (VDC)格式的数据，这是VEE进行内部操作要求的数据结构集。从C程序与VEE通信要求能够在VDC和传统C数据类型之间转换。VEE DATA API提供了这种能力(及其它功能)。

另请参阅

数据类型、形状和映射， 处理标量数据， 处理数组数据， Enum类型， 映射函数， 其它函数。


数据类型、形状和映射

头文件 veeData.h 中列出了基础的VDC类型，具体如下：

enum veeType

{

   VEE_TYPE_ANY=0, // The default without constraints.

   VEE_NOT_DEFINED1, // Leave space.

   VEE_LONG, // 32-bit signed integer (no 16-bit INTs in VEE).

   VEE_NOT_DEFINED2, // Leave space.

   VEE_DOUBLE, // IEEE 754 64-bit floating-point number.

   VEE_COMPLEX, // Complex number: 2 doubles in rectangular form.

   VEE_PCOMPLEX, // Complex number: 2 doubles in polar form.

   VEE_STRING, // 8-bit ASCII null-terminated string.

   VEE_NIL, // Empty container returned by function call.

   VEE_NOT_DEFINED3, // Leave space.

   VEE_COORD, // 2 or more doubles give XY or XYZ or ... data.

   VEE_ENUM, // An ordered list of strings.

   VEE_RECORD, // VEE record-structures data.

   VEE_NOT_DEFINED4, // Leave space.

   VEE_WAVEFORM, // A 1D array of VEE_DOUBLE with a time mapping.

   VEE_SPECTRUM // A 1D array of VEE_PCOMPLEX with a time mapping.

};

为与 VEE 数据类型进行转换，veeData.h 文件定义了 C 数据类型：

   typedef short int16;

   typedef long int32;

  typedef __int64 int64;

  typedef long VEE_BOOL;

   typedef struct {double rval, ival;} veeComplex;

   typedef struct {double mag, phase;} veePComplex;

   typedef struct {double xval, yval;} vee2DCoord;

   typedef struct {double xval, yval, zval;} vee3DCoord;

   typedef void veeDataContainer;

   typedef veeDataContainer* VDC;

数据类型还可以有指定数量的维度或numDims，其采用下面的方式提供：

enum veeShape

{

   VEE_SHAPE_SCALAR, // A single data element.

   VEE_SHAPE_ARRAY1D, // A one-dimensional array.

   VEE_SHAPE_ARRAY2D, // A two-dimensional array.

   VEE_SHAPE_ARRAY3D, // A three-dimensional array.

   VEE_SHAPE_ARRAY, // An array with from 4 to 10 dimensions.

   VEE_SHAPE_ANY // Placeholder for undefined shape.

};

数组可以被"映射"。正常情况下，它们不能被映射，但 VEE_WAVEFORM 和 VEE_SPECTRUM 数据类型是有映射的类型，其中数组元素与时间间隔对应。映射关系由下面的语句给出：

enum veeMapType

{

   VEE_MAPPING_NONE, // No mapping.

   VEE_MAPPING_LINEAR, // Linear mapping.

   VEE_MAPPING_LOG // Log mapping.

};

一般来说，不需要指定映射。

另请参阅

关于VEE DATA API，处理标量数据， 处理数组数据，Enum类型， 映射函数， 其它函数。


处理标量数据

下述函数可以用于从 一个C数据创建 一个 VDC 标量:

VDC vdcCreateBooleanScalar(VEE_BOOL aBool);

VDC vdcCreateLongScalar( int32 aLong );

VDC vdcCreateLongLongScalar(int64 aLong);

VDC vdcCreateDoubleScalar( double aReal );

VDC vdcCreateStringScalar( char *aString );

VDC vdcCreateComplexScalar( double realPart, double imaginaryPart );

VDC vdcCreatePComplexScalar( double magnitude, double phase );

VDC vdcCreate2DCoordScalar( double xval, double yval );

VDC vdcCreate3DCoordScalar( double xval, double yval, double zval );

VDC vdcCreateCoordScalar( int16 aFieldCount, double *values );

所用这些函数返回一个指向 VDC 的指针, 失败时返回 NULL。 VEE_WAVEFORM 和 VEE_SPECTRUM 不会有标量因为它们总是被定义为一维数组。

可以使用下述例程改变 VDC 中的值：

int32 vdcSetBoolScalar(VDC aVD, VEE_BOOL aBool);

int32 vdcSetLongScalar( VDC aVD, int32 aLong );

int32 vdcSetLongLongScalar(VDC aVD, int64 aLongLong);

int32 vdcSetDoubleScalar( VDC aVD, double aReal );

int32 vdcSetStringScalar( VDC aVD, char *aStr );

int32 vdcSetComplexScalar( VDC aVD, double realPart, double imaginaryPart );

int32 vdcSetPComplexScalar( VDC aVD, double magnitude, double phase );

int32 vdcSet2DCoordScalar( VDC aVD, double xval, double yval );

int32 vdcSet3DCoordScalar( VDC aVD, double xval, double yval, double zval );

int32 vdcSetCoordScalar( VDC aVD, int16 aFieldCount, double* values );

这些函数返回0或一个错误代码。

当创建了一个 VDC 标量或从一个函数返回了一个 VDC 标量时，可以用下述例程将其转换成一个 C 数据:

int32 vdcSetBoolScalar(VDC aVD, VEE_BOOL aBool);

int32 vdcGetLongScalarValue( VDC aVD, int32 *aLong );

int32 vdcSetLongLongScalar(VDC aVD, int64 aLongLong);

int32 vdcGetDoubleScalarValue( VDC aVD, double *aReal );

char* vdcGetStringScalarValue( VDC aVD );

int32 vdcGetComplexScalarValue( VDC aVD, veeComplex *aComplex );

int32 vdcGetPComplexScalarValue( VDC aVD, veePComplex *aPComplex );

int32 vdcGet2DCoordScalarValue( VDC aVD, vee2DCoord *aCoord );

int32 vdcGet3DCoordScalarValue( VDC aVD, vee3DCoord *aCoord );

double* vdcGetCoordScalarValue( VDC aVD, int16 *aFieldCount );

通常，这些函数从第一个参数 aVDC 中得到数据， 然后将它放到第二个参数中。这里，第二个参数是一个 C 的变量，它可以是在这里定义的任何一种类型。没有错误时，这些函数返回0，否则返回一个错误代码。

但是其中有两个例外，一个是 vdcGetStringScalarValue() 函数，它直接返回一个字符串（在出错时返回NULL串)。 另一个是 vdcGetCoordScalarValue() 函数，它返回一个指针，指向一个 N 维的 Coord 数据数组。 (N作为参数返回).

下述例程可以用于查询或设置坐标维数：

int16 vdcNumCoordDims( VDC aVD );

int32 vdcCoordSetNumCoordDims( VDC, int16 );

另请参阅

关于VEE DATA API， 数据类型、形状和映射，处理数组数据， Enum类型， 映射函数， 其它函数。


处理数组数据

下述函数用于创建具有 VEE 数据类型的 VDC 数组。你提供的数值将被复制到 VDC 中。不使用调用方的内存。 发生错误是返回一个空指针。下述函数用于创建 VDC 数组:

  • 这个函数返回一个 VEE_BOOL 类型的 VDC 数组。 这个数组大小由参数 numPts 指定。参数 values 指向的数组的大小必须与参数 numPts 指定的大小相同。参数类型 VEE_BOOL 在 veeData.h 中定义为 long。

VDC vdcCreateBoolean1DArray(int32 numpts, VEE_BOOL *values);

  • 这个函数返回一个 VEE_LONG 类型的 VDC 数组。 这个数组的大小由参数 numPts 指定。参数 values 指向的数组的大小必须与参数 numPts 指定的大小相同。参数类型 int32 在 veeData.h 中定义为 long。

VDC vdcCreateLong1DArray( int32 numPts, int32 *values );

  • 这个函数返回一个 VEE_LONGLONG 类型的 VDC 数组。 这个数组的大小由参数 numPts 指定。参数 values 指向的数组的大小必须与参数 numPts 指定的大小相同。参数类型 int64 在 veeData.h 中定义为 __int64。

VDC vdcCreateLongLong1DArray(int32 numpts, int64 *values);

  • 这个函数返回一个 VEE_STRING 类型的 VDC 数组。 这个数组的大小由参数 numPts 指定。参数 strings 指向一组字符串。该组字符串的数量必须与参数 numPts 指定的数量相同。参数类型 int32 在 veeData.h 中定义为 long。

VDC vdcCreateString1DArray( int32 numPts, char **strings );

  • 这个函数返回一个 VEE_DOUBLE 类型的 VDC 数组。 这个数组的大小由参数 numPts 指定。参数 values 指向一个数组。该数组中double 型数据的数量必须与参数 numPts 指定数量的相同。参数类型 int32 在 veeData.h 中定义为 long。

VDC vdcCreateDouble1DArray( int32 numPts, double *values );

  • 这个函数返回一个 VEE_COMPLEX 类型的 VDC 数组。 这个数组预先已被分配了一段大小由参数 numPts 指定的内存。参数类型 int32 在 veeData.h 中定义为 long。参数 values 指向一个veeComplex类型的结构数组。该结构在 veeData.h 定义为:

typedef struct {double rval, ival;} veeComplex;

VDC vdcCreateComplex1DArray( int32 numPts, veeComplex *values );

  • 这个函数返回一个 VEE_PCOMPLEX 类型的 VDC 数组。 这个数组预先已被分配了一段大小由参数 numPts 指定的内存。参数类型 int32 在 veeData.h 中定义为 long。参数 values 指向一个veePComplex类型的结构数组。该结构在 veeData.h 定义为:

typedef struct {double mag, phase;} veePComplex;

VDC vdcCreatePComplex1DArray( int32 numPts, veePComplex *values );

  • 这个函数返回一个 VEE_COORD 类型的 VDC 数组。 这个数组预先已被分配了一段大小由参数 numPts 指定的内存。参数类型 int32 在 veeData.h 中定义为 long。参数 values 指向一个 vee2DCoord 类型的结构数组。该结构在 veeData.h 定义为:

typedef struct {double xval, yval;} vee2DCoord;

VDC vdcCreate2DCoord1DArray( int32 numPts, vee2DCoord *values );

  • 这个函数返回一个 VEE_COORD 类型的 VDC 数组。 这个数组预先已被分配了一段大小由参数 numPts 指定的内存。参数类型 int32 在 veeData.h 中定义为 long。参数 values 指向一个 vee3DCoord 类型的结构数组。该结构在 veeData.h 定义为:

typedef struct {double xval, yval, zval;} vee3DCoord;

VDC vdcCreate3DCoord1DArray( int32 numPts, vee3DCoord *values );

  • 这个函数返回一个 VEE_COORD 类型的 VDC 数组。 这个数组预先已被分配了一段大小由参数 numPts 指定的内存。参数 aFieldCount 是坐标中域的个数。参数类型 int32 在 veeData.h 中定义为 long。参数 values 指向一个 double 类型的数组。数组的长度等于 numPts 和 aFieldCount 的乘积。

VDC vdcCreateCoord1DArray( int32 numPts, int16 aFieldCount, double *values );

  • 这个函数返回一个 VEE_WAVEFORM 类型的 VDC 数组。 采样数量等于参数 numPts。波形开始和结束的时间由参数 from 和 thru 来确定。 参数 mapType 是 VMT 类型。该类型在 veeData.h 中定义，用于声明所使用的映射类型。参数 values 指向一个 double 类型的数组。数组的长度等于 numPts 和 aFieldCount 的乘积。详细信息请参阅 数据类型、形状和映射。

    参数 data 指向的一个 doubles 型数组，其大小必须与参数 numPts 指定的相同。参数类型 int32 在    veeData.h 中定义为 long 。

VDC vdcCreateWaveform( int32 numPts, double from, double thru, VMT mapType, double *data );

  • 这个函数返回一个 VEE_SPECTRUM 类型的 VDC 数组。 采样数量等于参数 numPts。频谱开始和结束的频率由参数 from 和 thru 来确定。 参数 mapType 是 VMT 类型。该类型在 veeData.h 中定义，用于声明所使用的映射类型。详细信息请参阅 数据类型、形状和映射。

参数 data 指向的一个 veePComplex 型数组，其大小必须与参数 numPts 指定的相同。结构veePComplex 在veeData.h 中定义为：

typedef struct {double mag, phase;} veePComplex.

这个结构数组是被复制的。参数类型 int32 在veeData.h 中定义为 long 。

VDC vdcCreateSpectrum( int32 numPts, double from, double thru,
VMT mapType, veePComplex *data);

在下面的函数中，你需指定数组的大小，以及表示一个数组所需的数据（比如 VEE_WAVEFORM 和 VEE_SPECTRUM 类型的映射数据）和数组数据。返回值是一个 VDC (或在出错时返回 NULL).

你可以用下述的函数将 VDC 转换为 C 的数组。

  • 这个函数返回一个指向 VEE_BOOL 型数组的指针。参数 aVD 必须是 一个VEE_BOOL 型的数组。通过传引用的参数 numPts 返回的值是数组的长度。

VEE_BOOL* vdcGetBool1DArray(VDC aVD, int32 *numpts);

  • 这个函数返回一个指向 int32 的数组的指针。参数 aVD 必须是 一个VEE_LONG 型的数组。通过传引用的参数 numPts 返回的值是数组的长度。

int32* vdcGetLong1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向 int64 的数组的指针。参数 aVD 必须是 一个VEE_LONGLONG 型的数组。通过传引用的参数 numPts 返回的值是数组的长度。

int64* vdcGetLongLong1DArray(VDC aVD, int32 *numpts);

  • 这个函数返回一个指向 double 型数组的指针。参数 aVD 必须是 一个VEE_DOUBLE 型的数组。通过传引用的参数 numPts 返回的值是数组的长度。

double* vdcGetDouble1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向字符串的数组的指针。参数 aVD 必须是 一个VEE_STRING 型的数组。通过传引用的参数 numPts 返回的值是字符串的数量。

char** vdcGetString1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向　veeComplex　结构数组的指针。该结构在　veeData.h　中定义为：

typedef struct {double rval, ival;} veeComplex;

参数 aVD 必须是 VEE_COMPLEX　型的。通过传引用的参数 numPts 返回的值是数组的长度。

veeComplex* vdcGetComplex1DArray( VDC aVD,int32 *numPts );

  • 这个函数返回一个指向　veePComplex　结构数组的指针。该结构在　veeData.h　中定义为：

typedef struct {double mag, phase;} veePComplex;

参数 aVD 必须是 VEE_PCOMPLEX 型的。通过传引用的参数 numPts 返回的值是数组的长度。

veePComplex* vdcGetPComplex1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向　vee2DCoord　结构数组的指针。该结构在　veeData.h　中定义为：

typedef struct {double xval, yval;} vee2DCoord;

参数 aVD 必须是 VEE_COORD 型的。通过传引用的参数 numPts 返回的值是数组的长度。

vee2DCoord* vdcGet2DCoord1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向　vee3DCoord　结构数组的指针。该结构在　veeData.h　中定义为：

typedef struct {double xval, yval, zval;} vee3DCoord;

参数 aVD 必须是 VEE_COORD 型的。通过传引用的参数 numPts 返回的值是数组的长度。

vee3DCoord* vdcGet3DCoord1DArray( VDC aVD, int32 *numPts );

  • 这个函数返回一个指向 double 型数组的指针。参数 aVD 必须是　VEE_COORD 类型。通过传引用的参数 numPts 返回的值是数组中坐标元组的数量。通过传引用的参数 aFieldCount　返回的值是每个坐标远组中域的数量。返回数组的长度是　numPts 和 aFieldCount　的乘积。

double* vdcGetCoord1DArray( VDC aVD, int32 *numPts, int16 *aFieldCount );

  • 这个函数返回一个指向 double 型数组的指针。参数 aVD 必须是　VEE_WAVEFORM　类型。传引用的参数 numPts， from, thru 和 mapType　分别返回数组长度，开始时间，结束时间和映射类型。

double* vdcGetWaveform( VDC aVD, int32 *numPts, double *from, double *thru, VMT *mapType );

  • 这个函数返回一个指向　veePComplex　型的结构数组。 该结构在　veeData.h 中定义为：

typedef struct {double mag, phase;} veePComplex;

参数　aVD　必须是 VEE_WAVEFORM　类型的。传引用的参数 numPts, from, thru 和 mapType 分别返回, 结构数组的长度，开始频率，结束频率和映射类型。

veePComplex* vdcGetSpectrum( VDC aVD, int32 *numPts, double *from, double *thru, VMT *mapType );

上述函数都接受一个 VDC，并通过参数返回一个指向数据数组的指针和数组的大小或一些其他相关信息。

数组创建好后，可以使用下述函数查询和另请参阅

关于VEE DATA API， 数据类型、形状和映射，处理数组数据， Enum类型， 映射函数， 其它函数。操作这些数组：

int32 vdcSetNumDims( VDC, int16 );

int16 vdcGetNumDims( VDC );

int32 vdcSetDimSizes( VDC, int32* );

int32 *vdcGetDimSizes( VDC );

int32 vdcCurNumElements( VDC );

另请参阅

关于VEE DATA API， 数据类型、形状和映射，处理标量数据， Enum类型， 映射函数， 其它函数。


Enum类型

VEE枚举类型是顺序排列的字符串列表，它可以由下面的例程进行处理：

• 这个函数用给定的字符串－序号对的数量来创建一个空的VEE_ENUM结构。在发生错误时，它返回一个NULL VDC。

VDC vdcCreateEnumScalar( int16 numberOfPairs );

• 这个函数把枚举对放在规定的VEE ENUM结构中，返回更新后的结果，以及0或一个错误代码。

int32 vdcEnumAddEnumPair( VDC aVD, char* aString, int32 aValue );

• 这个函数删除由参数 anOrd 给出的序号处的枚举对。它返回0或返回一个错误代码。

int32 vdcEnumDeleteEnumPairWithOrdinal( VDC aVD, int32 anOrd );

• 这个函数设置其它vdcEnum例程使用的序号。它返回0或返回一个错误代码。

int32 vdcSetEnumScalar( VDC aVD, int32 anOrdinal );

• 这个函数把一个字符串放在VEE_ENUM结构中，由vdcSetEnumScalar()指配序号：

int32 vdcEnumDeleteEnumPairWithStr(VDC aVD, char* aString );

• 这个函数返回vdcSetEnumScalar()指配的当前序号选择结果：

int32 vdcGetEnumOrdinal( VDC aVD );

• 这个函数返回与当前序号有关的字符串，或在发生错误时返回一个NULL字符串。

char* vdcGetEnumString( VDC aVD );

另请参阅

数据类型、形状和映射，处理标量数据， 处理数组数据，映射函数， 其它函数。


映射函数

VEE DATA API允许使用下述函数处理数组的映射关系：

int32 vdcAtDimPutLowerLimit( VDC aVD, int16 aDim, double aValue );

// 指定下限的映射。

int32 vdcAtDimPutUpperLimit( VDC aVD, int16 aDim, double aValue );

// 指定上限的映射。

int32 vdcAtDimPutRange( VDC aVD, int16 aDim, double lowerLimit, double upperLimit );

// 结合"vdcAtDimPutLowerLimit" & "vdcAtDimPutUpperLimit"。

int32 vdcAtDimPutMapping( VDC aVD, int16 aDim, VMT aMapping);

// 设置上面定义的极限之间的映射。

int32 vdcMakeMappingsSame( VDC VD1, VDC VD2 );

// 以相同方式映射两个容器。

int32 vdcUnMap( VDC aVD );

// 从容器中删除映射信息。

另请参阅

数据类型、形状和映射， 处理标量数据， 处理数组数据，Enum类型，其它函数。


其它函数

其它VEE DATA API函数包括：

  • 获得VDC的类型。在发生错误时返回VEE_NOTDEFINED1。

enum veeType vdcType( VDC aVD );

  • 复制VDC。在发生错误时返回NULL。

VDC vdcCopy( VDC oldVD );

  • 删除容器，释放其内存。在发生错误时返NULL。

VDC vdcFree( VDC aVD );

  • 得到最后一个错误的错误编号/消息：

int16 veeGetErrorNumber( void );

char *veeGetErrorString( void );

  • 把错误编号复位为零：

void veeClearErrorNumber(void)

在使用Borland汇编程序时，libvapi.lib库不能链接到程序中。

另请参阅

数据类型、形状和映射，处理标量数据， 处理数组数据，Enum类型， 映射函数。


Web技术概述

其它函数

您可以使用VEE传播程序中已经收集的数据，监测测试系统，或远程复核测试结果。

本例描述了怎样在机构内部创建一个网站(一个企业内部网网站)，作为服务器提供参考数据。本例假设访问这个网站的用户拥有浏览器。本例使用Microsoft环境(Windows 2000或Windows XP)、MS Office和MS Internet Explorer。通信从仪器到达服务器，然后到达客户端浏览器。

备注

本例使用PC屏幕转储图。

在上图中，通信如下：

• 被测设备(DUT)或传感器或仪器通过网络I/O层把信息发送到服务器应用。网络I/O层包括接口和背板(GPIB, RS232, VXI, MXI, USB, LAN, PC插件)及I/O编程层，如驱程, VISA或SICL。

• 服务器应用是生成测量数据的VEE程序。

• HTTP (超文本传送协议)把信息发送到客户端浏览器。

HTTP是Web使用的TCP/IP通信协议中的一个协议。(TCP/IP表示传输控制协议/互联网协议) 低级TCP/IP协议包括通信的传输层、网络层和物理层。根据定义，每个TCP/IP应用都是客户端/服务器应用。例如，客户端浏览器(如Internet Explorer)可以请求服务器应用生成的信息。

在Internet Explorer中输入下面的通用资源定位器(URL)时，它从安捷伦服务器请求信息：

http://www.agilent.com/find/vee

• http描述了被存取的资源类型，以传送信息。

• www.agilent.com/find/vee是资源的URL。HTTP使用的超文本格式是一种脚本格式，称为超文本置标语言(HTML)。HTML为把多个文件链接起来提供了一种方式，最初只有编程人员能够使用这种语言创建网页。HTML最初只用于文本，但现在包括了声音、视频、图像、交互屏幕、ActiveX控件和Java小程序。

一旦浏览器请求服务器信息，它不会自动更新，除非浏览器设计成自动更新。此外，浏览器不允许任何交互，除非浏览器网页中设计了交互。完成这一操作最简便的方式是使用脚本语言，如VBScript、JavaScript和Jscript。

脚本语言是浏览器支持的一种解释过的语言。脚本语言可以扩展HTML的限制，提供交互性更强的网页。由于它们已经被解释，因此脚本语言必须被嵌入到网页中，并得到浏览器支持。它们不是独立的程序。下面用图形方式说明了这一点。

VBScript、JavaScript和JScript都是脚本语言。VBScript基于MS Visual Basic。JavaScript是Sun (Java)共同创建的。JScript基于微软版本的JavaScript。

脚本语言必须装在主机应用内部。主机应用一般是一个网络浏览器，如Internet Explorer或Netscape Navigator。在浏览器内部，由HTML控制网页的整体感观。

微软的组件对象模型(COM)定义了汇编的软件组件，称为ActiveX控件，它们封装专门设计的函数。一般来说，ActiveX控件用来提供用户接口功能，是为在客户端计算机上运行而设计的。ActiveX控件是优化的软件组件，这些软件组件过去叫作OLE控件。

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


使用Agilent VEE进行Web监测

VEE包括一个内置Web服务器，可以通过HTTP与其它程序通信。您可以允许远程用户存取装在您的计算机上的VEE程序和信息。本节介绍了怎样共享VEE数据及远程用户怎样存取数据。

整体指导准则和技巧

• 在您的系统上运行的VEE程序是远程用户将要存取的VEE程序。

• 您的系统必须正在运行VEE。为存取您的系统上的VEE程序，远程用户不必安装VEE。

• 在远程用户从网络浏览器向VEE发送请求时，VEE创建一个图片，在远程用户的浏览器窗口中进行显示。这个图片是VEE程序的“快照”。(它不能编辑。)

• 通过在VEE Web Server主页中进行选择或通过在浏览器URL中指定命令行选项，远程用户可以查看您的VEE程序的不同部分，让VEE程序定期刷新浏览器显示(以监测程序进度)，显示错误信息。

另请参阅

可以调用的VEE ActiveX Automation Server, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


为远程用户提供Agilent VEE数据

根据下述通用步骤，设置VEE Web服务器，以便远程用户能够存取您的系统上的数据：

1 您的系统一定要连接到网络上。

2 为远程用户提供他/她将在浏览器中输入、以存取您的系统的URL相关信息(后面将更更详细地介绍这些信息)。

3 启动VEE，打开您希望远程用户存取的程序，和/或创建您希望远程用户存取的任何文件。

4 选择File [image] Default Preferences [image] Web Server对话框设置(下面更详细地进行了介绍)，启动Web Server。

5 让远程用户运行网络浏览器，如Internet Explorer或Netscape。

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


Web Server Dialog Box

Web Server对话框

在选择File [image] Default Preferences [image] Web Server时，会出现下面的Web Server对话框。

Web Server对话框中的各个字段如下：

字段名称

说明

Enable Server

在复选时，Enable Server会启动VEE的内置Web服务器。Web服务器允许远程用户使用网络浏览器显示您的VEE程序，查看、监测和诊断您的系统上的VEE程序。

VEE的Web服务器使用标准HTTP协议。在默认状态下，Enable Server为OFF (不复选)。您的系统必须连接到网络上，VEE必须正在运行，远程用户必须运行网络浏览器，这样远程用户才能存取VEE Web服务器。

Root Directory

指定远程用户可以存取的文件位置。默认值是~installDir/www。对Windows 2000或Windows XP，如果使用默认值安装VEE Pro8.0，那么这个字段值为：

C:\Program Files\Agilent\VEE Pro8.0\www.

• 不要把私人文件放在这个目录或其任何子目录下，因为使用网络浏览器存取您的系统的任何远程用户都可以查看这些文件。

• 在您安装VEE时，VEE在默认的Web服务器Root Directory中安装文件index.html。在默认状态下，这个文件将位于C:\Program Files\Agilent\VEE Pro 8.0\www\index.html。这是默认的VEE Web服务器主页，在远程用户存取您的系统时可以显示这个主页。(如果愿意，您可以根据需求编辑这个主页。)

• 如果您改变Web文件的根目录，那么把index.html文件移动到新的目录下，不要改变文件名。

HTTP Port Number

指定VEE Web服务器的端口号码。默认的端口号码是80。只有在另一个Web服务器(如VEE的另一个实例)在同一个系统上运行，或如果您希望限制远程用户存取您的VEE Web服务器时，才需要改变默认端口号码。

• 通过指定一个0 – 65535之间的HTTP端口号码，可以限制谁能够存取和查看您的系统上的数据。

• 如果您输入一个不同的端口号码，查看VEE程序的远程用户必须在其浏览器中输入相同的端口号码。例如，如果把这个字段设置为端口85，那么远程用户输入的URL应该是：http://hostname:85。(本章后面更详细地介绍了主机名称的定义。)

Server Timeout

指定VEE Web服务器将等待VEE处理命令的最长时间。在默认状态下，这个字段设为60秒。如果VEE程序处理一条命令使用的时间长于指定时间，VEE会向Web服务器发送超时。

Log File

指定在哪里记录Web服务器处理的所有进入HTTP请求的日志文件。这个文件在PC上的默认位置是C:\windows\TEMP\http.log。如果日志文件还不存在，那么在Default Preferences Web Server对话框中进行改动时，会创建一个日志文件。

Save

取值将是未来VEE Web会话使用的默认值，直到您再次改变这些值。如果想对当前VEE会话只使用指定值，点击OK。


远程用户怎样存取系统上的Agilent VEE

为从另一个位置存取系统上的VEE文件，远程用户需要采取下述通用步骤：

1 远程用户的系统必须连接到网络上。

2 远程用户必须运行网络浏览器，如Netscape或Internet Explorer。

3 远程用户必须输入系统的URL地址。(您为远程用户提供地址，下面更详细地介绍了这一点。)

备注

为存取系统上的VEE程序，远程用户不必运行VEE，甚至不必安装VEE。

远程用户连接到网络上，运行浏览器，输入一个URL。您将根据下述信息告诉远程用户要输入的URL。远程用户输入的URL的格式如下：

http://hostname {:port}

显示VEE Web Server主页，远程用户可以在主页上输入怎样查看VEE程序的选项。

http://hostname{:port}{/command}{?parameter}

为远程用户指定在VEE程序中查看的视图或UserFunction。例如，http://hostname/ViewMainDetail显示主要VEE程序的细节视图。

http://hostname{:port}{/file}

指定一个已经保存的、您希望远程用户查看的文件，如*.jpeg或*.html文件。

备注

大括号{}中的字段是可选的字段。

URL地址中的字段如下：

远程用户存取VEE程序时URL中可以使用的命令和参数如下。

文件名 | 说明
Hostname | (必须) 识别VEE正在运行的系统，格式为<computer_name>.domain.com。 您可以选择让远程用户在URL中只输入<hostname>，如http://<hostname>。这条命令打开VEE Web Server主页index.html，把它显示给远程用户。远程用户可以从VEE Web Server主页菜单中选择显示、监测或诊断VEE程序。
Port | (可选) 如果没有使用默认值80，那么识别Web Server端口号码。只有在File [image] Default Preferences [image] Web Server中输入的端口号码是80以外的号码时，才指定这个值。 例如：如果远程用户将存取系统上的VEE，且File [image] Default Preferences [image] Web Serveris中的端口号码设为85，那么应让远程用户输入http://<hostname>:85。
File | (可选) 识别要打开的相对于浏览器根目录的目录和/或文件。只有在已经保存了一个远程用户要查看的文件时，如*.jpeg或*.html，才能指定一个文件。 为使远程用户显示您的系统中的文件，您必须在VEE的Default Preferences下，在Web Server对话框中把一个目录指定为Root Directory。
Commands and Parameters | (可选) 指定VEE Web Server支持的一条命令要求的命令或参数。命令和参数使得远程用户能够通过浏览器监测和诊断远程VEE程序。下面列明了各个命令和参数。
Viewing the entire VEE window | ViewVEE 例如： http://hostname/ViewVEE
Panel view of main VEE program | ViewMainPanel 例如： http://hostname/ViewMainPanel
Detail view of main VEE program | ViewMainDetail 例如： http://hostname/ViewMainDetail
VEE execution window during runtime | ViewExecWindow 例如： http://hostname/ViewExecWindow
VEE UserFunction in Panel view | http://hostname/ViewPanel? <UserFunction Name> 例如：如果UserFunction是AddNoise，那么远程用户将输入 http://hostname/ViewPanel? AddNoise
Detail view of a UserFunction | http://hostname/ViewDetail? UserFunctionName 例如：如果UserFunction是AddNoise，那么远程用户将输入 http://hostname/ViewPanel? AddNoise
Error window of current program | http://hostname/ViewError
Display list of available command URLs. | ViewHelp

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


显示Agilent VEE Web Server页面

在安装VEE时，它会在www 目录下创建一个默认的index.html文件。这个文件包含VEE Web Server主页。远程用户可以点击这个页面上的选项，显示VEE程序。默认的VEE Web Server主页如下。还可以编辑页面，如在MS Word中，满足用户需求。

备注

为在自己的系统上显示这个菜单，可以把系统指定为localhost。例如，如果运行VEE、运行网络浏览器、输入http://localhost，浏览器将显示上面显示的VEE Web Server主页。这为检查远程用户使用不同命令显示的内容提供了简便的方式。

在远程用户显示上面的菜单时，通过在菜单中进行选择，其可以存取VEE程序的各个部分。例如，用户可以点击Main Detail，在Detail视图中查看Main VEE程序。使用菜单选择显示的信息与远程用户在网络浏览器中输入命令http://hostname/ViewMainDetail显示的信息相同。

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE, 实验13-1: 使用Agilent VEE网络浏览器操作练习, 限制存取通过Web查看的程序


限制存取通过Web查看的程序

在通过Web提供VEE程序时，您可能仍希望限制远程用户查看程序的某些部分。如果远程用户目前知道连接到您的系统的URL，您希望保证只有某些远程用户能够存取特定程序或Web目录文件。

为防止远程用户在Web上查看VEE程序的某些部分，您可以以三种不同方式保护程序：

在Default Preferences [image] Web Server文件夹中改变端口号码，这样，只有授权的用户才可以查看程序。

或

创建一个安全的RunTime版VEE程序。这将保证不能查看任何程序代码。如需更多信息，请参阅“ 保护程序安全 (创建RunTime版本)" 。

或

使用您希望禁用的命令的确切名称创建一个HTML文件，把它保存在VEE www目录下。在到达VEE前，浏览器会一直存取任何*.html文件。通过这种方式，您可以解释远程用户发出的请求，显示一个HTML网页及相应的警告或注释。

例如，您可能希望防止远程用户查看VEE程序的Detail视图。您可以在程序中创建一个文件，如MS Word，在www目录中把它另存为ViewMainDetail.html。在这个文件中，您可以放入希望远程用户查看的消息。

当远程用户在VEE Web Server主页中选择Main Detail或使用选项ViewMainDetail输入一个URL时，浏览器不会在细节视图中显示主VEE程序。相反，浏览器会存取www目录下的ViewMainDetail.html文件，显示您已经创建的文件。下面是您将向远程用户显示的内容实例。

备注

确保文件名称是VEE web命令的文件名，并位于Web Server中指定的Root Directory下。

您还可以对其它目的使用*.html文件，如在VEE程序上放置口令保护，这样只有拥有口令的用户才能查看程序。下面是口令保护实例。

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，实验13-1: 使用Agilent VEE网络浏览器操作练习


MATLAB脚本概述

MATLAB Script是The MathWorks提供的标准全功能MATLAB的一个子集。用户可以直接存取MATLAB功能核心集，如高级数学运算、数据分析及科学和工程图表。可以简便地在任何Agilent VEE中包括MATLAB Script对象。

MATLAB Script包括几百个函数：

  • 数据分析和可视化

  • 数字计算，包括：

    • 线性代数运算和矩阵计算

    • 傅立叶和统计分析

    • 差分公式求解

    • 三角法和基础数学运算

  • 工程和科学图表，如：

    • 二维画面和三维画面，包括三角化和栅格化数据

    • 可视化标量数据和矢量数据流量

    • 箭带图, 带状图, 散点图, 柱状图, 饼图和节状图

信号处理工具箱

MATLAB Script for VEE还包括MATLAB信号处理工具箱的一个子集，它基于坚实的滤波器和频谱分析技术基础。包括的函数有：

  • 信号和线性系统模型

  • 模拟滤波器设计

  • FIR和IIR数字滤波器设计、分析和实现

  • FFT和DCT等变换

  • 频谱估算和统计信号处理

  • 参数时序模型

  • 波形生成

关于全功能MATLAB

MATLAB是一种集成式技术计算环境，它把数字计算、高级图形和可视化及高级编程语言结合在一起。MATLAB包括几百种函数：

  • 数据分析和可视化

  • 数字和符号计算

  • 工程和科学图标

  • 建模、模拟和原型设计

  • 编程、应用开发和GUI设计

MATLAB用于各种应用领域中，包括信号和图像处理、控制系统设计、财务工程和医疗研究。由于采用开放的结构，MATLAB和配套产品使用简便，可以探索数据，创建自定义工具，洞察早期信息，获得竞争优势。

作为VEE用户，可以在涉及数据分析、可视化和建模的应用中，利用MATLAB和信号处理工具箱的全部处理能力。通过升级到完整版本的产品，您可以在VEE程序中使用各种新增的MATLAB功能，如创建用户自定义函数(M-files)、进入MATLAB命令窗口、MATLAB Editor/Debugger及信号处理GUI。

MATLAB其它信息来源

如需与使用MATLAB Script对象有关的完整的详细信息，请参阅MATLAB Script Help Desk。在VEE中，选择Help [image] MATLAB Script [image] Help Desk。网络浏览器中将出现MATLAB Help Desk。

如需与MATLAB, MATLAB Toolboxes及The MathWorks其它产品有关的进一步信息，请访问：www.mathworks.com或致电508-647-7000。

其它信息来源包括：

  • 完整的MATLAB文档: www.mathworks.com/access/helpdesk/help/helpdesk.shtml

  • MATLAB产品信息: www.mathworks.com/products

  • MATLAB技术协助: www.mathworks.com/support

  • MathWorks商店: www.mathworks.com/store

  • MathWorks主页: www.mathworks.com

Usenet Newsgroup: comp.soft-sys.matlab 新闻小组为使用MATLAB、对MATLAB及其相关产品有问题或意见的专业人士和学生提供了一个论坛。

另请参阅

在 Agilent VEE中使用MATLAB Script，在Agilent VEE中包括MATLAB Script对象


在Agilent VEE中使用MATLAB Script

VEE包括MATLAB Script对象，可以使用MATLAB的功能。VEE可以把数据传送到MATLAB Script Engine，接收回数据，使您能够在VEE程序中包括MATLAB数学函数。

备注

如果您已经安装MATLAB，VEE将使用已经安装的MATLAB处理MATLAB Script。但是，如果没有Signal Processing Toolbox，您将不能从VEE中使用这些函数，除非注册了与VEE一起提供的MATLAB Script Engine。为注册MATLAB，把目录(CD)变成 <VEE_installation_dir>\MATLAB\bin\win32\MATLAB.exe /regserver。如果/regserver失败，尝试/REGSERVER。

MATLAB Script对象的部分用途包括：

• 让MATLAB在VEE生成的数据上运行。

• 从MATLAB Script对象返回结果，在VEE程序的其它部分使用结果。

• 使用MATLAB的 Signal Processing Toolbox功能，在MATLAB Script对象中执行完善的滤波器设计和实现方案。

• 使用二维或三维图形可视化数据。

下图显示了MATLAB Script对象在VEE程序中的显示方式。在这个程序执行时，它生成Alphanumeric对象中显示的数据。

下图显示了程序运行时生成的图形。

在VEE程序中包括多个MATLAB Script对象时，VEE调用MATLAB Script Engine，在MATLAB Script对象中执行操作。信息从VEE传送到MATLAB，然后再传回。

• 只允许部分VEE数据对象作为MATLAB脚本输入。处理数据类型 和 MATLAB脚本更详细地讨论了这一点。


什么是.NET？

Visual Studio .NET是微软最新的开发平台。与以前的产品（例如Visual Studio 6）不同，.NET满足了桌面编程人员和网络开发人员的共同需求。从VEE角度看，.NET的优势是.NET Framework的自由运行时。.NET Framework与VEE7.0及更高的版本一起分发。它集成了几个新特性。

VEE的.NET Framework的关键特点和好处是架构类库(FCL)。FCL对于VEE编程人员具有特殊价值。Function & Object Browser提供了几百个新属性和方法。这个新特性使您的代码能够派生出许多功能，例如文件和目录管理；简单字符串管理；简化操作系统环境视图；网页操作；存取操作系统进程；读取注册表等。


.NET术语

在复习描述.NET的内容时，最好了解微软定义的下述术语。

汇编 – 把组件封装在汇编程序中。汇编程序是.NET应用中可重用、可以版本化的自述型构件。最简单的汇编程序是包含部署和版本本所需的全部信息的单个可执行文件。汇编程序是.NET Framework的基础构件。它采取可执行文件(.exe)或动态链接库(.dll)文件的形式。

基本互通汇编程序(PIA) – 基本互通汇编程序是厂商提供的唯一的汇编程序，其中包含COM实现的类型的类型定义(作为图元数据)。只能有一个基本互通汇编程序，必须由COM类型库的发行者签名。

名字空间 – .NET Framework类型使用句点语法命名方案来暗指层级。这种技术把相关类型划分到名字空间中，搜索和参考起来更加容易。整个名字(直到最右面的句点)的第一部分是名字空间名称。名字的最后部分是类型名称。例如，System.Collections.ArrayList表示ArrayList类型，它属于System.Collections名字空间。可以使用System.Collections中的类型，操纵对象集合。(嵌套名字空间是这一规则的例外情况。如需更多信息，请参阅MSDN文档。)

参考 – 为使用汇编程序，必须添加一个参考。

共享成员 – 共享成员是由一个类的所有实例共享的属性、规程和字段。某些编程语言把这些项目称为静态成员。

在拥有的信息是一个类的一部分，但不专用于一个类的某个实例时，可以使用共享字段和属性。对一个类的每个实例，独立存在正常字段和属性。改变与任何一个实例有关的字段或属性值，不会影响该类中其它实例的字段或属性值。另一方面，在改变与一个类的一个实例有关的共享字段和属性值时，会改变与该类所有实例有关的值。通过这种方式，共享字段和属性的行为类似于只能从一个类型实例中存取的全局变量。

类 – 如果熟悉面向对象的编程，您就知道类定义了一个对象可以执行的操作(方法、事件或属性)，同时定义了保持对象状态的值(字段)。尽管类中通常同时包括定义和实现方式，但它可能会有一个或多个成员没有实现方式。

类的一个实例是一个对象。通过调用其方法，存取其属性、事件和字段，可以存取一个对象的功能。

实例成员 – 实例成员捆绑到一个类的特定实例上。取值变化影响着相关的对象，但对其它对象没有影响。


VEE和.NET Framework

在开始回顾.NET Framework如何与VEE交互之前，通过在MSDN索引中查找".NET Framework－getting started";我们来回顾一下.NET Framework。

用途

在Device菜单下有一个叫做.NET Assembly References的菜单选项。顾名思义，References 会引导您使用一个Assembly;打开这个菜单选择，您会看到类似下面图片的窗口：

这里有大量可以选择的组件。这些组件被加载到VEE的主目录或.NET Framework所安装的目录中。如果您正在使用的组件不在这些目录中，使用Browse按钮进行选择。这里也有一个Importing Namespaces的复选框。Importing a namespace 等同于在C#中使用语句或在Visual Basic中Imports语句。

上图中选用了最常用的组件mscorlib。继续操作，选择这个组件。Mscorlib封装了对VEE用户非常有用的许多功能，如文件系统处理、集合管理以及数据类型转换。另一个经常使用的组件是System，它包含了流程管理、网络请求和应答以及常用公式等功能。

注意另外一个标着COM的栏。这一栏下列明了计算机中当前注册的所有COM类型库。实际上，这一列表与使用ActiveX自动参考对话框时看到的类型库大体相同。

怎样知道使用哪个选项呢？如果有以下的情况，您应该使用ActiveX：

  • 数据库出现在那里

  • 全功能

  • 且没有一级内插汇编程序(PIA)。

这避免了增加另一个层，即.NET Interop。如果有以下的情况，您应该使用.NET/COM Interop：

  • 数据库没有在ActiveX下出现

  • 或没有导入全部功能

  • 或您知道COM库有一个Primary Interop Assembly (PIA)

例如，Function & Object Browser的ActiveX Objects列表中并能看到所有IVI-COM驱程接口。然而，.NET Interop允许查看所有IVI驱程接口。

当使用.NET汇编程序References菜单选项并且在列表中选择一个COM类型库时，VEE将设法将COM类型库作为一个.NET Assembly 导入。如果存在一个PIA，VEE将使用它，否则VEE将会在程序所在的目录中创建一个Interop Assembly （或一些Assembly，如果COM类型库引用了其他类型库）。当VEE获取Interop Assembly，它将会在此组件中获取所有的类型信息。

备注

为了避免由于VEE不得不在一个临时目录里向您的VEE程序目录中复制所有生成的Interop Assembly产生的系统消耗，请首先保存您的VEE程序。这样，所产生的Interop Assembly会直接保存到您的VEE程序目录中。

继续操作，选择COM栏。VEE搜索注册表寻找COM类型库可能要花一些时间。现在选择Microsoft ActiveX Plugin。

现在提示您输入名字空间。这一步可以任选，继续操作并选择Interop.ActiveXPlugin、System和System.IO。

备注

除非您在.NET Assembly References对话框内不选定复选框，否则每次都会出现Import .NET Namespaces对话框。

从Device菜单中打开Function & Object Browser。从菜单选项中选择.NET/CLR Objects。注意Assembly窗口现在怎样反映了您之前所作的两个选择。

所有名字空间都被列在Namespace窗口中。所有类型都被列在Type窗口中，每个类型的所有成员都被列在Members窗口中。成员包括构造器、字段、属性、方法和列举。

如果在VEE中已经使用了ActiveX，您会发现选择一个.NET类成员的流程几乎完全相同，只有很小的差异，包括：

1、COM没有任何共用（静态）成员。如果.NET成员是一个静态成员，帮助区则会显示STATIC关键字。静态图标( [image])也会挨着成员图标出现。您需要在类上而不是在对象事例上调用一个静态成员。可以使用Function & Object Browser来让您自己熟悉语法。

2、生成实例对象变量，第一个字母是小写字母。这提示您正在处理一个实例成员。这也意味着如果还没有声明和初始化变量，那么您需要声明和初始化变量。

3、在成员列表中选择构造器（构造器和方法共享这个图标 [image] ），创建一个.NET对象。如上图所示，可以看见Create Instance按钮。选择这个按钮，生成一个创建新.NET对象的标准模板。可以将下图中的dateTime输出端连接到要求这个.NET对象作为输入的任何公式框的输入端。

4、.NET中的Enums ( [image])是强行输入的，因此不必再像处理ActiveX对象那样，用一个整数常数来代替Enum。您需要键入Enum全称（如果已经输入则减去名字空间）或使用Create Formula按钮，保存部分输入。例如，查看examples\dotnet目录下的Enum相关范例。

另请参阅

在VEE中导入名字空间, .Net Operation Builder, .NET范例


把名字空间导入VEE Pro中

名字空间确定一种类型，它为静态成员或枚举算子创建一个模板，因此不需要类型前缀。

用途

导入名字空间与Visual Basic中使用导入语句或C#中使用语句相同。在这两种情况下，都不必确定该名字空间中的类型用途。VEE支持两种名字空间导入方法。

第一种方法是使用.NET Assembly References菜单选项上的复选框，如下图所示：

第二种方法是从Devices 菜单中选择Import .NET Namespaces选项。将列出.NET名字空间的全部列表，为导入一个名字空间，只需选中旁边的复选框。

如果选择的assembly没有名字空间，那么列表将是空的。

如果没有为一个类导入名字空间，那么VEE的Function & Object Browser的 Create Instance按钮将自动全面确定该类的静态成员或枚举，这会使公式框大得多。

范例

参阅DateTime.vee 和FileInfo.vee


.NET Operation Builder

.NET Operation Builder帮助您选择VEE程序中使用.NET类型。

用途

如下图所示，.NET Operation Builder可以简便地选择.NET名字空间和Type，然后选择其中采用的方式、属性和字段。

为使用.NET Operation Builder，先使用Device [image] .NET Assembly References，选择希望处理的.NET汇编程序。然后这些汇编程序(在本例中是mscorlib)会显示在.NET Operation Builder对话框中。选择希望的名字空间(在本例中是System.IO)。然后，使用.NET Operation Builder向下深入到希望使用的具体类(在本例中是Directory)、枚举或接口，选择所需的Type。

找到所需类型的快得多的一种方式是点击Find工具栏按钮。这会在对话框右侧打开Find a Type窗口。可以简单地输入查找的类型名称或类型名称的子串，然后按Enter。VEE在列表视图中显示结果。然后可以双击其中一个结果，在左面的树图中直接跳到相应的类型上。

一旦已经选择了想要处理的Type，VEE工作区上会放一个VEE对象，提示您添加一个操作。如 选择.NET成员所示，双击，系统会提示您从Directory类中选择一个成员。

另请参阅

选择.NET成员, 编辑.NET成员, 和使用.NET控件

位置

Devices [image] .NET Operation Builder


选择.NET操作

一旦选择了想处理的Type，会出现一个VEE对象。如下一个图形中所示，把它放在VEE工作区上，双击它。系统会提示您从 Directory类中选择一项操作。

注意在这个对话框顶部有三个图标。Create图标缩小列表范围，只显示提供的 CreateInstance构造器，用来创建一个选定类型的新实例。Declared Only图标只显示这一类型声明的成员，All图标显示这一类型声明的或从其父类型中继承来的所有成员。

选择CreateDirectory成员。

一旦选择了CreateDirectory成员，必须进行配置。在编辑.NET成员所示的两个图形中，可以在配置栏中查看编辑方法。

位置

Devices [image] .NET Operation Builder


编辑.NET成员

一旦已经选择了一个操作，那么必须编辑操作，为完成任务提供所需的其它信息。

用途

在完成.NET Operation Builder和选择.NET成员中描述的任务后，必需配置CreateDirectory操作。在下面两个图形中，可以看到这一方法使用的配置栏。在Edit Parameters栏中，输入新目录的路径。注意：\是一个特殊字符，路径分隔符应使用\\或/，如C:\\Program Files/Agilent。如果按Tab键，可以看到VEE将生成的代码。

在Configure Terminals栏中，配置变量的名称。还可以指定VEE生成的默认名称之外的名称，及指定VEE是否应在对象中添加一个端。一般来说，不需要改变这些设置。

如果已经完成.NET Operation Builder和选择.NET成员中的所有步骤，可以选择OK，运行程序，创建目录，完成。

还可以在.NET操作构建程序中双击现有的操作，出现Edit Operation Dialog，可以修改现有的操作。

另请参阅

选择.NET成员和.NET Operation Builder

位置

Devices [image] .NET Operation Builder


.NET控制主机

为添加到VEE工作区的.NET控件提供主机的VEE对象。

用途

.NET Framework带有大量的标准控件，您也可以选择使用第三方控件。为使用标准控件，只需进入Device [image] Windows Forms Controls菜单，从列表中选择一个控件。

对第三方控件，参阅菜单选项Device [image] Additional .NET Controls。如果已经使用 .NET Assembly References对话框选择了第三方控件的汇编程序，控件会自动显示在这个菜单中。

.NET控制主机作为.NET控件的容器使用。在工作区中添加一个控件时，VEE创建容器，因此您可以存取控件，其方式与存取其它VEE对象的方式类似。容器还允许存取控件开发人员在控件中植入的具体属性。

当控件出现在工作区中时，其标题栏中有一个标题和变量名称。它没有允许使用直线连接其它对象的端。必须使用表达式，指明获取和设置属性操纵控件的变量名称及调用方法。您仍可以使用Function & Object Browser (Device Function & Object Browser)，帮助您在Formula对象中生成这些表达式，但新的.NET Operation Builder对象将大大简化这一任务。您只需从控件上下文菜单中选择“Generate .NET Operation Builder”，详情请参阅.NET Operation Builder。变量名称在本质上声明为控件的变量名称。控件的声明变量名称与使用Declare Variable对象创建的变量非常类似，但控件的变量已经初始化。声明是上下文局部声明，因此在默认状态下，变量名称只能用于其所在的上下文中。如需与在全局存取.NET控件有关的信息，请参阅下面的备注。

对象菜单

  • Help - 打开描述容器对象的这个VEE Help主题。

  • Properties - 存取VEE容器对象的属性，如标题、变量名称、汇编程序名称和.NET类型。

  • Control Properties - 存取控件的属性栅格，其由控件的所有属性自动填充。每种控件有不同的属性。控件属性编辑不可逆。必须删除和重建控件，才能恢复默认值。某些控件属性不能串行化(保存)到VEE程序中，对这些属性，您会获得警报。

  • Edit Event Handler… - 如果已经为控件创建了任何事件处理程序UserFunction，打开Edit Event Handler对话框。

  • Create Event Handler… - 打开Create Event Handler UserFunction浏览器，这个浏览器允许创建一个UserFunction，处理控件生成的事件。可以为浏览器Member区域中列出的每个事件创建一个事件处理程序。

  • Generate .NET Operation Builder – 为这类控件生成.NET Operation Builder。

属性(容器对象)

Title - 显示容器对象的当前标题，允许用户编辑标题。

Name - 显示控件的当前局部变量名称，允许编辑名称。这会作为上下文局部变量，声明及初始化控件。

.NET Type – 控件的类型。

Assembly – 包含控件的汇编程序。

备注

VEE必须设置成VEE 6或更高的执行模式，以使.NET支持生效(默认首选项)。.NET控件作为单独的产品使用，也可以作为大型程序的一部分安装。

VEE不支持所有.NET控件。如果控件不兼容VEE，那么在程序中添加控件时或在使用控件时会发生错误。可能会有某些不太明显的问题，具体如下：

  1. 并不是Device [image] Windows Forms Controls菜单中列出的所有控件都适合直接放在VEE工作区上。某些控件本身要包含在其它控件内部。例如，Splitter本身用于容器控件内部，如Panel。在这种情况下，只应把容器控件放在VEE的工作区上，然后使用Formula或.NET Operation Builder把子控件添加到容器控件中。范例请参阅Splitter.vee。

  2. 只有在控件位于Windows Form程序内部时，才能调用某些控制方法，如ProcessDialogKey, ProcessDialogChar, ProcessCmdKey，但VEE程序不是Windows Form程序。控件编写人员很少需要实现这些方法，但如果他/她实现这些方法，那么VEE程序可能不会提供该控件的所有功能，否则您可能会得到意想不到的行为。

  3. 在通过Control Properties对话框改变控件属性时，属性被串行化(保存)到VEE程序中。VEE不会明确控制串行化顺序。因此，如果.NET控件拥有高度耦合的属性，如设置属性A将改变属性B，那么在从保存的状态恢复控件时，您可能不能获得预计的结果。在本例中，根据是否在A之前保存/加载B，您可能会获得不同的结果。尽管这种情况并不常见，但如果您想避免与串行化顺序的相关性，那么应使用Formula对象或.NET Operation Builder对象编写表达式，改变控件属性。通过这种方式，可以明确控制顺序。

在VEE工作区中添加控件时，在标题栏中会出现指配的局部变量名称。通过改变.NET控制主机的Name属性，可以改变指配的变量名称。由于控件没有使用直线连接到程序中其它对象的端，必须在Formula对象或.NET Operation Builder中使用表达式操纵控件，这些表达式通过变量名称指称控件。由于变量是上下文局部变量，因此这些表达式必须出现在和控件相同的上下文中。

如果希望变量名称是全局的，那么使用Declare Variable (Data [image] Variable [image] Declare Variable)声明新的变量名称。由于控件的变量名称已经存在，不能简单地声称其为全局变量；VEE不允许有这样的冲突。在Declare Variable，输入变量名称，设置Scope to Global，设置Type to Object。您不必检查Specify Object Type；但是，通过指定对象类型细节，VEE将自动检查类型，保证指定的Assembly和Class只指配给声明变量。然后可以把控件的局部变量(如progressBar1)设置成等于声明变量(如g_progressBar1)，如下面的表达式中所示：

Set g_progressBar1 = progressBar1

另请参阅

.NET Operation Builder

位置

Device [image] .NET Controls


VEE和一级内插汇编程序

您已经从".NET 术语"主题中了解到PIA是一个单独的，由卖方提供的汇编程序，它包含使用COM实现的类型的类型定义（如图元数据）。只能有一个一级内插汇编程序，其必须被COM类型库的发行商标以一个有力的名称。VEE是怎样提供这些PIAs的呢？

当您在 Device > .NET Assembly References选择COM栏时，VEE将搜索注册表并且在您的机器上找到所有注册的COM类型库。当您选择了COM类型库时，如果库中有一个PIA并且COM 类型库的PrimaryInteropAssemblyCodeBase键已经被注册，那么PIA位置将显示在描述区中。注意，只有在PIA使用/codebase选项注册时，才能注册PrimaryInteropAssemblyCodeBase。并不是所有的PIA都以这种方式注册。通常来说，所有Agilent IVI-COM驱程都使用/codebase选项注册，但许多汇编程序不这样注册。也应该注意到的是，当您检查一个COM类型库时，所有的VEE都将会查看注册表，如果只有一个VEE，它将不会加载内插汇编程序。一旦您选择OK，如果没有PIA，VEE将会自动生成一个或多个内插汇编程序。

如果您选择浏览并且直接选择了一个PIA或一个内插汇编程序， VEE实际上仍会加载内插汇编程序，以找出它属于哪种COM类型库，以及它是否为一级内插汇编程序，这是查询/选择和复选COM栏列表之间的关键区别。当加载内插汇编程序后，VEE找到它所属的COM类型库，然后在COM栏列表下复选相应的COM类型库。


Programming .NET

.NET编程

类型转换

.NET增加了一种新的类型转换功能，称为asClrType。 AsClrType把VEE数据类型转换成.NET/CLR数据类型。有效的.NET/CLR数据类型包括所有基本类型(Boolean, Byte, Sbyte, Int16, Uint16, Int32, Uint32, Int64, Uint64, Char, Double, 和Single), Decimal, Date/Time和String。如果.NET数据类型无效或转换失败，那么会出现错误信息。

很少需要asClrType，因为在大多数情况下，VEE在VEE数据类型和.NET数据类型之间自动转换。只有在必须使用.NET中不支持的某个.NET数据类型，或希望象.NET对象一样使用VEE数据类型时，如为了调用.NET对象方法，才需要使用asClrType。例如，VEE在.NET String和VEE Text数据类型之间转换，但如果您想使用.NET提供的许多有用的String函数，那么必需先把EE Text转换成 .NET String对象。

.NET和Win32 API

两种API的详细比较请参阅：http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/win32map.asp

编程实务

安装新的汇编程序

如果您对汇编程序一词感到陌生，请复习.NET术语。公共汇编程序必须安装在全局汇编高速缓存(GAC)中。计算机上的所有程序会看到(GAC)中安装的汇编程序。(详情请参阅MSDN。) 共享汇编程序一旦更新，可以选择Browse按钮，浏览到汇编程序安装在GAC之前所在的原始位置，参考共享汇编程序。

大多数汇编程序没有安装在GAC中。它们是专用汇编程序。专用汇编程序应使用参考它的VEE程序定位。在第一次使用.NET Assembly References对话框浏览和选择专用汇编程序时，VEE将把它复制到当前VEE程序相同的目录下(如果它没有位于这个位置)。这种复制也简化了VEE程序分发工作，称为xcopy部署。

更新汇编程序

如果在VEE程序中已经参考共享汇编程序，那么在VEE加载新版共享汇编程序之前，必需进行File/New操作或再次重启VEE。如果它不是共享汇编程序，而是专用汇编程序，那么在把新版专用汇编程序手动复制到当前VEE程序目录中之后，必需进行File/New操作或重启VEE。

调用实例方法

在调用实例方法时，很容易会忘记先声明和创建.NET对象。为避免这个问题，建议使用Function & Object Browser和Create Instance按钮，先生成构造器公式模板。

在下图中，作为System.IO.FileInfo对象在局部声明及初始化fileInfo。可以把fileInfo输出端连接到要求这个对象实例的任何后续公式框的输入端。另外注意，CreateInstance公式框和fileInfo.LastAccessTime公式框都由VEE自动创建。您只需把它们连接起来，提供任何其它参数即可。

调用共享/静态方法

在调用.NET成员时，如果成员是Shared/Static成员，那么Function & Object Browser描述框中会出现STATIC一词。静态方法从.NET类中直接调用，而不是从对象中调用。因此，您不必先创建.NET对象。下图是导入名字空间的静态方法范例。

技巧

  • 如果从VEE公式框中调用要求Long/Single/Double.../的.NET方法，其中参数来自输入端，如'A'，通过双击输入端A，把要求的类型设置成匹配int32/Real32/Real64/etc.，通常可以消除'Method Not Found'异常情况。这要比调用内置asCltType函数或.NET System.Convert.To*函数简单。

  • 为Instance成员生成的公式模板一直以小写字母开头。静态成员有一个完全合格的名称(名字空间加类名称)，除非其名字空间已经导入。

  • 在调用.NET成员时，如果成员是Static成员，那么 Function & Object Browser描述框中会出现STATIC一词。静态方法从 .NET类中直接调用，而不是从对象中调用。因此，您不必先创建.NET对象。

  • .NET中的枚举与COM中的枚举不同。它们有效地进行类型转换。.NET中有两种枚举，其中一种作为常数枚举处理，另一种作为位字段处理。只有后一种枚举才针对位类操作。在VEE中，枚举类型在Function & Object Browser的描述区中显示其底层积分值。可以与VEE范例examples\dotnet\FileAttributes.vee中一样，在后一种枚举中使用bitOr、bitAnd等等。

  • Function & Object Browser中新增了一个Copy to Clipboard按钮。可以使用这个按钮，把公式文本拷贝复制到剪切板中，以后再把它粘贴到公式框中任何地方。这特别适合希望在一个公式框中有多个公式语句的情况。

限制

VEE不支持创建.NET Delegates。

范例

asClrType范例请参阅StringSplit.vee。

调用Instance和Static方法的范例请参阅FileInfo.vee

.NET程序的其它范例请参阅.NET范例。


VEE Pro 数据类型和 .NET 数据类型间的转换

对所有的VEE 和 .NET的数据类型，比如 Int16, Int32, Real64, 等等，VEE都可以把它们在 VEE 和 .NET 之间自动转换。有时，你也许希望禁止这样的自动转换以便把数据作为一个真正的.NET 对象来处理。这时，你可以使用 asClrType 类型转换函数把 VEE 数据类型转换为.NET/CLR 类型。详情请参阅下表。

用途

VEE 中的.NET 操作通常可以接受一个精度扩展（类型提升）的数据类型作为参数，但不能接受一个精度降低 (类型降级) 数据类型。比如，可以把一个 VEE 的 UInt8 型的数传给一个要求System.Int16型参数的 .NET 操作，但反之不行。另外，如果 .NET 操作需要一个 ByRef 参数而且需要返回结果，那么数据类型就必须完全匹配。比如，如果 .NET 方法需要一个 ByRef Int32 型的参数，就只能传 VEE 的 ByRef Int32 型数据。如果不需返回结果，就可以跳过 ByRef 关键字而使用通常的参数规则就行了。

下列表格解释了在 VEE 和 .NET 之间进行类型转换的函数。

如何使用 asClrType, 请参阅 StringSplit.vee.

表格

表 1 - 在VEE 8.0 中，将.NET 标量数据转换为 VEE 的数据类型。

.NET 数据类型 | VEE 数据类型 | 注释
System.Boolean | Int16 | 使用 isVariantBool() 确定 VEE Int16 是否为 System.Boolean 数据类型。
System.Byte | Uint8 |
System.Char | Object | System.Convert.To* 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型。比如， ToInt32()。
System.DateTime | Object | 参阅 examples\dotnet\DateTime.vee.
System.Decimal | Object | 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型。比如，ToInt32(). 如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException。System.Decimal 结构本身也提供了一些转换方法。
System.Double | Real64 |
System.Enum | Object | 参阅 examples\dotnet\FileInfo.vee.
System.Int16 | Int16 |
System.Int32 | Int32 |
System.Int64 | Int64 |
System.SByte | Object | 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型。比如 ToInt16().
System.Single | Real32 |
System.String | Text | VEE 自动地把字符串转换为文本。如需使用 System.String 类中的功能，可以使用asClrType 把文本转换为 System.String，如 Set dotNetString = asClrType(veeText, System.String); ModifiedString = dotnetString.Replace( ,_); 另请参阅 examples\dotnet\stringsplit.vee
System.UInt16 | Object | System.Convert.To* 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型，比如， ToInt32()。
System.UInt32 | Object | System.Convert.To* 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型，比如， ToInt32()。如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException。
System.UInt64 | Object | System.Convert.To* 可以用于转换出一个 VEE 可以自动转换的 .NET 数据类型，比如， ToInt64(). 如果值不能转为一个Int64 型的数，会发生代号为 751 的错误，表示一个System.OverflowException。
System.Object | Object |

表 2 - 在VEE 8.0 中，将 VEE 的数据类型转换为.NET 标量数据 。

VEE 数据类型 | .NET 数据类型 | 注释
Boolean | System.Boolean | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Int16 | System.Int16 | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Int32 | System.Int32 | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Int64 | System.Int64 | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Real32 | System.Single | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Real64 | System.Double | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Text | System.String | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
UInt8 | System.Byte | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
<scalar of type *> | System.Boolean | asVariantBool() 可用于任何 VEE 可以被转换为一个 Int16, (UInt8, Int16, Int32, Real32, Real64, Text)的标量数据类型。也可以使用更为通用的 asClrType, 如 asClrType(veescalar, System.Boolean).
Date/Time | System.DateTime | VEE 中的日期/时间以 Real64 类型存贮。使用 asClrType(veeDateTime, System.DateTime). 请参阅 examples\dotnet\DateTime.vee.
Object | System.Object | 如果VEE由一个指向 .NET 对象的指针。

表 3 - 在VEE 7.5 中，将.NET 标量数据转换为 VEE 的数据类型。

.NET 数据类型 | VEE 数据类型 | 注释
System.Boolean Array | In16 Array | 使用 isVariantBool() 确定 一个数组是否为 System.Boolean 数据类型。
System.Byte Array | UInt8 Array |
System.Char Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。 可以使用公式 CreateInstance(mscorlib,System.String,charArray).ToString() 把一个数组转换为一个VEE 可以被转换的 .NET 数据类型。
System.DateTime Array | Object | The VEE object holds a pointer to a System.Array .NET object.
System.Decimal Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。 System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt32()。如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException。System.Decimal 结构本身也提供了一些转换方法。
Double Array | Real64 Array |
System.Enum Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。
System.Int16 Array | Int16 Array |
System.Int32 Array | Int32 Array |
System.Int64 Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。 System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt32()。如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException。System.Decimal 结构本身也提供了一些转换方法。.
System.SByte Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。 System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt16().
System.Single Array | Real32 Array |
System.String Array | Text Array | VEE 自动地把字符串转换为文本。如需使用 System.String 类中的功能，可以使用asClrType 把文本转换为 System.String 数组。
System.UInt16 Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。 System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt32()。
SystemUInt32 Array | Object | System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt32()。如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException
System.UInt64 Array | Object | System.Convert.To* 可以用于将每一个数组成员转换成 VEE 可以自动转换的 .NET 数据类型，如 ToInt32()。如果值不能转为一个Int32 型的数，会发生代号为 751 的错误，表示一个System.OverflowException
System.Object Array | Object | VEE 对象有一个指向 System.Array .NET 对象的指针。

表 4 - 在VEE 7.5 中，将 VEE 的数据类型转换为.NET 标量数据 。

VEE 数据类型 | .NET 数据类型 | 注释
Int16 Array | System.Int16 Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Int32 Array | System.Int32 Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Real32 Array | System.Single Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Real64 Array | System.Double Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
Text Array | System.String Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
UInt8 Array | System.Byte Array | 使用 asClrType 转换为其它 .NET/CLR 类型。请参阅 asClrType 文档。
< type *> Array | System.Boolean Array | asVariantBool() 可用于任何 VEE 中可以被转换为一个 Int16, (UInt8, Int16, Int32, Real32, Real64, Text)的数据类型。也可以使用更为通用的 asClrType, 如 asClrType(veeArray, System.Boolean)。
Date/Time Array | System.DateTime Array | VEE 中的日期/时间以 Real64 类型存贮。使用 asClrType(veeDateTime, System.DateTime). 请参阅 examples\dotnet\DateTime.vee.
ref, out, ByRef | 由上面的映射表指明的标量或数组类型。 | 请使用 VEE 的关键字 ByRef，否则会导致一个 .NET 操作异常，但是传入的参数不会改变。 这也许不是 .NET 类的设计者所期望的。

注释

只有当一个 .NET 方法的参数被显式地声明为“Ref” or “Out”（在 C#） or “ByRef”（Visual Basic.NET）时，VEE才能产生关键字“ByRef”。每当指定关键字“ByRef”后，VEE都会分配额外的内存以接收来自服务器的返回数据。当下列条件满足时，就会出现问题。

1. 参数类型为 VEE 所支持的一种数组类型 - 文本数组，UInt8 数组, Int16 数组, Int32 数组, Real 32 数组, Real 64 数组。

2. .NET 服务器没有显式地把参数声明为“Ref” or “Out”（C#） or “ByRef”（Visual Basic.NET）。

3. .NET 服务器确实改变了方法中参数的值。

如果上述条件全部满足，VEE 用户就得手动地把关键字“ByRef”添加到参数前以便从 .NET 服务器获得改变后的值。


.NET和IVI驱程

什么是IVI? IVI是IVI基金会开发的一种新型仪器驱程标准。IVI基金会是为推广测试仪器编程规范而成立的团体。这些规范提供了多种好处，但主要好处是简化了仪器互换能力。如需了解IVI基金会的情况，请访问： http://www.ivifoundation.org/。

为什么要使用IVI-COM驱程? 假设两家厂商都为一个DMM提供IVI-COM驱程。为满足IVI标准，基本驱程必须能够互换。这意味着不管系统上使用哪种驱程，来自任一厂商的DMM都将运行。您的代码不需任何干预即可重用。

用途

怎样在VEE中使用IVI-COM驱程? 安装IVI-COM驱程。如果想为仪器找到驱程，请访问网址： http://www.agilent.com/find/adn。如果您是ADN成员，从菜单中选择Downloads > Drivers by Driver Type > IVI-COM Drivers and Components。在安装IVI=COM驱程前，一定要下载和安装IVI-COM共享组件。此外，在共享组件安装程序上，一定要选择标有"Install PIA's"的按钮。如果您不是ADN成员，那么可以使用安捷伦驱程、评测软件、文档和白皮书网上资源。为签约这一免费服务，请添写新用户注册表。

一旦在系统上注册了IVI-COM驱程，那么它们可以象任何其它COM组件一样使用，与大多数COM组件一样，将出现在Device > .NET References in VEE的COM栏上。

还可以通过 Instrument Manager存取这些驱程，其方式是：选择接口，然后选择Advanced Properties，最后编辑IVI-COM Driver栏。然后可以选择仪器，点击IVI驱程按钮，创建To/From transaction框。

VEE和.NET怎样使用IVI-COM驱程? 通过.NET的互通技术。通过互通技术，IVI-COM驱程可以用于VEE。如果没有为选择的COM DLL提供基本互通汇编程序，那么VEE会试图生成一个Interop Assembly (如果COM .dll参考其它类型库，那么会生成一个以上的Interop Assembly)。然后，VEE会在Function Object Browser的 .NET Object Assembly References列表中添加Assembly Reference。这时，可以象任何其它COM类型库一样调用IVI-COM驱程。

范例

安捷伦建议使用Device > .NET Assembly References COM栏，而不是ActiveX。它将为使用IVI驱程提供更多的所需类型。对这些范例，写字板很有帮助，应全面利用写字板。在~installdir\examples\ivi-com中还有许多其它范例。

IVIAgilentSA.vee 和EPM_Averages_IVI_COM.vee

另请参阅

什么是IVI?, .NET和COM, To/From IVI-COM, To/From IVI-COM - Advanced,和COM对象 - 问题诊断


VEE和.NET安全

VEE7.0及其更高版本基于.NET Framework 和CLR 。在进行网络安装时存在一个需要考虑的安全问题。如果在网络驱动器上安装VEE，

1、打开一个命令提示符。转到系统驱动器（通常为C盘）。

2、将目录改成\[winnt or windows]\Microsoft.NET\Framework\v1.1.4322

Caspol 杕achine 朼ddgroup 揂ll_Code?杣rl File://[VEEInstallDir]/* FullTrust

3、在提示符下运行下面的命令：

Caspol 杕achine 朼ddgroup 揂ll_Code?杣rl File://[VEEInstallDir]/* FullTrust

VEEInstallDir是VEE在网络驱动器上的安装路径。（Caspol带有.NET Framework并与VEE一起安装。）也可以运行.NET Framework Configuration Wizard来达到同样的效果。在运行上面任一工具时，您必须具有管理权限。

除此之外，如果您的VEE程序引用.NET汇编程序，VEE通常需要在一个可存取的位置生成并且/或者保存组件。例如，如果打开一个来自电子邮件或网络的包含.NET参考的VEE程序时，没有先在本地保存，系统会发出警告。


选择ActiveX控件

在VEE中使用ActiveX控件前，需要通知VEE想使用哪个ActiveX控件。点击Device [image] ActiveX Control References...，出现的ActiveX Control References对话框会列出Windows Registry注册的可用控件类型库。下图显示了选中多个控件的对话框。

显示的列表可能会不同，具体取决于已经安装的应用程序。在高亮度显示库名称时，其位置会出现在对话框状态区域中。

在查找想要使用的控件时，点击复选框by the control name (或双击名称)，会出现一个对号。然后点击OK，把它们加载到内存中，以供VEE使用，并搜索对象类、调度接口和导出的事件。可以选择多个控件，但由于选中的库会占用内存，因此只应选择打算使用的控件。

如果知道控件存在一个控件类型库，但没有出现在列表中，那么在安装期间可能没有注册类型库。按Browse按钮，查找列表中缺失的类型库。在定位和打开类型库文件时，VEE会试图注册类型库，并把它添加到列表中。


在VEE中添加控件

在VEE程序中添加控件与添加任何其它对象类似。在选择ActiveX控件后，可以在程序中添加这些控件。点击Device [image] ActiveX Controls，看到一个级联菜单，列出选中的控件。范例如下图所示。

备注

在这个图及上图中，在ActiveX Control References对话框中选择了五个控件，但Device [image] ActiveX Controls级联菜单中出现了六个控件。某些选项会导致在出现的菜单中添加一个以上的ActiveX控件，这是正常现象。

选择一个控件，把得到的对象放在VEE工作空间的细节视图中。可以把控件放在任何上下文中，包括Main、UserObject或UserFunction。通过从对象菜单中选择Cut，或双击对象的上下文菜单按钮，可以删除控件。参阅下图。

ActiveX控件主机中的差异

ActiveX控件不同于任何其它VEE对象。与所有其它VEE对象不同，ActiveX控件既没有输入端和输出端，也没有任何序列输入端和输出端。控件不是面向数据流程的。

为使您能够以访问其它对象的类似方式访问控件，VEE在程序中创建了一个专用容器，这个容器是控件的主机。这个容器还可以访问开发人员在控件中内置的具体属性。不管功能组合如何，我们都把它们称为ActiveX控件。

对象菜单中的部分差异如下。Properties和Control Properties菜单项可以访问两个不同的属性集。主机容器的属性与控件属性分开。如果想查看与VEE对象相关的典型属性，在本例中是主机容器，点击Properties。如果想查看和改变控件开发人员提供的ActiveX控件的属性，点击Control Properties。

如果开发人员提供了联机帮助，控件Properties对话框上的Help按钮可以打开联机帮助。对象菜单的Help项打开主机容器的VEE Online Help内容。Create Event Handler...和Edit Event Handler...提供了处理Automation对象事件中ActiveX automation对象介绍的相同功能。


在VEE中使用ActiveX控件

在VEE工作区中添加控件时，控件会在标题栏中出现指配的局部变量名称。双击控件的标题栏，出现ActiveX Control Properties对话框，可以改变指配的变量。在General栏下，改变Name:旁边的值。

由于控件没有用线连接到程序中其它对象的端，因此必须使用通过变量名称指称控件的Formula对象中的表达式处理控件。这些表达式必须出现在与控件相同的上下文中，因为控件变量名称的作用范围是"local to context"。

使用指配的局部变量

如果在程序中添加Calendar控件，其指配局部变量名称Calendar。标题栏中包含Calendar。为与控件交互，添加上下文与Calendar控件相同的Formula对象。下面的范例演示了在称为Calendar的VEE局部变量参考的ActiveX控件上设置属性，获得属性，及调用方法：

Calendar.Day = 24;

Month = Calendar.Month;

Calendar.AboutBox()

为控件声明全局变量

如果希望变量名称是全局的，那么使用Declare Variable (Data [image] Variable [image] Declare Variable)声明新的变量名称。这与声明Automation对象变量中描述的变量声明类似。由于控件的变量名称已经存在，如Calendar，不能把它声明为全局变量，因为VEE不允许出现这种冲突。常用的命名惯例是调整局部变量名称(如在g_localName中)，得到g_calendar。

在Declare Variable中，输入新的变量名称，把Scope设置成Global，把Type:设置成Object。不需要复选Specify Object Type，指定特定的Library和Class。但是，如果进行这种操作，VEE将自动检查类型，保证只为声明变量指配Library和Class。

在声明全局变量后，使用Formula表达式，把控件的局部变量名称(如Calendar)设置成等于声明变量名称(如g_calendar)。非常重要的一点是使用SET关键字，如下面的表达式中所示：

SET g_calendar = Calendar


处理ActiveX控件

设置和获得属性、调用方法及处理ActiveX控件事件使用的机制与处理Automation对象和处理Automation对象事件中为ActiveX automation对象描述的机制相同。

尽管VEE在主机对象中包含ActiveX控件，从而可以访问ActiveX控件，但在程序运行时控件行为略有差别。基本上，一次只能在一个地方查看控件，包括细节视图和面板视图。

例如，假设在程序的细节视图中添加一个控件，程序会动态显示一个面板，在这个面板上会使用Show Panel on Execute或 showPanel()出现控件。控件在细节视图中会隐去，直到面板关闭。在面板关闭时，控件会重新出现在细节视图中。


在VEE中使用ActiveX Automation

ActiveX automation允许使用VEE作为自动化控制器，控制其它Windows应用程序，如Microsoft Word, Excel, Access和Crystal Reports。可以执行各种操作，如把数据发送到应用程序中生成报告，从应用程序中读回数据。对支持自动化功能的应用程序，这会替代Dynamic Data Exchange (DDE)。

各个厂商提供了ActiveX控件。它们通过ActiveX automation属性、方法和事件提供域专用服务，扩展了VEE的功能。大多数ActiveX控件还提供了一个用户界面，允许处理控件，如"滑尺"，把值输入程序中，就象使用VEE Slider对象一样。

VEE不支持所有ActiveX控件。如果控件不兼容VEE，那么在程序中添加控件，或在使用控件时，可能会发生错误。这里列出了已经知道不能正确工作的控件。

备注

为实现ActiveX支持，必须在Default Preferences对话框中在General栏下把VEE设置成VEE 5或更高的Execution Mode。VEE 8是新程序的默认模式。VEE窗口底部的状态栏显示了当前模式。如果要在使用VEE3.x, 4.x或5.x版开发的程序中添加ActiveX功能，在添加新功能前，确认程序在VEE 5或更高的Execution Mode下运行。如需更多信息，参阅Help菜单下Contents and Index中的Tell me about.. Execution Modes。

我们提供了多个范例，演示了怎样使用ActiveX automation和ActiveX控件。其位于VEE安装目录下的\examples\ActiveXAutomation and \ActiveXControls。为打开和运行这些范例，使用Help [image] Open Example...。


在VEE中使用Automation对象

在安装Windows应用程序时，极有可能已经安装了ActiveX类型库，允许应用程序作为automation服务器使用。类型库描述ActiveX对象的功能，在系统上存在时可以使用这些类型库。由于下述原因，可能会首选使用特定的类型库：

• 在定义对象类型时令VEE在为ActiveX对象声明的变量上进行类型检查(参阅声明Automation对象变量)。

• 捕捉automation对象生成的事件(参阅处理Automation对象事件)。

• 查看ActiveX Object Browser中的信息(参阅使用ActiveX Object Browser)。

为选择想在程序中参考的类型库，点击Device [image] ActiveX Automation References…，出现ActiveX Automation References对话框，列出Windows Registry注册的所有类型库。下图显示了对话框，其中选择使用Microsoft Access库。

显示的列表可能会不同，具体取决于已经安装的应用程序。在高亮度显示库名称时，其位置会出现在对话框状态区域中。在查找想要使用的automation服务器时，点击复选框by the library name (或双击名称)，会出现一个对号。然后点击OK。

这会加载选择的类型库，搜索对象类、调度接口和导出的事件。可以选择多个库，但由于选中的库会占用内存，因此只应选择打算使用的库。

如果知道automation服务器存在一个类型库文件，但没有出现在列表中，那么在安装相关应用程序时可能没有注册类型库。按Browse按钮，查找列表中缺失的类型库。在定位和打开类型库文件时，VEE会试图注册类型库，并把它添加到列表中。


声明Automation对象变量

可以使用新的Object数据类型为ActiveX automation对象声明一个变量(Data [image] Variable [image] Declare Variable)。声明变量参考活在另一个程序中的对象。例如，它可能会指向Access中的一个ComboBox。如下图所示，在把变量Type设为Object，把Sub Type设为COM时，对话框会展开，列出库名称、类和启动的事件。

通过点击Edit按钮，进入Specify Object Type对话框，设置库和类名称，启动为类提供的事件，可以进一步指定对象变量的类型。

如果正在使用Access Object Library，可以声明一个变量结合物，然后把对象类型指定为Library: Access和Class: ComboBox，如下图所示。在本例中，ComboBox类包含多个事件。为使用这些事件，点击Enable Events。如果没有为类提供事件，那么复选框会变成灰色。

在指定对象类型后，点击OK，对话框消失，返回Declare Variable，显示信息。

如果启动事件，那么可以为希望捕获的每个事件创建一个事件处理器UserFunction。如需与使用事件有关的信息，参阅处理Automation对象事件。

与任何VEE变量一样，声明变量是可选的，这样做不会在程序中创建automation对象。但是，如果为automation对象声明变量，并指定对象类型细节，那么VEE会自动进行类型检查，以保证只为声明变量指配指定Library和Class类型。


在程序中创建Automation对象

为从VEE控制服务器应用，需要在程序中创建一个Automation对象。CreateObject函数允许进行这种操作。为把函数放在程序中，点击工具栏上的fx按钮，出现Function & Object Browser，然后选择：

Type: Built-in Functions
Category: ActiveX Automation
Member: CreateObject

点击Create Formula，把Formula对象放在程序中。Formula包含下面的表达式。

CreateObject(ProgID)

需要修改这个表达式，以执行所需的操作。

备注

ProgID是人可以读的字符串，确定希望创建的Automation对象。如果想确定automation对象的ProgID，参阅厂商提供的文档。

在大多数情况下，需要在服务器应用的新实例中创建一个新的automation对象实例。例如，下面的VEE表达式启动Excel的一个新实例(即使Excel已经在运行)，为捆绑到Excel变量的新"Workbook"对象返回一个参考。

SET excel = CreateObj

ect("Excel.Sheet")


使用分布式组件对象模型(DCOM)

DCOM允许Automation客户端(VEE)远程控制Automation服务器(Excel, Access, 等等)。可以在一台计算机上运行VEE，控制在另一台计算机上运行的Automation服务器，如Excel。第二台计算机不需要安装VEE，只需安装VEE控制的应用程序。

为此，CreateObject函数获取可选的第二个参数，指定安装对象的远程主计算机(服务器)的名称。(这一功能要求在客户端和服务器上同时安装DCOM，并要求已经使用dcomcnfg.exe配置相应的安全设置) 通过使用这个额外的参数，CreateObject()的定义类似于：

CreateObject ("ProgID", ["hostName"])

其中hostName的类型必须是Text。可以作为有效UNC或DNS域名指定hostName。下面是有效的hostName规范：

Set obj = CreateObject ("ProgID", "server")=9-

Set obj = CreateObject ("ProgID", "\\\\server")

Set obj = CreateObject ("ProgID", "server.domain.com")

Set obj = CreateObject ("ProgID", "135.5.33.19")

VEE不能程控实例化远程计算机上的对象使用的安全设置，这可以通过dcomcnfg.exe程序静态完成。


获得现有的Automation对象

如果已经创建了一个automation对象，通过使用GetObject函数，可以得到一个活动的对象或从文件中加载现有的对象。为把函数放在程序中，点击工具栏上的fx按钮，出现Function & Object Browser，然后选择：

Type: Built-in Functions

Category: ActiveX Automation

Member: GetObject

点击Create Formula，把Formula对象放在程序中。Formula包含表达式：

GetObject("fileName", "ProgID")

需要修改这个表达式，以执行所需的操作。

下面的表达式得到一个活动的对象，返回一个当前运行Excel程序的Application对象参考。如果Excel没有运行，那么这一调用将失败。

SET excel = GetObject("","Excel.Application")

下面的表达式从文件中加载一个现有的对象。ProgID参数是可选参数：

SET excel = GetObject("d:/tmp/TestData.xls","Excel.Sheet")

或

SET excel = GetObject("d:/tmp/TestData.xls")

它们返回一个与当前运行的Excel应用中d:\tmp\TestData.xls相关的工作表对象参考。如果Excel还没有运行，那么会启动Excel，然后加载对象。如果省略ProgID，那么VEE会使用组件对象模型(COM)库，确定文件与哪个应用相关。


处理Automation对象

在创建automation对象后，可以处理对象，控制服务器应用。处理automation对象涉及三个基本操作：获得属性，设置属性，调用方法。本节使用前面初始化的名为cell、sheet和excel的对象变量，演示了这些基本操作。同时，本节介绍了VEE关键字SET和ByRef。

获得和设置属性

本节中的表达式提供了获得和设置对象属性的范例。下面的表达式获得一个属性，其中value属性返回单元格的内容：

contents = cell.value

在下面的表达式中，value属性返回单元格的内容：

contents = sheet.cells(1,1).value

下面的表达式进行的获得属性操作与上一个表达式相同，由于默认属性(参阅下面的介绍)，它暗示了.value属性：

contents = sheet.cells(1,1)

有时您需要得到右面的内容、值和默认属性(默认情况)，有时您需要一个指针指向右侧的对象，而不是其值。为得到对象指针，需要使用SET，告诉VEE不要获得默认值。下面的表达式设置对象参考，其中单元格变量设置成参考单元格"集合"之外的单元格：

SET cell = sheet.cells(1,1)

本例与第二个范例之间的区别是，SET指定左面需要右面的对象本身，而不是其默认属性。

下面的表达式是设置对象属性的范例。由于默认属性，下面三个表达式完全相同：

cell.value = "Test Data2:"

sheet.cells(1,1).value = "Test Data2"

sheet.cells(1,1) = "Test Data2"

关于默认首选项

大多数automation对象支持默认属性或方法的概念。在处理上面的范例中所示的automation对象时，可以使用这一概念。在单元格中，其默认属性是value。因此，上面获得属性的第一个范例可以使用这一概念，暗示.value属性，其输入内容为：

contents = cell

这意味着表达式

contents = sheet.cells(1,1)

不仅从单元格集合中返回一个单元格，而且还会对表达式中该单元格上的默认属性(.value)求解：

contents = sheet.cells(1,1).value

为从单元格集合中获得单元格本身，必须在表达式中使用关键字SET，如：

SET cell = sheet.cells(1,1)

这会把单元格设置成指向Excel中该单元格的一个指针。把它与下面的表达式进行对比：

contents = sheet.cells(1,1)

(如上所述) 其中contents获得Excel中该单元格的内容。此外，Set Property暗示了.value属性，以便下面两个表达式执行完全相同的函数：

cell.value = "Test Data”

cell = "Test Data"

调用方法

调用方法与获得属性类似，但方法有圆括号类()函数，可以获得参数。属性一般用来获得或设置对象的属性值。方法一般用来执行操作。

下面的表达式是在对象上调用方法的范例。

result = excel.CheckSpelling("aardvark")

在默认情况下，根据值传送参数。例如，cells(1,1)实际上会调用一个方法，传送两个参数(1和1)。根据值传送参数只会把参数值传送到Excel，然后发回一个返回值。参数值保持不变。

某些automation方法拥有根据参考传送的参数。automation服务器会改变参数值，新的参数值会传回到VEE。例如，ActiveX仪器控件可能会包含下面的表达式调用的automation方法：

passed = Scanner.GetReading (ByRef Reading)

其中，如果getReading工作，那么方法对passed的返回值为true，否则为false，任何其它值在ByRef参数Reading中返回。应该在传送到函数前初始化变量Reading，并在包含表达式的Formula对象上有一个输出端，以便能够使用任何返回的值。

VEE中支持ByRef关键字，Function & Object Browser在信息区域中显示使用ByRef传送的参数。ByRef不支持所有数据类型。参阅表格“在VEE 5执行模式下从VEE数据类型转换成Automation Scalar数据类型”。

使用枚举

类型库可以提供枚举，这些枚举出现在VEE的Function & Object Browser的Class区域中。枚举使得使用对象方法和属性变得更加容易。例如，Excel中的Window对象有一个WindowState属性。WindowState属性的类型是XlWindowState枚举。这一枚举有三个值：

xlMaximized (-4137)

xlMinimized (-4140)

xlNormal (-4143)

VEE支持枚举，在使用对象方法和属性时允许使用下面的表达式：

Window.WindowState = xlMinimzed

使用ActiveX Object Browser

ActiveX Object Browser是在按工具栏上的fx时打开的Function & Object Browser的一部分。在选择Type: ActiveX Objects时，浏览器配置会变化。浏览器允许浏览ActiveX对象提供的属性、方法和事件。只有在选择automation或控件类型库时(Device [image] ActiveX Automation References或ActiveX Control References)，这里才会出现ActiveX信息。带有Access类型库 ActiveX信息的Function & Object Browser如下。

在选择一个Library名称时，Class区域显示可用的调度接口(dispinterfaces)和枚举。对选中的dispinterface，可用的属性、方法和事件出现在Member区域中。对枚举，会列出常数。上图显示了为Access库提供的部分功能。选中的ComboBox dispinterface包含Member区域中列出的属性、方法和多个事件。下图显示了浏览器的Classes区域和Members区域各项之间的关系，包括标识图标：

如果automation对象提供了帮助信息，那么浏览器的信息区域(就在按钮的上方)会显示与属性、方法、事件或常数有关的帮助字符串。这种语法在参数列表中包含对象的类型信息。带方括号[ ]的参数是可选的参数。某些应用程序可能没有提供这些简便的帮助字符串。

为ActiveX对象的属性、方法参数和返回值提供类型信息。如果没有指定参数类型，那么默认类型是VT_VARIANT。在大多数情况下，VEE自动处理VT_VARIANT类型转换。参阅这个表格及下面的说明，了解与Automation数据类型和VEE数据类型转换有关的更多信息。

对属性，浏览器显示与属性有关的类型信息，比如是只读属性还是只写属性，以及是不是默认属性。可以创建一个Formula对象，执行获得或设置该属性的操作。下面是浏览器在属性的信息区域中显示的内容范例：

DEFAULT PROPERTY Name as Text

对方法，浏览器显示与参数列表中每个参数和返回值有关的类型信息。方法也可以是默认成员，以便浏览器也显示这些信息。可以为配置成调用该方法的方法创建一个Formula对象。下面是浏览器在方法的信息区域中显示的内容范例：

METHOD Void SetData(vValue, vFormat)

对事件，浏览器显示与方法相同的类型信息。但是，与事件有关的事件处理器通常由客户端应用调用。在由automation控制Access的情况下，Access调用事件处理器UserFunction。在使用ActiveX控件的情况下，ActiveX控件调用事件处理器UserFunction。

由于程序或VEE不调用这些向回调用事件处理器，因此Create Formula按钮会变成灰色。只能查看与事件有关的信息。Function & Object Browser不允许创建事件处理器UserFunctions，因为事件必须与某个ActiveX automation变量或一个ActiveX控件捆绑起来。

为创建事件处理器，进入相应Declare Variable或ActiveX控件的对象菜单。下面是浏览器在事件的信息区域中显示的内容范例：

EVENT Void Click()

对枚举中的常数，浏览器显示常数值。下面是浏览器在常数信息区域中显示的内容范例：

CONSTANT tvwRootLines = 1

对小于0及大于1024的常数值，VEE还显示常数的十六进制值。这些信息显示为：

CONSTANT xlNormal = -4143 (#HFFFFEFD1)

如果对象提供帮助信息，那么点击Help按钮会打开与选中的ActiveX对象成员有关的帮助文件和主题。如果没有提供此类信息，那么会出现一个对话框，指明没有为选中的成员提供帮助信息。这些帮助信息由应用程序厂商提供，不属于VEE联机帮助。


数据类型兼容

ActiveX automation 提供对某些数据类型的支持。下面将详细描述在VEE数据类型和ActiveX automation数据类型之间的转换。类型转换是自动进行的。

Table 1 给出了VEE 8执行模式所支持的数据类型转换及其相应的VEE数据类型。

Table 1 VEE 8执行模式下从Automation Scalar 数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_EMPTY | Text | 返回一个空字符("")。使用 isVariantEmpty() 判断一个variant是否为VT_EMPTY类型。
VT_NULL | Text | 返回一个空字符("")。使用 isVariantNULL() 判断一个variant是否为VT_NULL类型。
VT_UI1 | UInt8 |
VT_I2 | Int16 |
VT_I4 | Int32 |
VT_I8 | Int64 |
VT_R4 | Real32 |
VT_R8 | Real64 |
VT_CY | Real64 | 将一个整数部分为8字节的定点整数且有4位小数的数转换为一个VEE的Real64类型的数。使用isVariantCurrency()判断一个variant是否为VT_CY类型。
VT_DATE | Real64 | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。
VT_BSTR | Text |
VT_DISPATCH | Object |
VT_ERROR | Int32 | 返回一个Int32类型的scode值。 使用 isVariantError() 判断一个variant是否为VT_ERROR类型。
VT_BOOL | Boolean |
VT_VARIANT | * | 只在对ByRef有效(VT_VARIANT | BYREF) variant指向另一个variant。 VEE将基于嵌入的variant类型创建一个容器。
VT_UNKNOWN | Object |

Table 2 给出了VEE 6&7执行模式所支持的数据类型转换及其相应的VEE数据类型。

Table 2 VEE 6&7执行模式下从Automation Scalar 数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_EMPTY | Text | 返回一个空字符("")。使用 isVariantEmpty() 判断一个variant是否为VT_EMPTY类型。
VT_NULL | Text | 返回一个空字符("")。使用 isVariantNULL() 判断一个variant是否为VT_NULL类型。
VT_UI1 | UInt8 |
VT_I2 | Int16 |
VT_I4 | Int32 |
VT_I8 | Int64 |
VT_R4 | Real32 |
VT_R8 | Real64 |
VT_CY | Real64 | 将一个整数部分为8字节的定点整数且有4位小数的数转换为一个VEE的Real64类型的数。使用isVariantCurrency()判断一个variant是否为VT_CY类型。
VT_DATE | Real64 | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。
VT_BSTR | Text |
VT_DISPATCH | Object |
VT_ERROR | Int32 | 返回一个Int32类型的scode值。 使用 isVariantError() 判断一个variant是否为VT_ERROR类型。
VT_BOOL | Int16 | 使用isvariantBool()来确定一个variant是否为VT_BOOL类型。
VT_VARIANT | * | 只在对ByRef有效(VT_VARIANT | BYREF) variant指向另一个variant。 VEE将基于嵌入的variant类型创建一个容器。
VT_UNKNOWN | Object |

Table 3 给出了VEE 5执行模式所支持的数据类型转换及其相应的VEE数据类型。

Table 3 VEE 5执行模式下从Automation Scalar 数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_EMPTY | Text (empty string) |
VT_NULL | Text (empty string) |
VT_UI1 | <generates error> | 无符号字符
VT_I2 | Int32 |
VT_I4 | Int32 |
VT_I8 | Int64 |
VT_R4 | Real64 |
VT_R8 | Real64 |
VT_CY | Real64 | 将一个整数部分为8字节的定点整数且有4位小数的数转换为一个VEE的Real64类型的数。使用
VT_DATE | Real64 | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。
VT_BSTR | Text |
VT_DISPATCH | Object |
VT_ERROR | <generates error> |
VT_BOOL | Int32 |
VT_VARIANT | * | 只在对ByRef有效(VT_VARIANT | BYREF) variant指向另一个variant。 VEE将基于嵌入的variant类型创建一个容器。
VT_UNKNOWN | Object |

Table 3 和 Table 4 VEE 7和8执行模式所支持的数据类型转换及其相应的ActiveX automation数据类型。与上述一个反向转换的表不同，下面的转换不是一对一的映射。大部分 ActiveX automation 服务器对象都能将数据转换为所要得类型。

比如，如果你的目标属性为一个长整数，比如一点的X坐标，你就不仅可以传递一个完全匹配的具有Int32类型的数，你还可以传递一个实数甚至一个字符串只要它是由数字组成就行了。 然而，对一个总被当作VARIANT传递的数组来说， 可以接受的数据类型和数组形状将取决于目标 COM 对象。

Table 3 VEE 8执行模式下从VEE数据类型到Automation Scalar 数据类型的转换

转换自 VEE 数据类型 | 转换为 Automation 数据类型 | 注释
Uint8 | VT_UI1 |
Int16 | VT_I2 |
Int32 | VT_I4 |
Int64 | VT_I8 |
Real32 | VT_R4 |
Real64 | VT_R8 |
Text | VT_BSTR |
Boolean | VT_BOOL | asVariantBool() 可以用于任何可被转为 Int16, (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
<scalar of type *> | VT_CY | asVariantCurrency() 可以用于任何可被转为 Real64 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
<scalar of type *> | VT_DATE | asVariantDate() 可以用于任何可被转为 Real64 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
<scalar of type *> | VT_ERROR | asVariantError() 可以用于任何可被转为 Int32 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。 Value of Int32 is 该错误将被指定一个Int32类型的scode(错误码)。
Variant | <scalar of variant type *> | 当前的VEE容器的类型被转换为合适的 variant 类型。例如，如果Variant容器 有一个 VEE Int32, VEE酒会创建一个VT_I4类型的 variant。
Object | VT_DISPATCH | 如果VEE有一个指向IDispatch对象的指针。
Object | VT_UNKNOWN | 如果 VEE 有一个 IUnknown 指针而不是一个 IDispatch指针。

Table 4 VEE 6&7执行模式下从VEE数据类型到Automation Scalar 数据类型的转换

转换自 VEE 数据类型 | 转换为 Automation 数据类型 | 注释
Uint8 | VT_UI1 |
Int16 | VT_I2 |
Int32 | VT_I4 |
Int64 | VT_I8 |
Real32 | VT_R4 |
Real64 | VT_R8 |
Text | VT_BSTR |
<scalar of type *> | VT_BOOL | asVariantBool() 可以用于任何可被转为 Int16, (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
<scalar of type *> | VT_CY | asVariantCurrency() 可以用于任何可被转为 Real64 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
<scalar of type *> | VT_DATE | asVariantDate() 可以用于任何可被转为 Real64 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型
<scalar of type *> | VT_ERROR | asVariantError() 可以用于任何可被转为 Int32 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。 Value of Int32 is 该错误将被指定一个Int32类型的scode(错误码)。
Variant | <scalar of variant type *> | 当前的VEE容器的类型被转换为合适的 variant 类型。例如，如果Variant容器 有一个 VEE Int32, VEE酒会创建一个VT_I4类型的 variant。
Object | VT_DISPATCH | 如果VEE有一个指向IDispatch对象的指针。
Object | VT_UNKNOWN | 如果 VEE 有一个 IUnknown 指针而不是一个 IDispatch指针。

Table 5 是VEE 5执行模式所支持的数据类型转换及其相应的ActiveX automation数据类型。

Table 5 VEE 5执行模式下从VEE数据类型到Automation Scalar 数据类型的转换

转换自 VEE 数据类型 | 转换为 Automation 数据类型 | 注释
Int32 | VT_I4 |
Int64 | VT_I8 |
Real64 | VT_R8 |
Text | VT_BSTR |
Object | VT_DISPATCH | 如果VEE有一个指向IDispatch对象的指针
Object | VT_UNKNOWN | 如果 VEE 有一个 IUnknown 指针而不是一个 IDispatch指针。

Table 6 显示了在VEE 8 执行模式下，从Automation的数组数据类型到VEE数据类型的转换。

Table 6 VEE 8 执行模式下，从Automation的数组数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_UI1 | UInt8 Array |
VT_I2 | Int16 Array |
VT_I4 | Int32 Array |
VT_I8 | Int64 Array |
VT_R4 | Real32 Array |
VT_R8 | Real64 Array |
VT_BSTR | Text Array |
VT_BOOL | Boolean Array | 使用isVariantBool()来确定一个variant是否为VT_BOOL类型。
VT_CY | Real64 Array | 将一个整数部分为8字节的定点整数且有4位小数的数转换为一个VEE的Real64类型的数。使用isVariantCurrency()判断一个variant是否为VT_CY类型。
VT_DATE | Real64 Array | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。 使用isVariantDate()判断一个variant是否为VT_DATE类型。
VT_ERROR | Int32 Array | 返回一个Int32类型的scode值。 使用 isVariantError() 判断一个variant是否为VT_ERROR类型。
VT_VARIANT | <array of homogeneous type OR a record> | 如果数组元素都是同样的基本数据类型，VEE就会根据创建一个其数据类型由 Table 1中的标量映射关系所决定的数组。VEE的 record用于创建包含混合数据类型的数组。
VT_DISPATCH | N/A | 不支持对象数组。.
VT_UNKNOWN | N/A | 不支持对象数组。

Table 7显示了在VEE 6&7 执行模式下，从Automation的数组数据类型到VEE数据类型的转换。

Table 7 VEE 6&7 执行模式下，从Automation的数组数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_UI1 | UInt8 Array |
VT_I2 | Int16 Array |
VT_I4 | Int32 Array |
VT_I8 | Int64 Array |
VT_R4 | Real32 Array |
VT_R8 | Real64 Array |
VT_BSTR | Text Array |
VT_BOOL | Int16 Array | 使用isVariantBool()来确定一个variant是否为VT_BOOL类型。
VT_CY | Real64 Array | sVariantCurrency() 可以用于任何可被转为 Real64 (UInt8, Int16, Int32, Real32, Real64, Text)的标量VEE数据类型。
VT_DATE | Real64 Array | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。 使用isVariantDate()判断一个variant是否为VT_DATE类型。
VT_ERROR | Int32 Array | 返回一个Int32类型的scode值。 使用 isVariantError() 判断一个variant是否为VT_ERROR类型。
VT_VARIANT | <array of homogeneous type OR a record> | 如果数组元素都是同样的基本数据类型，VEE就会根据创建一个其数据类型由 Table 1中的标量映射关系所决定的数组。VEE的 record用于创建包含混合数据类型的数组。.
VT_DISPATCH | N/A | 不支持对象数组。
VT_UNKNOWN | N/A | 不支持对象数组。

Table 8 显示了在VEE 5 执行模式下，从Automation的数组数据类型到VEE数据类型的转换。

Table 8 VEE 5 执行模式下，从Automation的数组数据类型到VEE数据类型的转换

转换自 Automation 数据类型 | 转换为 VEE 数据类型 | 注释
VT_UI1 | Int32 Array |
VT_I2 | Int32 Array |
VT_I4 | Int32 Array |
VT_I8 | Int64 Array |
VT_R4 | Real64 Array |
VT_R8 | Real64 Array |
VT_BSTR | Text Array |
VT_BOOL | Int32 Array |
VT_CY | Real64 Array | 将一个整数部分为8字节的定点整数且有4位小数的数转换为一个VEE的Real64类型的数。
VT_DATE | Real64 Array | 将从12/30/1899开始的天数转换为VEE的日期/时间表示形式，即从 Jan 1, 0001起的秒数。
VT_ERROR | <generates error> |
VT_VARIANT | Record | 如果数组元素都是同样的基本数据类型，VEE就会根据创建一个其数据类型由 Table 1中的标量映射关系所决定的数组。VEE的 record用于创建包含混合数据类型的数组。.
VT_DISPATCH | N/A | 不支持对象数组。
VT_UNKNOWN | N/A | 不支持对象数组。

Table 9 描述的是 Automation 数据类型修改器.

Table 9 Automation 数据类型修改器

Automation Type Modifiers | VEE 类型 | 注释:
VT_BYREF | 由上面的映射表来确定标量和数组的类型。 | 比如： VT_BYREF | VT_BSTR 会产生一个 VEE 字符容器。当为一个VT_VARIANT的标量时，variant 指向另一个 variant。VEE根据嵌入的 variant的类型创建一个容器。

另请参阅

Using ActiveX Automation in VEE, Making Automation Objects Available in VEE, Declaring Automation Object Variables, Creating an Automation Object in a Program, Using Distributed Component Object Model (DCOM), Getting an Existing Automation Object, Manipulating Automation Objects, Deleting Automation Objects, Handling Automation Object Events


删除Automation对象

在VEE释放其参考时，Automation对象负责自行删除。当VEE不再保留automation对象的参考时，它会告诉该对象已经释放参考，然后对象会自行删除，除非其它ActiveX automation控制器应用仍在使用对象。在下述情况下，VEE释放到automation对象的参考：

• Delete Variable对象在automation对象的变量名称上执行。但是，VEE也可以有其它指针指向这些Automation对象。如需更多信息，参阅Delete Variable。

• 在Default Preferences中启动Delete Variables at Prerun，然后重启程序。

• VEE退出，或使用命令File [image] New或File [image] Open。


处理Automation对象事件

Automation对象可以生成事件。作为automation控制器，VEE允许通过UserFunction捕捉事件。如果已经声明某个类型的变量，并且已经启动其事件，那么可以为生成事件的automation对象生成事务处理器UserFunction。对于对象可以生成的每个事件，可以创建一个事务处理器UserFunction。

在为对象声明变量，并启动其事件时(如有)，可以创建一个事件处理器UserFunction。

1 在声明变量并指定其类型后，包括启动事件，打开Declare Variable对象菜单。

在对象菜单中，点击Create Event Handler…，出现Create Event Handler UserFunction浏览器。参阅下图。

Member区域列出了Class区域中列出的调度接口可以使用的所有事件。

2 点击事件名称，选中这个事件。

在选中一个事件时，浏览器信息区域显示事件细节，状态区域显示VEE将创建的UserFunction标题。按Help按钮，获得与使用事件有关的信息。并不是所有事件都有联机帮助，因为库厂商负责提供联机文件。事件的联机帮助并不是VEE联机帮助的一部分。

3 点击Create Handler，出现新的UserFunction窗口。如果再次打开这个对话框，创建另一个事件处理器，您会注意到图标会改变现有处理器事件旁边的颜色。

除了任何要求的输入或输出外，每个新的事件处理器UserFunction都是空的。必须对其编程，相应地处理事件。为编辑现有事件，在Declare Variable对象菜单中，点击Edit Event Handler...。

事件捆绑到声明变量的名称。UserFunction标题把变量名称与事件名称组合在一起。例如，如果声明一个名为combo的变量，并指定其类型为Access.ComboBox，那么可以创建下述名称的事件处理器UserFunction：

combo_AfterUpdate

combo_Change

combo_DblClick

combo_KeyDown

事件是向回调用函数。必须编程生成的UserFunctions (向回调用函数)，相应地处理每个事件。如果automation对象生成事件，那么它会调用相关UserFunction，处理事件。在启动事件时，Automation对象有时会预计VEE提供一个返回值。在这种情况下，必须把UserFunction编程为返回一个值。

在对象预计一个返回值时，它会一直等到VEE提供这个返回值。应编写一个迅速工作的事件处理器UserFunction，因为VEE和automation服务器(如Access）都会一直等到事件处理器UserFunction返回。

由于automation服务器一直等到事件处理器UserFunction返回，因此UserFunction会在非时间分片模式下执行。也就是说，UserFunction会一直运行，直到结束，而在其余VEE程序中不会进行时间分片。由于不是时间分片，因此断点在事件处理器UserFunction中不能工作。此外，错误不会停止VEE。错误会转换成注意信息，VEE会继续执行。


尽可能在数组上执行数学运算

在数组上执行数学运算可以大大改善程序性能。例如，假设一项测试必须找到进行的多项测量的平方根。其传统编程方式是进行一次测量，循环计算平方根。相反，在VEE中，可以把所有测量存储在一个数组中，通过一个步骤计算数组的平方根。

有两个程序。第一个程序迭代1024次，每次迭代计算平方根。

第二个程序创建一个由1024个要素组成的数组，计算这个数组的平方根 (得到一个由平方根组成的数组)。

尽管这两个程序的结果相同 [image] ，但第二个程序的执行速度约比第一个程序快6倍。(本例使用300 MHz Pavilion PC。)

这两个程序执行速度的差异源于一个对象执行要求的时间。在对象执行时有固定数量的开销。因此，通过使用数组而不是标量值来减少对象执行的次数，程序运行速度会加快。

在进行定时，以保证两个程序中定时器先触发时，最好使用Do对象。斜坡函数会生成一个由1024个要素组成、从0开始、到1023结束的数组。

备注

为保证提高执行速度，一定要在VEE中使用最新的执行模式。为此，点击File [image] Default Preferences (或使用工具条上的按钮)。在Execution Mode下选择VEE6，点击Save。在VEE窗口底部的状态条中，应看到列出了VEE6。

另请参阅

尽可能在数组上执行数学运算

尽可能使对象变成图标

减少程序中的对象数量

优化Agilent VEE程序的其它方式

提高程序速度的关键


尽可能把对象变成图标

VEE必须在屏幕上保持的信息越多，程序运行所需的时间越长。为优化程序，更新内容的对象可以使用图标视图，如Counter，而不是使用打开的视图。在For Count和Counter对象使用图标视图时，下面的实例的工作速度约提高了46倍。

另请参阅

尽可能在数组上执行数学运算

减少程序中的对象数量

优化Agilent VEE程序的其它方式

提高程序速度的关键


减少程序中的对象数量

随着经验增多，您倾向于在VEE程序中使用更少的对象。有另外两种技术可以减少对象数量，从而优化程序：

1 在Formula对象中使用一个公式，而不是使用多个单独的数学对象。例如，把公式((a + b) * c)/d代入一个Formula对象中，而不是使用多个不同的对象进行加、乘和除。此外，在公式中使用常数，而不是使用连接到输入上的常数对象。(使用Set Variable设置常数。)

2 把函数调用嵌入到其它函数参数列表中。例如，在第一个程序中， 随机化函数使用斜坡函数生成的数组。在第二个程序中，调用斜坡函数嵌入在调用随机化函数中，使程序执行速度略有提高。

另请参阅

尽可能在数组上执行数学运算

尽可能把对象变成图标

优化Agilent VEE程序的其它方式

提高程序速度的关键


优化Agilent VEE程序的其它方式

在相应情况下可以在程序中使用其它优化技术：

• 在VEE 4或更高版本的Execution Mode下运行程序，确保正在使用VEE汇编程序。如需更多信息，请参阅“Agilent VEE执行模式”。

• 从面板视图中、而不是从详细视图中运行程序。VEE在屏幕上保持的对象数量会较少。

• 使用全局变量、而不是传送值(特别是大型数组或记录)进出UserObjects和UserFunctions。说明所有全局变量。也允许使用局部变量。参阅Data [image] Variable [image] Declare Variable。

• 采集图形显示数据，一次性绘制整个数组图，而不是绘制各个标量点图。如果图中的X值间隔均匀，那么使用XY Trace显示，而不是X vs. Y图。

• 使用一个拥有多个条件的If/Then/Else对象，而不是使用多个If/Then/Else对象。

• 尽可能简单地设置图形显示。可以加快更新时间的设置是Grid Type [image] None，在Properties对话框中不进行任何复选。只在必要的地方使用AutoScale控制端，在不需要时，关闭Automatic AutoScaling (在Scales文件夹中)。

• 在从文件中读取数据时，使用ARRAY 1D TO END: (*)处理，而不是一次在一个要素上执行READ处理及使用EOF端。

• 使用Sequencer，控制执行多个UserFunctions的流量，而不是执行单独的Call对象。

• 在使用Sequencer时，只对要求Log记录的处理启动登录。

• 在使用Strip Charts和Logging AlphaNumeric显示时，在Properties中把Buffer Size设置成应用使用的最小值。

• 使用三元组运算符 (condition ? expression1 : expression2)，而不是If/Then/Else对象与多个Gate和一个Junction。

• 在使用位图时，把它们设成Actual或Centered，而不是Scaled，因为Scaled需要的时间要长一些。

• 在使用Fill Bar或Thermometer等指示符时，关闭Show Digital Display。

• 在使用Color Alarms时，如果在不同颜色之间迅速切换，那么关闭Show 3D Border。

除上述技术外，把其它语言汇编的函数与VEE程序连接起来，可以提高执行速度。下一节介绍了在PC上使用汇编的函数(作为DLL)。

另请参阅

汇编的函数, 使用DLL

尽可能在数组上执行数学运算

尽可能把对象变成图标

减少程序中的对象数量

提高程序速度的关键


提高程序速度的关键

本节提供了部分指导准则，帮助您改善VEE程序的性能。

备注

如果您的程序是在VEE 6.0以前的VEE版本上开发的，那么请参阅“使用VEE执行模式” ，了解怎样转换程序、以使用汇编程序。

下面的说明将帮助您从汇编程序中获得最大的速度优势(在File [image] Default Preferences下Execution Mode设为VEE 4, VEE 5或VEE 6时)：

• 使用Profiler

可以使用Profiler (位于View [image] Profiler下)，确定哪类例程所用的时间超过预计时间。为运行Profiler：

1 点击Start Profiling，然后运行程序。

2 在程序运行结束后，点击Refresh查看结果。

3 点击Stop Profiling停止Profiler。点击Clear清除当前显示的结果。

• 查看线颜色

在VEE可以在执行前确定数据类型时，线带有颜色。有颜色的线(非黑色)越多，程序运行速度越快。

• 增加端限制

由于可以从多个地方调用UserFunction，因此在程序运行前VEE不能确定输入数据类型。为加快UserFunction，应尽可能在数据输入端上增加端限制。

• 使用声明变量

如果使用全局变量，那么应尽可能使用Declare Variable (位于Data菜单中)，声明变量的类型和形状，以便VEE能够在执行前推断其类型。这种技术还允许设置变量范围。

• 去掉Autoscale控制输入

一种常用的编程方式是在图形显示屏上执行Autoscale控制输入，其频次高于必要的频次。如果您可以等待执行Autoscale，直到显示屏完成更新之后，而不是等到汇制了每个点的图形以后，那么程序的执行速度将更快。通过使用Automatic Scaling属性 (参阅Scales栏)，可以去掉Autoscale控制输入，进一步改善执行速度。

• 发送一整套数据

在图形显示屏上，在启动Automatic Scaling属性时(参阅Scales栏)，如果一整套数据被发送到显示屏上，那么程序的执行速度会更快。然后显示屏会自动重新定标一次。如果程序一次把一个数据点发送到显示屏上，显示屏可能会在每个数据点之后自动重新定标，这会降低程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把这个数组发送到显示屏上。

• 仅执行显示一次

如果显示屏将显示循环的最终输出，但不跟踪为每次循环迭代生成的数据(如AlphaNumeric对象，而不是Logging AlphaNumeric)，那么不要在循环中每次执行它。把迭代器的序列输出端连接到显示屏的序列输入端，这样显示屏只会执行最后一次。

• 关闭调试功能

一旦知道程序正确运行，那么应在关闭调试功能的情况下运行程序。使用File [image] Default Preferences，在 Debug组中选择Disable Debug Features。

也可以使用-r选项或运行VEE RunTime。由于在这些模式下不生成调试指令，因此程序运行速度要快得多。但是，您将不能执行任何调试操作，如暂停、步进、Breakpoints、Line Probe、Show Data Flow和Show Execution Flow。

另请参阅

尽可能在数组上执行数学运算

尽可能把对象变成图标

减少程序中的对象数量

优化Agilent VEE程序的其它方式


故障排除技巧

本节介绍了仪器控制故障排除、常见的情况和可能的恢复措施。下表介绍了仪器控制调试。

问题

解决办法/原因

仪器根本没有反应。

必须满足下面的条件：

  • 仪器必须通电，并通过正常工作的电缆连接到接口上。必须安装相应的I/O库。

  • 对To/From VXIplug&play对象：必须已经为仪器安装和配置相应的VXIplug&play驱程文件。此外，必须在Advanced Instrument Properties对话框中为每部仪器指定正确的VXIplug&play地址字符串。每部仪器的地址必须是唯一的。

  • 对Direct I/O、Panel Driver和Component Driver对象：接口逻辑单元和仪器地址必须与Instrument Properties对话框Address字段中的设置相匹配。每部仪器的地址必须是唯一的。此外，Advanced Instrument Properties对话框中的Live Mode字段必须设置为ON。

  • 您或您的系统管理员必须正确配置VEE，以便与仪器一起使用。在正常情况下，这会在VEE安装过程中完成。参阅安装指南。

不能确定仪器地址。

对GPIO和串行接口，仪器地址与接口逻辑单元相同。GPIB仪器地址通过硬件开关或前面板命令设置。详情请参阅仪器的编程手册。VXI设备由板卡外面的开关设置(为接触开关，通常必须从卡槽中拔下板卡)。如需与地址配置有关的进一步信息，请参阅Help => Contects and Index => Tell Me About .. => Configuring Instruments。

不能确定接口逻辑 单元。

接口逻辑单元必须配置与Agilent I/O库一起提供的I/O Config辅助工具。如需进一步信息，请参阅“安装Agilent I/O库”。推荐的逻辑单元设置请参阅表格 推荐的I/O逻辑单元。

下表介绍了VEE一般问题排除方法。

问题 | 可能原因 | 建议解决方法
在VEE 6 Execution Mode中运行VEE 6.0以前的版本创建的程序时，程序没有按预期方式运行。 |  | 参阅Help => Contects and Index => Tell Me About .. => Execution Mode，了解可能的解决办法。
UserObject没有按预期方式运行。 | 可能越过了异步数据的上下文边界(如连接到UserObject内部一个对象上的XEQ端)。 | 可能的解决办法1: 把任何异步相关性移到UserObject外面。 可能的解决办法2: 打开Show Execution Flow或Show Data Flow，查看程序中的操作顺序。
希望改变对象的功能。 |  | 使用包括相应功能的对象菜单，其允许添加一个控制输入端，编辑属性。
从UserObject内部的循环中只获得一个输出值。 | UserObject只激活其输出一次。 | 从UserObject中去循环部分。
循环只运行一次。 | 循环子线程连接到序列输出端，而不是数据输出端。 | 从数据输出端启动循环子线程。
For Count没有运行。 | For Count的值为0或负数。 | 改变值。如果需要负值，把输出变成负数或使用For Range。
For Range或For Log Range没有运行。 | 步长大小的符号错误。如果From小于Thru，那么Step必须是正数。如果Thru小于From，那么Step必须是负数。 | 改变Step。
VEE似乎中止 -- 指针变成沙漏。 | 可能原因1: VEE正在重新引导直线，因为您已经设置启动Auto Line Routing，且已经移动对象。 可能原因2: VEE正在打印屏幕或程序。 可能原因3: 您刚刚Cut一个大的对象或大量的对象。VEE正在把对象保存到Paste缓冲器中。 | 等待。如果指针在几分钟内没有变回交叉线，那么输入CTRL+C (或启动VEE 6.0的终端窗口中的intr设置)，关闭VEE窗口，或停止VEE流程。
不能打开程序，剪切对象或删除线(该功能变成灰色)。 | 程序仍在运行。 | 按Stop停止程序，然后再试一次。
不能粘贴Paste (该功能变成灰色)。 | Paste缓冲器为空。 | 再次Cut, Copy或Clone一个或多个对象。
不能Cut, Create UserObject或Add to Panel(该功能变成灰色)。 | 没有选中任何对象。 | 选择对象，再试一次。
UserObject只输出生成的最后一个数据要素。 | UserObjects不会在输出端缓冲器中积累数据。缓冲器只保留收到的最新数据要素。 | 使用Collector把生成的所有数据采集到一个数组中。把这些数据发送到输出端。
不能退出直线绘制模式。 |  | 双击或按Esc，结束直线绘制模式。
在打开程序时得到一个Parse Error对象。 |  | 用新对象替换Parse Error对象。
字符没有正确出现。 | 使用的是非USASCII键盘。 | 恢复信息请参阅配置VEE。
VEE外面的颜色变化(尽管位于VEE中，但VEE颜色是正常颜色)。 | 您使用了所有颜色地图平面。 | 恢复信息请参阅配置VEE。


Agilent VEE Profiler

Profiler是VEE专业开发环境中的一种功能。通过显示程序中UserFunctions或 UserObjects的执行速度，Profiler可以帮助您优化程序。

可以使用Profiler识别程序中速度低的点，运用这里介绍的技术，提高程序速度。下面显示了examples\Applications\mfgtest.vee程序。

为打开Profiler，选择View [image] Profiler，然后运行程序。可以在屏幕的下半部分看到Profiler。Profiler列出了与执行每个UserObject和每个UserFunction所需的时间有关的对比信息。

另请参阅

确定执行参数轮廓

Profiler


ActiveX控件

VEE不支持所有ActiveX控件。如果控件不兼容VEE，那么在程序中添加控件时或在使用控件时，可能会发生错误。

在发布VEE 8.0时，我们已经知道下述ActiveX控件不能与VEE很好地共同使用，应避免使用这些控件：

Microsoft Forms Object Library

Microsoft ADO Data Control 6.0

Adobe PDF 7.0 Viewer


在事务对象中发生内存泄漏

在某些情况下，在VEE程序中使用事务对象时会发生存储器泄漏，如Direct I/O和From File之类的事务对象。

只有在事务对象包含两个READ事务，且这两个事务都参考同一个输出端，但使用不同的数据类型时，才会存在存储器泄漏情况。下面的成对事务给出了一个实例：

READ TEXT x STR
READ TEXT x REAL

可以使用下面一种解决办法，防止存储器泄漏：

如果不需要来自第一个事务的x值，那么可以参考称为null的特殊符号。在第一个READ事务中包括单词null，而不是使用数据输出端名称。对象读取数据，丢弃数据，然后执行下一个READ事务。事务对象将包含：

READ TEXT null STR
READ TEXT x REAL

添加第二个输出端，适应这两个数据，让每个事务参考一个不同的数据输出端。这些事务可能会表现为：

READ TEXT x STR
READ TEXT y REAL


在表达式错误时发生内存泄漏

在某些非常少见的情况下，在Formula对象中或在接受数学表达式的事务对象中使用数学表达式时，可能会发生存储器泄漏。

在Formula对象使用Error端，且Error端在预计程序执行过程中启动时，程序可能会发生存储器泄漏。例如，表达式在执行除以零的运算而导致Error端启动就属于这种情况。

接受数学表达式、并使用Error端的事务对象中也存在类似的情况。To File对象可能包含着事务：

WRITE TEXT a/b EOL

由于事务对象中对数学表达式求解的方式与Formula对象相同，因此存储器泄漏的可能性也相同。


Error 758

没有对.NET操作作好准备。

症状

在安装人员未能安装要求的所有组件时，您可能会收到Error 758。两种最常见的症状是：

1. 在选择Device->.NET Assembly References对话框或Device->Windows Forms Control时，您可能会收到下面的错误对话框：

2. 在选择I/O->Instrument Manager，点击仪器的IVI-COM Driver按钮时，可能会收到下面的注意对话框：

原因

上面两种症状都是由于.NET Global Assembly Cache中没有安装共享IVI的组件使用的 Primary Interop Assemblies (PIAs)导致的。

解决办法

您需要找到.NET Framework 1.1安装目录所在的位置。它通常位于<WindowsDir>\Microsoft.NET\Framework\v1.1.4322下。您还需要找到IVI安装目录所在的位置。默认目录应该是<Program Files>\IVI。

打开一个Command Prompt，把目录变成.NET Framework 1.1安装目录，然后运行IVI安装的批处理文件。例如，如果.NET Framework 1.1安装在c:\windows\Microsoft.NET\Framework\v1.1.4322，且IVI安装目录是c:\program files\IVI，那么命令行应该类似于：

cd \Windows\Microsoft.NET\Framework\v1.1.4322

揷:\Program Files\ivi\bin\Primary Interop Assemblies\IviPiaRegistration.bat? 揷:\Program Files\IVI\bin\Primary Interop Assemblies?/p>

如果成功运行上面的批处理文件，您应看到在命令提示符窗口中会显示类似揂ssembly successfully added to the cache?#30340;行。重启VEE。


Programmatic Properties

下表列出了可以程序化地访问的VEE对象的属性。

属性 | 对象
BackColor, ForeColor, Title, Size, Location, and Visibility | 所由VEE对象
Value | Toggle Controls, Constants, Continuous Controls
EnumValue, EnumValues, EnumIndex | Selection controls
EnableOnPing | Confirm (OK) Objects
EnableEditing | 带有"Enable/Disable Editing"控制输入端的VEE数据对象
PopupPanelTitle | Main, UserFunctions, 和 UserObjects
Size and Location | Main 或 UserFunctions的面板视图
Tab index | 面板视图中的VEE对象
BackColor | UserFunction/UserObject 和Main的面板视图

注释

属性名称不分大小写。只有 运行时属性 可以程序化地设置和读取，设计时属性 不会随之改变。Property 窗口中的一组数据称为设计时属性。

在程序停止时，VEE会使用设计时属性在工作区域中显示一个对象。比如，你在property窗口中将一个Label的backcolor设置为红色，然后又在一个formula对象中将其设为为绿色。那么，即使该Label的backcolor被程序化地设为绿色，它的设计时属性热仍然为红色。所以，在程序执行前和执行后，Label的backcolor都为红。Label的backcolor只有在运行时才为绿色。这也同样适用于 XY trace, X vs Y Plot, Strip Chart, 和其他显示对象的Marker。Marker会在程序结束后回到缺省位置。

Secured UserFunction 或 Imported UserFunction中的对象, 甚至 Main的属性都可以程序化地设置和读取。

有关Marker的更多说明

要程序化地设置一个图形(XY)显示对象的marker的属性，需要一个Formula对象来设置marker的新值。

如要将marker移想要轨迹上的某个点，必须确保 Formula 对象在XY显示对象运行后才运行。如果 Formula 对象先运行，marker就会因为当时图形显示对象上没有轨迹而只移到所指定的点上，而不是轨迹上的一个点。 而且，marker会一直停在那个点上即使在XY图形显示对象运行过后。

位置

Device [image] Function & Object Browser [image] VEE Objects

另请参阅

程序化地设置和读取对象属性，改变对象的Declared Name和Declared Scope


用户编制的 VEE 程序

这里的程序来自世界各地的VEE用户，Agilent Technologies不对这些程序提供任何形式的担保。如果你也想将你的程序发布在这里，请联系我们vrf-examples@agilent.com。请为你的程序添加适当的注释，以便其他用户参阅。另外，请注明您是否愿意将您的姓名和/或电子邮件地址公布在这里。

ExcelAsDatabase.vee 将 Excel 当作一个用于查找的 '数据库'

Excel 工作簿的表单中包含五个域 (列)： ID, Code, Project, Date 和 Comment。

Query 工作簿使用 Excel 的 DGET 函数在表中查找数据。 查找的值从 VEE 中输入，查询结果被读回 VEE 中。
InstrumentAssistant.vee Instrument Assistant 范例程序

这个范例可以查找连接到所有已配置的 GPIB 和 VXI 接口上的全部仪器。它还可以用于和某些仪器（只支持GPIB仪器）通信。可以发送标准的 IEEE488.1/488.2命令和用户定义的命令。包括一个保存所有已发送命令的缓冲区。 可以使用 ASCII 或 binary block 格式从仪器读数据。

这个范例程序使用了VEE 的下列功能：
* 动态 I/O Automation 服务器
* 可编程仪器属性
* 与文件同时保存的 I/O 配置

SQLServerUsingADO.vee VEE-Database 访问

这个范例解释了VEE 如何能用 Microsoft ADO (rev 2.1) Automation Server 来与 SQL Server 7.0 数据库集成。SQL Server 7.0 必须如 Server 域中指定的那样在远程服务器或本机上可用。如果 VEE 和 SQL Server在一台机器上运行，指定本地为服务器。

这个程序默认使用 SQL 的 pubs 范例数据库并且：

  • 通过读取 Catalog Schema 列出所有 SQL 服务器上的数据库
  • 通过读取 Tables Schema 找到数据库中所有的表
  • 允许执行 SQL 查询
  • 允许查看表格
  • 从 SQL Server 上捕获 ADO 错误
MakeSelections.vee 生成一个多选弹出对象

这个范例程序包含一个 Multiple Selection 对象，它允许用户从一个输入列表中选择一个或多个选项。VEE 的标准选择对象只允许选择单个选项。

VEE_Window_mods.vee 这个程序演示如何改变 VEE 窗口的属性。它演示了：
  1. API 函数的导入 (Function ImportLib)
  2. 运行时，从一个字符串数组中创建全局常量 (Function CreateGlobals)
  3. 查找当前 VEE 应用程序 Windows 句柄和改变窗口属性的方法：
    1. 位于最上面
    2. 允许改变大小
    3. 显示系统菜单
    4. 允许/不允许最小化
    5. 允许/不允许最大化
    6. 将整个VEE 程序隐藏一段指定的时间。

由 Georg Nied eMail:info@gn-software.de 提供

Change character in string.vee 这个函数将字符串中的一个字符改为另一个字符。

由 Juan Carlos Mart Castillejos 提供

nidaq.vee 调用l NI-DAQ 库入口点

这个文件已经被修改以便可以和 Agilent VEE Import Library 对象一起支持 NIDAQ32.DLL.

这个版本是在 NI-DAQ 6.6 上修改的。

这个程序最好用于 VEE 7.0 和之前的版本，因为 VEE 7.5 之后的版本已经在 Instrument Manager 中添加了与 NIDAQ 相关的功能。

下面与仪器相关的程序都由 Tom Silchia 提供
856xTDFB.vee 从 HP/Agilent 8560E-Series 频谱分析仪获得轨迹数据，TDF B (B-Format):

返回为二进制形式。该格式以二进制形式传输数据。这种格式提供最快的数据传输却只需最少的内存存储数据。每个数据点都以两个 8 位的字节传输二进制数。先传最高字节，再传最低字节。 二进制数可以很容易地转换为测量数据。如果速度和内存是关键因素，就可以考虑使用 B-format 而非 P-format。与 A-block 和 I-block 格式不同，B-format 不传送头，直接传送数据，end-or-identify (EOI)信息与最后一个字节一起传送。

856xTDFI.vee 从 HP/Agilent 8560E-Series 频谱分析仪获得轨迹数据，TDF I (I-block format):

返回为 Indefinite Block-Data Field 形式。与 A-block 格式非常相似，I-block 格式以二进制形式传输数据，Indefinite Block-Data Field 的大小未知。每个数据点都以两个 8 位的字节传输二进制数。先传最高字节，再传最低字节。I-block 格式会在传输轨迹数据前添加头，它由 ASCII 字符 "#", 和 "I"组成。

856xTDFM.vee 从 HP/Agilent 8560E-Series 频谱分析仪获得轨迹数据， TDF M (M-format):

返回（输出）为十进制形式。(M)格式以 ASCII 整数形式传输轨迹数据， 这也是频谱分析仪采用的内部格式。显示的每个幅度值都会落在601个垂直点中的一个上。第601个点为参考值。比如，比如信号峰值等于 -10 dBm 或低于参考值一格。它等于540个测量单位。 (参考点为600测量单位， 往下一格为60测量单位，所以为 540 测量单位。) 有10个点超出了范围。测量单位为 0 到 610。一个换行符(ASCII 码 10)紧跟在数据输出之后，然后为 end-or-identify (EOI)信息。M-format 比 P-format 快，但是大部分应用需要计算机把数据转换为参数单位。另外，M-format 以 ASCII 字符形势传输数据，数据很容易直接查看。

856xTDFP.vee 从 HP/Agilent 8560E-Series 频谱分析仪获得轨迹数据

TDF P: 返回参数单位的十进制数。实数或 "P" 格式允许以ASCII 十进制形式接收和发送数据，且以参数单位计数。这是仪器打开且仪器预设被打开时的默认格式。根据使用的幅度单位(AUNITS)不同，数字单位可以为 dBm, dBmV, dBmV, volts, 或 7.0 watts。线性轨迹信息的默认值为 volts， 对数轨迹信息的默认值为 dBm 7.0 一个换行符(ASCII 码 10)紧跟在数据输出之后，然后为 end-or-identify (EOI)信息。注意当使用 P-format 时，请根据所用的 AUNITS 命令来确定轨迹数据的幅度单位。如果程序后面还要使用数据，那么实数更有优势。然而，P-format 的数据传输会比较慢。且需要更多的存储内存(二进制为大约 1200 字节，实数为大约 4800 字节。)有时，与二进制格式相比，P-format 会需要多达四倍的控制器内存。

859xTDFBB.vee 从 HP/Agilent 8590E-Series 频谱分析仪获得轨迹数据

TDF B 允许二进制格式。使用这种格式，标记和轨迹数据都可以以字节形式传输。在所有的轨迹数据形式中，TDF B 传输数据最快。MDS命令的设置会决定轨迹数据是以单字节或双字节传送。注意： 本范例把 MDS B (Measurement Data Size) 当作字节。 每个数据点传送一个字节(8-bits)。当传送轨迹数据时，MDS B 比 MDS W 快，因为只传送 401 个字节。由于 MDS B 将两个字节组合为一个，会丢失一些分辨率。

859xTDFBW.vee 从 HP/Agilent 8590E-Series 频谱分析仪获得轨迹数据

TDF B 允许二进制格式。使用这种格式，标记和轨迹数据都可以以字节形式传输。在所有的轨迹数据形式中，TDF B 传输数据最快。MDS命令的设置会决定轨迹数据是以单字节或双字节传送。注意： 本范例把 MDS W (Measurement Data Size) 当作字（WORD）。 每个数据点传送两个字节(8-bits)。MDS W 传输轨迹时不会有丢失分辨率。

859xTDFI.vee 从 HP/Agilent 8590E-Series 频谱分析仪获得轨迹数据

TDF I 是 I-block 数据格式。这种格式要求轨迹数据必须以 “#,” 和 “I.”开头。MDS命令的设置会决定轨迹数据是以单个或两个g-bit字节传送。 与使用 A-block 格式不同，当将轨迹数据发送回频谱分析仪时，无需提供数据字节数。

859xTDFM.vee 从 HP/Agilent 8590E-Series 频谱分析仪获得轨迹数据

TDF M 是一种测量数据格式。它以测量单位来传送数据。测量数据的范围为 -32768 到 7.0 + 32767。

859xTDFA.vee 从 HP/Agilent 8590E-Series 频谱分析仪获得轨迹数据

A-block 格式与二进制格式类似，它们都在每个数据点发送两个字节 (这也是测量数据的内部表示)。 A-block 格式会在轨迹数据的 401 点传送一个四字节的头。其中包括 ASCII 字符 “f’, “A”, 和一个两字节的数，它表示轨迹数据的长度。之后为数据字节。

8510C_pass_thru.vee

提供了一个使用 8510 Pass Thru 功能的方法。

8510_hpgl_Acq.vee | 从8510网络分析仪中获取 HPGL 图形的程序范例。
856xPlot2File.vee 从 8560E-Series 频谱分析仪中获取 HPGL 绘图仪数据并写入到一个文件。

只要获得了数据，就可以用任何HPGL阅读器打开 temp.plt 文件。注意新版本的 Microsoft Office 产品在默认状态下部包括 HPGL 阅读器。访问 Microsoft 的网站，查询 hpgl 32 bit 下载，可以把 HPGL 文件导入到 Microsoft Word 和/或 Microsoft Excel。

871xLearn_String.vee 从仪器获得 871x learn string 或向仪器发送871x learn string。

该程序可以在 8711C, 8712C, 8713C, 8714C 和整个871xET/ES 向量网络分析仪系列仪器上运行。该程序包括为一个 main, 两个 user objects,及一个 user function。user object "getLearnString" 获取 learnstring 并将其保存到一个文本文件'C:\learnData.txt"中。 它的注释详细介绍了它操作和执行。user object "sendLearnStringOut" 查询从文件'C:\learnData.txt"中查询 learn string 数据，然后把它写入分析仪以便获得 learnString 状态。它的注释详细介绍了它操作和执行。User function "err_check"提供了一个确认程序执行中没有出错的办法。OK 按钮允许用户配置分析仪，获取learnstring, 复位分析仪 (回到预设值) 和发回获取的 learnstring, 确认操作无误。

8753_freq_data.vee 从 8753/8720 系列网络分析仪中获取轨迹频率点数据

使用 OUTPLIML 命令获取激励和标记数据。注意 LIMIT 测试 FUNCTION 没有打开! 该命令提供一种获取频率点的手段。

8753_marker.vee 用多种方法从 8753/8720 系列 VNAs 中读取标记数据

注意标记数据和数据的有效性是分析仪 DISPLAY FORMAT 的一个函数。第一个值是读回的标记的值。第二个值可能是也可能不是一个有效的 DISPLAY FORMAT 的函数。第三个值是 STIMULUS (频率或时间)。详细信息请参阅 8753/8720 程序员指南的 Marker Data 部分。

4395A_Extract_State.vee 从 4395A 组合分析仪中获取状态

该程序已经用 4395A 组合分析仪进行了测试。该程序会对 INTERNAL MEMORY 分类并分析类型状态(由 "*.STA" 指定的文件类型)的所有保存文件。一旦文件类型建立好了，Agilent VEE 应用程序就会提取所有的 *.STA 文件到外部控制器。*.STA 文件是二进制文件，它可以被发送回 4395A (通过 PC 和 VEE, 或通过 3.5" 软盘)。

4396b_ascii_out.vee 从 395A, 4396A, 或 4396B 组合分析仪中获取格式化的数字轨迹

该程序以"FORM4"(ascii)数据传送器形式向仪器查询 FORMATTED 的数字轨迹。数据轨迹数组的大小由查询的点的数量(即 "no_poin")来动态确定，之后，它被传给一个 real_32 数组变量。该程序还概括了 Agilent VEE 的一些其他功能，比如查询 START 频率个轨迹，STOP 频率和点的 NUMBER， 然后把它们传送到 linRamp 函数 (Agilent VEE 内置函数) 以便自动创建每个数据值得频率点。另一个功能是创建一个 X-Y 图表以显示从分析仪获取的频率/幅度数据。 最后，使用 Agilent VEE 很容易取得数据值得最大和最小值。

4194a_gain_delay.vee | 从 Agilent 4194A 阻抗分析仪中获取 GAIN 和 GROUP 延迟数据
4294A_ascii_out.vee 使用 Agilent 4194A 阻抗分析仪的范例

总结一些获取 FORMATTED 显示轨迹数据和 REAL 及 IMAGINARY数据的阻抗，相位，并行电容，并行电导的方法。

8753_Limit_test.vee | 一种报告 8753/8720A系列向量网络分析仪的有限线性失败的方法。
8753ES_registerRecall.vee | 一种从 8753/8720A系列向量网络分析仪地内部内存中重调仪器状态的过程。
8753ES_NumGroup_OPC.vee | 演示了如何使用 *OPC? 和 NUMG (或 number of groups)使8753/8720A系列向量网络分析仪在 averaging 被激活时可以整合和同步扫频结束。
8753ES_NumGroup_SPOLL.vee | 演示了如何使用 SPOLL 和 NUMG (或 number of groups)使8753/8720A系列向量网络分析仪在 averaging 被激活时可以整合和同步扫频结束。
8753Graphics.vee | 写 HPGL 文本到 8753/8720 系列网络分析仪的显示。
8753LearnStr.vee | 从 8753 和 8720 系列向量网络分析仪读取二进制 learn string 和向 8753 和 8720 系列向量网络分析仪 写二进制 learn string。
8757_PassThru.vee | 用于 8757 标量网络分析仪及其它兼容的信号源。该程序提供了一种使用 PassThru 方式与连接到"8757 System Interconnect" GPIB 总线分析仪的信号源进行通信方法。这是一个从8757标量分析仪直接控制源的专用 GPIB。
8757_E8257C_ScpiPassThru | 用于 8757 标量网络分析仪及其它兼容的信号源。该程序提供了一种使用 PassThru 方式与连接到"8757 System Interconnect" GPIB 总线分析仪的信号源进行通信方法。这是一个从8757标量分析仪直接控制源的专用 GPIB。
4284A_BIN_ASCII.vee | 演示了如何从 4284A 阻抗分析仪获取 ASCII 或 BINARY 数据。
4263B_BIN_ASCII.vee | 该程序用于 4263B LCR 表。演示了如何从 LCR 表 获取 ASCII 或 BINARY 数据。
e5100a.vee | 该程序用于 E5100A 低频网络分析仪。演示了如何使用内置 E5100As 波形分析来获得Channel 1 (增益) 和 Channel 2 (相位)的统计数据。
E5100A_Resp_Cal_Array.vee | 该程序用于 E5100A 低频网络分析仪。演示如何通过反映校准数组(即一个 FORM4 - ASCII 传输) 获取一个传输。获取的数组保存在控制PC上的一个文件中。
8753_form2.vee | 该程序用于 8753 和 8720 系列向量网络分析仪。该程序演示了如何通过 SRQ 掩模来同步扫频完成，及如何以 FORM 2 - REAL 32 的二进制块传输形式获取轨迹数据。
8753_form3.vee | 用于8753 和 8720 系列向量网络分析仪的 VEE 范例程序。该程序演示了如何通过 SRQ 掩模来同步扫频完成，及如何以 FORM 3 - REAL 64 的二进制块传输形式获取轨迹数据。
8753_form3_COMPLEX.vee | 用于8753 和 8720 系列向量网络分析仪的 VEE 范例程序。该程序演示了如何通过 SRQ 掩模来同步扫频完成，及如何以 FORM 3 - REAL 64 的二进制块传输形式获取轨迹数据，及如何把数组读到一个定义为 COMPLEX 数组的变量中。
8753_form4.vee | 用于8753 和 8720 系列向量网络分析仪的 VEE 范例程序。该程序演示了如何通过 SRQ 掩模来同步扫频完成，及如何以 FORM 4 - ASCII数据数组形式获取轨迹数据。
8753_hpgl_Acq.vee | 从8753 和 8720 系列网络分析仪中获取 HPGL 图形的程序范例。
EPM_Sensor_Status.vee | 用于EPM E-Series RF 平均感应功率计。该程序使用 "STATUS:DEVICE:CONDITION？" 位相应来确定哪个通道连接了传感器，及连接到的是前面板还是后面板。
EPM_Averages_SPOLL.vee | 用于EPM E-Series RF 平均感应功率计。该程序使用手动滤波模式，用户可以设置铝箔长度（均值）。该程序还使用了SPOLL 来确定测试数据何时到达。
EPM_LoUpLimit_Test.vee | 用于EPM E-Series RF 平均感应功率计。该程序使用 "STAT:OPER:LLF:SUMM:COND?" (下限失败报告) 和 "STAT:OPER:ULF:SUMM:COND?" (上限失败报告) 状态查询。
EPM_LoadCalTable.vee | 用于EPM E-Series RF 平均感应功率计。 该程序演示了如何对内部传感器校准表进行分类，选择一个表，和以用户定义的频率把用户校准系数写入所选择的校准表。
EPM_Meas_SPOLL.vee | 用于EPM E-Series RF 平均感应功率计。该程序使用 MEASURE 命令，它允许功率计控制仪器的设置。该程序还使用了 SPOLL 来确定测试数据何时到达。
ENA_StateRdWrt.vee | 用于 ENA (E5070/E5071) 系列网络分析仪。演示了如何进行内存分类，以二进制块的形式读取状态文件到PC，然后从PC重调该二进制文件并把它写回 ENA 内存。

ENA_Average_SPOLL.vee

用于 ENA (E5070/E5071) 系列网络分析仪。该程序提供了一种检测 ENA 系列的网络分析仪的 AVERAGE COMPLETE CONDITION 的方法。 E5071A 已测试。
ENA_Fast_SPOLL | 用于 ENA (E5070/E5071) 系列网络分析仪。通过该程序可以帮助理解网络分析仪上各种带宽的函数的典型的轨迹扫描速度和数据采集及传输速度。


连接多个对象，构成一个程序

本节介绍了VEE程序。在实验1-1中，将创建一个VEE程序，打印VEE屏幕，并把程序保存到一个文件中。

实验1-1 显示波形程序

VEE程序由可执行对象图中连接起来的VEE对象组成。下述程序显示了一个波形。

(如果VEE正在运行，点击工具栏上的New按钮，或使用File [image] New，清除工作空间。否则启动VEE并继续。)

1 编制程序文档。选择Display [image] Note Pad，把它放在工作区的顶部和中心。点击编辑区，出现一个光标。删除可能有的任何模板信息，然后输入：

Display Waveform generates a cosine waveform and sends it to a real time display.

您可能必须根据屏幕确定Note Pad大小。为确定对象大小，打开对象菜单，选择Size，把确定大小的箭头光标移到对象的角上，拖动鼠标。还可以点击和拖动对象的任何角。)

2 添加Function Generator对象。选择Device [image] Virtual Source [image] Function Generator，把外框放在工作区左侧，点击放下对象。点击Frequency字段，输入100，把频率编辑成100。

3 添加Waveform (Time)对象。选择Display [image] Waveform (Time)，把对象放在工作区右侧，如下图所示。

在上图中，Function Generator对象上的Func标记指明数据输出端，Waveform(Time)对象上的Trace1标记指明数据输入端。在VEE程序中，可以连接多个对象中的数据端，这会决定程序流程。

4 把Function Generator上的数据输出端 (右侧Func旁边)连接到Waveform (Time) 画面(左侧Trace1旁边)上的数据输入端，完成程序。为进行连接，把光标移到其中一个端上。

在其位于允许连接的端的附近时，光标形状变化。按鼠标左键，把鼠标光标移到其它端，再次点击。在两个端之间自动画一条线，程序完成。

拖动其标题栏，试着移动其中一个对象。(不要拖动一个端或终端，否则会出现一条线) 线自动引到两个对象之间的逻辑路径上。

如果多条线很乱，使用Edit [image] Clean Up Lines，在程序中重新引导这些线。

运行程序

5 继续同一练习，点击工具栏上的Run按钮，运行程序，或使用Debug [image] Run。程序在Waveform (Time)画面中显示一个100 Hz余弦波，如下图所示。(您的对象可能有不同的频率，这对范例并不重要。)

除工具栏上的Run按钮外，还可以使用工具栏上的Stop、Pause和Step按钮控制程序。如果暂停了正在运行的程序，使用Resume按钮 (与Run按钮相同)可以恢复运行。可以使用工具栏上的Step Into按钮，一次对一个对象运行一个程序。

在根据说明运行程序时，点击工具栏上的Run按钮，或按Ctrl+G。其它键盘快捷方式如下：

命令 | 击键组合
Pause | Ctrl+P
Resume | Ctrl+G
Step Into | Ctrl+T

改变对象属性

您已经看到通过选择其对象菜单 [image] Properties，怎样改变对象的部分属性。还可以在Open View中直接改变对象比较常用的属性。您可能已经注意到，Function Generator对象有两种字段。右侧带箭头的字段是选择字段。

6 继续使用这个范例，点击Function字段中的Cosine (或箭头)，出现选项下拉列表。点击Sine选择Sine函数，注意Function字段已经从Cosine变成Sine。

对话框中的部分字段没有箭头，这些是输入字段，在点击时它们变成输入字段。点击一个字段，会出现一个光标。可以使用标准键盘和鼠标编辑技术，移动光标，输入希望的值。

7 点击值100右面的Frequency字段，同时按住鼠标按钮，把鼠标向右移动，高亮度显示最后的0。

8 按Delete删除最后的0，把Frequency值变成10。运行程序，程序应类似于下图。

显示的波形现在是10 Hz正弦波。您可能想改变一些对象参数，具体如下：

• 在Function Generator对象中点击Deg (或箭头)，把相位单位变成Rad。然后点击Phase值字段，输入值PI。运行程序，注意显示的波形中的相位位移。然后，把Phase值变回0，把单位变回Deg。

• Waveform (Time)对象的y轴极限预设为-1到1。点击y轴名称Mag，打开一个对话框，可以改变设置。点击Maximum和Minimum字段，把极限变成2和-2。在新的极限范围内显示波形。为改变x轴标度的类似参数，点击Time。

打印屏幕

9 继续使用这个范例，为打印屏幕，选择File [image] Print Screen，出现一个Print对话框。

在点击OK时，VEE 在对话框指明的默认打印机上打印屏幕。可以选择另一个打印机，改变打印范围，输入打印份数。点击Properties按钮，可以出现更多的选择。不同的打印驱程可能会使用不同的对话框。如需与使用Windows对话框有关的进一步信息，请参阅Microsoft Windows Help。

还可以点击工具栏上的Print Screen按钮，直接打印屏幕。

保存程序

可以随时保存程序。(可以保存工作区中的任何内容，而不管它是不是一个完整的程序)。

10 继续使用这个范例，选择File [image] Save As...，出现对话框。

出现标题为Save File的对话框。

11 在默认情况下，VEE for Windows在My Document目录的VEE Programs子目录下保存文件。为保存当前程序，在File name字段中输入名称simple-program，点击Save。如果没有输入扩展名，VEE会在文件名中自动添加扩展名.vee。

备注

可以使用Windows 2000和Windows XP支持的长文件名。

在Save File对话框中，可以改变不同的字段，具体如下：

文件保存选项 | 说明
Save in | 可以打开下拉菜单，改变目录或驱动器。双击一个文件夹，打开它。
File name | 输入选择的文件名。
Save as type | 在正常情况下，VEE程序在保存时会使用扩展名.vee，但如果愿意，可以改变文件类型。如果输入没有扩展名的文件名，那么会自动添加.vee。
Save colors and fonts with program | (可选) 如果您已经使用Default Preferences菜单改变程序的颜色和字体，希望加载程序的其它人获得您选择的颜色和字体(而不是他们的默认颜色和字体)，点击复选这一项。 在复选时，VEE会作为程序的一部分保存您在默认配置中所作的变动。
Save I/O configuration with program | (可选) 如果您已经在Instrument Manager中配置仪器，希望加载程序的其它人获得您配置的仪器，而不是他们的默认仪器，建议复选这一项。 在复选时，VEE会作为程序的一部分保存I/O配置。

备注

为把程序重新保存到同一文件名，随时点击Save按钮或按Ctrl+S (File [image] Save)。在开发程序时，最好经常保存文件。为把已经编辑的程序另存为不同的文件名，按Ctrl+W或File [image] Save As。

退出Agilent VEE

选择File [image] Exit关闭VEE程序窗口。另一个快捷方式是按Ctrl-E退出VEE，或点击标题栏右端的x按钮。

您可能不需要使用下述技术，但如果VEE停止对鼠标或键盘作出响应，可以使用下述说明：

操作系统 | 方法
在Windows 2000和Windows XP中 | 按Ctrl-Alt-Delete，点击Task Manager按钮。在Applications列表中选择VEE，点击End Task。

重启Agilent VEE和运行程序

1 点击Start [image] Programs [image] Agilent VEE Pro。

2 选择File [image] Open，出现Open File对话框。

格式与Save File对话框相同。注意用户程序的默认目录是VEE_USER目录，除非在安装过程中指定了某个其它目录。VEE在Main窗口中打开程序。

3 点击Run按钮。它类似于一个小箭头，位于Debug菜单下面的工具栏上，如下图所示。

Run按钮

备注

命令vee.exe -r filemame启动VEE，自动运行filename指定的程序。例如，可以在Windows桌面上创建一个图标，设置其Properties [image] Shortcut，运行某个VEE程序。然后操作人员双击桌面上的图标，启动VEE，自动运行程序。如需更多信息，请参阅与命令和提示路径有关的Windows Help信息。

管理工作空间中的多个窗口

到目前为止，我们的讨论重点主要是Main窗口中的工作区。但是，大型VEE程序可能会在Main窗口内部包含多个窗口。例如，一个程序可能包含定义的多个对象，如UserObjects和UserFunctions。(可以把UserObjects和UserFunctions视为主程序的子例程或子程序。实验2-1: 创建UserObject中更详细地讨论了UserObjects和UserFunctions)。在这里提到这些，是为了说明VEE可以怎样帮助您管理拥有多个窗口的程序。

下图显示了一个有四个窗口的程序。每个窗口有一个图标(它提供了多个菜单命令)、一个标题和三个按钮：最小化、最大化和关闭。最大化窗口会使窗口占据VEE工作空间提供的所有区域。最小化窗口会沿着VEE工作空间底部出现其图标。关闭窗口会从工作空间中删除窗口。VEE高亮度显示工作窗口的标题栏。

在上图中，Program Explorer列出程序的层级。这一内置模块化结构可以简便地存取程序的所有部分。

如果没有显示Program Explorer，点击View [image] Program Explorer。默认值是出现Program Explorer。如果去掉对号，在File [image] Default Preferences中点击Save按钮，下次在启动VEE时不会出现Program Explorer。

为在任何时候调出Main窗口，点击它，或在Program Explorer中双击其图标。

备注

如果在VEE中关闭Main窗口，通过选择in VEE, 可以View [image] Main，可以再次显示Main窗口。


Agilent VEE程序怎样工作

实验1-2: 查看数据流程和传播

实验1-3: 添加Noise Generator

实验1-4: 添加幅度输入和Real64滑尺

实验1-2: 查看数据流程和传播

在VEE中，通过程序执行的一般流程称为传播。通过程序传播并不是由对象在程序中的地理位置决定的，而是由对象的连接方式决定的。传播主要取决于数据流程，数据流程则取决于对象的数据输入端和输出端的连接方式。

备注

在其它编程语言中，如C、BASIC或Pascal，程序语句的执行顺序取决于序列和选择规则集。一般来说，语句按其在程序中出现的顺序执行，除非某些语句导致执行分支到另一个语句或代码线程。

VEE程序中的数据流动规则如下：

• 数据从左到右流过对象。这意味着在拥有数据端的所有对象上，左面的数据端是输入，右面的数据端是输出。

• 必须连接对象中的所有数据输入端，否则在程序运行时会发生错误。

• 只有在其所有数据输入端已经收到新数据时，一个对象才会执行。

• 只有在所有连接的相应数据输出端已经被激活后，一个对象才执行完毕。

在VEE中，可以使用序列输入端和输出端，改变执行顺序。但是，在正常情况下，除特例外，并不需要使用序列端。一般来说，最好避免使用序列端。如果可能，应允许数据流程控制程序执行。

为查看数据流程怎样工作，点击工具栏上的Open按钮，打开程序simple-program.vee。( “实验1-1 显示波形程序"中介绍了程序 simple-program.vee) 现在运行程序，其应类似于下图，但参数可以有不同的值。

备注

VEE中包括许多实验练习和编程范例使用的VEE程序，其位置是Help [image] Open Example... Manual [image] UsersGuide。

Function Generator对象的数据输出端连接到Waveform (Time)对象的数据输入端。在运行程序时，只有在它从Function Generator对象收到数据时，Waveform (Time)对象才会执行。这是数据流程的简单实例。

实验1-3: 添加Noise Generator

在simple-program.vee中添加一个Noise Generator对象，添加一个“有噪声的正弦波”如下。

1 删除原始程序中连接Function Generator和Waveform (Time)对象的线。点击工具栏上的Delete Line按钮，然后点击线。也可以按住Shift+Ctrl，点击线。

2 把Function Generator最小化成图标。

3 添加Noise Generator对象 (Device [image] Virtual Source [image] Noise Generator)。

4 使用Device [image] Function & Object Browser添加A+B对象。

下图显示了Function & Object Browser。对Type，选择Operators。对Category，选择Arithmetic。对Operators，选择+。点击Create Formula，把对象放在Function Generator和Waveform (Time)对象之间的工作区上。最小化A+B对象。

1 连接输入端和输出端。

2 运行程序。

注意只有在Function Generator和Noise Generator对象执行时，A+B对象才会执行。但是，是Function Generator先执行还是Noise Generator先执行无关紧要，因为结果是一样的。

一旦两个A+B 输入数据端都收到数据，那么A+B对象会执行，把两个信号相加，把结果输出到Waveform (Time)对象。

备注

VEE程序中的数据流程决定着其执行。

为查看执行顺序，打开Debug命令Show Execution Flow和Show Data Flow，或分别点击工具栏上的按钮。再次运行程序。在执行时，每个对象高亮度显示，一个小的方标尺沿着线移动，显示数据流程。

备注

通过点击工具栏按钮或Debug菜单中的命令，可以同时启用或单独启用Show Execution Flow和Show Data Flow。在正常情况下，应关闭这些命令，因为它们会降低程序执行速度。

实验1-4: 添加幅度输入和Real64滑尺

在simple-program.vee中添加一个幅度输入和一个Real64滑尺。

1 把鼠标指针放在Noise Generator左侧的“端区域”中，点击对象菜单或按Ctrl+A。出现一个对话框，允许添加输入。

2 点击OK，选择Amplitude—出现一个Amplitude输入端。

现在Noise Generator对象有一个幅度输入端，可以作为实数输入这个数据。VEE提供了一个对象，使其非常简便，称为Real64 Slider，它位于数据菜单中。(也可以使用Real64 Constant对象或Real64 Knob。)

3 添加一个Real64 Slider对象 (Data [image] Continuous [image] Real64 Slider)，把其数据输出端连接到Amplitude端，如下图所示。运行程序。

在Real64 Slider对象上拖动滑动控制，试着改变噪声的幅度。只有在运行程序时，噪声幅度才会变化。显示的波形的噪声成分取决于Real64 Slider 输出值。

数据流程再次决定执行顺序。只有在Real64 Slider执行时才能执行Noise Generator。只有在Function Generator和the Noise Generator都执行时才能执行A+B对象，但哪个先执行无关紧要。最后，只有在A+B对象已经执行后，才会执行Waveform (Time)对象。

备注

可以使用鼠标在线上盘旋，显示输出的值。例如，在从Real64 Slider对象到Noise Generator的线上盘旋鼠标，会显示一个值0.401。注意，线上的值(0.401)与Real64 Slider上显示的值一致，如下图所示。(注意对象以图标化视图显示。)

4 把程序重新程序为simple-program.vee，将在以后的实验中添加某些其它功能。

Copyright (c) 1991-2006年安捷伦科技公司版权所有


通用技巧

在Main VEE程序内部，可以创建对象逻辑分组，称为UserObjects。通过把一个对象逻辑组放在UserObject窗口中，可以创建一个UserObject。在UserObject窗口内部，可以连接输入和输出，其方式以与主程序相同。UserObject本身象任何其它对象一样，使用输入和输出连接到主程序中的其它对象。

开发UserObject的概念是创建一个唯一的上下文，在主程序内部实现有用的目标。除保留主要工作区中的空格外，通过提供结构，可以使程序更容易理解。

VEE程序可以包含嵌套在Main程序中的许多UserObject。每个UserObject有一个装在Main窗口中的图标视图。为把主程序中的UserObject图标视图与相关的UserObject窗口关联起来，在编辑窗口中命名UserObject，这还将在相关图标窗口中命名这些UserObject。例如，如果把一个UserObject命名为AddNoise，那么其在Main程序中的图标视图及UserObject上的标题栏都会出现AddNoise。下述练习教给您怎样创建UserObject。

实验2_1: 创建UserObject

实验2_2: 为用户输入创建对话框

实验2_3: 使用数据文件

实验2_4: 创建面板视图

实验2_5: 数据数学运算处理

实验2_6: 生成随机数字

实验2_7: 设置和获得全局变量


实验2-1: 创建UserObject

有多种方式可以在VEE程序中创建UserObject：

• 从菜单栏中选择Device [image] UserObject，在Main窗口中出现一个空的UserObject图标，在里面添加对象。如果双击UserObject图标，那么它会在Open View中显示如下：

• 在程序内选择多个对象，然后从这些对象里创建一个UserObject，其方式是选择对象，点击Edit [image] Create UserObject。

一旦已经创建了UserObject，它会成为主程序的一部分。UserObject窗口可以在Open View中显示为图标，也可以在屏幕底部最小化。

• 点击关闭按钮关闭窗口，UserObject在主窗口中显示为图标。

• 点击最大化按钮，最大化窗口，UserObject窗口将占据VEE工作空间中提供的整个区域。

• 点击最小化按钮，最小化窗口。最小化的UserObject沿着VEE工作空间底部显示。

备注

UserObject的图标视图一直位于Main窗口中，可以把其各端连接到Main窗口的其它对象上。

备注

在开始前，要保证View中的Program Explorer已经反选，以便在Main中提供更多的屏幕空间。

现在，为程序创建一个UserObject。

1 打开在“实验1-4: 添加幅度输入和Real64滑尺"中创建的程序 (simple-program.vee )。程序应出现在主要工作区中。

2 从程序中删除Real64 Slider。(在本练习中不使用) 点击打开Real64 Slider Object Menu，选择Delete，或双击Real64 Slider Object Menu按钮。

备注

如果现在再次运行程序，其中已经删除Real64 Slider对象，输入端仍位于Noise Generator上，那么您将获得一条VEE错误信息，表明Noise Generator上的输入端Amplitude没有连接。记住，为运行VEE程序，必须连接所有输入端。

3 在Noise Generator对象中，点击Object Menu按钮，或在对象上按鼠标右键，打开对象菜单。选择Delete Terminal [image] Input，在高亮度显示Amplitude的Choose an input to delete对话框，点击OK。

4 择File [image] Save As...，输入新的名称usrobj-program1.vee，重命名程序。

5 然后，最小化Noise Generator对象，重新排列各个对象，如下图所示。

6 使用快捷方式Ctrl+按鼠标左键，选择Noise Generator和A+B对象。点击Edit [image] Create UserObject。出现一个标为Create UserObject的对话框。(在希望时通过输入新名称，可以重命名对象。现在点击OK，创建UserObject。)

UserObject将在UserObject编辑窗口中包含Noise Generator和A+B对象，并在Main窗口中自动创建UserObject，并带有相应的输入端和输入端及连接。

在键盘上按Home按钮，把图标定位到UserObject的左上角。

备注

在执行Create UserObject前重新排列对象位置非常方便。如果没有采集一个区域中要包括的对象，那么UserObject会自行调整，包括选择的所有对象。然后可以重新排列和调整UserObject的工作区，把UserObject移动到工作区中的相应地方。但是，如果提前以逻辑方式放置对象，那么清除起来要更加容易。

备注

可以使用Edit [image] Clean Up Lines，清除程序内部引导的线。这条命令与上下文有关。为清除UserObject的线，它必须位于活动窗口中。点击UserObject窗口，然后使用Edit [image] Clean Up Lines。

在编辑窗口中创建UserObject，然后使用UserObject的图标视图，可以节约屏幕空间。

7 为帮助您跟踪UserObject，把标题从UserObject变成AddNoise。双击标题栏，在属性对话框中输入新标题。下图显示了可以怎样更简便地使用程序。

如果想迅速进入任何对象的Properties对话框，只需双击其标题栏。

8 点击Run按钮，显示有噪声的余弦波。

注意AddNoise被最小化，以图标的形式出现在工作空间底部。为最小化AddNoise，点击标题栏中的最小化按钮，其下面有一条下划线(_)。

有效UserObjects的关键是保证它们为程序内部的逻辑用途服务。这种独特的对象并不是节约空间的装置，而是为实现程序结构化提供了一条途径。UserObjects可以帮助您在VEE程序中使用“从上到下”的设计。VEE还包括一个对象，称为UserFunction，这是一个可以重用的代码模块。如需与UserObjects和UserFunctions有关的更多信息，请参阅：

如需与UserObjects有关的更多信息，请从VEE菜单栏中选择Help [image] Contents and Index，然后浏览How Do I..., Tell Me About...或Reference。

下一节将继续使用本例。但是，如果您想现在退出，可以把程序保存为usrobj-program3.vee。


实验2-2: 为用户输入创建对话框

如果还没有打开，现在打开程序usrobj-program3.vee。

在Data [image] Dialog Box子菜单中，有六个对话框选项：Text Input, Int32 Input和Real64 Input, 以及Message Box, List Box和File Name Selection框。在文本输入、整数输入和实数输入情况下，对话框帮助您配置提示或标记、默认名称、取值限制和错误信息。一旦包括其中一个对话框，那么在程序运行时会出现一个弹出输入框。

1 选择Data [image] Dialog Box [image] Int32 Input，把它放在Function Generator的左面。把Prompt/Label字段变成Enter Frequency:。(记住点击拖动字段，先高亮度显示字段) 把Default Value变成100。

也可以双击一个输入字段，高亮度显示一个项目。

2 把Value Constraints低端变成1，高端变成193。改变错误信息，反映这些新值。最后，图标化Int32 Input对象。

3 打开Function Generator的Object Menu，选择Add Terminal [image] Data Input。在Select input to add对话框中，选择Frequency，点击OK。

4 把Int32 Input对象的顶部输出端连接到Function Generator上的输入端。注意，现在只能通过输入端改变Frequency，不能再编辑Frequency输入字段。程序应类似于下图。

5 运行程序。出现Int32 Input输入框，并带有说明Enter Frequency:。试着在输入框中以不同的频率运行程序。点击拖动弹出框，控制其显示的位置。

如果输入的频率大于193，那么会显示错误信息框。注意，您会获得配置的错误信息。

在下一节中将继续本例。但是，如果您现在想退出，可以把程序保存为usrobj1-program4.vee。

备注

本手册中许多实验练习和编程范例使用的VEE程序都包括在VEE中的Help [image] 打开Example... Manual [image] UsersGuide下。


实验2-3: 使用数据文件

通过在程序中包括To File和From File对象，可以从VEE 把数据写入数据文件，把文件中的数据读入VEE。例如，在已经构建的程序的细节视图中添加一个To File对象。

如果程序还没有打开，现在打开程序usrobj-program4.vee。

1 选择I/O [image] To [image] File，把它放在Main工作区中。

2 把默认文件名myFile变成wavedata。

如果在Clear File At PreRun & Open左面没有对号，那么点击小的输入框。To File会默认把数据追加到现有文件中。但在本例中，您想每次运行程序时清除文件。现在To File对象应类似于下图。

3 双击标有Double-Click to Add Transaction的区域，写入数据。出现上面的对话框。点击TEXT字段(或其箭头)，显示由数据类型组成的下拉列表，点击CONTAINER。点击OK。注意在I/O Transaction对话框中点击OK时，会在To File对象中自动添加一个输入端。

查看To File对象菜单中的Help，查看除WRITE CONTAINER之外的其它处理选项。 I/O处理参考 和“存储和检索测试结果中更详细地讨论了处理。

4 把AddNoise UserObject的数据输出端连接到To File的数据输入端。现在程序应类似于下图。

备注

可以把一个数据输出端连接到多个数据输入端。

5 再次点击工具栏上的Run按钮，测试程序。现在程序显示AddNoise UserObject输出的有噪声的余弦波，把波形数据容器写入文件wavedata中。

双击To File对象，出现Open View，然后双击输入端，考察其内容。应看到一个由256点组成的数组。

在程序中添加一个From File对象，读回数据。

6 选择I/O [image] From [image] File，把它放在Main工作区中。在READ CONTAINER x中添加读取处理，把文件名变成wavedata (To File的规程相同)。然后，删除AddNoise和Waveform (Time)对象之间的线，连接各个对象，如下图所示。To File和From File之间的序列线保证在读取数据前把数据写入文件中。

7 运行程序。其应类似于上图。把程序保存为usrobj-program.vee.。


实验2-4: 创建面板视图(操作人员界面)

在开发程序后，您可能想创建一个操作人员界面。为此，创建一个程序面板视图。本练习使用在“实验 1-2: 查看数据流程和传播"中创建的程序simple-program.vee。

1 打开程序simple-program.vee。程序应类似于下图。

2 选择希望出现在面板视图中的对象，它将作为操作人员界面。按住Ctrl，同时点击希望选择的所有对象。(一定不要选错对象) 在本例中，选择Real64 Slider和Waveform (Time)对象。每个对象现在有一个阴影，表明其被选中。

3 点击工具栏上的Add to Panel按钮，在面板中添加选中的对象(或使用Edit [image] Add To Panel)。出现一个面板视图，显示在面板中添加的两个对象。

可以在面板视图中调整对象大小、并把对象移动到相应的位置，创建一个与下图类似的面板。

4 在左上方的Main窗口标题栏中按To Detail按钮，进入细节视图。点击To Panel按钮，返回面板视图。

细节视图是编辑程序使用的正常窗口。可以在面板视图中独立于细节视图移动、调整或删除对象。细节视图用来开发程序，面板视图用来提供操作人员界面。

5 把程序保存为simple-program_with_panel.vee。

可以练习对面板视图进行某些改动，具体如下：

• 为改变面板上的颜色，从面板视图的Main窗口对象菜单中选择Properties。选择BackColor属性，选择希望的颜色。

• 为改变任何对象上的颜色或字体，双击标题栏，出现Properties窗口。然后点击希望改变的Colors或Fonts属性。

• 为在Panel视图中为对象提供突起的外观，打开该对象的Properties窗口，在Border属性下选择Raised。

• 为改变Panel视图的名称，打开主Properties窗口，把Title属性变成希望的名称。在程序执行时，还将显示输入的名称。


实验2-5: 数据数学运算处理

VEE支持广泛的内置数学功能和数据类型，及MATLAB的所有数据和信号处理能力。如需更详细的信息，请参阅处理数据。

使用数据类型

VEE支持多种数据类型，包括文本、整数和实数，同时包括多种复数和坐标数字。在以前的范例中，您已经看到A+B对象怎样把两个波形加在一起。数学运算符如加法(+)，可以用于多种数据类型，甚至可以作为混合数据类型使用。

例如，为创建下述程序，清除Main窗口，把下述对象放在Main窗口中，连接这些对象，如下图所示，注意下述信息。

1 选择File [image] New，清除工作区。

2 选择Data [image] Constant [image] Real64，添加一个Real64 Constant对象。

3 选择Data [image] Constant [image] Complex，添加一个Complex Constant对象。

4 添加A+B对象。选择Device [image] Function & Object Browser，出现Function & Object Browser。然后选择Type: Operators; Category: Arithmetic; Operators: +。点击Create Formula创建对象。

5 选择Display [image] AlphaNumeric，添加一个AlphaNumeric对象。连接各个对象，如下图所示。在Real64 Constant对象的数据输入字段中输入值1.53，在Complex对象的数据输入字段中输入复数值(2,1)。运行程序，应获得下述结果。

VEE根据需要自动转换数据，然后在A+B对象中执行加法运算。实数值1.53被转换成复数值(1.53,0)，然后添加到复数值(2,1)中。结果(3.53,1) (一个复数)显示在AlphaNumeric对象中。

备注

在正常情况下，VEE自动处理所有数据类型转换。如需更多信息，请从VEE工具栏中选择Help [image] Contents and Index。然后，浏览How Do I..., Tell Me About..., 或Reference。

使用数据形状

VEE支持各种数据形状，如标量和数组。与大多数编程语言不同，VEE对象可以在整个数组上运行，而不是只在一个要素上运行。

下面的程序创建了由10个要素组成的一维数组，计算10个值的中值，然后显示中值。

1 选择 File [image] New，清除工作区。

2 选择Flow [image] Repeat [image] For Range，添加一个For Range对象。

3 选择Data [image] Sliding Collector，添加一个Sliding Collector对象。

4 添加一个median(x)对象。选择 Device [image] Function & Object Browser。然后选择Type: Built-in Functions; Category: Probability & Statistics; Functions: median，点击Create Formula。

点击工具栏上的fx 按钮，可以显示Function & Object Browser。

5 选择Display [image] AlphaNumeric，添加一个AlphaNumeric对象。连接各个对象，如下图所示。

. 运行程序。如果还没有改变对象上的任何输入，应看到上面显示的结果。

使用Formula对象

VEE提供了联机帮助Reference部分存档的数学运算符和函数。选择Help [image] Contents and Index。然后选择Reference，根据需要浏览各个项目。

通过Device [image] Function & Object Browser (或工具栏上的 fx)，使用预先定义的运算符和函数对象。点击三个列表中的项目：Type:, Category:和Functions:，从Function & Object Browser中选择对象。点击Create Formula创建对象。

除使用预先定义的运算符和函数外，可以在Formula对象内创建任何有效的VEE数学表达式，该对象位于Device菜单下。在本节中，您将使用Formula对象创建一个程序。先清除Main窗口，采取下述步骤。

1 在Main窗口中添加Function Generator对象，修改它，生成100 Hz正弦波。选择Device [image] Virtual Source [image] Function Generator。

2 选择Device [image] Formula，把Formula对象添加到Main窗口中。通过把鼠标指针放在输入端区域，点击Ctrl+A，在对象中添加第二个输入(B)。

3 在输入字段中输入数学表达式abs(A)+B。

4 选择Data [image] Constant [image] Real64，在Main窗口中添加一个Real64 Constant对象。输入值0.5。

5 选择Display [image] Waveform (Time)，把y轴标度设为-2到2。把Automatic Scaling设为Off。为获得这些参数的对话框，点击Mag。

6 如下图所示连接对象，运行程序。

在运行程序时，Formula对象会获得波形输入A和实数值B，把B加到A的绝对值中。事实上，表达式abs(A)+B “矫正了”正弦波，增加一个“dc偏置”。可以使用A+B和abs(x)对象得到相同的效果，但在Formula对象中读取表达式要更容易。(这还会节约空间。)

试着双击Formula对象的输入端和输出端。注意输入B的实际标量添加到输入A上的波形数据的每个要素中(一维数组)，得到的波形在Result端输出。

备注

为增强VEE广泛的数学运算功能，集成MATLAB Script另外提供了几百个数学函数。在Function & Object Browser中浏览这些函数。如需与使用MATLAB函数有关的更多信息，请参阅“在Agilent VEE中使用MATLAB Script"。


实验2-6: 生成随机数字

1 编制程序文档：

a 选择Display [image] Note Pad，把它放在工作区顶部中心。点击编辑区域，出现一个光标，去掉可能存在的任何模板。然后输入：

This program, Random, generates a real number between 0 and 1, then displays the results.

2 选择Device [image] Function & Object Browser。选择Type [image] Built-in function, Category [image] All, 和Functions [image] random。点击Create Formula。把对象放到工作区中，点击鼠标放置对象。

3 点击Data [image] Constant [image] Int32，把它放在随机对象的左面。打开Int32对象菜单，点击Clone，把它放在其它Int32对象的下面。双击0出现光标，然后输入1。把常数对象0连接到随机对象的低输入端，把常数1连接到高输入端。

4 选择Display [image] AlphaNumeric，把它放在随机对象的右面。打开对象菜单，选择Help，更好地了解对象。

5 把随机对象输出端连接到AlphaNumeric输入端，出现数据线，连接两个对象。

备注

在移动鼠标指针，把线附在目标端附近时，会有一个框高亮度显示端。然后再次点击鼠标，完成连接。

备注

如果由于某个原因您想在完成链接前终止连接操作的线，双击鼠标，线会消失。

6 在工具栏上点击Run按钮，您会看到一个随机数字，如下图所示。

7 选择File [image] Save As...，输入Random.VEE，点击OK。在将来打开时，这个名称将出现在标题栏VEE旁边。


实验2-7: 设置和获得全局变量

通过这个程序，您可以更多地实践构建VEE程序的基本技巧，同时它还介绍了全局变量。可以使用Set Variable对象创建一个变量，以后在程序中使用Get Variable对象检索这个变量。可以使用任何VEE数据类型。本例使用Real64类型的数字。(如需与VEE数据类型有关的更多信息，请参阅数据类型)

1 选择Display [image] Note Pad，把它放在工作区的顶部中心。点击编辑区域的左上角，出现一个光标，去掉可能存在的任何模板，然后输入下述信息：

Set and Get a Global Variable prompts the user to enter a real number. The variable, num, is set to this real number. Then num is recalled and displayed.

2 选择Data [image] Constant [image] Real64，把它放在工作区的左侧。打开对象菜单，检查Help项。

3 打开Real64对象菜单，选择Properties。把标题变成提示Enter a Real Number:，然后点击OK。

备注

本练习在输入对话框中使用其中一个Constant对象，只是把其标题变成提示。这是获得用户输入的一种常用技术。可以使用Data [image] Dialog Box [image] Real64 Input。也可以双击标题栏，出现Constant Properties对话框。

4 选择Data [image] Variable [image] Set Variable，把它放到Real64对象的右面。双击globalA，高亮度显示，然后输入num。注意对象的名称变成Set num。

这表示用户将在Real64对象中输入一个实数。在用户点击Run按钮时，数字将设为全局变量num。

5 把Real对象的数据输出端连接到Set num对象的数据输入端。

6 选择Data [image] Variable [image] Get Variable，把它放到Set num对象的下面。把变量名称变成num。注意对象名称变成Get num。

7 把Set num序列输出端连接到Get num序列输入端。

备注

在使用前，必须设置全局变量。因此，在这种情况下，必需使用序列端，保证在使用 Get num检索前已经设置了变量num。

8 选择Display [image] AlphaNumeric，把它放到Get num对象的右面。

9 把Get num数据输出端连接到AlphaNumeric数据输入端。

10 输入一个实数，在工具栏上点击run按钮。程序应类似于下图。

11 选择File [image] Save As... ，把程序命名为global.vee。


实验3-1: 配置仪器

通过VEE，可以在不存在仪器时开发程序。在本练习中，您将配置一部用于面板驱动程序的示波器。然后，再把物理仪器添加到配置中。

在仪器不存在时配置仪器

1 选择I/O [image] Instrument Manager.... 点击和拖动标题条，把对话框移动到左上方工作区。

备注

如果您已经连接和加电任何仪器，VEE会查找仪器，并自动为其查找驱动程序。如需与自动查找和配置仪器有关的更多信息，请参阅主VEE屏幕中的Help [image] Welcome [image] Tutorials。

在默认状态下，没有配置任何仪器，本例假设在Instrument Manager列表中没有出现任何仪器。

2 在Instrument Manager 对话框中，一定要高亮度显示My Configuration，在Instrument下点击Add...，出现Instrument Properties对话框。

Instrument Properties 对话框中的项目如下：

项目 | 说明
Name | 仪器在程序中的名称。根据下述语法准则选择一个名称： • 仪器名称必须以字母字符开头，后面跟着字母数字字符或下划线字符。 • 在仪器中名称中不能使用嵌入式空格。
Interface | 接口类型，可以选择GPIB, Serial, GPIO, USB, LAN, 或VXI。
Address | 接口的逻辑单元 (GPIB通常是7)外加仪器的本地总线地址(0 – 31的数字)。如果地址保持在0，表示您在没有仪器的情况下开发程序。 在改变Direct I/O对象上的I/O设备地址时，变化实际应用到从这里起下游中参考同一设备的所有其余对象。
Gateway | 指明仪器是在本地控制还是远程控制。使用默认项目This host在本地控制仪器，或输入Gateway进行远程控制。(如需更多信息，请参阅I/O配置技术)

3 把名称变成scope，所有其它字段保持默认值，点击Advanced...。出现Advanced Instrument Properties 对话框。

General文件夹中的项目如下：

项目 | 说明
Timeout | 在获得错误信息前I/O处理结果允许的最长秒数。
Live Mode | 指明是否与仪器进行实地通信。把这个字段设为OFF，除非仪器存在。VEE的默认设置是ON。
Byte Ordering | 指明设备读写二进制数据使用的顺序。这个字段在先读写Most Significant Byte (MSB)或先读写Least Significant Byte之间拨码转换。所有IEEE488.2标准设备必须默认采用MSB顺序。
Description | 在这里输入任何描述。例如，如果希望描述的是标题栏上的仪器号码，那么输入号码。

4 把Live Mode拨到OFF，然后点击Panel Driver文件夹，出现对话框。

5 点击ID Filename右面的字段，获得一个列表框，标题为Read from what Instrument Driver?。这个列表中包括VEE修订版在指定目录中加载的所有面板驱动程序文件。

备注

为完成本例，您必需从VEE光盘安装面板驱动程序。*.cid文件表示汇编的仪器驱动程序文件。

6 向下滚动列表，高亮度显示hp54504a.cid，然后点击Open。上图显示已经选择了这部仪器。还可以双击高亮度显示的文件，选择文件。

Panel Driver文件夹中的其它项目如下：

Panel Driver 项目 | 说明
Sub Address | 这个字段留为空。只有非VXI卡槽仪器才使用它识别插入模块。
Error Checking | 保持默认设置ON。可以关闭Error Checking，以提高吞吐量，但这将不会校验I/O错误。
Incremental Mode | 保持默认设置ON。也可以关闭Incremental Mode，每次在改变设置时，它将发送仪器状态的整个仪器命令串。

7 点击OK，返回Instrument Properties对话框。点击OK。

提供的仪器列表现在应包括名为scope的仪器配置，使用驱动程序文件hp54504a.cid。仪器没有指定总线地址，因为它目前不存在。您可以在这种模式下开发程序，以后在准备把仪器连接到计算机上时再增加一个地址。

在输入一个字段后，按Tab键，移动到下一个字段，按Shift-Tab，移动到前一个字段。按Enter与点击OK的结果相同。VEE关闭对话框。

8 点击Save，关闭Instrument Manager对话框。(还可以在Create I/O Object下点击Panel Driver，立即把它放在程序中，VEE将自动保存配置。)

现在您已经在仪器列表中增加了名为scope的HP 54504A示波器。尽管实际仪器不存在，但您在编程时可以使用这个驱动程序。

选择一部在程序中使用的仪器

1 选择I/O [image] Instrument Manager....

2 高亮度显示选项scope(@(NOT LIVE))，然后在Create I/O Object下点击Panel Driver。

备注

在Instrument Manager中，根据配置的仪器类型，通常可以在Create I/O Object下创建不同的对象类型。例如，如果在本练习中已经选择了Direct I/O、而不是 Panel Driver，您会获得一个名为scope(@(NOT LIVE))的Direct I/O对象。VEE还提供一个Component Driver，它使用Panel Driver提供的函数子集。(如需更多信息，请参阅I/O配置技术。)

3 放置示波器面板轮廓，点击放置轮廓。显示画面类似于下图。

现在您可以象任何其它VEE对象一样在程序中使用面板驱动程序。

在配置中增加物理仪器

1 选择I/O [image] Instrument Manager....，高亮度显示示波器。在Instrument...下点击Properties。

2 双击Address字段，高亮度显示当前项目和类型709。709中的7是逻辑单元。(如果GPIB (HP-IB)逻辑单元不是7，用实际逻辑单元号码代替7。) 709中的9是示波器的默认地址。

3 点击Advanced:，把Live Mode拨到ON，然后点击OK。点击OK，关闭Instrument Properties对话框。

4 点击Save，保存变化。

另请参阅

使用面板驱动程序，使用Direct I/O，使用PC插件电路板，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


实验3-2: 使用面板驱动程序

这些练习以HP 3325B函数发生器为例。其原理与使用任何VEE面板驱程的原理相同。通过使用面板驱程、而不是直接进行仪器编程，可以节约开发和修改程序所需的时间。仪器设置变化通过菜单选择或编辑对话框中的字段完成。如果仪器已经连接，且Live Mode是ON，那么所作的变化将登记在仪器上。

为在程序中使用面板驱程，按需添加输入和/或输出，把面板驱程连接到其它对象上。可以在一个程序中使用同一驱程的多个实例，把仪器设置成不同的状态。在VEE中，可以图标化面板驱程，节约空间，或使用打开的视图，显示仪器设置。还可以在程序运行时改变设置。

改变面板驱程上的设置

1 选择I/O [image] Instrument Manager.... 选择My Configuration，然后在Instrument下点击Add...，出现Instrument Properties对话框，编辑下述信息：

设置 | 说明
Name | 编辑成fgen，按Tab键两次，移动到Address字段。
Address | 变成713或希望在总线上使用的地址。

2 点击Advanced。在General文件夹中，把Live Mode拨到OFF。

3 点击Panel Driver文件夹，把ID Filename: 设为hp3325b.cid。点击OK两次，返回Instrument Manager。

4 在Create I/O对象下，点击Panel Driver。把对象放在工作空间左侧。(不管采用什么仪器，只要已经配置仪器，并添加到列表中，那么这个流程相同。)

备注

您正在没有连接仪器的情况下进行编程。如果连接了仪器，那么可以把配置编辑成适当的地址。

5 在Function字段中点击Sine，获得一个弹出菜单，然后选择Triangle。

6 点击Frequency右面的字段。

7 在出现的Continuous component FREQUENCY对话框中输入100，点击OK。注意Frequency设置现在已经变化。

可以使用相同的方法，改变任何驱程上的仪器设置。如果仪器配置了一个地址，且Live Mode为ON，那么仪器会体现驱程面板中所作的每个变化。

移动到同一驱动程序上的其它面板

大多数驱动程序拥有一个以上的面板，简化用户界面。为移动到不同的面板，点击对象中的Main Panel，获得一个面板菜单。

1 在Panel Driver对象中，点击Main Panel，在Discrete Component MENU中选择Sweep。

.

2 点击OK，显示Sweep Panel。还可以查看其它面板，看提供了哪些项目。

3 点击OK返回Main Panel。

在面板驱动程序中添加输入和/或输出

除直接与面板交互外，通过在驱动程序中添加数据输入和/或输出，还可以在程序中控制设置或从仪器中读取数据。

1 把鼠标指针放在函数发生器仪器面板的数据输入区域上，按CTRL-A，添加一个数据输入端。出现仪器组件列表框。

2 从出现的菜单选择希望的组件。

备注

还可以打开对象菜单，选择Add Terminal by Component [image] Select Input Component。然后选择驱动程序上希望的组件字段。

使用同一流程，把鼠标指针放在数据输出区域上，添加一个数据输出。

删除数据输入或输出端

把鼠标指针放在端上，按CTRL-D。

备注

还可以打开对象菜单，从对象菜单中选择Delete Terminal [image] Input...，从出现的菜单中选择相应的输入。

自主决定

在HP 3325B函数发生器或提供的任何其它函数发生器上设置状态。把Function设置变成Square wave。添加Amplitude和Frequency组件。创建幅度和频率输入对话框，修改标题，提示操作人员。输入不同的幅度和频率值，运行程序，查看在操作人员输入后设置是否已经变化。(如果已经连接了仪器，那么在Live Mode为ON时设置会变化。)

另请参阅

配 置仪器，使用Direct I/O，使用PC插件电路板，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


实验3-3: 使用Direct I/O

如果某部仪器没有驱动程序，或者如果您想提高吞吐量，那么可以使用Direct I/O对象。

使用Direct I/O

在本练习中，您将使用Direct I/O配置HP 3325B函数发生器.

1 选择I/O [image] Instrument Manager....

2 高亮度显示fgen(@(NOT LIVE))项目，选择Instrument [image] Properties。

3 点击Advanced，选择Direct I/O文件夹。查看提供的选项，然后点击OK返回Instrument Properties，然后再点击OK返回Instrument Manager。

备注

本例使用GPIB接口 (IEEE488)。如果想配置Serial、GPIO或VXI仪器，请参阅I/O配置技术。

4 为把对象放在屏幕上，一定要保证仍高亮度显示fgen(@(NOT LIVE))，然后点击Create I/O Object [image] Direct I/O。

为在程序中使用Direct I/O对象，必须配置I/O处理。下一节介绍了编写文本命令、读取数据和上传/下载仪器状态。

把一条文本命令发送到仪器上

为把一条文本命令发送到仪器上，输入相应的字符串。大多数GPIB仪器对发送到仪器的命令使用字母数字字符串。例如，为把一条命令发送到HP3325B函数发生器，把幅度设为5 V，应输入命令字符串"AM 5 VO"。

本练习使用上一节中配置的HP 3325B函数发生器。在必要时，返回“使用Direct I/O"，配置仪器，然后再继续。

1 在fgen(@(NOT LIVE))对象中，双击处理条，出现下面的I/O Transaction对话框。

WRITE旁边朝下的箭头显示了处理菜单：READ, WRITE, EXECUTE和WAIT。为把数据写入仪器中，使用默认选项。打开对象菜单，对每种操作，可以查询Help。

2 使用默认选项WRITE, TEXT, DEFAULT FORMAT和EOL ON。点击标为a的输入字段，输入"AM 5 VO" (包括引号)，点击OK。

应该看到下面显示的处理WRITE TEXT "AM 5 VO" EOL。引号中的文本是程序运行时将被发送到HP3325B的命令。

在大多数情况下，把文本命令发送到仪器的流程是相同的。但是，有的仪器会指定每条命令结束时或一组命令结束时发送的字符。您必需从仪器文档中获得这些信息，然后在Direct I/O Configuration对话框中包括这些信息。

把表达式列表发送到仪器上

在某些情况下，您可能想把表达式列表发送到仪器上。例如，您可能想循环通过函数发生器中的大量频率。为使用Direct I/O Transaction完成这一操作，将对表达式列表中的频率使用一个变量，把该变量的数据输入添加到Direct I/O对象中。下述步骤说明了怎样把表达式列表发送到仪器上。

1 把HP3325B的第二个Direct I/O对象放在Main窗口中。双击处理区域，出现I/O Transaction对话框。

除命令字符串外，可以使用所有默认值。在这种情况下，使用格式"FR", <frequency>, "HZ"。这是一个表达式列表，每个表达式用逗号分开。频率用变量A表示，这是到Direct I/O对象的数据输入。

2 点击命令字符串的输入字段，输入"FR",A,"HZ"。(例如，如果A为100，VEE将发送字符串"FR100HZ"。) 点击OK。注意VEE自动添加标为A的数据输入端。

3 选择Flow [image] Repeat [image] For Range，把它放在Direct I/O对象左面。

4 把For Range数据输出端连接到Direct I/O数据输入端。

5 把For Range中的字段编辑成：From 10, Thru 1.8M, 和Step 50k。

For Range现在将发出10 – 1,800,000 、步进为50,000的数字。在Direct I/O对象收到数字时，命令字符串会导致函数发生器输出频率。Direct I/O应设置如下。

6 (可选) 把HP3325B连接到计算机上(如有)，编辑这个Direct I/O对象的配置，使其包括仪器的地址。运行程序，将看到仪器生成这些频率。

从仪器中读取数据

仪器以许多不同格式把数据发送到计算机上。为从仪器中读取数据，必须知道希望读取的数据类型、及是作为单个值(标量)还是作为数组返回数据。还必须知道仪器是作为文本(ASCII)还是二进制返回数据。

可以在仪器文档中找到这些信息，也可以使用I/O菜单中的VEE Bus I/O Monitor，检查返回的数据。这些信息决定怎样配置I/O处理。

在本例中，HP3478A万用表被连接到上个练习中描述的HP3325B函数发生器上。在发生器发出某个频率时，万用表触发读数，把结果发回VEE。下面的步骤介绍了怎样配置万用表处理。

备注

本例描述了READ TEXT处理。READ的其它选项包括BINARY, BINBLOCK, 和CONTAINER，使用Direct I/O对象和READ处理中对此进行了详细介绍。

1 选择I/O [image] Instrument Manager...，点击Add...，把名称变成dvm，点击Advanced...，把Live Mode: 设为OFF。假设您还没有连接HP3478A，点击OK返回Instrument Manager。(如果有HP3478A，那么修改地址，仪器将跟踪命令。)

2 高亮度显示dvm(@(NOT LIVE))，在Create I/O对象下点击Direct I/O。

3 双击<Double-Click to Add Transaction>条，出现I/O Transaction对话框。

4 高亮度显示输入字段，输入"T5"，然后点击OK。这将把"T"命令写入仪器中。T5是到万用表的单个触发命令。

5 打开对象菜单，点击Add Trans...，添加另一个处理条，或使用<Double-Click to Add Transaction>，添加处理，出现I/O Transaction对话框。

6 点击WRITE旁边朝下的箭头，得到一个下拉菜单，然后选择READ。在选择READ时，I/O Transaction框中出现新的按钮。

7 检查ExpressionList输入字段，检验其中包含一个x。按Tab移动到下一个字段。仪器返回的数据被发送到数据输出端。在这种情况下，将从仪器中读取数据，并把数据放在名为x的数据输出中。

备注

名称不分大小写。

8 REAL64 FORMAT采用默认值。万用表作为实数返回一个读数。

9 保持DEFAULT NUM CHARS不变。

默认的字符数是20。如果想改变数字，点击DEFAULT NUM CHARS，拨到MAX NUM CHARS，把数字20变成希望的数字。

10 保持SCALAR不变，点击OK。

您将看到处理在条上显示为READ TEXT X REAL64。注意VEE自动添加一个名为x的数据输出。

备注

如果仪器返回一个取值数组，在I/O Transaction对话框中点击SCALAR菜单，得到不同维度的菜单，如下图所示。一旦已经选择了数组维度，那么还需要指明数组的长度。

11 在右面添加Display [image] AlphaNumeric，把其输入连接到标为x的Direct I/O输出上。

两个Direct I/O处理如下：

配置处理的流程类似，而不管READ TEXT处理采取什么数据格式。可以考察提供的其它格式。如需更详细的信息，请参阅使用Direct I/O对象 和 READ处理。

为创建完整的测试程序，这个万用表对象和函数发生器对象可以与VEE数据和显示对象相结合。可以简便地在VEE中创建全功能测试程序。

上传和下载仪器状态

某些仪器提供了“学习字符串”功能。学习字符串体现了构成仪器状态的所有函数设置。Direct I/O将上传这个学习字符串，并与该特定Direct I/O对象一起保存，以后可以在程序中把它下载到仪器上。为上传仪器状态，采取的步骤如下：

1 把仪器手动设置成希望的状态。

2 打开Direct I/O对象菜单，点击Upload State。

现在，这个状态与Direct I/O对象的这个特定实例相关。

3 双击处理区域，打开I/O Transaction对话框。

4 点击TEXT，选择STATE (LEARN STRING)，然后点击OK，关闭I/O Transaction对话框。在执行这个WRITE处理时，以前捕获的状态被发送到仪器上。

上传和下载由Direct I/O Configuration对话框中的设置控制。如果Conformance是IEEE 488.2，那么VEE将使用488.2 *LRN?定义自动处理学习字符串。如果Conformance是IEEE 488，那么Upload String将指明查询状态使用的命令，Download String将指明下载时状态字符串之前的命令。下图显示了一个实例。

Conformance可以支持IEEE 488或IEEE 488.2。本例使用HP 54100A数字化示波器，其符合IEEE 488标准，要求"SETUP?"查询学习字符串，在下载时要求在学习字符串前面有"SETUP"。在选择Configured for State (Learn String)时，会出现另两个字段，分别标为Upload String和Download String。输入字段中已经输入了正确的字符串。

另请参阅

配 置仪器，使用面板驱动程序，使用PC插件电路板，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation

使用Direct I/O对象，Direct I/O，I/O配置技术


实验3-4: 使用VXIplug&play驱动程序

VXIplug&play驱动程序是由各个仪器厂商发布的，并得到了这些厂商的支持。这些驱动程序基于C语言，是为实现最大性能和简便易用性而设计的。

Agilent VEE全面兼容VXIplug&play。安捷伦科技提供的所有VXIplug&play驱动程序都作为单独产品发售，也可以在网址http://www.agilent.com/find/inst_drivers及安捷伦开发人员网络(ADN) http://www.agilent.com/find/adn 中下载。VEE同时提供这些驱动程序及所有安捷伦科技面板驱动程序。为获得其它仪器的VXIplug&play驱动程序，请与仪器厂商联系。

配置VXIplug&play 驱动程序

本例介绍了怎样配置hpe1412驱动程序。

1 选择I/O [image] Instrument Manager...。

2 高亮度显示My configuration，然后在Instrument下点击Add...，出现Instrument Properties对话框。输入一个名称，如Instrument，点击Advanced...，出现Advanced Instrument Properties对话框。

3 在Advanced Instrument Properties对话框中，把Live Mode: 拨到OFF，选择Plug&play Driver文件夹。点击Plug&play Driver Name:字段，显示下拉菜单，其中列明计算机上安装的所有驱动程序。本例使用hpe1412驱动程序，如下图所示。

选择hpe1412驱动程序，点击OK返回Instrument Properties对话框，再点击OK返回Instrument Manager。应该有一个Instrument(@(NOT LIVE))项目。

4 高亮度显示Instrument(@(NOT LIVE))，在Create I/O Object下，选择Plug&play Driver。点击放置对象。

备注

在VEE中，VXIplug&play驱动程序与Direct I/O对象类似。

为使用仪器进行测量，必需配置I/O处理，在VXIplug&play驱动程序中使用C函数。驱动程序为您提供了面板，可以选择要使用的正确函数。

5 双击标为<Double-Click to Add Function>的处理条，显示 Select a Function Panel。下图显示了函数面板中的函数层级。注意对话框中显示了选定项目的Help。

备注

VEE自动初始化仪器。您不必象其它语言那样使用init函数。

6 点击Configure Present Settings [image] Measurement Type [image] Measurement Type Setup，显示Edit Function Panel。在func下，点击显示下拉列表。选择默认的DC Voltage。

7 点击OK。To/From Instrument对象现在包含一个hpe1412_configure项目(instruHandle,hpe1412_CONF_VOLT_DC)。

8 在To/From Instrument对象中，双击添加一个函数，在Measure下选择Take Measurement。点击Configuration文件夹，显示对话框。

9 点击OK。To/From Instrument对象中列出第二个函数调用。

另请参阅

配置仪器，使用面板驱动程序 ，使用Direct I/O，使用PC插件电路板，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，在VEE中使用ActiveX Automation


实验5-1: 为测试结果创建数组

创建数组最简便的方式是使用Collector对象。

本练习使用For Count对象，模拟来自仪器的四个读数。读数被放到一个数组中，并打印结果。不管数据类型或数组长度如何，其原理是相同的，因为Collector将接受任何数据类型，并根据发送的要素数量，自动创建数组长度。

1 选择Flow [image] Repeat [image] For Count, Data [image] Collector, 和 Display [image] AlphaNumeric。

对象名称 | 说明
关于For Count对象 | For Count输出从0开始的递增整数值，具体取决于在输入字段中指明的迭代数量。双击高亮度显示默认数字10，然后输入4。For Count将输出0, 1, 2, 和 3。
关于Collector 对象 | Collector通过数据输入端接收数据值。在完成数据采集时，“ping” XEQ端，告诉Collector构建并输出数组。可以使用For Count序列输出端，ping Collector XEQ端。Collector显示一个按钮，在1 Dim Array 和 n+1 Dim Array之间拨码转换。 双击Collector，看到打开的视图，在对象菜单中阅读Help，了解对象。

2 在Collector中点击n+1 Dim，把选项变成1 Dim Array。

3 把For Count数据输出端连接到Collector上的数据输入端。

4 把For Count序列输出端连接到Collector上的XEQ输入端。

XEQ端是多个不同对象上存在的专用触发端，决定着什么时候执行对象。在本例中，您希望对象在收集了数组的所有数据之后启动。

5 把Collector数据输出端连接到AlphaNumeric数据输入端。

6 点击拖动对象的任何一个角，放大AlphaNumeric以适应数组。(先选择AlphaNumeric，通过“点击放大”对象轮廓，还可以放大AlphaNumeric。)

7 运行程序，其外观如下。

另请参阅

使用数组存储测试结果


实验5-2: 从数组中提取值

为从数组中提取值，可以在表达式中使用括号，也可以使用Access Array [image] Get Values对象。下面的实例使用Formula对象中的表达式。在本练习中，将在程序中增加多个对象。

1 把鼠标指针放在线上，按Shift-Ctrl，然后点击鼠标左键，选择Collector和AlphaNumeric之间的数据线。然后把Collector变成图标。

2 选择Device [image] Formula，复制它。把AlphaNumeric向右移，把两个Formula对象放在Collector的右面。

3 把Collector数据输出连接到Formula对象的数据输入上。在上面的Formula输入字段中输入A[2]，在下面的Formula输入字段中输入A[1:3]。

4 A[2]将作为标量提取数组的第三个要素；A[1:3]将返回由三个要素构成的子数组，其中保持A的第二个、第三个和第四个要素(表示A输入端上的数组)。

5 复制AlphaNumeric，把画面连接到每个Formula对象上。

6 运行程序，其外观应该如下。

另请参阅

使用数组存储测试结果


实验5-3: 使用To/From File对象

本实验练习介绍了在文件中获得测试数据的流程。在本练习中，将存储和检索三个常见的测试结果项目：测试名称、时戳和Real值的一维数组。这一流程同样适用于所有VEE数据类型。

把文本字符串发送到文件中

1 选择I/O [image] To [image] File，项目设置如下：

操作 | 说明
filename | 使用默认文件myFile。点击To File输入字段，在主目录中获得一个文件列表框，可以改变默认文件。
Clear File At PreRun & Open | 复选这个框。在默认情况下，VEE会把新数据追加到现有文件末尾。复选这个框会在写入新数据前清除文件。

2 双击处理区域，显示I/O Transaction对话框。(在必要时参阅I/O处理。)

WRITE TEXT an EOL是默认处理。它使用TEXT编码和指定的行尾序列，在a端写入数据。VEE不分大小写。数据输入端或数据输出端名称可以使用小写字母串，也可以使用大写字母串。

项目设置如下：

项目 | 说明
a (表达式字段) | 高亮度显示表达式列表字段，其中包含默认值a。输入"Test1"，然后点击OK。 (需要使用引号指明是Text字符串。如果输入没有引号的Test1，那么VEE会把它理解为端名或全局变量名)
WRITE | 使用默认值WRITE。
TEXT | 使用默认值TEXT。编码TEXT将使用ASCII字符发送数据。
DEFAULT FORMAT | 使用DEFAULT FORMAT。DEFAULT FORMAT 将选择相应的VEE格式，如STRING。
EOL ON | 使用默认值。默认的EOL序列是新行\n的换码符。

3 点击OK，返回To File对象。现在处理栏应包含语句WRITE TEXT "Test1" EOL。这个处理把字符串Test1发送到指定文件。

把时戳发送到文件中

Device [image] Function & Object Browser [image] Time & Date类中的函数now()提供用Real64 Scalar表示的当前时间。Real的值是从公元0001年1月1日0时起经过的秒数。

因此，now()返回一个约为63G的值。VEE之所以提供这种格式，是因为它在数学运算中处理起来更容易，并节约了存储空间。如果想以更加可读的格式存储时戳，使用To File对象中的TIME STAMP FORMAT。采取下述步骤，把时戳发送到文件。

1 在同一个To File对象中，双击处理区，显示I/O Transaction框。

2 双击表达式列表输入字段，高亮度显示a，输入now()。now()函数以Real格式发送来自计算机时钟的当前时间。

3 把Real格式变成Time Stamp Format。点击DEFAULT FORMAT旁边的箭头，显示下拉菜单，选择TIME STAMP FORMAT。 I/O Transaction对话框现在显示额外的项目。项目设置如下：

时戳 | 说明
Date & Time | 在下拉菜单中选择Time。
HH:MM:SS | 点击并切换到HH:MM (从时分秒格式切换到时分格式)。
24 HOUR | 点击切换到12 HOUR (从24小时格式切换到上午和下午格式)。

现在I/O Transaction对话框应类似于下图。

4 点击OK，返回To File框。现在第二个处理栏应包含语句WRITE TEXT now() TIME:HM:H12 EOL。

把Real数组发送到文件中

使用For Count和Collector对象创建一个由4个要素组成的一维数组，并把它应用到myFile。

1 选择Flow [image] Repeat [image] For Count。把For Count中的默认值变成4。

2 选择Data [image] Collector。双击Collector，切换到Open view。把For Count的数据输出连接到Collector的数据输入 (顶部输入端)。把For Count序列输出端连接到Collector上的XEQ端 (顶部输入端)。图标化Collector。

3 Collector现在创建数组 [0, 1, 2, 3]，可以把这个数组发送到数据文件中。

4 使用同一个To File对象，双击处理区。在I/O Transaction对话框中，打开DEFAULT FORMAT菜单，选择REAL64 FORMAT。

5 I/O Transaction对话框为REAL64 FORMAT选项显示其它按钮。可以保留所有默认选择，但您可能想考察这些选项，以便未来参考使用。

6 点击OK关闭I/O Transaction框。现在，To File对象中的处理栏应包含语句WRITE TEXT a REAL64 STD EOL。注意VEE还自动添加一个输入端a。

7 把Collector的输出连接到To File的输入a。现在程序应类似于下图。(另外还显示了配置的I/O Transaction框。)

使用From File对象检索数据

为使用From File对象检索数据，必须知道怎样存储数据。

备注

还可以使用To DataSet或From DataSet存储和检索数据，它不要求知道文件中的数据类型。“使用DataSets存储和检索记录"中介绍了数据集。

在本例中，测试名称以String Format存储，后面跟着一个Time Stamp Format的时戳及由Real64数字组成的数组。将在From File中创建三个处理，把数据读回VEE。

1 选择I/O [image] From [image] File，把它放在To File对象下面。

2 把To File对象的序列输出端连接到From File对象的序列输入端。

这一顺序连接保证了To File对象已经把数据发送到myFile中，然后From File才开始提取数据。

3 在From File对象中，保留默认数据文件myFile。双击处理栏，出现I/O Transaction对话框。点击REAL64 FORMAT，把它变成STRING FORMAT，如下图所示。

4 所有其它默认值都正确，因此点击OK，关闭I/O Transaction框。现在，From File对象中的处理栏应包含语句READ TEXT x STR。

现在添加另两个处理，读回时戳和实数数组。

5 在同一个From File对象中，在第一个处理栏下面双击鼠标，出现I/O Transaction对话框。双击表达式列表输入字段，高亮度显示x，输入y，让第二个处理把数据读回y端。(如果这个端仍保留为“x”，那么第二个处理会覆盖第一个处理放到“x”中的数据，而不是追加数据) 把REAL64 FORMAT变成STRING FORMAT，然后点击OK。

备注

为作为文本字符串读回时戳，使用STRING FORMAT。TIME STAMP FORMAT把时戳数据转换回到Real数字。

6 在同一个From File对象中，在第二个处理栏下面双击鼠标，出现I/O Transaction对话框。项目设置如下：

项目 | 说明
(表达式字段) | 把x编辑成z，以便把Real数组读回Z输出端。
SCALAR | 把SCALAR变成ARRAY 1D。
SIZE: | 现在I/O Transaction框增加一个SIZE按钮。在本例中，数组有4个要素。用4替换10，点击OK。

备注

如果不知道数组大小，可以把SIZE切换到TO END。这会在VEE不知道确切大小的情况下，读取到文件末尾的数据。例如，可以使用这种功能，作为一个字符串数组读取一个文件的整个内容，检查文件内容。

现在，From File对象中的处理栏应包含语句READ TEXT y STR和READ TEXT z REAL64 ARRAY:4。注意，VEE自动为x, y和z添加数据输出端。还可以在对象菜单 [image] Add Terminal, Delete Terminal下或使用快捷方式Ctrl-A和Ctrl-D，手动添加或删除输入端和输出端。

7 选择Display [image] AlphaNumeric，复制两次，得到三个显示画面。把AlphaNumeric对象连接到From File的三个数据输出端。点击拖动对象的任何角，放大数组显示画面。

在从菜单中第一次选择时，还可以点击拖动对象外框，确定AlphaNumeric画面大小。

8 运行程序，程序应类似于下图：

注意第一个Alphanumeric显示了标题，第二个显示了测试时间，第三个列出了数组中的数字。

另请参阅

了解I/O事务, I/O事务格式


实验5-4: 使用记录

本练习介绍了怎样使用Record数据类型。您将了解怎样构建记录，怎样检索该记录中的特定字段，怎样设置选择的字段，怎样使用一个步骤解除构建整个记录。本练习还以不同的方式使用时戳函数now()。

构建记录

使用三个字段构建记录：测试名称存储为String，时戳存储为Real Scalar，模拟的测试结果存储为由4个要素组成的Array of Reals。在下面的练习中检索这些字段时，您将看到可以把时戳转换成许多不同的显示格式。

选择Data [image] Constant [image] Text，在输入字段中输入Test1，创建测试名称。重命名对象 Text Constant。图标化Text Constant。

9 选择Device [image] Function & Object Browser。在Type下点击Built-in Functions，在Category下点击Time & Date，在Functions下进行选择，点击Create Formula。把对象放在Text Constant下面。

10 选择Data [image] Constant [image] Real64，把它放在now()下面。

11 在Real64对象菜单中点击Properties...，选择1D Array，可以把这个Scalar Real64转化成Array 1D。

12 双击Real64标题条，打开Constant Properties对话框。在Configuration下选择1D Array，把Size变成4，然后点击OK。

在要素0000旁边双击鼠标，高亮度显示第一项，在这个数组中输入四个值，然后在每一项之间使用Tab键，输入值2.2, 3.3, 4.4, 5.5。图标化Real64。

13 选择Data [image] Build Data [image] Record，把它放在另三个对象的右面。添加第三个数据输入端，从而可以输入三个字段。在端上双击鼠标，打开每个端，把三个输入端重命名为testname, time, 和data。

Build Record对象上的Output Shape在Scalar和Array之间拨码转换。在绝大部分情况下，Scalar默认值是正确的选择。

14 把Text Constant对象连接到testname端上，把now()对象连接到time端上，把Real64对象连接到Build Record对象上的data端上。

15 运行程序。双击Record数据输出端，检查记录。程序应该如下。

可以看到三个字段及其值。如果点击Real64: Array 1D按钮，列表框会显示实数值。注意时戳已经存储为Real64 Scalar。在下面的练习中，您将把它转换成更加可读的形式。点击OK关闭Output Terminal Information对话框。把程序另存为records.vee。

从记录中获得字段

使用Get Field 对象，从记录中提取三个字段中的每个字段，然后显示每个字段的值。

1 打开records.vee 程序。

2 选择Data [image] Access Record [image] Get Field。出现标题为rec.field的对象。

不管字段数量和类型如何，标为rec的数据输入都将获取任何记录。Rec.field是输入字段中的默认选项，但可以对其进行编辑，检索任何字段。Rec是指数据输入端上同一名称的记录。(记住VEE不分大小写。)

备注

Get Field对象是配置了输入和表达式的一个Formula，其类似于Function & Object Browser中的公式。

3 复制rec.field两次，把对象放在Build Record的右面。

4 把Build Record数据输出连接到所有三个rec.field对象上。

5 由于三个字段存储为testname, time, 和data，因此您必须编辑rec.field对象，以获得相应的字段。

6 把三个rec.field对象表达式字段编辑成rec.testname, rec.time, 和rec.data。

7 选择Display [image] AlphaNumeric，复制它两次。把三个显示画面连接到三个rec.field对象上。重新确定第三个显示画面的大小，以适应实际数组，其大约比其它对象长三倍。

8 打开第二个AlphaNumeric显示对象菜单，选择Properties，然后选择Number文件夹。点击Global Format左面，去掉对勾。

设置显示格式。打开Real部分的Standard菜单。选择Time Stamp，点击OK。

9 点击HH:MM:SS，拨到HH:MM。点击24 HOUR，拨到12 HOUR。

10 运行程序，把它另存为getfield.vee。程序应该如下。

注意第二个画面列出了周几、日期和用小时和分钟表示的时间以及a.m.或p.m.指示。

在记录中设置字段

本练习说明了怎样改变记录特定字段中的数据。

备注

您可以在不同测试中使用相同的Record。

1 打开getfield.vee程序。

2 选择对象，按Ctrl-X，在Build Record后删除所有对象。

1 选择Data [image] Access Record [image] Set Field，把它放在Build Record右面。把Build Record的输出连接到Set Field的rec输入上。标题是rec.field = b。

Set Field的工作方式是把赋值符号(=)右面的表达式分配到左侧。因此，它修改指定的字段rec，包含来自右侧的值。记录其余部分不变。把进入记录连接到rec，把进入的新值连接到b。修改后的记录将放在标有rec的数据输出端上。

备注

Set Field对象是配置有输入和表达式的一个Formula，其类似于Function & Object Browser中的公式。

2 把表达式编辑成rec.data[*]=b，改变数据字段中四要素数组的值。(必需使用数组[*]符号，因为要改变这个记录字段中的整个数组。) 您将把数组的新值放在输入端b上。

3 选择Data [image] Constant [image] Real64，把它放在Build Record对象下面。打开对象菜单，选择Properties。在Configuration下选择1D Array，然后把Size编辑成4，点击OK。

如果数组中包含新的记录字段值，它必须与当前数组的长度相同。

高亮度显示第一项，使用Tab键移动到后面的项目中，把值1, 2, 3, 4输入到Real64中。(在最后一项后面不要按Tab键。) 把它连接到标为b的Set Field (标题为rec.field=b)输入上。

现在使用Get Field对象，从记录中执行字段 rec.data，显示结果。

4 选择Data [image] Access Record [image] Get Field，把对象放在Set Field (rec.field=b)对象下。从rec.field到rec.data编辑Get Field 对象表达式。把rec.field = b的数据输出连接到rec.field的数据输入上。

备注

您还可以在表达式字段中使用Formula对象及A.data。

5 选择AlphaNumeric显示画面，确定其大小以适应数组，把它连接到rec.field输出端。

6 运行程序，把它另存为setfield.vee. 程序应该如下。

如本例中所示，可以修改任何Record字段。还可以修改部分字段。例如，试着把rec.field = b中的表达式变成rec.data[1]=20，然后删除rec.field = b输入b。再次运行程序，应看到数组：2.2, 20, 4.4, 5.5。

通过一步解除构建记录

为提取所有记录字段，获得字段名称和类型列表，使用UnBuild Record对象。

1 打开setfield.vee程序。在Build Record后删除所有对象。

2 选择Data [image] UnBuild Data [image] Record，把它放在Build Record下，切换打开的视图，把Build Record的输出连接到UnBuild Record的输入上。在UnBuild Record中添加另一个数据输出端，把A、B和C输出重命名为字段名称：testname, time, 和data。

3 选择AlphaNumeric显示画面，复制它四次。把五个显示画面连接到UnBuild Record上的五个输出端上。必须放大Name List, Type List和data的显示画面，以适应数组。此外，重新配置time显示画面，用日/月/年表示时间，用12小时格式表示小时和分钟。

4 运行程序，把它另存为unbuild.vee。程序应该如下。

注意，Name List端在记录中给出三个字段的名称：testname, time, 和data，就象Type List把testname识别为Text，把time和data识别为Real64类型一样。

另请参阅

使用记录存储混合数据类型


实验5-5: 使用DataSets

DataSet是文件中存储的Records数组。本练习说明了怎样获得进出DataSet的数据。

在DataSet中存储和检索记录

本练习创建由10条Records组成的一个数组，每条记录包含三个字段：一个测试名称，一个Real64 Scalar，一个Reals数组。它把Records数组存储在一个DataSet中，检索和显示记录。

1 选择Flow [image] Start。选择Flow [image] Repeat [image] For Count，把对象放在Start下。选择Device [image] Formula，把对象放在For Count的右面。把Start连接到For Count的序列输入端；把For Count数据输出端连接到Formula数据输入端。

2 双击Formula表达式字段，高亮度显示默认的表达式，然后输入“test“ + a。

在点击Start时，For Count对象向Formula的A端顺序输出整数0-9。在Formula对象中，整数添加到单词“test”后面，作为Text Scalars输出：test0, test1, test2,...,test9。这些值将填充10条Records中的第一个字段。

3 选择Data [image] Build Data [image] Record，把对象放在Formula右面。添加一个数据输入端。把Formula的数据输出连接到Build Record的A输入。

4 从工具条中选择Function & Object Browser图标。

a 选择Built-in Functions, Probability & Statistics, 和random，创建random (low, high)对象。把对象放在Formula对象下方。

b 删除输入端，把输入参数从low变成0，从high变成1。

c 重命名对象 Random Number，把其数据输出连接到Build Record的B端。

5 把Formula序列输出端连接到 Random Number的序列输入端。连接序列端保证每次程序迭代会把一个新的随机数字放在特定记录的B字段中。

6 选择Data [image] Constant [image] Real64。把Real64对象放到Formula对象的下面。

a 打开对象菜单，点击Properties。在标题中输入Real Array，在Configuration下点击1D Array，把Size变成3。点击OK。

b 双击和输入数字1, 2和3，高亮度显示数组中的每一项。

c 把Real Array数据输出连接到Build Record的C端。

7 选择I/O [image] To [image] DataSet，把对象放在Build Record下。把Build Record的数据输出连接到其数据输入上。保持默认文件名myfile，复选Clear File At PreRun。

8 运行程序，应把由10条记录组成的数组放到名为myFile的DataSet中，如下图所示。

现在检索记录数组，使用From DataSet对象和Record Constant对象显示数组。

9 选择I/O [image] From [image] DataSet，把对象放在For Count下面。保持默认文件名myFile。点击Get Records字段，从One拨到All。最后，在底部的表达式字段中保持默认值1。

通过这些设置，VEE查看myFile中的DataSet，查找满足表达式字段指标的所有记录。如果把Get Records设为One，VEE将输出满足表达式字段指标的第一条记录。1表示TRUE条件，表明所有记录都满足指标，因此文件中的整个记录数组将放在标为Rec的输出端。其它练习中介绍了表达式字段的其它使用方式。如需更多信息，请在对象菜单中查询Help。

把For Count序列输出端连接到From Data Set对象的序列输入。这保证了把数据发送到myFile的程序部分会在从文件中读取数据前执行。可以打开Show Data Flow，显示事件顺序。

10 选择Data [image] Constant [image] Record，把对象放在To Data Set下方。打开对象菜单，选择Add Terminal [image] Control Input。从出现的列表框中点击Default Value，然后点击OK。重新确定Record对象尺寸，放大对象，以便在运行程序时能够查看结果。

收到的记录将成为默认值。在本例中，Record将从From Data Set对象收到一个记录数组，它将自己格式化，显示该记录数组。

11 把From Data Set输出端Rec连接到Record上的Default Value端。如果想查看这个端，打开对象菜单，选择Properties，然后选择Show Terminals，然后选择OK。在From Data Set和Record之间出现一条虚线。

备注

两个对象之间的虚线表示控制线。

12 运行程序，把它另存为dataset1.vee。程序应该如下。

备注

From Data Set对象必须包括至少一条满足指标的记录，否则VEE会发出错误信息。为避免错误，在对象中添加一个EOF (文件末尾)输出端，如果没有记录满足指标，那么会激活这个输出端。然后可以在出现EOF时在程序中添加操作。

另请参阅

使用DataSets


实验5-6: 对DataSets使用搜索和分类操作

在本练习中，您将学习怎样在DataSet中搜索信息，为搜索操作创建一个操作人员界面，编程进行分类操作。

对DataSets执行搜索操作

1 打开dataset1.vee程序。

2 双击From Data Set对象底部的表达式字段，高亮度显示当前表达式1。输入Rec.B>=0.5。对象现在将输出字段 B (在我们的代码中是随机数字)大于等于0.5的所有记录。

3 添加一个EOF端，在没有记录满足表达式字段中的指标时会启动这个EOF端。把光标放在From Data Set对象的数据输出区域上，按Ctrl-A。EOF 输出端被添加到From Data Set对象上。

备注

为添加EOF端，还可以打开对象菜单，点击Add Terminal [image] Data Output....。

4 运行程序，把它另存为dataset2.vee。

为搜索操作创建操作人员界面

本练习为操作人员从测试结果数据库中提取数据添加一个菜单。操作人员界面具有安全保护，避免意外修改程序。

程序规范如下：

• 提供一个测试菜单，允许操作人员从test0 到 test9选择其希望获得所有相关测试数据的某项测试。

• 使用标记的字段和值显示指定的测试结果。操作人员应能够与显示画面交互，获得更详细的信息。

• 包括清楚的操作说明。

使用下述步骤创建程序。

1 打开dataset2.vee程序。

添加一个控制输入，允许在From Data Set对象中以程序化方式输入表达式。

2 打开From Data Set对象菜单，选择Add Terminal... Control Input...。从出现的菜单中选择Formula，出现一个Formula 输入端。点击Get records字段，从All拨到One，一次存取一条测试记录。

您希望用户选择某个测试名称。测试名称位于所有记录的字段 A中。添加表达式：

Rec.A==<测试名称，外面加引号>

Rec.A 输出记录，其中字段 A与操作人员选择的测试名称相匹配。例如，如果操作人员选择test6，表达式应为Rec.A=="test6"。对象提取测试记录，然后可以显示测试记录。

创建一个菜单，允许操作人员点击希望的选项旁边的按钮。

3 选择Data [image] Selection Control [image] Radio Buttons，把对象放在For Count的左面。

a 打开对象菜单，选择Edit Enum Values...。高亮度显示0000: Item 1，输入test0。按Tab键，移动到0001: Item2，输入test1。在第三个项目(test2)后按Tab键时，会自动出现另一个项目。继续输入值，直到到达test9。点击OK，应显示从test0到test9的全部10个项目。

b 在对象菜单中点击Properties选项，把对象名称从Radio Buttons变成Test Menu，在Execution下选择Auto Execute，选择Open View [image] Show Terminals，点击OK。

4 在操作人员进行菜单选择时，程序现在可以执行，删除Start对象。在Start对象上按鼠标右键，选择Cut。

5 只有在进行菜单选择时程序才应执行，把 Test Menu数据输出端Enum连接到For Count 序列输入端。程序应如下。

6 Test Menu的输出进入Formula对象，然后把正确的公式发送到From Data Set对象。

选择Device [image] Formula，把对象放在Test Menu下方。(在练习过程中增加项目时，您可能想重新排列和/或重新确定对象大小。) 在新的Formula对象中，输入下述表达式：

"Rec.A==" + "\"" + A + "\""

要素 | 说明
“Rec.A==” | "Rec.A=="把Text数据类型发送到From Data Formula表达式输入。(引号表示文本字符串。)
A | VEE查看DataSet文件中所有记录的第一个字段A，选择等于选定测试名称的第一个记录。
“\”” | 引号的换码符是\”。然后换码符被放到引号中，表明文本字符串。 test name作为Enum数据类型来自Test Menu。要求使用引号，把正确的公式放到From DataSet对象中。

例如，如果选择test6，那么最终的公式将是Rec.A=="test6"。然后From Data Set对象输出其找到的第一个记录，其"A"字段等于"test6"。

7 把Test Menu Enum数据输出端连接到Formula对象的数据输入端。图标化Formula对象。

8 把Formula数据输出端连接到标为Formula的From Data Set对象的控制输入端。

9 为保证不会重用来自Formula的旧数据，删除For Count和From Data Set之间的顺序线。把For Count序列输出端连接到Formula 序列输入端。

10 把Formula序列输出端连接到From Data Set 序列输入端，保证使用Formula中的正确数据。

11 创建一个对话框，为操作人员显示说明。选择Display [image] Note Pad。把标题变成Test Results Database Instructions。删除可能存在的任何模板信息。点击Note Pad 输入区，输入：Select the test results you want from the Test Menu。

12 重新命名Record Constant对象 Test Results。

13 程序应如下。 多次运行程序，检验其正确运行。由于Test Menu对象已经启动AutoExecute，进行菜单选择，运行程序。

然后创建操作人员界面。

14 按Ctrl，点击下述对象: Test Menu, Test Results Database Instructions,和Test Results。

选择的所有对象会显示一个阴影。检验没有选择其它对象。

然后选择Edit [image] Add to Panel，作为面板视图出现操作人员界面。然后可以移动和确定对象大小。下图显示了一种布局。

备注

如果Add to Panel选项变成灰色，它表示在工作区中没有选择任何对象。

15 在Test Menu中进行选择，多次运行程序。把程序另存为database.vee。

注意通过点击Record Constant对象 (名为Test Results)中的字段名称或值，可以获得任何给定记录更详细的信息。

备注

为防止有人改变操作人员界面和程序，选择File [image] Create RunTime Version...。输入程序名称，VEE将自动添加*.vxe扩展名，把它与没有安全保护的版本隔开。

在记录字段上执行分类操作

本练习使用上一个练习中创建的dataset2.vee程序。dataset2.vee程序在From DataSet对象中设置一个条件，如Rec.B>=0.5，然后VEE提取满足要求的所有记录。得到的记录数组显示在Record Constant对象中。

在本练习中, 我们修改dataset2.vee，对得到的记录分类，确定哪些测试因超出最大余量而失败。我们根据第二个字段按降序分类。

1 打开dataset2.vee程序。

2 选择Device [image] Formula，把From Data Set数据输出端Rec连接到Formula对象数据输入端。双击Formula表达式字段，高亮度显示默认公式，然后输入sort(a, 1, “B”)。

Sort对象位于Function & Object Browser, Array Category函数中。可以在对象菜单 Help项下看到与其功能有关的详细信息。sort()函数从Formula对象中调用。

第一个参数对Formula对象 A端上的数据分类，这是一个记录数组。第二个参数指明分类方向：任何非零的数字表示升序，零表示降序。默认方向是升序。在Record数据类型中，第三个参数指明要分类的字段名称。因此，这会对记录数组中的B字段按升序分类。

3 选择Display [image] AlphaNumeric，把它连接到Formula对象的数据输出端。

4 多次运行程序。程序应类似于下图。注意程序根据字段B按升序对DataSet文件返回的所有记录分类。

另请参阅

使用DataSets


实验6-1: 把Agilent VEE数据发送到MS Excel

在这个实验中，您将为MS Excel生成虚拟测试数据。(范例采用MS Office 2003和MS Excel 11.0 Object Library，同时还应使用MS Office 2000和MS Excel 9.0 Object Library。) 在参考正确的Automation Type Library后，您将声明某些对象类型的全局变量，把这些变量放在一个称为globals的UserFunction中。全局变量简化了程序，更容易理解。

1 参考Automation Library。点击Device [image] ActiveX Automation References...，选择Microsoft Excel 11.0 Object Library，点击OK。

2 创建一个存储全局变量的UserFunction。点击Device [image] UserFunction，把它重命名为globals。(如需与UserFunction有关的更多信息，参阅Help Contents and Index Tell me about

3 点击Data [image] Variable [image] Declare Variable，把它放在globals内部左面。把Name变成sheet。把Type变成Object。其它项目出现在对话框中。在本练习中，不需要指定Object Type和Class。(本章另一个范例中指定了Type和Class。)

4 克隆这个对象三次，把其它对象重命名如下：app, range和window。调整大小并把globals UserFunction移动到Main下面，其外观应类似于下图：

5 完成各个项目与上图的比较后，把四个对象图标化。

注意，通过使用globals UserFunction中的datatype Object，可以指定Object Type和Class。指定Object Type和Class的原因有两个：进行更具体的类型检查，捕捉事件。

进行更具体的类型检查：例如，如果指定一个Object app的类型为Excel.Application，那么只有Excel.Application类型的Object才能指配给app。指配Excel.worksheet或Word.bookmark类型的Object会导致错误。

捕捉事件：还可以使用VEE UserFunction，捕捉应用中可能发生的各种事件，如在MS Excel工作表中按鼠标右键。对任何此类事件，可以指定一个VEE UserFunction处理事件，把信息传回MS Excel。

这些事件适用于ActiveX控件，您需要一种方式，使控件向回与VEE通信。如需更多信息，参阅处理Automation对象事件。

6 打开UserFunction globals对象菜单，点击Generate [image] Call，生成一个正确配置的Call globals对象。把这个对象放在Main窗口的左面，图标化globals UserFunction窗口。

7 点击Device [image] Formula，把它放在Main窗口的上方中心。把它重命名为Set up Excel Worksheet。把globals序列输出端连接到Formula序列输入端。从Set Up Excel Worksheet中删除输入端A (打开对象菜单，选择Delete Terminal [image] Input。)

8 在Set up Excel Worksheet内部，输入下面所示的直线。注意与ANSI C中一样，分号作为行分隔符使用。

命令 | 说明
set sheet = | 关键字set用来把赋值运算符(在本例中是等号)右面的内容指配或设置成表达式左面的变量。例如，set app设置应用sheet.application，其已经定义为一个Excel工作表。
CreateObject (“Excel.Sheet”). | 创建Automation Server一个新的实例 (在本例中是MS Excel)，创建一个空白表(Excel中新建工作表的术语)。每个Automation Server都有自己的术语，但采用的语法相同。例如，为在MS Word中创建一份报告，应输入CreateObject(“Word.Document”)，运行Word，创建一个空白文件。 如果使用set keyword，那么右面对象指针本身会指配给左面变量。如果没有使用set，那么右面的默认属性(通常是名称)会指配给左面。如需更多信息，参阅处理Automation对象。
worksheets(1); | 在Excel运行内部新建的工作簿之后，可以使用CreateObject("Excel.Sheet")，确定工作簿中的第一个工作表。在语句中添加worksheets(1)，整个语句变成： set sheet = CreateObject("Excel.Sheet").worksheets(1); 这会把工作表设置成报表的Sheet 1。(如果想查看范例，打开MS Excel，选择File => New，创建一个新的工作簿。您将注意到其中有多个工作表，分别标为Sheet1, Sheet2, 依此类推。您希望使用Sheet1。)
set app = sheet.application; | 请求Excel为整个应用提供一个指针，而不是只为工作表本身提供一个指针，其方式是询问工作表的属性Application，把它设置成变量app。
app.visible = true; | 把应用的可视属性设为真，以在屏幕上显示Excel(以便能够使用它)。
set window = app.windows(1); | 参考这个窗口。
window.caption = “Test System Results”; | 把第一个窗口的图示内容变成“Test System Results”。

备注

如需与Application Server库有关的更多信息，参阅与ActiveX Automation和MS Visual Basic有关的各类书籍。您可能会在网上发现与订购此类书籍有关的信息，如Office 2003或Office 97 Visual Basic编程人员指南。这些书籍也可以帮助您了解VEE，因为VEE的语法与MS Visual Basic非常类似。

9 创建一个Formula对象 (在Device [image] Formula下面)。克隆Formula对象，创建第二个Formula对象。创建一个For Range对象 (在Flow [image] Repeat [image] For Range下面)。重命名这些对象，连接对象，配置如下。(一定要删除Formula对象Fill in Title上的输入端。)

下面介绍了Formula对象和For Range对象中的指令：

公式 | 说明
sheet.cells(1,1) = “DC Volts” | 参阅Excel工作表中的第一行和第一列。文字DC Volts将放在这里。这会把单元格(1,1)的默认属性(这是取值)设置为"DC Volts"。
sheet.cells(A+1,1) = random(1,100) | 这个语句是sheet.cells(A+1,1).value=random(1,100)的速记方式。 第A+1行和第1列的工作表单元格通过在输入端A值上加1，得到行号，同时仍保留在第1列中。返回的1和100之间的值指配给工作表中指定单元格。
from 1 thru 20, step 1 (For Range对象) | 由于For Range对象输出1 - 20之间的整数，因此Fill in Cells会把随机数字放到指定单元格中。

10 创建一个Formula对象和AlphaNumeric对象，重命名、配置和连接这些对象如下。

Formula对象中的项目如下：

项目 | 说明
set range = sheet.range(“A2:A21"); | 把VEE变量范围设置成参考Excel工作表上的范围A2 到 A21。(A指工作表中的第一列。)
range.NumberFormat = “##,#00.00"; | 使用磅值符号(#)为每个单元格指配格式，在必要时可以使用较大的数字。
app.worksheetFunction.average(range); | 调用Excel方法average()，返回指定范围值的平均值，其显示在Results Average中。

11 把程序另存为results_average.vee。运行程序，MS Excel将启动一个类似于下面的工作表：

另请参阅

实验6-2: 根据MS Excel模板创建Agilent VEE

实验6-3: 使用MS Word编制Agilent VEE报告


实验6-2：在MS Excel模板中创建Agilent VEE

1 打开results_average.vee。

2 把For Range对象变成循环10次。

3 在Fill in Cells中添加输入B，把内部的语句变成：sheet.cells(A+1,1) = B[A-1]。

4 点击Device [image] Formula，把它重命名为Array of Test Data，输入嵌入式函数randomize(ramp(20), 4.5, 5.5)，创建一个由20个数组组成的、取值在4.5 - 5.5之间的随机数组。删除输入端，把数据输出端连接到Fill in Cells的输入B。

5 把屏幕底部Formula框中的范围从A21变成A11。语句现在应该变成：
set range = sheet.range(“A2:A11");

6 把程序另存为report_template.vee，运行程序。把它与Excel工作表进行对比，整个程序应该如下图所示。

可以作为模板重用这一程序，显示MS Excel中的测试结果。您只需把测试数据放到数组中，修改模板其余部分，使用适当的格式填写相应的单元格即可。

如果想查找MS Excel library中的其它方法和属性，查看Function & Object Browser，在Type下选择ActiveX Objects，在Library下选择Excel。可以选择一个Class或Member，按Help，获得Automation Server作者(在本例中是微软)提供的Help信息。如需与这些库有关的更完整的信息，请参阅微软文档。

自己操作

生成一个波形，去掉Time Span，得到一个数组。使用工作表为MS Excel创建一个VEE对象，把它设置成Object变量。使应用看得见。然后在一个步骤内、而不是一次一个单元格，把256点数组放到工作表范围"A1:A256"中。

使用Unbuild Waveform对象。使用[a]构建数组语法，从1D数组中创建一个2D数组。然后调用函数transpose()，使其变成一个256 x 1数组，而不是1 x 256数组，以便Excel在一个步骤中接受这个数组，如下图所示。

使用MS Excel扩展功能

下图说明了更精细的在MS Excel中显示测试结果的程序范例。您会看到，了解MS Excel库中更多的调用功能可以怎样扩展模板，在MS Excel中显示VEE数据。

各个项目如下表所示：

项目 | 说明
MS Excel Window Size | 注意右上角工作区中的下拉列表。可以选择其中一个选项：xlMaximized, xlMinimized, xlNormal，在出现时选择Excel内部的工作表窗口大小。每个窗口的大小与一个数字相关，VEE会计算这个数字，把它放在wndState变量中。然后这个值指配给Excel库中的windowState属性。
Memory Tracking | (点击Formula对象和Meter对象上Properties框中的Show Terminals)。注意Excel库中的memoryTotal和memoryUsed属性指配给VEE变量memTotal和memUsed。然后使用这些值，计算配置VEE仪表的范围，然后显示MS Excel使用的内存。
Number Format | 注意可以非常简便地在数字格式中增加美元符号。
sheet.SaveAs (filename) | 从Excel库中调用SaveAs()方法，自动保存工作表。注意，File Name Selection框(从Data Þ Dialog Box菜单中)用来显示从VEE中弹出的Save As对话框。然后选中的文件名作为Excel SaveAs()方法调用中的参数使用。
Press to Kill Excel | 一直使用Confirm (OK)按钮表明什么时候想关闭Excel。
Close Excel | 调用quit()方法，告诉MS Excel退出。

另请参阅

实验6-1: 把Agilent VEE数据发送到MS Excel

实验6-3: 使用MS Word编制Agilent VEE报告


实验6-3：使用MS Word编制Agilent VEE报告

先采取下述步骤，把五个变量声明为类型Object。

1 点击Device [image] ActiveX Automation References...，选择Microsoft Word 9.0 Object Library。

2 点击Data [image] Variable [image] Declare Variable。

a 把Type字段变成Object，克隆它四次。

b 把五个对象变量命名为App, Doc, Wnd, Sel和Bmp。

c 在所有这些变量上，选中Specify Object Type。在Library内部声明特定Class的优势如下：VEE可以进行类型检查，确定程序错误，可以捕获来自Automation Server的事件。

d 然后点击Edit...按钮，在每种情况下都选择Word for Library。选择下面的Class：

App将使用Application

Sel将使用Selection

Wnd将使用Window

Doc将使用Document

Bmp将使用Shape

e 在类允许时选择Enable Events。图标化这五个图标。下面是这些变量的open view。

3 创建一个称为Graph的UserFunction，它使用Function Generator虚拟信号源，向Waveform (Time)显示屏发送一个正弦波。只创建显示屏的面板视图，然后在Main窗口中生成一个Call Graph对象。(记住，UserFunction对象菜单包括一个简便的调用生成方式。)

现在使用Wave显示屏创建一个Panel位图文件，这个位图文件用于MS Word编制的报告中。

4 点击Device [image] Formula，为位图创建一个文件名，把它重命名为Image Filename。在Formula输入字段中输入installDir() + "\\panel.bmp"。(使用换码序列\\指定ASCII字符\) 删除输入端A。

例如，如果安装在c:\Program Files\Agilent\下，那么您可以在Result输出端生成下面的文本字符串：
C:\Program Files\Agilent\VEE Pro 8.0\panel.bmp.

5 创建另一个Formula对象，输入savePanelImage("Graph", FileName, 256)。把输入端重命名为FileName。

6 这会把panel.bmp文件中的UserFunction Graph屏幕转储图保存在安装目录中，颜色为每个像素256色。

7 创建另一个Formula对象，输入语句：
Set App = CreateObject("Word.Application")
这会启动MS Word，指配对象变量app，参考应用的这一实例。删除输入端A。连接Call Graph, ImageFileName和savePanelImage，如下图所示：

8 点击Device [image] Formula，输入下图所示的语句。下面介绍了这些语句。把输入端A重命名为FileName。连接数据输入端和序列输入端，如下图所示。

在上图中，注意可以与对象的句点符号一起嵌套属性和方法调用。参阅ActiveX文档，找到目标应用中的适当属性。可以使用这里介绍的属性和方法，开始生成测试和测量报告。Formula对象中的项目包括：

项目

说明

App.Visible = 1;

在屏幕上可以看到MS Word。

Set Doc = App.Documents.
Add();

在MS Word中添加一个Document，把这个文件指配给Object变量Doc。

注：在Excel范例中，使用CreateObject(Excel.Sheet)启动一个空白工作表。在本例中，启动Word，方法Add()在Word中添加一个空白的Document。可以以任何一种方式创建任何一种应用。

Doc.Activate();

激活上面的Document。

Set Wnd = App.Active Window;

获得活动窗口中的文件，把它指配给Object变量Wnd。

Set Sel = App.Selection;

把焦点(选择)放到文件中，把它指配给Object变量Sel。这允许插入文本。

Wnd.View.Type = 3;

指定显示文件的窗口类型。3表示正常窗口大小。1将图标化窗口。

注：这里使用3，而不是常数wdPageView，因为Office 2003 Type Library中没有这个常数。

Sel.TypeText(*** Test Results ***),
Sel.TypeParagraph();

把标题*** Test Results ***放在文件中，发出回车/换行。

Set Bmp = Doc.Shapes.
AddPicture(FileName);

把panel.bmp位图放在文件中，把Shapes Class中的这个调用指配给Object变量Bmp。

Sel.TypeParagraph();

Sel.InsertDateTime
(M/d/yy h:mm:ss
am/pm, 0);

在文件中放入时戳。

9 添加另外三个Formula对象和一个If/Then/Else对象，配置和连接这些对象，如下图所示：

新增对象的项目如下：

对象 | 说明
App.ActivePrinter | 请求字符串中的默认打印机，包括其端口。
strLen(str) != 0 | 确认ActivePrinter已经确定配置好的打印机位置(如果输入上的字符串不为空，那么...)，然后在Then端输出一个1 (=TRUE)，它会ping包含PrintOut调用的Formula对象。
DocPrintOut(0) | 打印文件。
App.Quit(0) | 关闭MS Word程序。

10 运行程序。其外观应类似于下图 (如果屏幕转储中的颜色看起来有些奇怪，那么应图标化任何打开的程序，这样PC可以使用整个调色板。)

如需与使用ActiveX Automation控制MS Excel和MS Word有关的更多信息，请参阅微软文档。记住，还可以控制支持ActiveX Automation(有时称为Automation)或OLE Automation的其它Server应用。

如需与使用ActiveX控件有关的更多信息，请参阅“使用操作人员界面"。如需与从MS Visual Basic程序中使用ActiveX控制VEE的更多信息，请参阅可以调用的VEE Active X Automation Server。

另请参阅

实验6-1: 把Agilent VEE数据发送到MS Excel

实验6-2: 根据MS Excel模板创建Agilent VEE


实验8-1：处理工作簿

1 打开一个新的VEE项目。

2 选择Excel [image] Initialize Excel Library。导入并准备使用VEE Excel Library函数。

3 选择Excel [image] New Workbook。建立并打开一个新的Microsoft Excel工作簿。在建立新的工作簿时，它会自动变成活动工作簿。什么是“活动工作簿”呢？即作为所有操作焦点的工作簿。

4 选择Excel [image] Save Workbook As。

5 添加一个文本常量，把它写入SaveWorkbookAs对象的数据输入端。在文本常数中输入C:\MyWorkbook.xls。在处理新工作簿时，强烈建议采用这一步。这个保存操作也适用于活动工作簿。

备注

活动工作簿或工作表是指最后一次打开的工作簿或工作表，或使用Select Workbook或Select Worksheet对象专门选中的工作簿或工作表。

6 选择Excel [image] Close All Workbooks。不管是否已经保存，都关闭所有工作簿。

7 选择Excel [image] Quit Excel。关闭Microsoft Excel会话，退出VEE Excel Library。

从序列输出到序列输入用线把这些对象连接起来，程序外观应类似于下图：

备注

文本常数中的文件名包括文件扩展名。VEE Excel Library会逐字处理文件名。必须提供完整的文件名，在需要时还可以提供完全合格的路径。

在继续本练习前，关闭VEE程序，创建一个新程序。

8 选择Excel [image] Initialize Excel Library。导入并准备使用VEE Excel Library功能。

9 选择Excel [image] Open Workbook。下图说明了Open Workbook对象。最后打开的工作簿自动变成活动工作簿。

10 选择Excel [image] Select Workbook。在选中一个工作簿时，它变成活动工作簿。将在活动工作簿上进行后续操作。注意Select Workbook对象要求输入工作簿的名称，如下图所示。必须从当前打开的工作簿中选择一个工作簿，否则VEE Excel Library会生成错误。

备注

如果选中一个工作簿，以后又打开或创建一个新的工作簿，活动工作簿会变成最新打开的或创建的工作簿。

11 选择Excel [image] Save Workbook。保存只对活动工作簿有效。

12 选择Excel [image] Quit Excel。关闭Microsoft Excel会话，退出VEE Excel Library。已经跳过Close All Workbooks一步。尽管这种退出方式不太美观，但仍是可以接受的。

13 把本练习另存为SelectWorkbook.vee。


实验8-2：使用工作簿枚举

1 本练习假设您在C驱动器的根目录下保存了一个电子表格MyWorkbook.xls。

2 从实验8-1中使用的SelectWorkbook.vee程序开始，剪切Select Workbook和Call vxLib.SaveWorkbook之间的线。在这两个对象之间创建部分空间。

3 在Select Workbook对象后面添加一个New Workbook对象，用线把Select Workbook的序列输入与序列输出连接起来。

4 选择Excel [image] Enumerations [image] Enumerate Workbooks。把这些对象放在New Workbook对象和Save Workbook对象之间。

5 用线连接其序列端。

6 运行程序，应看到下述结果。


实验8-3：格式化单元格

在下面的练习中，您将格式化Excel工作表中一系列单元格的边框和背景颜色。

1 打开一个新的VEE项目。

2 通过在单元格A1到A4中添加值，编制MyWorkbook.xls文件。保存并关闭工作簿。退出Excel。

3 在VEE程序中添加一个Initialize Excel Library。

4 在VEE程序中添加一个Open Workbook对象。

5 在程序中添加一个Excel [image] Formatting [image] Format Cells对象，用线把Open Workbook对象的序列输入连接到序列输出上。

6 打开Format Cells对象，把BackColor参数设置为Gray25。

7 在程序中添加一个文本常数，用线把其输出端连接到Format Cells对象的输入端。在文本常数中输入范围A1:A4。

8 在程序中添加一个Excel [image] Formatting [image] Auto Fit Columns对象，用线把其序列输入端连接到Format Cells对象的序列输出端。

9 在程序中添加一个文本常数对象，用线把其输出端连接到AutoFitColumns对象的输入端。输入单元格地址A1。

10 添加一个SaveWorkbook对象，用线连接其序列端，如上所述。

11 添加一个Quit Excel对象，用线连接其序列端，如上所述。

12 运行程序。

13 打开MyWorkbook.xls，查看工作表，检查变化结果。

14 打开Format Cells对象，分析提供的其它格式化选项。


实验8-4：使用Send Record

1 在Microsoft Excel中使用MyWorkbook.xls创建指明范围。高亮度显示想要使用的单元格范围。选择Insert [image] Name [image] Define，在Excel中定义指明范围。范围在对话框底部的文本框中指明。在文本框末尾是一个图标，从名称定义模式切换到单元和选择模式。

2 定义三个范围A, B和Test。确认指明范围没有重叠。记录有一个A字段和一个B字段。这时已经为记录中的每个字段定义了一个指明范围。

3 Send Data [image] Record to Named Range UserFunction有一个输入端和两个输出端。用线把默认的记录常数连接到输入端。用线把一个字母数字连接到上方的输出端。

4 运行程序。

5 复核一下工作表，可以看到A指明范围中的A字段值及B指明范围中的B字段值。

6 注意，字母数字对象拥有输出“Test”。这是因为VEE记录没有使用指明范围Test。这一功能可以简便地发现字段结构是否完整或Excel中是否存在命名错误。

7 把这一程序另存为SendRecord.vee。


实验8-5：从Panel Image中创建Excel图片

1 使用SendRecord.vee程序，去掉记录常数、字母数字和CallSendRecord对象。

2 从Excel [image] Send Panel Image菜单中插入ImageSettings对象。用线把它连接到File Name Selection对象的出局序列端。调节设置或使用默认值。

3 添加一个名为UserFunction1的UserFunction，具体如下。注意Function Generator中的frequency和num points参数略有修改。

4 把Panel Image插到Picture对象中。添加两个Text常数和两个Int16常数，用线连接这些常数，具体如下。用线把Panel Image连接到Picture上，具体如下。相对大小参数允许调整图片大小，其中1代表100%，.8代表80%。

5 把XY Trace对象放在面板上。

6 运行程序，检查Excel工作表。


实验8-6：使用系统命令

1 选择I/O [image] Execute Program。点击Prog with params字段，得到一个光标，然后输入：

command.com /c dir >> c:\bob

备注

对Windows 2000或Windows XP，用cmd替换command.com。如果驱动器盘符不是c:，那么在下面的指令中用相应的盘符代替C盘。

(可能需要包括command.com可执行程序的完整路径。) 该命令运行DOS命令解释程序，该程序运行系统命令，显示当前目录，把输出(>)重定向到bob文件，而不是电脑屏幕。

对Wait for prog exit选项，选择Yes。对Run Style，选择Normal，对Working目录输入c:\。

2 选择I/O [image] From [image] File，把它放在Execute Program下面。把Execute Program的序列输出端连接到From File对象的序列输入端。

点击标注为myFile的From File:输入字段，得到一个列表框，输入c:\bob，然后点击OK。(该程序为您创建文件bob。)

3 双击事务栏，出现I/O Transaction对话框。

a 把REAL64 FORMAT变成STRING FORMAT。

b 把SCALAR变成ARRAY 1D。

c 点击SIZE: (10)字段，切换到TO END: (*)，然后点击OK。事务栏现在应该显示：READ TEXT x STR ARRAY:*。这一事务将读取bob文件的内容。

4 选择Display [image] Logging AlphaNumeric，把其数据输入端连接到From File数据输出。

5 运行程序，其外观应类似于下图。


实验9-1: UserFunction操作

本练习介绍了怎样创建一个名为ArrayStats的UserFunction，它将接受数组，计算最大值、最小值、中间值和标准偏差，并把结果放在输出端。

创建UserFunction

1 选择Device [image] Formula，删除其默认的输入端，把默认的表达式变成ramp(1024,1,1024)。

这将创建一个1024元素的数组，取值为1 – 1024。

2 选择Device [image] UserFunction，把它重命名为ArrayStats。

a 为数组添加一个数据输入端。

b 为结果添加四个数据输出端。

c 重命名输出端：Max, Min, Mean和Sdev。在Function & Object Browser对话框的Probability & Statistics中选择max, min, mean和sdev。

d 把它们放在ArrayStats中，把其数据输入连接到A，把其数据输出连接到相应的输出端。缩小ArrayStats窗口，以能够同时看到Main窗口和ArrayStats窗口。

3 图标化ArrayStats，它变成工作空间底部的一个图标。

4 点击Device [image] Call，打开对象菜单，点击Select Function，然后点击OK。注意VEE自动重命名对象，添加正确的端。

5 把Formula的输出连接到Call ArrayStats 输入。选择Display [image] AlphaNumeric，复制三次，把显示画面连接到Call ArrayStats 输出端。重命名显示画面。

6 运行程序。程序应如下。把程序另存为 array_stats.vee。

如果想在程序中其它地方使用ArrayStats，应点击Device [image] Call，从对象菜单中打开Select Function对话框，选择ArrayStats。VEE会自动把对象重命名为Call ArrayStats，并添加必要的输入端和输出端。

从UserFunction对象菜单中，选择Generate [image] Call，调用Call ArrayStats对象。(在进行这一操作时，要保证UserFunction不会扩展到整个工作空间。)

编辑UserFunction

在本练习中，编辑ArrayStats，提供一条有四个字段的记录，进行数组统计。

1 删除四个AlphaNumeric显示画面。

2 选择Edit [image] Edit UserFunction...，并从Edit UserFunction列表框中选择ArrayStats。将显示程序中的所有UserFunction。

3 打开ArrayStats 对象菜单，点击尺寸，放大编辑窗口。如果需要重新确定对象大小，点击和拖动对象的任何一角。

4 删除连到输出端的四条线。(按Ctrl-Shift，点击想删除的线。)

5 选择Data [image] Build Data [image] Record，把它放在ArrayStats窗口的右侧。

a 添加两个数据输入端。

b 在统计函数后标记四个端：max, min, mean和sdev。

c 把四个Formula对象输出连接到Build Record上的输入。

d 双击Max，输入新名称，点击OK，重命名Max 输出端 X。

e 删除其它ArrayStats 数据输出端。

f 把Build Record 输出连接到User Function编辑窗口上的X 输出端。程序应如下。然后点击窗口上的图标化按钮。

6 打开Call ArrayStats 对象菜单，点击Configure Pinout，将调节端数，以与最新编辑相匹配。

备注

为更新端数，在改变UserFunction中的输入或输出数量时，必须打开对象，点击Configure Pinout。也可以手动更新Call对象的输入端和输出端，但使用Configure Pinout要简单得多。可以使用Find，查找调用UserFunction的所有Call对象和表达式。如需更多信息，请参阅“ 在大型程序中查找函数" 。

现在使用Record Constant对象显示一条记录。使用Default Value控制输入，从ArrayStats中接受记录。VEE自动配置Record Constant，保留进入的记录。

7 选择Data [image] Constant [image] Record，把它放在Call Function对象的右面。

a 打开Record 对象菜单，点击Add Terminal [image] Control Input...。从出现的列表框中选择Default Value。如果愿意，可以打开Properties菜单，进入Show Terminals。

b 现在把Call Function数据输出连接到Record对象的控制输入端。注意，控制线用虚线表示，以与数据线区分开来。

8 运行程序。

从表达式中调用UserFunction

在本练习中，您将学习怎样从Formula对象的表达式中调用ArrayStats。

1 选择Device [image] Formula，用ArrayStats(A)代替默认的公式。在Call ArrayStats 对象菜单中，点击Replace。

VEE屏幕底部的Status Bar提示您选择更换对象。点击调用ArrayStats函数的Formula对象。VEE自动用新的Formula对象代替Call ArrayStats对象，并保留数据线的连线。

Formula对象获得A端上的输入，把它发送到UserFunction ArrayStats。ArrayStats把统计记录发送到端 X。来自UserFunction (X)的第一个输出值被返回到Formula对象，传送到其Result 输出。

2 运行程序。

注意Formula对象中的ArrayStats功能与Call ArrayStats对象中完全相同。本例使用Formula对象，但可以从接受表达式的任何输入字段调用ArrayStats，如To File对象。

备注

在从表达式中调用UserFunction时，UserFunction只提供一个输出(最上面的数据输出端)。如果需要所有输出，或者不能放到Record中，那么使用Call Function对象。

备注

在从表达式中调用UserFunction时，输入端作为函数参数使用，传送到函数中。如果没有任何数据传送到函数，那么必须在函数名称后包括空白的圆括号。否则，VEE会假设您指的是全局变量或输入端。例如，如果称为MyFunction的UserFunction没有任何输入参数，那么必须在表达式中写明MyFunction()。Call对象不要求圆括号，因为VEE知道您指的是一个函数。

生成UserFunction调用

为从UserFunction生成并把调用对象放在Main程序中，使用UserFunction 对象菜单Generate菜单。Generate菜单包含调用UserFunction的大多数常用对象。在选择调用对象时，它可以放在调用窗口中，如Main程序，并相应地配置正确名称和端。

在本练习中，您将学习怎样在Main程序中从ArrayStats UserFunction 生成ArrayStats对象。

1 在上面使用的同一个实例中，双击Formula对象 ArrayStats，删除对象。(还可以选择对象菜单，选择Cut。)

2 在UserFunction ArrayStats中，选择对象菜单，选择Generate [image] Formula Call。下图显示了UserFunction 对象菜单中的Generate菜单。

3 把对象放在Main中。注意VEE自动命名新的对象ArrayStats(A)，包括调用UserFunction ArrayStats的表达式ArrayStats(A)。

4 把Formula对象的输出连接到ArrayStats(A)，把ArrayStats(A)的输出连接到Record。

5 运行程序。程序应如下。

打开UserFunction对象菜单，选择Generate菜单，查看其它可以放在程序中调用UserFunction 的对象，包括Call, Formula Call (本例中使用), If/Then/Else Call, ShowPanel和HidePanel对象。

UserFunctions和Program Explorer

UserFunctions和UserObjects提高了VEE程序的模块化特点，使其理解起来非常容易。Program Explorer为浏览复杂的程序提供了宝贵的工具。例如，Program Explorer中显示了上述程序的层级。为显示Program Explorer，点击View [image] Program Explorer，或点击工具条上的Program Explorer图标。

下图显示了正在使用的Program Explorer。

另请参阅

实验9-2: 创建和合并UserFunction库，实验9-3: 导入和删除库，实验9-4: 合并柱状图显示程序，在大型程序中查找函数，合并Agilent VEE程序


实验9-2: 创建和合并UserFunction库

在本练习中，您将创建一个报告生成程序，其中包括一个VEE UserFunction库。然后将创建一个新程序，合并UserFunction库。

创建UserFunction库

1 创建顶级程序(没有编写UserFunction细节)。

a 创建四个UserFunctions：有一个输出端的BuildRecAry, ReportHeader, 有一个输入端的ReportBody, ReportDisplay。图标化所有UserFunction。

b 在Main中，创建四个Device [image] Call对象，对象配置和连接如下。把程序保存为Report.vee。

备注

Call对象在指称UserFunction时不要求使用圆括号。如果从Formula对象调用函数，那么不管函数是否使用参数，都需要包括圆括号。

四个UserFunction是一个库。点击Edit [image] Edit UserFunction...，可以查看这些UserFunction。点击Cancel，关闭列表框。

2 对四个UserFunction编程，如下面几个图所示。

下图显示了BuildRecAry UserFunction。它包括一个Formula对象，如果A<=5，那么包括三元表达式测试。如果表达式的解为TRUE，那么这个对象输出"PASS"，否则这个对象输出"FAIL"。(注意要求圆括号。)

下图显示了ReportHeader UserFunction：

下图显示了ReportBody UserFunction，注意记录数组A[B]。由于Value of B从0变成1再变成2，因此可以使用<record>.<field>符号访问该Record中的特定字段，包括Value, Limit和PassFail。注意For Count输出从零开始，还要注意第一个事务中EOL关闭。

引号中的竖线"|"表示垂直栏的常数字符串字符。FW:5表示字符串字符宽度为5。RJ表示右对齐。

参阅细节视图中的ReportDisplay UserFunction。注意，它读取字符串数组直到文件末尾，这用STR ARRAY格式后面的星号(*)指定。

下面是在Properties对话框中选择Show Panel on Execute时ReportDisplay UserFunction的面板视图。在Properties对话框中，Pop-up Panel Title已经变成ReportDisplay。为创建面板，选择Confirm (OK)和Logging AlphaNumeric对象，点击Edit [image] Add to Panel。注意Logging AlphaNumeric画面中已经反选Show Title Bar。还要注意Confirm (OK)按钮已经重命名为DONE。Confirm (OK)按钮可以在屏幕上保持显示画面，直到查看完毕。

3 运行程序，应弹出ReportDisplay面板，显示下图所示的值。点击DONE完成执行，然后把程序保存为 Report.vee。

创建另一个程序，把库合并到程序中

在本练习中，您将创建一个新程序，把库合并到这个程序中。本练习为生成报告建立一个函数库。新程序包含一个Note Pad对象，解释库中的每个函数，其名称为RepGen。

通过创建新的报告生成User Function，并把它与程序合并在一起，更新Note Pad对象追踪这些变化，您可以重用RepGen。然后可以使用Merge Library...命令，利用RepGen中的所有函数。

1 选择File [image] New。

2 选择File [image] Merge Library...。从Merge Library列表框中选择Report.vee。(如果其位于不同的目录中，那么输入整个文件路径。)

选择Edit [image] Edit UserFunction (或查看Program Explorer)，确认库从Report.vee传送到新程序。在使用Merge Library...命令时，可以象局部函数一样编辑合并后的函数。

3 选择Display [image] Note Pad，输入UserFunction描述，类似于下图所示。然后把程序保存为RepGen.vee。

另请参阅

实验9-1: UserFunction操作，实验9-3: 导入和删除库，实验9-4: 合并柱状图显示程序，在大型程序中查找函数，合并Agilent VEE程序


实验9-3: 导入和删除库

一旦已经创建了UserFunctions库，您可能不想把它们合并到每个程序中。您可能想在运行时调入库，使用部分函数，然后删除库，以节约内存。Import Library和Delete Library对象正是为这种情况设计的。

在本练习中，您将从RepGen程序中导入函数。然后您将调用BuildRecAry函数，模拟部分测试数据，显示测试数据，最终删除库，释放内存和交换空间。

1 选择File [image] New。

2 选择Device [image] Import Library，把它放在Main中。设置Import Library对象中的字段如下：

Import Library 字段 | 说明
Library Type | Library Type字段中的菜单允许选择UserFunction, Compiled Function或Remote Function。在本例中，您希望使用UserFunction库，因此保留默认值。
Library Name | Library Name的默认值显示为myLib。这个名称作为VEE程序的“句柄”，区分导入的不同库。Delete Library对象使用这个名称识别要删除的库。可以使用默认名称。
File Name | File Name字段在默认状态下为用户程序目录显示一个对话框。指明保存函数库的文件。 点击默认名称myFile，得到列表框。选择RepGen.vee (从“实验9-2: 创建和合并UserFunctions库")。这个文件将位于安装过程中为程序指定的目录下。

3 打开对象菜单，选择Load Lib，立即导入库，而不是等到运行时导入库。这条命令特别适合开发阶段。(在下一步中，您将注意到在Call对象中选择Select Function时，会先用库句柄指明函数，如myLib.BuildRecAry。)

为显示导入的函数库，使用Program Explorer。

备注

由于您已经导入了库，您只能查看UserFunction，为其设置断点。您不能编辑UserFunction。为在程序中添加可以编辑的UserFunction，使用Merge Library...命令。

4 选择Device [image] Call，把它放在Import Library对象下方。把来自Import Library的输出序列端连接到Call对象的输入序列端。

5 打开Call Function对象菜单，点击Select Function，显示使用Load Lib命令导入的函数列表。选择 myLib.BuildRecAry 如下。

VEE自动在Function Name字段中插入函数，添加要求的输出端。还可以在Function Name字段中输入myLib.BuildRecAry，实现相同的结果。在需要列出库中函数名称时，可以使用Select Function。

6 选择AlphaNumeric显示画面，放大，把它连接到Call数据输出。

7 选择Device [image] Delete Library，把它放在Call对象下面。连接序列端，因此在已经调用BuildRecAry函数后删除库。可以保留默认的Library Name，因为这一名称与Import Library对象使用的名称相同。

8 运行程序，程序应如下。把程序另存为 libraries.vee。

注意合并的函数和导入的函数名称的下述说明：

• 如果合并的函数与局部函数名称相同，VEE会显示错误信息。

• 如果导入的函数与局部函数名称相同，那么允许有这种情况，但只有在使用函数名称时才会调用局部函数。可以与上图中的Call对象一样，使用MyLib_func()语法明确调用导入的函数。

• 如果两个导入的函数拥有相同的函数名称，那么结果不确定。注意Call对象使用Library名称myLib.BuildRecAry，因此没有产生混淆。即使有另一个局部函数或其它导入的函数使用相同的名称，这仍能指明BuildRecAry的名称和位置。

另请参阅

实验9-1: UserFunction操作，实验9-2: 创建和合并UserFunction库，实验9-4: 合并柱状图显示程序，在大型程序中查找函数，合并Agilent VEE程序


实验9-4: 合并柱状图显示程序

在本练习中，您将把一个现有程序与一个新程序合并。尽管本例使用的是VEE Lib目录中的程序，但事实上您可以使用任何程序。您将使用ramp()函数，用1-5五个值创建一个数组。您将把 BarChart程序与创建的程序合并，而不是使用其中一个内部VEE显示画面显示数组。

1 选择Formula，把它放在左面的工作区中。

2 删除数据输入端。

3 把默认公式变成ramp(5,1,5)。

第一个参数是斜坡数组中希望的要素数量。第二个参数是起始数字，第三个参数是最后数字。如需与这一函数有关的更多信息，请选择Formula对象菜单中的Help，因为其内部拥有斜坡调用。(也可以试着使用Help [image] Contents & Index，然后在Index文件夹中使用Search功能)

4 点击File [image] Merge...，出现Merge File列表框。选择 BarChart.vee，把它放在Formula对象的右面。连接两个对象。

5 运行程序。程序应如下。

注意Bar Chart Display使用一维数组，作为竖条显示值。它使用必要的条数，显示数组中的值。如果想查看怎样创建程序，打开显示画面的细节视图。程序详情可以查看库目录中的范例。

备注

File [image] Merge命令用于UserObjects和对象合并。File [image] Merge Library命令用来合并UserFunctions。

另请参阅

实验9-1: UserFunction操作，实验9-2: 创建和合并UserFunction库，实验9-3: 导入和删除库，在大型程序中查找函数，合并Agilent VEE程序


实验10-1: 配置测试

备注

本例介绍了怎样实现预计某个测试结果范围的random()函数，您可以使用相同的原理，配置其它测试。

1 选择Device [image] Sequencer，把它放在左上方的工作区中。

2 选择Display [image] AlphaNumeric显示画面，把它放在Sequencer下方，提高宽度，把Sequencer Log输出端连接到Alphanumeric数据输入。

3 双击Sequencer处理条，出现Sequence Transaction对话框。各字段设置如下。

字段名称

说明

TEST:

默认名称是test1，可以使用默认名称。这只是Sequencer中的测试标签，而不是测试函数本身。

SPEC NOMINAL:

表示预计的测试值。默认值是.5，把它变成.25，然后把上方的RANGE字段 (最右面)从1变成.5。

FUNCTION:

默认项目testFunc(a)保留着执行测试的实际函数。在本例中，用random()函数代替默认字段。Random()将返回一个0和1之间的Real64值，模拟测试结果。将把这一结果与测试规范进行对比。

random(low,high) 对象位于Function & Object Browser对话框的Probability & Statistics类中。记住，可以从任何表达式字段中调用这个数学函数，而不必实际使用Formula对象。如果没有提供参数low和high，如本例中所示，函数将使用默认参数0 和 1。

备注

在编辑字段时，记住点击新字段来修改字段；或使用Tab键向前移到不同的字段。使用Shift-Tab键，向回移动光标。只有在完成对话框编辑时，才按Enter键。

可以保留其它默认值。这一配置会使大约一半的运行结果为 PASS。对话框应如下。

点击OK，关闭对话框。在第一个处理条上，您将看到处理
test1 0 <= (.25) <= .5
这意味着如果返回的值位于0 和.5范围中(包括端点)，那么test1将通过测试。预计结果约为.25。

4 运行程序。显示画面应显示测试名称、测试结果和通过-未通过指示(1为通过, 0为未通过)。

继续处理前，研究下表，了解Sequence Transaction对话框中的各种选项。双击处理条，再次打开对话框。打开各个菜单，阅读不同的选项。

Sequence Transaction字段 | 说明
TEST | 用来在Sequencer中参考测试的唯一名称。默认名称从test1开始，每个测试加1。选择TEST:表示将把测试结果与规范进行对比，将基于配置在下一个测试中发生分支。 TEST:按钮拨到EXEC:。如果把TEST:拨到EXEC:，那么测试将执行，而不会对比测试结果和规范。例如，可以在UserFunction设置全局变量时选择EXEC:。选择EXEC:还将使测试记录失效。
ENABLED | 确定什么时候执行测试。这个菜单显示四个菜单选项： • ENABLED在所有条件下执行测试。 • ENABLED IF: 如果列出的表达式值为TRUE，则执行测试。例如，如果输入端A的值为1 (A == 1)，那么可以启动测试。可以使用ENABLED IF:进行审计测试控制。例如，您可能想每运行10次执行一次某项测试。 • DISABLED与ENABLED相反。 • DISABLED IF:与ENABLED IF:相反。
SPEC NOMINAL | 测试预计值。
RANGE | 指定测试值范围。这个菜单显示四个菜单选项： • RANGE指明PASS条件的测试值范围。还可以从常用比较关系中选择：>, >=, <, <=, ==, !=。 • LIMIT只使用一个值比较测试数据。 • TOLERANCE通过在SPEC NOMINAL值中加减指定容限，指明通过测试的取值范围。 • %TOLERANCE通过在额定规范中加减SPEC NOMINAL的百分比容限，指明通过测试的取值范围。
FUNCTION | 指定要运行的测试。可以调用UserFunctions, Compiled Functions, Remote Functions，也可以编写一个求解的表达式。将针对规范测试调用的函数(或求解的表达式)结果。 如果UserFunction返回一个以上的值，VEE会假设最上面的输出端保留测试结果。 还可以组合和嵌套多个函数，如(random(0,myfunc()+3,100)*2)。
LOGGING ENABLED | 登录测试数据。为指定登录选项，打开Sequencer对象菜单，选择Properties，点击Logging文件夹，选择列表。在默认状态下，将勾选Name, Result和Pass。还有一个字段，可以选择Log to Output Pin Only和Log Each Transaction To:。如果启用登录，那么每项测试会登录一条记录。 这个按钮拨到LOGGING DISABLED。
IF PASS | 确定分支指令。如果通过测试，VEE会转到这一行获得分支指令。IF PASS告诉VEE根据下拉菜单中的选项发生分支。 这个按钮还拨到IF PASS CALL:。 IF PASS CALL: 告诉VEE调用指明的函数，然后转到分支菜单选项。 (另请参阅本表中的下一项THEN CONTINUE。)
THEN CONTINUE | 确定测试分支。下拉菜单THEN CONTINUE (适用于IF PASS和IF FAIL)包含6个分支选项： • THEN CONTINUE 执行Sequencer中配置的下一个测试。 • THEN RETURN: 告诉VEE停止执行测试，把指定表达式放在Sequencer的Return输出端。 • THEN GOTO: 跳到字段中指明的测试。 • THEN REPEAT重复当前测试，直到MAX TIMES:字段中指明的次数。如果在重复最大次数后仍存在PASS/FAIL条件，那么VEE会继续下一项测试。 • THEN ERROR: 生成给定错误号的错误条件，停止执行。可以使用Sequencer的Error输出端捕获错误。任何其它输出端都不会发送数据。 • THEN EVALUATE: 调用指定的UserFunction，它必须返回一个字符串，指明一个分支菜单选项。来自UserFunction的有效字符串结果是："Continue", "Return <expr>", "Goto <name>", "Repeat <expr>", "Error <expr>"，其中<expr>是任何有效的VEE表达式，<name>是序列中的测试名称。这个选项允许询问用户下一步操作。
IF FAIL | 分支指令。如果未通过测试，VEE会转到这一行获得分支指令。IF FAIL拨到IF FAIL CALL:。其选项与IF PASS相同。
DESCRIPTION | 测试的文本注释。它们将显示在Sequencer处理条上，通过使用Properties对话框中的Logging文件夹，可以与测试记录存储在一起。

另请参阅

添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


添加或插入或删除一个测试

在本节中，您将在Sequercer对象中添加另一项测试事务。可以使用同一个random()函数，模拟测试结果，但这次您将对比的是结果与极限，而不是取值范围。

1 双击下面第一个Sequencer事务栏，出现Sequence Transaction对话框。填写各个字段，具体如下：

项目 | 说明
test2 | 使用默认值。
SPEC NOMINAL | 把设置从.5变成.25。
RANGE | 在下拉菜单中，选择LIMIT:。运算符选择<。把极限从1变成.5。
FUNCTION | 把字段从testFunc(a)变成random()。

保留其它默认选项，点击OK，返回Sequencer。

备注

通过从对象菜单中选择Add Trans...，还可以在高亮度显示的事务后面添加一项事务。

Sequencer测试方案现在应该有第二个事务：test2 (.25) < .5。现在，在这两项测试之间插入一项事务。

2 确认高亮度显示第二个事务栏，然后打开对象菜单，选择Insert Trans....，添写各个字段，具体如下：

字段 | 说明
TEST | 把名称字段变成Insert。
FUNCTION | 变成random()。

点击OK。现在将在第二个事务栏上看到Insert 0 <= (.5) <= 1。运行程序，看到来自三项测试的三条记录。(您可能必须放大显示屏，才能看到所有项目。)

3 现在点击Insert事务栏，把鼠标指针放在Inert事务栏，然后按Ctrl-K，删除Insert。

备注

还可以点击目标事务栏，从对象菜单中选择Cut Trans。通过从对象菜单中选择Paste Trans(快捷方式是Ctrl-Y)，还可以粘贴事务。可以以类似的方式，使用Copy Trans选项复制事务。

4 运行程序，注意来自两项测试的两条数据记录。把程序另存为seq1.vee。程序外观应类似于下图。

大括号表示Record数据类型。Sequencer输出Record of Records，如字母数字显示画面中所示。这意味着您可以把定序器放在循环中，多次运行相同的测试顺序，得到一个Records of Records数组。

另请参阅

实验10-1: 配置测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


存取记录的测试数据

Sequencer输出一条或多条记录。每个测试使用测试名称作为Sequencer记录中的字段名。每项测试内部的字段根据记录配置命名。通过使用默认配置及Name、Result和Pass字段，可以存取使用符号Log.Test1.Result表示的test1结果，如下图所示。

.

可以使用下述步骤存取测试结果。

1 打开seq1.vee。

2 选择Device [image] Formula，把它放在显示屏下面。把表达式变成Log.Test1.Result。(记住，VEE不分大小写，在编制文档时，名字中使用大写可以更加清楚。)

把输入端名称从A变成Log。(也可以留下默认名称A，在这种情况下，公式是A.Test1.Result.) 把Sequencer输出端Log连接到Formula输入端Log上。

3 选择Display [image] AlphaNumeric显示屏，把它连接到Formula输出上。

4 运行程序，应存取Test1中的Result字段。把程序另存为seq2.vee。程序的外观如下：

备注：

在Sequencer内部执行时，每项测试创建一个记录，名称为测试名称。可以在后续测试中使用这个记录。例如，如果test1通过测试，可以启用test2 (ENABLED IF: test1.pass == 1)。如果需要在运行测试的同时存取表达字段中的测试数据，那么测试数据存储在临时记录thistest中。

5 把公式变成读取Log.test1，再次运行程序。应检索test1的整个记录，显示画面中三个值周围的大括号表明了这一点。

6 改变公式，可以存取test1和test2记录中的结果、是否通过测试、名称和其它字段。在Properties对话框中选择Logging一栏，在已有的记录中增加Nominal和Time Stamp字段。使用Formula对象存取这些新字段。

另请参阅

实验10-1: 配置测试， 添加或插入或删除一个测试，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


实验10-2: 使用输入端传送数据

首先，根据下述步骤创建UserFunction Rand，模拟一个测量程序。Rand()将在 random(low,high)对象输出中添加一个输入参数，把这一结果放在输出端。将从三项不同的测试中调用Rand()。

1 选择Device [image] UserFunction，把名称从UserFunction1变成Rand。

2 得到random(low,high)函数，删除输入端，删除参数，把它放在Rand中。(回想一下如果没有这些参数，默认值将是0和1) 把A+B对象放在random(low,high)的右面。把random(low,high)的输出连接到A+B对象的左上方输入。

3 在Rand中添加一个数据输入端。把输入端A连接到A+B对象的左下方输入端。

4 在Rand中添加一个数据输出端。把A+B对象的输出连接到Rand 输出端。

UserFunction Rand应如下。

5 把程序另存为seqdat1.vee。使用右上角x按钮，关闭Rand窗口。

备注

关闭窗口并不会删除UserFunction。如果想检查一下，那么只需点击Edit [image] Edit UserFunction，您将看到要编辑的UserFunctions列表框中出现Rand。也可以图标化Rand函数，您将在VEE屏幕底部看到图标。

现在在Sequencer中设置三项测试，使用Sequencer输入端把输入参数馈送到Rand，调用Rand。

6 选择Device [image] Sequencer，把它放在Main中。在Sequencer中添加一个输入端。点击处理条，出现Sequence Transaction对话框。把FUNCTION字段从testFunc(a)变成rand(a)。这将调用UserFunction Rand()，把Sequencer输入端A上的值发送给它。点击 OK，返回Sequencer打开的视图中。

备注

还可以使用Sequencer输入端名称，如A，把数据传送到Sequence Transaction对话框内的任何表达式字段。例如，可以使用A，把数据传送到RANGE:和SPEC NOMINAL:。

一定要高亮度显示处理，把光标放在处理条上，按Ctrl-K剪切测试，然后按Ctrl-Y三次，把测试粘回Sequencer。(还可以使用对象菜单实现剪切和粘贴功能。)

默认测试名称将是test1x2, test1x1和test1。打开三个Sequence Transaction对话框，为清楚起见，把名称变成test1, test2和test3。

1 选择Data [image] Continuous [image] Real64 Slider，把它放在Sequencer的左面。把名称变成提示Select Num:，缩小对象尺寸，把它连接到Sequencer输入端。

通过使用鼠标左键点击和拖动对象的角，可以在放下时确定对象的大小。

2 选择AlphaNumeric显示画面，把它放在Sequencer下方，放大到更宽，把它连接到Sequencer的Log 输出端。

3 再次把程序另存为seqdat1。在Real64 Slider对象上选择一个数字，运行seqdat1，其应该如下。

随着测试数量提高，使用输入端传送数据要求越来越多的输入端。为降低输入端数量，可以把记录传送到输入端，使用记录中的各个字段进行单独测试。还可以使用单独的UserFunction设置全局变量，然后由程序内的其它UserFunctions或任何表达式字段调用这些变量。下一个练习说明了这一操作。


使用全局变量传送数据

本练习通过添加一个全局变量，把参数a传送到UserFunction Rand，来修改seqdat1程序。

1 删除标为Select Num的Real64 Slider对象。删除Sequencer上的A输入端。

2 高亮度显示test1处理条，打开对象菜单，点击Insert Trans...。在出现Sequence Transaction对话框时，点击TEST，把选项拨到EXEC，把名称变成Setup。

3 将使用EXEC模式，因为User Function只设置一个全局变量，不会生成必需针对规范进行测试的结果。

4 把FUNCTION字段变成global()，点击OK关闭对话框。

5 现在创建UserFunction global()。

6 选择Device [image] UserFunction。把名称UserFunction1变成global。

选择Data [image] Continuous [image] Real64 Slider，把它放在UserFunction中，把名称变成Select Num:，使其垂直尺寸变小。

选择Data [image] Variable [image] Set Variable，把它放在Real64 Slider的右面。

把全局变量名称从globalA变成a。把Real64 Slider连接到Set Variable对象。

为在屏幕上显示函数，以便操作人员选择一个数字，添加一个弹出面板视图。包括一个Confirm (OK)按钮，以便面板一直保留在屏幕上，直到操作人员作出选择。(也可以使用global() UserFunction内部的Real Input对话框完成这些任务。)

7 选择Flow [image] Confirm(OK)，把它放在 Real64 Slider对象上方。把OK数据输出端连接到Real64 Slider序列输入端。

备注

如果把OK按钮放在Set Variable对象下方，它会导致逻辑错误。这是因为VEE把Slider上的旧值发送到Set Variable对象，然后暂停，直到按OK按钮。您在弹出面板上输入的任何新值都将被忽略。在OK连接到Real64 Slider上方时，VEE会等待设置全局变量，直到按下OK之后，进而使用新的Slider值。可以打开Show Data Flow，查看执行顺序。

8 选择Display [image] Note Pad，删除模板信息。把它放在OK按钮的右面。在Note Pad中输入下面的用户提示：

Please select a number for this run of tests 1, 2, and 3.

9 按住Ctrl、同时点击多个对象，选择Note Pad、Real64 Slider和OK按钮。每个对象现在有一个阴影，表明已经被选中。点击Edit [image] Add To Panel。(记住还可以通过VEE屏幕打开区域或者UserObject或UserFunction细节视图的右面按钮使用Edit菜单。) 在Panel视图中，缩小面板尺寸，把Note Pad放在最上面，把Real64 Slider放在中间，把OK按钮放在最下面。

备注

在Panel视图中重新定位对象时，它不会影响Detail视图中的对象布局。

打开UserFunction Properties窗口。在弹出面板下的General文件夹中，在详细视图中把ShowPanelonExecute属性设为True. T UserFunction。

面板视图

10 把程序另存为seqdat2，运行程序。在出现弹出面板时，选择一个值，按OK。程序应如下。

备注

在默认状态下，弹出面板将出现在屏幕中心。为移动弹出面板，可以点击和拖动标题条。

另请参阅

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


比较波形输出和模板

在这个练习中，您将创建一个称为noisyWv的UserFunction，然后从Sequencer的处理栏中调用这个函数。操作人员将能够把波形幅度从0变成1。这个函数模拟返回有噪声的波形的测试结果。您将使用Data [image] Constant菜单中的Coord对象，在0.6处创建一个直线模板，Sequencer将使用这个模板测试有噪声的波形。

1 在Detail视图中创建称为noisyWv的UserFunction。

2 按Ctrl，点击OK按钮，使用Real64 Slider，然后使用写字板高亮显示，创建Panel视图。选择Edit [image] Add To Panel。

在出现Panel视图时，根据自己的风格重新排列对象，确定窗口大小。

打开对象菜单，点击Properties，在弹出的Panel中，点击下一个，显示Panel on Execute。

Panel视图类似于下图：

3 选择 Device [image] Sequencer，把它放在Main中心偏左的地方。增加一个数据输入端，把它命名为模板。

4 点击处理栏，出现Sequence Transaction对话框。如下表所示改变各个字段：

字段 | 说明
FUNCTION | 输入noisyWv().
RANGE | 从弹出菜单中点击选择LIMIT。剩下<=，LIMIT 端名称字段输入mask。所有其它默认值不变，点击OK。

test1将从noisyWv()获得结果，在名为mask的输入端上针对极限值进行测试。如果有噪声的波形在所有点上都小于等于模板，那么其通过测试，否则未通过测试。

5 选择Data [image] Constant [image] Coord，把它放在Sequencer上方。把其输出连接到Sequencer输入端模板上。

打开Coord对象菜单，点击Properties，如下表所示设置各个字段：

属性 | 说明
DataShape | 设为1D Array.
ArraySize | 输入2 (指定一条直线只需两对坐标)

6 在Coord对象 中，现在可以看到两个指数代表着两对坐标。双击第一个指数0000:，将出现一个光标。输入用逗号分隔的坐标，VEE自动增加圆括号。输入0, 0.6 Tab 20m, 0.6，然后点击对象外面的工作区。项目如下：

• noisyWv()中噪声发生器的x轴 (时间轴)从0变成20毫秒，因此两个x值是0和20m。

• 两个y值都是0.6，因为您想要一个直线模板。

备注

通过配置相应数量的坐标对，并进行填充，可以创建任何模板波形。

Sequencer比较机制的工作方式与Comparator对象类似，它接受Coord数据类型测试波形。当然，也可以比较两个Waveform数据类型。按Tab，在坐标对之间移动，在完成时点击工作区。

7 选择AlphaNumeric显示，提高其宽度，把它连接到Sequencer的Log输出上。

8 把程序另存为seqdat3，运行程序，其外观应该如下：

使用Sequencer传送数据的练习到此结束。在下一个练习，您将学习怎样存取和分析Sequencer多次迭代中的数据。

另请参阅

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


分析来自Sequencer的数据

Sequencer数据输出为记录的记录。但在许多情况下，Sequencer可能会多次经过一系列测试。每条记录表示通过Sequencer一轮，并保留其它记录，代表这一轮内部的每项测试。查看它的最简便的方式是想象一下内存中的一个数据立方体，如下图所示：

记录数组称为Log，因为这是与Sequencer输出端相关的名称。为进入某一轮，可以使用带有大括号的索引。

• Log[0]是第一轮通过Sequencer，Log[1]是第二轮，依此类推。

• 每一轮的主要记录有两个字段：Test1和Test2。

• 在记录Test1内部有三个字段：Name, Result和Pass。这同样适用于记录Test2。

• 因此，Log.Test1.Result给出了由4个值组成的数组，每个值表示四轮。Log[0].Test1.Result输出一个标量值，即第一轮(Log[0])中Test1的Result。

登记录的记录数组简化了数据的分析和考察工作。例如，您可能想知道在某一轮中通过测试的数量有多少。您也可能想平均所有轮中Test2的结果。或者，您可能想查看第四轮中Test1上的所有数据。这一数据结构可以实现所有这些查询。

另请参阅

实验10-3: 分析来自Sequencer的多轮数据

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


实验10-3: 分析来自Sequencer的多轮数据

1 清屏，打开seqdat1.vee程序。

修改seqdat1.vee程序，运行三次Sequencer。然后在数据上执行某些分析操作。

2 选择Flow [image] Repeat [image] For Count，把它放在Real64 Slider对象上方。把迭代数量变成3，把数据输出端连接到Sequencer的序列输入端。

3 删除Sequencer Log端和显示画面之间的数据线。选择Data [image] Collector，把它放在Sequencer的右面。把左上方的数据输入端连接到Sequencer Log端，把XEQ端 (左下方)连接到For Count对象的序列输出端。把Collector数据输出端连接到AlphaNumeric显示画面。垂直放大显示画面，以适应三个要素组成的数组。

Sequencer现在将运行三次test1和test2，把数据采集到三个要素组成的数组中，每个数组保存每轮测试记录的记录。(参阅 数据的三次幂 查看这一点。)

这时运行程序，查看Sequencer数据显示画面。

现在使用Formula对象，提取部分数据进行分析。本练习对所有三轮测试都以test1为例，找出该数组的中间值。

4 选择Device [image] Formula，把它放在显示画面下方。把Formula输入端连接到Collector的输出。把Formula输入字段变成read: a[*].test1.result。把mean(x)对象连接到一个Formula，把AlphaNumeric显示画面连接到mean(x)。

a 指的是输入端A上的数组。Test1.result存取正确的字段。数组中将显示各轮测试。(例如，A[0].test1.result仅指第一轮测试。)

5 运行程序，程序应如下。

尽管本练习存取了一个数组，但从Sequencer输出中提取其它数据数组的原理相同。注意，通过在Sequencer Properties对话框中打开Logging文件夹，可以简便地改变为每个数组保存的字段。

另请参阅

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-4: 使用To/From File对象及登录数据，使用To/From DataSet对象及记录数据


实验10-4: 使用To/From File对象及登录数据

实验10-4: 使用To/From File对象及记录数据

1 打开seqdat2文件，删除到显示画面的数据线。

2 选择Flow [image] Repeat [image] For Count，把它放在Sequencer的左面。把For Count数字变成3，把其数据输出端连接到Sequencer的序列输入端。

3 垂直放大工作区，把AlphaNumeric显示画面放在底部附近。选择Data [image] Collector，把它放在左面的工作区中。把Sequencer Log端连接到Collector数据输入端。把For Count序列输出端连接到Collector XEQ端。

Collector将创建Sequencer记录的记录数组。在To File对象中使用WRITE CONTAINER处理，可以非常简便地把任何VEE数据容器写入一个文件中。

4 选择I/O [image] To [image] File，把它放在Collector的右面。选择I/O [image] From [image] File，把它放在To File对象的下方。在 To File对象中添加一个输入端，把Collector输出连接到这个输入端。把To File序列输出连接到From File序列输入端。把From File数据输出连接到显示画面。

在To File中复选Clear File At PreRun & Open，为WRITE CONTAINER配置一个处理。在From File对象中配置一个处理，具体如下：READ CONTAINER x。

可以使用默认数据文件进行存储。

5 把程序另存为seqdat4.vee，运行程序。程序应如下：

另请参阅

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，使用To/From DataSet对象及记录数据


使用To/From DataSet对象及记录数据

由于作为记录存储测试数据，因此您可能会首选使用To/From DataSet 对象。在这种情况下，您不需要Collector，因为您可以把每次运行的Sequencer追加到DataSet末尾。

修改seqdat4.vee，使其如下图所示。To/From DataSet 对象位于I/O菜单中。 注意进入From DataSet的序列线。之所以包括序列线，是因为您想等到把全部三次运行追加到DataSet之后，才触发From DataSet。

可能使用To/From DataSet 对象、而不是To/From File 对象采集数据的原因之一，是可以使用From DataSet对象中的Search Specifier功能，把数据转换成有用的信息。

备注

记住把From DataSet中的Get records字段从One变成All。

另请参阅

实验10-1: 配置测试，添加或插入或删除一个测试，存取记录的测试数据，实验10-2: 使用输入端传送数据，使用全局变量传送数据，比较波形输出和模板，分析来自Sequencer的数据，实验10-3: 分析来自Sequencer的多轮数据，实验10-4: 使用To/From File对象及登录数据


实验11-1: 使用菜单

在本练习中，您将创建一个操作人员界面，其中包括一个有三个选项的菜单：die1, die2和die3。在操作人员选择一个选项时，将调用相同名称的函数，显示一个骰子，上面有一点、两点或三点。这个程序模拟的情况是操作人员必须从菜单中选择一项要运行的测试。您还将学习怎样导入一个位图，改变图标外观。这个程序可以叫作骰子程序。.

先创建三个UserFunctions：

1 选择Device [image] UserFunction。

尽管可以使用任何图标，显示导入的位图，但本例使用Picture对象。

2 选择Display [image] Picture，把它放在UserFunction中。

3 打开Picture对象菜单，点击Properties，然后把ShowTitleBar属性设成False。在Picture下选择die1.gif，点击Scaled，然后点击OK。

备注

为在关闭Show Title Bar时进入对象菜单，在对象上按鼠标右键。

备注

尽管VEE默认为位图子目录，但也可以使用来自任何目录的位图。

现在应有一个上面是一点的骰子图片。

4 选择Flow [image] Confirm (OK)，把它放在骰子下面。把Picture序列输出端连接到OK 序列输入端。

5 选择Picture和OK对象 (按Ctrl，点击对象，创建一个阴影)。 把鼠标指针放在背景上，按鼠标右键，打开弹出Edit菜单。选择Add to Panel。

6 把UserFunction Title和Panel Title变成die1。根据需要排列对象，确定对象大小。

备注

为在Panel View中移动对象，在对象上按鼠标右键，选择Move，或高亮度显示对象 (对象应显示一个灰色边框)，把对象拖到新位置。

从Properties对话框中选择ShowPanelonExecute。点击Panel文件夹，激活PanelGridSize属性，把栅格大小变成2，以更准确地对齐。然后点击OK。

7 在die1对象菜单中选择Clone，创建另两个UserFunctions。新的UserFunctions作为die2和die3自动出现。把图片对象分别变成die2.gif和die3.gif。检查新函数的所有设置，保证除名称和位图外，其它项目与die1一致。程序应类似如下。图标化函数窗口。

创建一个菜单，从三个函数中选择一个要调用的函数。

8 选择Data [image] Selection Control [image] Radio Buttons。

Radio Buttons是从上方输出端的用户自定义列表中输出一个枚举值的对象(Enum数据类型：一个文本字符串，带有一个与之相关的普通数字)。例如，如果把列表定义为Monday, Tuesday, Wednesday, Thursday和Friday，那么操作人员可以从菜单中选择天，然后Radio Buttons会输出这一天。

列表中的第一个项目赋予普通位置0；列表中第n个项目赋予普通位置n-1。例如，列表中Monday的普通位置为0，Friday的普通位置为4。普通位置出现在下方输出端。如需更详细的说明，请参阅对象菜单中的Help项目。

9 打开Radio Buttons对象菜单,选择Edit Enum Values....

除最后一项外，在每一项之间按 Tab键，输入函数名称die1, die2和die3。点击OK。

备注

数据选择控制有六种菜单格式。Radio Buttons以按钮的形式显示各个项目。操作人员的选择以文本格式作为Enum数据类型输出。循环按钮会循环通过枚举的值，在操作人员点击这个按钮时，一次经过一个值。列表在一个列表中显示所有枚举值，其中高亮度显示选择的项目。另外三个选项是下拉列表、弹出列表和和滑尺列表。

10 打开Radio Buttons对象菜单，点击Properties，然后选择Auto Execute。把标题变成提示信息：Make a Selection。

设置Call对象，以便操作人员在Radio Buttons对象上选择的值现在变成Call Function对象调用的函数名称。

11 点击Device [image] Call。选择Add Terminal [image] Control Input，然后选择Function Name，点击OK。Function Name控制端接受Enum或Text值作为输入。把Radio Buttons数据输出端连接到Call Function对象上的Function Name输入端。把Radio Buttons序列输出端连接到Call Function的序列输入端。在Make a Selection:中点击die2，注意Call Function Name变成die2。

备注

Call输入端要求Text Scalar，因此VEE把Enum Scalar转换成Text Scalar。

记住，虚线表示控制端。在打开Auto Execute时，在作出变化时，Radio Buttons会执行，并把选项发送到Call。一旦该端收到数据，Call Function上的控制端会替换函数名称。只有在启动序列输入端时，Call对象才会调用指定的函数。

备注

在程序使用Auto Execute和序列端时，操作人员不必点击Run按钮就可以启动程序。

添加一个只显示提示的操作人员界面、菜单及显示选项的弹出面板。

12 按Ctrl，点击目标对象，选择Radio Buttons对象，然后选择Edit [image] Add To Panel。

13 打开对象菜单, 选择Properties，在需要时调节颜色和字体。

选择一个选项，运行程序。(不要使用Run按钮，因为它将使用菜单上已经选择的选项。)

在执行时程序应类似于下图。

在下一个实验练习前，应注意以下事项：

• 可以在上面的练习中使用同一技术，为任何程序创建多个菜单。

• 也可以使用Radio Buttons，使用带有控制端(“Command”)、指明要调用的程序的Execute Program对象，选择汇编的语言程序。如果已经导入一个汇编函数库，那么也可以使用Call对象，从库中运行函数。

• 可以使用一个UserFunction内部的Picture对象的File Name数据输入端，然后把相应的位图文件发送到该对象上，优化这个程序。如果使用许多不同的位图，那么这种编程方式效率会更高。

• 在复杂程序上通常使用Run、而不是AutoExecute。可以使用Wait for Input，而不是AutoExecute，使程序在某个数据常数或选择控制对象上暂停。


实验11-2: 为面板背景导入位图

位图对程序并不是必需的，但它们可以提高测试的清晰度和冲击力。例如，您可能想导入一个示意图，以更好地说明被测试的项目。在本练习中，您将为面板背景导入位图，其中把标准VEE对话放在其顶部。

可以为UserObjects或UserFunctions中的图标、Picture对象或面板视图背景导入位图。将创建一个称为Bitmap的弹出UserFunction，其中包括一个Label对象和一个Confirm (OK)对象。

1 选择Device [image] UserFunction。

2 选择Flow [image] Confirm (OK)和Display [image] Label，把它们放在UserFunction窗口中。

3 把UserFunction的名称变成Bitmap。

4 选择OK和Label对象，用阴影高亮度显示。把指针放在UserFunction工作区上，按鼠标右键，打开弹出Edit菜单。选择Add to Panel。

5 打开UserFunction菜单，选择Properties，然后选择ShowPanelonExecute。(记住双击标题栏，出现Properties框。) 在Pop-up Panel下反选Show Title Bar。

打开Panel文件夹，把Grid Size变成2，在Background Picture下选择default.gif和 Scaled，然后点击OK。

6 打开Label对象的Properties框，设置如下：

Label属性 | 说明
Title: | 变成Bitmap Function。
Justification | 变成Center。
BackColor | 选择Light Gray，点击OK。
Font | 选择更大的粗体字体，点击OK。复选 Automatically Resize Object on Font Change。
Border | 点击Raised。点击OK，完成变化，关闭Properties对话框。

7 根据需要定位标题Bitmap Function和OK按钮。图标化Bitmap UserFunction。

8 进入Main窗口。点击Device [image] Call， 然后在对象菜单中点击Select Function，选择Bitmap。运行程序。弹出框应如下：


实验11-3: 创建高冲击力警报

本练习包括嵌套的多个UserFunction。第一个UserFunction是告警本身，它显示一个红色的正方形，发出蜂鸣声。第二个UserFunction重复调用告警，产生灯光闪烁效果和脉冲式声音，直到操作人员关闭告警。

先对告警函数编程。

1 选择Device [image] UserFunction。把名字变成告警。

2 选择Display [image] Beep，把它放在UserFunction的左上角。调节设置，以便有持续一秒的大的蜂鸣声。把Duration (sec)字段变成1。把Volume (0-100)字段变成100。

备注

这些说明假设您的计算机拥有支持蜂鸣声的硬件。某些Windows 2000和Windows XP系统已经把Default System配置改成Default System Beep。

备注

您不必把Beep对象连接到任何项目上，在函数执行时，该对象会激活。

3 点击Display [image] Indicator [image] Color Alarm，把它放在UserFunction中。打开Color Alarm对象菜单，点击Properties，设置如下：把ShowTitleBar属性设为False，把Shape属性设为Rectangular，把HighLimit属性设为.66，删除HighText属性旁边的任何文本。

4 点击Data [image] Constant [image] Real64，把它变成1，把它连接到Color Alarm输入端。

5 为使屏幕上的画面保持一秒，与Beep对象同步，使用设置为1秒的Delay对象。

6 选择Flow [image] Delay，把它设为1，把其序列输入端连接到Color Alarm序列输出端。然后告警持续1秒。

7 选择Display [image] Note Pad，删除模板。添加信息：TURN OFF INSTRUMENTS!。根据需要调整Note Pad大小。

8 进入Main窗口。选择Device [image] Call，从Call对象菜单中选择Select Function，选择告警。运行测试，进行测试。UserFunction告警的细节视图应类似于下图。

9 返回告警窗口。选择Color Alarm画面和Note Pad。打开弹出Edit菜单，选择Add To Panel。在面板视图中，使用对象句柄Align函数或通过移动对象，确定对象大小和排列对象。如果需要对齐网格，把PanelDrawGrid属性设为True。打开Note Pad对象菜单，点击Properties。设置如下：

属性 | 说明
ShowTitleBar | False
EditEnabled | False
Border | 变成Raised border。

10 把Color Alarm变成Raised Border。

11 点击UserFunction内部打开的空间，出现Properties对话框，选择ShowPanelonExecute。把属性ShowTitleBar设为False。把Panel Title变成告警，图标化告警。

12 进入Main窗口，删除Call对象。(VEE仍会在内存中保留函数告警。如果想再次编辑函数，选择Edit [image] Edit UserFunction或双击其图标。)

13 创建重复调用告警函数的函数。

14 选择Device [image] UserFunction，把UserFunction名称变成警报。

15 选择Flow [image] Repeat [image] Until Break。

16 选择Device [image] Call，把Function Name变成告警，把其序列输入端连接到Until Break数据输出端。

添加一个Check Box对象，询问操作人员是否想关闭告警。

17 选择Data [image] Toggle Control [image] Check Box。打开Check Box Properties框，把Title属性变成Turn off alarm?，选择Scaled属性，把它设为True，选择InitializeAtPreRun，确保属性值为False，使TitleFont属性大小相对于名称较大。把Call序列输出端连接到Check Box序列输入端。

这会创建一个使用Check Box的输入对象。如果操作人员点击这个框，会出现一个X，对象输出一个1；否则对象会输出一个0。可以使用If/Then/Else对象测试输出，告诉VEE要采取的下一步措施。

18 选择Flow [image] If/Then/Else，把它放在Toggle的右面。把Toggle数据输出连接到If/Then/Else对象的数据输入A上。把If/Then/Else对象中的表达式编辑为：a == 1。(注意“等于”的符号是==，而不是=) 如果A端保留一个1，Then输出会启动；否则Else输出会启动。

把Toggle的输出连接到If/Then/Else的输入上。

19 选择Flow [image] Repeat [image] Break，把它连接到If/Then/Else对象的Then输出上，具体如下。

20 点击对象右侧，选择Check Box对象(Turn off alarm?)。打开弹出Edit菜单，选择Add To Panel。确定面板视图大小，使其环绕Check Box。

21 打开警报UserFunction Properties框，选择ShowPanelonExecute，把ShowPopupPanelTitle设为False (因为标题对操作人员没有意义)。

22 进入Main，点击Device [image] Call，打开其对象菜单，点击Select Function，然后选择警报。把Call对象移动到屏幕顶部中心。图标化Main窗口。

23 在默认情况下，VEE同时在屏幕中心显示告警面板和警报面板，因此告警会在停止告警的复选框顶部闪烁。由于这两个屏幕位置都没有锁定，因此可以点击并把弹出面板拖到新位置，来重新定位其在屏幕上的位置。但是，在告警面板闪烁时，进行这一操作有一些困难。这时应点击和拖动面板边缘。如果需要，使用工具栏上的停止按钮停止程序。然后再运行程序。

在两个面板位置如下时，可以点击Turn off alarm?提示旁边的框，停止程序。


实验11-4: 使用ActiveX控件

本实验说明了怎样在VEE内部使用ActiveX控件。可以在VEE程序中采用来自其它应用程序的ActiveX控件。在本例中，您将使用ProgressBar控件，并使用循环，显示完成0% - 100%的进度条。同样，这些一般原理也适用于其它ActiveX控件。

1 点击Device [image] ActiveX Control References...，选择Microsoft Windows Common Controls 6.0。点击OK。

2 点击Device [image] ActiveX Controls [image] ProgressBar。调大ProgressBar对象大小。打开其Object Menu，注意对象名称是ProgressBar。VEE已经自动创建一个指代ActiveX控件对象的声明变量。可以在Formula表达式中使用名称ProgressBar，就象任何其它变量或数据输入一样。

3 点击Device [image] Formula & Object Browser，选择ActiveX Objects, Library: MSComcltLib, Class: ProgressBar, Members: Value，点击Create Set Formula。把对象放在Main窗口顶部中心。

4 为从0循环到100、并显示完成的百分比，添加一个For Range对象。选择Flow [image] Repeat [image] For Range，把对象放在ProgressBar下面，设置如下：From: 0, Thru: 100, Step:10。把For Range输出连接到ProgressBar输入端Value。

5 为降低程序执行速度，以便能够查看ProgressBar更新状况，选择Flow [image] Delay，把对象放在For Range对象的右面。把它设为.2。把ProgressBar序列输出端连接到Delay对象序列输入端，运行程序。

备注

ActiveX Control对象菜单同时拥有Properties和Control Properties。Properties菜单设置对象的VEE属性。Control Properties由Control提供，对每种ActiveX Control可以不同。

考察与VEE一起提供的所有控件范例，可以更好地了解其工作方式。然后在市场上寻找您可能希望添加的其它控件和画面，以增强VEE中的用户界面功能。

下图显示了采用MS Chart控件的另一个VEE范例。在Device [image] ActiveX Controls References对话框中选择了一个控件库之后，可以使用Function & Object Browser或Declare Variable Object，识别控件的属性和方法。


实验11-5: 创建状态面板

在本实验中，您将学习怎样使用骰子程序中的函数，创建一个状态面板。(骰子程序练习位于“实验11-1: 使用菜单"中) 一般来说，在有大量的测试，且希望在返回时查看结果时，这将与Sequencer对象一起使用。将使用函数random()，它使用默认设置，返回0和1之间的一个实数值。

1 点击Device [image] Sequencer。双击处理栏，使用默认名称test1配置测试，用random()替换FUNCTION:字段。参见下图。

2 以相同方式配置第二个测试，名为test2。

3 打开Sequencer Properties框，选择Logging栏，在Logging Mode下，选择Log Each Transaction To: logTest(thisTest)，然后点击OK。

在Sequencer执行每个处理时，它为每个测试创建一条记录，称为"thisTest"，可以在同一栏下配置其字段。然后创建一个UserFunction，称为"logTest" (或另一个名称)，Sequencer将在执行的每个处理的末尾使用Record thisTest调用LogTest() UserFunction。通过这种方式，可以更新状态面板。

4 选择Device [image] Function & Object Browser [image] Built-in Functions [image] Panel [image] showPanel，把它放在Sequencer上面。删除输入端，然后把参数编辑为"logTest",420,180，留下最后两个参数。把showPanel的Result输出端连接到Sequencer序列输入端。如果成功，ShowPanel会输出一个1。

LogTest是UserFunction的名称。另两个参数是屏幕上从左上角开始的X和Y坐标。这告诉VEE在显示时把UserFunction面板放在哪个位置。(本例中没有包括面板维度。)

5 创建名为logTest的UserFunction，如下图所示。添加一个输入端。(登录Record将作为输入。)把Logging AlphaNumeric放在面板上，把它连接到输入端。选择Logging AlphaNumeric，点击Edit [image] Add to Panel。在面板视图中，根据需要调节大小和位置。反选画面和面板标题栏。

下图显示了运行程序后的面板视图，您可以了解怎样显示数据。

6 从Function & Object Browser框和Flow [image] Confirm(OK)中选择hidePanel。把hidePanel()参数变成logTest。删除输入端。连接对象，如下图所示。

7 运行程序，如下图所示。

总之，showPanel对象显示UserFunction面板，但不调用UserFunction。Sequencer通过其登录函数调用UserFunction两次，每次调用时更新面板。然后，在操作人员完成时，他/她可以按OK，隐藏面板。本例使用OK对象触发hidePanel对象，但也可以把它放到程序中其它地方，确定其执行时间。逐步通过程序，看到状态面板出现，使用Test1和Test2结果更新屏幕，然后消失。


实验13-1: 使用Agilent VEE网络浏览器操作练习

本练习模拟一个Web会话，其中您将在系统上为远程用户提供Solitaire.vee 程序，供远程用户查看。在本例中，程序中有一个错误，远程用户咨询您怎样解决错误。

1 启动VEE. Select File [image] Default Preferences [image] Web Server对话框，点击Enable Server。使用默认设置。打开您希望远程用户查看的 Solitaire.vee 程序。运行网络浏览器。

2 与远程用户联系，让他/她知道输入http://Server5，通过网络可以到达您的系统。(您将使用自己的计算机名称，而不是http://Server5。)

3 在远程用户输入URL http://Server5时，远程用户看到您的VEE Web Server主页显示在他/她的浏览器中。(如果想了解显示屏，请参阅图301)

4 远程用户决定先查看整个VEE程序。在VEE Web Server主页中，他/她点击Main Detail [image] View。浏览器显示的画面如下。

上图显示了VEE中的Main 程序。

备注

对本练习，Solitaire.vee 程序包括VEE程序范例中没有错误。如果您想查看程序，它位于Help [image] Open Example... Games [image] Solitaire.vee下。

5 远程用户在浏览器中点击Back (后退)，显示VEE Web Server主页，选择Last Error Message。浏览器显示错误信息。

注意VEE错误信息指明UserFunction makeAMove。

6 远程用户再次回到VEE Web Server主页，点击UserFunction的Detail View，输入UserFunction名称makeAMove。浏览器显示UserFunction makeAMove如下。

远程用户能够查看VEE程序中的错误。JCT对象上有一个输入端没有连接，如上图所示。远程用户现在可以帮助您诊断 Solitaire.vee，解决错误。使用通过Web实现的类似协作流程，可以与远程用户协作，或一起开发程序。

另请参阅

可以调用的VEE ActiveX Automation Server, 使用Agilent VEE进行Web监测, 为远程用户提供Agilent VEE数据, Web Server对话框, 远程用户怎样存取系统上的Agilent VEE,显示Agilent VEE Web Server页面，限制存取通过Web查看的程序


通用编程技术

通过下面的练习，您将有机会实践VEE概念。这一练习分成几类。

为使用这一练习，先开发一个解决方案，然后把它与列出的答案进行对比。有许多方式为一定的任务编程，因此如果它能够满足问题规范，那么它就是一个有效的解决方案。但是，执行更迅速、更简便的程序可能是更好的解决方案。每个解决方案都包括简要的要点讨论。

苹果装袋程序

使用字符串和全局变量

导 入和删除UserFunctions库

优化技术

UserObjects

Agilent VEE UserFunctions

创建操作面板和弹出面板

处理文件

记录

测试定序

测试数字

使用 Masks

随机数字发生器

收 集随机数字


苹果装袋程序

您想知道装满一个10磅的篮子需要多少个苹果。创建一个VEE程序，计算装满篮子需要多少个苹果。每个苹果的重量在0 – 1磅之间。

建议

可以使用10个或更少的对象创建这个程序。从下面的对象中进行选择：

Start, Until Break, random() function, Accumulator, Break, Real64, Conditional (A>=B), Stop, Counter, If/Then/Else, Alphanumeric.

备注

许多实验室试验使用的VEE程序和本手册中的编程实例都包括在VEE中Help [image] Open Example... Manual [image] UsersGuide下。

解决方案1—苹果装袋程序

要点

最佳解决方案：

为优化程序性能，应尽可能减少使用的对象数量。这个解决方案使用6个对象。也可以使用10个对象实现程序，具体如下。

Until Break和Break对象:

对要求测试某个条件的循环使用这些对象。在本例中，在苹果总重量超过10磅时，应停止循环。

Accumulator:

使用Accumulator进行累加。

Counter:

使用Counter进行计数。在本例中，Counter用来跟踪篮子中的苹果总数。注意在总重量超过10时，只有If/Then/Else对象上的Then端激活，Counter中会提供正确的答案。

解决方案2—苹果装袋程序

这是另一种解决方案，它使用了更多的对象。

要点

Start:

对这一程序使用Start对象是多余的，因为可以使用主菜单条上的Run按钮。最好在屏幕上有两个程序、且用户希望单独运行这两个程序时使用Start。或者在使用具有反馈循环的程序、且用户希望定义在哪里开始执行程序时使用Start。

Shift Register:

可以使用Shift Register存取以前的输出值。在第二个解决方案中，Counter一直数每个苹果，直到达到要求的重量，因此在总重量超过10时，数量必须减去1。

Gate:

Gate用来保持输出，直到发生另一个操作及激活序列端。这里，在条件A<=10不再为真时，If/Then/Else对象上的Else端激活门。

另请参阅

处理纪录, 使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，测试定序，测试数字，收 集随机数字,

随机数字发生器。


测试数字

测试数字, 第1步

创建一个程序，允许用户输入一个0 – 100之间的数字。如果数字大于等于50，那么显示这个数字。如果数字小于50，那么显示一个弹出框，显示信息“Please enter a number between 50 and 100.”

建议

可以使用5个或不到5个对象创建这一程序。从下述对象中选择： Start, Int32, Slider, Real64, If/Then/Else, Formula, Gate, Text, Junction, Alphanumeric, Message Box.

解决方案—测试数字, 第1步

这是使用5个对象测试数字练习的解决方案。

测试数字, 第2步

在模型处理5个对象后(Message Box生成弹出框)，不使用Gate对象，试着使用4个对象进行编程。

解决方案—测试数字, 第2步

这是使用4个对象测试数字练习的解决方案。

要点

Auto Execute:

所有输入对象(如Int32 Slider)在Properties对话框中都有一个Auto Execute选项。如果选择这个选项，那么在其值变化时这个对象会运行，而不必按Start或Run按钮。

合并公式:

对If/Then/Else对象中的表达式(A>=50)*A，如果A>=50，那么其值为1*A；如果为假，那么其值为0。因此如果表达式为真，那么A被放在Then端；如果表达式为假，那么0被放在Else端。(求解非零的任何表达式都视为真，值在Then端传播。)

测试数字, 第3步

创建一个只使用3个对象的解决方案。

提示: 在Formula对象中使用一个三元组表达式。公式为：(<expression> ? <if TRUE,output value> : <if FALSE, output value>)。例如，如果A < 10求解为TRUE，那么Result端应出现A值；否则，Result端应出现字符串“FALSE”。将使用下面的三元组表达式：(A<10 ? A : "FALSE")。

解决方案—测试数字, 第3步

这是只使用3个对象测试数字练习的解决方案。

备注

由于自动检错功能，这可以使用Real64 Input对话框实现。但是，在程序结束前，操作人员必须输入一个有效数字。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，随机数字发生器,

收 集随机数字。


收集随机数字

创建一个程序，生成100个随机数字，并显示这些数字。记录生成和显示这些值要求的总时间。

建议

可以使用6个或6个以下的对象创建这一程序。从下述对象中进行选择：

Start，For Range，Until Break，randomseed() function，random() function， Collector， Formula，Set Values，Alloc Int32，Logging AlphaNumeric，Strip Chart，Meter，Date/Time，Timer，Now()，Break，Do。

提示: 为改善性能，先使用Collector对象把数据收集到数组中，只把数据发送到显示器上一次。注意性能差异。

解决方案—收集随机数字

下图是收集随机数字练习使用的解决方案。

要点

Logging AlphaNumeric与AlphaNumeric比较:

使用Logging AlphaNumeric，作为以前的值历史显示连续输入 (Scalar或Array 1D)。使用AlphaNumeric，把来自仅一次执行(最后一次执行)的数据显示为单个值，如Array 1D或Array 2D。Logging画面显示一个没有索引值的数组；AlphaNumeric画面是同一数组，但带有可选的索引号和值。

定时端:

Do对象控制着先执行哪个对象。程序末尾从For Count对象的序列输出端中获得定时，因为该端直到已经执行了循环内部的所有对象时才会启动。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器。


随机数字发生器

随机数字发生器, 第1步

创建一个要求外部输入的随机数字发生器。在带状图上显示数字。输入应支持：

最大随机数字

最小随机数字

生成的随机数字数量

解决方案--随机数字发生器, 第1步

随机数字发生器解决方案练习的第1步如下。

要点

滑标对象的布局:

在Properties 对话框中点击Layout下的Horizontal，可以为滑标对象屏幕图选择水平格式或垂直格式。

XY Trace:

使用XY Trace，显示连续生成的数据的最新历史。

随机数字发生器, 第2步

把随机数字采集到一个数组中。找到流动平均数，并与数字一起显示流动平均数。

解决方案--随机数字发生器, 第2步

随机数字发生器解决方案练习的第2步如下。

MovingAvg(x, numPts):

这个对象位于Function & Object Browser, Data Filtering种类中。使用这个对象，同时使用感兴趣的数据点之前指定数量的数据点的平均值，平滑输入数据，计算被平滑的数据点。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字, 收 集随机数字 。


使用 Masks

使用模板

模板测试, 第1步

创建一个噪声数量可调节的50 Hz正弦波。测试有噪声的正弦波，确定其一直低于下述极限：

(0,0.5)

(2.2m, 1.2)

(7.2m, 1.2)

(10.2m, 0.5)

(20m, 0.5)

如果正弦波超过极限，那么用红色菱形标明失败点。

提示: 可以把显示格式从线变成点，从点变成菱形。(在Properties中，对每个轨迹输入选择Traces一栏，线型可以是实线、虚线、仅点等等。此外，Point Type可以只是点、菱形、框或其它形状。) 您可能会发现Comparator对象很有帮助。

解决方案--使用模板, 第1步

第1步的解决方案：

使用模板, 第2步

增加程序，计算和显示失败的百分比。

解决方案--使用模板, 第2步

这是第2步的解决方案。

要点

模板:

使用Data [image] Constant [image] Coord对象创建模板，然后把它配置给5个数组要素。输入用逗号分隔的坐标对，VEE会增加圆括号。选择x值，知道波形的时间跨度是20毫秒。此外，注意Waveform (Time)画面接受Coord数据类型作为输入。还可以使用Data [image] Build Data [image] Arb Waveform对象，通过指明波形中的点数，这个对象把Coord转换成Waveform数据类型。

Comparator:

这个对象把测试值与参考值进行对比。您再次可以比较一个波形与由坐标对组成的数组。Failures端会提供失败的数据点数组，然后可以把这个数组发送到显示画面上，用不同的颜色或不同线型高亮度显示失败的数据点。

TotSize:

这个对象提供了数组中的要素数量。由于这个数组包含着失败数量，因此把它除以原始波形中的要素总数256，再乘以100，可以得到失败百分比。

公式:

A/256*100是用来计算失败百分比的公式，因为函数发生器和噪声发生器设置成输出256个点。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，收 集随机数字

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器。


字符串和全局变量的操作

处理字符串和全局变量

通过使用字符串对象或函数，创建一个接受下述格式的用户名称的程序：<space> <firstname> <space> <lastname>。在用户输入一个名称后，程序会去掉名，只打印姓。把字符串存储到一个全局变量中。使用Formula对象检索字符串。

解决方案--处理字符串和全局变量

处理字符串和全局变量的练习方案如下图所示。

要点

字符串对象和函数:

StrTrim(str)先从名称正面和背面去掉任何空格或标签。StrPosChar(str1, " ")得到名和姓之间空格字符的索引。当然，StrLen(str)会提供字符串长度。所有这些都使用字符串对象执行，但也可以使用Formula对象内部的字符串函数完成。

Formula对象:

StrFromThru(A,B+1,C-1)从输入A中获得字符串，在输入B的空格索引中加1，从输入C的字符串长度中减1。(记住所有索引都基于零。)

设置变量:

注意可以简便地设置一个全局变量，称为lastname，然后可以在任何表达式字段中参考这个变量，如本例中的Formula对象。

优化:

可以把三个公式组合到一个公式中。建议留着strTrim()，因为其输出被多次使用，而其它输出可以组合到一个公式中，优化速度。(但这也会降低读取能力。)

另请参阅

苹果装袋程序，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，收 集随机数字,

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器。


优化技术

在本实验中，您将以两种不同的方式构建一个VEE程序，注意执行速度差异。

优化技术, 第1步

创建一个程序，通过正弦函数和余弦函数发送范围0 ?710，步进为10。把函数结果放在X对Y显示画面上。使用Timer对象，提供程序所需时间的时钟输入。(设置Trig Mode to Radians的默认首选项)

解决方案--优化技术, 第1步

下面是解决方案的第1步。

优化技术, 第2步

从第一个程序中复制所有对象。修改新的集合，把范围收集到一个数组中。现在，针对由多个点组成的数组运行正弦函数和余弦函数，并且只绘制一次。注意节约的时间。

解决方案--优化技术, 第2步

下面是解决方案的第2步。

要点

通过数组优化:

注意第1步和第2步之间的性能提高源于使用数组。在可能时，应使用数组、而不是标量值进行分析或显示结果。

X对Y显示画面:

本例使用这个画面，而不是波形或XY画面，因为X数据和Y数据不同。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，UserObjects，使用 Masks，收 集随机数字,

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器。


随机噪声UserObject

随机噪声UserObject, 第1步

创建一个生成随机噪声波形的UserObject。显示UserObject外面有噪声的波形和噪声频谱。在 UserObject外面控制下述项目：幅度, 点数, 间隔 (时间跨度), DC偏置。

备注

不要使用UserObject内部的虚拟源。使用Build Waveform和Random之类的对象创建UserObject。

解决方案--随机噪声UserObject

这是随机噪声UserObject解决方案。

解决方案--随机噪声中的NoiseGen对象

其中一种NoiseGen UserObject解决方案如下：

要点

UserObject:

注意构建的UserObject在本质上是在VEE中增加的定制对象。

Build Waveform:

这个对象从幅度值和时间跨度(y数据取样的时间长度，单位为秒)的Real数组中创建Waveform数据类型。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，使用 Masks，收 集随机数字,

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器。


使用UserFunctions

UserFunctions, 第1步

创建一个称为NoiseGen的函数，从滑标接受一个幅度值(0-1)，返回一个有噪声的波形。

不使用 Virtual Source, For Count, For Range

使用 Formula, Ramp, Build Waveform

提示: 使用randomize(array, -a,a)，其中array必须是256点，a是幅度。构建一个简单的主程序，调用这一函数，保证函数正确运行。

解决方案—UserFunctions, 第1步

这是第1步的解决方案。

要点

Ramp():

注意ramp()函数用来在randomize()的参数列表内部生成由256个点组成的数组。

构建波形:

注意默认时间跨度是20毫秒，因此只需把一个数组发送到这个对象上，就可以构建一个波形。

UserFunctions, 第2步

在同一个程序中，创建称为AddNoise的另一个函数，调用第一个函数NoiseGen。AddNoise应从NoiseGen函数向正弦波增加有噪声的波形。AddNoise应有两个输入，一个输入用于NoiseGen幅度，一个输入用于正弦波。对结果应有一个输出。

对噪声幅度使用滑标、对要增加噪声的好波形使用Virtual Source [image] Function Generator (正弦波, Freq = 100 Hz)，构建一个简单的主程序。显示得到的波形。

解决方案—UserFunctions, 第2步

这是第2步的解决方案。

UserFunctions, 第3步

在同一个程序中，再次调用AddNoise函数，这次是从Formula对象中调用，对结果取绝对值。在同一个显示画面上显示绝对值波形。然后准备编辑AddNoise函数。启动Debug [image] Show Data Flow。打开AddNoise窗口，运行程序。注意这一功能对调试的用处。

解决方案—UserFunctions, 第3步

这是第3步的解决方案。

UserFunctions, 第4步

现在改变程序，使滑尺设置一个全局变量，称为Amplitude。令NoiseGen函数使用该全局变量(因此NoiseGen不再要求一个输入端)。使程序正确运行。把这个文件另存为uflab.vee。

解决方案—使用UserFunctions, 第4步

这是第4步的解决方案。

提示: 注意Call AddNoise和Formula对象使用全局变量Amplitude，因此这两个对象需要在Set Amplitude对象执行之后运行。从Set Amplitude到Call AddNoise及从Call AddNoise到Formula连接Sequence端，保证这些对象以要求的顺序执行。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

创建操作面板和弹出面板，处理文件，记录，测试定序，测试数字，随机数字发生器, 收 集随机数字。


导入和删除UserFunctions库

构建立一个简单的程序，导入uflab.vee函数。调用该函数增加噪声，然后以程序化方式删除这个库。使用Call对象的对象菜单中的Select Function选项。

提示：在Import Library对象菜单中点击Load Lib，手动加载指定的库，从而可以使用Call中的Select Function特性。

解决方案--以程序化方式导入和删除库

下面的解决方案以程序化方式删除库。

要点

Select Function:

注意，这个选项将为选择的函数配置正确的输入端和输出端。

Editing UserFunctions:

如果以程序化方式导入一个UserFunction库，那么将不能编辑这个库。可以查看这个库，设置调试断点。如果想编辑导入的UserFunction，应使用Merge Library命令。

Set Variable Caution:

注意在函数中使用全局变量时，必须记住在其它程序中使用该函数时要创建该全局变量。明确创建输入和输出的优点之一是它们追踪起来更加简便。

另请参阅

苹果装袋程序，使用字符串和全局变量，优化技术，UserObjects，使用 Masks，处理文件，记录，测试定序，

Agilent VEE UserFunctions，创建操作面板和弹出面板，测试数字，随机数字发生器, 收 集随机数字。


创建操作面板和弹出面板

创建操作面板和弹出面板，第1步

创建一个面板，请操作人员输入数字。创建一个UserObject，与操作人员交互。请操作人员提供两个输入A和B。把两个输入都发送到显示屏上。使用UserObject，复选Show On Execute，显示面板。

解决方案--创建操作面板和弹出面板，第1步

下面是细节视图中的解决方案。

这是程序运行时出现的面板。

要点

UserObject Properties:

在UserObject Properties对话框中，选择Pop-Up Panel，点击打开Show Panel On Execute。把Pop-Up Panel [image] Panel Title名称变成 Enter A or B。

创建操作人员面板和弹出面板，第2步

如果两个数字不同，询问操作人员是显示A还是B，而不是同时显示A和B。在询问两个值后，如果A值和B值相等，显示取值。如果A值和B值不同，让操作人员选择一个值进行显示。根据操作人员选择，显示A或B。

提示: 增加另一个UserObject，其中弹出面板设为Show Panel on Execute，询问操作人员取值。

解决方案--创建操作人员面板和弹出面板，第2步

这是在A和B是不同数字时请操作人员进行选择的UserObject。

出现的询问操作人员是显示A还是B的第二个弹出面板如下。

要点

Gate:

Gate对象只在两个数字相等时才发送一个值。

Junction:

JCT对象允许在Alphanumeric对象中有多个输入。JCT对象是一个线或对象。

作为菜单列出对象:

注意使用为两个选项编辑的、为列表格式化的Data [image] Selection Controls [image] List对象。这一配置将输出文本A或B。如果需要序数值(0或1)，那么应使用List对象的序数数据输出。

创建操作人员面板和弹出面板，第3步

如果操作人员没有输入数字，那么会生成错误信息。第二个UserObject在两个数字不同时请操作人员选择显示A还是显示B，在第二个UserObject上增加一个错误。如果操作人员在10秒内没有选择A或B，会生成错误。

解决方案--创建操作人员面板和弹出面板，第3步

如果操作人员在10秒内没有选择A或B，修改后生成错误的UserObject如下。

要点

退出UserObject:

如果用户在不到10秒内应答，那么这个对象将退出UserObject，即使Delay对象可能没有执行完毕。

Delay和Raise Error:

在10秒后，Delay对象ping通Raise Error对象，后者会暂停执行程序，显示已经输入的错误信息。在导致错误的对象周围会出现一个红色外框，在点击主菜单条上的Stop按钮或Run按钮时，这个红色外框会消失。

OK和Delay:

注意AnotB中的两个线程是不同的，以便OK和Delay并发运行。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，处理文件，记录，测试定序，测试数字，随机数字发生器, 收 集随机数字。


在文件中移入和移出数据

创建一个VEE程序，把时间写入一个文件中。生成100个随机点，把它们写入到文件中。计算这些数字的中间值和标准偏差，使用下述格式把它们追加到文件后面：

中间值: xxxxxx

标准偏差: yyyyyy

然后，只从文件中读取中间值和标准偏差。

解决方案--在文件中移入和移出数据

下面是在文件中移入和移出数据的解决方案。

要点

生成一个数组:

使用Formula对象中的randomize(ramp(100,0,1), 0, 1)，创建一个由100个随机数字组成的数组。ramp()函数生成有序数组，把它传送到randomize()函数，然后这个函数生成0-1之间的随机值。

时戳:

对To File对象中的第一个处理，now()函数用于I/O Transaction对话框的表达式字段中。在把格式变成TIME STAMP FORMAT时，这个对话框会显示额外的按钮，指明将怎样存储时间。

在一行中存储两个值:

在To File对象的第三个处理和第四个处理中，都存储一个常数Text字符串，后面跟着一个实数值。例如，在第三个处理中，输入"Mean: ", 在I/O Transaction框的表达式字段中输入B (假设中间值将在B输入端上)。

从文件中提取一个值:

为到达中间值和标准偏差，先发送一个EXECUTE REWIND，在开头定位读取指针。然后使用NULL及正确格式，READ经过的时戳和实数数组。(这会丢掉已读取的值，而不是把它们放到输出端中) 最后，作为字符串读取文件中的最后两行。

Junction:

使用Flow [image] Junction对象，把一个以上的输出连接到一个输入上，如把中间值和标准偏差输出连接到Logging AlphaNumeric显示屏上。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，记录，测试定序，测试数字，随机数字发生器,

收 集随机数字。


处理纪录

处理记录

处理记录, 第1步

构建一个记录，其中包含三个字段：整数，当前时间字符串，以及由实数构成的有4个元素的数组。这些字段应分别命名为int, daytime, 和array。把这条记录与包含0-1之间的一个随机数字和一个波形的另一个记录合并在一起。把这些字段命名为rand和wave。

解决方案--处理记录, 第1步

得到的记录应该有五个字段。

要点

时戳:

使用To String对象内的now()函数，为这个程序创建时戳。然后可以指定其格式。

把数据常数配置为数组:

通过选择 Properties，然后在Configuration下选择1D Array，可以把Data [image] Constant菜单中的任何数据类型转换成一个数组。在这里可以输入长度，或者在输入值时，可以使用Enter追加值。

命名字段:

通过在Build Record对象上重命名输入端，可以为记录提供特定的字段名称，如int, rand和wave。

默认值控制输入:

通过增加一个Default Value Control端，Record Constant构成了一个完美的交互显示对象。Record Constant会针对收到的记录自动进行配置。

处理记录, 第2步

在Formula对象中使用条件表达式，测试记录中的随机值，显示值或文本字符串。如果值小于0.5，那么显示该随机值；否则输出一个文本字符串 揗ore than 0.5"。然后，只提取时间和波形。

提示：不要使用Formula对象提取时间和波形。使用AlphaNumeric对象显示这一记录。

解决方案--处理记录, 第2步

处理记录的解决方案第2步如下图所示：

要点

使用条件表达式:

VEE支持条件表达式，为实现if-then-else操作提供了有效的方式。这个Formula对象中的条件表达式称为三元组，它是(a.rand < 0.5? a.rand: "More than 0.5")。注意这是一个表达式，可以如图所示在Formula对象中使用断行编写这个表达式。如果在Formula对象中有一个以上的表达式，那么表达式之间使用分号(;)分开。

Sub Record对象:

注意标有Sub Record输入端的字段上的Text字段数组。在把Sub Record对象配置成包括多个字段时，它将输出一条记录，其中只包含指定的字段。

处理记录, 第3步

用For Count对象代替第一个字段的整数输入，重复10次。在每次重复时一定要ping随机数字发生器和时间函数。把完整的记录发送到To DataSet对象中。在单独的线程中，在随机值大于0.5的数据集中检索所有记录。把得到的记录放到记录常数中。

提示：对Record Constant对象上的默认值，您需要一个控制端。

解决方案--处理记录, 第3步

处理记录的解决方案第3步如下图所示：

要点

To DataSet对象:

Clear File at PreRun选项只清除第一次发送数据前的文件。注意，程序会顺序向同一个文件发送10条不同的记录，这些记录追加到文件后面。

From DataSet对象:

这个对象配置成在rand字段大于0.5时检索所有记录。在本例中，10条记录中有5条记录满足标准，显示了第一条记录，索引号为0。

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，测试定序，测试数字，收 集随机数字,

随机数字发生器。


测试定序

使用测试定序器, 第1步

创建一个简单的UserFunction，称为UpperLimit，这是一个带有Real64 Slider和Confirm (OK)对象的弹出面板。把滑标的输出发送到称为UpLimit的全局变量上，同时把它发送到一个输出端上。创建一个Sequencer对象，在Sequencer中把test1配置成调用UpperLimit的EXEC处理。

创建另一个函数，称为AddRand，模拟您可能会调用的测试。这个函数应在随机值(0 - 1)中增加一个输入值。它有一个输入端和一个输出端。

从Sequencer中，创建test2调用AddRand，递送一个零。测试返回值，把它与小于全局UpLimit值的极限进行对比。如果通过，那么返回"PASS" + test2.result。如果未通过，返回"FAILED" + test2.result。把字母数字显示放在Sequencer的Return端。

在Sequencer对象后，ping Get Variable对象 (UpLimit)和另一个字母数字显示。多次运行程序。

解决方案--使用测试定序器, 第1步

这是使用Sequencer的第1步的解决方案。

要点

使用UserFunction设置全局变量:

第一个Sequencer处理的典型用途是调用一个UserFunction，设置全局变量，如本例所示。然后可以在之后的任何测试中使用这些变量，如本例所示。

Sequencer Return端:

本例中的Return端提供了PASS或FAIL信息及测试值。可以使用这个端从特定测试中提供任何信息或值。

使用测试定序器, 第2步

使第一项测试失效。假设在任何其它地方不需要全局变量，可以直接调用UpperLimit函数。改变test2，以便能够对比AddRand(0)的返回值与UpperLimit函数结果。

提示: 为使第一项测试失效，使用下面的Sequencer Transaction对话框。

注意在上图中，Sequencer中的第一项测试以两条斜线开始，表明其已经失效。

解决方案--使用测试定序器, 第2步

使用测试定序器第2步的解决方案如下。

要点

表达式字段中的UserFunction:

在本例中，可以在变量将指向的表达式字段中输入函数名称UpperLimit()，而不是对比测试结果与UpLimit变量。

使用测试定序器, 第3步

编辑test2 Sequencer处理，调用VEE函数random (0,1)。把结果与小于0.5的极限值进行对比。剪切和粘贴test1处理，直到总共获得4项测试。

构建一个程序，运行Sequencer五次。在记录数据集中记录数据，在数组中采集数据。使用数组，找到第二项测试结果的最小值、最大值、中间值和标准偏差。

解决方案--使用测试定序器, 第3步

第3步的解决方案如下。

要点

多次运行Sequencer的数据格式(第一个线程):

在Sequencer执行一次时，它会输出一个Record of Records。第一个记录的字段名称与测试名称相匹配，然后每个字段保持一条记录，其中包含该特定测试的不同的各个数据。在Sequencer多次运行时，每个Record of Records被增加到一个数组中，然后可以考察这个数组。如果在Formula对象中使用<record>[*].<record>.<field>格式，那么可以得到一个数据数组。在这种情况下，会得到一个由实数值组成的数组，提供五次运行test2的测试结果。然后可以从这个数组中计算最小值、最大值、中间值和标准偏差。通过在记录的记录数组中指明某个要素，可以指明一轮test2。例如，为获得test2的第一轮结果，可以使用表达式：A[0].test2.result。

使用测试定序器, 第4步

在登录记录中增加一个时戳字段。增加一个延迟，使每步之间的运行间隔为一秒。在单独的线程中，获得test2的所有测试结果，把它们发送到一个记录常数中。

Delay对象 (第一个线程):

这个对象在指定秒数内保持执行流程。在这里，它用来保证时戳值在每次运行Sequencer时变化。

增加一个时戳:

为增加一个时戳，打开Sequencer对象菜单，选择Properties [image] Logging一栏，复选Record Fields to Log [image] Time Stamp。出现下述Properties [image] Logging一栏的对话框。

解决方案--使用测试定序器, 第4步

使用测试定序器第4步的解决方案如下。

提示: 为显示一条记录，点击其中一项测试的Record [image] Record: Scaler字段，出现下述Record Field Data对话框。

使用测试定序器, 第5步

在Logging Alphanumeric画面上，从记录中打印时戳字段。

提示: 使用4个Formula对象(每项测试一个)。为在一个Logging Alphanumeric画面中显示全部4个Formula结果，增加一个Junction对象。使用To String，把63G时戳值格式化成更加可读的字符串。

解决方案--使用测试定序器, 第5步

下图是使用测试定序器第5步--把时戳打印到显示屏上的程序线程。

要点

转换时戳格式:

Logging AlphaNumeric前的To String对象把时戳从Real格式转换成Time Stamp格式，以便更加清楚。

使用测试定序器, 第6步

如果Sequencer包括多项测试，那么使用连接到Junction的多个Formula对象可能会非常麻烦。相反，可以使用一个包含表达式的Formula，在运行时生成表达式，循环通过可能的表达式。

首先，范例将生成表达式字符串。

在另一个线程中，使用一个Loop和一个Formula，生成一个测试表达式字符串。作为Logging Alphanumeric中的字符串输出信息。Formula中生成的字符串应该是"a[*].test<x>.timestamp"，其中<x>从1到4。

解决方案--使用测试定序器, 第6步

第6步的解决方案是：

使用测试定序器, 第7步

现在使用第6步中构建的Loop和Formula，用这个Loop和Formula代替上一步中的4个Formula和Junction。此外，您现在想求解构建的字符串。把生成的字符串(表达式"a[*].test<x>.timestamp")发送到运行时求解的Formula中。

Formula对象上的公式控制端:

您想要求解的Formula由Loop内部的Formula生成。您可以对其Formula表达式使用控制输入生成第二个Formula对话框。第二个Formula求解的表达式在运行时生成。

解决方案--使用测试定序器, 第7步

第7步的解决方案是：

要点

  • To String对象仍用来把Real64格式化成时戳格式。

  • 注意第一个"生成" Formula和第二个"求解" Formula之间的序列行。这保证只有在得到新的要求解的字符串时才会执行第二个Formula。

使用测试定序器, 第8步

只显示测试1通过、测试2未通过的记录。

解决方案--使用测试定序器, 第8步

使用测试定序器的最后一步的解决方案如下。

要点

From Data Set对象上的EOF端 (第二个线程):

在没有符合标准的记录时，会增加EOF端。如果发生这种情况，那么EOF端将启动，而不是VEE中断程序及显示错误信息。

From Data Set对象中的条件表达式 (第二个线程):

表达式是(Rec.test1.pass==1) OR (Rec.test2.pass==0)，采用相同的<record>.<record>.<field>格式。Rec是读取和测试时数据集中每条记录的名称。Test1和test2指明VEE应检查哪些测试，字段名称pass是VEE指配的通过-未通过指示(1或0)的默认名称。(通过在Sequencer Properties对话框中选择Logging一栏，可以对所有测试启用或禁用不同的字段。)

另请参阅

苹果装袋程序，使用字符串和全局变量，导入和删除UserFunctions库，优化技术，UserObjects，使用 Masks，

Agilent VEE UserFunctions，创建操作面板和弹出面板，处理文件，记录，测试数字，随机数字发生器,

收集随机数字。


VEE 范例程序指南

本指南总结了所有和Agilent VEE Pro一起发布的 VEE 范例程序。 这些范例演示了许多实用的编程技巧。它们被分类列在下表中。

点击每个分类可以查看程序列表和它们的简介。点击每个VEE 程序旁的按钮会在一个新的 VEE 窗口。

范例 | 描述
.NET Examples | 包含多个.NET 范例，演示了.NET的强大和灵活。这些范例按难度分类。
ActiveX Controls | 一组ActiveX 范例程序，演示了如何使用一些典型的 ActiveX 控件。
Analysis | 一组演示 VEE 的数据分析能力的范例程序。
Electrical Applications | 这组范例演示了如何创建和拆分时域波形，DS1 Pulse Template 测试模拟， 和 lissajous 模式的产生。
Dynamic I/O Configuration | 一组演示如何使用 VEE 来查找本地或远程仪器的范例。
Excel Library | 这组范例程序演示了如何使用 Excel 向 Excel 发送数据或从 Excel 都回数据，如何格式化 Excel 单元格，以及如何绘制 Excel 图表。
Financial Applications | 演示了如何进行包括 NPV，投资回收率和未来值在内的通用财务计算。
Games | 这组游戏以一种有趣的方式演示了 VEE 的各种基本和高级功能。
Instrument Manager Integrated Examples | 一组集成在 Instrument Manager 中的范例程序。
Instrument Measurements | 一组演示如何进行各种仪器测量的范例程序，涵盖了十几种仪器。
IVI Driver Example | 一组演示使用电压表和频谱分析仪的 IVI 范例程序。
Manufacturing Applications | 一组演示如何在制造应用程序中使用 VEE 的范例程序。包括数字型 VEE 对象和序列的使用。
MATLAB Script | 一组使用 MATLAB 的范例，它们演示如何使用 MATLAB 扩展 VEE 应用程序的功能。
Mechanical Applications | 一组使用机械工程问题演示 VEE 的功能的范例程序。
Microsoft Access | 一组使用 ActiveX 与 Access 进行交互的范例程序。演示了如何传送数据到数据库中并进行显示。
Microsoft Excel | 一组使用 ActiveX 与 Excel 进行交互的范例程序。 演示了如何插入随即数据，数组合图表数据。
Microsoft Outlook | 一组使用 ActiveX 与 Outlook 进行交互的范例程序。 演示了如何发送邮件
Microsoft Word | 一组使用 ActiveX 与 Word 进行交互的范例程序。 演示了如何插入数据和位图，如何查找和替换，以及如合并邮件。
Old VEE RPC API | 一组旧的 VEE 远程过程调用库。
Programmatic Properties | 一组演示如何使用Programmatic Properties的范例
VEE Lib Examples | 一组位于 VEE Lib 目录的范例程序。
VEE Programming Concepts | 一组用 VEE 对象演示 VEE 基本概念的范例程序。
Visual Basic | 该范例合成一个脉冲并在时间范围内进行显示。
VB Script | 一组演示各种 VB Script 使用的范例。包括 DS1 脉冲测试，可调用的 VEE 服务器信息，等等。
Visual C++ | 一个演示 DS1 脉冲测试的范例。
Windows Forms Controls | 一组演示如何在 VEE 中使用 Windows Forms 控件的范例。

注释

examples\Manual 目录下的范例程序未包含在上表中。


重命名的范例文件

VEE 6.0/6.2 | VEE 7.0 | VEE 7.5
Access97DataClient.vee | Access97DataClient.vee | AccessDataClient.vee
Access97Enumerate.vee | Access97Enumerate.vee | AccessEnumerate.vee
Excel97Graph.vee | Excel97Graph.vee | ExcelGraph.vee
Excel97a.vee | excela.vee | ExcelInsertData.vee
Excel97b.vee | Excel97b.vee | ExcelInsertArrayData.vee
 | Excela UFunction.vee | ExcelUFunction.vee
 | Excel97a UFunction Lib.vee | ExcelUFunctionLib.vee
Excel97Weather.vee | Excel97Weather.vee | ExcelWeather.vee
 | LabVIEW.vee | LabVIEW.vee
Outlook97.vee | Outlook97.vee | OutlookSendMail.vee
Word97.vee | Word97.vee | Word.vee
Word97DataSheet.vee | Word97DataSheet.vee | WordDataSheet.vee
Word97MailMerge.vee | Word97MailMerge.vee | WordMailMerge.vee


.NET 范例

Microsoft .NET 范例

范例名称

描述

参考的 Assemblies/
Namespaces/Classes

Difficulty

ComputingHash.vee

演示如何计算一个VEE记录内容的hash。 这VEE纪录和hash保存与一个外部文件。然后重新读这个文件。纪录的hash将根据文件中的内容会重新计算并与文件中保存的hash进行比较。这是一个验证文件内容是否被改变的简便方法。

Assemblies: mscorlib

Namespaces: System. System.Text, System.Security.Cryptography

Classes: System.Security.Cryptography.SHAManaged, System.Text.Encoding

3

DatabaseReadUsingDataset.vee

演示如何使用 OleDbConnection, OleDbAdapter, 和 Dataset 类创建一个多个数据库表的in-memory副本。

Assemblies: mscorlib, System.Data

Namespaces: System, System.Data, System.Data.OleDb

Types: System.Data.OleDb.OleDbConnection, System.Data.OleDb.OleDbAdapter, System.Data.Dataset

2

DatabaseReadUsingOleDbReader.vee

演示如何使用OleDb 连接，命令和数据读取器类从一个Access数据库文件中查询信息。

Assemblies: mscorlib, System.Data

Namespaces: System, System.Data, System.Data.OleDb

Types: System.Data.OleDb.OleDbConnection, System.Data.OleDb.OleDbCommand, System.Data.OleDb.OleDbDataReader

2

DateTime.vee

演示了内置的 .NET Framework 的函数DateTime，比如，过的当前的日期和时间，星期，年，以及查询是否是一个闰年等等。

这个程序也是很好地演示了如何在 VEE 中同时使用和调用静态和实例成员。导入System namespace 是为了保存一些类型。

Assemblies: mscorlib

Namespaces: System

Classes: System.DateTime, System.DayOfWeek

1

DateTimeConversion.vee

演示了如何在 .NET DateTime 和 VEE time 之间转换。它还演示了如何使用新的 asClrType 类型转换函数。注意，使用.NET 的 DateTime 类, 可以很方便地把 UTC 时间转换为当地时间。导入 System namespace 是为了保存一些类型。另外，每一个.NET 的对象都至少有一个 ToString 方法用于生成格式完美的对象信息的打印输出。从本例可以看出它的功能的强大。

Assemblies: mscorlib

Namespaces: System

Classes: System.DateTime

2

DeleteDir.vee

演示查询目录是否存在，创建多层目录，以及删除全部目录的方法。 .NET Framework 中有许多易于访问的系统管理函数，可以将这个小程序作为一个入门介绍。FileOperations.vee 是一个更为复杂的程序。浏览 System.IO namespace 下的类，可以给你一个全局的介绍。MSDN 中也会有更详细的介绍。

Assemblies: mscorlib

Namespaces: System.IO

Classes: System.IO.Directory

1

DiskInfo.vee

演示如何获得磁盘的大小和空余空间。这曾经是一个重要的任务，它包括导入kernel32.dll 并唤起 Win32 API 调用。 比较该程序与 examples\contrib\Win32\kernel32.vee。这个程序还查询许多其他的磁盘信息。请参阅用户函数 show_all_diskproperties。这个程序还是一个演示如何访问和枚举 .NET collection 的好例子。

Assemblies: mscorlib, System.Management

Namespaces: System, System.Management

Classes: System.Management.ManagementObject

3

DrawOnBitmap.vee

演示如何按规定的大小和类型创建一个位图，并使用 System.Drawing.Graphics 对象在它上面绘图，然后把画好的位图保存到一个制定的文件，最后用 VEE 的图片对象显示该位图。这个范例中有两个关键概念。第一个是使用静态方法 System.Drawing.Graphics.FromImage() 从位图获得一个图形对象。 如果位图类是来源于 System.Drawing.Image 类，那么就可以把一个位图的实例转递到这个函数。你一旦有了一个图形对象，你就能在上面画许多你需要的东西。 第二个概念是要 Dispose 任何显式创建的绘图对象。在本例中，使用 FromImage 建立the Graphics 对象，创建的字体和图形对象都被 disposed。否则，VEE 程序会占用大量 GDI 资源而影响程序性能。

Assemblies: mscorlib, System.Drawing

Namespaces: System.Drawing, System.Drawing.Imaging

Classes: System.Drawing.Bitmap, System.Drawing.Graphics, System.Drawing.Font, System.Drawing.Brushes, System.Drawing.Pens, system.Drawing.Imaging.PixelFormat, System.Drawing.Imaging.ImageFormat

3

Environment.vee

使用.NET Framework, 可以很容易地获得有关程序环境的信息，比如，当前目录，名列行，机器和用户名等等。

这个程序也很好地演示了如何从调用静态成员。

Assemblies: mscorlib

Namespaces: System

Classes: System.Environment

1

EnumboundtoSelectionControl.vee

演示如何将 VEE 选择控件做成一个下拉框，包括一个.NET 枚举中所有的枚举值， 然后，再把这个 VEE 下拉框的输出值转换成.NET 枚举中的值。

Assemblies: mscorlib

Namespaces: System

Classes: System.Enum

1

EnumerateEnums.vee

演示了一些可以用 .NET Enumeration 来完成的有趣的事情。这个程序先获得 System.FileAttributes 的类型，然后用那个类型循环整个枚举，最后再打印出那些枚举的文字或数字值。这个范例还可以用于任何 .NET Enum 类型的 EnumNamesAndValues 用户函数，而不是只能用于 System.FileAttributes 类型。

Assemblies: mscorlib

Namespaces: System

Classes: System.Enum, System.FileAttributes

3

FileInfo.vee

演示了如何简单地获得文件的属性，比如，创建时间，最后访问时间，文件长度以及是否为只读。注意 System 和 System.IO 名域的导入是为了保存一些类型。

IsFileReadOnly 用户函数也演示了如何对.NET Enums 做位操作，如何使用 System.Convert 类把一个 .NET 类型转换为另一个 .NET 类型。

Assemblies: mscorlib

Namespaces: System, System.IO

Classes: System.Convert, System.FileInfo, System.FileAttributes

2

FileOperations.vee

演示 VEE 如何使用 .NET Framework 的 File 和 Directory 类。首先，它获得了一个通常位于 "document settings\username" 目录下的目录，然后在 Personal Folder 下创建一个目录树，如果没有的话。之后，在那个目录下创建一个文本文件并写入一个格式化的行。最后打开该文件读。这个程序同时也演示了如何得到机器上的所有逻辑驱动器。

Assemblies: mscorlib

Namespaces: System.IO

Classes: System.IO.Directory, System.IO.File, System.IO.Path, System.IO.StreamWriter

2

GetStockQuote.vee

演示了如何用10行代码获得股票报价。 只需输入要查询的股票的订单代号，就可以得到20分钟延迟的报价。

这个范例可以用 .NET Framework 完成的一些事情。比如，web 请求和相应，读一个流，通过正常的表达式进行字符串匹配。

Assemblies: mscorlib, System

Namespaces: System.Net, System.IO, System.Text.RegularExpressions

Classes: System.Net.WebRequest, System.Net.WebResponse, System.IO.Stream, System.IO.StreamReader, System.Text.RegularExpressions.Regex

3

HashTable.vee

演示了 .NET Framework 中的一个内置数据结构。hash 表是一个关键字的集合，根据关键字的 hash 码来组织值对。Hash 表可以使用比数组更为有效的查找算法。只要关键字实现两个方法(GetHashCode 和 Equals)，就可以根据类型来保存任何类型的对象。这个范例演示了如何添加关键字和值对，如何获得所存储的项的数量，查找一个关键字是否存在于 hash 表中，以及如何基于关键字查找，等等。

Assemblies: mscorlib

Namespaces: System.Collections

Classes: System.Collections.Hashtable

1

IPAddress.vee

演示如何简单地获得机器的 IP 地址。 也演示了如何使用 GetValue Array 方法访问一个 .NET 对象。

Assemblies: mscorlib, System

Namespaces: System.Net

Classes: System.Net.Dns, System.Net.IPHostEntry, System.Environment, System.Array

1

PasswordManagement.vee

演示如何创建一个简单的用户和密码登陆系统。

Assemblies: mscorlib

Namespaces: System, System.Security.Cryptography

Types: System.Security.Cryptography.SHA1CryptoServiceProvider, System.Convert

2

ProcessInfo.vee

演示如何获得与过程有关的信息， 比如：虚拟内存大小，全部处理器时间，句柄数，优先级，开始时间，线程数，线程号，线程状态和线程优先级。

Assemblies: mscorlib, System

Namespaces: System, System.Diagnostics

Classes: System.Diagnostics.Process, System.Threading.Thread

2

Registry.vee

演示如何使用 .NET Framework 类来访问注册表。这曾经是一个需要导入 advapi32.dll 并唤起一些难于理解的 WIN32 API 调用。 请把这个范例与 examples\contrib\advapi32.vee 比较。

Assemblies: mscorlib

Namespaces Microsoft.Win32

Classes: Microsoft.Win32.Registry, Microsoft.Win32.RegistryKey

1

SelectFiles.vee

演示如何使用 .NET Framework 中内置的对话框。本例中，OpenFileDialog 类用于显示一个 Windows 标准的打开文件对话框。其它类，比如 SaveFileDialog, PrintDialog, ColorDialog, FontDialog, 等的使用也很简单。使用VEE 的 File Name Selection 对话框也可以，但是 .NET 的 OpenFileDialogBox 提供更多的灵活性。比如，可以很容易地打开文件多选功能。

Assemblies: System.Windows.Form

Namespaces: System.Windows.Form

Classes: System.Windows.Forms.OpenFileDialog

1

SelectFolder.vee

演示如何选择一个目录而不选择一个文件。

Assemblies: mscorlilb

Namespaces: System, System.Windows.Forms

Classes: Systems.Windows.Forms.FolderBrowserDialog, System.Environment.SpecialFolder

1

Sendmail.vee

演示如何用 .NET Framework 发送邮件。 这个范例和 lib\SmtpMail.vee 的功能相同，只是更为简单。使用 .NET，可以只用不超过8行的代码来发送邮件。

Assemblies: System.Web

Namespaces: System.Web.Mail

Classes: System.Web.Mail.SmtpMail

2

SendMailWithAttachments.vee

演示如何使用.NET来发送带附件的邮件。

Assemblies: System.Web

Namespaces: System.Web.Mail

Classes: System.Web.Mail.SmtpMail

1

SpecialFolders.vee

演示如何得到机器上的目录的路径。这曾经是一个需要导入 shfolder.dll 并唤起 Win32 API 调用。请比较该程序与 examples\contrib\win32\shfolder.vee

注意，导入了名域。

Assemblies: mscorlib

Namespaces: System

Classes: System.Environment, System.Environment.SpecialFolder

1

Stack.vee

演示了 .NET Framework 的一个内置数据结构。堆栈是一个后进先出的结构，它和先进先出的队列正好相反。这个范例演示了如何添加（压）对象到堆栈和删除（弹出）对象。

Assemblies: mscorlib

Namespaces: System.collections

Classes: System.Collections.Stack

1

StringOperations.vee

演示了使用.NET 方法的各种字符串操作。

Assemblies: mscorlib

Namespaces: System

Classes: System.String

1

StringSplit.vee

演示了使用定界符将一个字符串分为多个的方法。

.NET System.String 类有许多有用的功能。VEE 自动将 .NET 字符串转换为 VEE 文本。有时，为了使用 .NET 对象的那些功能，也可以把一个String 当作一个.NET 对象。 这个范例演示了如何把一个 VEE 文本转换为 .NET 字符串。它还演示了如何将一个 VEE 文本数组转换为一个.NET System.Char数组。

该范例还很好地演示了如何使用 AsClrType 类型转换功能。

Assemblies: mscorlib

Namespaces: System

Classes: System.String, System.Char

2

TextEncodedBInary.vee

演示了如何使用 .NET Framework 类来把二进制数据编码为使用 Base64 的文本，然后把这个 Base64 的文本再变回为二进制形式。在没有权限访问文件附件时，该技术可以用于把一个二进制文件当作文本来发送。

Assemblies: mscorlib

Namespaces: System

Classes: System.Convert

2

TimeZone.vee

演示了System.TimeZone 对象的使用。

  • 获取当前时间的 UTC 偏移量。

  • 判断一个时间是否为夏时制

  • 获取夏时制时段的名称。

  • 获得标准时间时段的名称。

  • 获取夏时制开始和结束的时间。

Assemblies: mscorlib

Namespaces: System, System.Globalization

Classes: System.TimeZone, System.Globalization.DaylightTime

1

UsingTemperatureWebService.vee

演示如何使用一个Web 服务。

Assemblies: TemperatureService

Namespaces:

Classes: TemperatureService

2

UsingTerraServerWebService.vee

演示如何使用一个Web 服务。

Assemblies: mscorlib, TerraService

Namespaces: System, Agilent.VeeExample

Classes: TerraService, Place, TileId

2

WhichOS.vee

演示如何获得操作系统的版本和平台信息。

The README details the steps to reproduce the example.

Assemblies: mscorlib

Namespaces: System

Classes: System.Environment, System.OperatingSystem

1

WriteEventLog.vee

演示了如何使用 System Menu 的 Write to Event Log 对象把 VEE 的错误信息记录到 Application 事件日志中，然后再从日志中把它们读回来。

Assemblies: mscorlib, System

Namespaces: System.Diagnostics

Types: System.Diagnostics.EventLog

1

XmlReadingUsingXmlTextReader.vee

演示了如何通过 System.IO.StringReader 读取 XML。

Assemblies: mscorlib, System.Xml

Namespaces: System, System.IO, System.Xml

Types: System.IO.StringReader, System.Xml.XmlTextReader

2

XmlSearchingUsingXPathNavigator.vee

演示了如何把 XML 读到 XPathDocument，然后创建一个 XPathNavigator .

Assemblies: mscorlib, System.Xml,System.Xml.XPath

Namespaces: System, System.IO, System.Xml, System.Xml.XPath

Types: System.IO.StringReader, System.Xml.XPath.XPathDocument, System.Xml.XPath.XPathNavigator, System.Xml.XPath.XPathNodeIterator

2

*难度级别标记为1到3。1级最简单且需要最少的.NET 和 VEE 的经验。


.NET Controls 范例

范例名称 | 描述 | 参考的 Assemblies/ Namespaces/Classes
Button.vee | 演示如何使用一个Windows Forms Control Button | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: Button
CheckBox.vee | 演示如何使用一组Windows Forms controls, GroupBox 和 CheckBox，以及如何使用其它控件创建合成控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: GroupBox and CheckBox
CheckListBox.vee | 演示如何使用一组 Windows Forms 控件, CheckListBox 和 Label。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: CheckedListBox and Label
ComboBox.vee | 演示如何使用一组 Windows Forms 控件, ComboBox 和 Label。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: ComboBox and Label
ContainerControl.vee | 演示如何使用一组 Windows Forms 控件, DataGrid 和ContainerControl。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: DataGrid and ContainerControl
CustomCounter.vee | 演示一个定制的控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms
CustomFolderTreeView.vee | 演示一个定制的控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms
CustomGrid.vee | 演示一个定制的控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms
CustomProgressBarImage.vee | 演示一个定制的控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms
DataGrid.vee | 演示如何使用一组 Windows Forms 控件, DataGrid 和 ContainerControl。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: DataGrid and ContainerControl
DateTimePicker.vee | 演示如何使用一组 Windows Forms 控件, DateTimePicker 和 Label。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: DataTimePicker and Label
DomainUpDown.vee | 演示如何使用DomainUpDown 控件. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: DomainUpDown
GroupBox.vee | 演示如何使用一组 Windows Forms 控件, GroupBox 和 RadioButton，以及如何使用其它控件创建合成控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: GroupBox and RadioButton
GroupRadioAndCheckbox.vee | 演示如何使用三个Windows Forms 控件, GroupBox, CheckBox, 和 RadioButton。 | Assembly: System.Windows.Forms and System.Drawing Namespaces: System.Windows.Forms and System.Drawing Types: CheckBox, GroupBox, RadioButton and Point
HScrollBar.vee | 演示如何使用三个Windows Forms 控件, HScrollBar, VScrollBar, 和 Label. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: HScrollBar, VScrollBar, Label
LinkLabel.vee | 演示如何使用Windows Forms 控件, LinkLabel. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: LinkLabel
ListBox.vee | 演示如何使用Windows Forms 控件, ListBox and Label. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: ListBox and Label
ListView.vee | 演示如何使用Windows Forms 控件,ListView. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: ListView
MenuStrip.vee | 演示如何使用Windows Forms 控件, Menustrip. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type:MenuStrip
MonthCalendar.vee | 演示如何使用Windows Forms 控件, MonthCalendar. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: MonthCalendar
NumericUpDown.vee | 演示如何使用Windows Forms 控件, NumericUpDown. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: NumericUpDown
Panel.vee | 演示如何使用Windows Forms 控件, Panel. 以及如何使用创建合成控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: Panel and CheckBox
PictureBox.vee | 演示如何使用Windows Forms 控件, PictureBox. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: PictureBox
ProgressBar.vee | 演示如何使用Windows Forms 控件, ProgressBar. | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: ProgressBar
RadioButton.vee | 演示如何使用Windows Forms 控件, GroupBox 和 RadioButton，以及如何使用其它控件创建合成控件。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: GroupBox and RadioButton
RichTextBox.vee | 演示如何使用Windows Forms 控件, RichTextBox。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: RichTextBox
Splitter.vee | 演示如何使用Windows Forms 控件, Splitter, Panel, TreeView, 和 ListView。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: Splitter, Panel, TreeView, and ListView
StatusBar.vee | 演示如何使用Windows Forms 控件, StatusBar。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: StatusBar
TabControl.vee | 演示如何使用Windows Forms 控件, Tab Control，以及如何创建一个包含TabPage的合成控件。该TabPage则包含Button, CheckBoxes, 及 RadioButtons。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: TabControl, TabPage, Button, RadioButton, and CheckBox
TabPage.vee | 演示如何使用Windows Forms 控件, Tab Control，以及如何创建一个包含TabPage的合成控件。该TabPage则包含Button, CheckBoxes, 及 RadioButtons。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: TabControl, TabPage, Button, RadioButton, and CheckBox
TextBox.vee | 演示如何使用Windows Forms 控件, TextBox。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: TextBox
ToolStrip.vee | 演示如何使用Windows Forms 控件, ToolStrip。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Type: TooStrip
TrackBar.vee | 演示如何使用Windows Forms 控件, Label 和 TrackBar。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: Label and TrackBar
TreeView.vee | 演示如何使用Windows Forms 控件, TreeView 和 Label。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: TreeView and Label
VScrollBar.vee | 演示如何使用Windows Forms 控件, HScrollBar, VScrollBar, 和 Label。 | Assembly: System.Windows.Forms Namespace: System.Windows.Forms Types: HScrollBar, VScrollBar, and Label


ActiveX Controls范例

ActiveX 控件
examples\ActiveXControls

必须在程序正确运行前，在你的系统上安装下面的ActiveX 控件。

1. ActiveMovie 控件

2. Microsoft Common Dialog 控件

3. ListView 控件

4. ProgressBar 控件

5. Microsoft RichTextBox 控件

另外，在VEE中使用ActiveX automation，需先安装 Microsoft Office 2000 或之后的版本。

ActiveX Control 范例
 | 范例名称 | 描述
1 | ActiveMovie.vee | 演示如何使用ActiveMovie控件现实一个电影文件。
2 | CommonDialog.vee | 演示如何象在Common Dialog ActiveX控件中一样使用多个Windows通用对话框。
3 | ListView.vee | 演示由comctl32.ocx提供的ListView 控件的使用。
4 | ProgressBar.vee | 演示由comctl32.ocx提供的ProgressBar 控件的使用。
5 | RichTextBox.vee | 演示如何先将RTF文本放入RichTextBox控件，然后将该文本保存在VEE程序中以避免在在发布程序时，单独发布.rtf文件。

另请参阅

Releasing ActiveX References


Analysis 范例

Analysis
examples\Analysis

Analysis 范例
范例名称 | 描述
AnalogFilter.vee | 演示如何显示一个滤波器的转换功能，和如何使用数组而不是循环。
curvefit.vee | 演示实现curve fitting的各种regression方法。
magDist.vee | 演示使用magDist()功能产生数据的点分布histogram。
mixer.vee | 演示如何： 使用 Virtual Source仿真信号。 从一个复杂的数据结构中获得数据。
psk.vee | 演示如何使用非传统的方法使用各种对象实现消息的编码/解码方案。
ReadMarkerValues.vee | 演示如何使用两个UserFunctions设置XY Trace显示的marker，然后再读回该值。
setmap.vee | 演示如何使用 Data [image] UnBuild Data [image] Spectrum, PComplex, 和 Data [image] Access Array [image] Set Mappings从Spectrum 数据类型中提取有用的信息。
traj1.vee | 演示在一个计算轨道的程序中Detail视图和Panel视图的区别。
traj2.vee | 演示UserObjects的Show Panel on Execute模式并显示所需的数据。
xfftfunc.vee | 用 ScaleFFT UserFunction在一个波形上实现FFT。


Electrical Applications
examples\Applications

Electrical Application 范例
范例名称 | 描述
digfilt.vee | 演示如何： Unbuilding 和 building 时域波形。 创立一个第3序的椭圆数字滤波器。 自动进行时域到频域的转换。
telecomm.vee | 用已经保存的波形数据仿真一个DS1脉冲模板测试。无线电领域的一个通用方法是监视来自DS1测试设备的脉冲形状。这个程序演示了如何自动将波形模和测量的 DS1脉冲匹配。
lissajou.vee | 演示如何使用X vs Y Plot对象的两个输入端产生 lissajous模式。
pid.vee | 闭环过程控制的一个简单的PID(Proportional-Integral-Derivative)控制器。


Dynamic I/O Configuration

动态 I/O 配置
examples\InstrumentIO

动态 I/O 配置范例
范例名称 | 描述
DynamicFindDMM.vee | 可以找到系统上的第一个数字示波器或所有DMM。
DynamicFindInstruments.vee | 找到系统上的所有GPIB和VXI仪器，返回它们的模型名称和总线地址。 仪器必须是IEEE 488.2兼容和理解"IDN?"命令。
DynamicFindInterfaces.vee | 报告系统上的所有仪器接口的类型和逻辑单元号。
DynamicFindRemoteInstruments.vee | 找到远程主机上所有可用的仪器。远程主机必须安装Agilent VEE才能用于远程工作。
PreRunDeviceCheck.vee | 演示在VEE的pre-run阶段的一些仪器配置检查功能。


Excel Library
examples\ExcelLibrary

Excel Library范例
范例名称 | 说明
AddComment.vee | 演示怎样在单元格中添加备注。
AlphaColAndNumericCol.vee | 从1 - 256的同等数字输入中计算列名称。
BarChart.vee | 在Microsoft Excel中创建柱状图。
ColoredLimits.vee | 演示怎样根据极限值改变文本颜色。
CreateVbaMacro.vee | 创建和执行简单的VBA宏命令。
DataFromCells.vee | 在选择一个工作簿文件后，从文件中的某个范围读取和显示数据。
DataToCells2D.vee | 本范例把2D数据双程发送到Excel。
DataToCells3D.vee | 本范例把3D数据双程发送到Excel。数据自动发送到多个工作表中。
EnumerateCharts.vee | 显示工作簿中的图表名称。
EnumerateNames.vee | 显示工作表中的范围名称。
EnumerateSheets.vee | 显示给定工作簿中的工作表名称。
EvaluateCellFormula.vee | 检索单个单元格使用的计算值。
ExcelVisibleOnTop.vee | 演示在查看时怎样保证Excel一直位于顶部。
FindFirstEmptyRow.vee | 找到一系列行内的第一个空白项。
FormatCell.vee | 演示不同的单元格格式。
FormatCellsAllColors.vee | 所有单元格背景颜色都作为文本发送到Excel，使用该背景颜色格式化每个单元格。
FormatText.vee | 调置整个数据范围的字体。
FormatTextAllColors.vee | 把单元格中的所有文本格式化成给定的前景颜色。
IterateColumns.vee | 迭代通过一组列，先发送一个数据序列，然后再检测同一序列。
IterateRows.vee | 迭代通过一组行，先发送一个数据序列，然后再检测同一序列。
LineChart1D.vee | 在Excel中创建一个一维折线图。
LineChart2D.vee | 在Excel中创建一个二维折线图。
LineChart2DLogarithmic.vee | 在Excel中创建一个二维对数折线图。
Macro.vee | 演示在Excel工作簿中运行现有的宏命令。
MergeCells.vee | 描述怎样在Excel中把多个单元格合并在一起。
MultipleWorkbooks.vee | 把一个2D数组重复发送到Excel，以新建多个工作簿。
NavigateCells.vee | 从一个相对位置、然后再从一个绝对位置计算单元格地址。
NumericRowColFromCell.vee | 演示怎样把单元格地址转换成数字行和列输出。
OpenSaveAs.vee | 使用只读真值打开一个工作簿，把它保存为一个新名字。
PanelImage.vee | 说明怎样在Excel报告中包括VEE图表。
PieChart.vee | 在Excel中创建一个饼图。
Print.vee | 打印Excel工作簿文件。
PrintPreview.vee | 在打印预览模式下显示工作簿。
ReUsingCharts.vee | 说明怎样使用Excel的图表绘制功能和Excel Library的数据管理属性创建自定义图表。
SaveAsHTML.vee | 改变设置，以便能够另存为HTML文件。它还会把DisplayAlerts设置设为False，以便能够根据需要多次覆盖SaveAs文件。
SearchArray.vee | 搜索一个一维或二维数组。
SelectWorkbookAndEnumerations.vee | 以示意图方式说明怎样使用OpenWorkbook, SelectWorkbook和Enumerate工作簿。
SendColumnByColumn.vee | 按列把数据发送到Microsoft Excel中。
SendComplexData.vee | 提供一个解决方案，作为纵向Cartesian Complex数组发送Complex。
SendCoordData.vee | 为坐标数字创建一个纵向SendData。
SendPComplexData.vee | 为Polar Complex数字创建一个纵向SendData。
SendRecordData.vee | 把一个记录数组发送到一个工作簿中，其中第一个工作簿中预先定义的名称范围与记录数组中的字段名称相匹配。
SendSpectrumData.vee | 说明怎样拆除Spectrum数据类型，使用Start, Stop把它发送到Excel中。
SendWaveformData.vee | 说明怎样拆除波形数据类型，使用TimeSpan和Data采用特定排列把它发送到 Excel中，可以根据个人偏好修改排列方式。
SettingABorderOnARange.vee | 设置嵌入在另一个单元格范围内的某个单元格范围的边框。
StringReplace.vee | 某个字符串一定时，代替这个字符串内部的子字符串。可能要考虑大小写。
XYChart.vee | 在Excel中创建一个XY图。

另请参阅

释放ActiveX参考


Financial Applications
examples\Applications

Financial 范例
范例名称 | 描述
simp_npv.vee | 演示如何在不影响报税效果的情况下使用一个简单的Net Present Value 模型进行财务计算。
payback.vee | 演示如何在影响报税效果的情况下使用一个简单的Net Present Value "Discounted Payback Period"模型进行财务计算。
futValue.vee | 演示VEE的财务计算能力,及如何通过图形化的曲线展示未来总计值的增长。


Games

游戏
examples\Games

下面的范例都是完整的程序，它们演示了各种VEE的编程技巧。

Game 范例

范例名称

Battleship

BlackJack

Euchre

MineSweeper

Movies

Race

Reversi

Slots

Solitaire

StraVEEgo

Wheel


集成在 Instrument Manager 中的范例
examples\InstrumentIO\InstrManagerIntegrated

集成在 Instrument Manager 中的范例
范例程序名 | 描述
Ag33220A_IVI-COM.vee | 下载一个预定义的信号到 33220A LXI 设备，并使用IVI-COM 驱动程序将它输出。
Ag34410a_LXI.vee | 从局域网上的 Agilent 34410A 数字示波器中提取测试结果
Ag344xxa.vee | 从下列Agilent 数字万用表 (DMM)中提取测试结果：34401A, 34405A, 34410A, or 34411A
Ag344xxa_Excel.vee | 从下列Agilent 数字万用表 (DMM)中提取五个测试结果： 34401A, 34405A, 34410A, or 34411A. 并将数据程序化地发送给 Excel。
Ag34980A_IVI-COM.vee | 从34980A 中提取配置信息和一些数据。
AgDSO3000.vee | 使用 DSO3000 系列示波器和 VEE Pro 的 Direct IO 功能测量一个波形的参数。
AgDSO603xMSO603x.vee | 从Agilent 6000-series DSO 或 MSO 示波器中提取模拟数据并在 VEE 的数据显示对象中显示。
AgDSO603xMSO603x_MATLAB1.vee | 使用 VEE 中嵌入的 MATLAB 功能计算通道1和通道2之间的互相关，并显示结果。
AgDSO603xMSO603x_MATLAB2.vee | 使用 MATLAB 的 exp() 和 abs() 函数及绘图功能。
AgDSO603xMSO603x_MATLAB3.vee | 使用 VEE 中嵌入的 MATLAB 功能，使用 Butterworth 滤波对模拟通道1进行滤波并显示计算结果。
AgE4980a_directIO.vee | 使用 E4980A LCR 表测量电容和损耗因数。
AgN1996a.vee | 从Agilent CSA 频谱分析仪中提取测量结果。
AgN19XXA.vee | 配置并控制 N19XXA 电压表从仪器向 PC 传输数据。
AgN57xx_directIO.vee | 设置输出并使用 Direct IO 并从模块化电源 N5700B 中提取数据。
AgN57xx_IVI_COM.vee | 演示如何在 VEE8.0 中使用 IVI-COM 驱动程序。
AgN67xx_IVI_COM.vee | 使用 VEE 和 IVI COM 驱动程序设置输出，并从模块化电源 N6700B 中提取数据。
Ag87xxEx.vee | 控制 87XXET/ES 以从它提取测量数据。
Ag87xx-VNA.vee | 在 VNA 中设置多条轨迹, 扫描，下载和显示数据。
Ag332x0a1.vee | 下载一个预定义的信号到一个发生器并输出。
Ag332x0a2.vee | 从发生器中输出一个被调制的 AM 信号。
Ag661xc-Ag663xb.vee | 程序输出，测量输出条件和计算输出电压。
Ag681x.vee | 进行一个Inrush电流测量
Ag811xx-AgE831x.vee | 配置脉冲，模式和猝发模式。
Ag5313xa1.vee | 测量通道1的频率并提取数据。
Ag 5313xa2.vee | 测量通道1的频率并进行数据记录。
Ag34970a.vee | 确认帧中的卡并绘制数据。
AgE36xx.vee | 设置电压，记录电流，并保存到 Excel 文件中。
AgE44xx.vee | 设置中心频率和span, 查看轨迹并保存到 Excel 文件中。
AgE44xxCdma2000.vee | 测量 CDMA2000 上已占用的带宽并保存到 Excel 中。
AgE50xxx-ENA1.vee | 在 ENA 中设置多条轨迹,并扫描，下载和显示数据。
AgE50xxx-ENA2.vee | 使用 ECal 模块设置和校准 2-Port S-Parameter
AgE82xx.vee | 使用 ECal 模块设置和校准 2-Port S-Parameter
AgE83xxx-AgN52xxx-AgE880xx-Agn338xx-PNA1.vee | 在 PNA 中设置多条轨迹,并扫描，下载和显示数据。
AgE83xxx-AgN52xxx-AgE880xx-Agn338xx-PNA2.vee | 使用 ECal 模块设置和校准 2-Port S-Parameter
AgE443xb.vee | 频率扫描，并在扫描结束时发送 SRQ 。
AgE443xb_Excel.vee | 频率扫描，并在扫描结束时发送 SRQ 并保存到 Excel 中。
AgE4438c-AgE8267x.vee | 下载波形到任意波形发生器，并保存到 Excel 中。
AgE4438c-Ag8267x_Excel.vee | 下载波形到任意波形发生器，并保存到 Excel 中。
AgInfiniiumScopeAdvanced1.vee | 显示 MATLAB 互相关。
AgInfiniiumScopeAdvanced2.vee | 显示 Butterworth 滤波。
AgInfiniiumScopeAnalog.vee | 显示模拟波形和参数。
AgInfiniiumScopeDigital.vee | 显示数字波形和参数。
AgN33xxa.vee | 程序输入，测量输入条件以及条形图表。
AgN4901b.vee | 自动对齐和执行 BER 读
AgN6700b.vee | 程序输出，测量输出条件， 和条形图表输出
Hp33120a.vee | 设置波形形状，峰值大小和频率。
Hp34401a.vee | 从 34401A 中提取数据。
Hp34401a_Excel.vee | 从 34401A 中提取数据并发送到 Excel


Instrument I/O

仪器测量范例
examples\InstrumentIO

仪器测量范例
Example Name | Description
4195imp.vee | Measures the impedance characteristics of a chip type component.
4195net.vee | Is a setup to study the transmission frequency response of a bandpass filter.
4195s11.vee | Measures the Return Loss of a device under test.
4195s12.vee | Measures the Reverse Transmission Coefficients of a device under test.
4195s21.vee | Measures the Forward Transmission Coefficients of a device under test.
4195s22.vee | Measures the Reverse Reflection Coefficients of a device under test.
4195spec.vee | Studies the Harmonic Distortion of a frequency signal with the following parameters: Sweep Start frequency: 5 MHz Sweep Stop frequency: 105 MHz R1 input attenuation: 40 dB S1 source amplitude: -15 dB
4338_ext.vee | Shows how to control the HP 4338A external trigger, and use the instrument drivers sequence output to perform an SRQ and SPOLL, then log readings from the HP 4338A component driver.
8720cal.vee | Shows how the calibration data for an HP 8720C can be stored in a file after the calibration and later on it can be retrieved from the file to dump the cal data to the instrument.
8720lims.vee | Shows the limit segments editing using the HP 8720C and performs the limit line testing on the measured characteristics of the test device.
8720smp1.vee | Performs a phase measurement to study the deviation from linear phase.
8720smp2.vee | Performs phase measurement using an HP 8720C, and the phase value is detected for the selected stimulus frequency. In the second state, Z:Transmission characteristics measurement is done.
8753lims.vee | Shows the limit segments editing using the HP 8753C and performs the limit line testing on the measured characteristics of the test device.
BpTr_STR.vee | Demonstrates stress measurement on a bipolar transistor.
DIOFreq.vee | Finds the frequency response of the HP 3478 multimeter using Direct I/O objects. Needs a HP 3325B function generator and a HP 3478 multimeter.
enum_id.vee | Shows how to use a Selection Control object (Enum) to generate an input for an ID device that uses numbers to select internal states.
hpe1326.vee | Takes readings from the HP E1326. After a delay to take the readings, the readings are uploaded to a file.
hpe1413.vee | Uploads HP E1413 data to a file and then displays the data.
hpe1488a.vee | Takes readings on the HP E1431A, transfers them over the local bus to the HP E1488A, then reads the data over the GPIB to display it on a Waveform display.
hpe1562.vee | Readings are taken on the HP E1413 and transferred directly to the HP E1562 from the HP E1413 FIFO via the VME backplane. Then the readings are read from the HP E1562 and sent by Local Bus to the HP E1488A.
gpibtest.vee | This utility allows you to perform simple GPIB transactions with an instrument.
IC_IB_VB.vee | Displays the hFE values corresponding to IC>1mA and IC<4mA. This is a good example of transistor characteristics and hFE calculation based on the above results.
IC_VCE.vee | Is an example of IC vs VCE characteristics of bipolar transistor.
ID_VDS1.vee | Is a good example of ID-VGS characteristics of MOSFET. It also gives information about Vth@ID=10mA and Vth@MAX(Gm)
ID_VDS2.vee | Is an example of ID vs VGS of MOSFET.
IDfreq.vee | Finds the frequency response of the HP 3478 multimeter using HP Instrument Drivers(HP-ID). Needs a HP 3325B function generator and a HP 3478 multimeter.
cap4291.vee | Can be used for studying: Frequency characteristics of impedance OSC level characteristics of capacitance and dissipation factor Frequency characteristics of capacitance and dissipation factor DC bias voltage characteristics of capacitance and dissipation factor
imp4291.vee | Does Resistance and Reactance Measurement over the frequency sweep from 1000KHz to 1800 MHz.
instr.vee | Shows three methods in VEE for programming instruments.
k2000.vee | Tests the operation of the Keithley 2000 Digital Multimeter.
k2000_dc.vee | Is an example using the Keithley 2000 voltmeter. 100 DCV readings are taken and shown on an XY Trace.
k2001.vee | Tests the operation of the Keithley 2001 Digital Multimeter.
k2001_dc.vee | Sets up the Keithley 2001 to take DC readings using the .01 NPLC Aperture. 100 readings are taken and averaged. Both the average and a plot of the values are shown.
logger1.vee | Shows how to construct a simple multi-channel data logger.
logger2.vee | Shows a data logger that saves measurement data to a file.
loss4291.vee | Can be used for measuring frequency characteristics of relative Permittivity. Channel 1 measures Permittivity real(Er') and channel 2 measures Loss tangent(tan delta).
perm1_91.vee | Is a program for the HP 4291A that measures permeability real for channel 1 measures permeability loss factor for channel 2.
perm2_91.vee | Is used for measuring: Frequency characteristics of relative Permeability OSC level characteristics of relative Permeability DC bias current characteristics of relative Permeability
prmtty_91.vee | Is a program for the HP 4291A that measures permittivity real for channel 1 measures permittivity loss factor for channel 2.
rd126014.vee | Writes the data of "Data Buffer" to port 1 of the Racal Dana 1260-14 and reads it from port 0.
scopeMask.vee | Displays a DS1 mask in the waveform memories of an HP 54502 or HP 54504 oscilloscope. This demonstrates the concept of creating a mask in a scope's waveform memories. Although it builds something that looks like a DS1 mask, the data from which the mask is built does not conform to any standard.
smallsig.vee | Measures small signal gain. This measurement is useful for the study of characteristics of active devices like amplifiers in the linear operating region. This program doesn't include the calibration measurement.
Vdownld.vee | Downloads drivers to the VXI Command Module.


IVI 驱动程序范例

AgilentPowerMeterAverages_VEE7.vee

AgilentPowerMeterCalAndZero_VEE7.vee

AgilentSA_VEE7.vee

AgilentSA.vee

Agilent33220.vee


Manufacturing Applications
examples\Applications

Manufacturing 范例

范例名称

描述

mfgtest.vee

介绍一些你也许觉得在创建制造类测试系统是有用的VEE功能。下面是一些被着重介绍的VEE功能:

对话框:
该范例使用了多个不同类型的对话框。"login" 函数使用的最多了。可以在Data [image] Dialog Box 菜单找到它们。

键盘控制:
通过 Tab 键, space 键, 和 Enter 键，可以完全这个控制程序。另外，还有一个用户对话框，可以让你使用功能键导航。

指示器:
可以使用各种显示对象，比如 Color Alarm 和 Thermometer, 来指示测试是否成功或失败。 指示器可以在Display [image] Indicator  菜单中找到。

图片对象:
这些对象可以用于在可缩放的对象中显示图像。我们已将它用于显示一个测试连接图。它可以接受的图形文件包括：Graphics Interchange Format (GIF), Bitmap (BMP), 和 X Window Dump (XWD) 格式。这个对象位于 Display 菜单中。

Sequencer 状态面板:
一个面板视图可以动态显示或隐藏的通用函数。使用它，可以让 Sequencer 的外观在运行时动态地改变。

Sequencer:
Sequencer 有一个叫 ExecTrans 的数据输入端， 它接收要执行的测试名的数组。使用一个多选列表框(一种 Dialog Box 对象), 可以让使用程序的用户动态地选择 Sequencer 将要执行的测试。


MATLAB

MATLAB脚本
examples\MATLAB

MATLAB脚本范例
范例名称 | 说明
BasicGraphManipulation.vee | 显示某些基本图形和绘图操作
FindMaximums.vee | 显示怎样定位和高亮度显示图形峰值
Interpolation.vee | 显示MATLAB Interpl 1D数据插补函数
Logo3DPlot.vee | 绘制有吸引力的三维阴影表面图
MultiGraphFigure.vee | 显示怎样创建和显示子图
MultiTraceGraph.vee | 显示怎样绘制和涂色多个图形轨迹
Plot2DArray.vee | 显示怎样从VEE中绘制二维数组数据图
SignalProcessing.vee | 介绍MATLAB广泛的信号处理功能
Surf3DPlot.vee | 显示怎样创建和旋转MATLAB 3D阴影表面图


Mechanical 范例
examples\Applications

Mechanical 范例
范例名 | 描述
beam.vee | 这个程序使用 XY Trace 显示一束波在统一，倾斜和组合负载状态下的偏移。
chaos.vee | 显示了一个简单的人口模型的稳定状态值。
coilspr.vee | 演示了使用一系列的变参计算一个螺旋弹簧的自然频率。
convcoef.vee | 演示了在 VEE 中使用 Natural Convection Heat Transfer Model 为多个体或面计算热交换系数 "h"。
fluidflw.vee | 演示了一个简单的机械工程问题的创建和解决方案。同时还演示了数据输入，显示的方法，以及如何使用数组和全局变量计算公式。
torsion1.vee | 演示了一个简单的机械工程问题的创建和解决方案。同时还演示了数据输入，显示的方法，以及如何使用计算公式。 这个程序使用一个简单的公式计算一个圆形扭转轴的角度偏转，已知扭转轴的直径，长度，应用的转力矩，和材料的剪切弹性模数值。
torsion2.vee | 演示了一个简单的机械工程问题的创建和解决方案。同时还演示了数据输入，显示的方法，以及如何使用计算公式。 这个程序使用一个简单的公式计算一个圆形扭转轴的角度偏转，已知扭转轴的直径，长度，应用的转力矩，和材料的剪切弹性模数值。


Microsoft Access
examples\ActiveXAutomation

必须先安装Microsoft Access 以及下述程序引用的ActiveX automation 类型库，下述程序才能正常运行。

Microsoft Access 交互操作范例
范例名称 | 描述
AccessDataClient.vee | 打开Access保存测试数据，然后VEE把数据记录到数据库文件testData.mdb中，最后再读该文件。
AccessEnumerate.vee | 打开以testData.mdb命名的DAO 3.6 (ACCESS)数据库，然后显示数据库中所有的表和resultsTable中的所有域。 演示DAO已安装时，如何打开数据库和记录，使用count和name属性等. 注意DAO engine 创建了多个"MSys"表。

另请参阅

释放 ActiveX References


Microsoft Excel
examples\ActiveXAutomation

必须先安装Microsoft Excel以及下述程序引用的ActiveX automation 类型库，下述程序才能正常运行。

Microsoft Excel 交互操作范例
范例名称 | 描述
ExcelInsertData.exe | 使用Excel 和 ActiveX automation一次向工作表中的一个单元插入随机数。然后用 Excel的 Average 函数计算插入Excel中的数据的平均值。
ExcelInsertArrayData.vee | 使用Excel和ActiveX Automation在一次操作中向工作表中插入一个随机数的数组。然后使用Excel的StDev函数计算所有插入Excel中的数据的偏差。
ExcelGraph.vee | 使用Excel 和 ActiveX automation向工作表中插入数据。然后让Excel画一个新的且格式正确的图表。
ExcelUFunction.vee | 使用Excel 和 ActiveX automation一次向工作表中的一个单元插入随机数。然后用 Excel的 Average 函数计算插入Excel中的数据的平均值。
ExcelWeather.vee | 使用Excel 和 ActiveX automation计算天气报告。

从Excel调用VEE

SpreadsheetApp.xls 是一个可以调用lib.vee中的VEE函数的Excel文件。它的一个功能是根据从一个文件读回的数据来生成一个脉冲；另一个功能是在测试限制内显示这个脉冲。使用Windows Explorer，双击文件可以打开范例程序:

<VEE_install_dir>\examples\CallableVEE\Excel\SpreadsheetApp.xls

另请参阅

释放ActiveX References


Microsoft Outlook
examples\ActiveXAutomation

必须先安装Microsoft Outlook以及下述程序引用的ActiveX automation 类型库，下述程序才能正常运行。

Microsoft Outlook范例
范例名称 | 描述
Outlook.vee | 使用VEE 的 ActiveX Automation 功能和Microsoft Outlook发送电子邮件。

另请参阅

释放 ActiveX References


Microsoft Word
examples\ActiveXAutomation

必须先安装Microsoft Word以及下述程序引用的ActiveX automation 类型库，下述程序才能正常运行。

ActiveX Automation 范例
范例名称 | 描述
Word.vee | 使用Word and ActiveX Automation把测试数据和VEE UserFunction的位图插入一个Word文档。
WordDataSheet.vee | 在一个用作单页的数据表模板的Word文档中执行ActiveX Automation查找和替换。
WordMailMerge.vee | 使用ActiveX Automation在一个名为mmerge.doc的Word的文档中执行邮件合并操作，使用的数据库文件为 mmerger.mdb。

另请参阅

释放 ActiveX References


Callable VEE

旧的 VEE RPC API
examples\CallableVEE\Rpc_api

旧的 VEE RPC 范例
范例名称 | 描述
lib.vee | 一个包含多个可调用的函数的VEE库，还包括DS1脉冲测试功能。

DS1 脉冲测试

CallVEE.c 是一个 C 原码文件，它调用lib.vee中的两个VEE函数. 一个根据从文件中读回的数据合成一个脉冲，另一个显示测试范围内的脉冲。

Callable VEE ActiveX Automation Server 可以用于调用VEE 6.0及其后续版本。然而，最初的 C API仍然可以使用。如果你使用K&R C (而非 C++)你可以选用旧的方法。

请使用Windows Explorer并双击文件来打开文件:

<VEE_install_dir>\examples\CallableVEE\Rpc_api\CallVEE.c


Multiple Traces 范例

范例名称

描述

2dXyTrace.vee

演示如何在图形对象上，只通过一个输入端现实多个轨迹。

MatrixInputStripChart.vee

随机产生四个从-100 到100 之间的 Real64数据并把它们显示在一个Strip Chart对象上。


程序属性范例

范例名称

说明

ProgrammaticPropertyDemo.vee

演示怎样以程序化方式GET/SET属性

DemoTabIndexChangeDemo.vee

演示怎样以程序化方式在面板视图中改变对象的TableIndex。

SelectionControlPropertiesDemo.vee

演示怎样以程序化方式改变EnableEditing, EnumIndex, EnumValue, EnumValues for Selection控制功能


Lib

VEE 库范例
examples\Lib

在 VEE 的安装目录下有一个\lib 目录。可以将这里的函数或对象用于你的 VEE 程序。可以用 File [image] Merge 导入这些对象到你的程序中。下面的范例程序演示了这些对象时如何被用于一个完整的程序中的。

库范例
范例名称 | 描述
1dto2d.vee | 演示了使用 Formula 对象和 Array 根据一个数组大小固定的大的一维数组创建一个二维数组。
2dto1d.vee | 演示了使用 MatToAry.vee 库对象将一个多维的数组展开为一个一维的数组。
barcht1.vee | 演示了使用 BarChart.vee 库对象显示数组数据。
barcht2.vee | 演示了使用 BarPF.vee 库对象将一个数组的每个元素与某个定值比较并显示数组的数据。
barcht3.vee | 演示使用 BarStack.vee 库对象同时显示两个数组的数据。
barcht4.vee | 演示了使用 BarComp.vee 库对象同时显示两个数组的数据。
dialog.vee | 演示了使用 dialog 库对象在程序的一个指定点请求用户输入。这个程序可以作为更复杂的对话框程序的起点。对于简单的对话框，可以使用 VEE 自带的 Dialog Box 对象。
keypad.vee | 演示了如何使用 keypad.vee。
maparray.vee | 演示了使用 mapArray.vee 库对象创建一个数字数组，它的成员与Spectrum or Waveform 输入的每个元素相对应。
multiplex.vee | 演示了如何把 Formula 对象用作一个 Multiplexer 对象。
pathsep.vee | 演示了使用 pathSep.vee 库对象格式化 DOS 和 posix 路径名中的路径分隔符。
piechart.vee | 演示了如何使用 PieChart.vee 库对象显示一个数组的数据。
rmfile.vee | 演示了如何使用 rmfile.vee 库对象
SMTPMail.vee | 一个库对象，它演示了如何使用 To/From Socket 对象实现只能用于发送的Simple Mail Transfer Protocol (SMTP) 功能。
xy_cntrl.vee | 演示了如何使用Record Constant 对象，Traces Control 和 Scales Control 调整 XY Trace 的轨迹和比例。这些控件都位于 XY_cntrl.vee 库对象中。如只需控制一个比例或轨迹，请打开 Traces Control 或 Scales Control 的 Properties 对话框，将 Array Size 设为 0。


Concepts

VEE 编程概念
examples\Concepts

VEE 编程范例
范例名称 | 描述
AdvancedDialog.vee | 演示如何创建一个对话框来获取初始参数和有效的用户输入，并返回用户输入的信息。
alternateToIfThenElse.vee | 演示了如何使用 demultiplexer 对象和junction 对象Shows 化简复杂的 if/then 结构。
ascii.vee | 演示了如何把一个键盘字符转换为 ASCII 码，以及如何把一个 ASCII 码转换为键盘字符。
convert.vee | 演示了 VEE 对不同类型的数据的处理。包括 DECIMAL, HEXADECIMAL, OCTAL, 和 BINARY。
complex.vee | 演示了如何产生，添加，处理和显示 Complex 和 Polar Complex 数据。
datacomp.vee | 通过查找变化来对新数据进行压缩，只用时戳来记录变化
feedback.vee | 演示了反馈，及如何用它来实现一个简单的one-pole IIR 数字滤波。
fib.vee | 演示使用反馈来计算一个等式，比如 Fibonacci 数列： a(n) = a(n-1) + a(n-2).
holdBackAndDelay.vee | 演示如何使用 Gate 和 Delay 对象控制程序流。
if.vee | 演示如何用 If/Then/Else 对象输出一个值。
ifThenExpressions.vee | 演示如何使用三操作数表达式。
infoAbout.vee | 描述了用于多个程序范例的弹出的帮助对象。
integrate.vee | 演示了如何使用对话框中输入的上下限来计算积分，并图形化地显示积分的结果。
iterateColumnOrRow.vee | 演示如何按行或列来循环一个数组。
iterateOneDim.vee | 演示如何使用 For Each 对象来循环一个一维数组。
iterateRecordFields.vee | 演示了如何按一个记录标量的域来循环整个记录。其中使用了 For Each 对象。
iterateTwoDim.vee | 演示如何使用 For Each 对象来循环一个二维数组。
layout1.vee | 演示了如何布局一个 VEE 程序，使用了从左到右的数据流来帮助提高程序的可读性。
layout2.vee | 演示了在一个程序中使用对齐和改变大小的对象的效果。
loop.vee | 产生一系列的1到10的随机整数，并找到它们中有多少的和小于或等于100。
magphase.vee | 演示了一个从时域波形现实 Magnitude 和 Phase vs. Frequency 的简单方法。注意其中的 Mag/Phase Display 是一个 UserObject，而不是一个提供的显示对象。
nestedRecord.vee | 演示了 Build Record 对象的嵌套能力。
oneshot.vee | 演示了用 Toggle Button 创建 One-Shot Button 的方法。
opt1.vee | 使用 Parallel Math 操作数组。
opt2.vee | 从一个文件读取一个两维数组。
opt3.vee | 比较位于不同分支的计算表达式的 Formula 对象如何影响 Sieve 的速度。
redim.vee | 演示如何改变数组的维数。
scattrgm.vee | 演示了使用 X vs Y 显示对象绘制散布图的方法。
strings.vee | 演示如何使用内置于 Function & Object Browser 中的字符串函数。
subrecord.vee | 演示如何将子记录作为记录来处理。
text1.vee | 演示了多种组合字符串的方法。
timetick.vee | 使用 On Cycle 对象 (on Flow [image] Repeat 菜单) 创建一个时钟。
tofrom1.vee | 演示了一种在程序连续执行时保存数据的方法，即在读取或将之前修改的数据写入同一文件后，再写入最新的数据。
tofrom2.vee | 演示了如何在一个线程入文件时，另一个线程仍以它的速度读取和处理数据。
tofrom3.vee | 演示了如何同时使用 Selection Control 对象，比如 Radio Buttons ( Data [image] Selection Control 菜单), 和 WRITE CASE I/O 事务。使用这个技术映射易于理解的字符串到相应的输出字符串。
tofrom4.vee | 演示了如何使用事务 I/O 写 VEE 的波形。该程序用涉及到了有关数据类型转换和事务 I/O 的概念。To String 对象用于方便地查看结果。也可以用 To String 来代替 To File 对象。
tr_ctrl.vee | 演示如何使用 Strip Chart 显示对象的 Traces 控制输入端。该控制端根据数据的值把线的颜色由绿改为红。
truefals.vee | 演示了三种把一个数字转变为 TRUE 和 FALSE 字符串的方法。
UserFunctions.vee | 演示如何调用 UserFunction，以及如何在整个程序中使用它而不对它进行修改。
whichos.vee | 演示如何使用 whichOS() 和 whichPlatform() 函数获得计算机的操作系统和平台信息。
wizbang.vee | 演示了 Alarms, Indicators, 的 Controls 使用。
zerofill.vee | 演示了各种通过补零来将一个数组延伸到指定长度的方法。演示了在 Formula 对象中使用数学函数，及使用 Allocate Array 和 ramp 创建固定的数组。


Visual Basic
examples\CallableVEE\VisualBasic

DS1 脉冲测试

CallVEE.vbp 是一个Visual Basic项目。它调用lib.vee中的两个VEE函数。一个根据从文件中读回的数据合成一个脉冲。另一个在测试范围内显示这个脉冲。如果你的系统已经安装了Visual Basic，就可以在Windows Explorer中双击文件打开一个范例程序。

<VEE_install_dir>\examples\CallableVEE\VisualBasic\CallVEE.vbp


Visual Basic Script

VB Script
examples\CallableVEE\VBScript

如果已经安装了Microsoft VB Script， 就可以在Windows Explorer中双击文件来运行范例程序了。

DS1 脉冲测试

CallVEE.vbp 是一个Visual Basic项目。它调用lib.vee中的两个VEE函数。一个根据从文件中读回的数据合成一个脉冲。另一个在测试范围内显示这个脉冲。

<VEE_install_dir>\examples\CallableVEE\VBScript\CallVEE.vbs

获得VEE服务器信息

GetServerInfo.vbs 是一个VB Script文件。它返回有关已注册的可调用的VEE服务器的信息，比如，主机使用的I/O配置文件。

<VEE_install_dir>\examples\CallableVEE\VBScript\GetServerInfo.vbs

创建并显示一个波型

GetWaveform.vbs是一个VB Script文件。它使用VEE的特有的数据类型。 它演示了如何创建，传递和返回波形数据。

<VEE_install_dir>\examples\CallableVEE\VBScript\GetWaveform.vbs

查找和导入VEE库

UsingInstallDir.vbs 是一个VB Script文件。它会发现VEE的安装目录，然后相对与那个目录装入和调用一个VEE库。

<VEE_install_dir>\examples\CallableVEE\VBScript\UsingInstallDir.vbs


Visual C++
examples\CallableVEE\VisualC++

DS1 脉冲测试

CallVEE.vbp 是一个Visual C++文件。它调用lib.vee中的两个VEE函数。一个根据从文件中读回的数据合成一个脉冲。另一个在测试范围内显示这个脉冲。如果你的系统已经安装了Visual C++，就可以在Windows Explorer中双击文件打开一个范例程序。

<VEE_install_dir>\examples\CallableVEE\VisualC++\CallVEE.cpp


ASCII Table

ASCII表

下表列出了ASCII 7位字符代码：

 | 二进制 | 八进制 | 十六进制 | 十进制 | GPIB消息
NUL | 0000000 | 000 | 00 | 0 |
SOH | 0000001 | 001 | 01 | 1 | GTL
STX | 0000010 | 002 | 02 | 2 |
ETX | 0000011 | 003 | 03 | 3 |
EOT | 0000100 | 004 | O4 | 4 | SDC
ENQ | 0000101 | 005 | 05 | 5 | PPC
ACK | 0000110 | 006 | 06 | 6 |
BEL | 0000111 | 007 | 07 | 7 |
BS | 0001000 | 010 | 08 | 8 | GET
HT | 0001001 | 011 | 09 | 9 | TCT
LF | 0001010 | 012 | 0A | 10 |
VT | 0001011 | 013 | 0B | 11 |
FF | 0001100 | 014 | 0C | 12 |
CR | 0001101 | 015 | 0D | 13 |
SO | 0001110 | 016 | 0E | 14 |
SI | 0001111 | 017 | OF | 15 |
DLE | 0010000 | 020 | 10 | 16 |
DC1 | 0010001 | 021 | 11 | 17 | LLO
DC2 | 0010010 | 022 | 12 | 18 |
DC3 | 0010011 | 023 | 13 | 19 |
DC4 | 0010100 | 024 | 14 | 20 | DCL
NAK | 0010101 | 025 | 15 | 21 | PPU
SYN | 0010110 | 026 | 16 | 22 |
ETB | 0010111 | 027 | 17 | 23 |
CAN | 0011000 | 030 | 18 | 24 | SPE
EM | 0011001 | 031 | 19 | 25 | SPD
SUB | 0011010 | 032 | 1A | 26 |
ESC | 0011011 | 033 | 1B | 27 |
FS | 0011100 | 034 | 1C | 28 |
GS | 0011101 | 035 | 1D | 29 |
RS | 0011110 | 036 | 1E | 30 |
US | 0011111 | 037 | 1F | 31 |
SPACE | 0100000 | 040 | 20 | 32 | listen 0
! | 0100001 | 041 | 21 | 33 | listen 1
" | 0100010 | 042 | 22 | 34 | listen 2
# | 0100011 | 043 | 23 | 35 | listen 3
$ | 0100100 | 044 | 24 | 36 | listen 4
% | 0100101 | 045 | 25 | 37 | listen 5
& | 0100110 | 046 | 26 | 38 | listen 6
" | 0100111 | 047 | 27 | 39 | listen 7
( | 0101000 | 050 | 28 | 40 | listen 8
) | 0101001 | 051 | 29 | 41 | listen 9
* | 0101010 | 052 | 2A | 42 | listen 10
+ | 0101011 | 053 | 2B | 43 | listen 11
, | 0101100 | 054 | 2C | 44 | listen 12
- | 0101101 | 055 | 2D | 45 | listen 13
. | 0101110 | 056 | 2E | 46 | listen 14
/ | 0101111 | 057 | 2F | 47 | listen 15
0 | 0110000 | 060 | 30 | 48 | listen 16
1 | 0110001 | 061 | 31 | 49 | listen 17
2 | 0110010 | 062 | 32 | 50 | listen 18
3 | 0110011 | 063 | 33 | 51 | listen 19
4 | 0110100 | 064 | 34 | 52 | listen 20
5 | 0110101 | 065 | 35 | 53 | listen 21
6 | 0110110 | 066 | 36 | 54 | listen 22
7 | 0110111 | 067 | 37 | 55 | listen 23
8 | 0111000 | 070 | 38 | 56 | listen 24
9 | 0111001 | 071 | 39 | 57 | listen 25
: | 0111010 | 072 | 3A | 58 | listen 26
; | 0111011 | 073 | 3B | 59 | listen 27
< | 0111100 | 074 | 3C | 60 | listen 28
= | 0111101 | 075 | 3D | 61 | listen 29
> | 0111110 | 076 | 3E | 62 | listen 30
? | 0111111 | 077 | 3F | 63 | UNL
@ | 1000000 | 100 | 40 | 64 | talk 0
A | 1000001 | 101 | 41 | 65 | talk 1
B | 1000010 | 102 | 42 | 66 | talk 2
C | 1000011 | 103 | 43 | 67 | talk 3
D | 1000100 | 104 | 44 | 68 | talk 4
E | 1000101 | 105 | 45 | 69 | talk 5
F | 1000110 | 106 | 46 | 70 | talk 6
G | 1000111 | 107 | 47 | 71 | talk 7
H | 1001000 | 110 | 48 | 72 | talk 8
I | 1001001 | 111 | 49 | 73 | talk 9
J | 1001010 | 112 | 4A | 74 | talk 10
K | 1001011 | 113 | 4B | 75 | talk 11
L | 1001100 | 114 | 4C | 76 | talk 12
M | 1001101 | 115 | 4D | 77 | talk 13
N | 1001110 | 116 | 4E | 78 | talk 14
O | 1001111 | 117 | 4F | 79 | talk 15
P | 1010000 | 120 | 50 | 80 | talk 16
Q | 1010001 | 121 | 51 | 81 | talk 17
R | 1010010 | 122 | 52 | 82 | talk 18
S | 1010011 | 123 | 53 | 83 | talk 19
T | 1010100 | 124 | 54 | 84 | talk 20
U | 1010101 | 125 | 55 | 85 | talk 21
V | 1010110 | 126 | 56 | 86 | talk 22
W | 1010111 | 127 | 57 | 87 | talk 23
X | 1011000 | 130 | 58 | 88 | talk 24
Y | 1011001 | 131 | 59 | 89 | talk 25
Z | 1011010 | 132 | 5A | 90 | talk 26
[ | 1011011 | 133 | 5B | 91 | talk 27
\ | 1011100 | 134 | 5C | 92 | talk 28
] | 1011101 | 135 | 5D | 93 | talk 29
^ | 1011110 | 136 | 5E | 94 | talk 30
_ | 1011111 | 137 | 5F | 95 | UNT
` | 1100000 | 140 | 60 | 96 | second 0
a | 1100001 | 141 | 61 | 97 | second 1
b | 1100010 | 142 | 62 | 98 | second 2
c | 1100011 | 143 | 63 | 99 | second 3
d | 1100100 | 144 | 64 | 100 | second 4
e | 1100101 | 145 | 65 | 101 | second 5
f | 1100110 | 146 | 66 | 102 | second 6
g | 1100111 | 147 | 67 | 103 | second 7
h | 1101000 | 150 | 68 | 104 | second 8
i | 1101001 | 151 | 69 | 105 | second 9
j | 1101010 | 152 | 6A | 106 | second 10
k | 1101011 | 153 | 6B | 107 | second 11
l | 1101100 | 154 | 6C | 108 | second 12
m | 1101101 | 155 | 6D | 109 | second 13
n | 1101110 | 156 | 6E | 110 | second 14
o | 1101111 | 157 | 6F | 111 | second 15
p | 1110000 | 160 | 70 | 112 | second 16
q | 1110001 | 161 | 71 | 113 | second 17
r | 1110010 | 162 | 72 | 114 | second 18
s | 1110011 | 163 | 73 | 115 | second 19
t | 1110100 | 164 | 74 | 116 | second 20
u | 1110101 | 165 | 75 | 117 | second 21
v | 1110110 | 166 | 76 | 118 | second 22
w | 1110111 | 167 | 77 | 119 | second 23
x | 1111000 | 170 | 78 | 120 | second 24
y | 1111001 | 171 | 79 | 121 | second 25
z | 1111010 | 172 | 7A | 122 | second 26
{ | 1111011 | 173 | 7B | 123 | second 27
| | 1111100 | 174 | 7C | 124 | second 28
} | 1111101 | 175 | 7D | 125 | second 29
~ | 1111110 | 176 | 7E | 126 | second 30
[del] | 1111111 | 177 | 7F | 127 |


Error Codes

错误编码

从下面的表中可以根据出现错误时给出的错误代码查找相应的错误信息。

错误代码 | 描述
对象 |
300 | 输入端数字<n>错误
301 | 输入 <n> 没有出现 (有效范围 = [<n>..<n>])
302 | 不允许有额外输入 -- 上限为<n>
303 | 输入必须为 <type>
304 | 输入不能为 <type>
305 | 输入不匹配： <name >, <name >
306 | 没有所需的输入 <name >
308 | 没有所需的输出 <name >
309 | 输出不匹配：<name >, <name >
310 | 没有输出 <n> (有效范围 = [<n>..<n>])
311 | 不允许有额外输出 -- 上限为<n>
312 | 没有选择 <type>
313 | 不支持<operation>
314 | 无效参数组合 <n>
315 | 不能添加组件 <name >
317 | 没有可转换的面板
318 | UserFunction <name >没有面板视图
320 | 子过程运行失败
321 | 子过程结束
322 | 不能打开管道（pipe ）
323 | 列表没有元素
330 | Max value必须大于 Min value
331 | VEE 不能加载或执行程序
340 | 不能编译带有多于一个 xeq 端的对象
341 | xeq 端必须是最底下的一个端
342 | 不能编译带有多于一个 xeq 端的上下文对象
343 | UserObject 不能位于它编辑 窗口中
344 | CallBox不能位于调用函数内 (不允许循环递归)
345 | 重复的设备名。修改 <name > 为唯一值
346 | 必须为设备制定名称
347 | 无法编译在iterators 或 junctions上有错误端的程序
容器 |
400 | 值为空或 nil (可以为零元素数组)
401 | 值越界 (有效范围 = [<n>..<n>])
402 | <name> 值必须为 <type>
403 | <name> 值越界
404 | 数字值必须为正
405 | <name>没有找到
410 | 值必须为标量
411 | 值必须为数组
412 | 值必须为标量或线性数组
413 | 值必须为<n>维数组
414 | 值必须为 waveform 或线性数组
415 | 值必须有相同的维数
416 | 值必须有相同的大小和形状
417 | Record就够必须匹配
418 | Records不能合并
420 | 值必须为方形矩阵
421 | 矩阵值得形状不适用月矩阵乘法
422 | 值必须为带有 ODD列数的矩阵
430 | 不能用非零索引访问标量
431 | 数组索引值越界
432 | 错误的数组／子数组的索引值
433 | 给定的数组维数太多 (最大为= <n>)
434 | 值必须有 <n> 个域
435 | 两个值必须有相同数量的域
440 | 操作对数据类型 <type>无效
441 | 该操作对标量数据无效
442 | 操作对 <n> 维数组无效
443 | 操作只对数字值有效
444 | Declared Variable赋值无效
445 | 试图访问尚未初始化的 Declared Variable <name>
450 | 操作需要数组被映射
451 | 数组映射必须匹配
452 | 数组映射的采样频率必须匹配
453 | <type> 不能垂直布进
454 | 不允许创建数组
460 | 不能增加／减少数组合函数
461 | 值 > 16 digits -- 不能增加／减少
462 | 重写常量或参数 <name> 失败
463 | 输入坐标在 "X"上非单调
464 | 不能把t <type> 转换为 <type>
465 | 不允许进行<action> <message>
MATH |
500 | 函数 <name>的参数值非法
501 | 函数 <name> 的值不能为负
502 | 函数 <name> 需要 <n> 个参数
510 | 函数 <name>有数学错误
511 | 除数为零
512 | 负值不能用作非整数幂 (<n>)
513 | Zero 不能用作非正数幂 power (<n>)
514 | 数字值在函数 <name>中溢出
515 | 数字值在函数 <name>中下溢
516 | 在计算<name>时，出现和上溢
517 | 不可知的函数或 UserFunction: '<name>'
520 | LOG 映射的边界必须 > 0
521 | LOG映射函数的X-data必须 > 0
522 | 不支持排序 <n>的分布
523 | 不支持多维数组上的插入
ActiveX |
550 | ActiveX 对象 <name>失败
551 | ActiveX对象返回的数据类型不兼容 <name>
552 | 参考的 ActiveX 对象中的<name>失败
553 | 在 <action> <name>过程中 ActiveX对象返回一个错误
554 | <name>不是参考的 ActiveX 对象的成员
555 | 试图在没有指定值是就设置属性 <name>
556 | ActiveX对象不实现接口 <name>
557 | 不能建立ActiveX 对象
558 | <name>的目标操作系统平台不是 WIN32
559 | 不能从<name>中载入类型库
560 | 没有发现属性 <name>
561 | 没有装入任何有关 <name>的类型信息
562 | 无效 CLSID: <number>
563 | 无效 ProgID: <name>
564 | 无法建立到<name>的事件连接
565 | 不能访问 ActiveX 对象 <name>
566 | ActiveX 对象返回了一个不兼容的值
567 | 不能得到 ActiveX 对象 <name>的实例
568 | 程序化访问VEE对象的属性失败
569 | ActiveX Automation 数组错
570 | 不能访问 ActiveX Automation 数组中的数据
571 | 不能创建远程对象， DCOM 没有安装。可以从 Microsoft 网站下载并安装 DCOM95
MATLAB 脚本 |
590 | MATLAB 没有安装。 重新安装 VEE并选择 MATLAB Script 安装选项。
591 | 不能启动 MATLAB Script引擎
592 | MATLAB 一般错误r <message>
593 | MATLAB Script错误
594 | MATLAB 数据包含无限大或 NaN
表达式 |
600 | 语法错: <描述>
601 | 无效表达式: <描述>
602 | 函数没有找到: <name>
603 | 没有找到变量: <name>
604 | 函数不能装入: <name>
610 | 提供了过多的参数 (最大=<n>)
611 | 提供给函数<name>的参数数量错
620 | 名称或字符串常量过长 (> n chars)
621 | 重复的符号名<name>
622 | 无效的变量／终端名 <name>
623 | 没有找到字符串的结束引号
624 | 解析字符串时，发现非法字符
625 | 非法换码字符序列 <sequence>
626 | 重复的记录域名 <name>
627 | 重复的库名 <name>
628 | 无效的记录域名 <name>
629 | 无效的 UserFunction名 <name>
630 | 无效值
631 | 表达式的值必须为全零或全非零
640 | 不匹配错误: 期望为<name>, 实际为 <name>
641 | 不认识的参数: <name>
642 | 没有定义的参数: <name>
643 | 该程序没有执行窗口
650 | 库: <name> 包含正在运行的函数，不能删除
660 | 无效名: <name>
文件 |
700 | 没有找到文件 <name>
701 | 文件结尾或发现没有数据
702 | 不能打开文件<name>: 许可被延迟
703 | 不能读文件 <name>
704 | 不能写文件 <name>
705 | 读文件 <name>错
706 | 文件结束或没有找到匹配的
707 | 需要读 <n>, 值找到了 <m>
708 | 对到的字节数必须为数据大小的倍数
710 | 文件 <name>不是一个命名的管道
711 | 无法创建文件 <name>
712 | 文件 <name> 已经存在
713 | 无效路径名 <name>
714 | 文件为目录
715 | 目录不为空
716 | 文件 <name>不能执行
717 | 无效工作目录 <name>
718 | 不能创建过程。 (Windows 错误号: <n>)
720 | 文件正在使用中
721 | 设备忙
722 | 无法访问不同的文件系统
723 | 打开的文件太多
724 | 文件太长
725 | 磁盘满
726 | 文件查找错
727 | 系统文件号错
728 | 符号连接太多
729 | 非法文件格式
730 | 文件中没有 UserFunction
733 | 无法合并 secured 程序
734 | 无法创建共享内存段
736 | 无法读二进制文件 <name>
737 | 无法写二进制文件 <name>
738 | 无法恢复的语法错误
739 | 从compiled function返回的栈指针错
.NET |
751 | .NET 调用失败
752 | 例外
753 | 没有默认成员
754 | 无法访问 .NET
755 | 属性未赋值
756 | 无法建立对象
757 | 无法获得成员信息
758 | 没有对 .NET操作做好准备
759 | 无法获得 Namespace
760 | 无法找到的类型
761 | 事件连接失败
763 | 无法建立时间连接
764 | 创建 .NET 操作失败
765 | The control may have to added to another control programmatically
I/O |

800

没有该设备或地址错误

801

配置错误: <description>

802

设备文件 <name> 错误

803

设备 <name>不是基于消息的

804

非法访问设备 <name>上的内存

810

仪器驱动程序错 <n>: <description>
详情请参阅仪器手册

811

I/O 错误或超时

812

无效的 bin block 头

813

必须为当前活动的系统控制器，才能访问 GPIB

814

对 <device> <interface>的锁定获取失败

815

对VXIplug&play函数调用返回失败，错误号 <n>

816

对VXIplug&play init() 函数调用返回失败，错误号 <n>

817

对NIDAQ 驱动函数调用返回失败

818

对NIDAQ NIxxxx_init() 函数调用返回失败

821

不支持对 <name> 接口的事务操作

830

无法初始化对应用程序 <name>, 论题 <name>的DDE连接

831

对项目 <name>的 DDE POKE失败

832

从项目 <name>来的DDE REQUEST 失败

833

DDE EXECUTE 失败

850

无法识别的主机 <name>

851

主机<name>上没有 Service Manager

852

该主机上的网络没有初始化

853

连接超时

854

在从网络上接受前发生了中断

855

连接被中断

856

操作系统超出了缓冲空间

857

网络中断

858

在连接到主机 <name>前发生中断

859

端口 <name>已被使用

860

对<name>的连接尝试超时

861

<name>上的Service Manager没有响应

862

主机 <name>上的服务 <name>没有响应

863

没有找到主机 <name>上的服务<name>

864

无法启动主机 <name>上的服务<name>

865

主机 <name>上的服务<name>出错

866

到主机 <name>的连接失败

867

无法找到主机<name>上的 UserFunction <name>

868

主机 <name>上的用户 <name>没有权限

869

主机 <name>上的远程服务 <name>错， 错误报告: <n>

870

收到Non-blocking

871

远程调试尚未结束就被中断

876

COM HRESULT返回错误代码

877

需要传递 ByRef的参数为 <name>

878

<name>返回值无效

879

VEE的数据容器空

880

数组 <name> 的大小必须为域计数 <n>的整数倍数

系统

900

程序执行中不允许操作

901

非法反馈形式

902

发生了意料外的 BREAK

903

发生了意料外的 CONTINUE

904

发现了非法设备

905

非法版本 "<rev>" (期望值为 "<rev>")

906

带反馈的线程请求START对象

910

过程超出内存容量，立即保存程序

911

浮点错，可能为上溢或下溢

912

系统过程过多

913

发生复位或中断

914

无法打开显示

915

操作系统没有资源

920

对管道的写，没有过程去读它 (signal = <n>)

921

收到用户定义的信号１ (signal = <n>)

922

收到用户定义的信号２ (signal = <n>)

930

PreRun 时发生错误

935

反馈环路中需要一个连接对象

936

UserFunction不能重入

937

没有给Sample & Hold 任何数据

938

VEE 无法编译程序的这个部分

939

当线程连接到输入端时不能按下 START

940

非法反馈形式

941

T1 必须在 T2前激活

950 through 999

EXCEL 库

2001

  • 试图访问第２５６列之后获第１列之前的列；

  • 试图访问第一行之前和最后一行之后的行；

  • 发现无效的单元格或范围地址被试图转换为数字行和列: <column>;

  • 试图向第２５６行之后的行传递数据.

2002

  • 试图发送超过三维的数据;

  • 发送数据类型 \nENUM错。该类型被做为记录\nSPECTRUM的一部分来传送。请参阅范例\nCCOMPLEX,\nPCCOMPLEX, \nCOORD, \nOBJECT - Excel库不支持;

  • 试图发送一个三维或以上的记录

2003

该标但已被保护，不能被修改

2004

  • 当前工作簿中无法找到该表单;

  • 无法在当前打开的工作簿集中找到该工作簿

2005

试图在没有打开的工作簿时，发送数据

2006

SendRecord输入不是一个记录

2007

  • SendDataSettings.ThreeDArrays无法识别的值;

  • Print无法识别的值

2008

数据大小 > 254。无法建立烧锅 254个的新表单

2022

无法识别的 Chart类型

2023

线段图表设置Names数组错。可能的原因是该数组与数据数组的大小不一致。如果选择了 Logarithmic,　也请确认数据中没有负值。

2025

ActiveChart.ApplyCustomType(xlBuiltIn, "Logarithmic")错。非英文版本的 Office不支持此项。请参阅联机帮助以获得可能的替代方法。

另请参阅

VEE中.NET的错误


激活

1. 把一个容器发送到一个端上。另请参阅Container和Terminal。

2. 在每次运行前复位UserObject上下文的操作。另请参阅Context和PreRun。


ActiveX

允许多个流程在Windows平台上通信的一种通信机制。ActiveX是基于Microsoft COM的一系列技术，包括各种分布式计算辅助功能，如ActiveX Controls和ActiveX Automation Servers。


分配

初始化VEE数组。分配操作设置维数、每个维度中的元素数量，用初始数据填充数组。例如，在默认情况下，用0填充二维整数数组。


数组

与数学数组对应的一种数据形状，其中包含一维或多维的一组数据项(所有数据项的数据类型相同)。通过数组索引存取数据项。在VEE中，一维数组称为Array 1D，二维数组称为Array 2D，依此类推。另请参阅数据形状。


异步

在异步操作中，设备在没有同步事件的公共信号的情况下运行，这些事件在非指定时间发生。VEE控制端(如显示对象上的Clear端)是异步的。


Auto Execute

数据常数对象的对象菜单上的一个选项。如果设置了Auto Execute，且程序还没有运行，那么在编辑其值时对象会运行。在程序运行时，会忽略Auto Execute。


Bitmap

位图

位图形或图片。在VEE中，可以使用Picture对象或在任何图标上显示一个位图。还可以在主程序面板视图、UserObject面板视图或UserFunction面板视图的背景上显示一个位图。


Breakpoint

断点

调试程序使用的一个工具。如果为一个对象设置断点，那么就在该对象执行前，程序会暂停。


Buffer

缓冲器

存储器中临时存储信息的区域。


Button

按钮

VEE中的一个图形对象，它仿真瞬时开关或选择按钮，从屏幕上弹出。在VEE中用鼠标点击"按"一个按钮时，会发生一个操作。(也可能指明鼠标左键或右键。)


Cascading Menu

级联菜单

下拉菜单或弹出菜单中提供额外选项的子菜单。


Checkbox

复选框

菜单和对话框上隐藏的方框，允许选择一个设置。为选择一个设置，点击这个框，框中会出现对号，表明选中了这个框。为取消设置，只需再点击这个框即可。


Click

点击

按下后放开鼠标键。点击通常会选择VEE窗口中的一个菜单功能或对象。另请参阅双击和拖动。


Clone

克隆

对象菜单上的一个菜单项，复制对象及其互连，把对象拷贝放在Paste缓冲器中。Clone复制被克隆对象的所有属性，包括端、参数和大小。


Compiled Function

通过把用编程语言(如C语言)编写的程序动态链接到VEE流程中创建的一个用户自定义函数。用户必须创建一个DLL (动态链接库)文件和一个定义文件。Import Library对象把DLL附着到VEE流程中，解析定义文件声明。然后可以使用Call Function对象或从特定表达式中调用Compiled Function。另请参阅UserFunction和Remote Function。


Component

组件, 成分, 部分

VEE仪器面板或组件驱程中的一个仪器函数或测量值。例如，电压表驱程包含多个组件，记录范围、触发源和最新读数。另请参阅Component Driver, Driver Files, State和Instrument Panel。


Component Driver

组件驱动程序

把值读写到具体选择的组件的仪器控制对象。使用组件驱程，通过一次只设置多个组件的值，使用驱程控制仪器。(组件驱程不支持耦合。)


合成数据类型

具有相关形状的一种数据类型。另请参阅数据形状和数据类型。


Container

容器

参阅数据容器。


Context

上下文

一种工作区等级，可以包含其它等级的工作区(如嵌套UserObjects)，但独立于其它等级的工作区。


Control Pin

控制端

一个异步输入端，它把数据传送到对象上，而不用等待对象的其它输入端包含数据。例如，VEE中的控制端通常用来清除或自动定标显示画面。


Coupling

耦合

仪器中某些函数的相互关系。在仪器面板中，如果函数A和函数B耦合，那么改变A的值可能会自动改变B的值，即使没有明确改变B。


Cursor

光标

输入字段中的一个指针(脱字符号)，表明在从键盘上输入信息时字母和数字数据会出现的地方。


Cut Buffer

剪切缓冲器

保存剪切或复制的对象的缓冲器。然后可以使用Edit [image] Paste把对象粘回到工作区中。


Data Container

数据容器

通过线路传送的、由对象处理的数据封装。每个数据容器包含着数据和数据类型、数据形状和映射(如有)。


Data Field

数据字段

指定要写入的表达式(WRITE事务)的事务规范内部的字段，或接收被读取的数据的变量(READ事务)。另请参阅事务。


Data Flow

数据流程

经过VEE对象及VEE对象之间的数据流程。数据从左到右流经各个对象，但只有在所有数据输入端上都有数据时，才会执行对象。数据从一个对象的数据输出端传播到下一个对象的数据输入端。数据流程是决定VEE程序执行情况的首要因素。


Data Input Pin

数据输入端

对象左侧的一个连接点，允许数据流入对象中。


Data Output Pin

数据输出端

对象右侧的一个连接点，它把数据流程传播到下一个对象中，把第一个对象的结果传送给下一个对象。


DataSet

保存到文件中、以备日后检索的"Record"容器集。To DataSet对象收集输入上的Record数据，把这些数据写入到一个命名的文件中(DataSet)。From DataSet对象从命名的文件(DataSet)中检索Record数据，作为Record容器在其Rec输出端输出这些数据。另请参阅Record。


Data Shape

数据形状

每个数据容器都有一个形状和一个类型。数据形状可以是标量或数组。数据形状可以是标量或一维或多维数组。在VEE中，一维数组称为Array 1D，二维数组称为Array 2D，依此类推。


Data Type

数据类型

每个数据容器都有一个类型和一个形状。VEE支持多种数据类型，包括Text, Int16, Real64, Complex, Waveform等等。


DDE (Dynamic Data Exchange)

DDE (动态数据交换)

允许流程在Windows平台上通信的一种通信机制。DDE是一种比较老的机制，已经被ActiveX代替。


Default

默认值

自动选择的一个值或操作。例如，VEE使用某些默认颜色和字体，可以使用Default Preferences对话框改变这些颜色和字体。


Default Button

默认按钮

在按Enter或Return或双击选项时，对话框中在默认状态下激活的按钮。默认按钮的标签采用粗体。


Demote

降级

从包含较多信息的数据类型转换成包含较少信息的数据类型。另请参阅数据类型和晋级。


Detail View

详细视图

VEE程序中显示所有对象及对象之间的线的视图。


Device Driver

设备驱动程序

参阅接口驱动程序。


Dialog Box

对话框

在VEE要求输入信息后才能继续执行时显示的二级窗口。例如，对话框中可能会包含一个可以选择的文件列表。


Direct I/O Object

Direct I/O对象

一种仪器控制对象，允许VEE直接控制仪器，而不必使用专用驱程。


DLL (Dynamically Linked Library)

DLL (动态链接库)

使用C语言编写的可以从VEE for Windows中调用的函数集。可以由资深C编程人员使用微软工具创建DLL。


Double-Click

双击

迅速连续按下和放开鼠标按钮两次。双击通常是选择和执行某项操作的快捷方式。例如，从File [image] Open中双击一个文件名会选择和打开这个文件。


Drag

拖动

按下并一直按住鼠标按钮，移动鼠标。拖动操作会移动某个项目(如对象或滚动条)。


Driver

驱程，驱动程序

允许计算机与其它软件或硬件通信的软件。另请参阅组件驱程, 驱程文件, 接口驱程和仪器面板。


Driver Files

驱程文件

VEE自带的文件集，其中包含创建控制仪器使用的仪器面板和组件驱程对象所需的信息。


Drop-Down List

下拉列表

点击选项字段右面的箭头时出现的选项列表。


Entry Field

输入字段

用来输入数据的字段，它一般是对话框的一部分，或者是一个可以编辑的对象。在其背景为白色时，可以编辑输入字段。


Error Message

错误信息

错误对话框中出现的信息，解释已经发生了一个问题。


Error Pin

错误端

捕获对象中发生的任何错误的端。错误端上输出错误编号，而不是获得错误信息。在生成错误时，不激活数据输出端。


Execute

执行

运行程序(或其部件)的操作。


Execution Flow

执行流程

对象运行的顺序。另请参阅数据流程。


表达式

输入字段中的一个等式，可能包含输入端名称、局部或全局变量名称、数学运算符、内置函数和用户自定义函数。表达式在运行时求解。表达式可以用于Formula, If/Then/Else, Get Values, Get Field, Set Field, Sequencer和Dialog Box对象及I/O事务对象中。


Feedback

反馈

使用上次执行的值改变当前执行的值的、由序列和/或数据线组成的连续线程路径。


Flow

流程

参阅数据流程和执行流程。


Font

字体

字体的大小和样式。


Function

函数

对象的名称和操作，其中输出是输入的函数。这些对象位于Function & Object Browser中(Device [image] Function & Object Browser)，可以用于Formula对象中。例如，sqrt(x)是一个函数，+不是一个函数。


Global Variable

全局变量

在全局设置的命名变量，可以根据名称用于VEE程序的任何上下文中。例如，可以使用Set Variable在程序的根上下文中设置全局变量，可以使用Get Variable按名称存取全局变量，或从UserObject上下文内部的某些表达式中存取全局变量。但是，名称与全局变量相同的局部变量在表达式中优先权较高。参阅变量。


变成灰色的功能

用灰色而不是黑色显示的一种菜单功能，表明该功能没有激活或不能使用。按钮、复选框或单选按钮等对话框项目也可以是灰色。


Highlight

高亮度显示

1. 对象周围的彩色或阴影，以可视方式提示对象的状态。

2. 菜单功能上的颜色变化，表明用户正在指向该功能。


Host

主机

1. 开始一个线程或子线程。例如，For Count提供主机的子线程是迭代的子线程。

2. 在分布式系统中，运行(或服务)一个工具或程序的计算机。


Hypertext

超文本

把多个主题链接起来的系统，在用户需要更多的信息时，可以跳到相关主题。在联机帮助系统中，超文本链接一般会在下面标有下划线。在点击这些文本时，会出现相关信息。


Icon

图标

1. VEE对象的小的图形表示方式，如表示仪器、控件或显示画面。

2. 应用程序、文件或文件夹的小的图形表示方式。


Instrument

仪器

测量和/或测试信号源使用的一种电子设备。仪器使用GPIB, RS-232, GPIO, VXI, LAN或USB接口连接到计算机上。特定VEE对象(如Direct I/O对象和Panel Drivers)与仪器通信。


Instrument Driver

仪器驱程

参阅驱程文件, 组件驱程和仪器面板。


Instrument Panel

仪器面板

一种仪器控制对象，强制相应物理仪器中的所有功能设置都与该对象open view中显示的控制面板中的设置相匹配。


Interface

接口

不同硬件(或软件)系统中的对象之间共享的边界。GPIB, RS-232, GPIO, LAN, USB和VXI称为仪器I/O使用的接口。特定的VEE对象如Interface Event对象，只能把命令发送到接口上。


Interface Driver

接口驱程

允许计算机与硬件接口通信的软件，如GPIB或RS-232接口。


Iterate

迭代

使用其中一个Repeat对象(如For Count)，重复(循环)部分VEE程序。


Library

库

通常使用的、被划分在一起的对象或程序集，以便于存取。


Line

线, 直线

VEE中两个对象之间传送要处理的数据容器的链路。另请参阅线程。


Logical Unit

逻辑单位

用来识别硬件接口的逻辑地址的数字。例如，大多数GPIB接口的出厂默认逻辑单位都是7。


Loop

循环

使用其中一个Repeat对象(如For Count)重复部分VEE程序。


Main Menu

主菜单

位于VEE菜单栏中的菜单。为打开一个主菜单，点击菜单栏中相应的菜单标题。也可以使用加速器。例如，Alt+F打开File菜单。


Main Work Area

主工作区

也称为Main Window(主窗口)。


Main Window

主窗口

开发VEE程序的根工作区或一级工作区。这个Main Window工作区位于VEE窗口的工作空间中，是所有其它上下文的母上下文。


Mapping

映射

由连续值或离散值组成的集合，表示数组的独立变量 (如波形的时间跨度)。


Maximize

最大化

使用最大化按钮放大窗口，如Main、UserObject或UserFunction，使其装满VEE窗口提供的所有工作空间。对VEE窗口，这会装满提供的所有屏幕空间。


Maximize Button

最大化按钮

UserObject、UserFunction和Main窗口上的一个按钮，可以使用这个按钮放大窗口，使其装满VEE窗口提供的所有工作空间。对VEE窗口，这会装满提供的所有屏幕空间。


Menu

菜单

出现在列表中的功能集。另请参阅级联菜单, 主菜单, 对象菜单, 弹出菜单和下拉菜单。


Menu Bar

菜单栏

VEE窗口顶部显示下拉菜单和主菜单标题的条，您可以从中选择不同的功能。


Menu Title

菜单标题

VEE菜单栏内部的菜单名称，如File或Edit。


Minimize

最小化

1. 把对象的open view降低到最小尺寸 -- 图标。

2. 把窗口降低到最小尺寸 -- 图标。


Minimize Button

最小化按钮

对象或VEE窗口上的一个按钮，它会把对象或VEE窗口变成图标。


Mouse

鼠标

一种指点设备，可以在某个表面上移动鼠标，在VEE窗口内部移动指针。


Mouse Button

鼠标按钮

鼠标上的一个按钮，可以单击或双击这个按钮，使用VEE窗口中的相应指针，执行特定操作。


Network

网络

连接在一起的一组计算机和外设，允许共享数据和工作负荷。


Object

对象

程序中的单元的图形表示方式，如仪器、控制、显示或数学运算符。对象放在工作区中，连接到其它对象上，创建一个程序。


Object Menu

对象菜单

与一个对象相关的菜单，其中包含着在该对象上运行的功能(如移动, 调整大小, 复制和删除对象)。为获得对象菜单，点击对象左上角的对象菜单按钮，或把指放移到对象上，然后按鼠标右键。


对象菜单按钮

open view对象左上角的按钮，在点击时会显示对象菜单。


Open

打开

启动一项操作或开始处理文本、数字或图形文件。在从VEE中选择Open时，工作区中会加载一个程序。


Open View

比图标更详细地表示VEE对象。大多数对象的open view有多个字段，允许修改对象的操作。


Operate

运行, 操作

处理数据及输出结果的对象操作。在已经激活对象的数据输入端和序列输入端时，这个对象会运行。参阅激活。


操作界面

VEE编程人员创建的允许操作人员(最终用户)控制程序的界面。典型的操作界面包括面板视图和对话框。


外框

表示一个对象或一群对象的外部边缘的框，指明一个或多个对象将在工作区的哪个地方。


Palette

调色板

VEE中提供的可能颜色集。


Panel Driver

面板驱程

一种仪器控制对象，它强制相应物理仪器中的所有功能设置与对象的open view中显示的对象控制面板设置相匹配。


Panel View

面板视图

VEE程序、UserObject或UserFunction的一种视图，它只显示用户运行程序和查看数据结果所需的对象。可以使用面板视图，为程序创建一个操作人员界面。


Pin

端

对象上的外部连接点，可以用它们连接一条直线。


Pointer

指针

与鼠标移动对映的图像。指针允许用户进行选择，提供了正在进行的某个流程的反馈信息。VEE有不同形状的指针，这些指针与不同的流程模式相对应，如箭头、十字线和沙漏。


Pop-Up Menu

弹出菜单

按鼠标右键弹出的菜单。例如，在工作区内部空白区域按鼠标右键，会弹出Edit菜单。也可以在对象没有活动的区域按鼠标右键，弹出对象菜单。


PostRun

在程序停止时执行的一套操作。


Preferences

首选项是可以使用工具栏上的Default Preferences按钮或菜单File [image] Default Preferences改变的VEE环境的属性。例如，可以改变默认颜色、字体和数字格式。


PreRun

在程序开始运行前复位程序、检查错误的一套操作。


Program

程序

在VEE中，程序是指由使用直线相连的对象集组成的图形程序。程序一般代表着解决某个工程问题的方案。


Program Explorer

VEE窗口中的一个辅助工具，它可以浏览程序内容，特别是物理屏幕上可能看不到的程序的各个部分。(Program Explorer只能用于VEE Pro中。)


晋级

从包含较少信息的数据类型转换成包含较多信息的数据类型。另请参阅数据类型和降级。


传播

在操作或运行时对象和程序遵守的规则。另请参阅数据流程。


Properties

属性

对象属性是可以使用对象菜单上的Properties改变的VEE对象的属性。可以使用对象菜单上的Properties，改变Main, UserObject和 UserFunction窗口的属性。属性包括颜色、字体和标题。


Pterodactyl

翼龙

灭绝的、属于侏罗纪时期和白垩纪时期翼龙目、会飞的各种爬行动物。翼龙的特点是有一对翅膀，其中由拍打的皮肤组成，在每个前腿上有非常长的第四个脚趾。


下拉菜单

在把指针放在一个菜单标题上，按鼠标左键时，从菜单栏上拉下的一个菜单。


Radio Button

单选按钮

VEE对话框中的一个菱形按钮，允许选择与该对话框中其它单选按钮互斥的设置。为选择一个设置，点击单选按钮。为删除设置，点击同一个对话框中的另一个单选按钮。


Record

一种命名了数据字段，其中可以包含多个值的VEE数据类型。Record(记录)一般用来划分信息的相关条目。但是，每个记录字段可以包含一种不同的数据类型。每个字段可以包含另一个Record容器，一个Scalar或一个Array。Record数据类型在所有VEE数据类型中的优先级最高。但是，不能通过自动晋级/降级过程把数据自动转换成Record数据类型及从Record数据类型自动转换数据。必须使用Build Record和UnBuild Record对象构建/拆除记录。


Remote Function

可以从本地主机上调用的一种UserFunction。(只有VEE Pro中才支持远程函数) Import Library对象在远程主机上启动流程，把UserFunctions加载到远程主机上的VEE流程中。然后可以使用Call Function对象或从某些表达式中调用Remote Function。另请参阅UserFunction, Remote Functions和Compiled Function。


Restore

恢复

通过双击它，把最小化窗口或图标返回到窗口或open view。


Run

在程序或线程运行时启动多个对象。


保存

把文件写入存储设备中，如硬盘。


Scalar

包含单个值的一种数据形状。另请参阅数据形状。


示意图

用来定义数据记录的结构或框架，包括每个字段的名称、类型、形状(和维度大小)和映射。


屏幕转储

窗口或部分窗口的图形打印输出。


滚动

使用滚动条在对话框中移动通过数据文件或其它选项列表或平移工作区的操作。


滚动箭头

一个箭头，在点击时它会在对话框中滚动通过数据文件或其它选项列表，或移动工作区。


滚动条

一个长方形条，在拖动时，会在对话框中滚动通过数据文件或其它选项列表，或移动工作区。


选择

为选择一个对象而执行的一项操作，或一个菜单项目。通常通过点击鼠标，来进行选择操作。


Select Code

用来识别硬件接口地址的一个号码。"select code"已经被逻辑单位术语所代替。


选项

1. 一个菜单选项(功能)。

2. 在VEE窗口中已经选中的一个对象或操作。


选择字段

对象或对话框中的一个字段，允许从下拉列表中选择选项。


序列输入端

一个对象最上面的端。在连接时，会保持执行对象，直到这个端收到一个容器(被"ping")。


序列输出端

一个对象最下面的端。在连接时，当对象及来自该对象的所有数据传播执行完时，会激活这个输出端。


Sequencer

通过一系列序列事务控制执行流程的对象，每个事务可以调用一个UserFunction, Compiled Function或Remote Function。定序器通常用来指定一系列事务来执行一系列测试。(Sequencer只能用于VEE Pro中)


休眠

在等待运行或时间间隔结束或等待事件发生时，对象会休眠。休眠的对象允许并发运行其它并行线程。一旦事件、时间间隔或运行发生，将执行对象，允许继续执行。


启动目录

参阅工作目录。


状态

与VEE仪器面板相关的所有组件的特定值集合，表示仪器的测量状态。例如，数字万用表对高速电压读数使用一种状态，对高精度电阻测量使用不同的状态。另请参阅Instrument Panel。


状态栏

VEE窗口底部的一个行，其中显示VEE的当前状态信息及VEE相关信息。


状态字段

显示不能编辑的信息的字段。状态字段看上去与输入字段类型类似，但背景是灰色的。


步进

运行VEE程序的操作，一次运行一个对象(以调试程序)。下次将运行的对象用黄色高亮度显示。VEE为步进通过一个程序提供了三种方式：Step Into, Step Over和Step Out，可以控制UserObject和UserFunction中对象运行。


端

端子, 终端, 端

端的内部表示方式，显示与端有关的信息及端保持的数据容器。双击一个终端，可以查看容器信息。


端区域

对象左侧和右侧的区域，在为该对象激活Show Terminals时会显示端。输入端区域位于对象的左面，输出端区域位于对象的右面。


Thread

线程

在VEE程序中用实线连接的对象集合。拥有多个线程的程序可以同时运行所有线程。


Title Bar

标题栏

对象或窗口open view顶部的长方形条，显示对象或窗口的标题。可以使用对象菜单上的Properties关闭对象标题栏。


Toolbar

工具栏

VEE窗口顶部的长方形条，提供了多个按钮，可以迅速进入常用命令。这些按钮运行来自File, Edit, View, Debug和Device等菜单中的命令。


Transaction

事务, 交易, 处理

VEE中某些对象使用的输入和输出(I/O)规范，包括To File, From File, Direct I/O和Sequencer对象。事务作为这些对象open view中列明的短语出现。


Trig Mode

触发模式

Trig Mode是一种属性，它决定着三角测量值是用度显示、用弧度显示、还是坡度显示。注意VEE自动把三角测量值转换成弧度，以进行计算。


用户自定义函数

用户可以创建、然后在VEE程序中调用的函数。可以创建三种使用Call Function对象或从某些表达式中调用的用户自定义函数。另请参阅UserFunction, Compiled Function和Remote Function。


UserFunction

直接在UserFunction窗口中或从现有的UserObject中创建的用户自定义函数。UserFunction存在于VEE流程的后台中，但提供的功能与UserObject相同。可以使用Call Function对象或从某些表达式中调用UserFunction。可以在本地创建和调用UserFunction，也可以保存在库中，使用Import Library导入到VEE程序中。(只有VEE Pro中才支持导入UserFunction) 另请参阅Compiled Function, Remote Function和UserObject。


UserObject

可以封装一组对象，在程序内执行特定用途的对象。UserObject允许在构建程序时使用从上而下的设计技术，及构建可以保存在库中和重用的用户自定义对象。


Variable

变量

声明或未声明的命名变量。变量可以使用Declare Variable声明为局部变量、上下文全局变量或库全局变量。局部变量和全局变量可以在不声明的情况下在运行时设置值；但是，程序对声明变量运行速度较快。


View

视图

VEE可以在各种视图中表示程序和对象。程序可以出现在细节视图或打开视图中，对象可以出现在打开视图或图标视图中。参阅Detail View, Icon, Open View和Panel View。


Wait

等待

参阅休眠。


Window

窗口

屏幕上包含某个应用程序的长方形区域，如Agilent VEE。


Windows 2000和XP

采用微软公司开发的视窗界面的一种操作系统，VEE在这一系统上运行。Windows 2000和Windows XP系统运行32位应用程序，但具有明显的用户/内核边界。


工作区

Main, UserObject或UserFunction窗口内部的区域，可以把VEE对象放在这个区域中，把这些对象用线连接起来，创建一个VEE程序。在打开一个程序时，它会加载到Main窗口的工作区中。


工作空间

VEE应用窗口中的空间，其中包含编程或编辑窗口，如Main, UserObject和UserFunction。这些窗口包含着工作区域，可以把VEE对象放在这些区域中，用线连接起来，创建一个VEE程序。


工作目录

VEE运行的目录。例如，"C:\Program Files\Agilent\VEE Pro 7.5"是VEE Pro for Windows默认的工作目录。工作目录有时称为"启动目录"，因为它在启动VEE的快捷方式中指定。


XEQ Pin

XEQ端

即使数据输入端或序列输入端没有激活，仍会强制执行对象操作的端。只适用于Collector和Sample & Hold对象。另请参阅控制端, 数据输入端和序列输入端。


关于Agilent VEE Pro中的.NET错误

VEE提供.NET传送给它的所有信息。考察使用的具体.NET方法在很大程度上可以为您提供足够的信息，确定异常事件的特点。否则，可以直接进入MSDN中的异常事件类型。

带有详细异常事件框、自行解释异常事件的范例如下：

详细程度较差、但常见的错误信息如下，其中方法提供了提示：


Access Array

一个菜单项。

用途

使用Access Array存取下述数组修改对象：

Set Values

Get Values

Set Mappings

Get Mappings

备注

这些对象通常用于Allocate Array对象修改要素或在新建数组中添加映射关系之后。

位置

Data [image] Access Array

另请参阅

Allocate Array, Get Mappings, Get Values, Set Mappings, Set Values和对象菜单。

从数组中提取值


Access Record

一个菜单项。

用途

使用Access Record存取下述记录修改对象：

Merge Record

SubRecord

Set Field

Get Field

备注

这些对象通常用于Build Record对象修改要素、合并记录或存取记录各部分之后。

位置

Data [image] Access Record

另请参阅

Build Record, Merge Record, SubRecord, Set Field, Get Field和对象菜单。

改变记录中的字段


Accumulator

显示和输出其输入值累积和的对象。

用途

使用Accumulator获得累加和。

对象菜单

Clear - 清除Accumulator的内容。

备注

累加的输出数据类型与最高阶的输入值相同。因此，如果Accumulator是Real64和Int32输入，它会输出一个Real64。

例如，如果使用Real64激活Accumulator数据输入，那么后者由Complex激活，当前累加数据是Complex；Accumulator把Real64数据转换成Complex。如果其中一个输入是文本，那么所有数据将转换成文本。

在混合数据时使用警告。其输入顺序决定着输出。如果输入是实数、实数和文本，那么Accumulator将把两个实数相加，把结果转换成文本，然后把输入文本串追加到实数串末尾。如果输入是文本、实数和实数，Accumulator将把两个实数转换成字符串，把它们追加到文本串的末尾。它们将在累加的字符串中表现为两个不同的数字，而不是两个实数之和。

位置

Device [image] Accumulator

另请参阅

Counter, Properties (对象)和对象菜单。


Activate Breakpoints

在复选时，会启用设置的所有断点。在没有复选时，会取消所有断点。

用途

使用Activate Breakpoints在调试和正常程序运行之间切换。在Activate Breakpoints打开时，会复选菜单选项。在遇到断点时，程序停止运行。

备注

即使在关闭Activate Breakpoints时，设置了断点的对象周围仍会存在橙色(默认值)边框。对象Properties显示复选了Set Breakpoint，而不管Activate Breakpoints状态如何。

如果没有复选Default Preferences中的Disable Debugging Features框，那么断点只在VEE 4和更高执行模式下活动。在对象上设置了断点时，Step Into将中断，Step Over将不会中断。

位置

Debug [image] Activate Breakpoints

另请参阅

Clear All Breakpoints, 默认首选项, Properties (对象), Step Into, Step Over和Toggle Breakpoint。


ActiveX Automation References

显示ActiveX Automation References对话框，它允许提供VEE中使用的ActiveXAutomation库。

用途

使用ActiveX Automation References对话框，选择VEE用来控制其它应用程序的ActiveXAutomation库。如果已经安装了相关应用程序，那么库会出现在这个对话框中，因此Windows Registry可以识别这些库。在选择希望的库时，按OK，把库加载到内存中以供VEE使用，搜索对象类，调度接口和导出的事件。只有在计划处理类型库生成的事件时，或想参考任何类型库，以便其功能(属性、方法、枚举、事件)出现在Function & Object Browser中时，才必须选择类型库。

在参考类型库之前，使用内置函数CreateObject() or GetObject()，连接一个Automation对象。然后在选择库以后，打开VEE的Function & Object Browser (Device [image] Function & Object Browser)，在Type: 区域中选择ActiveX Objects，在Formula对象中生成表达式，操纵对象。使用其它Formula表达式，获得和设置其属性，调用方法。

对话框信息

Registered Automation Servers: - 包含注册的ActiveXAutomation库列表。点击一个名称，高亮度显示它，查看列表下面状态区域中的信息。点击名称旁边的框，点击OK，选择它，以用于VEE中。

Browse… - 如果在系统上存在没有出现在列表中的库，点击Browse，在Add ActiveX Automation Reference对话框中搜索库。在找到和打开库时，VEE会把这个库添加到列表中，试着注册库。为在VEE中使用库，一定要复选它所在的框，点击OK。

备注

VEE必须设为VEE 5或更高的执行模式，以便使ActiveX支持生效(Default Preferences)。对能够作为Automation Servers操作的应用，ActiveX Automation允许作为Automation Controller使用VEE。这可以与Microsoft Word、Excel和Access等应用程序交互，完成从VEE发送数据、生成报告等活动。在具有Automation功能的应用中，这全面代替了VEE的当前应用控制解决方案Dynamic Data Exchange (DDE)。

在安装包含Automation库的应用程序时，会安装Automation库。

仅选择所需数量的库，避免过多地占用内存。

如需与影响ActiveX参考的编程技术有关的信息，请参阅CreateObject内容。

位置

Device [image] ActiveX Automation References…

另请参阅

参见ActiveX范例目录中的范例程序
Help [image] Open Example…

ActiveX Control References, 默认首选项, Formula, Function & Object Browser, CreateObject, GetObject, ActiveX范例

参阅VEE高级技术手册中的"使用ActiveXAutomation对象和控件"。


ActiveX Control Host

为添加到VEE工作区中的ActiveX控件提供主机的VEE对象。

用途

ActiveX Control Host作为ActiveX控件的容器使用。在工作区中添加一个控件时(Device [image] ActiveX Controls)，VEE创建容器，因此可以象存取其它VEE对象一样存取控件。容器还允许存取控件开发人员在控件中构建的特定属性。

当控件出现在工作区中时，它在标题栏中有一个标题和变量名称。它没有使用直线连接到其它对象的端。必须使用指称变量名称的表达式，操纵控件，获得和设置其属性，调用方法。VEE的Function & Object Browser (Device [image] Function & Object Browser)帮助您在Formula对象中生成这些表达式。从本质上看，变量名称是控件的声明变量名称。控件的声明变量名称与使用Declare Variable对象创建的变量非常类似，但控件的变量已经初始化。声明是上下文局部声称，因此在默认状态下，变量名称只能用于其所在的上下文中。如需与在全局存取ActiveX控件有关的更多信息，请参阅下面的备注。

对象菜单

  • Help - 打开描述容器对象的这个VEE帮助主题。

  • Properties - 存取VEE 容器对象的属性，如标题、变量名称、颜色、字体和图标视图。

  • Control Properties - 存取开发人员构建的控件的属性页面。每种控件有不同的属性。在出现的属性窗口中，点击Help按钮，获得更多信息。

  • Edit Event Handler… - 如果已经为控件创建任何事件处理器UserFunctions，打开Edit Event Handler对话框。

  • Create Event Handler… - 打开Create Event Handler UserFunction浏览器。这个浏览器允许您创建一个UserFunction，处理控件生成的事件。可以为浏览器Member区域中列出的每个事件创建一个事件处理器。

属性 (容器对象)

Title - 显示容器对象的当前标题，可以编辑标题。

Name - 显示控件的当前局部变量名称，可以编辑名称。这会作为上下文局部变量声明和初始化控件。

备注

VEE必须设为VEE 5或更高的执行模式，以便使ActiveX支持生效(Default Preferences)。ActiveX控件可以作为单独产品提供，也可以作为大型程序的一部分安装。

VEE不支持所有ActiveX控件。如果控件不兼容VEE，在把控件添加到程序中或在使用控件时，会发生错误。

在把控件添加到VEE工作区中时，在标题栏中会出现指配的局部变量名称。双击控件的标题栏，出现ActiveX Control Properties对话框，可以改变指配的变量名称。在Design类别中，改变Name的值。由于控件没有使用直线连接到程序中其它对象的端，因此必须在Formula对象中使用按变量名称指称控件的表达式操纵控件。由于变量是上下文局部变量，因此这些表达式必须与控件出现在相同的上下文中。

如果希望变量名称是全局的，那么使用Declare Variable (Data [image] Variable [image] Declare Variable)声明新的变量名称。由于控件的变量名称已经存在，因此不能简单地把它声明为全局变量，VEE不允许有这样的冲突。在Declare Variable中，输入变量名称，把Scope设为Global，把Type:设为Object。您不必复选Specify Object Type；但是，通过指定对象类型细节，VEE会自动进行类型检查，保证指定的Library和Class只指配给声明变量。然后可以把控件的局部变量(如Calendar1)设成等于声明变量(如g_calendar1)，如这个表达式中所示：

Set g_calendar1 = Calendar1

位置

Device [image] ActiveX Controls

另请参阅

参见ActiveX范例目录中的范例程序
Help [image] Open Example…

ActiveX Control References, Declare Variable, 默认首选项, Formula, Function & Object Browser, ActiveX范例

参阅VEE高级技术手册中的"使用ActiveXAutomation对象和控件"。


ActiveX Control References

显示ActiveX Control References对话框，把ActiveX控件用于VEE中。

用途

使用ActiveX Control References对话框，选择希望在VEE程序中使用的ActiveX控件。如果已经安装了控件或相关程序，控件会出现在这个对话框中，以便Windows Registry识别控件。在选择想要的控件时，按OK把控件加载到内存中供VEE使用，搜索对象类，调度接口和导出的事件。

在选择控件后，象任何其它VEE对象一样，使用Device [image] ActiveX Controls选取一个控件，把它放在程序的细节视图中。出现得到的控件"对象"，标题栏中会有一个变量名称。由于控件没有类似其它对象的端，必须使用控件的变量名称在Formula表达式中操纵控件。VEE的Function & Object Browser (Device [image] Function & Object Browser)帮助生成这些表达式。

对话框信息

Registered Controls: - 包含注册的ActiveX控件类型库的列表。点击一个名称，高亮度显示它，在列表下面的状态区中查看信息。点击名称旁边的框，点击OK，选择它用于VEE中。

Browse… - 如果在系统中存在没有出现在列表中的控件，点击Browse在Add ActiveX Control Reference对话框中搜索控件。在找到和打开控件时，VEE会把控件添加到列表中，试着注册控件。为在VEE中使用控件，一定要复选控件的框，点击OK。

备注

VEE必须设为VEE 5或更高的执行模式，以便使ActiveX支持生效(Default Preferences)。ActiveX控件可以作为单独产品提供，也可以作为大型程序的一部分安装。

选择的控件数量能够满足程序需求即可，以避免占用额外的内存。

在使用ActiveX Control Reference对话框选择名称后，VEE会在菜单Device [image] ActiveX Controls中添加控件名称。某些选择会导致一个以上的ActiveX控件添加到菜单中，这是正常的。

VEE不支持所有ActiveX控件。如果控件不兼容VEE，在把控件添加到程序中或在使用控件时，会发生错误。

位置

Device [image] ActiveX Control References…

另请参阅

参见ActiveX范例目录中的范例程序
Help [image] Open Example…

ActiveX Automation References, ActiveX Controls, Declare Variable, 默认首选项, Formula, Function & Object Browser, ActiveX范例


ActiveX Controls

一个Device菜单选项，允许在VEE工作区中添加ActiveX控件。

用途

使用ActiveX Controls菜单，添加供VEE使用的ActiveX控件。如果使用ActiveX Controls Reference对话框(Device [image] ActiveX Controls Reference…)选择它们，这些控件会出现在级联菜单中。

备注

VEE必须设为VEE 5或更高的执行模式，才能使ActiveX支持生效(Default Preferences)。ActiveX控件既可以作为单独的产品提供，也可以作为大型程序一部分安装。

VEE不支持所有ActiveX控件。如果控件不兼容VEE，在程序中添加控件或使用控件时，会发生错误。

位置

Device [image] ActiveX Controls

另请参阅

参阅ActiveX范例目录下的范例程序
Help [image] Open Example…

ActiveX Control Host, ActiveX Control References, 默认首选项, ActiveX范例


Add Days

在一定日期时间上增加天。

位置

System [image] DateTime [image] Add Days


Add Hours

在一定日期时间中增加小时。

位置

System [image] DateTime [image] Add Hours


Add Minutes

在一定日期和时间中增加分钟。

位置

System [image] DateTime [image] Add Minutes


Add Months

在一定日期和时间中增加月。

位置

System [image] DateTime [image] Add Months


Add Seconds

在一定日期和时间上增加秒。

位置

System [image] DateTime [image] Add Seconds


Add Terminal

一个菜单项。

用途

使用Add Terminal存取下述功能添加端：

Data Input

Control Input

Data Output

Error Output

快捷方式

通过把光标放在输入或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会在光标所在位置插入一个额外的数据端。

位置

On each对象菜单 [image] Add Terminal

另请参阅

Properties (对象), Line Probe, Delete Terminal, Control Input (对象菜单), Data Input (对象菜单), Data Output (对象菜单)和Error Output (对象菜单)

在UserObject中添加输入端和输出端

自动调整显示画面大小

以程序化方式显示一个文件名


Add To Panel

把选择的对象复制到VEE程序的相关上下文面板中。

用途

使用Add To Panel，把选择的对象集放在面板视图上，为程序创建一个用户界面。例如，面板视图可能只包括程序的输入和显示对象；不显示程序的细节视图。

在存在面板视图，程序没有安全保护时，UserObject或UserFunction的标题栏上有两个按钮，允许切换到希望的视图。

如果选择Add To Panel，但不存在面板视图，那么会创建面板视图。

备注

如果没有选择对象，那么不能使用Add To Panel功能。

UserObject的面板视图可以添加到Main面板视图或作为相关上下文的UserObject的面板视图中。换句话说，可以嵌套面板。在面板添加到父面板中时，会生成源面板的精确副本。在源面板修改时，所有复制面板也会更新。

为把一个UserObject面板添加到父面板中，如Main面板：

1. 在创建UserObject及其面板后，在UserObject的图标视图上按鼠标右键，出现对象菜单。

2. 点击Restore，出现Open View。它表现为一个面板视图。不要删除这个视图，否则会从父程序中删除UserObject。

3. 选择UserObject，高亮度显示UserObject。

4. 点击Add To Panel工具栏按钮(Edit [image] Add To Panel)。父面板中出现UserObject。

位置

Edit [image] Add To Panel

或UserObject对象菜单Edit [image] Add To Panel

另请参阅

Create UserObject, Delete (对象菜单), Create RunTime Version, Select All, View Detail和View Panel。

在主面板中添加UserObject面板

在嵌套UserObject面板中添加对象

在面板中添加对象

构建UserFunction面板

构建UserObject面板


Add Years

一定的日期时间中增加年。

位置

System [image] DateTime [image] Add Years


高级仪器属性

允许配置仪器设备驱程和接口通信参数的一个对话框。

用途

在使用Instrument Properties对话框选择Interface: 类型(GPIB, Serial, 等等)之后，点击Advanced...按钮，出现Advanced Instrument Properties对话框。

Advanced Instrument Properties对话框分成六个不同版本，下面六种接口类型每种一个版本：

1. GPIB

2. Serial

3. GPIO

4. VXI

5. TCPIP

6. USB

对话框信息

Advanced Instrument Properties对话框提供了下面的栏和字段：

备注
每类接口(GPIB, Serial, GPIO, VXI, TCPIP,或USB)并不总是要求完全相同的所有通信参数。例如，GPIO接口配置的Direct I/O栏只包含GPIB接口配置Direct I/O栏中的字段的一个子集。下面的各栏说明介绍了任何一类栏中可能出现的所有字段。

General栏：

Timeout (sec): - 允许指定VEE等待仪器对通信请求作出响应的秒数，在超过这个秒数之后，VEE会生成错误。默认值为5秒。

Live Mode: - 指定Live Mode是ON还是OFF。如果Live Mode关闭，那么即使没有连接仪器，仍可以运行VEE程序。但是，如果与仪器实际通信，Live Mode必须为ON。Live Mode会保持OFF，直到在Instrument Properties对话框的Address字段中输入一个非零的地址；然后Live Mode会切换到ON。然后可以点击切换ON或OFF字段。Live Mode不适用于Plug&play Drivers。

Byte Ordering: - 指定设备读写二进制数据使用的字节顺序。VEE确定是否需要交换字节。点击这个字段，选择MSB (先发送最有用的位)或LSB (先发送最没用的位)。所有IEEE 488.2标准设备都使用MSB顺序。MSB也是默认值。如需更具体的信息，请参阅仪器手册。

Description (optional): - 允许为仪器输入自己的简单的字母数字识别符。

Direct I/O栏：

Read Terminator: - 允许指定用来结束仪器Read事务的字符。默认终结符是\n (换行)。

Write - 允许指定仪器write事务的多个参数。共有五个字段，可以编辑这些字段，指定这些参数。这些字段是：

EOL Sequence: - 允许指定用来识别EOL (行尾)的字段。默认字符是\n。

Multi-Field as: - 选项是Data Only (默认值)和(...) Syntax。

Array Separator: - 允许指定作为Array Separator使用的字段。默认字符是"," (逗号)。

Array Format: - 选项是Linear或Block。默认值为Linear。

END (EOI) on EOL: - 结束或识别行尾。选项是YES或NO。默认值为NO。

Conformance: - 允许指定Direct I/O事务中将使用哪个GPIB IEEE一致性规范。选项是IEEE 488 (默认值)和IEEE 488.2。

Binblock: - 允许为Direct I/O事务指定Binblock格式。Binblock格式选项包括：

None - 如果指定Conformance (上面)为IEEE 488.2，那么这是默认选项。

#A - IEEE 728码组包头，格式为：#A<Byte_Count><Data>

#I - An IEEE 728码组包头，格式为：#I<Byte_Count><Data>

#T - An IEEE 728码组包头，格式为：#T<Data><END>

其中：

- #是实际字符。
- A, I和T是实际字符。
- <Byte_Count>由两个字节组成，这两个字节构成一个不带符号的16位整数，它指定<Data>中后面的字节数量。(VEE自动计算这个数字)。
- <Data>是由任意字节组成的数据流。
- <END>指明使用传送的最后一个数据字节确定EOI。

State (Learn String): - State字段指明仪器是否配置成上传和下载学习字符。选项是Not Config'd (默认值)或Configured。如果选择Configured，那么将为输入高亮度显示Upload String和Download String字段。

Upload String: - 在从Direct I/O对象菜单中选择Upload State时，Upload String字段指定发送到仪器的命令。它指定导致仪器输出学习字符串的命令，详情请参阅仪器编程手册。注意，必须用双引号把命令引起来。

Download String: - Download String字段指定在Direct I/O对象中的WRITE STATE (LEARN STRING)事务产生学习字符串前立即发送到仪器的字符串。这个字段用来支持在下载学习字符串时要求命令前缀的仪器，详情请参阅仪器编程手册。

Plug&play Driver栏：

Plug&play Driver Name: - 指配给配置的Plug&play设备的驱程名称。默认名称是Unknown。

Parameters to init() call组：

Address (eg GPIB-VXI0::12::INSTR): - Plug&play仪器的设备地址。

Perform Indentification Query - 在复选这个框时，在初始化时将查询Plug&play设备ID。在默认状态下会复选这个框。

Perform Reset - 在复选这个框时，将自动向设备发送一条Reset命令。在默认状态下会复选这个框。

IVI-COM Driver栏：

IVI-COM Driver/Session Name: - IVI-COM驱程或IVI Config Store会话的名称。

Address: - 仪器的地址。在提供了会话名称时，这个字段为空。

Perform Identification Query: - 执行识别字符串，如*IDN。

Perform Reset: - 复位仪器。

Use Class Compliant Interface: - IVI为不同的仪器类别提供了定义，如DMM或Scope。在复选这个复选框时，将从拥有制造商专用信息的设备专用 IVI驱程(默认值)切换到独立于制造商的类别专用IVI驱程。

Configure IVI Driver Session: - 选择这个按钮会启动Instrument Explorer。Instrument Explorer使用IVI Config Store查找仪器。通过使用Instrument Explorer，可以定义包含资源字符串及其它仪器参数的IVI会话。如需与Instrument Explorer及其功能有关的更多信息，请参阅其联机帮助。

Panel Driver栏：

ID Filename: - 点击这个字段将出现Read from what Instrument Driver?对话框。在Read from what Instrument Driver?对话框中，可以从显示的目录和文件中选择所需的ID Filename。

Sub Address: - 输入Panel Driver的Sub Address (如有)。

Error Checking: - 打开或关闭Error Checking。默认值为ON。

Incremental Mode: - 打开或关闭Incremental Mode。默认值为ON。

Serial栏：

Baud Rate: - 默认波特率为9600 (位/秒)。

Character Size: - 默认值为8(位)。允许的值为5, 6, 7, 8,和None。

Stop Bits: - 默认值为1。允许的值为1和2。

Parity: - 默认值为None。允许的值为None, Odd, Even, Mark,和Space。

Handshake: - 默认值为None。允许的值为None和Xon/Xoff。

Receive Buffer Size: - 默认值为4096 (bytes)。

GPIO栏：

Data Width: - Data Width字段指定通过GPIO接口作为一个单位传送的并行数据的位数。这个字段把接口配置成读写宽8位(默认值)或16位的数据。不需要与这个字段同时设置硬件开关。

A16 Space栏： (仅适用于VXI)

Byte Access (D8) - Byte Access字段指定VXI设备是否支持8位A16存储器访问。Byte Access选项有：

NONE - 设备不支持字节访问。这是默认值。

ODD ACCESS - 设备支持字节访问，但只在奇数字节边界(D08(O))上支持。

ODD/EVEN ACCESS - 设备在所有边界(D08(E))上支持字节访问。

Word Access (D16) - Word Access字段不能编辑。所有VXI设备必须支持16位访问(D16)。

LongWord Access (D32) - LongWord Access字段指定VXI设备是否支持32位A16存储器访问。LongWord Access选项有：

NONE - 设备不支持32位访问。这是默认值。

D32 ACCESS - 设备支持32位A16存储器访问。

Add Register - 每次在点击Add Register字段时，在对话框右半部分将出现一行新字段。每个新字段允许配置对设备A16存储器的访问。共有4个字段：

Name - 这是寄存器的符号名称，用来指明使用READ REGISTER或WRITE REGISTER事务时Direct I/O对象中的特定寄存器。

Offset - 这是配置的寄存器较设备A16存储器相对库的偏置，单位为字节。默认Offset为0。

Format - 这是读出或写入配置的寄存器的数据格式。将在Offset字段指定的字节上发生读或写访问。可能的格式包括：
- BYTE - 读或写一个字节。设备必须支持、并使用上面的Byte Access字段把设备正确配置成进行8位访问。如果BYTE字段为ODD，那么Offset字段中指定的字节位置必须是奇数。
- WORD16 - 读或写一个16位字。16位表示为2的补数整数。所有VXI设备都明确支持这种格式。
- WORD32 - 读或写一个32位字。32位表示为2的补数整数。即使LongWord Access字段指定为NONE (使用两个D16访问读或写全部32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将访问全部32位。
- REAL32 - 读或写表示为IEEE 754 32位浮点数字的32位字。32位表示为2的补数整数。即使LongWord Access字段指定为NONE (使用两个 D16访问读或写全部32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将访问全部32位。

Mode - 指定寄存器将支持哪种I/O模式。选项包括：
- READ - 这个寄存器只在READ REGISTER事务中作为选项出现。
- WRITE - 这个寄存器只在WRITE REGISTER事务中作为选项出现。
- READ/WRITE - 这个寄存器在READ REGISTER和WRITE REGISTER事务中同时作为选项出现。

Delete Register - 在点击Delete Register字段时，将出现一个Select Register To Delete对话框，其中包含着当前配置的每个寄存器的符号Name。点击希望删除的寄存器的符号Name，然后点击OK按钮确认删除操作。

A24/A32 Space栏： (仅适用于VXI)。

A24/A32 Space指VXI设备中的A24或A32扩展存储器。VXI设备可以实现A24存储器或A32存储器，并不能同时实现这两种存储器。

Byte Access (D8) - Byte Access字段指定 VXI设备是否支持8位扩展存储器访问。Byte Access选项有：

NONE - 设备不支持字节访问。这是默认值。

ODD ACCESS - 设备支持字节访问，但只在奇数字节边界(D08(O))上支持。

ODD/EVEN ACCESS - 设备在所有边界(D08(E))上支持字节访问。

Word Access (D16) - Word Access字段字段不能编辑。所有VXI设备必须支持对所有存储空间进行16位访问(D16)。

LongWord Access (D32) - LongWord Access字段指定 VXI设备是否支持32位扩展存储器访问。LongWord Access选项有：

NONE - 设备不支持32位访问。这是默认值。

D32 ACCESS - 设备支持32位扩展存储器访问。

Add Location - 每次在点击Add Location字段时，对话框的右半部分将出现一行新字段。每个新字段允许配置对设备扩展存储器的访问。共有4个字段：

Name - 这是存储器位置的符号名称，用来指明使用READ MEMORY或WRITE MEMORY事务时Direct I/O对象中的特定存储器位置。

Offset - 这是配置的存储器位置较设备扩展存储器相对库的偏置，单位为字节。默认Offset为0。

Format - 这是读出或写入配置的存储器位置的数据格式。将在Offset字段指定的字节上发生读或写访问。可能的格式包括：
- BYTE - 读或写一个字节。设备必须支持、并使用上面的Byte Access字段把设备正确配置成进行8位访问。如果BYTE字段为ODD，那么Offset字段中指定的字节位置必须是奇数
- WORD16 - 读或写一个16位字。16位表示为2的补数整数。所有VXI设备都明确支持这种格式。
- WORD32 - 读或写一个32位字。32位表示为2的补数整数。即使LongWord Access字段指定为NONE (使用两个D16访问读或写全部32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将访问全部32位。
- REAL32 - 读或写表示为IEEE 754 32位浮点数字的32位字。32位表示为2的补数整数。即使LongWord Access字段指定为NONE (使用两个D16访问读或写全部32位)，VEE仍支持这种格式。如果LongWord Access字段指定为D32 ACCESS，那么将访问全部32位。

Mode - 指定存储器位置将支持哪种I/O模式。选项包括：
- READ - 这个存储器位置只在READ REGISTER事务中作为选项出现。
- WRITE - 这个存储器位置只在WRITE REGISTER事务中作为选项出现。
- READ/WRITE - 这个存储器位置在READ REGISTER和WRITE REGISTER事务中同时作为选项出现。

Delete Location - 在点击Delete Location字段时，将出现一个Select Memory Location To Delete对话框，其中包含着当前配置的每个存储器位置的符号Name。点击希望删除的存储器位置的符号Name，然后点击OK按钮确认删除操作。

位置

I/O [image] Instrument Manager... 然后选择Add...或Properties，然后选择Advanced...

另请参阅

Instrument Properties, Instrument Manager

添加仪器配置

使用Direct I/O对象


Advanced I/O

一个菜单项。

用途

使用Advanced I/O访问下述对象，实现对GPIB、RS-232 (串行)、VXI、LAN和USB接口的低级控制 (如总线命令, 轮询和服务请求)：

Interface Operations

Device Event

Interface Event

MultiDevice Direct I/O

备注

VXIplug&play不支持任何Advanced I/O功能。

位置

I/O [image] Advanced I/O

另请参阅

Bus I/O Monitor, Device Event, Interface Event, Interface Operations和MultiDevice Direct I/O

轮询GPIB仪器


Align

一个Edit菜单选项，允许在物理上对准VEE Panel和Detail视图中的对象。

用途

Align为操纵VEE对象的物理位置提供了多种选项。这些选项控制水平对准和垂直对准以及对象的分布。可以按住CTRL键，同时使用鼠标左键，选择希望对准的多个对象。也可以按住CTRL键，使用鼠标左键从选定区域的左角到右角画一个框，选择希望对准的多个对象。最后，如果想选择全部对象，可以进入Edit菜单，选择Select All。一旦已经选择了对象，使用下面其中一个菜单选项，执行对准：

  • Middles - 使用最左面对象的中间作为Y坐标参考点，对选定VEE对象执行水平对准。

  • Tops - 使用最左面对象的顶部作为Y坐标参考点，对选定VEE对象执行水平对准。

  • Bottoms - 使用最左面对象的底部作为Y坐标参考点，对选定VEE对象执行水平对准。

  • Centers - 使用最上面对象的中心作为X坐标参考点，对选定VEE对象执行垂直对准。

  • Lefts - 使用最上面对象的左侧作为X坐标参考点，对选定VEE对象执行垂直对准。

  • Rights - 使用最上面对象的右侧作为X坐标参考点，对选定VEE对象执行垂直对准。

  • Distribute Horizontally � 使用最左侧对象的左侧，在水平面上均匀分布对象，执行选定VEE对象的水平分布。

  • Distribute Vertically - 使用最上面对象的顶部，在垂直面上均匀分布对象，执行选定VEE对象的垂直分布。

备注

在对准对象时，如果其新位置导致与一个对象重叠，可以使用Bring-to-Front或Send-to-Back功能，按需重新排列对象。

在发生对准后，对准的对象不能反选。这允许对同样这些对象进行后续分组对准。

在对准或分布期间不移动参考对象。

位置

Edit [image] Align

Middles或

Tops或

Bottoms或

Centers或

Lefts或

Rights或

Distribute Horizontally

Distribute Vertically

另请参阅

默认首选项, Bring to Front (对象菜单), Send to Back (对象菜单)和Select All


Allocate Array

一个菜单项。

用途

使用Allocate Array存取下述数组构件和初始化对象：

Alloc Text

Alloc UInt8

Alloc Int16

Alloc Int32

Alloc Int64

Alloc Real32

Alloc Real64

Alloc Coord

Alloc Complex

Alloc PComplex

备注

使用Set Values修改已经存在的数组。

位置

Data [image] Allocate Array

另请参阅

Alloc Coord, Alloc Complex, Alloc UInt8, Alloc Int16, Alloc Int32, Alloc PComplex, Alloc Text, Alloc Real32, Alloc Real64, Get Values, Set Mappings, 和 Set Values。

分配数组

改变数组中的值

对象菜单


Alloc Boolean

创建布尔数组的对象。

用途

使用Alloc Boolean创建由Boolean元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。这个值被解释为Boolean。默认值是False。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Boolean

另请参阅

Int32, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Complex

创建Complex数组的对象。

用途

使用Alloc Complex创建由Complex元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value - 放在每个数组元素中的值。默认值是(0, 0)。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Complex

另请参阅

Complex, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象), 对象菜单


Alloc Coord

创建Coord数组的对象。

用途

使用Alloc Coord创建由Coord元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。与Int32和Real64等其它数组类型不同，Num Dims只能是1，因为VEE中不支持一维以上的Coord数组。

Num Coord Dims - 每个Coord中的取值数量，有效范围为2 - 10。

Init Value - 放在每个数组元素中的值。默认值是(0, 0), (0,0,0), (0,0,0,0)等等，具体取决于Num Coord Dims的值。

Size - 维度中的元素数量。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

位置

Data [image] Allocate Array [image] Coord

另请参阅

Allocate Array, Build Data, Coord, Get Values, Set Values和UnBuild Data。

分配数组, Properties (对象)和对象菜单


Alloc Int16

创建整数数组的对象。

用途

使用Alloc Int16创建由2字节整数元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。这个值被解释为整数。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的整数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的整数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Int16

另请参阅

Int16, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Int32

创建整数数组的对象。

用途

使用Alloc Int32创建由4字节整数元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。这个值被解释为整数。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的整数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的整数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Int32

另请参阅

Int32, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Int64

创建整数数组的对象

用途

使用Alloc Int64创建由8字节整数元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。这个值被解释为整数。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的整数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的整数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置Location

Data [image] Allocate Array [image] Int64

另请参阅

Int32, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc PComplex

创建PComplex数组的对象。

用途

使用Alloc PComplex创建由PComplex元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value - 放在每个数组元素中的值。初始值的相位被归一化，落在pi弧度和-pi弧度之间；如果数字的幅度为负值，它会通过使相位角位移180度，转换成正值。默认值是(0, @0)。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] PComplex

另请参阅

Allocate Array, Get Values, PComplex, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Real32

创建实数数组的对象。

用途

使用Alloc Real32创建由4字节实数组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的实数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的实数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Real32

另请参阅

Get Values, Real32, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Real64

创建实数数组的对象。

用途

使用Alloc Real64创建由8字节实数组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的实数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的实数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Real64

另请参阅

Get Values, Real64, Set Mappings和Set Values。

分配数组, Properties (对象)和对象菜单


Alloc Text

创建Text数组的对象。

用途

使用Alloc Text创建由Text元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value - 放在每个数组元素中的值。这个值解释为字符串。默认值是空(空字符串)。

Size - 维度中的元素数量。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] Text

另请参阅

Get Values, Set Mappings, Set Values和Text。

分配数组, Properties (对象)和对象菜单


Alloc UInt8

创建整数数组的对象。

用途

使用Alloc UInt8创建由1字节整数元素组成的数组。

Open View参数

Num Dims - 输出数组中的维数。Num Dims是从1到10的整数。默认值是1。

Init Value | Lin Ramp | Log Ramp

Init Value - 放在每个数组元素中的值。这个值被解释为整数。默认值是0。

Lin Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用相等间隔的整数值的线性斜坡。只有在Num Dims = 1时才能使用这个选项。

Log Ramp - 在斜坡初始值(含)和斜坡结束值(含)之间尽可能采用对数间隔的整数值的斜坡。只有在Num Dims = 1时才能使用这个选项。

Size - 维度中的元素数量。每个维度有一个大小字段。默认值是10。

可以在对象上或从数据输入端设置Init Value和Size。

备注

为改变各个元素的值，使用Set Values。

如果Num Dims值变化，视图会在Open View上自动创建或删除字段，以便使维数大小字段与Num Dims值相匹配。

输出数据没有映射。使用Set Mappings映射数组的维度。

位置

Data [image] Allocate Array [image] UInt8

另请参阅

UInt8, Get Values, Set Mappings和Set Values。

分配数组, Properties (对象),和对象菜单


AlphaNumeric

显示字母数字数据的对象。

用途

使用AlphaNumeric把任何数据类型显示为单个值、一个Array 1D或一个Array 2D。为查看数组，使用滚动条滚动显示屏。

属性

ShowArrayIndices - 在这个属性为True，且收到的数据是一个数组时，显示区域中的每一行都带有索引。默认值为True。

Number Format - 如果复选Global格式，那么使用默认格式。默认值为启动。

Integer: - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项为Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

Real: - 如果Global Format关闭，指定在这个对象显示的实数的数字格式。选项为Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Sat 01/Jan/2003 17:01:38)。默认值为Standard。

Significant Digits: - 如果Global Format关闭，指定Real值显示的有效位数。

备注

如果AlphaNumeric对象的当前宽度太小，而不能显示数字类型的默认精度(使用当前指定的显示字体)，那么会显示一行星号(***)。调整对象大小，显示数据。

如果有一个2D Array，您将看到一个滚动条(除非已经调整对象大小，以显示整个数组)。

三维和更大的数组显示为字符串3D Array，依此类推。

显示的ASCII值0-31与字体有关，可能不能阅读。

在某些平台(操作系统)上可能不能正确显示长于2048个字符的文本字符串。在任何平台上都不能正确显示长于32767个字符的文本字符串。

位置

Display [image] AlphaNumeric

另请参阅

默认首选项和Logging AlphaNumeric。

显示标量值和Properties (对象)

显示取值数组和对象菜单


Arrange Icons

一个Windows菜单选项，控制着最小化的窗口图标在VEE工作空间中的排列。

用途

使用Arrange Icons存取下述图标放置函数：

by Position - 这一选项将根据其当前位置沿着VEE工作空间底部排列所有最小化的窗口图标。

by Name - 这一选项将按字母排列顺序沿着VEE工作空间底部排列所有最小化的窗口图标。

备注

如果没有打开的最小化窗口，那么不能使用Arrange Icons菜单项(变成灰色)。

位置

Window [image] Arrange Icons

另请参阅

Minimize All, by Name和by Position.


ArrayList - Add

在数组、列表或集合中增加一个项目。

位置

System [image] Collections [image] ArrayList [image] Add


ArrayList - Clear

清除数组、列表或集合中的项目。

位置

System [image] Collections [image] ArrayList [image] Clear


ArrayList - Contains Item?

查看数组、列表或集合什么时候包含某个项目。

位置

System [image] Collections [image] ArrayList [image] Contains


ArrayList - Count

计算数组、列表或集合中的项目数量。

位置

System [image] Collections [image] ArrayList [image] Count


ArrayList - Create

创建新的数组、列表或集合。

位置

System [image] Collections [image] ArrayList [image] Create


ArrayList - Enumerate

枚举数组、列表或集合的成员。

位置

System [image] Collections [image] ArrayList [image] Enumerate Items


ArrayList - Get

从一个数组、列表或集合中获得一个项目。

位置

System [image] Collections [image] ArrayList [image] Get Item


ArrayList - Remove Item

从数组、列表或集合中删除一个单元。

位置

System [image] Collections [image] ArrayList [image] Remove


ArrayList - Set Item

把现有值设置成数组、列表或集合中的新值。

位置

System [image] Collections [image] ArrayList [image] Set Item


asClrType

asClrType(x, t)

把VEE数据容器搙?#36716;换成搕?#31867;型的.NET对象的函数。

用途

使用asClrType把VEE数据容器转换成搕?#31867;型的.NET对象。对VEE和.NET本机支持的所有数据类型，VEE在VEE和.NET之间自动实现数据类型转换。例如，Int16, Int32, Real64等等。这是一个应满足大多数VEE用例的设计判断。在不太频繁的用例中，您可能想搖ndo?撤销操作)这一自动转换，以便能够作为真正的.NET对象使用数据。在这些情况下，可以使用asClrType类型转换函数，把VEE数据类型转换成.NET/CLR对象。

搙?#26159;一个VEE数据容器。支持的VEE数据容器类型有Uint8, Int16, Int32, Real32, Real64, Text以及这些类型的数组。 搕?#26159;一个.NET/CLR类型。支持的.NET/CLR数据类型包括所有原始类型(System.Boolean, System.Byte, System.Sbyte, System.Int16, System.Uint16, System.Int32, System.Uint32, System.Int64, vUint64, System.Char, System.Double和System.Single), System.Decimal, System.DateTime和System.String。

返回一个搕?#31867;型的.NET对象。如果不支持VEE数据容器或.NET/CLR类型，那么会发生错误440。如果转换失败，那么会发生错误464。

假设：已经参考组件mscorlib.dll。这个组件提供了这一函数支持的所有.NET/CLR数据类型。

范例

VEE自动把.NET类型System.String转换成VEE的Text。如果您想使用System.String类中的多个有用函数，可以使用asClrType，把文本转换回到System.String：

Set dotnetString = asClrType("abacusabcus", System.String);

dotNetString.EndsWith(“us”);

另请参阅examples\DotNet\StringSplit.vee.

位置

Device [image] Function & Object Browser

Type: Built-in Functions

Category: Type Conversion

Member: asClrType


Auto Scrolling

自动滚动

在Detail视图中，拖动(但不要放下)对象到主工作区的边缘，暂停，工作区会向该方向滚动。可以把对象移动到任何边缘或拐角。


Beep

生成听得见的声音的对象。

用途

使用Beep生成指定频率、时长和音量的声音。

Open View参数

Frequency (Hz) - 声音的频率，单位为赫兹。默认值为1000 Hz。

Duration (sec) - 声音持续时间，单位为秒。默认值为0.1秒。

Volume (0-100) - 声音的相对音量，0是静音，100是最大。默认值为80。(在PC上，1 - 100之间的任意值会产生相同的音量。但是，0值会静音。) 对所有版本的Windows，忽略这个参数。

所有这三个Open View参数都可以添加为数据输入端。

备注

Beep对象的功能与硬件相关。在某些情况下，一个或多个Open View参数可能不会影响生成的实际声音。此外，某些计算机没有内置扬声器，可能要求外置扬声器模块。如需与音频输出功能有关的信息，请参阅计算机用户手册。

小于等于零的Frequency或Volume值会暂停规定的时长。

Beep对象可能会在长时间声音结束前完成执行(激活其序列输出端)。但是，执行后续Beep对象会暂停程序执行，直到已经完成前面的声音。

在Windows 98/ME上忽略频率和音量。

位置

Display [image] Beep

另请参阅

Properties (对象)和对象菜单


Boolean

输出布尔标量或一维数组的一个对象。

用途

使用Boolean设置布尔常数或得到用户输入。点击输入字段，输入一个值。

布尔数据间支持的运算包括：

  • 逻辑运算: AND, OR, XOR, NOT(!)

  • 比较运算: ==, !=

下表说明了对布尔数据类型，执行模式8和其它执行模式之间的差别。

运算 | ExecMode VEE 8 | ExecMode VEE 7 | ExecMode VEE 6 | ExecMode VEE 4&5
TRUE, FALSE类型 | Boolean | Int32 | Int32 | 不支持
.NET或COM指配 例如: TreeView.ShowLines = TRUE | 支持 | 不支持 | 不支持 | 不支持
布尔和其它数据之间的逻辑运算: OR, NOT, XOR, AND 例如: TRUE或0.0 | 不支持 | 支持 | 支持 | 不支持
数学运算: 例如: sin(true) | 不支持 | 支持 | 支持 | 不支持
基本数学运算: +, -, *, / 例如: 1 + True, True + False | 不支持 | 支持 | 支持 | 不支持

范例

如果想使用Boolean作为面板视图上的提示符，把Boolean对象名称变成提示符。用户在输入字段中填写所需的信息。

属性

DataShape - 把取值的初始数据形状设置成这个对象的输出。可能的值为标量和Array 1D。

ArraySize - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

ArraySizeFixed - 在这个属性为True时，数据不能增加或删除线。只有在选择DataShape 1D Array时才能使用这个选项。

Stepping Category - 在DataShape是Array 1D时禁用。

ShowArrayIndices - 在这个属性为True时，索引输入字段中的每一行。只有在选择DataShape 1D Array时才能使用这个选项。默认值为True。

Wait for Input - 在这个属性为True时，只有在对象值变化时对象才会操作。在没有选择这个属性时，只要满足任何限制，对象就会操作，并输出当前选择的值。默认值为False。

AutoExecute - 在这个属性为True时，在选择一个值时，对象操作，并启动程序的其余部分。如果程序已经运行，会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为False。

InitializeAtPreRun - 在这个属性为True时，在PreRun time时设置InitialValue。默认值为False。

InitializeAtActivate - 在这个属性为True时，在Activate时设置Initial Value。默认值为False。

备注

从第8.0版，Agilent VEE在Compiled Functions中支持Boolean。用户可以使用VEE_BOOL作为Complied Function的返回类型和参数类型。Agilent VEE作为Boolean处理VEE_BOOL。

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的其它方式是使用大多数数据常数上提供的Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入允许以程序化方式改变当前值。这一输入要求一个整数值，其可以是Scalar或Array 1D。将重新配置Constant，以与输入数据的形状相匹配。

Reset输入允许以程序化方式把值设置成假。如果Constant配置为Array 1D，所有值设置成假。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在对象的open view中改变值。

注意，InitialValue字段一直是标量，即使Boolean配置成数组。

位置

Data [image] Constant [image] Boolean

另请参阅

Alloc Boolean , Complex, Constant, Coord, Date/Time, Selection Control, Default Preferences, UInt8, Int16, Int32, Int64, PComplex, Real32, Real64, Text和Toggle Control

使用数据常数


Break

终止当前迭代循环的对象。

用途

使用Break停止循环，通过迭代器的序列输出端继续执行。

备注

Break通常与Until Break对象一起使用。它也可以与其它迭代对象一起使用，通常与If/Then/Else对象结合使用，有条件地停止迭代。

位置

Flow [image] Repeat [image] Break

另请参阅

For Count, For Range, For Log Range, Next, On Cycle, If/Then/Else,和Until Break。

循环部分VEE程序, Properties (对象)和对象菜单


Bring to Front (Object Menu)

Bring to Front (对象菜单)

通过改变对象的z顺序，把对象放到看得见的平面的前面。

用途

从Panel视图的对象菜单中，把选中的对象放到看得见的平面的前台中。

另请参阅

Send to Back (对象菜单), Align, 和Move (对象菜单)


Build Arb Waveform

从一个坐标数据集中创建波形的对象。

用途

使用Build Arb Waveform从由Coord 值组成的Array 1D中创建正态取样的波形。

Open View参数

Num Points - 输出波形中的点数。默认值为256。可以从数据输入中设置Num Points。

备注

Build Arb Waveform使用下面的公式：

  dx = (Xmax-Xmin)/Num Points

  Xvalue = Xmin + (point * dx)

因此，最后的数据点不是Coord最后的独立值。

每个Coord的独立值(x)必须大于或等于数组中前一个Coord的独立值。

Input Coord数组必须是(x,y)对，而不是(x,y,z)。

位置

Data [image] Build Data [image] Arb Waveform

另请参阅

Build Waveform, Comparator, Coord, Function Generator, Noise Generator, Pulse Generator, Properties (对象)和对象菜单

参阅范例

ScopeMask.vee


Build Complex

创建Complex数字的对象。

用途

使用Build Complex从实数部分和虚数部分创建一个Complex数字。

备注

如果其中一个输入是数组，另一个输入必须是Scalar或相同大小和形状的数组。两个输入都转换成Real64类型。输出的大小和形状与输入相同。忽略输入值的映射，不映射输出Complex值。

位置

Data [image] Build Data [image] Complex

另请参阅

Build Data, UnBuild Complex, Properties (对象)和对象菜单

参阅范例

Complex.vee


Build Coord

从实数中创建Coord的对象。

用途

使用Build Coord从实数部分构建一个Coord。

备注

数据输入数量决定着坐标字段的数量。默认值(和最小值)是2 (x,y)。坐标字段的最大数量是10个。

如果其中一个输入是数组，另一个输入必须是Scalar或相同大小和形状的数组。两个输入都转换成Real64类型。输出的大小和形状与输入相同。忽略输入值的映射。

数据输入形状必须是Scalar或Array 1D。

备注
对Coordinate数据类型，字段名一直是 x, y, z, w, v, u, t, s, r, q，即使您可能会改变输入端名称。这些字段名称在UnBuild Coord和sort(x)上使用。

位置

Data [image] Build Data [image] Coord

另请参阅

Build Data, Coord, UnBuild Coord, UnBuild Data, Properties (对象)和对象菜单

参阅范例

FutValue.vee


Build Data

一个菜单项。

用途

使用Build Data存取下述对象，从不同的部分创建特定数据类型的容器：

Build Coord

Build Complex

Build PComplex

Build Waveform

Build Arb Waveform

Build Spectrum

Build Record

位置

Data [image] Build Data

另请参阅

Allocate Array, Build Arb Waveform, Build Complex, Build Coord, Build PComplex, Build Record, Build Spectrum, Build Waveform, Set Mappings, Set Values和UnBuild Data。


Build PComplex

从不同的部分创建PComplex (极复数)数字的对象。

用途

使用Build PComplex从幅度部分和相位部分中创建一个PComplex数字。相位部分的单位取决于File [image] Default Preferences下的Trig Mode设置。

备注

如果其中一个输入是数组，另一个输入必须是Scalar或相同大小和形状的数组。两个输入都转换成Real64类型。输出的大小和形状与输入相同。忽略输入值的映射，不映射输出PComplex值。

初始值的相位进行归一化，落在pi弧度和-pi弧度之间。如果幅度是负数，它会转换成正数，相角位移180度。

位置

Data [image] Build Data [image] PComplex

另请参阅

Alloc PComplex, Build Complex, Build Data, Default Preferences, PComplex, UnBuild PComplex, Properties (对象)和对象菜单

参阅范例

Complex.vee, FutValue.vee和Manual10.vee


Build Record

从不同部分创建记录的对象。

用途

使用Build Record从标量部分或数组部分创建一条记录。输入数据部分变成输出记录中的字段。输出记录可以是标量或一维数组。

Open View参数

Output Shape - 可以把输出记录的形状设置成Scalar或Array 1D。

备注

记录中的字段名称来自相应输入端的名称。字段名称不分大小写(大写字母和小写字母表示的意思相同)。字段名称在一条记录内部不能重复。可以添加额外的数据输入，创建包括任意数量字段的记录。它支持记录的记录(记录中的字段本身是一个记录)。其对递归没有限制(除可用内存外)。

如果所有输入都是标量数量，那么Record输出端的记录将是一条标量记录，每个输入有一个字段，而不管指定的Output Shape是什么。

如果一个或多个输入是数组，那么得到的记录的形状取决于指定的Output Shape：

如果Scalar指定为Output Shape，那么输出记录将是一个标量，每个输入有一个字段。每个字段可以是标量或数组，其形状与相应的输入相同。

如果Array 1D指定为Output Shape，那么输出记录将是由多条记录组成的一维数组，每个输入有多个字段。如果输入是标量或一维数组，记录中的相应字段将是标量。如果输入是n维数组，那么相应的字段将是n-1维数组。如果一个以上的输入是数组，它们必须拥有相同的大小和形状。部分范例如下：

如果输入A是长10个要素的一维数组，输入B是标量，那么输出是由10个要素组成的一维记录数组，它有两个字段，即A和B。A输入数组的各个要素将出现在输出记录字段A的各个数组要素中。输入B将在输出记录的B字段中重复10次。

如果输入是由两个或多个维度组成的数组，输出记录仍将是Array 1D。例如，如果输入字段是两维数组，大小是10 x 3，那么输出记录是一个长10个要素的一维数组，但有一个字段是由3个要素组成的一维数组。

位置

Data [image] Build Data [image] Record

另请参阅

From DataSet, Get Field, Merge Record, Record Constant, Set Field, SubRecord, To DataSet和UnBuild Record。

把数据采集到记录中, Properties (对象)和对象菜单

参阅范例

appA_Records1.vee和Ch5_UnBuild.vee


Build Spectrum

从不同部分创建Spectrum的对象。

用途

使用Build Spectrum从由PComplex或Complex数字组成的数组和频率间隔信息中构建频谱值。

范例

如果有一个由[5], PComplex (0,@1), (0,@2)等组成的Array 1D，且开始频率等于11，结束频率等于16，那么频率样点等于11, 12, 13, 14, 15。

Open View参数

Start/Stop Freq |Center/Span Freq - 确定两个输入值是Start/Stop还是Center/Span。Start/Stop或Center/Span值都可以添加为输入。

Freq Sampling - 指定对取样值是线性取样还是对数取样。默认值是Linear。

备注

忽略输入PComplex值的映射关系。

VEE不跟踪dB标度的数据。在dB标度的数据上执行运算时，必须保证它们正确完成运算。

为在线性标度数据和db标度数据之间转换，使用VEE程序安装目录下lib目录中与VEE一起提供的库程序。

其点数与取样间隔相同，每个点位于取样间隔的开头。

位置

Data [image] Build Data [image] Spectrum

另请参阅

Build Data, Build Waveform和UnBuild Spectrum。

fft(x), Properties (对象),和对象菜单


Build Waveform

从不同部分创建Waveform的对象。

用途

使用Build Waveform从由幅度值和时间跨度信息组成的实数数组中创建一个Waveform。

Open View参数

Time Span - y数据取样的时长，单位为秒。Time Span可以添加为数据输入。默认值为20ms。

备注

忽略输入值的映射关系。Build Waveform假设y数据在一定间隔上以恒定速率线性取样。

样点数量与取样间隔相同。每个点位于取样间隔的开头。

位置

Data [image] Build Data [image] Waveform

另请参阅

Build Arb Waveform, Build Data, Build Spectrum,和UnBuild Waveform.

ifft(x), Properties (对象)和对象菜单

参阅范例

DigFilt.vee和ReadMarkerValues.vee


Bus I/O Monitor

记录通过I/O接口路径(GPIB, GPIO, USB, LAN, VXI或RS-232)发送的消息的对象。

用途

使用Bus I/O Monitor记录在VEE与其通过Instrument Panels, Component Drivers, Direct I/O和Advanced I/O设备控制的任何仪器之间传送的每个字节(命令或数据)。记录的信息可以选择性地发送到一个日志文件中。Bus I/O Monitor不显示来自Plug&play Drivers的信息。

Bus I/O Monitor的显示区域包含五个列。对GPIB、GPIO和RS-232，这些列是：

第1列 - 行号。

第2列 - GPIB命令(*), 数据输出(>)或数据输入(<)。

第3列 - 传送的字节的十六进制值。

第4列 - 与传送的字节对应的7位ASCII字符。

第5列 - 总线命令助记符(仅GPIB总线命令)。

在监测GPIB通信时，只使用第1列到第3列。

在监测RS-232通信时，只使用第1列到第4列。

对VXI，这些列是：

第1列 - 行号。

第2列 - VXI命令(*), 数据输出(>)或数据输入(<)。

第3列 - 内存空间(A16, A24或A32), 寄存器或位置的符号名称, 距命名位置的偏置。

第4列 - 传送的字节的十六进制值。

第5列 - VXI仪器的逻辑地址。

对象菜单

Clear - 清除Bus I/O Monitor的内容。Clear可以添加为控制输入端。

Clear Log File - 删除指定日志文件的内容。这个参数可以添加为控制输入。

属性

Logging

LoggingEnabled - 记录Bus I/O Monitor列表区域中的活动。可以添加Log Enable和Log Disable控制输入端。默认值为True。

FileLoggingEnabled - 在由Bus I/O Monitor记录时，把数据发送到指定文件。监视器数据一直附加到指定文件的末尾。可以在Bus I/O Monitor的Open View上指定Log File Name，也可以添加为控制输入。默认值为False。

BufferSize

Lines: 确定监视器显示屏中保留的最大行数。一旦监视器已满，监视器开头的行会被丢弃，以便为新记录的行留出空间。默认值为256。

备注

在显示为图标，而不是Open View时，Bus I/O Monitor的执行速度要快得多。

每个Bus I/O Monitor对象能够监测一条物理总线。例如，为监测一张GPIB卡和一张RS-232卡上的VEE活动，用户需要两个Bus I/O Monitors。

Bus I/O Monitor并不是通用的硬件总线监视器，因为它只显示VEE输入和输出的字节。输入/输出到总线的任何其它程序都不会把其I/O记录到VEE监视器上。

通过使用Control Panel中的Date/Time Properties对话框 (Time Zone栏)，可以改变这个对象中出现的时区。在改变时区设置后，必须重启VEE，才能使变化生效。

位置

I/O [image] Bus I/O Monitor

另请参阅

Advanced I/O和Instrument Manager。

监测总线消息


Button

按钮

参阅切换控制。


by Name

管理图标(最小化的窗口)在VEE工作空间中排列的函数。

用途

使用by Name，以字典顺序在VEE工作空间中排列图标(最小化的窗口)。图标将对齐和/或堆叠在工作空间的底部。它根据图标标题栏中出现的名称按字典顺序排列图标。

位置

Window [image] Arrange Icons [image] by Name

另请参阅

Arrange Icons, by Position和Minimize All。


by Position

管理图标(最小化的窗口)在VEE工作空间中排列的函数。

用途

使用by Position排列图标(最小化的窗口)在VEE工作空间中的物理位置。图标会整齐地对准和/或堆叠在工作空间底部。

位置

Window [image] Arrange Icons [image] by Position

另请参阅

Arrange Icons, by Name和Minimize All。


Call

执行以前定义的函数的对象。

用途

使用Call执行(调用)以前定义的UserFunction, Remote Function或Compiled Function。Call Function对象上的每个输入和输出与调用的函数上各自的输入/输出对应。Call Function输入根据位置、而不是根据名称传送到调用的函数。例如，Call Function对象可能有自己的输入A和B。但调用的函数可能有自己的输入x和y。不管是哪种情况，Call Function上的第一个输入(A)都作为调用的函数的第一个输入(x)传送。只有位置有效。

通过在求解延迟到运行时的任何表达式中包括其名称，还可以调用UserFunction, Compiled Function,或Remote Function，包括各种对象中的表达式，如Formula, If/Then/Else和Set Values，以及Sequencer和I/O处理中的表达式。例如，通过在 Formula对象中包括表达式2+someUsrFunc(a)，调用函数someUsrFunc。

可以通过两种方式选择一个函数。可以在对象菜单中执行Select Function，然后从提供的函数列表中选择一个名称，也可以直接在Function Name字段中输入名称。不管是哪种情况，如果VEE识别该函数，Call都将自动为调用的函数配置其输入端和输出端。

由于VEE可以Call UserFunctions (本地创建的或从库中导入的), Compiled Functions或Remote Functions，可能有两个函数拥有相同的名称。通过按下述顺序搜索令牌，可以解决Call对象中的名称冲突：

1. 在与调用对象相同的库中找到的函数名称

2. 局部UserFunctions

3. Imported UserFunctions, Compiled Functions和Remote Functions。这三个函数之间的次序没有保证。为保证希望的选择，在调用中使用�句点�符号包括库名称，如myLib.func()。

上面介绍的搜索顺序适用于执行模式 VEE 5和更高版本。在之前的Execution Mode中，按不同顺序搜索函数名称。这种搜索顺序差别可能会给包含来自不同库、名称类似的函数的程序带来明显影响。如需更详细的信息，请参阅VEE高级技术手册第一章中的�使用VEE执行模式�。

打开视图参数

Function Name - 要调用的UserFunction, Remote Function或Compiled Function的名称。

对象菜单

Edit UserFunction - 显示指定的UserFunction的编辑窗口。在完成编辑时，按窗口右上角的关闭或最小化按钮。

Select Function - 列出VEE目前已知的函数。按库名称列出Imported UserFunctions和Remote UserFunctions和Compiled Functions。在选择函数时，这个对象上的输入端和输出端根据调用的函数定义自动配置。(如果没有UserFunctions或Compiled Function，这个选项会变成灰色。)

Configure Pinout - 根据调用的函数定义自动配置这个对象上的输入端和输出端。(如果VEE目前不存在指定的函数，那么这个选项会变成灰色。)

备注

Call Function对象的工作方式在很大程度上类似于调用数学函数。任何输入类似于内部VEE函数的正式自变量，任何输出的操作方式都类似于从该函数返回的值。

VEE 4和更高版本的Execution Mode - 如果默认首选项中的Execution Mode设为VEE 4或更高版本，那么会异步执行Call Function -- 调用UserFunction将在多个并行线程中进行"时间分片"。如果正在执行UserFunction，从程序的另一部分再次调用UserFunction，那么第二个调用将阻塞，直到原始调用返回。调用Compiled Functions和Remote Functions是同步的(参阅下面)。

VEE 3 - 如果默认首选项中的Execution Mode设为VEE 3，那么会同步执行Call Function -- 调用函数会暂停执行并行线程，直到函数完成。

位置

Device [image] Call

另请参阅

Delete Library, Edit UserFunction, Formula, Import Library, UserFunction, UserObject, Properties (对象)和对象菜单

把UserFunction调用到程序中


Call Stack

用于程序调试的一个View菜单对象。

用途

使用Call Stack对话框，协助调试VEE程序。Call Stack对话框显示目前正在执行程序的UserObject或UserFunction。除识别目前正在执行的对象外，对话框还显示哪些UserObject或UserFunction调用目前正在执行的对象的列表或层级。

只有在程序处于暂停状态时，Call Stack对话框才显示有用的信息。在程序运行时，没有提供任何信息。可以通过多种方式暂停程序，包括Activate Breakpoint, Pause等等。

对话框信息

Call Stack对话框没有包含用户可以编辑的字段或按钮。在Call Stack对话框的标题栏下面是一个状态字段。这个状态字段指明程序的当前状态。在程序执行时，状态栏将显示：Program is running。

在程序暂停及启用Call Stack时，会发生三件事。

1. Call Stack对话框状态栏将指明程序中下一个执行的对象。这个显示屏采用下述格式：

Next Object: object Title(objectType)

其中object Title是对象标题栏中显示的文本，(objectType)是将执行的对象类型，如Formula对象。

2. 在状态栏中识别的对象将高亮度显示在VEE工作空间中。

3. 导致目前正在执行的对象或函数的调用的层级显示在对话框窗口内部。点击层级中列出的任何项目，会把该UserObject或UserFunction调入VEE工作空间中，并高亮度显示。

备注

Call Stack可以与Step Into, Step Out和Step Over函数结合使用，协助调试VEE程序。

位置

View [image] Call Stack

另请参阅

Activate Breakpoints, Find, Pause, Profiler, Run/Resume, Step Into, Step Out, Step Over和切换断点

查看调用堆栈


Cascade

在VEE工作空间中管理多个窗口的一个函数。

用途

使用Cascade作为重叠窗口排列VEE工作空间中打开的(没有最小化的)所有窗口。工作空间中的窗口将堆叠在一起，向下及向右偏移。

备注

在VEE工作空间中打开多个窗口时，可以结合使用Ctrl键及其它键，在工作空间中滚动没有最小化的其它窗口。

同时按Ctrl+Tab或Ctrl+F6键，把当前最上面的窗口移动到窗口堆栈最下面。然后可以看到堆栈中的下一个窗口。

同时按Ctrl+Shift+Tab或Ctrl+Shift+F6键，把窗口堆栈中最下面的窗口移动到窗口堆栈最上面。

位置

Window [image] Cascade

另请参阅

Arrange Icons, Close All, Minimize All, Tile Horizontally和Tile Vertically。


Change Extension

改变文件名中的扩展名。例如，使用这个对象，可以把文件test.txt变成test.doc。

位置

System [image] Path [image] Change Extension


Check Box

复选框

参阅切换控制。


Clean Up Lines

在Main程序、UserObject或UserFunction中重新画所有线，只使用横线段和竖线段路由对象。

用途

如果使Automatic Line Routing失效，那么可以端到端简明地连接线 (除非被钉住)。随时可以选择Clean Up Lines，整理程序中的线。

备注

Clean Up Lines与上下文相关；在从UserObject或UserFunction Edit菜单中选择时，只有该特定上下文内部的线受到影响。在从菜单栏Edit中选择时，只有根上下文(并不是任何UserObjects都有根上下文)中的线受到影响。

在复杂的程序中，重新路由线可能需要一会儿时间。

在某个路由看起来非常复杂时，把部分对象的距离移开一些，为Auto Line Routing功能提供更多的空间，找到更短的路径。

在使用Clean Up Lines后，有时很难确定是两条线相交还是一条线连接到三个位置。使用Line Probe显示线的端点。

位置

Edit [image] Clean Up Lines
或
UserObject (Object Menu) [image] Edit [image] Clean Up Lines

另请参阅

默认首选项, Line Probe和UserObject。


Clear All Breakpoints

清除执行断点。

用途

使用Clear All Breakpoints，在完成调试时从对象中删除所有断点。

位置

Debug [image] Clear All Breakpoints

另请参阅

Activate Breakpoints, Properties (对象)和Toggle Breakpoint。

控制断点


Clone (Object Menu)

Clone (对象菜单)

复制这个对象，并把对象拷贝放在Paste缓冲器中。

用途

使用Clone生成对象的拷贝。Clone可以立即提供复制对象，把对象的拷贝放在Paste缓冲器中。Clone复制被克隆的对象的所有属性，包括端、参数和大小。

备注

如果想同时复制多个对象，使用CTRL-鼠标左键或Edit [image] Select All选择多个对象，然后使用Edit [image] Copy和Edit [image] Paste (或CTRL-c和CTRL-v)。

每次Clone会覆盖Paste缓冲器中以前的内容。

每次Clone一个UserObject会独立拷贝其中的所有对象。改变一个拷贝不影响任何其它拷贝。

每次Clone一个Instrument Panel会反映同一部仪器的不同状态。

快捷方式

选择要克隆的一个或多个对象。把鼠标放在一个或多个对象上，按住CTRL-鼠标左键。把克隆的对象拖到希望的位置(在对象被克隆前，移动的距离不得少于65个像素)。

位置

在每个对象菜单上 [image] Clone

另请参阅

对象菜单, Cut (对象菜单), Copy, Paste和Replace。


Close All

在VEE工作空间中管理窗口使用的一个函数。

用途

Close All将关闭所有打开的或最小化的窗口(图标)，留下空白的VEE工作空间。

位置

Window [image] Close All

另请参阅

Arrange Icons, Cascade, Minimize All, Tile Horizontally和Tile Vertically。


CLR Version

从主机中检索公共语言运行时(CLR)的版本。

位置

System [image] Environment [image] CLR Version


Collector

采集数据并输出数组的对象。

用途

使用Collector，从标量输入数据中创建一维数组，或从采集的输入数组中创建输出数组。如果输入数组有"n"维，那么采集器可以输出一个n+1维数组，也可以输出一个一维数组(输入数据"平坦化")。在已经采集所有数据时，激活XEQ端，输出得到的数组。

Open View参数

Output Shape - 选择下面两个选项中的一个选项：

n+1 Dim Array - 采集输入信号(n维数组)，输出为n+1维数组。

1 Dim Array - 采集器"平坦化"输入信号(而不管形状如何)，输出为Array 1D。

(对标量输入数据，输出形状都是"Array 1D"，而不管选择哪一个选项。)

对象菜单

Clear - 清除Collector的内容。

备注

由于Collector上要求XEQ，因此不能添加另一个XEQ端或删除XEQ端。

Collector持续采集输入数据，直到触发XEQ端。

Collector有两个输入：一个用于进入的数据(任何形状和类型)，另一个告诉对象什么时候执行。Collector在第一个数据输入端上接收多个数据，采集数据，直到激活XEQ端。然后，该对象把整个数据集复制到输出端，传播输出。只有在激活XEQ端时，才会传播输出数据端。一旦数据传播，Collector会清除内部缓冲器，再次开始采集数据。输出信号的类型取决于每个XEQ或Clear后进入的第一个数据容器的类型。所有后续容器强制使用第一个容器的类型。如果强制失败，那么会报告错误。

输出信号的形状取决于选择的Output Shape：

n+1 Dim Array运算 - 如果Output Shape选择n+1 Dim Array，那么Collector将采集进入其Data端的数据，输出一个高于输入数据维数的一维数组。每个输入信号的大小和形状必须与第一个输入信号相同，直到触发XEQ端。它不复制映射信息 -- 输出信号不进行映射。

例如，如果第一个输入数据是一个Real64 1D数组、长度为10，那么每个后续输入信号必须是一个长度为10的1D数组，其类型能够强制实现Real64，直到触发XEQ端。输出信号将是10列、n行的Real64 2D数组，其中"n"是在触发XEQ前数据发送到Data输入端的次数。

1 Dim Array运算 - 如果Output Shape选择1 Dim Array，那么Collector将采集进入其Data端的数据，输出一个Array 1D，而不管输入数据的形状是什么。Scalar或Array 1D数据追加到末尾；多维数组平坦化为Array 1D，然后再追加到末尾。

例如，如果输入数据是Real64值1.2，然后输入标量Int32值34，然后激活XEQ，那么它将输出一个长度为2的Real64 Array 1D，取值为[1.2, 34.0]。然后，如果使用多个Complex数据容器激活XEQ，那么它将输出一个Complex Array 1D。

注意对任何类型的标量输入，Collector都会生成相同的输出信号，而不管选择哪种Output Shape。

由于Waveform和Spectrum信号不支持一维以上的维度，因此当Collector在n+1 Dim Array模式下运行时，它们不允许作为输入使用。为把Waveform或Spectrum数据采集到2D数组中，先拆散数据，然后把它采集到2D数组。注意映射信息将丢失。

由于Record和Coord容器只支持最高1D的数组，因此当Collector在n+1 Dim Array模式下运行时，只允许使用标量 Record或Coord容器作为输入。

Enum输入要先转换成Text类型，然后才能放到数组中。

对Record输入，字段名、类型和长度必须匹配。

Collector先清除内部缓冲器。每次在XEQ端激活时，它都会清除采集的数据的内部缓冲器。可以为Clear添加一个控制输入，在XEQ激活前以编程方式清除Collector数据。之后激活数据输入时，再次开始采集。只有在XEQ激活时才会传播输出。

如果激活XEQ端，且自上次清除以来没有使用非空数据激活数据输入，那么Collector将在VEE 3执行模式下输出一个空信号。如果处于VEE 4或更高的执行模式下，且输入数据类型已知，那么您将得到该数据类型的一个零要素数组。如果输入数据类型未知，Collector将输出一个 Int32类型的零要素数组。

位置

Data [image] Collector

另请参阅

Allocate Array, Concatenator, Get Values, Set Values, Sliding Collector, Properties (对象)和对象菜单

把数据采集到数组中


Color Alarm

根据Scalar输入的值显示不同颜色和文本字符串的对象。

用途

使用Color Alarm作为"LED"，根据输入值和用户自定义范围显示颜色和文本字符串。还可以以可选的数字字段显示输入值。

属性

ClearAtPreRun - 在这一属性为True时，在PreRun时清除Color Alarm的内容。默认值为True。

 ClearAtActivate - 在这一属性为True时，在Activate时清除Color Alarm的内容。默认值为True。

Shape - 选择Color Alarm显示画面的形状。默认值为Circular。

 Show 3-D Border - 在这一属性为True时，Color Alarm会加上阴影，提供三维外观。在这一属性为False时，Color Alarm显示为单一的颜色；在需要非常小的"LED"显示，需要对象运行速度更快，或希望查看三维视图时，适合采用这一功能。

 ShowDigitalDisplay - 在这一属性为True时，在对象Open View的底部会显示输入值的数字画面。在这一属性为False时，不显示数字画面，对象运行速度会更快。默认值为False。

HighColor - 指定最高范围使用的颜色 (即大于High Limit)。

 High Text - 指定在使用HighColor时Color Alarm上显示的文本。默认值为High。

 High Limit - 定义最高范围的数字下限。这个值必须大于等于Low Limit。

 MidColor - 指定中间范围使用的颜色 (即小于等于High Limit，且大于Low Limit)。

 Mid Text - 指定在使用MidColor时Color Alarm上显示的文本。默认值为Mid。

 Low Limit - 定义最低范围的数字上限。这个值必须小于等于High Limit。

 LowColor - 指定最低范围使用的颜色(即小于等于Low Limit)。

 Low Text - 指定在使用LowColor时Color Alarm上显示的文本。默认值为Low。

备注

输入数据必须是Scalar，并能够转换成Real64 (Complex, PComplex, Spectrum和Coord必须先"拆散"。)

Low Limit必须小于High Limit。

如果只想使用两个颜色范围，把Low Limit设置成等于High Limit。

如果只想使用一种颜色，把LowColor、MidColor和HighColor设置成相同的颜色。

位置

Display [image] Indicator [image] Color Alarm

另请参阅

AlphaNumeric, Fill Bar, Logging AlphaNumeric, Meter, Tank和Thermometer。

显示颜色告警

对象菜单


COM对象 - 问题诊断

有时在Microsoft Visual Studio .NET或Agilent VEE中使用COM类型库作为.NET组件时，您可能会收到警告信息。

原因

Microsoft Visual Studio .NET和Agilent VEE都试图使用TypeLibConverter.ConvertTypeLibToAssembly API把COM类型库自动转换成.NET interop组件。您将看到错误信息，因为API不能把COM类型库转换成.NET interop组件。

解决方法

为解决这个问题，试着使用.NET Framework SDK 1.1自带的命令行辅助工具TlbImp。您需要从微软开发人员网络中下载和安装SDK，因为VEE不分发SDK。如果已经安装了Visual Studio .NET 2003，那么您已经安装了SDK，不需要下载。

  1. 打开一个命令窗口，把目录变成空文件夹。

  2. 输入下述内容：<PathToSDK>\TlbImp.exe <PathToYourComTypeLib.dll>

例如c:\program files\Microsoft Visual Studio .NET 2003\sdk\v1.1\bin\TlbImp.exe
c:\program files\IVI\bin\rsfs.dll

这会生成.NET interop组件，如干净的文件夹中的Rsfs_RohdeAndSchwarzLib.dll。它还会在相同的目录下生成任何相关组件。

  3. 把生成的组件复制到VEE程序所在的地方。例如，如果程序位于C:\VEE programs\Rsfs.vee下，那么把生成的所有组件复制到c:\VEE programs下。

  4. 打开VEE程序，开始正常使用VEE程序。例如，如果它是IVI-COM驱程，您可以根据"To/From IVI-COM"联机帮助主题中的说明操作。如果它是任何其它COM类型库，可以使用Device [image] .NET Assembly References对话框浏览到interop组件。

备注

也可以使用TlbImp，生成可以由多个程序共享的Primary Interop Assembly，而不必复制到与程序相同的目录下。有时，这是最佳方法，如IVI-COM驱程。如需与TblImp有关的更多信息，请参阅微软开发人员网络。


Command Line

检索整个命令行及参数，用来启动这个VEE会话。

位置

System [image] Environment [image] Command Line


Command Line Args

把启动VEE当前会话使用的命令行自变量检索到一维数组中。

位置

System [image] Environment [image] Command Line Args


Comparator

比较两个值、然后输出未通过比较的坐标的对象。

用途

使用Comparator把一个数字测试值(如Waveform或Coord)与一个参考值进行比较。如果Test Value中的一个或多个值未通过比较，那么在Failures输出端会输出Coord Array 1D，并激活Failed输出端。如果所有值都通过比较，那么在Failures输出端会输出一个空白的Coord，并激活Passed输出端。

Failures输出Coord Array 1D的独立字段(x)包含每个失败点的索引或映射关系。相关字段(y)包含失败的Test Value。

Open View参数

Test Value == Ref Value - 通过点击并从显示的列表中选择函数，可以改变比较运算符。默认值为==。

备注

Comparator只比较数字值，即使其位于Text对象中。Comparator不能比较文本字符串。

Ref Value的形状作为与Test Value相同的形状处理。例如，在Test Value是 Array 1D时，3的Scalar Ref Value作为Array 1D处理 (所有要素等于3)。如果比较多个数组，那么数组的大小和维数必须匹配。

如果Test Value是一个标量，那么Ref Value必须是一个标量。

如果Test Value是一个没有映射的数组，那么会忽略Ref Value上的任何映射。

如果Test Value是一个映射的数组，那么Failures输出Coord (x)的独立变量是失败的要素的映射关系。

如果Test Value是一个Coord，那么比较中只使用Coord的相关变量。Failures输出Coord包含失败的Coord值。

所有测试都使用"约等于"算法，检查等于或不等于至少6个有效位。如果Ref Value是由一个以上的要素组成的数组，那么会从参考数据的幅度中导出"虚拟零"值。取值为"0"的任何数据点必须与这个"虚拟零"值相匹配。

位置

Device [image] Comparator

另请参阅

Allocate Array, Build Arb Waveform, Coord, If/Then/Else, Set Values, Properties (对象)和对象菜单


Complex

输出常数Complex标量或Array 1D的对象。

用途

使用Complex设置Complex Constant或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板上的提示使用Complex，把Complex对象的名字变成提示，如Enter the AC voltage:。用户在输入字段中填写请求的信息。

输入(2,10/27)，令Complex常数对公式求解，显示答案。

属性

 DataShape - 设置这一对象输出的值的初始数据形状。默认值为Scalar。

 ArraySize: - 在选择1D Array时，ArraySize设置数组的长度。默认值为10。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择1D Array时才能使用这一选项。默认值为True。

 Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

 InitialValue - 指定要设置的值。默认值为(0, 0)。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

 NumberFormat: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Sat 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个Complex值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段一直是一个标量，即使Complex配置成数组。

可以只输入实数值和虚数值，用逗号分隔这些值，令VEE格式化数字。

位置

Data [image] Constant [image] Complex

另请参阅

Alloc Complex, Build Complex, 默认首选项, Constant, Coord, Date/Time, Selection Control, Int16, Int32, PComplex, Real32, Real64, Text, Toggle Control, UInt8。

使用数据常数和对象菜单


Complex Plane

使用笛卡尔曲线显示连续生成的数据的对象。

用途

使用Complex Plane在实数对虚数轴上显示Complex、PComplex或Coord数据。

打开视图参数

下面是默认的打开视图参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Imag - Y (虚数)轴的名称。

Trace1 - 第一条轨迹的名称。

Real - X (实数)轴的名称。

对象菜单

Auto Scale [image] -点击这些菜单项，立即把画面重新定标成显示整条轨迹。（可以添加为控制端，或在收集数据后使用Scales属性栏设置，自动调整显示画面的大小。）

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用?/span>橡皮圈?/span>框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Y轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

ClearAtActivate - 在属性为True时，在Activate(上下文输入)时清除画面。默认值为True。

ShowTracesLegend - 在打开的视图中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

ShowScalesLegend - 在打开的视图中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

ShowScalesLabels - 在打开视图中，控制标为标度轴的值的可视性。默认值为True。

 Show Scroll Bars - 在打开视图中，控制X和Y标度上滚动条的可视性。默认值为True。

ShowAutoScaleButton - 在打开的视图中，控制Auto Scale按钮的可视性。默认值为False。

EnableEditTracesAndScales - 在打开的视图中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType - 默认值为Axis。

NumMarkers: - 允许在显示曲线上找到数据点的确切值。如果使用对数标度绘制数据，标尺上显示的值为线性数据点。

点击在画面底部附近的标尺值左面按钮的打开视图，可以将标尺移动至一条不同的轨迹上。按钮可以循环顺序通过不同轨迹的不同线型和颜色。

 MarkersInterpolate - 在这一属性为True时，可以在显示的数据点中设置标尺。显示的标尺值从线性内插计算得出。默认设置为False。

 MarkerColor - 标尺的颜色。

DisplayBackColor - 允许从调色板中选择画面区域的颜色。在细节视图和面板视图中显示时，可以选择不同的颜色。在设置Screen Element: Graph Background的Colors栏上的Default Preferences中，设置默认的Background颜色。

 ScaleLabelFont: - 允许从系统提供的字体列表中选择标度标记的字体。标度标记文本的默认字体在Screen Element: Graph Scale Label Text的Fonts栏上的Default Preferences中设置。

Traces Category:

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale ?/span>如果存在一个以上的Y标度，选择这条Trace使用的标度。

ScaleNumberFormat: (X和Y标度出现的属性，外加额外的Y标度)

Scales 组：

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - 打开的视图中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

Global Format - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Sat 01/Jan/2003 17:01:38)。默认值为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入必须为Complex、 PComplex或Coord类型的Scalar或Array 1D。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。

在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到 n 的整数，其中0不绘图，n 是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在打开的视图中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅VEE高级技术中的"使用记录和DataSets"。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Complex Plane

另请参阅

Magnitude Spectrum, Polar Plot, Strip Chart, Waveform (Time), X vs Y Plot, XY Trace和默认首选项。

在显示画面中设置标尺, 获得和设置标尺属性

对象菜单

Copyright (c) 1991-2007 Agilent Technologies, Inc.


Component Driver

把值读写到用户具体选择的组件中的仪器控制对象。它与Panel Driver对象的区别在于，其不显示仪器的控制面板。

用途

使用Component Driver，通过一次只设置部分组件的值，来控制仪器。在使用Component Driver之前，必须安装所需仪器的仪器驱程。

为在VEE工作区中添加Component Driver对象，点击I/O [image] Instrument Manager... ，显示Instrument Manager对话框。检查配置的仪器列表，查看是否有希望使用的仪器项：

如果希望使用的仪器位于列表中，且配置正确：

1. 单击仪器项，高亮度显示它。

2. 点击Component Driver按钮。

如果希望使用的仪器位于列表中，但需要改变配置，那么点击Properties�，使用对话框改变配置，保存配置(点击OK)，然后采用上面的第1步和第2步。

如果希望使用的仪器没有位于列表中，点击Add�，使用对话框改变配置，保存配置(点击OK)，然后采用上面的第 1步和第2步。

如需与配置对话框有关的信息，请参阅Instrument Manager和Instrument Properties。

备注

可以在关闭Live Mode的情况下操作Component Driver。用户可以在不与仪器通信的情况下运行程序，不管仪器是否连接到计算机上。必须先把Live Mode设置成启动(参阅Instrument Properties)，然后仪器才能与物理仪器通信。

为使用对象，必须至少把一个输入或一个输出添加到Component Driver对象中。可以添加一个以上的输入或输出，两个输入和输出可以出现在同一个对象上。一个输入对组件执行设置操作，一个输出执行获得操作。控制端作为输入初始化组件，以程序化方式改变设备地址，设置超时值。

位置

I/O [image] Instrument Manager...

另请参阅

Direct I/O, Instrument Manager, Instrument Properties, Panel Driver, Add Terminal和Properties (对象)

使用组件驱程对象

另请参阅VEE高级技术手册中的"使用面板驱程和组件驱程对象"。


Concatenator

把所有输入数据连接输出到Array 1D中的对象。

用途

使用Concatenator把两个或两个以上的数据要素组合到Array 1D的要素中。得到的数组大小是输入的大小之和。可以添加数据输入，允许连接三个或三个以上的容器。

Enum输入先转换成类型Text，然后再进行连接。

备注

输出数据类型是所有输入数据类型中最高的类型。如果任何输入是一维以上的数组，那么数组会平坦化(行较优)为一个Array 1D，以进行连接。

为把多行Text连接成一行，可以使用Accumulator。

它忽略空输入，这不同于concat(x,y)函数，后者在公式框内部运算。在公式框中，所有空输入自动转换成Real64标量，值为0。因此，如果a为空，b是 Int32标量值5，那么concat(a,b)得到长为2的Array 1D，类型为Real64，值为[0, 5]。有两个输入(空和Int32标量值5)的Concatenator对象输出长为1的Int32数组，值为[5]。

如果第一个值(第一个数据输入)有映射关系，其它输入值可以有映射关系，且点间隔相同，也可以没有映射关系。结果将从Xmin映射到Xmin + dx * N，其中"Xmin"是第一个数组值的映射的最小值，"dx"是第一个值中两个连续点之间的距离，"N"是得到的数组的大小。

位置

Data [image] Concatenator

另请参阅

Accumulator, Allocate Array, Collector, Set Values, Sliding Collector, Properties (对象)和对象 菜单

concat(x,y)


Conditional

一个菜单项。

用途

使用Conditional存取下述条件分支：

If A == B

If A ~= B

If A != B

If A < B

If A > B

If A <= B

If A >= B

使用Conditional对象，确定运行哪个子线程。

备注

注意Device [image] Functions & Object Browser下的Comparison项目与Conditional项目之间的差别。Comparisons是输出0或1的公式；Conditionals是If/Then/Else，有两个或两个以上的输出，其中一个输出启动。

注意Device [image] Function & Object Browser...中Logical项目AND, OR, XOR和NOT的返回值类型为Int32，形状与运算对象相同。这不同于条件函数，如==，其总是返回标量。

逻辑运算符只从字符串是否为空的角度定义给文本类型。也就是说，"0"和"1"在逻辑上为真，因为它们都是非空字符串，而""为假。因此，"zoo"和"" (空字符串)在逻辑上为假，因为第二个字符串为空。记住在比较Text类型和非字符串类型时，后者晋级为Text类型。这意味着"zoo"和"0"为真，因为实数0晋级为字符串"0"，且因为两个字符串都不是空，因此AND表达式为真，结果为1。

位置

Flow [image] Conditional

然后选择希望的条件分支对象。

另请参阅

If A ~= B, If A == B, If A != B, If A < B, If A > B, If A <= B, If A >= B和If/Then/Else。

Comparison, 三元运算符和Function & Object Browser。

在VEE程序内进行分支


Confirm (OK)

参阅OK。


Constant

一个菜单项。

用途

使用Constant存取下述输入常数，常数形状可以是标量或数组：

Text

UInt8

Int16

Int32

Int64

Real32

Real64

Coord

Complex

PComplex

Date/Time

Record

备注

除Text外，所有Constant对象都支持在输入框中使用任意公式。(只有在以前执行程序时设置了全局变量，才允许使用全局变量。在Program Explorer中点击Globals，查看存在哪些变量。) 在输入编辑字段后，公式会立即解析和求解。得到的标量数字作为Constant值使用。Constants不象Formula对象那样支持输入变量，因此不能在公式中使用输入变量。输入的公式必须求解成相应类型的标量值，或求解成可以转换成使用的Constant类型的标量值。

其支持的语法与Formula对象中相同，但有一些例外。不能使用数组构建语法([, ])运算符来构建数组，因为它们会返回非标题值，而返回值必须是标量。此外，不能在Constant对象中使用输入名称变量。

一般来说，允许对嵌套、函数调用和预先定义的数字常数PI (3.1416...)使用任意二元运算符和圆括号。

Constant对象中不会出现Variant类型。创建Variant数据类型的唯一方式是使用声明变量，选择类型"Variant"。

范例

在PComplex对象中输入(2, @PI/2)时，它求解，返回(2, @90) (如果Trig Mode设为Degrees)。

在Real64对象中输入14 + exp10(3)时，它求解，返回1014。

在Real64对象中输入(1, 2)时，返回错误，因为VEE不允许从Complex转换到Real64。

位置

Data [image] Constant

另请参阅

Complex, Coord, Date/Time, Int16, Int32, PComplex, Real32, Real64, 记录常数, 选择控制, Text, 拨码控制,UInt8。

创建记录常数

创建数组常数

使用数据常数


Continuous

一个菜单项。

用途

使用Continuous存取下述对象：

Int32 Slider

Int64 Slider

Real64 Slider

Int32 Knob

Int64 Knob

Real64 Knob

位置

Data [image] Continuous

另请参阅

Int32 Knob, Int32 Slider, Real64 Knob, 和 Real64 Slider。

使用数据滑尺和旋钮


Control Input (Object Menu)

Control Input (对象菜单)

把异步控制输入端添加到对象中。

用途

使用Control Input在对象中添加异步输入，如Reset或Clear。

在选择Control Input后，从对话框中选择要添加的控制。在某些系统上，控制输入终端使用与数据输入不同的颜色。

备注

并不是所有对象上都提供了控制输入。

激活控制输入端不会导致对象运行，而只会强制发生特定操作 (如Clear)。

可以由控制输入执行的操作通常也可以从对象菜单选项或打开视图上的按钮实现。

位置

在每个对象菜单上 [image] Add Terminal [image] Control Input

另请参阅

Add Terminal, Data Output (对象菜单), Delete Terminal和对象菜单。


Coord

输出常数Coord Scalar或Array 1D的对象。

用途

使用Coord，设置Coord常数或获得用户输入。点击输入字段，输入一个值。

属性

DataShape - 设置这一对象输出的值的初始数据形状。可能的值是Scalar和Array 1D。默认值为Scalar。

 ArraySize: - 在选择Datashape 1 D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择Datashape 1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择Datashape 1D Array时才能使用这一选项。默认值为True。

 Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为(0, 0)。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

Number Format - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Sat 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为 Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个Coord值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段一直是一个标量，即使Coord配置成数组。

Coords可以包含两个以上的字段。例如，拥有三个字段的Coord是(x, y, z)。

Coords上的数学运算只在相关变量上操作，即它们在(x, y)对的y值上操作。

范例

输入2, 5 + exp10(2)，生成Coord常数(2,105)。

可以使用Coord Array 1D定义波形的定界包络，作为Comparators的波形输入。使用Array 1D of Coords定义定界波形上的限制点。限制点是定义了限制波形形状的线段的端点。然后通过Build Arb Waveform对话框发送这个数组，创建限制波形。可以在Comparator对话框中使用新的定界波形，作为其中一个输入，生成落在定界波形外面的点。

可以在clipUpper或clipLower函数中使用定界波形，把波形削波到定界极限。

为作为面板上的提示使用Coord，把它的标题变成提示，如"Enter the Coordinates"。用户在输入字段中填写请求的信息。

位置

Data [image] Constant [image] Coord

另请参阅

Complex, Constant, Date/Time, Int16, Int32, PComplex, Real32, Real64, Selection Control, Text, Toggle Control和UInt8。

使用数据常数


Copy

把复制的选定对象放在Paste缓冲器及Windows 2K和XP剪贴板上。

用途

使用Copy，然后使用Paste，多次复制选定的对象集合。

备注

只有在选定对象后，才能使用Copy。

每次Copy会覆盖Paste缓冲器中以前的内容。

被复制的对象可以粘贴到同一程序中的另一个位置或另一个VEE会话中。在Windows 2K和XP中，被复制的对象可以粘贴到其它应用程序中。

为复制一个对象，使用对象菜单中的Clone选项。Copy与Clone的区别在于，Clone可以立即复制一个对象集合，而Copy则只能把对象放在Paste缓冲器中以备以后使用。

位置

Edit [image] Copy

另请参阅

复制 (对象菜单), 剪切, 对象菜单, 粘贴, 替换, 和 全选。


Counter

显示和输出其数据输入端被激活的次数的对象。

用途

使用Counter连续计数。Counter连续计算上一个对象的输出激活一个输入的次数。Counter输出是一个Real64标量。

对象菜单

Clear - 清除Counter的内容。

备注

Counter的数据输入不要求任何特定类型的数据，甚至可以计算空值的输入数量。通过激活输入Clear控制端，还可以清除计数。

Counter的值是一个Real64标量，在Counter输出上提供。

位置

Device [image] Counter

另请参阅

Accumulator, Properties (对象)和对象菜单


Create Directory

创建一个新目录。

位置

System [image] Directory [image] Create Directory


Create RunTime Version

保存不能编辑的安全版本的程序。

用途

使用Create RunTime Version，在完成后及在用户访问前锁定程序的主面板视图。您将不能再访问具有安全保护的项目中的细节视图。

在使用Create RunTime Version时，系统会提示输入一个文件名，调用安全版本。然后，具有安全保护的文件将使用<filename>.vxe名称保存。为运行具有安全保护的文件，选择File [image] Open...，把Files of type:选项变成Secure VEE Programs (*.vxe)，选择文件。在加载具有安全保护的文件时，许多VEE开发工具(Edit, Debug, ...)都不能使用。

备注

具有安全保护的程序的加载和运行速度要比没有安全保护的程序快。

使用Default Preferences，把具有安全保护的程序的文件格式设置成ASCII或二进制。默认设置二进制格式保存的文件容量较小、加载速度更快。

为提高安全性，VEE不能把.vxe文件合并到另一个程序中。但是，VEE将导入保存为.vxe文件的库。

位置

File [image] Create RunTime Version...

另请参阅

Default Preferences, UserFunction, UserObject

保护程序安全


Create UserObject

把多个选择的对象放到一个UserObject中。

用途

使用Create UserObject把多个对象在逻辑上和物理上划分在一组中。选择要包括的多个对象，然后选择Create UserObject。创建的UserObject中包含选择的多个对象。

UserObject象任何其它对象一样操作；只有UserObject内部的所有数据输入被激活时，UserObject内部的对象才会操作。必须先完成UserObject内部的所有操作，然后才能激活数据输出。

open view标题栏右侧的最大化按钮可以把UserObject的尺寸提高到VEE工作区的尺寸。

如果UserObject内部的对象在位于UserObject之间连接到其它对象上，那么将在UserObject上自动创建多个端，以保持连接。UserObject内部的对象不能连接到UserObject外部的对象上，而必须先从UserObject菜单中添加输入端和输出端。

备注

如果没有选择对象，那么Create UserObject不能使用。为创建空的UserObject，从Device菜单中选择UserObject。在创建后，通过把对象移动到UserObject窗口内部，可以把新的对象放在UserObject内。必须使用Cut和Paste完成，才能把现有对象放在新的UserObject内。

可以方便地保存常用函数的UserObject(使用Save Objects...)，创建一个再次使用的函数库。

在Step Over一个UserObject时，UserObject的整个上下文会运行。使用Step Into运行UserObject内部的各个对象，使用Step Out运行所有其余对象及退出UserObject。

位置

Edit [image] Create UserObject

另请参阅

Add To Panel, 默认首选项, Create RunTime Version, Select All, Step Into, Step Over, Step Out, Unpack (对象菜单), UserFunction和UserObject。

创建和使用UserObject库

在程序中使用多个对象创建UserObject

在程序中创建UserObject


创建 UserFunction

一个Edit菜单选项，允许从用户选择的多个VEE对象中创建一个UserFunction。

用途

通过使用Create UserFunction，可以把许多功能相关的VEE对象采集到一个单独的UserFunction中。当在VEE程序中重复使用相同的对象时，特别适合把相关的VEE对象转换成UserFunction。

为创建UserFunction，按住CTRL键，同时使用鼠标左键点击多个对象，选择希望在函数中包括的VEE对象。选中的对象将使用阴影高亮度显示。

在已经选择了希望在函数中包括的多个对象后，从Edit菜单中选择Create UserFunction，出现Create UserFunction对话框。使用这个对话框中的Function Name:字段，为要创建的UserFunction 输入自己的描述名称。如果选择不输入新的UserFunction名称，那么默认名称是UserFunction1。一旦已经为新的UserFunction选择了一个名称，在Create UserFunction对话框上点击OK按钮。

在已经创建了新的UserFunction后，选中的所有对象现在会出现在一个新的UserFunction窗口中。新窗口有一个标题栏，包含已经指配的UserFunction名称。此外，这个新UserFunction的Call将作为Call对象出现在创建新UserFunction的VEE窗口中。

备注

如果在目前活动的窗口中没有选择任何VEE对象，那么Create UserFunction菜单选项将变成灰色(不能选择)。

位置

Edit [image] Create UserFunction

另请参阅

Call, Edit UserFunction, Import Library, UserFunction和UserObject。

在程序中使用多个对象创建UserFunction

在程序中创建UserFunction


Cut

删除选择的对象，把其放到Paste缓冲器及Windows中的剪贴板上。

用途

使用Cut删除一套选择的对象，或从工作区中的一个位置删除多个对象，把多个拷贝放到工作区中另一个位置(使用Paste)。

备注

只有在选择了对象之后才能使用Cut。

在程序正在运行时不能使用Cut。

为删除一个对象，从对象菜单中使用Delete功能。

每个Cut会覆盖Paste缓冲器中以前的内容。

如果意外Cut对象，可以使用Undo恢复这些对象。

Cut对象可以粘贴到同一程序中另一个位置、另一个VEE会话或其它应用程序中。

为在不删除对象的情况下进行多次拷贝，应使用Clone或Copy。为在不修改剪切板的情况下剪切对象，应使用对象上下文相关菜单Delete。

Panel Veiw和Detail View上都可以撤销剪切操作。

位置

Edit [image] Cut

另请参阅

Clone (对象菜单), Cut (对象菜单), Copy, Paste, Replace, 撤消操作, Delete (对象菜单)和Select All。


Cut (Object Menu)

Cut (对象菜单)

删除一个对象，把它放到Paste缓冲器及剪贴板上。

用途

使用Cut从工作区中删除这个对象。

备注

只能从User Objects和User Functions中使用Cut。

每次Cut会覆盖Paste缓冲器中以前的内容。

在程序运行时不能使用Cut (对象菜单)。

如果意外Cut一个对象，可以使用Paste或Undo恢复这个对象。

剪切对象可以粘贴到同一程序中另一个位置或另一个VEE会话中，剪切对象可以粘贴到其它应用程序中。

如果想删除多个对象，可以使用Edit菜单中的Cut选项，或按住CTRL键，移动鼠标左键，在想要剪切的项目周围画一个长方形。在工作区中任何打开区域上按鼠标右键，从菜单中选择Cut。

快捷方式

为删除指针下的对象，按CTRL+D。

位置

在对象菜单上 [image] Cut

另请参阅

Clone (对象菜单), Copy, Cut, Paste, Replace和Select All。


Cyclic Button

参阅Selection Control。


Data Input (Object Menu)

Data Input (对象菜单)

在对象中添加数据输入端。

用途

使用Data Input，提高对象使用的数据输入端数量。在某些对象上，新增的数据输入自动命名为A, B, C，依此类推。可以把大多数端的名称变成对您更有意义的名称。

尽管不能改变大多数输入端的数据类型或形状，但可以在某些对象上改变这些限制，如If/Then, Formula, Shift Register和I/O菜单下的对象。

备注
不应改变输入端的数据类型或形状，除非对象只需要该数据类型；如果限制从Any变成其它类型，必须把数据输入转换成端限制，然后对象才会处理数据。转换会耗费时间。如果转换不成功，对象会返回错误。

备注

只能从允许新增数据输入的对象中使用Data Input。

快捷方式

通过把光标放在输入端显示区域，然后按CTRL+A，可以迅速添加一个数据输入端。每按一下CTRL+A会在光标位置插入另一个数据输入端。Add Terminal [image] Data Input在末尾添加数据输入端。CTRL+D删除光标覆盖的数据输入端。

位置

在每个对象菜单上 [image] Add Terminal [image] Data Input...

另请参阅

Add Terminal, Data Output (对象菜单), Control Input (对象菜单), Conditional, Delete Terminal, 对象菜单和Properties (对象)。


Data Output (Object Menu)

Data Output (对象菜单)

在对象中添加一个数据输出端。

用途

使用Data Output，提高对象使用的数据输出端数量。在某些对象上，新增的数据输出自动命名为X, Y, Z, W, V，依此类推。可以把这些数据输出端的名称变成对您更有意义的名称。

在只有在该对象已经执行后，才会在端信息对话框中显示输出端容器信息(数据类型和形状)。

备注

只能从允许新增数据输出的对象中使用Data Output。

快捷方式

通过把光标放在输出端显示区域，然后按CTRL+A，可以迅速添加一个数据输出端。每按一下CTRL+A会在光标位置插入另一个数据输出端。Add Terminal [image] Data Output在末尾添加数据输出端。CTRL+D删除光标覆盖的数据输出端。

位置

在每个对象菜单上 [image] Add Terminal [image] Data Output...

另请参阅

Add Terminal, Data Input (对象菜单), Delete Terminal, Error Output (对象菜单), Instrument Manager和对象菜单。


Date/Time

输出日期和时间常数值的对象。Date/Time获得输入日期和时间，把它转换成输入与Epoch开始 (定义为公元后0001年1月1日UTC 0000时开始)之间的秒数。

用途

使用Date/Time，显示创建对象或数据时的时间和日期。

可以使用Date/Time，通过以数学方式比较个事件，计算上一个事件和当前事件之间经过的时间。

为改变周几、日期或时间之类的值，输入值。例如，输入Tue可以把Mon 27/Oct/2003 15:43:33变成Tue 28/Oct/2003 15:43:33。如果没有指定值，那么将显示当前周几、日期或时间。如果只改变其中一项，其它时间要素会保持相同。

范例

可以使用Date/Time，确定生成某个试验数据的时点与另一个时点(可以是过去时点、也可以是当前时点)之间经过的时长。使用Date/Time对话框，输入新的任意日期，然后取原始试验数据与新任意日期之差。

为确定所有程序或部分程序执行所需的时间长度，使用Timer或now()。

属性

 DataShape - 设置这一对象输出的值的初始数据形状。默认值为Scalar。

 ArraySize: - 在选择1D Array时，ArraySize设置数组的长度。默认值为10。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择1D Array时才能使用这一选项。默认值为True。

 PasswordMasking - 在这一属性为True时，作为星号(*)发回输入文本。在操作人员输入敏感的日期/时间数据时，可以使用这一功能。Date/Time输出端上输出的字符串没有掩码。在Configuration为1D Array时，掩码失效。默认值为False。

 Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为Sat 01/Jan/1 17:00:00 MST。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。可以重新配置Constant，以便与进入的数据形状相匹配。控制输入应该是日期/时间常数解析规则给出的有效的Date/Time字符串，其规则与Direct I/O相同。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段一直是一个标量，即使Date/Time配置成数组。

通过使用对象的Properties窗口中提供的Time Stamp数字格式，可以显示AlphaNumeric或Logging AlphaNumeric格式的Date/Time输出。

可以使用To String, To File或To Printer (I/O [image] To [image])之类的对象，把Date/Time输出写入到各种位置，如字符串、文件或打印机。在这些对象中，在WRITE TEXT事务中使用Time Stamp格式。

对MS Windows，可以使用Control Panel中的Date/Time Properties对话框(Time Zone栏)，改变这个对象中出现的时区。在改变时区设置后，必须重启VEE，以使变动生效。

位置

Data [image] Constant [image] Date/Time

另请参阅

Timer

使用数据常数


Date/Time Compare

比较两个日期/时间。

位置

System [image] DateTime [image] Compare


Date/Time to Local Time

把日期/时间值转换成当地时间。

位置

System [image] DateTime [image] To Local Time


Date/Time to String

把日期/时间值转换成字符串。

位置

System [image] DateTime [image] To String


Date/Time to Universal Time

把系统日期/时间转换成通用时间。

位置

System [image] DateTime [image] To Universal Time


Day of the Week

从一定日期中检索周几。

位置

System [image] DateTime [image] Day of the Week


Day of the Year

从一定日期中检索其在一年中的日期。

位置

System [image] DateTime [image] Day of the Year


Declare Variable

允许声明编程变量的对象。

用途

使用Declare Variable对象声明VEE程序中任何地方的变量。可以声明三类变量：

Global - 可以在程序内部任何地方使用声明变量。这是默认的声明变量范围。

Local to Context - 声明变量专用于声明变量的上下文，如位于某个UserObject或UserFunction内部。

Local to Library - 声明变量专用于某个Library，只有其UserFunctions才能到达这个库。

对象菜单

Add Field -- 在字段列表末尾的记录中添加一个新字段。对话框允许定义新字段的名称、类型和形状。这个字段是灰色的，除非选择Record类型。

Insert Field -- 在记录的指定部分插入一个新字段。对话框允许定义新字段的名称、类型和形状。这个字段是灰色的，除非选择Record类型。

Delete Field -- 允许删除记录字段。对话框将列出可以删除的字段。只有在记录有一个以上的字段时，才能使用这一选项。这个字段是灰色的，除非选择Record类型。

Edit Event Handler?/font> - 如果已经为声明的ActiveX对象创建任何事件处理器UserFunctions，那么打开Edit Event Handler对话框。

Create Event Handler?/font> - 打开Create Event Handler UserFunction浏览器。这个浏览器允许创建一个UserFunction，处理ActiveX automation对象生成的事件。可以为浏览器Member区域列出的每个事件创建一个事件处理器。只有在Type设置为Object，且已经为指定对象Library和Class启用事件时，才能使用这个菜单项。

Open View参数

Name: - 用户自定义的变量名称。默认名称是global1。

Scope: - 声明变量的程序范围。有效的程序范围值是Global, Local to Context和Local to Library。默认的程序范围是Global。

Type: - 变量的数据类型，如Real64, Int32, Enum等等。默认类型是Real64。

在Type设置为Record时，Declare Variable对话框扩展到右面。扩展的区域允许定义和构建Record。使用对象菜单中的Add Field, Insert Field和Delete Field构建Record。

在Type设置为Object时，会出现一个新字段"Sub Type"，Declare Variable对话框扩展到右面。扩展的区域允许在为ActiveX或.NET对象声明变量时指定可选的细节。在声明变量，您不需要指定这些细节；但是，通过指定细节，VEE会自动进行类型检查，以保证只为声明变量指配技术数据。对ActiveX对象，为改变Library, Class和Events值，点击Specify Object Type，然后点击Edit?/font>，在出现的Specify Object Type对话框中改变值。对.NET对象，为改变Assembly, Namespace, Type和Members值，把Sub Type设置为.NET，然后点击Edit...，在出现的Specify Object Type对话框中改变值。子类型"Any"支持子类型.NET, ActiveX(COM)的对象或VEE对象, 如XYDisplay。

在Type设置为Variant时，变量赋值可以是任何数据类型。

Num Dims: - 变量的维数。有效范围是0-10。默认值是0。

备注

如需与影响清空ActiveX参考的编程技术有关的更多信息，请参阅CreateObject内容。

位置

Data [image] Variable [image] Declare Variable

另请参阅

ActiveX Automation References, ActiveX Control References, Delete Variable, Get Variable, Set Variable, Specify Object Type, Variant, View Variables, Properties (对象)和对象菜单

创建变量和释放ActiveX参考


Default Preferences

一个菜单选项，为在VEE编程环境中设置默认首选项提供了一个对话框。

用途

使用Default Preferences设置VEE工作区选项。在启动VEE时及在选择New时，会使用保存的选项。部分选项还保存在程序中，因此可以为每个程序配置一套不同的默认值。

对话框信息

General栏：

Environment组：

Auto Line Routing- 在选中Auto Line Routing复选框时，在移动或调整对象大小时，会自动重画连接到对象的线。VEE只画横线和竖线，在其它对象周围路由这些线。复杂的程序重新画线可能要用一段时间。在没有选中Auto Line Routing复选框时，直接从端到端画连接线(除非固定)。选择Edit [image] Clean Up Lines，在对象周围重新画线。

Delete Variables at PreRun - 在选中Delete Variables at PreRun复选框时，在每次运行程序前，将删除所有变量中存储的值。由于只有在使用Set Variable对象设置调用的变量时才能执行Get Variable对象，因此如果没有设置要求的变量，那么将返回错误。在没有选中Delete Variables at PreRun复选框时，在PreRun时将不会删除变量中存储的值，程序将使用以前运行的数据运行。但是，需要注意的是这些数据可能会无效(这时程序执行会不正确)，将不会报告任何错误，可能会遇到意想不到的结果。

Code Completion and Insight- 在选中Code Completion and Insight复选框时，启动Code Completion and Insight功能。在输入公式对话框时，将提示所有可用的选项。

Code Completion Supports Build-in Functions - 在选中Code Completion Supports Build-in Functions复选框时，Code Completion窗口中将出现VEE内置函数。如果没有选中这一项，那么Code Completion将不显示任何内置函数。

Code Completion Supports COM Constants- 在选中Code Completion Supports COM Constants复选框时，COM Constants将出现在Code Completion窗口中。如果没有选中这一项，Code Completion将不会显示任何COM Constants。

Match Brackets in Formula- 在选中Match Brackets in Formula复选框时，VEE将在公式中用灰色标出匹配的括弧。这种功能适用于复杂的公式。

Execution Mode组：
如需更多信息，请参阅了解执行模式。如需了解执行模式之间的兼容能力问题详情，请参阅执行模式。

VEE 8 - 使用与VEE 8.0产品相同的设置运行程序。VEE 8模式包括VEE 6&7模式的所有功能及新的数据类型Int32和Boolean。

VEE 6&7 - 使用与VEE 6.0产品相同的设置运行程序。VEE 6模式包括VEE 5模式的所有功能及新的数据类型UInt8, Int16, Real32和Variant。

VEE 5 - 使用与 VEE 5.0产品相同的设置运行程序。 VEE 5模式包括VEE 4模式的所有功能及在Windows上支持ActiveX。注：使用VEE 4.0及老版本编写的部分程序在VEE 5模式下可能会表现出不同的行为方式。

VEE 4 - 使用与 VEE 4.0产品相同的设置运行程序。使用VEE 4.0编写的程序运行方式与老版本完全相同。VEE 4模式增加了汇编程序技术，其程序运行时间要比老版本快。注：使用VEE 3.2及老版本编写的部分程序在这种模式下可能会表现出不同的行为方式。尽管程序表面上可能运行正常，但由于分时差，程序可能会发生问题。

VEE 3 (Not Compiled) - 使用老的VEE解释程序运行程序，使用VEE 3.2和老版本编写的程序运行方式与老版本完全相同。

Trig Mode组：

Degrees | Radians | Gradians - 指定整个程序中使用的三角测量单位的默认值。如果选择Radians，三角测量计算的执行速度最快。

Debug组：

Data Flow Rate: - 设置Data Flow标尺移动的速度，指明经过程序的数据流程。可以选择速率1 - 10 (其中10最快)。默认速率是6。

Disable Debug Features - 允许关闭所有调试功能，以使程序执行速度达到最快。

Check Instrument Addresses at PreRun - 在启动仪器检查时，VEE会在运行前检查支持的所有仪器，确定是否可以访问参考的仪器(活动)。如果不能访问仪器或接口，那么VEE：

1. 显示对话框，提示用户先解决问题，然后进行重试。用户可以回答"Yes"重试检测这台仪器，回答"No"检查下一台仪器，或回答"Cancel"完全绕过这台仪器。

2. 如果在重试后检测到该仪器，那么VEE将检查下一台仪器。

3. 在重试不成功后(或回答"No")，VEE在同一个接口类型上显示活动的仪器列表。然后用户可以为当前仪器选择另一个地址。

Program Development组：

Alignment Spacing - 在复选Edit [image] Align [image] Space Equally时指定放在VEE对象之间的空间量(单位为像素)。选择其中一个其它Align [image] 命令会导致对象使用指定的空间量对齐。

Binary RunTime File Format - 在使用File [image] Create RunTime Version把程序另存为.vxe文件时控制文件格式。打开Binary RunTime File Format (默认值)，可以缩小文件容量，改善程序安全。在关闭时，将使用ASCII格式保存文件。

Show Description Indicators - 在复选时，如果对象带有描述，对象右上角会显示一个小的红三角形。可以点击红三角形，启动描述编辑会话。

Colors栏：

Screen Element - 允许选择将设置默认颜色的屏幕单元(VEE的图形部分)。可以使用某个VEE对象的菜单上的Properties选项，改变部分单元的颜色。

Color Value - 允许从调色板中选择屏幕单元的颜色。

Fonts栏：

Screen Element - 允许选择将设置默认字体的屏幕单元(VEE的图形部分)。可以使用某个VEE对象的菜单上的Properties选项，改变部分单元的字体。

Font Value - 允许从系统上提供的字体列表中选择屏幕单元的文本字体。

Number栏：

Integer: - 指定在这个对象上显示的整数数字的数字格式。选项有Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

Real: - 指定在这个对象上显示的实数数字的数字格式。选项有Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0)和Standard (如98.6)。默认值为Standard。

Printing栏：

Screen Element - 允许选择在打印时设置灰色阴影的屏幕单元(VEE的图形部分)。

B & W Printer Darkness - 在黑白打印机上打印时，允许为每个屏幕单元选择灰色阴影。默认值通常适用于大多数打印机。

Print Magnification: - 指定在打印VEE程序或部分程序时使用的放大倍数。对打印输出上较小的图像，应使用较低的数字。如果想在一页上打印输出放大的屏幕，默认打印放大倍数设置为75%。

Print Header and Index Page - 在复选这个框时，VEE程序每页打印输出上将包含一个两行的标题，表明日期和时间、程序文件名和页码。在打印输出末尾，将打印一张索引页，显示索引项目的页码。

Print Program Explorer - 在复选这个框时，VEE程序打印输出将显示Program Explorer窗口中包含的信息。

Print Cover Page - 在复选这个框时，VEE程序打印输出的第一页将显示下述内容：

Agilent VEE产品徽标图像。

打印的程序的文件名。

程序保存的文件格式。

正在使用的VEE软件的修订版代码 (如6.0等等)。

当前VEE执行模式(VEE 6等等)。

Main用户对象Description文件(如果已经输入)。

Print I/O Configuration - 在复选这个框时，打印仪器配置展开的树型图。可以在I/O [image] Instrument Manager…中看到仪器配置。

为生成曲线，以互动方式从显示屏的对象菜单中选择Print菜单项。如果当前Printer Setup位于Print to File模式下，那么将使用指定的文件或目录名。

将绘制显示对象的整个曲线，并进行定标，填充定义的绘图区域，同时保留原始显示对象的屏幕高宽比。通过重新调整显示对象的大小，可以控制绘制的图像的屏幕高宽比。通过扩大显示对象，可以缩小曲线周围文本和数字标注的相对大小。

Web Server栏：

Enable Server - 允许打开VEE的内置Web服务器。默认值为关闭。Web服务器允许使用标准HTTP 1.0协议从远程网络浏览器中监测和诊断VEE应用程序。VEE必须在连接到网络的系统上运行。

Root Directory: - 允许指定远程网络浏览器可以访问的文件位置。默认值为~installDir/www。不要把私密文件放在这个目录或其任何子目录下，因为可以接入主机系统的任何网络浏览器都可以看到这些文件。文件index.html安装在默认的根目录下。这个文件是默认的Web服务器主页，可以根据要求调整这个主页。如果改变Root Directory，把index.html移到新位置，不要改变其文件名。

HTTP Port Number: - 允许为Web服务器指定端口号。默认值为80。只有在另一个Web服务器(如另一个VEE)在同一系统上运行，或想限制访问VEE的Web服务器时，才需要改变默认端口号。不要使用已经分配的端口号。允许的取值范围为0 - 65535。如需查看当前分配的端口列表，请参阅services文件：
Windows NT: \Winnt\system32\drivers\etc\services

Server Timeout (sec): - 允许设置web服务器等待VEE处理Web服务器命令的最大时间。默认值为60秒。如果VEE程序忙着执行耗时的活动，那么会它向网络浏览器发送一条超时消息。

Log File: - 允许指定日志文件http.log的位置。默认位置是一个临时目录，如C:\tmp\http.log。如果日志文件不存在，那么在Default Preferences中进行任何变动时将创建日志文件。日志中包含Web服务器处理的所有进入HTTP请求的记录。数据追加到日志文件上，因此必须监测其大小。

I/O栏：

IO Preferences

 Enable Pre 8.0 Legacy IO: - 在复选这个框时，Instrument Manager将搜索旧式SICL设备。在默认情况下，Instrument Manager不搜索这些设备。

备注

在启动VEE Web服务器及设置其属性时，可以从支持HTTP 1.0规范的任何网络浏览器上访问Web服务器(任何常用的浏览器)。使用下面的其中一种格式输入网址：

http://hostname{:port}{/file}

或

http://hostname{:port}{/command}{?parameter}

其中：

hostname (必填)识别VEE正在运行的主机系统。在网址中独立使用时，这会打开Web服务器主页index.html。

port (选填)在不使用默认值时识别Web服务器的HTTP Port Number。

file (选填)相对于浏览器打开的Root Directory，识别一个文件或目录。可以包括一个文件扩展名，如.jpeg或.html。

command (选填)指定Web服务器支持的命令，允许从浏览器监测、诊断和控制VEE程序。下面介绍了这些命令。

parameter (选填)指定命令要求的参数。下面的命令描述了各个参数。

Agilent VEE Web服务器支持下述命令：

ViewVEE显示整个VEE窗口。

ViewMainDetail显示Main窗口的细节视图。如果程序保存为具有安全保护的RunTime程序，那么会出现错误信息。

ViewMainPanel显示Main窗口的面板。如果Main窗口没有面板，那么会出现错误信息。

ViewExecWindow显示VEE Execution窗口。如果不存在Execution窗口，那么会出现错误信息。

ViewDetail?UserFuncName显示名为UserFuncName的UserFunction的细节视图。如果UserFuncName不存在或已经保存为具有安全保护的RunTime文件，那么会出现错误信息。视图的大小将可以看到UserFunction中的所有对象，即使当前UserFunction窗口尺寸较小。

ViewPanel?UserFuncName显示名为UserFuncName的UserFunction的面板视图。如果UserFuncName不存在或没有面板，那么会出现错误信息。

ViewError显示当前程序的Error窗口。

下面的范例说明了可以在网络浏览器中输入的网址。它们假设VEE正在联网的系统上运行，主机名为my_system，已经启动Web服务器，使用默认HTTP端口号80。

http://my_system/public_docs/page.html
在目录public_docs中显示文件page.html。这个目录和文件位于相对于Web服务器根目录的主机系统上。

http://my_system/ViewExecWindow
显示VEE Execution窗口。

在按Save时，默认首选项存储在默认文件中(对MS Windows是VEE程序安装目录下的文件VEE.RC)。部分属性保存在程序中，并作为默认文件保存。其中包括General栏上Environment组和Trig Mode组中的选项及Number栏上的数字格式。只有在File [image] Save对话框中复选Save colors和fonts with program框时，才会在程序中保存颜色和字体值。另外对颜色和字体，只有改变的设置才保存在默认文件中。

如果按OK，变化只对当前工作会话有效。

如果按Reset，将丢弃当前设置，重读默认值。

如果按Cancel，将取消所作的变化。

位置

File [image] Default Preferences

另请参阅

Align, Clean Up Lines, Delete Variable, Get Variable, Set Variable, Show Data Flow, Program Explorer和Properties (对象)

改变默认颜色

改变默认字体

改变数字格式

改变打印首选项

设置打印机


Delay

在激活Done数据输出端之前等待指定时间的对象。

用途

使用Delay把执行线程段延迟指定的秒数。

范例

在使用UserObject创建的对话框中，使用Delay作为时间输出。

打开视图参数

在编辑字段中输入延迟秒数。如果添加一个数据输入端，为该端提供的值决定着延迟周期(单位为秒)。

备注

延迟值的单位为秒，分辨率取决于系统时钟及运行Delay的程序特点。可以通过数据输入设置Delay值。

延迟间隔从激活序列输入端的时间开始度量。在指定间隔后，会激活Done数据输出端。注意在等待时，Delay会"睡着"，从而为其它对象提供运行机会。

在大多数情况下，可以使用Done数据输出端或序列输出端，在Delay超时后继续传播。但是，在Delay对象属于包含并行执行的其它对象的一个线程时，可能只有在过了长得多的时间时才会启动序列输出端。这是因为只有在没有可以执行的任何其它对象时，序列输出端才会启动。为保证在Delay周期结束时延迟的线程继续运行，可以使用Done数据输出端，它在Delay时间周期结束时会一直启动。

位置

Flow [image] Delay

另请参阅

Instrument Event, Interface Event, OK, On Cycle, Properties (对象)和对象菜单

设置超时


Delete (Object Menu)

Delete (对象菜单)

从面板视图或细节视图中删除这个对象。

用途

使用Delete从细节视图或面板视图中删除对象。注意在从面板视图中删除对象时，对象仍保留在细节视图上。

从细节视图中删除对象也会从面板视图中删除这个对象。

备注

Delete不会修改剪切板(即用于Paste)。

通过按CTRL+Z、从主菜单中选择Edit > Undo或从工具栏中选择 [image] ，可以撤消Delete操作。

快捷方式

通过双击对象左上角的对象菜单选择框，可以迅速删除对象。

位置

在对象菜单上 [image] Delete

另请参阅

Cut, 对象菜单, 撤消操作和Properties (对象)。

从面板中删除对象


Delete Directory

删除指定的目录。

位置

System [image] Directory [image] Delete Directory


Delete File

删除指定路径位置上的文件。

位置

System [image] File [image] Delete File


Delete Library

从运行的程序中删除(卸载)UserFunctions、Compiled Function定义或Remote Function定义库的对象。

用途

使用Delete Library从VEE程序中删除一个库。采取的操作取决于库的类型：

UserFunction - Delete Library从VEE程序中删除以前使用Import Library对象加载的UserFunction。这只删除Library Name字段中指明的库内包含的UserFunction。

Compiled Function - Delete Library把一个共享的库从VEE流程中分离。但是，只有删除指向该文件的最后一个库时，才会实际分离包含共享库的文件。也就是说，如果有多个库指向同一个共享库文件(使用同一个定义文件或不同的定义文件)，那么只有当没有使用附着代码的其它库时，共享的库文件才会从VEE流程中分离。一旦附着到一个流程上，操作系统不允许移动或删除共享的库。如果想创建一个新的共享库文件，必须使用Import Library对象中的Delete Lib选项分离代码。

Remote Function - Delete Library关闭远程VEE流程，从本地VEE流程中删除Remote Function定义。在本地主机上删除参考远程流程的最后一个库时，Delete Library会实际关闭远程流程。

Open View参数

Library Name - 在这个字段中，输入想删除的库的名称。

备注

Delete Library一般用于高级操作，您可能想动态加载、然后从运行的VEE流程中删除库对象。这可以大大降低VEE流程的存储要求。

Delete Library对象将接受一个Data Input端。输入端的默认名称是LibraryName。

位置

Device [image] Delete Library

另请参阅

Call, Edit UserFunction, Import Library, UserFunction, UserObject和Properties (对象)


Delete Line

删除两个端之间的线。

用途

使用Delete Line消除错误连接或修改程序中的连接。选择Delete Line，然后点击要删除的线或点击其附近区域。

为退出这一模式、且不删除线，在工作区上远离任何线点击空白空间。

备注

为查看一条线的端点(不删除线)，把光标瞬间放在线上。这会高亮度显示线，并显示其端点，另外还会显示线所携带的值。

在程序运行时不能使用Delete Line。

可以撤消Delete Line操作。

快捷方式

按住CTRL+Shift，把指针放在线上，按鼠标左键，删除线。

通过这种方式，可以删除一系列线，一次删除一条。

位置

Edit [image] Delete Line

另请参阅

Cut, 撤消操作和Line Probe。


Delete Terminal

一个菜单项。

用途

使用Delete Terminal通过下述功能删除端：

Input - 用来删除添加到对象中的数据或控制输入端。在选择Input后，从显示的对话框中选择要删除的端。将删除端及与这个端的任何连接。如果两个端的名称完全相同，VEE会根据这些端在列表中出现的顺序删除端。

Output - 用来删除添加到对象中的数据或错误输出端。在选择Output后，从显示的对话框中 选择要删除的端。将删除端及与这个端的任何连接。如果两个端的名称完全相同，VEE会根据这些端在列表中出现的顺序删除端。

备注

只有在对象有可以删除的输入端时，才能使用Input。某些端不能删除。

只有在对象有可以删除的输出端时，才能使用Output。某些端不能删除。

快捷方式

通过把光标放在端视图区域上，然后按CTRL+D，可以迅速删除一个数据端。

位置

在每个对象菜单上：
Delete Terminal [image] Input�

Delete Terminal [image] Output�

另请参阅

Add Terminal, Line Probe, 对象菜单和Properties (对象)。


Delete Variable

删除在执行当前程序时已经创建的变量值的对象。

用途

使用Delete Variable对象按名称删除一个变量，或删除程序中目前设置的所有变量。之前Set Variable对象必须已经在程序内部创建了变量。

Open View参数

By Name - open view为变量名称显示一个字段。名称不分大小写(可以使用小写字母或大写字母)。因此，globalA变量与GLOBALa变量相同。可以作为控制输入添加名称字段。

All Variables - 删除所有变量将删除所有范围的所有声明变量及所有未声明变量。名称字段变成灰色(不能使用)。

备注

如果按名称参考的变量不存在，Delete Variable对象会发生错误。为避免这种错误，可以在Delete Variable对象中添加一个错误输出端。

在已经执行Delete Variable对象时，会删除按名称参考的变量(或所有变量)，就象从未创建这些变量一样。由于变量不存在，以后使用Get Variable对象中的变量时将发生错误。

在不需要时使用Delete Variable对象删除变量可以节约内存，帮助您更好地管理变量。

在Default Preferences中，如果Delete Variables at PreRun启动(默认值)，那么只有在删除所有变量后，才能执行程序。如果Delete Variables at PreRun关闭，那么将不会删除变量，必须认真编程，避免传播无效数据。

如需与影响清空ActiveX参考的编程技术有关的更多信息，请参阅CreateObject内容。

位置

Data [image] Variable [image] Delete Variable

另请参阅

默认首选项, Get Variable, Set Variable, View Variables和Properties (对象)

删除变量和释放ActiveX参考


DeMultiplexer

把输入值指向选定的输出端的对象。

用途

使用DeMultiplexer把输入数据指向某个输出端。激活的输出取决于地址输入的值。

备注

DeMultiplexer有两个输入，一个用于数据输出，一个用于地址值(它决定着传播的输出)。每次在对象运行时，只会传播一个输出。如果地址输入的值不在输出数量范围内[0 [image] (N-1)]，那么会返回一个错误。可以在对象中增加额外的输出。可以删除输出，然后按顺序对后面的输出(如有)重新编号。

位置

Device [image] DeMultiplexer

另请参阅

If/Then/Else, JCT, Properties (Object)和对象菜单


Description

可以从对象菜单存取的获得对象相关信息的项目，或可以从标题栏菜单中存取的获得主程序、User Object或User Function相关信息的项目。

显示一个可以编辑的Rich Text Format (RTF)对话框，其中显示用户提供的信息。有一个默认的演示对话框功能的Description，在打开Description对话框时会显示。为创建自己的默认Description，编辑installdir\templates下的description.rtf。如果希望空白的描述对话框，编辑description.rtf文件，使其为空即可。

用途

带有描述的对象在右上角有一个小的红色三角形。

使用Description存档对象，解释怎样使用对象及为什么使用对象。也可以从标题栏菜单中，使用Description存档整个文件。

为编写描述，点击文本区域，输入描述，也可以从RTF文件中剪切和复制一段描述。在完成时点击OK。

Open View参数

OK - 与程序一起保存描述信息。

Cancel - 取消描述的最新变化，关闭Description窗口。

Insert Template - 在光标位置插入模板文件Description.rtf。您可以编辑模板，保存在%installDir%\Templates中。

Clear All - 清除Description窗口中的所有内容。为恢复被取消的文本，按Cancel，然后重新打开Description窗口。

备注

可以使用常用VEE编辑功能编辑文本区域。

在使用Print All并选中Print All Objects时，或使用Print Objects进行打印时，还会打印该对象的描述。

由于Description是一个RTF对话框，因此可以使用基于RTF的应用程序，创建格式优美的文本，其中可以包括多种字体、颜色、表格、活动的URL等等。

可以打印Description文本，但它总是作为文本打印。

位置

在每个对象菜单上 [image] Description

或

在每个标题栏菜单上 [image] Description

另请参阅

Note Pad, 对象菜单, Create RunTime Version和对象菜单


Dialog Box

一个菜单项。

用途

使用Dialog Box存取下面编制好的对话框对象：

Text Input

Int32 Input

Int64 Input

Real64 Input

Message Box

List Box

File Name Selection

位置

Data [image] Dialog Box

另请参阅

File Name Selection, Int32 Input, List Box, Message Box, Real64 Input, Text Input, 和UserObject

关于内置对话框对象

使用Data Input对话框


Direct I/O

使用事务语句把仪器写入仪器及从仪器读取数据的一个对象。

用途

使用Direct I/O向仪器输出和输入各种编码和格式。

对象菜单

Show Config - 显示仪器配置。

Upload State - 把当前仪器状态上传到学习字符串，并把这种状态与Direct I/O对象的这个特定实例关联起来。它支持能够支持学习字符串的GPIB设备和基于消息的VXI设备。

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

Open View参数

Direct I/O操作：

READ - 使用指定编码和格式从仪器中读取数据。

WRITE - 使用指定编码和格式把数据写入仪器中。

EXECUTE - 对GPIB仪器，发送Selected Device Clear, Go To Local, Remote或Group Execute Trigger命令。对串行仪器，发送Break或Reset。对GPIO仪器，发送Reset。对基于VXI消息的仪器，发送Selected Device Clear, Go To Local, Remote或Trigger命令。

WAIT - 在执行下一项事务前等待的具体秒数。对GPIB仪器或基于VXI消息的仪器，一直等到串行轮询响应与模板的位逻辑AND运算结果为零(ALL CLEAR)或非零(ANY SET)。

仅对GPIO仪器，READ操作允许IOSTATUS，WRITE操作允许IOCTL。

仅对VXI仪器，READ和WRITE操作允许REGISTER:和MEMORY:。WAIT操作还支持一直等到存储器或寄存器偏置中的值AND模板值满足ANYSET, ALL CLEAR或EQUAL。

Direct I/O编码：

TEXT - 以人可读的形式读取所有数据类型。在写入时，VEE数字数据自动转换成文本。

BINARY - 以机器专用的二进制格式写入所有数据类型。

BINBLOCK - 使用IEEE 488.2限定长度码组包头在二进制文件中写入所有VEE数据类型。

在输出结束换行符的仪器中使用BINBLOCK时，选择End byte (LF)，以便VEE将消耗结束换行符。如果仪器没有输出结束换行符，选择No END byte。

CONTAINER - 以独立于平台的文本格式写入所有数据类型。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按CTRL+O会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按CTRL+K。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按CTRL+N或CTRL+P。

控制端可以作为输入，以程序化方式改变设备地址和超时周期。这些事务的超时周期以秒为单位。

位置

I/O [image] Instrument Manager

另请参阅

Advanced I/O, Component Driver, Formula, Instrument Manager, Panel Driver和To/From VXIplug&play

提高I/O性能

使用Direct I/O读取数据

使用Direct I/O对象

编辑事务


Directory Exists

进行测试，查看是否存在指定目录。

Location

System [image] Directory [image] Directory Exists


Do

创建分支点、控制线程执行流程的对象。

用途

使用Do创建一个分支点；先激活连接到数据输出端的对象，然后再激活连接到序列输出端的对象。注意这会强制实施对象运行顺序。

位置

Flow [image] Do

另请参阅

Break, Start, Properties (对象)和对象菜单


Domain Name

检索主机作为会员的域名。

位置

System [image] Environment [image] Domain Name


Drop-Down List

参阅Selection Control。


编辑 UserFunction

一个菜单选项，允许在程序内部编辑本地创建的UserFunction。还可以查看(但不能改变)使用库导入的UserFunction。

用途

使用Edit UserFunction，通过从UserObject的对象菜单中执行Make UserFunction，在程序内部编辑本地创建的UserFunction。如果已经在一个库文件中保存了一系列UserFunction，那么必须打开库文件，才能编辑这些UserFunction。

备注

在选择Edit UserFunction时，会出现一个对话框，列出可以编辑的本地UserFunction。一旦选择一个UserFunction，那么会创建一个窗口，显示一个工作区，其中表明创建UserFunction的原始UserObject的功能。可以象编辑任何UserObject一样编辑这个工作区。在编辑完成时，关闭窗口。在保存文件时，会与文件一起保存编辑的UserFunction。

在编辑UserFunction时，可以使用标题栏上的Panel和Detail图标，在Panel视图和Detail视图之间切换。

在查看使用库导入的UserFunction时，不能改变UserFunction。但是，为协助调试，可以设置断点及打开/图标化/移动对象。这些变化不会保存到库文件中。

快捷方式

从Program Explorer中，双击一个User Function进行编辑。

位置

Edit [image] Edit UserFunction

Call Function的对象菜单 [image] Edit UserFunction

另请参阅

Call, Create UserFunction, Delete Library, Import Library, UserFunction和UserObject。

编辑UserFunction


Ends With

如果给定的字符串的结尾是测试值，那么返回布尔逻辑真。

位置

System [image] String [image] Ends With


Error Output (Object Menu)

Error Output (对象菜单)

在对象中添加一个错误输出端。

用途

使用Error Output，允许程序捕获和处理VEE错误。如果Error端位于一个对象上，且该对象遇到错误，那么将不会显示错误对话框，而是会把错误编号输出到Error端。

如果捕获一个错误，那么将激活错误输出端和序列输出端，在数据输出端上不输出任何数据。

错误输出端输出一个Scalar Int32容器及生成的错误编号值。

备注

几乎所有对象都提供了Error Output。某些对象如Bus I/O Monitor和Note Pad从不会返回错误，因此它们不允许添加错误输出端。

错误输出端输出VEE错误的错误编号。它不输出编号的意义或任何恢复信息。错误信息在Help [image] Contents and Index下的Error Codes主题中提供。

使用errorInfo()，确定使用错误输出端时捕获的最新错误的错误信息。在捕获错误后，执行errorInfo()对象，输出一条记录，其中包含错误对话框中显示的所有信息。

UserObject中的Raise Error对象可以生成由封闭的UserObject的错误端捕获的错误。

UserObject的错误端捕获UserObject中任何对象的任何错误。

位置

在每个对象菜单上 [image] Add Terminal [image] Error Output

另请参阅

Add Terminal, Delete Terminal, errorInfo, 对象菜单, Raise Error和UserObject。

捕获错误


Execute Program

启动MS-DOS或Windows流程的对象。

用途

使用Execute Program启动MS-DOS或Windows流程，包括可执行程序、操作系统命令或批处理文件。PC Execute对象从执行的程序中返回一个退出代码。如果Wait for prog exit设置为No，那么退出代码输出端不传播任何返回值。

Open View参数

Run Style - 如果要执行的程序在窗口中运行，那么Run Style会指定窗口样式：

Normal在标准窗口中运行程序。

Minimized在最小化为图标的窗口中运行程序。

Maximized在最大化的窗口中运行程序。

Wait for prog exit - 如果Wait for prog exit设置成Yes，那么VEE运行外部流程，等到外部流程结束，然后激活Execute Program对象的序列输出端。

如果Wait for prog exit设置成No，VEE运行外部流程，但会激活Execute Program对象的序列输出端，而不会等待外部流程结束。

Prog with params - 要运行的程序。下面的范例说明了可以在这个字段输入的内容：

COMMAND.COM /C DIR C:\TMP (在Windows 98上)
CMD /C DIR C:\TMP (在Windows NT上)

PBRUSH

C:\MYDIR\MYFILE.BAT

"\Program Files\Windows Media Player\mplayer2.exe" "\WINNT\Media\Mozart's Symphony No. 40.rmi"

www.favorite_site.org/index.htm

包含空格的路径名称必须带上引号，如倒数第二个范例。

在最后一个范例中，已知后缀".htm"会启动网络浏览器，加载指定URL。如果浏览器已经运行，它会加载指定URL。

Working directory - 指向一个目录，在这个目录中，要执行的程序可以找到所需的文件。因此，如果想在c:\progs\cprog1目录下使用makefile运行程序nmake，使用的参数如下：

在Prog with params:中输入nmake。

在Working directory:中输入c:\progs\cprog1。

备注

Execute Program不基于事务。不能使用事务与外部流程通信。

如果在PATH变量中已经包括相应的路径，那么在Prog with params字段中不必包括路径。对Windows 98，设置AUTOEXEC.BAT文件中的PATH变量，对Windows NT，设置User Environment Variables (Main / Control Panel / System)。

为执行.EXE文件，在Prog with params字段中不必包括后缀。但是，对.COM和.BAT文件，则必须包括后缀。

如果Prog with params中指定的操作没有启动新的程序实例，那么Execute对象不会等待程序退出，即使Wait for prog exit设置成Yes。在这种情况下，退出代码端不会传播退出代码。这种行为的一个范例是在网络浏览器已经运行时"执行"一个URL。在运行的浏览器中会打开指定的URL，VEE不会等到最后关闭浏览器。这种行为的其它常见范例是把文件传送到现有的文字处理软件或电子表格编辑软件的实例中。注意，外部应用程序(浏览器、电子表格等)的设计人员在这些情况下决定是启动新实例还是使用已有实例。

Execute对象使用ShellExecuteEx() Win32 API。

位置

I/O [image] Execute Program

另请参阅

To/From DDE和Properties (对象)


Execution Window

View菜单上的一个选项。

用途

如果Main UserObject有一个面板，且在Main's Properties Window上没有启用ShowPanelOnExecute，那么在运行VEE程序时，该面板将出现在Execution Window内部。这可以同时查看Main对象窗口及Execution Window。另外，Execution Window会表明可执行程序在VEE Pro RunTime中运行时的外观。

可以移动、调整、最大化、最小化或把Execution Window移动到窗口堆栈底部，但不能关闭。

可以从Main窗口上的对象菜单中设置出现在Execution Window标题栏中的名称。从Main对象菜单中，选择Properties，然后改变PopUpPanelTitle。

位置

View [image] Execution Window

另请参阅

Add To Panel, Main和创建RunTime版本。

关于Agilent VEE Pro RunTime产品。


Exit

退出VEE。

用途

使用Exit结束与VEE的这个工作会话。

备注

如果在选择Exit时还没有保存程序改动，系统会提示保存这些改动。

在程序运行时不允许执行Exit操作。如果想退出正在运行的程序，应使用Stop对象。

快捷方式

按CTRL+E退出。在VEE窗口左上角的窗口控制按钮上，双击按钮，或单击按钮，从菜单中选择Close。

位置

File [image] Exit

另请参阅

Raise Error, Exit Thread, Exit UserObject, New, Open和Stop。


Exit Thread

停止执行线程的对象。

用途

使用Exit Thread结束执行独立线程。Exit Thread只会停止执行其所在的线程。

位置

Flow [image] Exit Thread

另请参阅

Break, Raise Error, Exit UserObject, Start, Stop, Properties (对象)和对象菜单

停止VEE程序


Exit UserObject

停止执行UserObject的对象。

用途

使用Exit UserObject停止执行UserObject中的所有线程，开始执行程序中UserObject后面的下一个对象。通过激活这些输出，在遇到Exit UserObject前发送到UserObjects输出端的任何数据都会传送到相应的后续对象上。

使用Exit UserObject提前退出UserObject。

位置

Flow [image] Exit UserObject

另请参阅

Create UserObject, Raise Error, Exit Thread, Start, Stop, UserObject和Properties (对象)

提前退出UserObject


File Exists?

检查指定路径上是否存在文件。

位置

System [image] File [image] File Exists?


File Name Selection

显示一个弹出对话框、向用户显示文件列表的对象。

用途

使用File Name Selection向用户显示磁盘驱动器上的文件列表。用户作出应答，在对话框上选择其中一个选项。File Name Selection特别适合以交互方式请求To File和From File对象中使用的文件名。

在弹出对话框中，当选择文件、按OK按钮时，File Name输出端会输出选项。当按Cancel按钮时，Cancel输出端会输出1。

Open View

Prompt/Label - 字符串提示用户选择一个文件名。可以作为数据输入添加这个参数。默认值为Enter File Name:

Initial Directory - File Name Selection弹出对话框中一开始显示的目录。可以作为数据输入添加这个参数。默认值为启动VEE使用的目录。

Initial File/Wildcard - 允许把一个文件名设置为默认值，或使用通配符过滤文件名集合。可以作为数据输入添加这个参数。默认值为*.*。

选择File For: Reading | Writing - 在选择Reading时，用户必须从弹出对话框中选择一个已有的文件名。如果用户在弹出对话框中输入一个不存在的文件名，按OK，那么系统会提示输入已有的文件名。

在选择Writing时，用户可以输入一个新文件名，或从弹出对话框中选择一个已有的文件名。如果选择已有的文件名，那么会弹出一个警告对话框，询问是否可以覆盖文件。如果用户按Yes，那么文件名输出到File Name输出端。如果用户按No，用户会被返回File Name Selection对话框，选择另一个文件名。可以作为数据输入添加这个参数。

备注

File Name Selection对话框的弹出位置不能选择。这个对话框总是出现在VEE窗口左上角附近。

只使用键盘应答弹出对话框：在对话框弹出时，使用Enter键和Esc键。也可以使用Tab键，在按钮和选择区域之间移动；使用箭头键在不同选项之间移动，使用Space条选择文件名。

当正在运行程序时，只会显示弹出对话框。在显示弹出对话框时，整个程序会暂停执行，在对话框关闭时继续执行。

输入端"Dialog Mode"接受两种文本字符串：Writing或Reading。这些字符串区分大小写。

位置

Data [image] Dialog Box [image] File Name Selection

另请参阅

From File, Int32 Input, List Box, Message Box, Real64 Input, Text Input, To File, UserObject和Properties (对象)

以程序化方式选择一个文件名


Fill Bar

使用色条以图形方式显示Scalar数字值的对象。

用途

使用Fill Bar在模拟标度上用色条及可选的数字字段显示一个数字值。

Open View

通过点击当前值，输入一个新值，可以在对象的open view上设置Fill Bar的最小值和最大值。它自动计算和显示Tic号及其标签。最小值必须小于最大值。

还可以作为控制输入添加这些值。

属性

Orientation - 选择怎样显示Fill Bar。默认值为Vertical。

 ShowDigitalDisplay - 在这一属性为True时，在对象Open View的底部会显示输入值的数字画面。在这一属性为False时，不显示数字画面，对象运行速度会更快。默认值为True。

ShowTics - 控制是否显示标度的tic号和标签。默认值为True。

 Logarithmic - 在启动时，把标度从线性变成对数。默认值为False。

 Label Spacing - 控制在哪个tic号上标上标度值。默认值为Every Other Tic。

HighColor - 指定最高范围使用的颜色 (即大于High Limit)。

High Limit - 定义最高范围的数字下限。这个值必须大于等于Low Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

 MidColor - 指定中间范围使用的颜色 (即小于等于High Limit，且大于Low Limit)。

 Low Limit - 定义最低范围的数字上限。这个值必须小于等于High Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

 LowColor - 指定最低范围使用的颜色(即小于等于Low Limit)。

NumberFormat - 如果Global Format关闭，那么为这个对象上显示的实数指定数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Wed 01/Jan/2003 17:01:38)。 默认值为Standard。

备注

输入数据必须是Scalar，并能够转换成Real64 (Complex, PComplex, Spectrum和Coord必须先"拆散"。)

Low Limit必须小于High Limit。

如果只想使用两个颜色范围，把Low Limit设置成等于High Limit。

如果只想使用一种颜色，把Low Color、 Mid Color和High Color设置成相同的颜色。

快捷方式

为迅速改变Fill Bar的方向，只需把它调整到所需的形状。它会自动改变方向。

位置

Display [image] Indicator [image] Fill Bar

另请参阅

AlphaNumeric, Color Alarm, Logging AlphaNumeric, Meter, Tank和Thermometer。

显示数据的模拟画面


Find

这个菜单选项提供了一个对话框，在VEE程序中搜索文本字符串和特定对象属性。

用途

Find功能提供了一种方便的方式，可以在VEE 程序中执行文本字符串搜索。可以简便地在程序对象内部定位特定文本，同时可以搜索某些其它对象属性，如对象的标题栏颜色或背景颜色。

但是Find不搜索下述内容：

面板或面板上的对象

线或线值

端值

对话框信息

Find对话框包括一个单行文本字段，用来输入可以搜索的文本字符串，并为配置搜索标准提供了多个选项。对话框功能如下：

Find What: - 在这一行中输入要搜索的文本字符串。如果这一行留为空，那么搜索会与任何及所有文本相匹配。

Search in: - 允许把文本搜索范围只限于VEE程序的某些段。默认值为搜索Entire Program。

Find - Find按钮使用用户在对话框的General栏和Advanced栏指定的搜索参数开始搜索文本。

Stop - Stop按钮暂停搜索过程。将保留搜索流程停止前找到的任何匹配。

Help - Help按钮为Find对话框调用联机帮助信息。

Status Bar位于Find对话框的底部。Status Bar指明搜索过程的状态。在发现新的匹配结果时，将更新Status Bar中的信息。

属性

General栏

General选项栏为限定通用文本搜索提供了一套限制。选项包括：

Match Case - 如果复选这一项，那么文本必须与用户指定的搜索字符串完全匹配。默认值为关闭。

Find all matches on each Object - 默认值为关闭。

Search nested UserObjects - 默认值为启动。

Show occurrences that - 对搜索进一步作出下面的限制：

Contain search text - 默认值为启动。

Exactly match search text - 默认值为关闭。

Begin with search text - 默认值为关闭。

End with search text - 默认值为关闭。

Advanced栏：

点击Advanced栏会在Find对话框中调出一个新的选项集。Advanced栏上的选项为基于对象类型和对象特点限制搜索范围提供了一种方式。Advanced栏上的Property和Value按钮结合使用，定义搜索标准。一旦已经定义了Property按钮，那么还必须定义其相关的Value按钮。

Property和Value - Property列有三个按钮，Value列有三个按钮。点击Property列中的按钮会调出一个Property Name对话框，其中列出具体搜索属性的名称。对选择的每个Property Name，必须点击相邻的Value按钮，选择一个值。Property和Value组合的配对方式如下：

Object Type (默认值) - 在选择这个Property Name时，Value按钮默认使用All Types。点击Value按钮会调出Select Object Type(s)对话框。这个对话框列出能够在VEE工作空间中打开对象的所有VEE函数。如需了解提供的每个对象类型，请参阅Help中的具体对象类型部分。

注意在Select Object Type(s)对话框中，在默认状态下预先选择所有对象类型。为只选择一个对象类型或多个对象类型，点击对话框上的Clear All按钮，然后按鼠标左键，选择所需的具体对象类型。通过点击Clear All按钮，可以反选任何和所有选中的对象类型。还可以把Property按钮指配给Object Type之外的Property Name。下面介绍了部分属性名称范例及相关Value：

- Description - 有效值是用户在Value字段中输入的任何用户自定义的Description。
- Device name - 有效值是用户在Value字段中输入的任何用户自定义的Device name。
- Popup Panel Title Background Color - 有效值是来自VEE颜色地图的任何颜色。这个值的默认颜色是用户在Default Preferences对话框中指定的颜色。点击Value字段将打开Select Color for Object Title对话框。用户可以使用鼠标左键，从这个对话框的调色板中选择任何颜色。

Reset - Reset按钮把第一个Property按钮默认提供给Object Type，把第一个Value按钮默认提供给All Types。将清除任何选中的选项在Advanced栏上的其余两对Property和Value按钮。

快捷方式

按Ctrl+F打开Find对话框。

为自动限制范围，在某个上下文上按鼠标右键，如UserFunction或UserObject，从Program Explorer中打开Find。

位置

Edit [image] Find...

另请参阅

默认首选项和Find Results

通过搜索属性查找对象

通过搜索文本查找对象


Find Results

显示一个对话框，列出最后一次Find搜索的结果。

用途

使用Find Results显示一个对话框，列出最后一次执行Find文本搜索的结果。如果还没有执行Find文本搜索，那么Find Results菜单项将变成灰色(不能选择)。

在Find对话框上点击Find按钮时，还会显示Find Results对话框。

对话框信息

Find Results对话框的标题栏提供了Find搜索摘要信息，包括找到多少个匹配项目以及VEE对象总数。下面的标题栏上列出了多个控制按钮、使用的具体搜索文本及搜索范围(Entire Program等等)。

Control buttons - 控制按钮为查看Find Results提供了快捷方式。控制按钮包括：

Keep Visible - 一种切换功能，控制着在查看匹配后是否仍能看到对话框。

Display previous item - 显示Find Results列表中上一个匹配项目。

Display next item - 显示Find Results列表中下一个匹配项目。

Find - 恢复Find对话框。

Find: - 这个窗口显示搜索的具体文本，用引号引起来。

Scope: - 这个窗口显示搜索范围。默认值为整个程序。

Object Location - 指向发现匹配的UserFunction或UserObject的路径名称。在嵌套VEE UserObject中，这是每个嵌套对象的路径。

Object Title - 找到文本的对象标题。这个标题通过Object Properties设置。

Object Type - 找到文本的VEE对象类型(如Formula对象, Constant对象, 等等)。

Text Found - 在对象中某个地方找到的文本。这个文本可以位于对象中或位于对象本身内部某个地方。

快捷方式

按Ctrl+R打开Find Results对话框。

通过点击栏的标题，还可以改变对话框中栏的分类顺序。

位置

Edit [image] Find Results

另请参阅

Find

查看Find操作的结果


For Count

激活数据输出端指定次数的对象。

用途

使用For Count执行子线程指定迭代数量。For Count的输出可以作为子线程中后续对象的值使用。

Open View参数

在输入字段中或作为输入，输入迭代数量。

备注

For Count输出值是一个 0到n-1范围的Real64标量，其中n是指定的数量值。对没有映射的数组对象的所有存取都基于零，因此For Count特别适合在要求时横贯这些对象的维数。For Count值是维度大小。

如果指定的For Count值是零或负数，那么不激活输出，而是激活序列输出端。

For Count输出包含的线程将继续执行，直到发生下面一种情况：

所有对象已经操作。子线程被去活，迭代计数器递增。如果数量值小于指定数量，那么通过使用新的迭代值重新启动For Count，将重新激活子线程。

Break对象操作。子线程被去活，序列输出端被激活。注意保持在For Count输出上的值是遇到Break时出现的相同值。

Next对象操作。子线程被去活，迭代计数器被复位。如果数量值小于指定数量，那么通过使用新的迭代值重新启动Count输出，将重新激活子线程，并继续正常执行子线程。如果迭代计数器达到Count值，那么将激活序列输出端。

在For Count对象上包含的子线程完成迭代时，在前一个迭代中发送的所有数据容器都会在下一个迭代之前失效。这可以防止当前迭代中重用来自上一个迭代的"旧"数据。但是，如果在迭代子线程内部存在流程分支，那么在每次迭代时某些对象可能不能执行。因此，这些对象发送的数据容器可能会在其它对象能够在数据上执行前失效。在这种情况下，为获得希望的传播，使用Sample & Hold对象。

位置

Flow [image] Repeat [image] For Count

另请参阅

Break, For Log Range, For Range, Get Values, Next, On Cycle, Sample & Hold, Set Values, Until Break, Properties和对象菜单

(对象)

循环部分VEE程序


For Each

For Each语句迭代多个数组或集合。

用途

对VEE数组支持，For Each语句处理任何维数(1-10)、任何维度大小和任何类型的任何VEE数组。它在所有ExecModes中工作。

对COM支持，For Each语句处理可以枚举或循环的任何COM (ActiveX)对象。这类对象通常有"Count"属性和"Item()"方法，表明它是一个集合，但严格地讲，并不要求这一属性和方法。COM/ActiveX用于ExecModes 5和更高模式下。

对.NET支持，For Each语句处理可以枚举或循环的处理任何.NET对象，如StringCollection。这类对象通常有"Count"属性和 "Item()"方法，表明它是一个集合，但严格地讲，并不要求这一属性和方法。.NET对象用于ExecModes 6&7和更高模式下。

范例

注意在范例中，有三个对象使用For Count方法处理一维数组，而另一方法只需要一个For Each对象。当然，在数组中增加更多的维度时，For Count方法会变得复杂得多，而For Each方法则可以在不作任何改变的情况下处理最多十个维度。

For Each对象不能用于记录。

位置

Flow [image] Repeat [image] For Each


For Log Range

激活数据输出端指定次数的对象。

用途

使用For Log Range执行子线程指定迭代数量。使用For Log Range指定开头、结尾和增量，生成沿着log 10标度均匀分布的输出值。

打开视图参数

From - 迭代循环开始的值

Thru - 迭代循环结束的值。在迭代器的值大于等于Thru值时，循环结束。

/Dec - 确定迭代器发出的值的间隔。第0个值是From，第n个值是From*exp10(n/(/Dec))。

From, Thru和/Dec可以添加为输入。

备注

For Log Range输出值是范围从From到Thru的Real64标量。

For Log Range输出包含的线程将继续执行，直到发生下面一种情况：

所有对象已经操作。子线程被去活，迭代计数器递增/Dec值。如果数量值小于Thru值，那么子线程会使用新的迭代值重新激活For Log Range输出。

Break对象操作。子线程被去活，序列输出端被激活。注意保持在For Log Range输出上的值是遇到Break时出现的相同值。

Next对象操作。子线程被去活，迭代计数器递增/Dec值。如果数量值小于Thru值，那么子线程会使用新的迭代值重新激活Data 输出，并继续正常执行子线程。如果迭代计数器达到或超过Thru值，那么激活序列输出端。如果超过计数器，那么Data输出上保留的值是超出范围的值。

在添加任何可选的数据输入时，它们不一定与提供值的字段名称相一致。一定要知道正在输入哪些值以及相关的端。(在必要时可以使用Show Terminals。)

如果Thru值小于From值，/Dec必须为负，否则循环不执行。

如果/Dec = 0，那么循环会无限次迭代，或直到子线程中遇到一个Break对象。

如果From等于Thru，那么循环会执行一次。

For Log Range对象上包含的子线程完成迭代时，在前一个迭代中发送的所有数据容器都会在下一个迭代之前失效。这可以防止当前迭代中重用来自上一个迭代的"旧"数据。但是，如果在迭代子线程内部存在流程分支，那么在每次迭代时某些对象可能不能执行。因此，这些对象发送的数据容器可能会在其它对象能够在数据上执行前失效。在这种情况下，为获得希望的传播，使用Sample & Hold对象。

位置

Flow [image] Repeat [image] For Log Range

另请参阅

Break, For Count, For Range, Next, On Cycle, Sample & Hold, Properties (Object), Until Break, Properties (对象)和对象菜单

循环部分VEE程序


For Range

激活数据输出指定次数的对象。

用途

使用For Range执行子线程开始值、结束值和增量指定的迭代数量。使用For Range生成在From值和Thru值之间均匀分布的值。

Open View参数

From - 迭代循环开始的值

Thru - 迭代循环结束的值。在迭代器的值大于等于Thru值时，循环结束。

Step - 迭代器当前值和下一个值之间的增量值。

数据输入上提供了所有open view参数。

备注

For Range输出值是范围从From值到Thru值的Real64标量。

For Range输出包含的线程将继续执行，直到发生下面一种情况：

所有对象已经操作。子线程被去活，迭代计数器递增步进值。如果数量值小于Thru值，那么会使用新的迭代值重新启动For Range输出，来重新激活子线程。

Break对象操作。子线程被去活，序列输出端被激活。注意保持在For Range输出上的值是遇到Break时出现的相同值。

Next对象操作。子线程被去活，迭代计数器递增Step值。如果数量值小于指定的Thru，那么会使用新的迭代值重新启动Data 输出来重新激活子线程，并继续正常执行子线程。如果迭代计数器已经达到Thru值，那么激活序列输出端。

在添加任何可选的数据输入时，它们不一定与提供值的字段名称相一致。一定要知道正在输入哪些值以及相关的端。(在必要时可以使用Show Terminals。)

如果Thru值小于From值，Step必须为负，否则不能激活输出。

如果Step = 0，那么循环会无限次迭代，或直到子线程中遇到一个Break对象。

如果From等于Thru，那么循环会执行一次。

For Range对象上包含的子线程完成迭代时，在前一个迭代中发送的所有数据容器都会在下一个迭代之前失效。这可以防止当前迭代中重用来自上一个迭代的"旧"数据。但是，如果在迭代子线程内部存在流程分支，那么在每次迭代时某些对象可能不能执行。因此，这些对象发送的数据容器可能会在其它对象能够在数据上执行前失效。在这种情况下，为获得希望的传播，使用Sample & Hold对象。

位置

Flow [image] Repeat [image] For Range

另请参阅

Break, For Count, For Log Range, Next, On Cycle, Sample & Hold, Properties (对象), Until Break, Properties (对象)和对象菜单

循环部分VEE程序


From

一个菜单项。

用途

使用From存储作为I/O操作源的下述对象：

File

DataSet

String

位置

I/O [image] From

另请参阅

To


From DataSet

允许用户从数据集中有条件地检索记录的对象。

用途

使用From DataSet从数据集中查找和检索满足逻辑表达式公式限制的一条记录或所有记录。如果检索的记录满足查询表达式限制，那么Rec输出端会输出记录。

Formula字段中的默认表达式是1, (true)。因此，将输出找到的第一条记录(One)或数据集中的所有记录(All)。

如果想测试记录字段中的值，必须对字段 A采用形式Rec.A，对字段 B采用形式Rec.B，依此类推。例如，表达式：

Rec.A<10

测试每条记录，查看字段A是否小于10。如果指定Get records: One，那么Rec上将输出数据集中字段 A小于10的第一条记录。如果指定Get records: All，那么将输出字段 A小于 10的所有记录。注意将输出整个记录。

可以添加下面的控制端：

File Name - 这个控制端允许用户改变读取记录的文件名称。

Rewind - 这个控制端"倒带"From DataSet文件，以便能够再从文件开头读取文件。

Formula - 这个控制端允许用户改变公式，用来确定设备将输出从文件中读取的哪些记录。

Close - 这个控制端关闭文件。

Open View参数

From DataSet - 点击名称字段，显示一个对话框，然后选择包含DataSet的文件名。

Get Records - 选择One或All：

如果选择One，那么将输出数据集中找到的满足选择公式限制的第一条记录，From DataSet将停止执行。在选择One时，输出形状总是标量。

如果选择All，那么将输出数据集中找到的满足选择公式限制的所有记录。输出形状总是数组。在到达文件末尾时，From DataSet将停止执行。

Search Specifier - 输入一个数学表达式，测试数据集中的记录。将输出满足表达式的第一个One或All记录，具体取决于Get Records选项。默认表达式是1 (true)。

备注

可以在条件公式中使用任何有效的数学表达式。可以与Formula对象一样，添加在表达式中使用的额外输入。如果想测试记录字段中的值，可以把它们表达为Rec.A, Rec.B, 依此类推。表达式可能会相当复杂，例如：

Rec.A > Rec.B AND Rec.C < 2.3

必须遵守普通约定，确定条件表达式为True或False：

对任何关系测试(如两个运算对象是否相等)，如果一个运算对象是数组，另一个运算对象必须是标量或相同大小和形状的数组。如果第一个运算对象等于第二个运算对象，那么结果为True，否则结果为False。

如果两个运算对象的类型都是Coord，那么其所有独立变量和相关变量都完全匹配，结果才会为True。如果独立变量不匹配，那么会返回错误。Complex, PComplex和Spectrum运算对象的两个部分必须都匹配，运算结果才会返回True。Enums转换成Text进行比较。

运算对象的所有值必须都相等，数组运算才会返回True。

您可能想从文件中调入一个DataSet (由记录组成的数组)，进行编辑，然后把它保存回到文件。这可以使用From DataSet、采用Default Value输入端的Record Constant及To DataSet实现。详情请参阅Record Constant。

可以在这个对象中添加一个EOF输出端。在对象执行，且没有记录满足查询表达式限制时，或已经位于DataSet末尾时，将启动这个端。否则，在发生这种情况时，将得到End of file with no Data Found错误。

如果有多个From DataSet对象读取同一个文件，它们将共享文件指针。也就是说，所有对象顺序读取文件，而不管有多少个对象正在读取文件。详情请参阅From File。

位置

I/O [image] From [image] DataSet

另请参阅

Build Record, Formula, Record Constant, To DataSet, UnBuild Record, Properties (对象)和对象菜单

从文件中读取数据


From File

使用I/O事务从文件中读取数据的对象。

用途

使用From File对象读取各种文件编码和格式。From File特别适合导入其它软件包生成的数据文件。

在多个From File对象指向同一个磁盘文件时，会对所有此类对象保持一个读取指针，即使它们处于不同的线程或不同的上下文中。这意味着使用同一文件的另一个From File对象不能重新读取From File对象，除非在文件上已经进行REWIND操作。 在 PreRun后该文件第一个From File对象运行时，将打开文件，把文件指针复位到文件开头(默示的REWIND)。在程序停止运行时，将关闭所有文件。

From File操作：

READ - 使用指定编码和格式从文件中读取数据。

EXECUTE - REWIND把文件的读取指针重新定位到文件开头，而不会擦除文件内容。CLOSE会关闭打开的文件。DELETE会删除文件。

WAIT - 在执行下一个事务前等待指定的秒数。

From File编码：

TEXT - 读取VEE或其它软件包编写的ASCII文件。

BINARY - 以特定机器二进制格式读取所有数据类型。

BINBLOCK - 从带有IEEE 488.2一定长度码组包头的二进制文件中读取所有VEE数据类型。

CONTAINER - 以特定机器文本格式读取所有数据类型。

Open View参数

Open View为数据文件名提供一个字段，后面跟着可用的事务列表。数据文件名可以添加为控制输入。

Open View显示执行的文件事务列表。

对象菜单

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Print Trans - 打印详细对话框，描述目前高亮度显示的事务。

备注

可以使用Add Data Output添加EOF (文件结束)。EOF是专用的输出端，在某个事务企图读取End of File之后的数据时与空容器一起传播。在检测到End of File条件，且激活EOF输出时，将不会激活其它数据输出，即使它们包含新读取的数据。

如果检测到EOF，且没有EOF输出端，那么会返回一个错误。

为读取文件中的所有数据，使用READ ... ARRAY TO END:事务。

快捷方式

为迅速插入一个事务，把光标放在事务上。按CTRL+O会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按CTRL+K。

为从"kill"缓冲器中粘贴一个事务，按CTRL+Y。

为迅速移到下一个事务或上一个事务，分别按CTRL+N或CTRL+P。

位置

I/O [image] From [image] File

另请参阅

To File, 从文件中读取数据, Properties (对象)和对象菜单


From String

使用事务从字符串中读取数据的对象。

用途

使用From String从字符串的文本数据中读取各种编码和格式。

如果一维Text数组传送到AString输入，From String事务的工作方式将与使用From File对象从文件中读取这些文本行的方式相同。也就是说，Text数组将作为在每个字符串要素之间使用换行符的单个文本流处理。

从字符串操作中：

READ - 使用指定编码和格式读取数据。

WAIT - 在执行下一个事务前等待指定秒数。

从字符串编码中：

TEXT - 从AString输入中读取所有数据类型。

CONTAINER - 从VEE特定文本格式中读取所有数据类型。

Open View参数

Open View显示要执行的事务列表。

对象菜单

Add Trans - 在列表最后添加一个事务。

Insert Trans - 在当前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)当前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把当前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴此前已经"剪切"或"复制"的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。.

备注

From String为了解READ TEXT事务工作方式提供了有效的调试工具。把一个Text Constant对象连接到标为AString的From String输入端上，把Logging AlphaNumeric显示画面连接到From String输出端上，立即查看结果。最好还应解析仪器返回的字符串。

快捷方式

为迅速插入一个事务，把光标放在一个事务上。按CTRL+O，在放置光标的事务上插入一个事务。

为迅速删除("取消")一个事务，把光标放在该事务上，按CTRL+K。

为从"取消"缓冲器粘贴一个事务，按CTRL+Y。

为迅速移动到下一个或前一个事务，分别按CTRL+N或CTRL+P。

位置

I/O [image] From [image] String

另请参阅

From, From File, To String, Properties (对象)和对象菜单

把字符串转换成数字


Function & Object Browser

用来存取数学函数和逻辑函数的Device菜单项；及ActiveX对象。

用途

使用Function & Object Browser存取Function & Object Browser。从浏览器可以选择：

Operators

Built-in Functions

MATLAB Functions

Local User Functions

Imported User Functions

Remote User Functions

Compiled Functions

ActiveX Objects

.NET/CLR Objects

VEE Objects

Instruments

备注

Function & Object Browser 对话框包含四个或五个字段。在选择ActiveX Objects时，对象会变化。

Type: - 在这个字段中选择一个项目，显示其它字段中的相关项目。Operators和Built-in Functions与VEE一起提供。Local, Imported和Remote User Functions和Compiled Functions由用户创建。选择ActiveX Objects会把Category字段划分到Library字段和Class字段中。选择.NET/CLR Objects会把Category字段划分到 Assembly, Namespace和Type字段中。

Category: - <All>包含选定Type的所有函数。其它Category项目会把提供的函数划分成更小的组。

Library: - 在Type设置成ActiveX Objects时与Class字段一起出现。如果已经在Device [image] ActiveX Automation References或ActiveX Control References中选择了ActiveX automation或control类型库，ActiveX类型库名称会出现在Library字段中。在Library和Class字段中选择名称，查看为ActiveX对象提供的属性、方法和事件。

Class: - 在Type设置成ActiveX Objects时与Library字段一起出现。Class字段中出现的名称是Library字段中高亮度显示的ActiveX类型库中包含的类。选择一个类名称，查看为ActiveX对象提供的属性、方法和事件。

Assembly: - 在选择.NET/CLR Object时出现。组件是.NET应用可以重用、可以改变版本的自我描述构件。Assembly是.NET Framework的基本构件。在已经从Device [image] .NET Assembly References中选择组件时，组件会出现在Assembly字段中。

Namespace: - 在选择.NET/CLR Object时出现。为查看Namespace字段中的名字空间，必须已经选择至少一个有相关名字空间的Assembly。从Namespace字段中选择名字空间，查看该名字空间内提供的部分成员列表。

Member: - 如果Operators或任何函数名称在Type中高亮度显示，那么这会列出选定的Category中提供的运算符和函数名称。对大于提供的空间的列表，将提供一个滚动条。为从这个列表中获得放到程序中的运算符或函数，点击Member名称，然后点击Create Formula/Create Call，或双击名称。

如果ActiveX Objects在Type中高亮度显示，Member列表会包含与高亮度显示的Library和Class名称有关的ActiveX对象使用的属性、方法和事件。为在程序中为属性和方法创建公式，点击Member名称，然后点击Create Formula，或双击名称。

如果.NET/CLR在Type中高亮度显示，那么Member列表会包含Type中选择的.NET/CLR对象使用的构造器、属性、方法和计数器。

不能从事件名称中创建任何东西。如果想为ActiveX automation对象创建事件处理器，使用Declare Variable声称类型对象的变量，启用其事件，然后使用对象菜单中的Create Event Handler。如果想为ActiveX控件创建事件处理器，必须先在程序中添加控件(Device [image] ActiveX Controls)，然后使用对象菜单中的Create Event Handler。

Description Field - 这是位于对话框底部的大型字段。对内置函数，VEE为高亮度显示的函数提供了一个描述字符串。对本地用户函数、导入的用户函数和远程用户函数，VEE显示高亮度显示的函数的Show Description对话框的内容。对ActiveX对象，VEE显示公式语法及参数。

如需与Member列表中任何名称有关的其它信息，高亮度显示一个名称，点击Help。VEE帮助中提供了与Operators和Built-in Functions有关的信息。如果厂商为其提供了联机帮助，那么还可以使用与ActiveX Members有关的信息。

位置

Device [image] Function & Object Browser

另请参阅

ActiveX Automation References, ActiveX Control Host, ActiveX Control References, ActiveX Controls, Assignment, Call, Declare Variable, Delete Library, Edit UserFunction, Import Library, Miscellaneous Operators和UserFunction。

使用数学运算符和函数


Function Generator

输出Waveform的对象。

用途

使用Function Generator生成您自己的指标的Waveform。

Properties

ErrorOnAliasing - 求解确定Num Points除以Time Span (相同频率)是否小于指定频率的两倍。如果是，那么会返回错误。这一求解的目的是确定生成的点是否准确地表示生成的函数。选中的对话框会生成精确的点表示。默认值为启动。

Open View参数

必须从open view中设置所有下述参数，或把这些参数添加为数据输入。

Function - 波形的形状(Sine, Square, Triangle等等)。默认值为Cosine。

Frequency - 波形的频率，单位为Hz。如果Function设置为DcOnly，那么忽略这个参数。默认值为200 Hertz.

Amplitude - 在添加任何dcOffset前用线性单位表示的最大值和最小值的绝对值。默认值为1。

dcOffset - 波形偏置(上移或下移的数量)。默认值为0。

Phase Units - 度(Deg), 弧度(Rad)或梯度(Grad)。Phase Units不考虑相位值的当前Trig Mode。默认值为Deg。

Phase - 波形位移的周期部分。对正的相位值，波形向负时间移动。在Function设置为DcOnly时，忽略Phase。默认值为0。

Time Span - 波形的时长(秒)。默认值为20ms。

Num Points - 波形中的点数。波形中各点之间的时间是Time Span/Num Points。Num Points必须为正。默认值为256.

备注

点数与取样间隔相同。每个点位于取样间隔开头。

位置

Device [image] Virtual Source [image] Function Generator

另请参阅

Build Arb Waveform, Comparator, Noise Generator, Pulse Generator和对象菜单


Gate

在序列输入端激活时把输入数据传送到数据输出端的对象。

用途

使用Gate保持容器，直到发生另一项操作(及激活序列输入端)。

备注

如果没有连接序列输入端，那么没有"触发抑制"效应。因此，在数据输入端激活时，Gate把数据从数据输入端传送到数据输出端。

不存储流入Gate的数据；在序列输入端激活时，数据输入端上的容器是容器输出。

位置

Flow [image] Gate

另请参阅

DeMultiplexer, JCT, Properties (对象)和对象菜单

在超时时输出一个值


Get Current Directory

在主机上检索当前目录。

位置

System [image] Directory [image] Get Current Directory


Get Directory Name

检索提供的路径的目录名称。

位置

System [image] Path [image] Get Directory Name


Get Extension

检索文件名的扩展名。例如，文件test1.xls将返回扩展名xls。

位置

System [image] Path [image] Get Extension


Get Field

允许用户拆除记录、恢复其中一个字段或子字段的对象。

用途

使用Get Field提取记录的一个字段或子字段。Get Field对象只是一个使用输入端Rec和表达式Rec.A初始化的Formula对象。使用"句点"语法，指定想从记录输入中提取的字段。例如，Rec.A从Rec记录输入中提取A字段。

Open View参数

Formula field (没有标签) - 默认值是Rec.A。可以输入Formula对象中允许的任何数学公式，但通常应使用A.B句点语法，从记录中提取一个字段。可以添加一个Formula 控制输入。

备注

Get Field对象实际上是使用Rec 输入和表达式Rec.A初始化的一个Formula对象。在Formula对象中使用的Get Field中，可以使用任何表达式，但为提取一个字段，则需要使用"句点"语法，如Rec.A或A.B.C。

所有Formula对象都全面支持 Get Field中的A.B句点语法，包括Formula, If/Then/Else, Get Values, Set Field及所有事务装置(To File, To String等)。

注意Get Field, UnBuild Record和SubRecord对象之间的区别。

Get Field对象的工作方式与Formula对象类似，它使用句点语法(A.B)拆除记录。注意通过使用表达式，如A.B.C，Get Field允许用一个步骤拆除多个记录组成的记录。这一流程要求两个UnBuild Record对象。

UnBuild Record对象为由输入记录字段组成的Name List和Type List提供输出。UnBuild Record对象的其它(可选的)输出A, B等则返回与多个Get Field对象相同的结果。

SubRecord对象与UnBuild Record和Get Field的区别是其输出总是一条记录。SubRecord装置允许包括或不包括 一条记录中的字段列表，形成一条子记录。

位置

Data [image] Access Record [image] Get Field

另请参阅

Build Record, Formula, Record Constant, Set Field, SubRecord和UnBuild Record。

从记录中提取字段


Get File Creation Time

检索指定路径上的文件创建时间。

位置

System [image] File [image] Get File Creation Time


Get File Name

从提供的路径中检索文件名。

位置

System [image] Path [image] Get File Name


Get File Name Without Extension

检索路径中给定的文件的文件名，但不包括文件扩展名。

位置

System [image] Path [image] Get File Name Without Extension


Get Full Path

使用当前目录作为起点检索整个路径。例如，假设您位于temp目录下，在temp目录下有一个目录名叫test，在test目录下有一个文件名叫balderdash。在使用这个对象搜索文件balderdash时，会搜索temp目录树，返回文件的整个路径。

位置

System [image] Path [image] Get Full Path


Get Files

在输入路径的目录中检索多个文件，然后在一个一维数组中显示这些文件。

位置

System [image] Directory [image] Get Files


Get Last File Access Time

检索给定文件最后一次存取文件的时间。

位置

System [image] File [image] Get Last File Access Time


Get Last File Write Time

检索给定文件最后一次写入文件的时间。

位置

System [image] File [image] Get Last File Write Time


Get Logical Drives

检定主机系统上逻辑驱动器的一维数组。

位置

System [image] Directory [image] Get Logical Drives


Get Mappings

输出与容器有关的映射信息的对象。

用途

使用Get Mappings获得与映射的数组有关的信息。Get Mappings输出映射的类型(对数或线性)及每个维度每个映射的开始值和结束值。

Open View参数

NumDims - 输入数组中的维数，这是一个整数值，最小值为1，最大值为10。

备注

如果输入数组没有映射，Get Mapping输出Linear (0,n-1)，其中"n"是输入数组该维度中的点数。

Get Mapping不允许Coord作为输入，因为Coord数据类型有明确的映射。

Num Dims必须与输入数组中的维数相匹配。

如果Num Dims值变化，视图会自动创建或删除输出端，以便输出数量(每个维度三个)与Num Dims值相匹配。对每个维度，Get Mappings有三个数据输出端。

快捷方式

为查看映射的数组的映射关系，在一条线上使用Line Probe或打开端，查看容器数据。

位置

Data [image] Access Array [image] Get Mappings

另请参阅

Line Probe, Set Mappings, Properties (对象), UnBuild Data和Properties (对象)


Get Parent Directory

检索父目录的路径。

位置

System [image] Directory [image] Get Parent Directory


Get Path Root

检索传送到路径上的任何路径的根。

位置

System [image] Path [image] Get Path Root


Get Root Directory

检索当前VEE会话使用的主机系统的根目录。

位置

System [image] Directory [image] Get Root Directory


Get Specified Files

提供一个路径和一个通配符模型 (如*.vee)，然后这个对象会检索与该模型相匹配的文件。

位置

System [image] Directory [image] Get Specific Files


Get Subdirectories

检索由子目录组成的一维数组。这不是一个递归列表，而是路径参数中指定的目录下面的第一级子目录。

位置

System [image] Directory [image] Get Subdirectories


Get Temp Directory Path

检索到临时目录的路径，其通常是C:\Documents and Settings\{UserName}\Local Settings\Temp\。

位置

System [image] Path [image] Get Temp Directory Path


Get Temp File Name

在C:\Documents and Settings\{UserName}\Local Settings\Temp中创建一个临时文件，然后检索文件名。

位置

System [image] Path [image] Get Temp File Name


Get Values

从数组中提取要素的对象。

用途

使用Get Values存取数组的特定要素。可以从一个或多个数组中提取一个或多个要素、列或行。

使用Get Values获得与数据集有关的信息，如数据类型、维数、维度大小及构成输入数组的所有数组要素的总大小。

打开视图参数

公式字段(未标记) - 指定正在提取的数组的要素。与数组有关的具体符号包括：

逗号(,) - 分隔要素维度。

分号(:) - 指明包括的要素集。

星号(*) - 指明整列或整行的通配符。

范例

从两维数组[3,3] 要素中提取第二列，记住数组索引基于零 ：

- - - -
|1 2 3 |                      | 2 |
|4 5 6 | Array [*,1] outputs: | 5 |
|7 8 9 |                      | 8 |
- - - -

备注

所有数组都基于零。

每个数组维度必须有一个技术数据。

Get Values对象实际只是使用一个Ary输入、表达式Ary及多个输出初始化的Formula对象。可以在Get Values中使用能够在Formula对象中使用的任何表达式。

所有Formula对象全面支持Get Values中的Ary[2,3]子数组语法，包括Formula, If/Then/Else, Get Field, Set Field及所有处理设备(To File, To String, 等等)。

数据类型字符串输出值与typeName()函数中返回的字符串相同。

位置

Data [image] Access Array [image] Get Values

另请参阅

Array, Formula, Set Values, typeName(), UnBuild Data和Properties (对象)

从数组中提取值


Get Variable

在执行当前程序时获得已经创建的变量的值的对象。

用途

使用Get Variable对象获得一个变量(按名称)，作为VEE程序中的数据使用。此前，必须已经使用Set Variable或Formula 指配对象在程序内部创建或初始化变量。

在一个程序上下文中创建的未声明全局变量(使用Set Variable创建)可以作为程序另一个上下文中的数据使用，如UserObjects和UserFunctions。例如，程序根上下文中的Set Variable可以创建一个未声明全局变量，然后可以通过在UserObject中包括Get Variable，可以作为数据使用。这特别适合程序中包含UserObjects的多个嵌套层的情况。

还可以根据名称把变量用于下述对象的表达式字段中：Formula, If/Then/Else, Get Values, Get Field, Set Field和在事务中使用表达式的所有对象，包括To File, From File, Direct I/O, From Stdin和Sequencer。这种直接使用方式通常要比Get Variable对象更有用。

Open View参数

open view为变量名称显示一个字段。名称不分大小写(可以使用小写字母或大写字母)。因此，globalA变量与GLOBALa变量相同。可以作为控制输入添加名称字段。名称只能是变量的名称，不能是表示式，如globalA+1或globalRec.field。应该在Formula中使用这些表达式。

备注

为避免意想不到的结果，程序必须保证在Get Variable对象 (或在表达式中包括变量名称的对象) 执行前使用Set Variable设置变量。一般来说，保证这一点的最佳方式是把Set Variable对象的序列输出端连接到Get Variable对象的序列输入端，或连接到使用变量的其它对象。然而，有时不需要连接序列输入端。如需进一步信息，请参阅VEE高级技术中的"变量"。

在Default Preferences中，如果Delete Variables at PreRun启动(默认值)，那么只有在删除所有变量后，才能执行程序。如果Delete Variables at PreRun关闭，那么将不会删除变量，必须认真编程，避免传播无效数据。

全局变量是真正的全局变量，因为它们不是在UserObject级定义的。在程序的一个上下文中定义的全局变量可以用于程序内任何其它上下文中。例如，可以在程序的根上下文中，使用Set Variable对象定义一个全局变量，然后包括Get Variable，在UserObject中获得该全局变量：

如果两个或多个Set Variable对象试图设置同一个变量(使用相同的名称)，那么在每次执行Set Variable时将覆盖当前值。如果您不知道名字重复，这可能会导致意想不到的行为。

如果一个数据端变量的名称与一个变量相同，那么数据端变量优先。

如需进一步信息，请参阅VEE高级技术中的"变量"。

位置

Data [image] Variable [image] Get Variable

另请参阅

默认首选项, Delete Variable, Set Variable, View Variables和Properties (对象)

使用变量


Has Extension?

如果提供的路径中的文件有一个文件扩展名，那么检索布尔值。例如，在文件test.xls中，xls是文件扩展名，将返回布尔值真。

位置

System [image] Path [image] Has Extension?


Hash Table - Add Key/Value Pair

在散列表中添加键/值对。

位置

System [image] Collections [image] Hashtable [image] Add Key/Value Pair


Hash Table - Clear

清除散列表。

位置

System [image] Collections [image] Hashtable [image] Clear Hashtable


Hash Table - Contains Key?

某个散列表是否包含某个键。

位置

System [image] Collections [image] Hashtable [image] Contains Key?


Hash Table - Count

提供散列表中键/值对数。

位置

System [image] Collections [image] Hashtable [image] Count


Hash Table - Create

创建一个新的散列表。

位置

System [image] Collections [image] Hashtable [image] Create


Hash Table - Enumerate Key/Value Pairs

列出指定散列表的键/值对。

位置

System [image] Collections [image] Hashtable [image] Enumerate Key/Value Pairs


Hash Table - Get Value

获得散列表和散列键一定的散列值。

位置

System [image] Collections [image] Hashtable [image] Get Value


Hash Table - Remove Key/Value Pair

从散列表中去掉一对键/值。

位置

System [image] Collections [image] Hashtable [image] Remove Key/Value Pair


Hash Table - Set Value

设置给定散列表中给定键的值。

位置

System [image] Collections [image] Hashtable [image] Set Value


Help (Object Menu)

Help (对象菜单)

获得这个对象的帮助。

用途

使用Help查看这个对象的参考页面。为退出帮助，关闭帮助窗口。

备注

为获得多个对象、术语或程序信息的帮助，使用VEE菜单栏上的Help菜单。

Instrument Panel或Component Driver的Help包含着与驱程本身有关的帮助。

快捷方式

为迅速获得选定对象的帮助信息，按F1。

位置

在每个对象菜单上 [image] Help

另请参阅

对象菜单和Properties (对象)。


Home

把程序的左上角移动到工作区的左上角(Main, UserFunctions或UserObjects)。

快捷方式

按工具栏上的 [image] 按钮，或点击Home键。

位置

Edit [image] Home

另请参阅

导航程序


Horizontal Paddle

参阅Toggle Control。


Horizontal Rocker

参阅Toggle Control。


Horizontal Slide

参阅Toggle Control。


If A ~= B

在两个数据输入值约等于时提供输出分支的对象。

用途

使用If A ~= B试验约等于，并根据试验结果提供分支。

备注

If A ~= B是一个预先配置的If/Then/Else对象，用来试验两个输入是否约等于。

如果两个输入约等于，那么Then输出传播一个Int32标量1，否则Else输出传播一个Int32标量0。

"约等于"试验对Complex数字和Polar Complex数字略有不同。对两个实数(a和b)，"约等于"试验如下：

a - b <= a * 10E-7

而对两个Complex值(a和b)，试验如下：

re(a) - re(b) <= mag(a) * 10E-7

其中：

re(a)是a的实数部分。

re(b)是b的实数部分。

mag(a)是a的矢量幅度。

位置

Flow [image] Conditional [image] If A ~= B

另请参阅

Comparison, Conditional, If/Then/Else, If A == B, If A != B, If A < B, If A > B, If A <= B和If A >= B。

在VEE程序内进行分支


If A == B

在两个数据输入值相等时提供输出分支的对象。

用途

使用If A == B试验等于，并根据试验结果提供分支。

备注

If A == B是一个预先配置的If/Then/Else对象，用来试验两个输入是否相等。

如果两个输入相等，那么Then输出传播一个Int32标量1，否则Else输出传播一个Int32标量0。

位置

Flow [image] Conditional [image] If A == B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A != B, If A < B, If A > B, If A <= B和If A >= B。

在VEE程序内进行分支


If A >= B

在一个输入大于等于另一个输入时提供输出分支的对象。

用途

使用If A >= B试验一个输入是否大于等于另一个输入，并根据试验结果提供分支。

备注

If A >= B是一个预先配置的If/Then/Else对象。

如果A的值大于等于B的值，那么Then输出传播一个 Int32标量1，否则Else输出传播一个 Int32标量0。

位置

Flow [image] Conditional [image] If A >= B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A == B, If A != B, If A < B, If A > B和If A <= B。

在VEE程序内进行分支


If A > B

在一个输入大于另一个输入时提供输出分支的对象。

用途

使用If A > B试验一个输入是否大于另一个输入，并根据试验结果提供分支。

备注

If A > B是一个预先配置的If/Then/Else对象。

如果A的值大于B的值，那么Then输出传播一个 Int32标量1，否则Else输出传播一个 Int32标量0。

位置

Flow [image] Conditional [image] If A > B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A == B, If A != B, If A < B, If A <= B和If A >= B。

在VEE程序内进行分支


If A <= B

在一个输入小于等于另一个输入时提供输出分支的对象。

用途

使用If A <= B试验一个输入是否小于等于另一个输入，并根据试验结果提供分支。

备注

If A <= B是一个预先配置的If/Then/Else对象，用来试验两个输入不等。

如果A的值小于等于B的值，那么Then输出传播一个 Int32标量1，否则Else输出传播一个 Int32标量0。

位置

Flow [image] Conditional [image] If A <= B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A == B, If A != B, If A < B, If A > B和If A >= B。

在VEE程序内进行分支


If A < B

在一个输入小于另一个输入时提供输出分支的对象。

用途

使用If A < B试验一个输入是否小于另一个输入，并根据试验结果提供分支。

备注

If A < B是一个预先配置的If/Then/Else对象。

如果A的值小于B的值，那么Then输出传播一个Int32标量1，否则Else输出传播一个Int32标量0。

位置

Flow [image] Conditional [image] If A < B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A == B, If A != B, If A > B, If A <= B和If A >= B。

在VEE程序内进行分支


If A != B

在两个数据输入值不等时提供输出分支的对象。

用途

使用If A != B试验不等，并根据试验结果提供分支。

备注

If A != B是一个预先配置的If/Then/Else对象，用来试验两个输入不等。

如果A的值不等于B的值，那么Then输出传播一个Int32标量1，否则Else输出传播一个Int32标量0。

位置

Flow [image] Conditional [image] If A != B

另请参阅

Comparison, Conditional, If/Then/Else, If A ~= B, If A == B, If A < B, If A > B, If A <= B和If A >= B。

在VEE程序内进行分支


If/Then/Else

根据输入值分支执行流程的对象。

用途

使用If/Then/Else制订与执行哪个子线程分支有关的决策。可以在open view的公式框中输入任何合法的数学表达式。

只激活与真条件有关的输出端。容器输出是表达式的值。

If/Then/Else对If/Else If子句中的表达式求解(从上到下)，直到一个表达式的解是非零值。这个非零容器复制到表达式相应的输出上，传播一个输出。而且只传播一个输出。如果没有表达式的解为非零值，那么Else输出会传播最后一次求解的表达式的零值。

如果任何表达式的解是数组值，那么会检查数组值，看是否全为零或全不为零。如果零值和非零值混合，会返回错误，因为不能确定数组是true还是false。为产生标量，使用expr == 0或expr!=0，因为相等比较总是返回一个标量。

Open View参数

在编辑字段中输入一个表达式。

对象菜单

Add Else/If - 增加一个条件，试验是否满足前一个条件，如果条件为真，那么激活一个输出端。新条件会增加到所有当前条件下面。

Insert Else/If - 打开一个对话框，列出当前条件，允许在任何当前条件之前插入一个新条件(及相关输出端)。

Delete Else/If - 删除一个条件。在选择Delete Else/If后，选择一个要从显示的对话框中删除的条件。

在只显示一个条件时，不能使用Delete Else/If。只有至少有两个Else/If条件时，才能使用这一功能。

备注

可以在条件语句中使用任何合法的数学语句。可以添加其它输入，用于表达式中，就象Formula对象一样。

为在满足条件时输出一个值，把条件语句乘以这个值。例如，为在A小于10时在变量A中输出值，在编辑字段中使用下面的表达式：

(A<10)*A

在这个条件为真时，在Then数据输出端上输出A的值。这种技术只适用于真语句(输出到Then或Else If数据输出端)。此外，这一技术只适用于A不等于0的情况。如果A等于0，公式结果为假，Else数据输出端上输出0。如果条件为假，Else数据输出端总是返回零。

Flow [image] Conditional下的对象是预先配置的If/Then/Else对象，用来试验某个条件。

为获得TRUE|FALSE (1|0) 输出，使用Comparison对象。这些对象位于Function & Object Browser的Type: Operators, Category: Comparison下。

另外注意Comparison对象和Conditional对象之间的区别。Comparisons是输出0或1的公式。Conditionals是If/Then/Else，有两个输出，一次只激活一个输出。

位置

Flow [image] If/Then/Else

另请参阅

Comparison, Conditional, Formula, 三元运算符, Properties (对象)和对象菜单

在VEE程序内进行分支


Import Library

把UserFunction库、Compiled Function定义库或Remote Function定义库加载到正在运行的VEE程序中的一个对象。

用途

使用Import Library在运行时把下面其中一种函数库加载到VEE程序中：

UserFunction - Import Library从指定文件中加载所有UserFunctions。(通过在UserObject对象菜单上选择Make UserFunction选项，创建UserFunctions。通过创建多个UserFunction，并把它们保存到文件中，创建一个库。)

Compiled Function - Import Library把一个动态链接库或DLL附加到VEE流程中，并解析Definition File声明。(Compiled Functions是用编程语言编写的程序，如C语言，其动态链接到VEE流程。)

Remote Function - Import Library在远程主机上启动一个VEE流程，把Remote File加载到VEE流程中。(Remote Functions实际是远程VEE流程加载的、但能够在本地主机上调用的UserFunction。)

一旦加载UserFunction、Compiled Function或Remote Function库，可以使用Call Function对象按名称执行(调用)函数。

Open View参数

Library Type - 一个对话框，允许选择UserFunction, Compiled Function或Remote Function。

Library Name - 为加载的库指配一个逻辑名称。

File Name - (仅适用于UserFunction或Compiled Function) 选择包含要导入的库的文件。对Compiled Functions，这是一个.dll。

Definition File - (仅适用于Compiled Function) 为Compiled Function选择定义文件。这是包含函数调用原型的文件 (.h文件)。

Host Name - (仅适用于Remote Function) 在Remote Function运行的地方输入远程主机的名称。

Remote File Name - (仅适用于Remote Function) 输入库的文件名称(完整的路径) (如/users/MyUserName/MyDir/MyFile)。

Remote Timeout - (仅适用于Remote Function) 为Remote Function设置超时秒数。

Geometry - (仅适用于Remote Function) 使用标准几何格式为包含远程VEE视图的窗口输入初始几何图形，如800x500+0-0 (width x height+/-xoffest+/-yoffset。

Remote Debug - (仅适用于Remote Function) 在选中这个复选框时，将在调试模式下执行库内的所有UserFunction (即您将能够在这些UserFunction上执行调试，如设置断点及进行线路探测)。在执行每个远程UserFunction之前，程序将暂停。不管是否有面板视图，这一设置都适用于UserFunction。

对象菜单

Load Lib - 立即把指定库加载到VEE中。如果以前加载了同一名称的库，那么将删除这个库，用新库覆盖旧库。

Delete Lib - 立即从VEE中删除指定库。(这提供的功能与Delete Library对象相同。)

备注

Import Library对象一般用于已经把UserFunctions、Compiled Functions或Remote Functions集合开发到库中的高级操作。Import Library允许在运行时动态加载这些库。对UserFunctions，通过创建一个库，并使用Import Library加载这个库，可以节约大量的空间，而不必在各个程序中保存UserFunction的拷贝。此外，在开发由标准UserFunction组成的库时，可以把这些函数的源代码放在一个位置。

Import Library在运行时加载的UserFunctions的运行方式与程序内部本地创建的UserFunction完全相同。可以使用Call Function或Formula对象执行任何UserFunction。但是，在程序内部只能编辑本地创建的UserFunction。不能编辑导入的UserFunction，但可以使用Edit UserFunction为调试目的查看这些UserFunction。如果想编辑任何外部UserFunction，必须打开包含着UserFunction的库文件，并使用Edit菜单上的Edit UserFunctions选项。一旦编辑了UserFunction，把文件保存回磁盘。

从包含嵌入式I/O配置的程序文件执行Import Library不会导入该I/O配置的任何库。参阅嵌入式I/O配置和合并。

位置

Device [image] Import Library

另请参阅

Call, Delete Library, Edit UserFunction, UserFunction, UserObject, Properties (对象), 使用Compiled Function, 构建C函数, 创建动态链接库


Indicator

这个菜单选项根据Scalar数字输入值提供了各种模拟型图形画面。

用途

Indicator菜单允许选择五种不同的VEE对象，以图形方式显示Scalar数字输入值。这五个对象是：

Meter - 在模拟型仪表上显示一个Scalar数字值。

Thermometer - 在温度计图形内部使用色条显示一个Scalar数字值。

Fill Bar - 使用色条以图形方式显示一个数字值。

Tank - 在坦克图形内部使用色条以图形方式显示一个Scalar数字值。

Color Alarm - 一个图形告警指示符，它显示不同的颜色和文本字符串，具体取决于Scalar输入值。

位置

Display [image] Indicator

另请参阅

Color Alarm, Fill Bar, Meter, Tank和Thermometer。

显示颜色告警

显示数据的模拟画面


Instrument Event

捕获GPIB或VXI设备生成的事件的对象。

用途

Instrument Event对象可以配置成检测各种设备事件。根据配置，该对象可以等待事件，放弃执行其它并行线程，或简单地返回boolean (0或1)或其它设备状态指标。

如果Instrument Event对象已经配置成等待事件，那么在发生事件时，对象将执行。这个对象相连的任何线程要优先于任何其它并行线程，并将执行到结束。如果Instrument Event对象已经配置成只是返回设备状态指标，那么包含它的线程将拥有普通优先权，并与任何其它线程并行执行。

Open View参数

Device - 当前选择的设备显示在Device字段中。点击这个字段，显示当前配置的GPIB和VXI设备列表。

Event - 允许选择具体事件。点击这个字段显示下述选项：

Spoll - 返回GPIB设备和基于消息的VXI设备的状态。如果已经选择一个GPIB设备，那么唯一可能的选项是Spoll。返回的状态字节与Mask值一起使用。

SRQ - 对VXI，在设备发送VME中断或作为请求真事件的信号寄存器写入操作时，从基于消息的设备中生成一个SRQ。在发生这个异步事件时，将返回设备的状态字节，从而导致设备生成请求假事件。返回的状态字节与Mask值一起使用。

Signal Interrupt - 从基于消息的VXI设备或基于寄存器的VXI设备中生成这个异步事件。在设备发送VME中断或作为设备定义事件或未定义事件的信号寄存器写入操作时，会发生这个事件。返回的32位值是放在信号写入寄存器中的值，或在设备进行中断确认(IACK)时放在VXI总线上的值。这个值与Mask值一起使用。

Action - 确定在检测到指定事件时Device Event对象的执行行为及指定的位掩码。

No Wait - 立即执行，把32位整数指定的配置事件的当前状态输出到status端。这个值是boolean值FALSE (0)或设备相关码型。如果事件选项是Spoll，那么返回的整数的低字节是设备的状态字节。对两个异步VXI事件，如果事件还没有发生，那么返回FALSE (0)。如果事件已经发生，那么返回设备相关码型。

All Clear - 等待事件发生，在与Mask值的逻辑AND运算中使用返回的值。如果没有设置位，那么通过把原始的没有掩码的值放在status输出端来执行操作。

Any Set - 等待事件发生，在与Mask值的逻辑AND运算中使用返回的值。如果在得到的码型中设置了任何位，那么通过把原始的没有掩码的值放在status输出端来执行操作。

Mask - 可以输入一个作为位掩码使用的值(默认值= 0)。Mask值用来与发生指定事件时设备返回的值进行逻辑AND运算。

备注

Instrument Event对象的执行行为可以是异步，也可以是同步，具体取决于选择的Action参数。No Wait指定同步轮询行为。对象立即执行，任何相连的线程的优先权与目前执行的所有其它线程相同。选择Any Set或All Clear会导致Device Event对象等待，直到两个事件都已经发生，Mask值和设备返回值的逻辑AND操作满足"设置任何位"或"没有设置位"标准。在同时满足这两个条件时，对象执行。相连的任何线程优先权较高，将执行到结束，阻塞所有其它并行执行的线程。

严格地讲，Spoll事件并不是象VXI SRQ和Signal Interrupt一样的真正异步事件。通过使用Mask值和相应的操作Any Set或All Clear，可以使用Mask值连续求解状态字节，直到设备修改正确的位。对象将一直等到发生这种情况，允许并发线程继续执行。对Spoll事件，选择No Wait Action与使用掩码值零指定All Clear Action完全相同：Device Event对象会立即执行。

对真正的异步事件SRQ和Signal Interrupt，设备等到事件发生，允许并发线程继续执行。一旦中断发生，得到的状态字节、信号写入寄存器内容或IACK值将与掩码值进行逻辑AND运算。只有在得到的码型满足Any Set或All Clear标准时，对象才会执行。如果All Clear操作指定的掩码值是零，那么在中断发生时将执行Device Event对象。

控制端作为输入，以程序化方式改变设备超时周期。

位置

I/0 [image] Advanced I/O [image] Instrument Event

另请参阅

Interface Event, Interface Operations和Properties (对象)

轮询GPIB仪器


Instrument Manager

显示Instrument Manager对话框。

用途

选择I/O [image] Instrument Manager，显示Instrument Manager对话框。使用这个对话框，添加、删除、编辑、定位和配置接口和仪器。还可以创建下述类型的仪器I/O对象：Direct I/O, IVI-COM Drivers, NIDAQ Drivers VXIplug&play Drivers, Panel Drivers和Component Drivers。

对话框信息

Instrument Manager对话框分成下面的区域：

Instrument List - 新视图包含三个节点：My Configuration (根)、接口和仪器。点击节点，选中节点。选中的节点控制着其它区域中的按钮执行的操作。如果想编辑列表中的接口或仪器，双击接口或仪器。

Auto Discovery - 这个区域控制着自动发现和配置仪器及其驱程。在这个区域有三个按钮：

Find Instruments - 这个按钮自动搜索选定接口上提供的所有仪器。如果选中根节点，那么将为仪器搜索所有本地接口。Auto Discovery Settings对话框(通过点击Settings?#25353;钮显示)控制着这一搜索的部分细节。

从8.0版起，VEE开始逐步淘汰旧的不一致的I/O设备(混合SICL & VISA)，以便在声明/使用I/O设备时实现更加统一的方法(VISA)。这可以保持向下兼容能力，同时?#40723;励?#29992;户使用新式设备。

用户旧程序I/O与VEE 8.0以前完全相同。可以运行传统SICL式设备，但可能不再添加到程序中。

注：如果使用GPIB到LAN接口，由于在从根节点中查找局域网设备时有一个很长的超时周期，因此安捷伦建议从GPIB接口启动查找操作。通过这种方式启动的查找操作将快速正确地工作。

Configure Drivers - 这个按钮识别选定的仪器，为该仪器配置任何可用的驱程。注意，只能识别IEEE-488.2 (及大多数VXI)仪器。不能自动检测或识别完善程度较低的接口上的仪器，如RS-232。

Configure Drivers在Instrument List中选定的仪器上工作。只有选定仪器时才能使用这一项；如果选择根节点或接口，这个按钮会变成灰色(不能使用)。

如果在选定仪器时这个按钮呈灰色，那么在系统上没有提供仪器I/O。在这种情况下，您需要安装相应的I/O库(VISA, SICL, 等等)，以支持仪器接口。

Settings... - 这个按钮启动Auto Discovery Settings对话框，控制着在仪器发现过程中执行的部分操作。

如果选择Detect only，Find Instruments按钮只检测在每个总线地址上是否存在设备。

如果选择了Detect, identify和configure...，Find Instruments按钮还为检测的每台仪器执行识别和驱程配置。(其执行的配置与Configure Drivers按钮相同。)

如果复选Ask before sending...，在发送*IDN?识别每台仪器前会出现一个确认对话框。如果没有复选，会把*IDN?发送到所有仪器，而不需操作人员确认。如果系统包含旧的非IEEE-488.2仪器，您可能希望出现确认对话框。

Instrument - 这个区域允许改变仪器配置。这个区域有三个按钮：

Properties- 这个按钮允许您编辑选定的接口或仪器配置。点击Properties会打开Interface Properties或Instrument Properties对话框。也可以双击想要编辑的接口或仪器。

Add... - 这个按钮允许在列表中增加仪器。在点击Add时，出现Instrument Properties对话框。通过填写这个对话框中的字段，可以配置仪器。

Remove - 这个按钮从列表中检测当前选择的仪器。在删除与接口相关的所有仪器时，会自动删除接口节点。如果发生错误，只需选择Cancel按钮就可以恢复。这会退出Instrument Manager，而不会保存任何变动。

Create I/O Object - 这个区域确定在VEE程序中添加的仪器I/O对象的类型。点击其中一个驱程按钮，在工作区中添加仪器I/O对象。在选定仪器不能使用这些驱程时，按钮变成灰色。

对话框底部有六个按钮：OK, Save, Cancel, Print, Help,和Load Samples。

OK - 点击这个按钮，与当前会话一起保留仪器配置，关闭Instrument Manager。

Save - 点击这个按钮，在veeio配置文件中保存仪器配置，关闭Instrument Manager。如果仪器配置嵌入在VEE程序中，这个按钮会变成灰色。

Load Samples - 点击这个按钮，看到包含这一仪器的样本列表。在选择其中一个样本时，会启动新的VEE，加载和正确配置仪器。您只需按Run即可。

Auto Discovery的更多信息

Find Instruments在Instrument List中选定的节点上运行。如果选择根节点(一般是"My Configuration")，那么会选择所有本地GPIB和VXI接口。如果选择各个接口，那么只搜索该接口。不能搜索仪器的GPIO和RS-232接口，因为它们不支持自动检测仪器的任何标准协议。

在从根节点中运行时，Find Instruments操作不搜索使用局域网网关的接口，但从使用网关的接口节点运行时，它将搜索远程仪器。Find Instruments操作不搜索使用局域网网关的新接口。必须手动确定使用网关的接口初始项目。

搜索可能会在Instrument List区域产生下面的结果：

仪器配置中已经列出的、接口上物理存在的仪器会标上一个计算机图标。

仪器配置文件中还没有列出的、但在接口上物理存在的仪器将添加到列表中，并标上一个问号。

仪器配置中已经列出的、但在接口上物理不存在的仪器不作标记。

注意Auto Discovery流程不会从当前配置中删除仪器。不管现有项目是否与实地仪器对应，它都会添加新项目和注释。但是，不会简单地删除项目，因为在按Find Instruments按钮时相应的仪器没有活动。在大多数情况下，大多数用户对这种保守方法表示欢迎。一个小的缺点是只按一个按钮不能创建与当前连接的仪器完全相同的I/O配置。如果需要创建一个配置，其中只包含某个时间上本地连接的仪器，那么先删除所有仪器项目，然后按Find Instruments。

保存I/O配置的更多信息

可以在单独的文件中保存仪器配置，或把仪器配置嵌入在VEE程序中。如果想使用单独的文件，配置文件会保存在vee.io中。拥有I/O对象的VEE程序依赖仪器I/O配置文件，查找程序中参考的仪器。如果程序与配置文件不匹配(例如，如果程序文件从一台仪器复制到另一台仪器，而不复制相应的vee.io文件)，那么对象可能不能执行，因为没有配置其相关仪器。

也可以把仪器配置信息嵌入在VEE程序文件中。如果想创建嵌入配置，选择File [image] Save As?/font> (或选择Save，建立新的程序文件)，在Options区域复选Save I/O configuration with program框。然后点击OK保存程序。在与程序一起保存I/O配置时，Instrument Manager中的Save按钮不能使用。

Instrument Manager显示I/O配置是来自单独的vee.io文件还是嵌入在程序中。

备注

可以在仪器实际连接计算机或没有连接计算机的情况下运行I/O对象(Plug&play Driver对象除外)。如果想控制实地仪器，必须设置一个正确的非零地址，启动Live Mode。地址和Live Mode设置通过Instrument Properties对话框控制。如果地址为零或如果Live Mode关闭，仪器对象会运行，但不会试图与物理仪器通信。在其关闭时，Plug&play Driver对象忽略Live Mode设置，一直试图访问物理仪器。

在VEE能够与物理仪器通信前，必须正确配置仪器(及其接口)。如需更多信息，请参阅I/O Libraries安装说明。

如需仪器专用帮助，从Panel Driver或Component Driver对象的对象菜单中选择Help。

可以在程序内部交互使用Panel Driver。如果想设置各个组件的值，点击包含组件值的字段，在出现的对话框中操作。如果想进行测量及显示结果，在Panel Driver open view内部点击相应的数字读数或XY画面。

可能会有一个以上的对象控制一台仪器。还可能有同一个驱程的多个拷贝，每个拷贝控制着不同的物理仪器。不管是哪种情况，配置的名称都决定着哪个对象控制哪台仪器。

位置

I/O [image] Instrument Manager

另请参阅

Advanced Instrument Properties, Advanced I/O, Bus I/O Monitor, Component Driver, Direct I/O, Instrument Properties, Panel Driver, To/From VXIplug&play, To/From IVI-COM和To/From IVI-COM - Advanced

删除仪器配置, 添加仪器配置, 编辑仪器配置

I/O配置技术, I/O控制技术, 逻辑单元和I/O地址

GPIO 仪器属性,GPIB 仪器属性,串行口仪器属性,VXI 仪器属性,USB 仪器属性,TCPIP 仪器属性。


Instrument Properties

可以配置仪器的一个对话框。

用途

使用Instrument Properties对话框，添加新的仪器配置或编辑已有的配置。可以使用Instrument Properties配置GPIB, Serial, GPIO, VXI, TCPIP, NIDAQ和USB仪器及相关对象，如Direct I/O, Plug&play Drivers, IVI-COM和Panel Drivers。

对话框信息

Instrument Properties对话框提供了下述字段和按钮：

备注
使用Tab键在字段之间切换，或使用鼠标点击所需的字段。只有在对话框完成时才能按Enter (或Return)。按Enter (或Return)会导致对话框关闭，相当于按OK。

Name - 输入一个唯一的名称，识别这个特定的仪器配置。注意一个以上的配置(每个配置有一个唯一的名称)可以控制一部仪器，但不推荐使用这种技术。两部不同的仪器使用的名称不能相同。

Interface - 指定与仪器通信使用的硬件接口的类型(默认值为GPIB)。点击GPIB显示可以使用的接口类型列表(GPIB, Serial等等)。如果使用GPIB接口，为这个字段选择 GPIB。

Address (eg 714) - 指定仪器的I/O地址。默认值为0。(在输入非零的值时，Live Mode变成ON) 如需与设置地址有关的更多信息，请参阅VEE高级技术手册中的"配置仪器"。

Gateway - 在VEE流程存取连接到远程计算机上的仪器时，指定LAN网关的主机名称。默认值为This host。如需与高级I/O控制有关的更多信息，请参阅VEE高级技术手册中的"高级I/O内容"。

Board Number - 这种接口类型的每块电路板从0开始编号。默认值为0。

Alias - VISA地址字符串的USB别名。USB VISA地址字符串长，使用困难。别名为识别仪器提供了更简单的方法。默认值为USBDevice1。

TCPIP Address - 仪器的TCPIP地址。TCPIP地址字符串的格式是TCPIP[board]::host address[::LAN device name]::INSTR，括弧中的项目是可选项目，如TCPIP0::jetscrm3::GPIB0,9::INSTR，其中0是电路板::jetscrm3是主机地址(这也可以是一个IP地址，如129.82.135.12)::GPIB0是GPIB/LAN转换器上的入口，,9是仪器的地址::INSTR是接口。

Advanced... - 点击Advanced...按钮将打开Advanced Instrument Properties对话框。从Advanced Instrument Properties对话框中，可以配置设备驱程，并为上面列明的每种接口类型配置通信参数。对Advanced Instrument Properties，请参阅单独的Help内容。

OK - 一旦完成配置，点击OK确认所作的变动。

位置

I/O [image] Instrument Manager?/font> 然后双击Instrument List仪器所在行，选择一部仪器。

另请参阅

Advanced Instrument Properties, Advanced I/O, Bus I/O Monitor, Component Driver, Direct I/O, Instrument Manager和Panel Driver。

添加仪器配置


Int16

输出2字节的整数标量或1D数组常数的对象。

用途

使用Int16设置整数常数或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的提示使用Int16，把Int16对象的名字变成提示，如Enter the number of seconds to delay:。用户在输入字段中填写请求的信息。

在Int16中输入公式12*1024，计算结果。

属性

General栏：

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

 ArraySize: - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

Initialization 组：

 InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat：

Global Format - 使用默认格式。默认值为启动。

Integer: - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a),和Binary (如#B00101010)。默认值为Decimal。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个整数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段一直是一个标量，即使Int16 配置成数组。

位置

Data [image] Constant [image] Int16

另请参阅

Alloc Int16, Complex, Constant, Coord, Date/Time, Selection Control, 默认首选项, UInt8, Int32, PComplex, Real32, Real64, Text,和Toggle Control.

使用数据常数


Int32

输出4字节的整数标量或1D数组常数的对象。

用途

使用Int32设置整数常数或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的提示使用Int32，把Int32对象的名字变成提示，如Enter the number of seconds to delay:。用户在输入字段中填写请求的信息。

在Int32中输入公式12*1024，计算结果。

属性

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

ArraySize: - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

Stepping Category: - 数据形状为 1D 时无效。

  • EnableStepping - 在这一属性为True时，步长控制出现在输入字段的右端，允许滚动所有值。默认值为False。

  • DetentSize - 在EnableStepping属性为True时，当使用步进控制滚动所有值时，这会设置各个值之间的步长。默认值为1。

 Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

 InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat:

 Global Format - 使用默认格式。默认值为启动。

 Integer: - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个整数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段总是一个标量，即使Int32 配置成数组。

位置

Data [image] Constant [image] Int32

另请参阅

Alloc Int32, Complex, Constant, Coord, Date/Time, Selection Control, Default Preferences, UInt8, Int16, PComplex, Real32, Real64, Text和Toggle Control。

使用数据常数


Int32 Input

显示一个接受整数输入的弹出对话框的对象。

用途

使用Int32 Input提示用户输入一个整数，接受这个数字，使用用户自定义测试检查这个数字是否有效。

在弹出对话框中，在按OK按钮时，Value输出端输出用户输入的整数。在按Cancel按钮时，Cancel输出端输出1。

Open View

  • Prompt/Label - 这个字符串提示用户选择一个文件名。可以作为数据输入添加这个参数。默认值为Enter Integer Value:

  • Default Value - 在输入任何数据前位于对话框输入字段中的文本。如果用户在没有输入任何数据的情况下按OK，那么输出这个文本。可以作为数据输入添加这个参数。默认值为5。

  • Value Constraint - 测试输入文本是否有效的等式。可以使用任何数学表达式，或调用一个UserFunction。可以作为数据输入添加这个参数。默认值为0<=value AND value<=10，表示检查取值在0和10之间的用户输入。如果想支持任何值，使用表达式1。

  • Error Message - 如果用户输入没有满足Value Constraint，那么消息框中输出这些文本。可以作为数据输入添加这个参数。默认值为You must enter a integer between 0 and 10。

属性

  • PopupTimeoutEnabled - 在这一属性为True时，Timeout输出端添加到对象中。默认值为False。

  • PopUpDuration - 设置弹出对话框显示的时间长度。在过了这段时间之后，对话框超时，Timeout输出端输出值1。如果 Timeout端执行，那么任何其它输出端都没有数据。只有在选中Timeout Enabled复选框时才能使用这个字段。默认值为60 seconds。

  • PopupOKLabel - 在True时把按钮标注设置为OK。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupCancelLabel - 在True时把按钮标注设置为Cancel。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupPasswordMasking - 在这一属性为True时，输入文本表现为星号 (*)。在操作人员输入敏感数据时，如口令，适合使用这种功能。它不会掩蔽Value输出端上输出的字符串。默认值为False。

备注

弹出对话框的默认位置大约位于工作区中心。如果移动弹出对话框，下次它会弹出到新位置。

错误信息对话框的标题文本与Int32 Input对象标题相同。

只使用键盘对弹出对话框作出响应：在对话框弹出时，开始输入信息，使用Enter和Esc键。使用Tab键在输入字段和按钮之间移动，然后使用Space栏选择按钮。

只有在程序运行时才显示弹出对话框和错误对话框。在显示弹出对话框时，整个程序会暂停执行，在对话框关闭时继续执行。

位置

Data [image] Dialog Box [image] Int32 Input

另请参阅

File Name Selection, List Box, Message Box, Real64 Input, Text Input, UserObject和对象菜单

使用数据输入对话框


Int64

输出8字节的整数标量或1D数组常数的对象。

用途

使用Int64设置整数常数或获得用户输入。点击输入字段，输入一个值。

范例

使用Int64作为面板视图上的提示，把Int64对象的名字变成提示，如Enter the number of seconds to delay:。用户在输入字段中填写请求的信息。

在Int64中输入公式1024*1024，Int64就会计算结果。

属性

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

 ArraySize: - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

 Stepping Category: - 数据形状为 1D 时无效。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

  • EnableStepping - 在这一属性为True时，步长控制出现在输入字段的右端，允许滚动所有值。默认值为False。

  • DetentSize - 在EnableStepping属性为 True 时，当使用步进控制滚动所有值时，这会设置各个值之间的步长。默认值为 1。

 Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

 InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat:

 Global Format - 使用默认格式。默认值为启动 on。

 Integer: - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个整数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段总是一个标量，即使Int32 配置成数组。

关于Int64 和 执行模式

表示整数时Int64具有最长的精度。Agilent VEE 提供了两个内置的数字常数来表示最大的和最小的int64: MaxInt64 和 MinInt64。在不同执行模式下，常数会被解释为不同的类型。下表给出了一个范例。

常数 | 执行模式 VEE 8 | 执行模式 VEE 7 | 执行模式 VEE 6 | 执行模式 VEE 4&5
1 | Int32 | Int32 | Int32 | Real
1G | Real64 | Real64 | Real | Real
2147483648 (最大的Int32 + 1) | Int64 | Real64 | Real | Real
2147483647 (最大的Int32) | Int32 | Real64 | Real | Real
9223372036854775808 (最大的Int64 + 1) | Real64 | Real64 | Real | Real
9223372036854775807 (最大的Int64) | Int64 | Real64 | Real | Real
-9223372036854775808 | Real64* | Real64 | Real | Real
MinInt64** | Int64 | Int64 | Int64 | Int64

* 如果你想让 Agilent VEE 把 -9223372036854775808 看作Int64, 请使用内置常数MinInt64。

** MinInt64 和 MaxInt64 是俩个内置数字常数，且总是被当作Int64类型的常数来操作。用户可以在任何执行模式下使用MinInt64 和 MaxInt64。

位置

Data [image] Constant [image] Int64

另请参阅

Alloc Int64, Complex, Constant, Coord, Date/Time, Selection Control, Default Preferences, UInt8, Int16, Int32, PComplex, Real32, Real64, Text, 和 Toggle Control.

使用数据常数


Int32 Knob

输出旋钮整数值的对象。

用途

使用Int32 Knob输入Int32值。Int32 Knob特别适合面板视图。

Open View参数

open view显示旋钮当前值、最小值、最大值和旋钮控制字段。

属性

Orientation - 设置怎样显示Knob。默认值为Horizontal。

 ShowDigitalDisplay - 如果这一属性为True，那么会在对象open view底部的编辑字段中显示旋钮的当前值。在修改这个值时，旋钮的位置会发生变化。默认值为True。

ShowTic - 控制标度的tic号和标注的可视性。默认值为True。

 LabelSpacing: - 控制标度值中是否标注tic号。默认值为EveryOtherTic。

 DetentSize: - 设置Knob提供的各个值之间的距离。如果输入其它值，那么它们会舍入到最近的定位器。任何实数Detents都会截短到Int32。默认值为1。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

Number Format - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

备注

Initialization 最常用的用途是初始化 UserObject 内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的 Default Value 控制端。

可以为Default Value, Reset, Enable Editing, Disable Editing, MaxValue, MinValue和Detents 添加控制输入：

Default Value 输入可以以程序化方式改变当前值。这一输入要求一个Int32 Scalar值。

Reset输入可以以程序化方式把值设为零。忽略 Reset 输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在open view中改变当前值、最小值和最大值。

The MaxValue和MinValue输入允许以程序化方式设置最小值和最大值字段。这些输入要求实数标量值，然后转换成Int32。

Detents输入以程序化方式设置定位器值。

位置

Data [image] Continuous [image] Int32 Knob

另请参阅

Complex, Selection Control, Int32, Int32 Slider, PComplex, Real64, Real64 Knob, Text, Toggle Control和对象菜单

使用数据滑尺和旋钮


Int32 Slider

输出滑尺整数值的对象。

用途

使用Int32 Slider输出Int32值。Int32 Slider特别适合用于面板视图中。

Open View参数

open view显示滑尺值、最小值、最大值和滑尺控制字段。

属性

Orientation - 设置怎样显示Slider。默认值为Vertical。

 ShowDigitalDisplay - 如果这一属性为True，那么会在对象open view底部的编辑字段中显示滑尺的当前值。在修改这个值时，滑尺的位置会发生变化。默认值为True。

ShowTics - 如果这一属性为True，滑尺显示最小值和最大值之间的值的标志和标注。默认值为True。对VEE 4.0版以前的程序，默认值为False。

 LabelSpacing: - 控制标度值上标注的tic号的可视性。默认值为Every Other Tic。

 Detent Size: - 设置Slider提供的各个值之间的距离。如果输入其它值，那么它们会舍入到最近的定位器。任何实数Detents都会截短到Int32。默认值为1。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a),和Binary (如#B00101010)。默认值为Decimal。

备注

Initialize 最常用的用途是初始化 UserObject 内部的值。设置初始值的另一种方法是使用 Default Value 控制端。

可以为Default Value, Reset, Enable Editing, Disable Editing, MaxValue, MinValue和Detents 添加控制输入：

Default Value 输入可以以程序化方式改变当前值。这一输入要求一个 Int32 Scalar值。

Reset输入可以以程序化方式把值设为零。忽略 Reset 输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在open view中改变当前值、最小值和最大值。

The MaxValue和MinValue输入允许以程序化方式设置最小值和最大值字段。这些输入要求实数标量值，然后转换成Int32。

Detents输入以程序化方式设置定位器值。

位置

Data [image] Continuous [image] Int32 Slider

另请参阅

Complex, Selection Control, Int32, Int32 Knob, PComplex, Real64, Real64 Knob, Real64 Slider, Text, Toggle Control,和对象菜单

使用数据滑尺和旋钮


Interface Event

为VXI、GPIB和串行捕获异步接口事件的对象。

用途

Interface Event对象可以配置成检测各种接口事件。根据配置，对象可能会等待事件，放弃执行其它并行线程，或者会返回一个布尔值(0或1)或接口状态的其它指示符。

如果Interface Event对象已经配置成等待事件，那么在发生事件时，将执行对象。只有在VEE 3执行模式下，这个对象所带的任何线程才优先于任何其它并行线程，将一直执行直到结束。如果Interface Event对象已经配置成返回接口状态指示符，那么包含对象的线程拥有普通优先权，并与任何其它线程一起执行。

Open View参数

Interface - 在这个字段中显示当前选择的接口。点击这个字段显示当前配置的接口列表。对出现在这个列表中的接口，必须使用I/O [image] Instrument Manager...为该接口配置至少一台仪器。它根据逻辑单元(如："hpib7"和"hpib8")区分同一类型的多个接口。

Action - 确定在检测到事件时Interface Event对象的执行行为。

Wait - 等待发生事件。在发生事件时执行对象。这个对象所带的任何线程都要优先于任何其它并行线程，在事件发生时将一直执行直到结束，但它会"被阻塞"，直到事件发生。在发生事件时，输出布尔TRUE (1)或接口事件专用码型。

No Wait - 立即执行，把32位整数指定的配置事件的当前状态放在event输出端。如果事件没有发生，这个值是布尔值FALSE (0)。如果事件已经发生，会返回一个TRUE (1)或一个与接口事件相关的码型。在No Wait配置中，Interface Event对象所带的任何线程将拥有普通执行优先权，将与任何其它线程并行执行。

Event - 允许选择具体接口事件。点击这个字段显示多个选项。对下面每个选项，我们同时描述了Wait和No Wait操作。注意在每种情况下，上面都描述了Wait和No Wait的线程传播优先权。

SRQ - 这是GPIB接口的唯一选项：
-- 如果Action选项是Wait，Interface Event对象会延迟执行，直到GPIB确定服务请求线路。然后它在event输出端放上布尔值TRUE (1)。
-- 如果Action选项是No Wait，且如果事件没有发生，那么会输出布尔值FALSE (0)。如果事件已经发生，那么event端输出布尔值TRUE (1)。

DAV - (Data Available) 这是串行接口的唯一选项。
-- 如果Action选项是Wait，Interface Event对象会延迟执行，直到数据到达接收缓冲器中。接收缓冲器中的字节数量放在event输出端，改变下述对象，从缓冲器中读取字节。
-- 如果Action选项是No Wait，Interface Event对象会立即执行，给出接收缓冲器中来自event输出端的字节数量。

Sys Reset - 在VXI接口上发生系统复位时执行Interface Event对象：
-- 如果Action选项是Wait，在发生系统复位时，event端输出布尔值TRUE (1)。
-- 如果Action选项是No Wait，且如果没有发生系统复位，那么输出FALSE (0)。

Sys Active - 在VXI Resource Manager完成VXI初始化和管理时，它向VXI接口发送Begin Normal Operation (BNO)命令。如果配置了Sys Active，在发生下面的情况时会执行Interface Event对象：
-- 如果Action选项是Wait，在发生BNO命令时 event端输出布尔值TRUE (1)。
-- 如果Action选项是No Wait，且如果没有发生事件，那么输出FALSE (0)。

Sys Deactive - 在正常VXI操作中止时，向接口发送Abort Normal Operation (ANO)或End Normal Operation (ENO)命令。如果配置了Sys Deactive，那么在发生下面的情况时会执行Interface Event对象：
-- 如果Action选项是Wait，在发生ANO或 ENO命令时event端输出布尔值TRUE (1)。
-- 如果Action选项是No Wait，且如果没有发生事件，那么输出FALSE (0)。

TTL Trig - 在配置TTL Trig时，Interface Event对象"监测"VXI TTL触发线：
-- 如果Action选项是Wait，在VXI设备确认VXI背板中八条TTL触发线的一条或多条触发线时，将执行Interface Event对象，把一个32位整数放在event输出端。这个整数只有低字节有效。它是一个码型，显示了八条TTL触发线中哪条触发线活动(位0与触发线0对应，位7与触发线7对应)。每个位集合(1)表明已经触发相应的线。例如，00010001表明已经触发TTL线0和4。
-- 如果Action选项是No Wait，且如果没有发生触发，那么输出布尔值FALSE (0)。

ECL Trig - 在配置ECL Trig时，Interface Event对象"监测"VXI ECL触发线：
-- 如果Action选项是Wait，在VXI设备确认VXI背板中四条ECL触发线的一条或多条触发线时，将执行Interface Event对象，把一个32位整数放在event输出端。这个整数的低字节是一个码型，显示了四条ECL触发线中哪条触发线活动。(位 0与触发线0对应，位3与触发线3对应)。每个位集合(1)表明已经触发相应的线。例如，00001001表明已经触发ECL线0和3。
-- 如果Action选项是No Wait，且如果没有发生触发，那么输出布尔值FALSE (0)。注意某些VXI卡槽可能会选择只实现两条ECL触发线。

EXT Trig - 在配置EXT Trig时，Interface Event对象"监测"VXI EXT触发线：
-- 如果Action选项是Wait，在外部设备确认嵌入式控制器的"Trig In" 输入时，将执行Interface Event对象。最多可以发生四个外部触发输入。在执行Interface Event对象时，event端输出一个32位整数。这个整数的低字节是一个码型，显示了四条EXT触发线中哪条触发线活动。(位 0与触发线0对应，位3与触发线3对应)。每个位集合(1)表明已经触发相应的线。例如，00001001表明已经触发EXT线0和 3。
-- 如果Action选项是No Wait，且如果没有发生触发，那么输出布尔值 FALSE (0)。某些控制器实现方案可能没有外部触发输入。

Unknown Interrupt - 如果配置Unknown Interrupt，Interface Event对象会检查没有处在VXI控制器伺服器区域中的VME或VXI设备产生的任何VME中断：
-- 如果Action选项是Wait，这种中断会导致执行Interface Event对象。返回的32位值是设备进行中断确认(IACK)时放在VXI总线上的值。
-- 如果Action选项是No Wait，且如果没有发生中断，那么输出布尔值FALSE (0)。

Unknown Signal - 如果配置Unknown Signal，Interface Event对象会检查没有处在VXI控制器伺服器区域中的VXI设备产生的任何信号寄存写入：
-- 如果Action选项是Wait，这种信号会导致执行Interface Event对象。返回的32位值是信号写入寄存器的内容。
-- 如果Action选项是No Wait，且如果没有发生信号，那么输出布尔值FALSE (0)。

备注

Interface Event对象的执行行为可以是异步的，也可以是同步的，具体取决于选择的Action参数。NO WAIT指定同步轮询操作。对象会立即执行，任何所附线程的优先权与目前正在执行的所有其它线程相同。选择WAIT会导致Interface Event对象一直等到事件发生。对象所带的任何线程的优先权要更高，将一直执行到结束，而阻塞所有其它并发执行的线程。

Timeout Control Pin - 设置对象试图获得锁定接口为事件服务前等待的超时周期。如果没有采集接口，那么会发生错误。

位置

I/O [image] Advanced I/O [image] Interface Event

另请参阅

Instrument Event和Interface Operations.

轮询GPIB仪器


Interface Operations

使用事务通过GPIB、VXI和串行方式发送低级接口命令和数据的对象。

Interface Operations应该用于接口专用任务或用于通过Direct I/O或Instrument Driver与设备通信不能提供必要的控制等级的特殊情况。

用途

对低级操作使用Interface Operations，如：

发送非标准GPIB地址序列。

发送GPIB组触发消息或拉VXI触发线。

在ATN为真或ATN不为真时通过GPIB发送任意字节。

向VXI或GPIB接口发送清除命令和复位命令。

发送IEEE 488.1定义的多行消息。

把接口锁定和解锁消息发送到串口。

为使用Interface Operations，必须添加一个或多个事务。为此，在对象菜单中点击Add Trans。事务作为多行文本列在对象的open view中。为编辑事务，双击事务，使用出现的对话框编辑事务。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

属性

Interface: - 显示总线配置，允许变成另一个接口。使用逻辑单元区分同一类型的多个接口 (如"hpib7"和"hpib8")。

 Timeout: - 设置超时时间。可以使用控制输入端设置。

快捷方式

为迅速插入一个事务，把光标放在事务上。按CTRL+O会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按CTRL+K。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按CTRL+N或CTRL+P。

位置

I/O [image] Advanced I/O [image] Interface Operations

另请参阅

Advanced I/O, Bus I/O Monitor, Formula, Instrument Manager和编辑事务


Interface Properties

配置各种接口地址的一个对话框。

用途

可以使用Interface Properties对话框，配置或编辑GPIB, VXI, Serial或GPIO接口地址。

Open View参数

从Interface Properties对话框中配置下述参数：

Interface: - 这是要配置的接口类型(默认接口类型是从Instrument List中选择的接口类型)。

Address: - 这是希望配置或编辑的逻辑单元编号。

Gateway: - 在VEE流程必须访问连接到远程计算机的仪器时，指定局域网网关的主机名称。默认值是This host。

备注

从8.0版起，VEE开始逐步淘汰旧的不一致的I/O设备(混合SICL & VISA)，以便在声明/使用I/O设备时实现更加统一的方法(VISA)。这可以保持向下兼容能力，同时�鼓励�用户使用新式设备。

用户旧程序I/O与VEE 8.0以前完全相同。

位置

I/O [image] Instrument Manager...

从Instrument Manager对话框的Instrument List中，选择(高亮度显示)其中一个接口图标，如GPIB, VXI, Serial或GPIO，然后点击Properties按钮，出现Interface Properties对话框。

另请参阅

Advanced I/O, Advanced Instrument Properties, Instrument Properties, 添加仪器配置和编辑仪器配置。


IP Address

检索主机的IP地址。

位置

System [image] Environment [image] IP Address


Is Leap Year?

如果是闰年，则返回布尔值真。

位置

System [image] DateTime [image] Is Leap Year?


Is Path Rooted?

根据提供的路径是不是根路径来检索布尔值。例如，vee\src不是根路径，而\vee\src则是根路径。

位置

System [image] Path [image] Is Path Rooted?


JCT

从激活的最新数据输入(多个输入之一)中输出值的对象。

用途

使用JCT，如带连线的OR，把两个或多个对象的数据输出端连接到另一个对象的数据输入端。JCT通常用于反馈环路中，实现数据初始化。JCT以被动方式传送数据。在VEE 4.0及更高版本中，使用反馈的线程中要求JCT。

备注

JCT用来设置初始条件。

JCT的输入是异步数据输入。这意味着在任何数据输入激活的任何时候，JCT都会运行。在JCT运行前激活JCT的一个以上的端时，将按收到的顺序对进入的数据排队。然后JCT会重复激活其输出，这在很大程度上与迭代器类似，直到数据队列为空。如果反馈环路激活输入数据端，那么将忽略多个激活。

JCT的常见用途之一是反馈环路，它先通过其中一个输入提供初始值，然后通过一个或多个其它数据输入提供反馈值。

位置

Flow [image] Junction

另请参阅

DeMultiplexer, Properties (对象)和对象菜单


Join

使用文本分隔符把由文本值组成的数组联接起来。例如，数值1; 2; 3;和4。分隔符使用逗号，结果为1, 2, 3, 4。这为创建CSV文件提供了一种快捷方式。

位置

System [image] String   [image] Join


Junction

参阅JCT。


Label

用来在Panel View上放一个文本标记的对象。

用途

使用Label，在Panel View上创建标记或标题。这个对象不需执行，其背景颜色混合到Panel View的背景颜色中。

Open View

显示当前Label串。默认值是Label。为改变Label，使用对象菜单中的Properties改变对象标题，或使用数据输入。

属性

Justification - 指定文本在对象边框内部的布局。默认值是Left。

备注

Label默认的对象颜色与默认的Panel View颜色相同，以便Label背景颜色混合到Panel View中。

在Panel View上，Label对象默认的Border设置是None。

如果使用标记值的数据输入，注意Label对象在运行时不会自动确定大小，以适应字符串的长度。如果字符串比Label对象长，Label会削短数据输入上发给它的字符串。一定要使Label对象长度足够长，以便在使用数据输入时适应字符串。

位置

Display [image] Label

另请参阅

Beep和Text

到标记区域


Last Directory Access Time

检索最后一次访问目录的时间。

位置

System [image] Directory [image] Last Directory Access Time


Last Directory Write Time

检索最后一次修改指定目录的时间。

位置

System [image] Directory [image] Last Directory Write Time


Last Error

一个View菜单项，允许检索VEE中程序生成的最后Error对话框。

用途

Last Error允许检索VEE程序中生成的最后Error对话框。可以在Error对话框上点击Go To按钮，VEE工作空间中将出现VEE程序的细节视图。只要程序保持在Error状态，那么就会高亮度显示发生错误的UserObject或UserFunction。如果程序不再处于Error状态，全如在程序已经停止时，那么将不再高亮度显示对象。

对话框信息

Last Error对话框包含下述信息和按钮：

错误信息和错误编号 - Last Error对话框的主窗口将简要解释生成的错误，并识别发生错误的Object Title和Object Type。另外还将识别Error number。

Go To - 点击Go To按钮，出现VEE程序的细节视图，如果程序仍处于Error状态，那么将高亮度显示发生错误的UserObject或UserFunction。

Call Stack - 点击Call-Stack按钮，出现Call Stack对话框。Call Stack对话框可以包含与程序中发生Error的地方有关的更多信息。

Close - 关闭Error对话框。

Help - 点击Help打开Help标题，提供与收到的Error number有关的更多信息。

备注

使用Last Error不能检索Error pin捕获和处理的错误。

位置

View [image] Last Error

另请参阅

Error Output (对象菜单), Call Stack, errorInfo(),和Raise Error.


List Box

显示弹出对话框、向用户显示一个列表的对象。

用途

使用List Box向用户显示一条列表消息。用户选择对话框中的一个(或多个)选项作出响应。可以定制按钮上的文本。

在弹出对话框中，在选中一个项目时，Text输出端输出选择结果，Index输出端输出列表索引。在选中多个项目时，Text输出端输出由文本组成的数组，Indices输出端输出由索引组成的数组。

Open View

  • List Entries Edit ... - 允许编辑List Box弹出对话框上显示的选项列表。可以作为数据输入添加这个参数。

  • Default Entry - 允许从List Entries弹出对话框上出现的选项中选择默认项。可以作为数据输入添加这个参数。

  • Allow Multiple Selections - 在选中这个复选框时，用户可以从列表中选择一个或多个选项。同时在弹出对话框中增加了另两个按钮：Select All和Clear All。

属性

  • PopupTimeoutEnabled - 在这一属性为True时，Timeout输出端添加到对象中。默认值为False。

  • PopUpDuration - 设置弹出对话框显示的时间长度。在过了这段时间之后，对话框超时，Timeout输出端输出值1。如果 Timeout端执行，那么任何其它输出端都没有数据。只有在选中Timeout Enabled复选框时才能使用这个字段。默认值为60 seconds。

  • PopupOKLabel - 在True时把按钮标注设置为OK。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupCancelLabel - 在True时把按钮标注设置为Cancel。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupSelectAllLabel - 只有在选中Allow Multiple Selections时才能使用。

  • PopupClearAllLabel - 只有在选中Allow Multiple Selections时才能使用。

  • PopupPasswordMasking - 在这一属性为True时，输入文本表现为星号 (*)。在操作人员输入敏感数据时，如口令，适合使用这种功能。它不会掩蔽Value输出端上输出的字符串。默认值为False。

  • PopupNumDisplayedItems - 设置在没有滚动条的情况下List Box将显示的最大行数。如果这个值大于列表项数，那么将调节弹出对话框，包含列表项数 (没有空行)。默认值为10。

备注

弹出对话框的默认位置大约位于工作区中心。如果移动弹出对话框，下次它会弹出到新位置。

只使用键盘对弹出对话框作出响应：在对话框弹出时，开始输入信息，使用Enter和Esc键。使用Tab键在输入字段和按钮之间移动，然后使用Space栏选择按钮。

只有在程序运行时才显示弹出对话框和错误对话框。在显示弹出对话框时，整个程序会暂停执行，在对话框关闭时继续执行。

位置

Data [image] Dialog Box [image] List Box

另请参阅

File Name Selection, Message Box, Int32 Input, Real64 Input, Text Input和UserObject。

关于内置对话框对象


List

参阅Selection Control。


Logging AlphaNumeric

显示Scalar或Array 1D字母数字数据的对象。Logging AlphaNumeric允许在不重写显示画面的情况下显示数据。

用途

使用Logging AlphaNumeric作为以前值的历史显示连续输入(Scalar或Array 1D)。

对象菜单

Clear - 清除Logging AlphaNumeric上显示的所有数据。Clear可以添加为控制输入。

属性

ClearAtPreRun - 在这一属性为True时，在PreRun时清除Logging AlphaNumeric的内容。默认值为True。

 ClearAtActivate - 在这一属性为True时，在Activate时清除Logging AlphaNumeric 的内容。默认值为True。

Buffer Size - 指定显示缓冲器保持的行数。如果输入Logging AlphaNumeric的行数大于该行数，那么将保留最新的值，覆盖以前的值。默认值为256。

 NumberFormat - 如果Global Format关闭，那么指定该对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

  • Real: - 如果Global Format关闭，那么指定该对象上显示的整数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Sat 01/Jan/1994 17:01:38)。默认值为Standard。

备注

如果Logging AlphaNumeric对象当前的宽度太小，而不能显示默认精度的数字类型，那么会显示一行星号 (***)。调整对象大小，返回程序，显示数据。

显示的ASCII值0-31取决于字体，可能不能读。

在某些平台(操作系统)上可能不能正确显示长于2048字符的文本字符串。在任何平台上都不能正确显示长于32767字符的文本字符串。

位置

Display [image] Logging AlphaNumeric

另请参阅

AlphaNumeric, 默认首选项和对象菜单

显示一串对数值


Machine Name

检索主机的名称。

位置

System [image] Environment [image] Machine Name


Magnitude Spectrum

以图形方式显示频谱的一个对象。

用途

使用Magnitude Spectrum在频域中显示频谱或波形。波形通过傅立叶变换自动转换成频谱。X轴是输入频谱的取样单位 (一般是频率)。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Mag - Y轴的名称。

Trace1 - 第一条轨迹的名称。

Freq - X轴的名称。

对象菜单

Auto Scale [image] - 点击这些菜单项，立即把画面重新定标成显示整条轨迹。(可以添加为控制端，或使用Scales属性栏设置成在采集数据后自动重新定标画面。)

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用�橡皮圈�框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Y轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

 ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

 ShowScaleLabels - 在Open View中，控制标度轴标为H的取值的可视性。默认值为True。

 ShowScrollBars - 在Open View中，控制X和Y标度上的滚动条。默认值为True。

 ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

 EditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType - 默认值为Lines。

NumMarkers - 图形中显示的标尺数量。为把标尺移动到一条不同的轨迹上，进入Open View，点击画面底部附近标尺值左面的按钮。按钮顺序通过不同轨迹的不同线型和颜色。

 MarkerInterpolate - 在属性为True时，可以把标尺放在显示的数据点之间。通过线性内插计算显示的标尺值。默认值为False。

DisplayBackColor - 允许从调色板中选择显示区域的颜色。在画面出现在细节视图和面板视图中时，可以选择不同的颜色。

ScaleLabelFont - 允许从系统上提供的字体列表中选择标度标记的字体。标度标记文本的默认字体是Screen Element: Graph Scale Label Text中Fonts栏上Default Preferences中设置的字体。

Traces Group: (每条轨迹一个)

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这个轨迹定标的标度。

Scales 属性： (每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

ScaleNumberFormat: (X和Y标度及任何其它Y标度出现的属性。)

Global Format - 使用默认格式。默认值为True。

Real - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入类型必须是Spectrum, Waveform,或Coord (Scalar或Array 1D)。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。.

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到n的整数，其中0不绘图，n是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

可以添加Print和Plot控制输入端。在Windows上，这些输入使用Windows的Print Setup对话框(File [image] Print Setup�)，其行为方式相同。如果当前Printer Setup处于Print to File模式，可以指定目的文件或目录名称，作为Plot控制输入上的字符串数据。如果没有给出控制输入值，那么将使用Printer Setup中指定的文件或目录名。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Spectrum (Freq) [image] Magnitude Spectrum

另请参阅

Magnitude vs Phase, Phase Spectrum, Polar Plot, 默认首选项, Spectrum (Freq),和Waveform (Time)。

显示波形, 在显示画面中设置标尺, 获得和设置标尺属性,和对 象菜单


Magnitude vs Phase

显示复合频谱的幅度对相位的极坐标图的一个对象。

用途

使用Magnitude vs Phase显示频谱或波形。波形通过傅立叶变换自动转换成频谱。每个数据点的Radius是频谱的幅度；Angle是频谱在当前触发单元中的相位。

可以使用对象菜单上的Properties，在Polar和Smith Chart模式之间变换。可以从Lines变成Smith Chart。

对Polar栅格类型，标尺值以极坐标格式显示(r:radius, a:angle)，对Smith Chart和Inv Smith Chart栅格类型，标尺值以复阻抗或导纳格式显示。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Mag - 半径标度的名称。

Span: - 显示画面的垂直维度。在原点位于显示画面中心时，Span是半径的两倍。这个参数控制着显示画面的标度。默认值为2。

Trace1 - 第一条轨迹的名称。

Polar Reference Location - 指定显示的极坐标图的部分。其速度要比滚动到某个区域快。在输入字段中改变参考点，可以把指定的图表部分(如Center)滚动到指定的位置(如(0, @0))。

Ref Radius: - 粗体格线圆圈的半径值。

对象菜单

Auto Scale [image] Auto Scale - 立即把画面重新定标成显示整条轨迹。Auto Scale会把极坐标的参考位置复位到Center (0,@0)。(可以添加为控制端，或使用Scales属性栏设置成在采集数据后自动重新定标画面。)

Auto Scale X - 不能使用。

Auto Scale Y - 不能使用。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用�橡皮圈�框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Radius轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

 ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

 ShowScrollBars - 在Open View中，控制标度上标度栏的可视性。默认值为True。

 ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

 EditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType: - 默认值为Lines。在主要格上显示线，在次要格上显示tic号。X轴和Y轴显示为粗线。

Smith Chart - 在Smith图表中显示数据 (也称为"阻抗图表")。标尺值给定为实数阻抗和虚数阻抗。粗体圆是"参考半径"，其线性半径值在画面的右下角显示。如果输入数据已经归一化，Smith Chart栅格和标尺只表示正确定标的值。为归一化数据，把所有幅度除以特性阻抗。

Inv Smith Chart - 在反Smith图表中显示数据(也称为"导纳图表")。反Smith图表的使用方式与Smith图表相同，但栅格和标尺值是导纳值，而不是阻抗值。

NumMarkers - 图形中显示的标尺数量。为把标尺移动到一条不同的轨迹上，进入Open View，点击画面底部附近标尺值左面的按钮。按钮顺序通过不同轨迹的不同线型和颜色。

 MarkerInterpolate - 在属性为True时，可以把标尺放在显示的数据点之间。通过线性内插计算显示的标尺值。默认值为False。

DisplayBackColor - 允许从调色板中选择显示区域的颜色。在画面出现在细节视图和面板视图中时，可以选择不同的颜色。

Traces Group: (每条轨迹一个)

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值为yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这个轨迹定标的标度。

Scales 属性： (每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Radius标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项变成False，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Vertical Span: - 显示画面的垂直维度。默认值为2。

Scale Color - 任意背景栅格或tic号的颜色。默认值为Gray。

Reference Corner: - 指定显示的极坐标图的部分。其速度要比滚动到某个区域快。改变Reference Value，可以把指定的图表部分(如Center)滚动到指定的位置(如(0, @0))。默认值为Center。

Reference Value: - 定义了极坐标图中使用的数字极坐标值。默认值为(0, @0)。

备注

输入类型必须是Spectrum, Waveform,或Coord (Scalar或Array 1D)。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。.

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到n的整数，其中0不绘图，n是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

可以添加Print和Plot控制输入端。在Windows上，这些输入使用Windows的Print Setup对话框(File [image] Print Setup�)，其行为方式相同。如果当前Printer Setup处于Print to File模式，可以指定目的文件或目录名称，作为Plot控制输入上的字符串数据。如果没有给出控制输入值，那么将使用Printer Setup中指定的文件或目录名。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。在General栏中，为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Spectrum (Freq) [image] Magnitude vs Phase (Polar)

Display [image] Spectrum (Freq) [image] Magnitude vs Phase (Smith)

另请参阅

Magnitude Spectrum, Phase Spectrum, Polar Plot, Spectrum (Freq),和默认首选项。

显示波形, 在显示画面中设置标尺, 获得和设置标尺属性,和对象菜单


Main

Main是VEE中的根UserObject窗口。

用途

Main窗口是VEE程序中的根UserObject。程序要求使用这个窗口，不能删除。其它UserObject和UserFunction窗口都是从Main窗口中创建的。

如果Main窗口已经最小化或关闭，那么从View菜单中选中它，可以再次打开Main窗口。也可以点击VEE Program Explorer窗口中的Main，重新打开Main窗口。

属性

Title - 显示程序的当前标题。在一个对象放在面板视图中时，可以编辑标题。在使用-r命令行选项运行程序时，会在程序的标题栏中显示标题。默认值为Untitled。

ShowPanelonExecute: - 在Main面板视图中添加一个对象时，可以使用这个属性。在ShowPanelonExecute打开时，Main面板视图会在运行程序时出现在Execution窗口中。

TrigMode组：

Degrees | Radians | Gradians - 指定主程序中使用的三角单位。在选择Radians时，三角计算的执行速度最快。这一设置不影响UserObjects使用的Trig Mode。

Convert Infinity to 9.9E37 on Binary Reads - 如果选中这个复选框，在仪器(或包含仪器数据的文件)返回+INF (+无穷大), -INF (-无穷大)或NAN (非数字)的二进制读数时，VEE会转换读数。这种转换会在一定程度上会降慢每次进行二进制读取的I/O速度。

如果从遵守SCPI标准的仪器中获得数据，并且把这些数据输出到图形显示对象上，应选中这个对话框。如果没有选中这个复选框，且+INF, -INF或NAN被发送到一个显示对象上，那么会收到浮点异常错误。如果选中这个对话框，图表中的尖峰会表明+INF, -INF或NAN值。

备注

如果还没有关闭Main窗口，它还会出现在Window菜单中：

Window [image] 1 Main

位置

View [image] Main

另请参阅

Arrange Icons, Cascade, Close All, Minimize All, Program Explorer, Tile Horizontally, Tile Vertically和Properties (对象)


Make UserFunction (Object menu)

Make UserFunction (对象菜单)

一个菜单选项，只有在UserObject的对象菜单中才能找到这个选项，用来把UserObject转换成UserFunction。

用途

使用Make UserFunction把UserObject转换成UserFunction。UserObject标题区域中显示的名称变成UserFunction名称。UserObject消失，代以Call Function对象。

备注

如果UserObject标题区域中的名称对UserFunction是一个无效名称，或没有改变名称"UserObject"，那么系统会提示为UserObject输入一个新名称。

有效的UserFunction名称必须以希腊字母阿尔法开头，后面跟着字母数字字符或下划线。

位置

在对象菜单上(仅适用于UserObjects) [image] Make UserFunction

另请参阅

Call, Edit UserFunction, hidePanel(), showPanel(), UserFunction和UserObject。


Make UserObject

一个菜单选项，只有在Edit UserFunction的对象菜单中才能找到这个选项，用来把UserFunction重新转换回到UserObject。

用途

使用Make UserObject把UserFunction重新转换回到UserObject。

备注

Make UserObject大体上是Make UserFunction的逆操作。尽管Make UserObject把UserFunction转换回到UserObject，但任何Call Function对象仍然存在，在程序的主上下文中仍保持连接。但UserFunction本身会消失。

位置

Edit [image] Edit UserFunction [image] Make UserObject (在UserFunction对象菜单上)

另请参阅

Edit UserFunction, Make UserFunction (对象菜单), UserFunction和UserObject。


math_syntax

下面列出了VEE的数学操作和数学函数的帮助页。

abs(x)
acos(x)
acosh(x)
acot(x)
acoth(x)
a + b (add)
Ai(x)
a ~= b (almost equal to)
a AND b
+ - * /
Array
asin(x)
asinh(x)
atan(x)
atan2(y,x)
atanh(x)
bartlet(x)
Bessel
beta(x,y)
Bi(x)
binomial(a,b)
bit(x,n)
bitAnd(x,y)
bitCmpl(x)
bitOr(x,y)
bits(str)
bitShift(x,y)
Bitwise
bitXor(x,y)
blackman(x)
Calculus
ceil(x)
charToInt(a)
clearBit(x,n)
clipLower (x,a)
clipUpper (x,a)
cofactor(x, row,col)
comb(n,r)
Comma Operator
Complex Parts
concat(x,y)
conj(x)
convolve(a,b)
cos(x)
cosh(x)
cot(x)
coth(x)
cubert(x)
Data Filtering
defIntegral (x,a,b)
deriv(x, order)
derivAt(x, order,pt)
det(x)
a div b (truncated division)
a / b (divide)
dmyToDate (d,m,y)
a == b (equal to)
erf(x)
erfc(x)
exp(x)
exp10(x)
a ^ b (exponent)
exponential regression
factorial(n)
fft(x)
floor(x)
fracPart(x)
Freq Distribution
gamma(x)
Generate
a > b (greater than)
a >= b (greater than or equal to)
hamming(x)
hanning(x)
hmsToHour (h,m,s)
hmsToSec (h,m,s)
Hyper Bessel
Hyper Trig
i0(x)
i1(x)
identity(x)
ifft(x)
im(x)
init(x,val)
integral(x)
intPart(x)
intToChar(a)
inverse(x)
j(x)
j0(x)
j1(x)
jn(x,n)
k0(x)
k1(x)
a < b (less than)
a <= b (less than or equal to)
linear regression
log(x)
log10(x)
logarithmic regression
Logical
logMagDist (x,from,thru, logStep)
logRamp (numElem, from,thru)
mag(x)
magDist(x, from,thru, step)
matDivide (numer, denom)
matMultiply (A,B)
Matrix
max(x)
maxIndex(x)
maxX(x)
mday(aDate)
mean(x)
meanSmooth (x,numPts)
median(x)
min(x)
minIndex(x)
minor(x,row, col)
minX(x)
a mod b (modulo)
mode(x)
month(aDate)
movingAvg (x,numPts)
a * b (multiply)
NOT a
a != b (not equal to)
now()
a OR b
ordinal(x)
perm(n,r)
phase(x)
poly(x,vec)
Polynomial
polynomial regression
polySmooth (x)
Power
power curve regression
product(x)
ramp (numElem, from,thru)
random (low,high)
randomize (x,low,high)
randomSeed (seed)
re(x)
Real Parts
recip(x)
rect(x)
Regression
rms(x)
rotate(x, numElem)
round(x)
sdev(x)
setBit(x,n)
Signal Processing
signof(x)
sin(x)
sinh(x)
sort(x, direction, field)
sq(x)
sqrt(x)
Statistics
strDown(str)
strFromLen (str,from,len)
strFromThru (str,from, thru)
String
strLen(str)
strPosChar (str,char)
strPosStr (str1,str2)
strRev(str)
strTrim (str,trimlist)
strUp(str)
a - b (subtract)
sum(x)
tan(x)
tanh(x)
Time & Date
totSize(x)
transpose(x)
Triadic Operator
Trig
vari(x)
wday(aDate)
xcorrelate (a,b)
xlogRamp (numElem, from,thru)
a XOR b
xramp (numElem, from,thru)
y0(x)
y1(x)
year(aDate)
yn(x,n)


MATLAB Script

MATLAB 脚本

使用MATLAB Script命令定义的操作调用MATLAB Script引擎的对象。VEE数据可以传送到MATLAB Script引擎，也可以从MATLAB Script引擎返回VEE数据。

MATLAB帮助

您读取的帮助内容描述了怎样从VEE中调用MATLAB。它没有解释怎样编写MATLAB程序或一旦调用后怎样处理MATLAB。MATLAB及其脚本语言帮助信息以两种方式提供：

VEE的Function & Object Browser在底部有一个Help按钮。在已经选择了一个MATLAB函数时点击Help按钮，启动MATLAB Help系统，显示该函数的相关内容。

MATLAB对象菜单 (点击鼠标右键弹出菜单)包含MATLAB Help选项。(注："Help"和"MATLAB Help"都位于这个菜单上。) 点击MATLAB Help，启动MATLAB Help系统。

如果MATLAB Script对象是从VEE的Device菜单中创建的，那么将使用主MATLAB HelpDesk窗口启动帮助系统。如果MATLAB Script对象是从VEE的Function & Object Browser中创建的，那么将使用创建MATLAB Script对象时选择的函数标题启动帮助系统。

用途

使用MATLAB Script对象，在VEE内部利用MATLAB软件的处理能力。这个对象与VEE Formula对象类似。可以在公式字段中输入MATLAB Script命令，可以使用输入端和输出端传送数据。

在从Function & Object Browser中创建MATLAB Script对象时，可以使用许多预先定义的函数。Device菜单中提供的默认对象也可能有两个输入、一个输出和一个范例脚本 (X=A+B)。可以修改任何范例对象，使其拥有不同数量的输入端或输出端及一套不同的MATLAB Script命令。在VEE中提供的MATLAB Script引擎提供了大约1500个函数。MATLAB信号处理工具箱提供了大约另外200种函数。VEE的Function & Object Browser显示了大约500种最流行的函数。如需与所有MATLAB函数有关的信息，请查阅MATLAB HelpDesk。

MATLAB Script中的变量名称区分大小写，但VEE中的变量名称不区分大小写。换句说知，在VEE中，"A"和"a"指同一变量，而在MATLAB中则指不同的变量。在MATLAB Script中编写公式时要记住这一点。例如，如果VEE数据端命名为"A"，那么在MATLAB Script中应使用"A"，而不是"a"。

VEE对MATLAB Script命令不执行任何语法检查。如果MATLAB Script对象包含语法错误，那么只有在调用MATLAB Script引擎时才能发现这些错误。MATLAB报告的任何错误映射到VEE错误591或592上。如果MATLAB报告任何警报，那么其会显示为VEE警报信息。

执行的第一个MATLAB Script对象会打开一个MATLAB会话。MATLAB Script对象的所有其它实例共享同一会话。因此，MATLAB Script对象可以共享MATLAB工作空间中的全局变量。

这个VEE对象提供的MATLAB Script不支持MATLAB函数定义功能。

数据备注

只允许某些VEE数据类型作为MATLAB Script输入。可以使用输入端数据类型限制，保证把VEE输入数据转换成支持的类型。例如，假设使用的是Int32数据，MATLAB Script对象不接受整数数据，但接受Real64数据。可以双击输入端，选择Real64作为 Required Type。通过设置这一限制，输入端会自动把入局的Int32数据晋级为Real64，然后再传送给MATLAB。 VEE还提供某些自动数组转换功能，提高使用VEE 1D数组的方便性。下表描述了VEE数据类型与MATLAB数据类型的对应关系。

输入端数据

从VEE类型 | 到MATLAB类型 | 备注
文本标量 | 字符数组 | 晋级到长度为(1 x n)的数组，其中n是VEE字符串的长度
文本一维数组 | 字符数组 | 变成长度为(m x n)的数组，其中m是VEE数组中的要素数量，n是数组中最长的VEE字符串的长度
文本数组, 二维或更多 | -- | 不支持
Real64标量 | 双数组 | 晋级到长度为(1 x1)的数组
Real64数组 | 双数组 | VEE 1D数组晋级到长度为(m x 1)的数组。二维或更大的VEE数组保持原始形状
复标量 | 复数组 | 晋级到长度为(1 x 1)的数组
复数组 | 复数组 | VEE 1D数组晋级到长度为(m x 1)的数组。二维或更大的VEE数组保持原始形状
波形一维数组 | 双数组 | VEE 1D数组晋级到长度为 (m x 1)的数组。波形时基映射丢失

输出端数据

从MATLAB类型 | 到VEE类型 | 备注
空矩阵 | 零 | 没有生成输出容器
长度为(1 x n)的字符数组 | 文本标量 |
长度为(m x n)的字符数组 | 文本一维数组 | 整形为带有 m个要素的一维数组
字符数组, 3D-10D | -- | 不支持
长度为(1 x 1)的双数组 | Rea64标量 |
长度为(m x 1)或(1 x n)的双数组 | Real64一维数组 或 Real64二维数组 | 可以在对象属性中选择自动降级到VEE一维数组。否则，会返回二维数组
双数组, 2D-10D | Real64数组 |
长度为(1 x 1)的复数组 | 复标量 |
长度为(m x 1)或(1 x n)的复数组 | 一维复数组 或 二维复数组 | 可以在对象属性中选择自动降级到VEE一维数组。否则，会返回二维数组
复数组, 2D-10D | 复数组 |

MATLAB Script允许把无穷大(有时会生成无穷大)作为数字值。VEE不允许使用无穷大值。如果MATLAB Script对象试图返回+无穷大、-无穷大或NaN (非数字)的浮点表示，那么调用会失败，生成VEE错误594。

多个MATLAB版本

在VEE使用MATLAB Script引擎前，它检查系统上是否已经注册MATLAB。如果MATLAB已经存在，VEE安装的MATLAB Script引擎不会注册为MATLAB Automation Server。在这种情况下，VEE使用现有的MATLAB，不会干预MATLAB开发环境操作。更重要的是，MATLAB使用它在Path中找到的第一个项目。如果有以前版本的MATLAB，它将在Path中位于VEE安装的MATLAB之前。在这种情况下，会一直先调用旧的MATLAB。

在某些情况下，您可能想注册VEE安装的MATLAB Script引擎，即使此前已有一个版本。(例如，如果以前的MATLAB版本没有信号处理工具箱) 在这种情况下，可以使用下述命令进行手动注册：

<vee_install_dir>\matlab\bin\matlab.exe /regserver

如果以后需要把注册拨回其它MATLAB版本，可以使用/regserver选项执行该版本，也可以每次在运行时、自行重新注册时运行该版MATLAB。

MATLAB 5.3, 6.1, 6.5,和7.0都在VEE 8.0下运行。

位置

Device [image] Function & Object Browser [image] MATLAB Functions

Device [image] MATLAB Script

另请参阅

MATLAB脚本概述


Merge

把程序的内容或保存的一套对象添加到工作区中，同时保持现有的工作区内容。

用途

使用Merge，把以前保存的程序或一套对象组合到VEE工作区的现有程序中。Merge适合从经常使用的函数库中调用以前创建的程序或一套对象。

备注

在把该程序Merge到VEE工作区中时，将不能加载或使用与程序保存的任何Default Preferences (例如Trig Mode)。工作区中当前活动的Default Preferences将保持不变。

不能对UserFunction使用Merge，而是应使用Merge Library。

Merge会出现一个对话框，允许选择希望打开的文件名称。在使用Merge时，对话框指向VEE程序安装目录下的lib目录。

可以使用Merge，加载使用Save或Save As保存的文件。

如果保存的程序有面板视图，面板不会导入到程序中。UserObject的面板视图是输入。

从包含嵌入式I/O配置的程序文件中进行Merge，不会合并任何I/O配置。参阅嵌入式I/O配置和合并。

位置

File [image] Merge

另请参阅

Merge Library, Open, Save, 和Save Objects。

创建UserObject库

从库文件中合并对象和程序


Merge Library

把UserFunction库加载到工作区中。

用途

使用Merge Library，把以前函数库文件中保存的UserFunction合并到当前工作区中。

Merge Library从一个指定文件中加载所有UserFunction。 (通过在UserObject对象菜单上选择Make UserFunction选项，创建UserFunction。通过创建多个UserFunction，并把它们保存到文件中，可以创建一个库。)

一旦加载了UserFunction库，那么将使用Call对象根据名称执行(调用)函数。

备注

Merge Library用于已经在库中开发UserFunction集合的高级操作。在开发UserFunction库时，可以把这些函数的源代码保持在一个位置。如需使用UserFunction的详细介绍，请参阅Help [image] Content [image] Tell me about... User-Defined Functions。

Merge Library加载的UserFunctions操作方式与程序内部本地创建的任何UserFunction完全相同。可以使用Call对象执行任何UserFunction，也可以在获得表达式的任何对象中包括UserFunction (如Formula)。可以编辑Merge Library加载的任何合并的UserFunction，因为它们现在合并到VEE工作区中。

将不会加载或使用与函数保存的任何Default Preferences (如Trig Mode)。工作区当前活动的Default Preferences保持不变。

Merge Library出现一个对话框，允许选择希望打开的文件名称。对话框指向VEE程序安装目录下的lib目录。

从包含嵌入式I/O配置的程序文件中进行Merge Library操作不会合并任何I/O配置。参阅嵌入式I/O配置和合并。

位置

File [image] Merge Library

另请参阅

Call, Delete Library, Edit UserFunction, Import Library, Open, Save, Save Objects, UserFunction, 和UserObject.


Merge Record

允许用户把相同形状的两个或两个以上的记录合并到一个记录中的对象。

用途

使用Merge Record，把两个或两个以上的记录合并到一个记录中。可以合并任意数量的标量记录。可以合并任意数据的记录数组，只要所有数组拥有相同数量的要素。

备注

可以添加任意数量的输入端 (A, B等等)，但每个输入端的数据类型必须是Record。合并的记录输出到Record输出端。

合并的记录不得有任何重复的字段名称。字段名称从输入记录中获得(忽略输入端名称)。

位置

Data [image] Access Record [image] Merge Record

另请参阅

Build Record, From DataSet, Record Constant, Set Field, To DataSet, UnBuild Record,和Properties (对象)


Message Box

显示一个弹出对话框，其中包含对用户显示的信息的对象。

用途

使用Message Box，向用户显示一条提示信息。用户按对话框上其中一个按钮，作为应答。可以自定义按钮上的文本。

在弹出对话框中，当按一个按钮时，在按钮相关的输出端(与按钮名称相同)会输出一个1。

Open View

  • Message - Message Box 弹出对话框上显示的信息串。使用\n在这个字段的文本中开始新的一行。可以作为数据输入添加这个参数。默认值是User Message

  • Symbol - Message Box 弹出对话框左侧显示的图形图像。可以作为数据输入添加这个参数

    • Question - 绿圈内的白色问号。

    • Exclamation - 黄圈内的黑色叹号。

    • Information - 蓝圈内的白色字母"i"。

    • Stop - 红色六边形内的文本"STOP"。

    • Blank - 在不希望弹出对话框中有图形时，使用这个选项。

    • <Custom...> - 提供一个对话框，允许从图形文件中选择一个图片，作为符号使用。
      在对话框中：
      - Picture - 从文件系统中输入图形文件的文件名称。显示的目录是安装目录下的bitmaps目录。为从另一个目录中选择一个文件，按Browse...按钮。
      - Actual (默认值)自动调整对象大小，以适应图形图像的实际大小。
      如果调整对象大小，那么图像不会缩放。在调整对象大小时，- Scaled会调整图形图像大小。

可以作为数据输入添加这个参数。默认值是Information

  • Buttons - 按钮上的文本显示在Message Box 弹出对话框底部，选项包括：

  • OK

    • OK Cancel

  • Abort Retry Ignore

    • Yes No

    • Yes No Cancel

    • Retry Cancel

    • <Custom ...> - 提供一个对话框，可以为最多三个按钮输入按钮标记文本。如果输入字段为空，那么该字段不会获得按钮。

数据输出端自动配置成与按钮选项相对应。

  • Default - 在用户按Enter时选择的按钮。显示的选项取决于选择的按钮。可以作为数据输入添加这个参数。默认值是OK。

属性

  • PopupTimeoutEnabled - 在这个属性为True时，会在对象中添加一个Timeout输出端。默认值是False。

  • PopUpDuration - 设置显示弹出对话框的时长。在这个时间之后，对话框超时， Timeout输出端输出一个值1。如果Timeout端执行，任何其它输出端都没有数据。只有在选中Timeout Enabled复选框时，才能使用这个字段。默认值是60 seconds。

备注

弹出对话框的默认位置大体位于工作区的中心。如果移动它，下次它将弹出到新位置。

为只使用键盘对弹出对话框作出响应：在弹出对话框时，使用Enter键，选择最左面的按钮，使用Esc键，选择最右面的按钮。也可以使用Tab键，在按钮之间移动，并使用空格键选择按钮。

只有在程序运行时才显示弹出对话框。在显示弹出对话框时，整个程序暂停执行，在关闭对话框时，程序继续执行。

如果在General栏上的Properties中打开Timeout Enabled，在对话中添加一个Timeout 输出端，那么可以关闭Timeout Enabled，删除这个输出端。不能使用对象菜单上的Delete Terminal或使用Ctrl+D ("删除终端"快捷方式)删除这个输出端。

位置

Data [image] Dialog Box [image] Message Box

另请参阅

文件名称选择, 列表框, Int32 Input, Real64 Input, Text Input, UserObject.和对象菜单

关于内置对话框对象


Meter

以图形方式显示标量数字值的对象。

用途

使用Meter，显示模拟标度和数字数据字段上的值。

Open View

通过点击当前值，输入一个新值，可以在Open View上设置Meter的最小值和最大值。如果最小值大于最大值，那么会改变 Meter指针的操作方向 (即从右到左，而不是从左到右)。

也可以作为控制端添加这些值。

属性

ClearAtPreRun - 在属性为True时，在PreRun时清除Meter的内容。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除Meter的内容。默认值为True。

Orientation - 设置怎样显示Meter。如果Meter的方向是vertical，那么最小值位于顶部，最大值位于底部。默认值为Horizontal。

 ShowDigitalDisplay - 如果属性为True，显示的值的数字画面将添加到对象Open View的底部。如果属性为False，那么不会显示数字画面，对象操作速度更快。默认值为True。

 ShowTics - 控制标度tic号和标记的可视性。默认值为True。

 Logarithmic - 在属性为True时，把标度从线性变成对数。默认值为False。

 LabelSpacing - 控制哪个tic号标上标度值。默认值为Every Other Tic。

Sub-Range Configuration Category: - 为不同的显示范围设置不同的颜色。颜色范围相互重叠，红色在底部，绿色在顶部。在每个标度结束时可以使用红色(默认)子范围。

Show Range - 在属性为True时，在对象上显示子范围颜色。

Meter Range - 设置子范围的极限。

ColorRange - 设置不同范围的颜色。

NumberFormat:

Global Format - 使用默认格式。默认值为True。

Real: - 如果Global Format关闭，那么指定在这个对象显示的实数格式。选项包括Fixed (e.g. 98.6000), Scientific (e.g. 9.8600E+01), Engineering (e.g. 98.6000E0), Standard (e.g. 98.6), 和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

输入数据必须是Scalar，并能够转换成Real64 (必须先"拆除"Complex, PComplex, Spectrum和Coord)

位置

Display [image] Indicator [image] Meter

另请参阅

AlphaNumeric, Logging AlphaNumeric,和默认首选项.

显示数据的模拟画面


Minimize All

在VEE工作空间中管理窗口的一个函数。

用途

Minimize All将最小化所有打开的没有最小化的窗口。最小化的窗口将作为小图标出现在VEE工作空间底部。

位置

Window [image] Minimize All

另请参阅

Arrange Icons, Cascade, Close All, Tile Horizontally, 和Tile Vertically。


Minimize (Object Menu)

Minimize (对象菜单)

使对象或窗口Open View图标化。

用途

使用Minimize显示对象的图标视图，或在VEE工作空间中最小化打开的窗口 (Main, UserObject, UserFunction)。

备注

可以从所有对象和窗口的Open View中使用Minimize。

快捷方式

为使对象或窗口最小化，按对象或窗口右上角的最小化按钮(位于标题栏的右侧)。

位置

在对象菜单 [image] Minimize上

另请参阅

Restore (对象菜单).


各种运算符

Function & Object Browser下的Formula类型对象。

用途

一般来说，可以使用Miscellaneous Operators对象，存取三元运算符，创建或读取简单的数组，或读取记录中的字段。

备注

在已经选择了Category: Miscellaneous时，Function & Object Browser对话框的Member一栏中会显示各种运算符范例。点击其中一个范例，会出现预先加载Miscellaneous Operator的一个VEE对象。范例对象包括：

(a?b:c) - 三元运算符。如果'a'为真(非零)，那么'b'是输出，否则'c'是输出。

PI - 取值3.14 (执行17个十进制位置)。用圆周和圆半径之比表示的无限不循环数字。

[1,2,3] - 从标量中创建一个一维数组。

[a,b,c] - 从形状相匹配的部分创建任意维度的数组。

a[2] - 返回部分数组。

a[5,3:4,*] - 返回部分比较复杂的数组。

rec.field - 返回记录的一个字段。

object.value - 获得ActiveX对象的Property。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Miscellaneous

另请参阅

Assignment, Function & Object Browser和三元运算符


Move (Object Menu)

Move (对象菜单)

移动这个对象。

用途

使用Move拖动对象，重新确定对象在工作区上的位置。

备注

Move保留与其它对象的连接。如果设置Automatic Line Routing，那么需要用一段时间重新画线。

Move可以在Panel View和Detail View中工作。

如果想移动多个对象，选择这些对象(使用CTRL-鼠标左键或Edit [image] Select All)，拖动这些对象。

也可以在多个对象周围画一个框，选择要移动的多个对象。把鼠标放在要选择的区域的左上角，然后使用CTRL键并按住鼠标左键，拖动到选择区域的右下角，也可以完成这一操作。

如果移动操作导致Objects重叠在Panel View中，使用Object Menu中的Bring to Front或Send to Back，调节对象的位置。

快捷方式

可以把光标放在对象上，而不是选择Move。这会激活一个四角的移动光标。拖动对象(使用鼠标左键)。指针不得放在对象的操作区域上(如按钮或输入字段)。

位置

在每个对象菜单上 [image] Move

另请参阅

对象菜单


Move File

把文件从给定位置移动到新位置。还可以使用同一流程重命名文件。

位置

System [image] File [image] Move File


MultiDevice Direct I/O

在同一个事务框中把数据写入一台以上的仪器及从一台以上的仪器读取数据的对象。

用途

使用MultiDevice Direct I/O对各种I/O地址上的仪器输出和输入各种编码和格式。

Open View参数

open view显示要执行的事务列表。

Direct I/O操作：

READ - 使用指定编码和格式从仪器中读取数据。

WRITE - 使用指定编码和格式把数据写入仪器中。

EXECUTE - 对GPIB仪器，发送Selected Device Clear, Go To Local, Remote或Group Execute Trigger命令。对串行仪器，发送Break或Reset。对GPIO仪器，发送Reset。对基于VXI消息的仪器，发送Selected Device Clear, Go To Local, Remote, Trigger, Lock Device或Unlock Device命令。

WAIT - 在执行下一项事务前等待的具体秒数。对GPIB仪器或基于VXI消息的仪器，一直等到串行轮询响应与模板的位逻辑AND运算结果为零(ALL CLEAR)或非零(ANY SET)。

仅对GPIO仪器，READ操作允许IOSTATUS，WRITE操作允许IOCTL。

仅对VXI仪器，READ和WRITE操作允许REGISTER:和MEMORY:。WAIT操作还支持一直等到存储器或寄存器偏置中的值AND模板值满足ANYSET, ALL CLEAR或EQUAL。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

备注

MultiDevice Direct I/O与Direct I/O非常类似。但是，MultiDevice Direct I/O不专用于任何特定仪器。每个事务可以与各种I/O地址上配置的任何仪器通信。事务对话框允许从提供的配置的仪器中指定预计的仪器。

可以使用在仪器配置过程中最初输入的仪器默认地址，也可以指定另一个地址。在仪器地址不同时，点击Default Address按钮，露出另外的文本框。在框中输入新的地址值或变量名称。

位置

I/O [image] Advanced I/O [image] MultiDevice Direct I/O

另请参阅

Advanced I/O, Component Driver, Direct I/O, Formula, Instrument Manager, Panel Driver和To/From VXIplug&play.

使用Direct I/O读取数据

使用Direct I/O对象

Properties (对象)

使用MultiInstrument Direct I/O对象

编辑事务


New

清除工作区。

用途

使用New清除工作区。

备注

如果还没有保存程序，New会提示您保存变化。

New不会清除Paste缓冲器。New从默认文件VEE.RC中读入默认的Preferences设置。

New保持Save和Open命令使用的目录路径。

快捷方式

按CTRL+N清除程序。

位置

File [image] New

另请参阅

默认首选项


Next

导致Repeat [image] 对象立即开始下一个迭代的对象。

用途

使用Next跳到当前循环的下一个迭代，而不在迭代子线程上执行其余对象。

如果Next没有位于迭代子线程上，那么它会停止子线程上的所有执行。

备注

Next通常与If/Then对象一起使用，有条件地控制迭代。

位置

Flow [image] Repeat [image] Next

另请参阅

Break, For Count, For Log Range, For Range, If/Then/Else, On Cycle, 和Until Break.

循环部分VEE程序

Properties (对象)


NI-FGEN

在VEE中使用NI-FGEN时，多个事务会导致创建�句柄�，其中包括：

  • AGniFgen_CreateFreqList

  • AGniFgen_CreateWaveformF64

  • AGniFgen_CreateWaveformI16

  • AGniFgen_CreateWaveformFileI16

  • AGniFgen_CreateWaveformFileF64

  • AGniFgen_CreateWaveformFileHWS

  • AGniFgen_CreateArbSequence

  • AGniFgen_CreateAdvancedArbSequence

  • AGniFgen_AllocateWaveform

这些句柄会以输出端的方式从事务中返回，并可以传送到程序中的其它对象。在同一个To/From NI-FGEN对象内部的其它事务也可以在内部使用这些句柄。在输出生成完成时，一定要记住�Clear�上面的事务创建的Sequence/Waveform/Frequency-List句柄。对上面每个事务，都会有一个对应的�Clear�事务，把句柄作为输入端处理。例如：

注意�AGniFgen_ClearFreqList�前面的�AGniFgen_AbortGeneration�事务。

另请参阅

To/From NIDAQ, NI-SCOPE Fetch/Read函数, NI-DAQmx, 在VEE中使用NI数据采集


NI-SCOPE Fetch/Read函数

某些返回波形数据的NI-SCOPE函数工作方式与VEE的功能不一致。VEE不能处理指向结构的指针。这些函数：

  • AGniScope_Fetch

  • AGniScope_FetchArrayMeasurement

  • AGniScope_FetchBinary8

  • AGniScope_FetchBinary16

  • AGniScope_FetchBinary32

  • AGniScope_Read

与National Instruments NI-SCOPE联机帮助中的描述略有不同。首先，VEE一次只允许提取/读取一条通道。如果用户设置多通道采集，那么他们必须进行多个提取/读取，才能获得每一条通道的数据，一次一条通道。第二，它不把指针返回包含下述字段的niScope_wfmInfo结构：

wfmInfo

struct niScope_wfmInfo

返回一个结构数组，其中包含与每个波形有关的下述定时和标度信息：

  • relativeInitialX - 从触发到被提取的波形中第一个样点的时间(单位为秒)

  • absoluteInitialX - 记录和采集之间可以比较的提取的第一个样点的时戳(单位为秒)；数字化器必须支持连续采集

  • xIncrement - 采集的波形中各点之间的时间，单位为秒

  • actualSamples - 提取及放在波形数组中的实际样点数量

  • gain - 指定通道的增益系数；用来使用下面的公式定标二进制数据

  • offset - 指定通道的偏置系数；用来使用下面的公式定标二进制数据

电压 = 二进制数据 * 增益系数 + 偏置

VEE作为单独的参数值返回ViReal64 relativeInitialX和ViReal64 xIncrement。如果用户需要访问absoluteInitialX, actualSamples, gain或offset，可以使用相应Attribute ID调用AGniScope_GetAttributeViReal64 ()。可以通过这种方式，使用VEE返回的值创建VEE波形：

上面的VEE程序还演示了多次提取的两通道采集。

另请参阅

To/From NIDAQ, NI-FGEN, NI-DAQmx, 在VEE中使用NI数据采集


Noise Generator

生成噪声数据波形的对象。

用途

使用Noise Generator生成仿真的白噪声的波形。

Open View Parameters

必须从open view中设置所有下述参数，或把这些参数添加为数据输入。

Amplitude - 最大值和最小值的绝对值。默认值为1。任何值不得大于Amplitude，任何值不得小于-Amplitude。

Time Span: - 波形的时长(秒)。默认值为 20m。

Num Points: - 波形中的点数。波形中各点之间的时间是Time Span/Num Points。Num Points必须为正。默认值为256.

位置

Device [image] Virtual Source [image] Noise Generator

另请参阅

Build Arb Waveform, Build Waveform, Comparator, Function Generator, Pulse Generator和Properties (对象)


Note Pad

显示一个可以编辑的Rich Text Format (RTF)对话框，其中会显示用户提供的信息。有一个默认的NotePad项，表明了对话框的功能，在打开NotePad对话框时会显示这个项。如果想创建自己的默认NotePad项，可以在installdir\templates中编辑notepad.rtf文件。如果想使用空白的NotePad对话框，编辑notepad.rtf文件，把它留为空白，或删除文件。

用途

使用Note Pad存档程序，标注面板视图，或编写注释。

Open View参数

如果想在Note Pad中输入信息，点击面板，然后输入注释，或在任何支持RTF的应用中输入文本，然后把它剪切和粘贴到Note Pad中。

对象菜单

Insert File... - 提供了一个对话框，允许选择现有文本或RTF文件，插入Note Pad中。

Clear All - 从Note Pad中清除所有文本，出现一个对话框，确认操作或拒绝操作。

属性

EditingEnabled - 在这个属性为True时，允许在面板中编辑文本。在不选择这个属性时，不允许进行编辑。在Note Pad位于面板视图上，不希望其它用户修改注释时，可以使用这个属性。

备注

每个Note Pad都是一个独立对象，不连接任何其它对象。

在编辑或调整大小后，可以根据要求在Note Pad中增删滚动条。

可以使用所有常用的VEE编辑功能编辑文本区域。

Notepad采用Rich Text Format (RTF)，支持环绕字。可以把任何RTF文档剪切和粘贴到Notepad中。

可以打印Notepad文本，但一直采用纯文本格式。

通过编辑%installDir%\Templates中的Notepad.rtf文件，可以为Notepad项目创建模板。

位置

Display [image] Note Pad

另请参阅

Description

存档程序


Now (System Menu)

Now

检索系统时间和日期。

位置

System [image] DateTime [image] Now


Object Menu

对象菜单

与每个对象相关的、其中包含影响该对象的选项的菜单。

用途

使用对象设置状态，编辑，设置控件，添加和删除对象的端。

使用Object Menu进入下述对象操作：

Restore

Move

Size

Minimize

Clone

Replace

Help

Properties

Description

Add Terminal

Data Input

Control Input

Data Output

Error Output

Delete Terminal

Input

Output

Delete

对放在Main窗口、UserObjects或 UserFunctions面板视图上的对象，使用Object Menu进入下述操作：

Move

Size

Properties�

Go To Detail View

Delete

备注

许多对象菜单有专用于该对象的额外菜单功能。如需与这些对象菜单选项有关的详细信息，请参阅对象相关信息。

大多数对象在Properties窗口上有该对象专用的其它选项(通过对象菜单上的Properties进入)。如需与这些对象属性有关的详细信息，请参阅对象相关信息。

快捷方式

为删除对象，双击对象菜单按钮(在Open View中提供)。

为进入Properties窗口，双击对象的标题栏(在Open View中提供)。

为获得与选定对象的相关帮助，按F1。

位置

为进入对象的Object Menu，把指针放在对象上，点击鼠标右键。注意，为进入 UserObjectOpen View的对象菜单，必须把指针放在标题栏或端上，否则会出现Edit Menu。

通过把指针放在对象菜单按钮上(正方形，在标题栏左侧中间有一个条)，按鼠标左键，还可以从Open View中进入Object Menu。

另请参阅

Move (对象菜单), Size (对象菜单), Minimize (对象菜单), Restore (对象菜单), Replace, Clone (对象菜单), Help (对象菜单), Properties (对象), Description, Add Terminal, Delete Terminal, Control Input (对象菜单), Data Input (对象菜单), Data Output (对象菜单), Error Output (对象菜单), 和Cut (对象菜单)。


OK

暂停子线程执行流程、直到按这个键的一个对象。

用途

使用OK等待用户响应。

属性

Assign to Function Key - 在属性为True，且从细节视图或面板视图中按下指定的功能键时，会执行这个对象。可以为多个OK对象指配一个功能键。默认值为False。

Assign to Enter Button - 在属性为True，且从面板视图运行程序时，按键盘上的Enter，将执行对象。每个上下文只能指为Enter指配一个OK。如果试图设置一个以上的OK，那么将反选以前的设置。在使用OK对象作为自定义对话框上的OK按钮时，适合使用这种属性。默认值为False。

 Assign to Escape Button - 在属性为True，且从面板视图运行程序时，按键盘上的Enter，将执行对象。每个上下文只能指为Esc指配一个OK。如果试图设置一个以上的OK，那么将反选以前的设置。在使用OK对象作为自定义对话框上的Cancel按钮时，适合使用这种属性。默认值为False。

备注

在创建对话框时通常使用OK，或者OK通常与Selection Control常数一起使用。

只有在对象操作时，OK按钮部分才会激活。

可以使用Go数据输出端或序列输出端，继续执行线程。

在使用Data [image] Constant下的对象时，暂停线程执行流程的另一种方式是使用Wait for Input属性。

位置

Flow [image] Confirm (OK)

另请参阅

Gate, JCT, Start, Stop, 和对象菜单

为功能键指配按钮

为Enter或Esc键指配OK按钮

构建基本对话框

保持显示弹出面板


On Cycle

以指定间隔开始执行子线程的对象。

用途

使用On Cycle执行必须定期重复的子线程。On Cycle的输出是当前日期和时间。这个日期和时间可以显示在支持Time Stamp数字格式的任何对象上。

使用On Cycle以指定间隔触发仪器。

Open View参数

在输入字段中或作为输入，输入每次迭代周期的秒数。如果这个值为0或-1，On Cycle会连续操作(与Until Break相同)。

备注

On Cycle输出包含的子线程继续执行，直到发生其中一个下述情况：

所有对象已经操作。子线程被去活，迭代定时器被复位，在经过相应的秒数后子线程被重新激活。

Break对象操作。子线程被去活，序列输出端被激活。

Next对象操作。子线程被去活，迭代定时器被复位。

On Cycle开始以指定时间周期操作。如果完成线程所需的时间比On Cycle对象的时间周期长，那么下一个迭代在下一个周期同步点开始。例如，如果On Cycle中的周期是1秒，它包含的线程需要1.5秒完成，那么下一个迭代在线程结束后.5秒开始。

在等待下一个时间周期开始时，On Cycle会进入"睡眠"状态，允许这个线程或其它线程上的其它对象操作。

在On Cycle对象上包含的子线程完成迭代时，在前一个迭代中发送的所有数据容器都会在下一个迭代之前失效。这可以防止当前迭代中重用来自上一个迭代的"旧"数据。但是，如果在迭代子线程内部存在流程分支，那么在每次迭代时某些对象可能不能执行。因此，这些对象发送的数据容器可能会在其它对象能够在数据上执行前失效。在这种情况下，为获得希望的传播，使用Sample & Hold对象。

位置

Flow [image] Repeat [image] On Cycle

另请参阅

AlphaNumeric, Break, For Count, For Log Range, For Range, Next, Sample & Hold, Until Break, 和Properties (对象)

循环部分VEE程序


Open

把一个程序文件加载到工作区中，代替现有程序。

用途

使用Open把以前保存的程序调到VEE中运行或编辑。移动到文件所在的目录，点击文件名，按OK。程序显示在屏幕上。

备注

Open会出现一个对话框，允许选择希望打开的程序文件名称。在文件中加载VEE时，指针图标会变成一副眼镜。

可以Open使用Save Objects、 Save或Save As保存的文件。

快捷方式

CTRL+O打开文件。

位置

File [image] Open

另请参阅

Merge, Save, 和Save Objects。

打开VEE程序文件


OS Version

检测主机系统的操作系统版本。

位置

System [image] Environment [image] OS Version


Pad Left

在字符串左侧垫上指定的字符。

位置

System [image] String [image] Pad Left


Pad Right

在字符串右侧垫上指定的字符。

位置

System [image] String [image] Pad Right


Panel Driver

一个仪器控制对象，强制相应物理仪器中的所有函数设置与该对象Open View中显示的控制面板中的设置相匹配。

用途

使用Panel Driver，以开放视图中显示的控制面板方式控制仪器状态。在使用Panel Driver之前，必须安装了希望仪器的仪器驱程。

为在VEE工作区中添加Panel Driver对象，点击I/O [image] Instrument Manager，出现Instrument Manager对话框。检查配置的仪器列表，查看是否有希望使用的仪器项：

如果希望使用的仪器位于列表中，且正确配置，那么：

1. 单击仪器项，高亮度显示仪器项。

2. 点击Panel Driver，添加该仪器的仪器面板。

如果希望使用的仪器没有位于列表中，或者虽然位于列表中、但配置不正确，那么必需添加和/或配置仪器。参阅Instrument Manager, 仪器属性和高级仪器属性。

如需与使用Panel Drivers有关的更多信息，请参阅Help [image] Content [image] Tell me about... Instrument Control Fundamentals [image] Introduction to Panel Drivers and Component Drivers。

对象菜单

Add Terminal by Component [image] Select Input Component - 用来作为输入在Panel Driver中添加面板上看到的字段。

Add Terminal by Component [image] Select Output Component - 用来作为输出在Panel Driver中添加面板上看到的字段。

Show Config - 显示仪器配置。 (可以使用I/O [image] Instrument Manager编辑这一配置。)

Sync - 在下述条件下把仪器驱程状态与仪器状态同步：

ID代码中包含一个同步组件。

ID启动了实地模式。

备注

可以在关闭Live Mode的情况下运行Panel Drivers。即使仪器没有连接到计算机上，仍可以在不与仪器通信的情况下运行程序。这意味着必须先把Live Mode设为开(参阅高级仪器属性)，然后程序才能与物理仪器通信。

Panel Drivers可以交互使用，也可以在程序内部使用。为设置各个组件的值，点击包含组件值的字段，添写出现的对话框。为进行测量和显示结果，在Panel DriverOpen View中点击相应的数字读数或XY画面。

可能会有一个以上的对象控制一部仪器，也就是说，两个Panel Driver对象可以控制同一程序中的fgen。在操作时，这些对象会执行状态调用。

可以为Panel Driver组件 (与Component Driver一样)添加输入和输出。输入执行设置的操作、面板设置操作及组件配套操作。控制端作为输入，初始化仪器，以程序化方式改变仪器地址和超时周期，提供同步信号。输出执行获取操作和面板获取操作。

位置

I/O [image] Instrument Manager

另请参阅

高级仪器属性, Add Terminal, Component Driver, Direct I/O, Instrument Manager, 仪器属性, 和To/From VXIplug&play。

使用Panel Driver对象读取数据


Paste

把Paste缓冲器的拷贝放到工作区上。

用途

在Detail view上使用Cut, Copy或Clone之后，使用Paste提取对象集合的拷贝。

Paste允许恢复不小心Cut的对象。同时也将恢复与这些对象的连接。

备注

Paste缓冲器只保留一个对象集合。每次在Clone, Cut或Copy时，会替换Paste缓冲器。

在使用Open, Merge或New时，不会清除Paste缓冲器。

粘贴不会粘贴纯文本对象。使用键盘键，剪切/复制和粘贴文本。高亮度显示文本，然后使用Ctrl-C (复制)或Ctrl-X (剪切)，然后点击新位置，使用Ctrl-V (粘贴)。

位置

Edit [image] Paste

另请参阅

Clone (对象菜单), Copy, Cut, Cut (对象菜单), 和Replace。


Pause

暂时导致所有线程停止运行的按钮。

用途

使用Pause临时中止程序执行。在选择Pause后，选择Resume继续执行。

备注

选择Pause会把程序置入"暂停"状态。Resume和Step功能激活，可以用来继续执行程序。

快捷方式

按CTRL+P暂停正在运行的程序。

位置

Debug [image] Pause

另请参阅

Call Stack, Line Probe, 默认首选项, Run/Resume, Run, Show Data Flow, Show Execution Flow, Step Into, Step Over, Step Out, Stop, Stop (对象), 和拨码断点.

逐步通过程序


PComplex

输出一个常数PComplex标量或1D Array的对象。

用途

使用PComplex设置Polar Complex常数或获得用户输入。点击输入字段，输入一个值。

范例

为在面板视图上使用PComplex作为提示，把PComplex对象名称变成提示信息，如Enter the AC voltage:。用户在输入字段中填写请求的信息。

输入(2,@PI/2)，它将计算PComplex Constant公式。

属性

DataShape - 把取值的初始数据形状设置成与这个对象一起输出。可能的值是标量和Array 1D。

 ArraySize: - 在选择DataShape 1D Array时，Size设置数组的长度。

 ArraySizeFixed - 在属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时，才能使用这个选项。

 ShowArrayIndices - 在属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时，才能使用这个选项。默认值为False。

Wait for Input - 在属性为True时，只有在改变对象值时才运行对象。在属性为False时，一旦满足了任何限制，对象将运行，选择的当前值是输出。默认值为False。

 AutoExecute - 在属性为True时，对象运行，在选择一个值时开始程序其余部分。如果程序已经运行，将忽略AutoExecute。默认值为False。

 InitialValue - 指定设置的值。默认值为(0, @0)。

 InitializeAtPreRun - 在属性为True时，在PreRun时设置Initial Value。默认值为False。

 InitializeAtActivate - 在属性为True时，在Activate时设置Initial Value。默认值为False。

NumberFormat: Real: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项是Fixed (如 98.6000), Scientific (如 9.8600E+01), Engineering (如 98.6000E0), Standard (如 98.6), 和Time Stamp (如 Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize最常用的情况是初始化UserObject内部的值。还可以使用Default Value控制端设置初始值。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value 输入允许以程序化方式改变当前值。这个输入要求PComplex值，可以是Scalar或Array 1D。Constant被重新配置成与进入的数据形状相匹配。

Reset输入允许以程序化方式把值设为零。如果Constant配置为Array 1D，所有值设为零。忽略Reset输入上的实际数据。

Enable Editing 和Disable Editing 输入允许以程序化方式控制是否能够在对象的Open View中改变值。

注意，即使PComplex 配置成数组，Initial Value字段仍一直是标量。

Trig Mode指定相位值单位。可以在全局或在每个上下文(UserObject 和UserFunction)上设置触发模式。

可以自动输入Magnitude and和Phase 值(用逗号分开)及VEE格式。

位置

Data [image] Constant [image] PComplex

另请参阅

Alloc PComplex, Complex, Constant, Coord, Date/Time, Selection Control, UInt8, Int16, Int32, Real32, Real64, Text, 默认首选项, 和Toggle Control。

使用数据常数


Phase Spectrum

以图形方式显示相对于相位角的频谱幅度的对象。

用途

使用Phase Spectrum显示Spectrums或Waveforms的相位对频率 (在频域中)。 波形通过傅立叶变换自动转换成频谱。X轴是输入频谱的取样单位。Y轴单位是当前Trig Mode设定值。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Phase - Y轴的名称。

Trace1 - 第一条轨迹的名称。

Freq - X轴的名称。

对象菜单

Auto Scale [image] - 点击这些菜单项，立即把画面重新定标成显示整条轨迹。(可以添加为控制端，或使用Scales属性栏设置成在采集数据后自动重新定标画面。)

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用�橡皮圈�框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Y轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

 ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

 ShowScaleLabels - 在Open View中，控制标度轴标为H的取值的可视性。默认值为True。

 ShowScrollBars - 在Open View中，控制X和Y标度上的滚动条。默认值为True。

 ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

 EditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType - Lines。在主要格显示直线，在次要格显示tic号。X轴和Y轴都显示为粗线。

Markers Category: - 允许查找显示的曲线上某个数据点的确切值。如果在对数标度上绘制数据图，标尺上显示的值是线性数据点。

为把标尺移动到一条不同的轨迹上，进入Open View，点击画面底部附近标尺值左面的按钮。按钮顺序通过不同轨迹的不同线型和颜色。

 NumMarkers - 图形中显示的标尺数量。默认值是选项None。

 MarkerInterpolate - 在属性为True时，可以把标尺放在显示的数据点之间。通过线性内插计算显示的标尺值。默认值为False。

DisplayBackColor - 允许从调色板中选择显示区域的颜色。在画面出现在细节视图和面板视图中时，可以选择不同的颜色。

ScaleLabelFont - 允许从系统上提供的字体列表中选择标度标记的字体。标度标记文本的默认字体是Screen Element: Graph Scale Label Text中Fonts栏上Default Preferences中设置的字体。

Traces Group: (每条轨迹一个)

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这个轨迹定标的标度。

Scales 属性： (每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

ScaleNumberFormat: (X和Y标度及任何其它Y标度出现的属性。)

Global Format - 使用默认格式。默认值是on。

Real: - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入类型必须是Spectrum, Waveform,或Coord (Scalar或Array 1D)。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。.

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到n的整数，其中0不绘图，n是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Spectrum (Freq) [image] Phase Spectrum

另请参阅

Magnitude Spectrum, Magnitude vs Phase, Spectrum (Freq), 默认首选项, 和对象菜单

显示波形, 在显示画面中设置标尺, 获得和设置标尺属性


Picture

用来显示图形图像的对象。

用途

使用Picture在Detail或Panel View上显示一个图形图像。它允许平铺、拉长和截短图片。可以作为数据输入把图形文件名称添加到Picture对象中。

属性

Picture Category:

使用Picture从文件系统中选择一个显示在这个对象上的图形文件。显示的目录是安装目录下的bitmaps目录。如果想从另一个目录中选择一个文件，按Browse ...按钮。可以作为数据输入添加文件名。

Actual | Centered | Scaled | Tiled
-- 选择Actual指明自动调整对象，使其与图形图像的实际大小相符。如果调整对象，图像不会缩放，并显示在对象的左上角。
-- 选择Centered指明图像保持固定大小，并一直在对象上居中，即使对象大小变化。
-- 选择Scaled指明在对象大小变化时缩放图像。可能要用一会儿时间才能完成调整。
-- 选择Tiled在对象上水平和垂直复制图像，创建"墙纸"效果。

Preview - 显示选择的当前图形图像。

VEE检查文件，确定文件格式，目前支持的格式如下：

位图(*.BMP)

JPEG (*.JPG)

Windows Meta File (*.WMF)

GIF87a (*.GIF)

GIF89 (*.GIF)

可移植网络图形(*.PNG)

默认位图位于VEE程序安装目录的bitmaps目录中。

备注

如果大小属性设置成Actual之外的选项，那么对象默认的背景颜色与默认的Panel View颜色相同，以便背景混合到Panel View中。

背景图形可以添加到任何UserObject或UserFunction面板中，并在面板上带有Picture对象。

GIF89支持仅限于一个画面(非动画GIF)，不允许使用透明的背景颜色。

位置

Display [image] Picture

另请参阅

Label, Beep和UserObject.

在面板中添加图片


Plug&play设备配置

允许从VEE中指定或修改使用的Plug&play仪器配置。

用途

使用这个对话框，从配置的仪器列表中添加或编辑仪器。

注意，并不是所有Plug&play驱程都支持所有平台。另外，可能并不是所有平台上都支持某些VTL/VISA版本 (与GPIB卡一起提供)。请与相应厂商进行核对。

对话框信息

Advanced Instrument Properties对话框的Plug&play Driver一栏分成下述区域：

Plug&play Driver Name: - 选择驱程的名称。提供的选项是已经安装的驱程。这也是驱程所在的目录。这个字段是必填字段。这些驱程的默认位置是：

Windows 98: C:\VXIPNP\WIN98

Windows NT: C:\VXIPNP\WINNT

Parameters to init() call

Address: - 输入识别仪器的地址位。地址格式取决于仪器连接的接口：

- VXI地址字符串。对带有嵌入式控制器或MXIbus控制器的VXI仪器，地址字符串采取VXI[board]::VXI logical address[::INSTR]的形式。例如，VXI::24::INSTR表示逻辑地址24上的仪器。

- GPIB-VXI地址字符串。对从GPIB卡到命令模块控制的VXI仪器，地址字符串采取GPIB-VXI[board]::VXI logical address[::INSTR]的形式。例如，GPIB-VXI0::24::INSTR表示逻辑地址24上的仪器。

- GPIB地址字符串。对从GPIB卡控制的非VXI仪器，地址字符串采取GPIB[board]::GPIB primary address::[GPIB secondary address][::INSTR]的形式。例如，GPIB0::4::24::INSTR表示一级地址4和二级地址24上的仪器。

Perform Identification Query - 在选中这个复选框时，在第一次执行这个驱程的功能面板时，会检查仪器的身份。一般来说，应选中这个复选框。

Perform Reset - 在选中这个复选框时，在第一次执行这个驱程的功能面板时，仪器初始化到预先定义的状态。一般来说，应 选中这个复选框。

备注

Plug&play Driver Name字段允许从已经安装的驱程中选择驱程名称。根据仪器驱程自带的说明，安装每个驱程所需的文件集。每个VXIplug&play驱程都是由硬件厂商编写的，与仪器一起发售。

可能会有一个以上的对象控制一部仪器。还可能同一个驱程有多个拷贝，每个拷贝控制一部不同的物理仪器。不管是哪种情况，都由配置的名称确定哪个对象控制哪部仪器。

位置

I/O [image] Instrument Manager，然后按Add?/font>或Properties按钮，出现Instrument Properties对话框。按Advanced按钮。

另请参阅

Direct I/O, Instrument Manager, Instrument Properties, Panel Driver和To/From VXIplug&play。


Polar Plot

在极坐标中显示图形绘图的对象。

用途

在为半径和角数据提供不同的极坐标信息时，使用Polar Plot显示极坐标上的一个值。

在绘制一条以上的轨迹时，每次执行Polar Plot对象都使用一个角输入数据，其中包括每条轨迹的Radius输入数据，因此所有轨迹共享一个角输入。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Y name - 半径标度的名称。

Span: - 显示画面的垂直维度。在原点位于显示画面中心时，Span是半径的两倍。这个参数控制着显示画面的标度。默认值为2。

RData1 - 第一条轨迹的名称。

Polar Reference Location - 指定显示的极坐标图的部分。其速度要比滚动到某个区域快。在输入字段中改变参考点，可以把指定的图表部分(如Center)滚动到指定的位置(如(0, @0))。

Ref Radius: - 粗体格线圆圈的半径值。

对象菜单

Auto Scale [image] Auto Scale - 立即把画面重新定标成显示整条轨迹。Auto Scale会把极坐标的参考位置复位到Center (0,@0)。(可以添加为控制端，或使用Scales属性栏设置成在采集数据后自动重新定标画面。)

Auto Scale X - 不能使用。

Auto Scale Y - 不能使用。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用�橡皮圈�框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Radius轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

 ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

 ShowScrollBars - 在Open View中，控制标度上标度栏的可视性。默认值为True。

 ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

 EnableEditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType: - 默认值为Lines。

Smith Chart - 在Smith图表中显示数据 (也称为"阻抗图表")。标尺值给定为实数阻抗和虚数阻抗。粗体圆是"参考半径"，其线性半径值在画面的右下角显示。如果输入数据已经归一化，Smith Chart栅格和标尺只表示正确定标的值。为归一化数据，把所有幅度除以特性阻抗。

Inv Smith Chart - 在反Smith图表中显示数据(也称为"导纳图表")。反Smith图表的使用方式与Smith图表相同，但栅格和标尺值是导纳值，而不是阻抗值。

Markers Category: - 允许查找显示的曲线上某个数据点的确切值。如果在对数标度上绘制数据图，标尺上显示的值是线性数据点。

为把标尺移动到一条不同的轨迹上，进入Open View，点击画面底部附近标尺值左面的按钮。按钮顺序通过不同轨迹的不同线型和颜色。

NumMarkers - 图形中的标尺数量。

MarkerInterpolate - 在属性为True时，可以把标尺放在显示的数据点之间。通过线性内插计算显示的标尺值。默认值为False。

BackColor - 允许从调色板中选择显示区域的颜色。在显示画面出现在细节视图和面板视图中时，可以选择不同的颜色。

Traces Group: (每条轨迹一个)

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值为yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这个轨迹定标的标度。

Scales 属性： (每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Radius标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项变成False，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Vertical Span: - 显示画面的垂直维度。默认值为2。

Scale Color - 任意背景栅格或tic号的颜色。默认值为Gray。

Reference Corner: - 指定显示的极坐标图的部分。其速度要比滚动到某个区域快。改变Reference Value，可以把指定的图表部分(如Center)滚动到指定的位置(如(0, @0))。默认值为Center。

Reference Value: - 定义了极坐标图中使用的数字极坐标值。默认值为(0, @0)。

备注

输入必须是Scalar或Array 1D，其可以转换成Real64类型。

角单位位于当前Trig Mode。

所有输入的大小和形状必须相同。忽略输入上的映射信息。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。.

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到n的整数，其中0不绘图，n是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有：

一个或多个下述字段：

Name, Name1, Name2, and/or Name3 - 必须是文本值。

Span, Span1, Span2, and/or Span3 - 必须是整数或实数值。

RefPt - 必须是PComplex。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。在General栏中，为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Polar Plot

另请参阅

Complex Plane, Magnitude Spectrum, Magnitude vs Phase, Spectrum (Freq), Strip Chart, Waveform (Time), 和默认首选项。

显示极坐标数据, 在显示画面中设置标尺, 获得和设置标尺属性


Pop-Up List

弹出列表

参阅选择控制。


Print

一个对话框，允许使用标准Microsoft Windows打印惯例进行打印。

用途

使用Print对话框选择打印质量和打印的份数。

对话框信息

Printer - 识别当前Windows系统打印机。如果想改变打印机，点击Properties按钮，出现Print Setup对话框。

Print Range - 对VEE固定为All。

Print Quality - 这些选项是打印机专用选项。对HP LaserJet Printers，默认值为300 dpi (300点/英寸)。

Copies - 输入打印份数(默认值= 1)。

Collate Copies - 默认值为关闭(没有对勾)。点击复选框，打开Collate Copies。

在完成时，如果准备打印，点击OK；如果想不打印并停止，点击Cancel。如果想显示Print Setup对话框，改变其它参数，点击Properties。

备注

如需与为Windows程序设置打印机有关的更多信息，请参阅Microsoft Windows文档。

位置

File [image] Print Screen

File [image] Print Program

File [image] Print Objects

另请参阅

Print Objects, Print Program, Print Screen和Print Setup。

改变打印首选项

打印VEE程序

在VEE程序中打印对象

打印或复制VEE窗口

打印VEE工作空间


Print Objects

对每个选中的对象向一台打印机或一个打印文件输出一页，其中包含所有视图和Description数据。

用途

使用Print Objects获得选中对象的硬拷贝。Print Objects显示一个对话框，指明与打印机配置有关的信息。

Print Objects将打印每个对象的所有视图(图标, 打开, 细节或面板)以及Description数据。如果对象中包含多项事务，那么还会打印描述事务的详细对话框。

如果当前没和选中任何对象，那么Print Objects菜单项会变成灰色。

对话框信息

Print Objects为系统显示相应的对话框；参阅Print。

备注

Print Objects捕获程序图像可能要用一段时间。当正在捕获图像时，指针变成一个沙漏。只有在捕获完成时(指针变回箭头)，才能使用VEE。

VEE只保存一种打印配置，在各个打印操作之间保持不变。

位置

File [image] Print Objects

另请参阅

Print, Print Program, Print Screen, Default Preferences和Select All。

改变打印首选项

打印VEE程序

在VEE程序中打印对象

打印或复制VEE窗口

打印VEE工作空间


Print Program

把程序的整个细节视图输出到一台打印机或一个打印文件中。

用途

使用Print Program，获得整个程序的硬拷贝。Print Program显示Print Options对话框，允许指定输出到打印机上的内容。在已经选择了打印选项后，点击OK按钮，出现Print对话框。

Print Program生成带索引的页面，显示VEE程序的整个结构。输出中包括顶级程序的整体视图，程序中的每个对象显示一页，其中包括对象的所有视图及其Description数据。如果对象中包含多项事务，那么还会打印描述事务的详细对话框。每页输出包含着描述图像在程序中的位置的信息。

可以通过Print Options对话框，独立控制打印过程的各个方面。

对话框信息

Print Program对话框显示五个字段：

Print Nested UserObjects - 打印引擎以递归方式打印目前正在打印的对象内部嵌套的任何UserObject。

Print Object Views - 打印上下文内部的所有对象。但是，对象打印方式在一定程度上取决于对象的复杂程度。也就是说，简单的对象如Gate、Junction或UntilBreak对象会在出现在VEE程序中时打印。比较复杂的对象如Graph或Sequencer对象会采用open view形式打印。

Print Header and Index Page - 如果复选这个对话框，VEE程序打印输出的每一页将包含一个两行的标题，显示日期、时间、程序文件名和页码。在打印输出结尾，会打印一张索引页，显示索引项的页码。

Print Program Explorer - 如果复选这个对话框，VEE程序打印输出将显示Program Explorer窗口中包含的信息。

Print Cover Page - 如果复选这个对话框，VEE程序打印输出第一页将显示下述内容：

VEE产品徽标图形。

打印的程序文件名。

保存程序的文件格式。

使用的VEE软件的修订版本 (如6.0, 等等)。

当前VEE执行模式(VEE 6, VEE 5, 等等)。

Print I/O Configuration - 如果复选这个对话框，会打印仪器配置的扩展树图。可以在I/O [image] Instrument Manager?/font>中查看仪器配置。

在按OK时，系统会出现相应的对话框；参阅Print。

备注

Print Program捕获程序图像可能要用一段时间。当正在捕获图像时，指针变成一个沙漏。只有在捕获完成时(指针变回箭头)，才能使用VEE。

VEE只保存一种打印配置，在各个打印操作之间保持不变。

位置

File [image] Print Program...

另请参阅

Default Preferences, Print, Print Screen, Print Objects和Save Documentation。

改变打印首选项

打印VEE程序

在VEE程序中打印对象

打印或复制VEE窗口

打印VEE工作空间


Print Screen

把VEE窗口内容输出到一台打印机或一个打印文件中。

用途

使用Print Screen获得屏幕上可以看到的程序部分。Print Screen显示一个对话框，指明与打印机配置有关的信息。

对话框信息

Print Screen为系统显示相应的对话框；参阅Print。

备注

Print Screen捕获程序图像可能要用一段时间。当正在捕获图像时，指针变成一个沙漏。只有在捕获完成时(指针变回箭头)，才能使用VEE。

VEE显示窗口大小决定着打印区域尺寸。如果想得到大的输出画面，应使VEE窗口最大化(但如果太大，那么会削减图像)。图像越大，扫描和打印所需的时间越长。

VEE只保存一种打印配置，在各个打印操作之间保持不变。

位置

File [image] Print Screen

另请参阅

Print, Print Program, Print Objects和Default Preferences。

改变打印首选项

打印VEE程序

在VEE程序中打印对象

打印或复制VEE窗口

打印VEE工作空间


Print Screen Object

在系统打印机上打印一份VEE窗口看得见的部分的对象。

用途

在程序运行时，使用Print Screen打印一份看得见的工作区。

备注

使用下述方式配置Print Screen使用的打印机(VEE系统打印机)：

File [image] Print Setup

Print Screen把输出指向配置的图形打印机或目录。

在Print Screen运行时，正在运行的程序会暂停。在Print Screen完成时，程序会恢复运行。

位置

I/O [image] Print Screen

另请参阅

Print, Print Program, Print Screen, Print Objects和Default Preferences。

改变打印首选项


Print Setup

一个对话框，允许使用标准Microsoft Windows打印惯例设置打印机。

用途

使用Print Setup对话框选择打印机、打印方向及纸张大小和来源。

对话框信息

Printer - 选择Default Printer或Specific Printer。如果选中Specific Printer，那么可以从Windows系统上配置的打印机列表中选择打印机。

Paper - 从支持的选项列表中选择纸张大小Size和来源Source。

Orientation - 选择纵向Portrait或横向Landscape。

如果点击Properties，会出现另一个(标准Windows)对话框，提示进一步作出选择。

备注

如需与为Windows程序设置打印机有关的更多信息，请参阅Microsoft Windows文档。

在Windows 98下运行VEE时，对几乎所有VEE打印情况，都应选中Font栏上的Print True Type as graphics及Graphics栏上的Use raster graphics。

在Windows NT下运行VEE时，Document Properties对话框中的Print Text as Graphics应为On。这个对话框从File [image] Print Setup中进入。在Print Setup对话框中，点击Properties按钮，然后点击Advanced栏。

位置

File [image] Print Setup

(或从文件菜单中选择其它打印选项中的一个选项，出现Print对话框。)

另请参阅

Print, Print Program, Print Objects和Print Screen。

改变打印首选项

打印VEE程序

在VEE程序中打印对象

打印或复制VEE窗口

打印VEE工作空间


Profiler

一个菜单选项，提供了与UserObjects和UserFunctions有关的执行信息。

用途

在启用Profiler时，会出现Profiler Information对话框。从Profiler Information对话框中，可以配置VEE程序中每个UserObject和UserFunction的各种执行参数。

在启动Profiler时，它将提供与每个UserObject或每个UserFunction执行所需的时间量有关的对比信息。在试图修改VEE程序，以最大限度地提高效率、改善执行速度时，这些信息可能非常有用。

只要启用Profiler，在VEE工作空间右下角的程序Status Bar将高亮度显示PROF。

对话框信息

Name - Name一栏列出了配置文件的每个UserObject和每个UserFunction的名称。

# Executions - 这一栏显示了在配置过程中每个UserObject或UserFunction执行的次数。

% Time - 显示某个UserObject或UserFunction执行所用的时间在整个程序执行的总时间中所占的百分比。

Time(sec) - 显示某个UserObject或UserFunction执行所用的时间，单位为秒。

Start Profiling - Start Profiling按钮是在Start Profiling或Stop Profiling之间拨码切换的功能。在已经启动配置文件时，VEE程序Status Bar将高亮度显示PROF字段。

Refresh - Profile Information对话框不会使用新的配置文件数据自动更新。必须点击Refresh按钮，使Profiler从正在运行的、暂停的或停止的VEE程序中检索最新配置文件数据。

Clear - Clear按钮把Profiler Information对话框中的所有字段值复位成0 (零)。

Save - 点击Save按钮，把Profiler数据保存到可以使用Options...按钮指定的文件名中。(参阅下面介绍的Options...)。

Options... - 点击Options...按钮，出现Profiler Options对话框。 Profiler Options对话框包含下述字段和按钮：

# digits for % Time - 这个字段允许指定希望在Profiler对话框的% Time字段中显示多少位的精度(小数点的右面)。默认位数是2。

# digits for Time(sec) - 这个字段允许指定希望在Profiler对话框的Time(sec)字段中显示多少位的精度(小数点的右面)。默认位数是3。

Show only executed contexts - 如果复选(启用)这个框，那么将只在执行的UserObjects和UserFunctions上显示Profiler数据。在默认情况下，不复选这个框。

Save Options 组 - Save Options 组中的项目定义了怎样把Profiler数据保存到数据文件中的选项，包括：

- Save File Name: - 这个字段指明了保存Profiler数据的文件名。点击这个字段，出现Save data filename对话框。从Save data filename对话框中，可以指定希望用来存储Profiler数据的文件名和文件类型。默认文件名是profile.dat。
- Overwrite data - 如果复选(启用)Overwrite data框，那么每次在保存新采集的Profiler数据时，都会覆盖以前采集和保存到Profiler数据文件中的Profiler数据。在默认情况下，启用Overwrite data。
- Comma delimited - Comma delimited框允许指定是否把Profiler数据写入逗号分隔格式或非逗号分隔格式的数据文件中。如果以Comma delimited格式写入数据，那么使用逗号作为各个Profiler数据字段之间的分隔符，把数据写入数据文件。在数据文件中使用逗号分隔符可以更加简便地把数据文件传送到其它类型的应用软件中(如电子表格)。在默认情况下，不复选(不启用)Comma delimited框。
- OK - 点击OK，确认在Profiler Options对话框中已经选择的任何选项。

备注

在Profiler已经在Profiler对话框中采集和显示数据后，可以双击Name字段中显示的任何UserObject或UserFunction，VEE工作空间中将调入该UserObject或UserFunction。

此外，点击任何栏的标记，如Name, # Executions, % Time等，会以相反的顺序对Profiler对话框中显示的数据分类。再次点击，会再次颠倒分类顺序。

位置

View [image] Profiler

另请参阅

Call Stack, Clean Up Lines, Show Data Flow, Show Execution Flow,和Properties (对象)。

配置执行参数


Program Explorer

打开或关闭Program Explorer窗口的View 菜单项。

用途

Program Explorer菜单选项是一个切换功能，确定是否显示Program Explorer窗口。在其活动时，Program Explorer窗口位于VEE工作空间的左面。可以使用下述方法，设置Program Explorer的默认状态：

1. 使用View 菜单或Toolbar按钮，设置Program Explorer的当前状态。

2. 选择File [image] Default Preferences。

3. 按Default Preferences对话框上的Save按钮。

4. 按Default Preferences对话框上的OK按钮。

在下次启动VEE时，Program Explorer会以通过Default Preferences确定的状态启动。

通过在VEE工作空间和Program Explorer窗口本身的垂直间隔上滑动鼠标指针，可以调整Program Explorer窗口大小。在鼠标指针变成竖的劈开光标时，按鼠标左键，把光标向右或向左拖，可以提高或缩小窗口大小。

通过在Program Explorer和Properties 窗口的水平分隔符上滑动鼠标指针，可以调整Program Explorer窗口的高度(如果能够同时看到Program Explorer和Properties)。

备注

Program Explorer窗口用来向编程人员显示目前加载的VEE程序的层级结构。这个结构使用不同的图标表示程序的不同部分。这些图标代表着不同类型的下述程序信息。

在Main UserObject上开始的UserObject层级

本地UserFunction列表

导入的UserFunction库列表和相关函数

导入的Compiled Libraries和相关函数

导入的Remote UserFunction库和相关函数

全局变量, 包括声明变量和未声明变量

相应库下声明的库全局变量

相应上下文下声明的局部变量

很大一部分Program Explorer功能通过上下文相关菜单存取。例如，如果在UserObject icon in the Program Explorer窗口中的UserObject图标上移动鼠标光标，然后按鼠标右键，会出现UserObject的上下文相关菜单。

并不是Program Explorer中的所有项目都提供了上下文菜单，而出现的菜单取决于项目类型 (UserObject图标, UserFunction图标等等)。Program Explorer中的下述项目将提供上下文相关菜单：

Program (或Root) Node

Main UserObject

UserObjects

UserFunctions

本地UserFunctions

导入的UserFunctions

导入的UserFunction库

Remote UserFunction

Compiled Function

全局变量

库全局变量

局部变量

位置

View [image] Program Explorer

另请参阅

默认首选项, UserFunction, UserObject

浏览程序结构


Properties (Object)

Properties (对象)

与每个对象相关的、包含影响该对象的选项的窗口。本页只描述了每个对象上提供的通用属性。由于某些对象的特点，某些选项和栏不适用。

用途

使用Properties Window编辑标题，设置断点，设置对象颜色和字体，设置标题颜色和字体，改变图标和Open View外观，执行其它对象专用操作。

窗口信息

Title - 显示对象的当前标题，允许编辑标题。

 ShowTitleBar - 在这个属性为True时，显示对象Open View上的标题栏。

 Show Terminals - 在这个属性为True时， Show Terminals在Open View上显示输入端和输出端。显示的端中会显示端名称。为获得完整的端信息，双击对象的端。

BreakpointEnabled - 在这个属性为True时在对象上启用断点；在这个属性为False时在对象上取消断点。使用BreakpointEnabled作为调试工具，在这个对象执行前暂停执行程序。下一个要执行的对象有一个黄色边框(在默认状态下)。为继续执行，按工具栏上的Resume或其中一个Step按钮。当Properties中设置了断点或从Debug菜单中选择了断点时，会启用断点，对象会用橙色边框(默认状态下)高亮度显示。

 Title BackColor - 允许从调色板中选择标题栏(Open View)和标题(图标视图)的颜色。

 Title ForeColor - 允许从调色板中选择标题栏(Open View)和标题(图标视图)使用的文本颜色。

 BackColor - 允许从调色板中选择对象的Open View的颜色。

 ForeColor - 允许从调色板中选择Open View中使用的文本颜色。如果在对象Open View的正文中没有文本，那么这个选项不能使用。

 Title Font - 允许从系统上提供的字体列表中选择标题栏(Open View)和标题(图标视图)的字体。

 Font - 允许从系统上提供的字体列表中选择Open View中使用的文本颜色。如果在对象Open View的正文中没有文本，那么这个选项不能使用。

ShowIconTitle - 在这个属性为True时，显示对象图标视图上的对象名称。在Show Title为False时，图标上不显示对象名称。如果只想在图标上显示一个位图，一般使用这个功能。

IconPicture - 使用Picture，从文件系统中选择在这个图标上显示的图形文件。

显示的目录是安装目录下的bitmaps目录。为从另一个目录中选择一个文件，按Browse ...按钮。

选择Centered，指定即使图标大小变化，仍把图像保持在固定大小，并一直在图标上居中。

选择Scaled，指定在图标大小变化时缩放图像。

Preview - 显示当前选择的图形图像。当前支持的格式请参阅Picture对象的Help信息。

默认的位图位于VEE程序安装目录下的bitmaps目录中。

Border: 只能从Panel视图上的对象中使用。

None | Flat | Sunken | Raised - 选择在面板上显示的对象的边框特点。

Location: 只能从Panel视图上的对象中使用。

X: -对象左上角的水平位置(用像素表示)。0位于工作区的左上角。

Y: - 对象左上角的垂直位置(用像素表示)。0位于工作区的左上角。

Size: 只能从 Panel视图上的对象中使用。

Width: - 对象左侧和右侧之间的距离。这个数字包括任何对象边框的宽度。

Height: - 对象顶部和底部之间的距离。这个数字包括任何对象边框的宽度。

备注

在修改Font属性时，字体对话框有一个复选框，标为Automatically Resize Object on Font Change。在选择这个复选框，改变字体，按OK时，对象会调整大小，以适应新字体。在没有选择这个复选框时，对象大小保持不变，而不管字体有多大或多小。如果没有选择Object Text字体，那么这一选项不能使用。

从对象面板视图中在Properties窗口中所作的任何变化，都只会影响该对象的面板视图。从对象的面板视图中提供的Properties选项是细节视图选项的一个子集。

大多数对象在Properties窗口中有专用于该对象的其它选项(通过对象菜单上的Properties进入这个窗口)。这些对象属性的详情请参阅与该对象有关的信息。

快捷方式

双击对象的标题栏(在Open View中提供)，可以迅速进入Properties窗口。.

位置

在每个对象菜单 [image] Properties ...上

从Main Menu View [image] Properties中

另请参阅

默认首选项和对象菜单


Pulse Generator

生成和输出脉冲波形的对象。

用途

使用Pulse Generator，使用自己的技术数据生成一个脉冲波形。

属性

ErroronAliasing - 如果这个属性为True，那么在任何高或低脉冲状态的时间周期小于取样周期(Time Span/Num Points)的两倍时会返回错误。这一选项求解的目的是确定生成的点是否准确地表示生成的脉冲。如果不选中这个复选框，那么会以原本方式表示各点。默认值为True。

Open View参数

所有这些参数都可以从Open View中设置，或添加为数据输入。

Frequency - 生成脉冲的速率，单位为赫兹。

Pulse Width - 脉冲的宽度，用时间表示。这一时间是从低到高转换的中点到从高到低转换中点之间测得的值。脉宽必须是正实数。默认值为5ms。

Pulse Delay - 从脉冲开始到下一个转换开始之间的时间。Pulse Delay必须是一个正实数。默认值为0。

Thresholds - 确定Rise Time和Fall Time使用的门限。
低门限= (第一个百分比) * (高 - 低)
高门限= (第二个百分比) * (高 - 低)

0%-100%

10%-90%

20%-80%

Rise Time - 从低门限转换到高门限所用的时间，单位为秒。Rise Time必须是正实数。

Fall Time - 从高门限转换到低门限所用的时间，单位为秒。Fall Time必须是正实数。

High - 在脉冲活动时的波形值。High必须是实数。默认值为1。

Low - 在脉冲不活动时的波形值。Low必须是实数。如果Low的值大于High的值，那么生成的脉冲会倒置。默认值为0。

Burst Mode - 启用或取消在Frequency上生成的多个脉冲。在Burst Rate为OFF时，在Frequency上只生成一个脉冲。在Burst Mode为On时，在Frequency上生成Burst Count数量的脉冲。默认值为OFF。

Burst Count - 以Rep Rate生成的脉冲数量。Burst Count必须是正整数。默认值为2。

Burst Rep Rate - 生成Burst Count脉冲的速率。Burst Rep Rate必须是大于1/pulse width的实数。

Time Span: - 波形的时长(单位为秒)。 默认值为20ms。

Num Points: - 波形中的点数。波形各点之间的时间为Time Span/numPoints。Num Points必须为正。默认值为256。

位置

Device [image] Virtual Source [image] Pulse Generator

另请参阅

Build Arb Waveform, Build Waveform, Comparator, Function Generator,和Noise Generator。


Clear Queue

Queue - Clear

清除给定队列。

位置

System [image] Collections [image] Queue [image] Clear


Queue - Count

计算队列中的项目数量。

位置

System [image] Collections [image] Queue [image] Count


Queue - Create

创建一个称为队列的数据结构。

位置

System [image] Collections [image] Queue [image] Create


Queue - Dequeue Item

从队列中删除一个项目。

Location

System [image] Collections [image] Queue [image] Dequeue Item


Queue - Enqueue Item

在队列中添加一个项目。

位置

System [image] Collections [image] Queue [image] Enqueue Item


Queue - Enumerate

提供队列中的项目列表。

位置

System [image] Collections [image] Queue [image] Enumerate Items


Queue - Peek an Item

抽看队列中的一个项目。

位置

System [image] Collections [image] Queue [image] Peek Item


Radio Buttons

Radio按钮

参阅选择控制。


Raise Error

使用相关错误编号(换码)和文本消息生成用户自定义的错误条件。(这个对象以前称为Escape)

用途

使用Raise Error，停止执行当前的UserObject，生成可以由密封UserObject或主工作区的错误端捕获的错误。如果没有捕获错误(由UserObject上的错误端)，且换码不是零，那么Raise Error会停止程序，生成错误对话框。

Raise Error还可以用于UserFunction中，生成由调用UserFunction的对象上的错误端捕获的错误。

Open View参数

Code - 一个错误编号，必须是Int32。VEE使用300和1,000之间的错误编号，最好使用这个范围之外的错误编号。可以在输入框中输入Code，或添加为数据输入。

Message - 要输出的文本信息。可以在输入框中输入Message，或添加为数据输入。

备注

如果使用-r命令行调用VEE，那么Raise Error生成的没有捕获的错误会导致VEE中止。Code和Message写入stderr中，作为退出代码向操作系统返回255。

为生成某个退出代码，使用Stop对象。

位置

Flow [image] Raise Error

另请参阅

Error Output (对象菜单), Create UserObject, Exit UserObject, Exit Thread, Start, Stop, 和Properties (对象)

捕获错误


Real32

输出4字节实数标量或1D数组常数的对象。

用途

使用Real32设置实数常数或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的Real32提示使用Real32对象的名字变成提示，如 Enter the offset:。用户在输入字段中填写请求的信息。

输入100M*PI，令Real32 Constant对这个公式求解，显示Real32数字答案。

属性

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

 ArraySize - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

Global Format - 使用默认格式。默认值为True。

Real: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个实数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段总是一个标量，即使Real32配置成数组。

位置

Data [image] Constant [image] Real32

另请参阅

Alloc Real32, Complex, Constant, Coord, Date/Time, Selection Control, UInt8, Int16, Int32, PComplex, Real64, Text和Toggle Control.

使用数据常数


Real64

输出8字节实数标量或1D数组常数的对象。

用途

使用Real64设置实数常数或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的Real64提示使用Real64对象的名字变成提示，如 Enter the offset:。用户在输入字段中填写请求的信息。

输入100M*PI，令Real64 Constant对这个公式求解，显示Real64数字答案。

属性

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

 ArraySize - 在选择DataShape 1D Array时，Size 设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

Stepping Category: (在DataShape为Array 1D失效)

EnableStepping - 在这一属性为True时，输入字段右端出现步进控制，允许滚动各个值。默认值为False。

DetentSize - 在EnableStepping属性为True时，这会设置使用步进控制滚动取值时取值之间的长度。默认值为1。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

Global Format - 使用默认格式。默认值为启动。

Real: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个实数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段总是一个标量，即使Real64配置成数组。

位置

Data [image] Constant [image] Real64

另请参阅

Alloc Real64, Complex, Constant, Coord, Date/Time, Selection Control, UInt8, Int16, Int32, PComplex, Real32, Text和Toggle Control。

使用数据常数


Real64 Input

显示一个接受实数输入的弹出对话框的对象。

用途

使用Real64 Input提示用户输入一个实数，接受这个数字，使用用户自定义测试检查这个数字是否有效。

在弹出对话框中，在按OK按钮时，Value输出端输出用户输入的实数。在按Cancel按钮时，Cancel输出端输出1。

Open View

  • Prompt/Label - 这个字符串提示用户添写文本字段。可以作为数据输入添加这个参数。默认值为Enter Real Value:

  • Default Value - 在输入任何数据前位于对话框输入字段中的文本。如果用户在没有输入任何数据的情况下按OK，那么输出这个文本。可以作为数据输入添加这个参数。默认值为5。

  • Value Constraint - 测试输入文本是否有效的等式。可以使用任何数学表达式，或调用一个UserFunction。可以作为数据输入添加这个参数。默认值为0<=value AND value<=10，表示检查取值在0和10之间的用户输入。如果想支持任何值，使用表达式1。

  • Error Message - 如果用户输入没有满足Value Constraint，那么消息框中输出这些文本。可以作为数据输入添加这个参数。默认值为You must enter a real number between 0 and 10。

属性

  • PopupTimeoutEnabled - 在这一属性为True时，Timeout输出端添加到对象中。默认值为False。

  • PopUpDuration - 设置弹出对话框显示的时间长度。在过了这段时间之后，对话框超时，Timeout输出端输出值1。如果 Timeout端执行，那么任何其它输出端都没有数据。只有在选中Timeout Enabled复选框时才能使用这个字段。默认值为60 seconds。

  • PopupOKLabel - 在True时把按钮标注设置为OK。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupCancelLabel - 在True时把按钮标注设置为Cancel。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupPasswordMasking - 在这一属性为True时，输入文本表现为星号 (*)。在操作人员输入敏感数据时，如口令，适合使用这种功能。它不会掩蔽Value输出端上输出的字符串。默认值为False。

备注

弹出对话框的默认位置大约位于工作区中心。如果移动弹出对话框，下次它会弹出到新位置。

错误信息对话框的标题文本与Real64 Input对象标题相同。

只使用键盘对弹出对话框作出响应：在对话框弹出时，开始输入信息，使用Enter和Esc键。使用Tab键在输入字段和按钮之间移动，然后使用Space栏选择按钮。

只有在程序运行时才显示弹出对话框和错误对话框。在显示弹出对话框时，整个程序会暂停执行，在对话框关闭时继续执行。

位置

Data [image] Dialog Box [image] Real64 Input

另请参阅

File Name Selection, Int32 Input, List Box, Message Box, Text Input, UserObject和对象菜单

使用数据输入对话框


Real64 Knob

输出旋钮Real64值的对象。

用途

使用Real64 Knob输入值。Real64 Knob特别适合用于面板上。

Open View参数

open view显示旋钮当前值、最小值、最大值和旋钮控制字段。

属性

Orientation - 设置怎样显示Knob。

 ShowDigitalDisplay - 如果这一属性为True，那么会在对象open view底部的编辑字段中显示旋钮的当前值。在修改这个值时，旋钮的位置会发生变化。默认值为True。

ShowTics - 控制标度的tic号和标注的可视性。默认值为True。

 Logarithmic - 在这一属性为True时，标度从线性变成对数。默认值为False。在打开时，Detents变成Steps/Decade。

 LabelSpacing: - 控制标度值中是否标注tic号。默认值为Every Other Tic。

 Detents或Steps/Decade: - 在线性标度上，Detents设置Knob提供的各个值之间的距离。在对数标度上，Steps/Decade设置Knob每10 Hz内提供的步长数量。如果输入其它值，那么它们会舍入到最近的定位器。Detents (线性标度)的默认值为1m。Steps/Decade (对数标度)的默认值为1.0。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat类别：

Global Format - 使用默认格式。默认值为on。

Real: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize 最常用的用途是初始化 UserObject 内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的 Default Value 控制端。

可以为Default Value, Reset, Enable Editing, Disable Editing, MaxValue, MinValue和Detents 添加控制输入：

Default Value 输入可以以程序化方式改变当前值。这一输入要求一个实数标量值。

Reset输入可以以程序化方式把值设为零。忽略 Reset 输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在open view中改变当前值、最小值和最大值。

MaxValue和MinValue输入允许以程序化方式设置最小值和最大值字段。这些输入要求实数标量值。

Detents输入以程序化方式设置定位器值。

位置

Data [image] Continuous [image] Real64 Knob

另请参阅

Complex, Selection Control, Int32, Int32 Slider, Int32 Knob, PComplex, Real64, Real64 Slider, Text, Toggle Control和对象菜单

使用数据滑尺和旋钮


Real64 Slider

输出滑尺Real64值的对象。

用途

使用Real64 Slider输入值。Real64 Slider特别适合用于面板上。

Open View参数

open view显示滑尺值、最小值、最大值和滑尺控制字段。

Properties

Orientation - 设置怎样显示Slider。

 ShowDigitalDisplay - 如果这一属性为True，那么会在对象open view底部的编辑字段中显示滑尺的当前值。在修改这个值时，滑尺的位置会发生变化。默认值为True。

ShowTics - 控制标度的tic号和标注的可视能力。默认值为True。

 Logarithmic - 在这一属性为True时，标度从线性变成对数。默认值为False。在打开时，Detents变成Steps/Decade。

 LabelSpacing: - 控制标度值中是否标注tic号。默认值为Every Other Tic。

 Detents或Steps/Decade: - 在线性标度上，Detents设置Slider提供的各个值之间的距离。在对数标度上，Steps/Decade设置Slider每10 Hz内提供的步长数量。如果输入其它值，那么它们会舍入到最近的定位器。Detents (线性标度)的默认值为1m。Steps/Decade (对数标度)的默认值为1.0。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat：

Global Format - 使用默认格式。默认值为on。

Real: - 如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

Initialize 最常用的用途是初始化 UserObject 内部的值。设置初始值的另一种方法是使用 Default Value 控制端。

可以为Default Value, Reset, Enable Editing, Disable Editing, MaxValue, MinValue和Detents 添加控制输入：

Default Value 输入可以以程序化方式改变当前值。这一输入要求一个实数标量值。

Reset输入可以以程序化方式把值设为零。忽略 Reset 输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在open view中改变当前值、最小值和最大值。

The MaxValue和MinValue输入允许以程序化方式设置最小值和最大值字段。这些输入要求一个实数标量值。

Detents输入以程序化方式设置定位器值。

位置

Data [image] Continuous [image] Real64 Slider

另请参阅

Complex, Selection Control, Int32, Int32 Knob, Int32 Slider, PComplex, Real64, Real64 Knob, Text, Toggle Control和对象菜单

使用数据滑尺和旋钮


Record Constant

输出Record数据类型、标量或1D Array形状的常数的对象。

用途

使用Record Constant对象定义和构建Record常数，或以互动方式编辑一条现有记录或由记录组成的数组。

Open View参数

在open view中，记录中的每个字段有一个Field name按钮和一个Value按钮 (或输入字段)。(在默认情况下，Field name按钮A和B分别与Value字段"Text field"和"1.25"对应。) 如果记录DataShape是Array 1D，那么在数组(0, 1, 等等)中索引的open view中有一个额外的字段。为步进通过数组值，提供了First, Prev, Next和Last按钮。

Field name -- 在按这个按钮时，弹出一个对话框，允许用户重命名记录字段及改变其类型和形状。如果试图把字段重命名成现有的字段名称，那么会发生错误。字段名称不分大小写(小写和大写一样)。在改变数据类型时，VEE会试图根据数据类型强制转换规则，把现有数据强制变成新的数据类型。

Value -- 允许编辑字段中的值。如果字段是数据类型不同于Enum的标量容器，那么Value是一个输入字段。也就是说，可以点击字段，输入所需的值。如果字段是一个Enum或Array 1D容器，那么Value字段是一个按钮，会调出一个对话框，允许选择值。如果字段是一个两维或多维数组，那么可能不能编辑值。

对象菜单

Add Record -- 在记录数组末尾添加一条记录。新记录是数组中最后记录的拷贝。(这个菜单选项对记录标量没有激活。)

Insert Record -- 在目前正在查看的记录数组位置插入一条记录。新记录是正在查看的记录的拷贝。(这个菜单选项对记录标量没有激活。)

Delete Record -- 从数组中删除目前正在查看的记录。(这个菜单选项对记录标量没有激活。此外，对记录数组，只有在数组中有一条以上的记录时，这个选项才会激活。)

Add Field -- 在字段列表末尾的记录中添加一个新字段。对话框允许定义新字段的名称、类型和形状。

Insert Field -- 在指定位置在记录中插入一条新记录。对话框允许定义新字段的名称、类型和维度。第二个对话框允许定义插入点。

Delete Field -- 允许删除记录字段。对话框将列出可以删除的字段。只有在记录有一个以上的字段时，才能使用这个选项。

属性

DataShape - 使用这个对象设置要输出的值的初始数据形状。可能的值是标量和Array 1D。

 ArraySize: - 在选择DataShape 1D Array时，Size设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除线。只有在选中DataShape 1D Array时才能使用这一选项。

 Schema Fixed - 在这一属性为True时，记录的格式("模式")是固定的，不可以修改。在允许用户以互动方式在弹出面板上修改Record值时，可以使用这一字段。

NumberFormats:

Global Format - 使用默认格式。默认值为打开。

Integer: - 如果Global Format关闭，那么指定在这个对象上显示的整数的数字格式。选项有Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a)和Binary (如#B00101010)。默认值为Decimal。

Real: - 如果Global Format关闭，那么指定在这个对象上显示的实数的数字格式。选项有Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入允许以程序化方式改变当前值。这一输入要求一个值Record，其类型可以是Scalar或Array 1D。Constant会重新配置，以便与进入的数据形状相匹配。

Reset输入允许以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。(数字字段变成零，Text字段变成空字符串。) 忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入允许以程序化方式控制能否在对象的open view中改变值。

Default Value端用来编辑大的记录数组(例如，使用From DataSet对象的"拉入"的记录数组)。只需把记录数组发送到Default Value端，为Record Constant设置初始值即可。然后可以查看及以互动方式编辑整个记录。可以改变数据值，还可以改变字段的类型、形状和映射关系(除非字段本身是一条记录)。一旦已经编辑了记录，它可以输出到一个新的数据集或文件中(使用To DataSet或To File)。Record Constant对象不允许编辑本身是记录的字段 -- 它只允许查看字段及其数据。

注意Record Constant对象不允许创建由记录组成的记录。也就是说，Record Constant不允许添加是记录的字段。但是，所有其它VEE记录对象(如Build Record和Set Field)则允许进行这一操作。允许进行递归，直到可用的用户内存极限。也就是说，记录可以有一个字段，这个字段是一个记录，记录内部又有一个记录字段，依此类推。记录容器的形状只能是标量或一维数组。

位置

Data [image] Constant [image] Record

另请参阅

Build Record, From DataSet, Merge Record, Set Field, To DataSet和UnBuild Record。

创建记录常数


Remove

从给定字符串中删除指定的子字符串。

位置

System [image] String [image] Remove


Repeat

一个菜单项。

用途

使用Repeat存取下述迭代符和迭代控制对象：

For Count

For Range

For Log Range

Until Break

On Cycle

Next

Break

备注

可以嵌套迭代符。

持续执行迭代符提供主机的子线程，直到发生下面其中一种情况：

所有对象已经运行。子线程迭代已经完成。

Break对象已经运行。子线程被去活，序列输出端被激活。

Next对象经运行。子线程被去活，迭代计数器递增。

在迭代子线程结束时，序列输出端被激活。

位置

Flow [image] Repeat

另请参阅

Break, For Count, For Range, For Log Range, Next, On Cycle, 和Until Break。

循环部分VEE程序


Replace

用另一个对象替换这个对象及其连接。

用途

使用Replace替换一个对象，同时保持连接。

Replace把被替换的对象拷贝放在Paste缓冲器中。

备注

每次Replace会用原始对象覆盖Paste缓冲器以前的内容。

从上到下连接各个端。如果连接到原始对象上的线数多于新对象上的端数，那么会删除多出的线。如果连接到原始对象的线数少于新对象上的端数，那么新对象上最底下的端不连接。

Replace只在一个上下文内部工作。例如，为Replace UserObject中的对象，先把替换对象放在UserObject上下文中。

除非对象被连接到一个或多个对象中，否则Replace不能使用。

位置

在每个对象菜单上 [image] Replace

另请参阅

对象菜单, Cut (对象菜单), Copy和Paste。


Replace (System Menu)

Replace

用提供的文字替换给定字符串中的子字符串。

位置

System [image] String [image] Replace


Restore (Object Menu)

Restore (对象菜单)

把对象恢复到Open View中。

用途

使用Restore显示对象的Open View。

备注

可以从所有对象的图标视图中使用Restore。

从最大化的UserObject中，Restore将把Open View调整为非最大化尺寸。

快捷方式

为恢复对象，双击图标。

位置

在对象菜单上 [image] Restore

另请参阅

Minimize (对象菜单)。


Run/Resume

在程序暂停后，使所有暂停的线程继续运行。

用途

在程序暂停后，使用Run/Resume恢复程序执行。如果按Pause按钮、如果达到断点或如果使用Step函数，那么程序会暂停。

Run/Resume主要用来继续在断点之间继续执行，通常与其它调试工具一起使用。

备注

工具栏上的Run/Resume按钮与Run按钮相同。如果按Stop，那么不能使用Run/Resume。

快捷方式

按CTRL + G键或F5功能键，将激活Run/Resume。

位置

Debug [image] Run/Resume

另请参阅

Pause, Run, Start, Step Into, Step Over, Step Out, Stop, 和切换断点。

逐步通过程序


Run

开始执行程序中的所有线程。

用途

使用Run开始执行程序。如果在主工作区的线程上使用Start对象，那么从这些对象开始执行程序。

在选择Run时，VEE PreRun所有线程，清除数据，检查反馈。如果默认首选项中的Execution Mode设为VEE 4或更高版本，VEE会预测对象执行顺序，确定哪些数据类型在某些线上流动，为每个对象生成汇编的代码。

备注

如果在程序中有多个线程，且希望只运行其中一个线程，那么把Start对象连接到该线程上。在希望运行的线程上按Start对象。

快捷方式

按CTRL+G或F5运行程序。

位置

Debug [image] Run

另请参阅

Pause, Run/Resume, Start, Step Into, Step Over, Step Out,和Stop。

启动VEE程序


Sample & Hold

存储收到的最新数据容器的对象。激活XEQ端会输出存储的容器。

用途

使用Sample & Hold捕获XEQ激活时输入端上最后出现的数据。

范例

使用Sample & Hold，保存If/Then/Else或 Conditional流程对象的后续线程段中的对象(其也位于迭代子线程中)生成的数据。

备注

一般不需要Sample & Hold，除非一个线程中同时存在迭代和流程分支。在默认状态下，对象通常会在输入端保留收到的最新数据容器。

Sample & Hold只保存到达InData 输入的最新数据容器。在新数据到达时，它覆盖现有数据。

如果连接了Sequence In端，那么在接受数据容器，替换存储的现有数据前，必须同时激活InData输入和Sequence In端。

Sample & Hold在XEQ端激活时运行。在Sequence Out端激活前会尽可能远地传播。

PreRun和Activate时清除Sample & Hold的内容。如果激活XEQ时没有存储数据，那么会生成错误信息。

由于Sample & Hold上要求XEQ，因此不能删除它或添加另一个XEQ端。

如果没有新数据到达，多个XEQ激活中的每个XEQ激活会重新发送存储的最新数据。

位置

Flow [image] Sample & Hold

另请参阅

Repeat, If/Then/Else, Conditional, UserObject, Properties (对象)和对象菜单


Save

把工作区中的程序复制到以前指定的文件名中。

用途

定期使用Save，把程序写入文件中。

警告

以Agilent VEE Pro 8.0或更高格式保存的文件可能不能检索到较早版本的VEE中。

备注

Save把程序写入Save As或Open中指定的文件名中。如果从New工作区中创建一个程序，没有完成Save As，那么Save会提示您一个文件名称。在写入程序时，指针会变成铅笔。

VEE允许在程序文件中保存颜色和字体(由默认首选项定义)。Save File对话框中新增了一个复选框Save colors and fonts with program。

VEE允许把I/O配置信息嵌入到程序本身中。为能够嵌入配置信息，在Save File对话框中已经新增了一个复选框Save I/O configuration with program。如需与保存I/O配置有关的更多信息，请参阅Instrument Manager。

Save在覆盖文件时不要求确认。

保存文件可能会影响其兼容能力。例如，检索到第6版中并保存的第5版文件不再能够兼容第5版。

快捷方式

按CTRL+S保存程序。

位置

File [image] Save

另请参阅

Merge, Open, Save As和Save Objects。


Save As

把工作区中的程序复制到指定文件中。

用途

使用Save As为程序指定一个文件名，把程序写入该文件中。

选择Save colors and fonts with program，在Default Preferences对话框中选择的程序文件中保存所有默认颜色和字体。这保证了不管谁打开程序，都会获得所有默认颜色和字体。如果没有选择这个选项，那么只有在程序中明确设置的颜色和字体才会保存在程序文件中。这允许使用程序的其它人保留自己的默认颜色和字体。如果加载现有程序，那么将根据以前保存程序的方式设置选项。

Save As在默认状态下启用Save I/O configuration with program。如果不想使用嵌入式I/O配置，那么可以反选这个选项。VEE允许在程序本身中嵌入I/O配置信息。如需与保存I/O配置有关的更多信息，请参阅Instrument Manager。

警告

以 Agilent VEE Pro 8.0或更高格式保存的文件可能不能检索到较早版本的VEE中。

备注

如果试图覆盖现有文件，系统会要求确认操作。在写入程序时，指针变成铅笔。

Save As中指定的文件名变成后续Save操作中使用的名称。

当前文件保存为filename.bak；新保存的版本只是filename。注意，如果文件名中已经包括扩展名(如.vee)，那么将用.bak替换这个扩展名。

VEE允许在程序本身中嵌入I/O配置信息，而不是使用veeio资源文件。为能够嵌入配置信息，在Save File对话框中已经新增了一个复选框Save I/O configuration with program。如需与保存I/O配置有关的更多信息，请参阅Instrument Manager。

保存文件可能会影响其兼容能力。例如，检索到第6版中并保存的第5版文件不再能够兼容第5版。

快捷方式

按CTRL+W进入Save As。

位置

File [image] Save As

另请参阅

默认首选项, Merge, Open, Save,和Save Objects。


Save Documentation

创建一个文本文件，其中包含当前程序的描述。

用途

使用Save Documentation获得程序列表，以进行存档。来自Save Documentation的输出文件包括下述信息：

源文件名。

存档日期。

VEE的当前版本号。

保存文件版本。

系统首选项(颜色和字体除外)。

对象名称和类型。

对象的Open View信息(如Constant值或处理)。

从Description中输入的对象描述文本。

备注

Save Documentation替换以前修订版VEE中存在的veedoc辅助工具。

Save Documentation文件中不包括Do, Junction和Gate对象，除非它们已经从Description中输入了描述文本。

为Save Documentation文件中每个对象指配的编号与使用Print All时对象旁边打印的编号相对应。

由于在一行上打印常数数据，因此不打印数组和记录，以便能够使用常用的文字处理程序读取文件。

Save Documentation不保存颜色和字体信息或I/O配置。

位置

File [image] Save Documentation

另请参阅

默认首选项, Print Program, Save, 和Save As。

存档程序


Save Objects

把选定的对象复制到某个文件中。

用途

使用Save Objects为一个对象集指定一个文件名，把这些对象写入该文件中。Save Objects一般用来把一组对象保存到其它程序包括的一个常用函数库中。

备注

使用Save Objects从程序中复制用于其它程序的对象集。Save Objects允许构建一个由您自己的函数组成的库。在写入对象时，指针变成铅笔。

如果您试图覆盖现有文件，系统会要求确认该操作。

Save Objects不保存颜色和字体信息或I/O配置。

位置

File [image] Save Objects

另请参阅

Merge, Open, Save和Select All.

创建UserObjects库

保护UserObject安全


Send to Back (Object Menu)

Send to Back

把一个对象发送到看得见的平面的背面。

用途

Send to Back是Panel上的一个对象菜单选项，把一个对象放在看得见的平面的后台中，改变对象的z顺序。

另请参阅

Bring to Front (对象菜单)


Select All

选择前面窗口中要操作的所有对象。

用途

在Edit菜单中使用对象功能前，必须选择要操作的一个对象或一个对象集。选择Select All，将选择前面窗口或活动窗口中的所有对象。在选择一个对象时，它会用阴影高亮度显示。为选择一个以上的对象，但不是所有对象，按住CTRL，使用鼠标左键同时选择多个对象。在选择多个对象后，选择一个编辑功能，如Cut或Copy。

备注

在使用Select All时，以前选择的任何对象会被反选。

如果错误地选择了多个对象，那么点击工作区，可以反选所有对象。也可以按CTRL键，同时点击不希望的对象，可以反选这些对象。

只有在同一个VEE上下文中的对象(UserObject, UserFunction, 等等)才能一起选择。

快捷方式

按CTRL键，同时在多个对象上点击鼠标左键。也可以按CTRL键，同时拖动(按下鼠标左键)橡胶圈选择多个对象。

这些快捷方式允许切换对象选择。在选择其它对象前，这些方法不能反选以前选择的所有对象 (Select All则能)。

按CTRL + A会选择活动细节视图/面板视图中的所有对象。

在一个对象上按鼠标左键，可以选择这个对象，但这也会反选已经选择的任何对象。

位置

Edit [image] Select All

另请参阅

Add To Panel, Align, Copy, Create UserObject, Create UserFunction, Cut, Print Objects, Replace, Paste, 和Save Objects。


Selection Control

从用户自定义的列表中输出枚举值的对象。Selection Control对象有各种显示格式，但这些格式的工作方式相同。

用途

使用Selection Control对象，设置枚举常数或获得在可以接受的选项中选择的用户输入。列表中的第一项指配普通位置0；列表中的第n项指配普通位置n-1。

对象菜单

Edit Enum Values - 允许在枚举的选项列表中添加有效选项，或编辑现有的选项。添加一个选项，然后按Tab键，移动到列表中的下一项。按 Shift+Tab，可以在列表中向回向上移动。

属性

Format属性: - 指明Selection Control对象的外观及选择选项的方法。默认格式是从菜单中选择任何对象。

Radio Buttons - 显示所有选项。在按选项旁边的单选按钮时，进行选择。

Cyclic Button - 在点击按钮字段时，循环出现各个选项。在有两个选项时，如On/Off或Stop/Go，或在由另一个按钮确认选项的对话框中，最好使用这一选项。

List - 如果不能一次显示所有选项，那么在列表框中显示多个选项。在点击选项时，进行选择。

Drop-Down List - 在按字段右面的箭头时，在下拉的列表框中显示选项。在点击选项时，进行选择。

Pop-Up List - 在按按钮字段时，在显示的对话框的列表框中显示枚举的选项。在点击选项及按OK时，进行选择。

Slider List - 枚举的选项在滑尺上作为三叉标签显示。在点击滑尺按钮或标签时，进行选择。

Execution 组：

Wait for Input - 在选中这个复选框时，只有在对象值变化时对象才会操作。在没有选中这个复选框时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为关闭。

Auto Execute - 在选中这个复选框时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略Auto Execute。默认值为关闭。

FormatSliderLayout 属性：

Horizontal | Vertical - 设置滑尺显示的方向。只在Format设置为滑尺列表时有效。

Initialization 类别：

Initial Value - 指定要设置的值。默认值是列表中的第一个选项。

Initialize At PreRun - 在选中这个复选框时，在PreRun时设置Initial Value。默认值为关闭。

Initialize At Activate - 在选中这个复选框时，在Activate时设置Initial Value。默认值为关闭。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing, Disable Editing和Enum Values添加控制输入：

Default Value输入可以以程序化方式改变当前值。这一输入要求一个Text Scalar值 (或可以转换成Text Scalar的任何数据，包括Enum)。这个值必须与其中一个可能的Enum值匹配(区分大小写)。

Reset输入允许以程序化方式把当前值设置为列表中的第一个值(0或普通值)。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

Enum Values输入允许以程序化方式为Selection Control设置可能的取值列表。这个输入要求Enum、Text Array 1D或可以转换成Text Array的任何数据。

对许多对象，Enum容器自动转换成Text，包括Collector, Concatenator, Sliding Collector和大多数Formula对象。

为获得选定值的普通值，把一条线连接到Ordinal输出上，而不是选择的字符串上，或者使用ordinal()。

范例

为作为用户面板上的提示使用Selection Control，把对象的名字变成提示，如"Choose the type of test:"。

位置

Data [image] Selection Control

另请参阅

Complex, Constant, Coord, Date/Time, UInt8, Int16, Int32, PComplex, Real32, Real64, Text, Toggle Control和List Box。

ordinal(x)

使用数据选择对象


Send Mail

这个功能强大的对象允许发送邮件，其前提条件是需要有一个SMTP服务器地址。其余要求则是标准电子邮件功能：收件人, 发件人, 主题和正文。

位置

System [image] Send Mail


Service Manager

Service Manager是使用Remote Functions的前提条件。它管理着在远程主计算机上运行的"服务"与在本地主计算机上运行的"客户端"之间的通信。在发起使用远程函数前，必须先在远程主机系统上启动Service Manager。

在采用Microsoft XP SP2的系统上运行Service Manager时，该操作系统新增的防火墙功能可能会导致问题。在第一次运行时，Service Manager可能会被封锁。如果发生这种问题，您会收到安全警报。选择Unblock this program, despite the security risk.，点击OK。

另请参阅

Remote Functions


Set Field

允许修改现有记录字段的对象。

尽管已经包含该对象的老式程序上仍支持这个对象，但Set Field已经被淘汰，不能添加到新程序中。Assignment Formula对象是这个对象的替代方式，其位于Function & Object Browser中的Type: Operators; Category: Assignment下。

用途

Set Field过去用来修改现有记录的字段值。Set Field对象实际上是一个Formula对象，它把右侧表达式指定的值赋给左侧表达式指定的字段。右侧表达式中的值可以求解为标量、数组、另一个记录或记录中的一个字段。

Set Field是拆除记录、改变一个字段和把数据重建到记录中的快捷方式。注意有两个输出端Result和Rec。Result只输出对象中参考的字段。Rec输出整个记录。此外，左侧表达式结果和右侧表达式结果的类型和形状必须匹配。不能使用Set Field改变输入记录中的"模式" (类型和形状)。

Open View参数

表达式输入字段--这个输入字段允许直接改变记录的一个要素。左侧表达式支持Formula数学语法的一个子集，允许指定记录的一个字段。它支持A.B句点语法及A[2]子数组语法的一个子集，指定要改变的记录的某个字段。如需与支持的语法有关的进一步详情，请参阅下面的"备注"。右侧表达式支持Formula对象中支持的任何数学表达式。这个表达式可以进入所有输入容器、变量和函数。右侧表达式求解，得到的值存储在左侧表达式指定的记录的字段中。

备注

记录输出端的名称必须与要修改的输入记录的名称相匹配，左侧表达式必须以该名称开头。例如，如果记录端的名称为Rec，左侧表达式必须类似于Rec.A或Rec[1]。左侧表达式必须是单个表达式，指定要修改输入容器的哪个字段。

输入、输出和记录字段的名称可能会发生混淆。例如，如果记录输入端和记录输出端的名称是Rec (必须相匹配)，那么表达式Rec.A指输入记录中的A字段。而表达式A*2则指Set Field对象的A数据输入。因此，Rec.B=A*2把输出记录的B字段设成等于A数据输入值的两倍。而Rec.B=Rec.A则把输出记录的B字段设成等于输入记录A字段的值。

完整的输入记录容器输出在记录输出端，但会修改指定的字段。例如，假设输入Rec是带有两个字段x和y的记录，其中x是Text标量，取值为"hello"；y是Real64标量，取值为1.2。如果左侧表达式指定Rec.y，右侧表达式求解为5.6，那么Rec输出容器将是带有两个字段x和y的记录，其中x是Text标量，取值为 "hello"；y是 Real64标量，取值为5.6。Result输出将只包含y字段，在本例中是Real64标量，取值为5.6。

左侧表达式指定的字段和右侧表达式的结果必须在类型和形状("模式")上相匹配。也就是说，Set Field对象操作不能改变输入记录的模式，而只能改变指定字段中的数据。例如，假设输入Rec是带有两个字段x (Text标量)和y (Real64标量)的记录。如果左侧表达式指定Rec.y，右侧表达式必须得出Real64标量，或可以晋级到Real64标量的标量。否则会发生错误。

记录数组要求特别注意。记录数组是由各个记录要素组成的、每个记录要素又由多个字段组成的数组。可以使用Set Field，改变记录数组中一个要素的一个字段。例如，如果创建一个记录1D数组，且希望改变数组中第三个记录要素的f字段，那么在左侧表达式中指定Rec[2].f (对基于零的数组)。在这种情况下，右侧表达式的结果放在记录1D数组第三个要素的f字段中。它不改变Rec[2]的任何其它字段，也不改变数组其它记录要素的任何字段(如Rec[0].f和Rec[1].f)。

另一方面，可以使用Set Field修改记录数组每个记录要素中的某个字段。例如，假设在左侧表达式中指定Rec.f，其中Rec是由n个要素组成的记录1D数组。在这种情况下，右侧表达式的结果被复制到每个Rec[x].f字段中，其中x是从0到n-1。换句话说，在数组的每个记录要素中改变f字段。

右侧表达式必须是单个表达式，指定要修改输入记录的哪个部分。例如，Rec+2和sine(Rec)不能作为有效的左侧表达式。另外，在左侧表达式中不允许使用变量。

左侧表达式允许的语法具有限制：

可以对记录的记录容器使用A.B句点子记录语法任意次数(没有递归限制)。假设记录A有一个字段b，其本身是一个记录。记录字段b有一个字段c，它是包含字段d的一个记录。为指定该最低级字段d，可以使用A.b.c.d作为左侧表达式。

A[x]子数组语法限制更多，在最后的句点前只能使用一次。例如，A.b.c[1].d是有效的左侧表达式，但不允许使用A[2].b.c.d和A[2].b[2].c。此外，不允许使用A[1]和A.b.c[1:2]。但是，在最后一个句点前支持的A[x]子数组语法确实支持"冒号和星号"语法。例如，A[1:2].b和a.b.c[2:*].d都是有效的左侧表达式。

注意A[1].b和A.b[1]之间的区别，前者是拥有字段b的记录1D。后者是包含字段b(是一个1D数组)的标量记录。

位置

Data [image] Access Record [image] Set Field

Set Field已经被淘汰。这个菜单项会得到Assignment Formula对象。

另请参阅

Assignment, Build Record, Formula, Get Field, Record Constant, SubRecord, 使用UnBuild Record.

使用赋值操作

改变记录中的字段


Set File Creation Time

设置给定文件的文件创建时间。

位置

System [image] File [image] Set File Creation Time


Set Last File Access Time

设置给定文件最后一次文件访问时间。

位置

System [image] File [image] Set Last File Access Time


Set Mappings

为数组指配映射关系的一个对象。

用途

使用Set Mappings以线性方式或对数方式把数组的一个或多个维度映射到一个实数值范围上。

Open View参数

Num Dimensions - 输入数组中的维数。Num Dimensions必须是一个整数。最小值为1，最大值为10，默认值为1。改变Num Dimensions的值会改变设置Mapping, From和To参数使用的行数，每个维度一行。

Mapping - 对每个维度为Linear或Log。默认值为Linear。

From - 每个维度映射范围(含)的下限。

To - 每个维度映射范围(含)的上限。

可以作为数据输入添加From和To。

备注

如果Waveform或Spectrum是输入，那么其要素重新映射到规范中。Waveform不支持对数映射。

其点数与取样间隔相同。每个点位于取样间隔的开头。

Set Mappings不支持Coord数组作为输入，因为Coord数组一直进行明确映射。

XY显示画面中对Autoscale和各种数学函数使用数组映射。

From和To必须不同。

Num Dimensions字段值必须与输入数组的维数相匹配。

位置

Data [image] Access Array [image] Set Mappings

另请参阅

Allocate Array, Collector, Get Mappings, Line Probe, Sliding Collector和 Properties (对象)


Set Values

允许改变数组容器要素的一个Formula对象。

用途

使用Set Values修改任何类型和大小的数组。这个对象是一个Formula对象，预先带有一个可以改变数组要素的表达式。

可以把多个容器连接到Set Values对象的输入上：要改变的数组，要添加的标量数据，以及指定放置标量数据的数组位置的索引。

为希望替换的数组和要素索引输入新的值。在所有变化完成时，对象会输出修改后的数组及变化后的各个要素。

Open View参数

Expression input field - 这个输入字段允许直接改变数组的要素。表达式左侧允许使用Formula数学语法的子集，允许指定希望改变的数组的要素。它支持A[2]子数组语法，指定要改变的特定数组要素。

备注

所有数组都基于零；所有数组指数都基于零。

如果想在开始时创建数组，使用Allocate Array [image] 对象。

在数组中插入的值的类型必须与数组相同，或可以晋级到相同的类型。

位置

Data [image] Access Array [image] Set Values

另请参阅

Allocate Array, Build Data, Collector, Formula , Get Values, ramp (numElem, from,thru), Set Mappings和Sliding Collector.

使用赋值运算


Set Variable

设置变量数据值的对象。

用途

使用Set Variable对象设置变量(按名称)的数据容器(类型、形状和值)。然后这个变量可以按名称用于VEE程序的其它部分。

在一个程序上下文中创建的未声明全局变量(使用Set Variable创建)可以作为程序另一个上下文中的数据使用。例如，程序根上下文中的Set Variable可以创建一个未声明全局变量，然后可以通过在UserObject中包括Get Variable，可以作为数据使用。这特别适合程序中包含UserObjects的多个嵌套层的情况。

使用Set Variable设置的变量也可以按名称用于下述设备的表达式字段中：Formula, If/Then/Else, Get Values, Get Field, Set Field, From DataSet及在处理中使用表达式的所有设备，包括To File, From File, Direct I/O, From Stdin, To/From Named Pipes和Sequencer。

Open View参数

Open View为变量名称显示一个字段。名称不分大小写(可以使用大写字母或小写字母)。因此，globalA与GLOBALa是相同的变量。可以作为控制输入添加名称字段。

备注

为避免意想不到的结果，程序必须保证在Get Variable对象 (或在表达式中包括变量名称的对象) 执行前使用Set Variable设置变量。一般来说，保证这一点的最佳方式是把Set Variable对象的序列输出端连接到Get Variable对象的序列输入端，或连接到使用变量的其它对象。然而，有时不需要连接序列输入端。如需进一步信息，请参阅VEE程序Help菜单中Contents and Index下的Tell Me About... Variables。

如果启动Delete Variables at PreRun(默认值)，那么在程序执行前会删除所有变量。如果关闭Delete Variables at PreRun，那么将不会删除变量，必须认真编程，避免传播无效数据。

全局变量是真正的全局变量，因为它们不是在UserObject级定义的。在程序的一个上下文中定义的全局变量可以用于程序内任何其它上下文中。例如，可以在程序的根上下文中，使用Set Variable对象定义一个全局变量，然后包括Get Variable，在UserObject或UserFunction中获得该全局变量。但是，必需在整个程序中避免名称冲突：

如果两个或多个Set Variable对象试图设置同一个变量(使用相同的名称)，那么在每次执行Set Variable时将覆盖当前值。如果您不知道名字重复，这可能会导致意想不到的行为。

如果一个数据端变量的名称与一个变量相同，那么数据端变量优先。

如需进一步信息，请参阅VEE程序Help菜单中Contents and Index下的Tell Me About... Variables。

Set Variable不能设置作为数组或记录的部分变量。如果想使用globAry[2] = 3操纵数组或使用globRec.field = 2操纵记录，应使用Assignment Formula输入这些表达式。

Formula中的Assignment与Set Variable差异非常小。Set Variable可以创建未声明变量，初始化声明变量，修改所有变量。Assignment Formula不能创建未声明变量。此外，Set Variable不能修改部分变量，而Assignment则能够修改部分变量，如globalAry[1] = 2。

在为ActiveX对象设置变量时，最好使用Assignment Formula。如果全局变量g_cells声明及初始化为Microsoft Excel工作表的一个单元格，那么Formula 中的Assignment g_cells = 2实际上执行g_cells上设置的默认属性。其效果与g_cells.item = 2相同，会把取值2放到Excel的该单元格中。这种方法作为指向该单元格的指针维护g_cells。如果使用Set Variabl，实际上会覆盖全局变量，以使g_cells是一个整数，而不是指向Excel中的单元格的指针。

位置

Data [image] Variable [image] Set Variable

另请参阅

Assignment, 默认首选项, Delete Variable, Get Variable, View Variables, 和 Properties (对象)

使用赋值操作

创建变量


Shift Register

输出以前输入值的对象。

用途

使用Shift Register存取以前的输入值。

备注

在Shift Register中添加输出，存取以前的值。

Shift Register在开始时把所有输出都设为零。每次激活对象时，来自输入的数据被复制到"当前"输出端。以前位于当前输出中的数据被移动到1 Prev输出。以前执行的数据下移输出端，直到最后输出端。

还可以添加额外的输出，这样用户可以从"n"个以前执行的线程或程序中存取数据。从Properties窗口中关闭Clear at PreRun和Clear at Activate，在后续程序执行中保留数据。

位置

Device [image] Shift Register

另请参阅

Logging AlphaNumeric, Sliding Collector,和Properties (对象)


Show Config (Object Menu)

Show Config (对象菜单)

出现一个对话框，显示仪器驱程面板、组件驱程或直接I/O对象的I/O配置。

用途

从仪器驱程面板、组件驱程或直接I/O对象的对象菜单中，选择Show Config，查看使用I/O [image] Instrument Manager指定的配置。

为改变任何配置参数，使用I/O [image] Instrument Manager。注意，任何变化都会影响使用该仪器及Direct I/O的所有其它对象。为改变Direct I/O对象中的设备，编辑名称字段，选择一台新设备。注意Direct I/O对象中的处理可能不兼容新设备。

位置

在仪器驱程面板、组件驱程或直接I/O对象上：

从对象菜单中 [image] Show Config

另请参阅

Instrument Manager。


Show Data Flow

显示数据通过程序所采取的路由。

用途

使用Show Data Flow作为调试工具，显示输入端和输出端之间的数据流程。它使用小型正方形标尺跟踪数据沿着线的传播流程。即使零数据也以这种方式显示。

在设置Show Data Flow时，菜单选项在左面会有一个对号。

备注

Show Data Flow通常与Show Execution Flow一起使用。这些调试工具将降低程序执行速度。

通过选择File [image] Default Preferences，可以改变标尺移动的速度。在Default Preferences对话框中，在Debug组中，设置Data Flow Rate。

位置

Debug [image] Show Data Flow

另请参阅

Line Probe, 默认首选项, Profiler, Show Execution Flow, Step Into, Step Over, Step Out, 和切换断点。

查看数据流程和程序执行


Show Execution Flow

高亮度显示目前正在执行的对象。

用途

使用Show Execution Flow作为调试工具，显示目前正在运行的对象。在对象周围会出现一个高亮度显示的彩色边框(默认值是浅绿色)，并一直保持到运行结束。目前执行的处理也将高亮度显示在包括处理列表的对象中，如Direct I/O, Sequencer, To File, From File等等。

在Show Execution Flow启动时，菜单选项在左面有一个对号。

备注

Show Execution Flow通常与Show Data Flow一起使用。这些调试工具将降低程序执行速度。

Show Execution Flow还高亮度显示已经执行的对象。为在暂停或错误后在目前打开的窗口中查看哪些对象已经执行，点击Show Execution Flow。

位置

Debug [image] Show Execution Flow

位置

Line Probe, Profiler, Show Data Flow, Step Into, Step Over, Step Out, 和切换断点。

查看数据流程和程序执行


Sliding Collector

输出Array 1D的对象。

用途

使用Sliding Collector，从标量输入数据中创建Array 1D。

对象菜单

Clear - 清除Sliding Collector的内容。

Open View参数

Array Size - 输出数组中的要素数量。Array Size可以是一个数据输入。默认值为10。

Trigger Every - 在数组输出前输入端必须激活的次数。默认值是10。

可以从Open View或从数据输入端输入这两个参数。参数必须是整数。

在数据放到数组中前，Enum输入被转换成Text类型。

备注

通过自动排序通过数组索引，Sliding Collector构建一个Array 1D。一般来说，Array Size和Trigger Every的大小相同。

输出数组一直是长Array Size的Array 1D。输出数组的类型由Clear后面的第一个输入数据确定。

如果Trigger Every小于Array Size，那么 Sliding Collector会生成直接输出。例如，如果Array Size是4，Trigger Every是2，那么Sliding Collector会在两个数据输入之后输出一个长4的数组。输出的前两个要素是数据要素输入；输出的后两个要素是0。

如果Trigger Every大于Array Size，那么将丢弃部分输入要素。例如，如果Array Size是2，Trigger Every是4，那么输出是一个长2的数组，其中包括最后两个数据。数据输入的前两个要素被丢弃。

位置

Data [image] Sliding Collector

另请参阅

Allocate Array, Collector, Concatenator, Get Values, Set Values, Properties (对象)和对象菜单

把数据采集到数组中


Specify Object Type

一个对话框，允许在为ActiveXAutomation对象、控件或a .NET对象声明变量时指定可选的细节。

用途

使用Specify Object Type对话框，设置 Library和Class，在为ActiveX对象声明变量时控制事件。也可以使用Specify Object Type对话框，在为.NET对象声明变量时设置Assembly, Namespace和Type。在为ActiveX或.NET对象声明变量前，必须先为VEE提供这些变量。对ActiveX对象，使用Device [image] ActiveX Automation References或ActiveX Control References?#12290;对.NET对象，使用Device [image] .NET Assembly References。

与所有其它变量一样，为ActiveX对象声明变量是可选的。但是，通过为ActiveX对象声明变量，指定对象类型细节，VEE将自动进行类型检查，以保证只为声明变量指配指定的Library和Class。

声明Automation对象变量实际上不会为您创建对象。对Automation对象，必须仍使用Formula表达式中的CreateObject函数，创建程序中使用的对象。下面的表达式提供了一个范例：

Set Excel = CreateObject("Excel.Application")

类似的，声明.NET对象变量实际上并不会为您创建对象。为创建.NET对象，必须仍使用Formula表达式中的CreateInstance函数，创建程序中使用的对象。下面的表达式提供了一个范例：

Set hashtable = CreateInstance("mscorlib", "System.Collections.Hashtable");

对话框信息

ActiveX对象

Library: - 点击这个区域，出现提供的ActiveX库下拉菜单。在使用Device [image] ActiveX Automation References?#21644;ActiveX Control References?#36827;行选择时，可以使用这个列表。

Class: - 点击这个区域，出现提供的类下拉列表。列表中包含选择的库中包含的类。

Enable Events - 如果选择的类包含事件，那么这个字段激活。如果想处理ActiveX对象在程序中生成的事件，点击这个选项，出现一个对号。如果需要启用这个选项，一定要创建一个事件处理器UserFunction (对象菜单 [image] Create Event Handler)。

OK - 一旦已经指定了对象类型，点击OK，使Declare Variable对象中的选项生效。

.NET对象

Assembly: - 点击这个区域，出现提供的.NET Assemblies下拉列表。在使用Device [image] .NET Assembly References?#36827;行选择时，可以使用这个列表。

Namespace: - 点击这个区域，出现提供的名字空间下拉列表。列表中包含选择的汇编程序中包含的名字空间。

Type: - 点击这个区域，出现提供的类型下拉列表。列表中包含选择的名字空间中包含的类型。

备注

如果在声明ActiveX对象变量时启用了事件，那么Declare Variable对象会显示Events: Enabled。必须创建一个事件处理器UserFunction。在使用Declare Variable对象菜单中的Create Event Handler?/font> 菜单选项声明变量时，可以简便地完成这一操作。

.NET不支持事件。

位置

Data [image] Variable [image] Declare Variable
(把Type设置成Object，设置Sub-Type，然后点击Edit?/font>)

另请参阅

ActiveX Automation References , ActiveX Control References, Declare Variable.


Spectrum (Freq)

包含频域画面的一个菜单项。

用途

使用Spectrum (Freq)进入下面的频域画面：

Magnitude Spectrum

Phase Spectrum

Magnitude vs Phase (Polar)

Magnitude vs Phase (Smith)

备注

输入必须是Waveform, Spectrum或Coords数组。

如果Spectrum画面的输入是Waveform，那么它会通过快傅立叶变换(fft)自动变换成Spectrum。

位置

Display [image] Spectrum (Freq)

另请参阅

Magnitude Spectrum, Magnitude vs Phase, Phase Spectrum 和Waveform (Time).


Split

把一个字符串分成两段。例如，在字母i上划分单词ordinary，得到两个子字符串：ord 和nary。字母i被破坏。

位置

System [image] String [image] Split


Stack - Clear

清除堆栈中的所有项目。

位置

System [image] Collections [image] Stack [image] Clear


Stack - Count

计算堆栈中的项目数量。

位置

System [image] Collections [image] Stack [image] Count


Stack - Create

创建一个存储堆栈。

位置

System [image] Collections [image] Stack [image] Create


Stack - Enumerate

创建堆栈中的项目列表。

位置

System [image] Collections [image] Stack [image] Enumerate Items


Stack - Peek an Item

抽看堆栈上的一个项目。

位置

System [image] Collections [image] Stack [image] Peek Item


Stack - Pop an Item

从堆栈中弹出一个项目。

位置

System [image] Collections [image] Stack [image] Pop Item


Stack - Push Item

把一个项目推送到堆栈上。

位置

System [image] Collections [image] Stack [image] Push Item


Start

在按下其按钮时，开始执行线程的对象。

用途

在按下其按钮时，Start对象会开始执行其连接的线程，但对其它线程没有影响。(按Run会开始执行程序中的所有线程，而不管线程中是否有Start对象。)

备注

如果程序中包括一个以上的独立线程，那么可以使用Start发起一个线程，而不用运行其它线程。

在按Run或Start时，传播会从Start对象开始。如果一个线程上有一个以上的Start对象，那么传播会从每个Start上开始，只要传播规则允许，就会并行继续。

如果在UserObject内部按Start，那么UserObject会运行，但数据输出端不会激活；因此传播不会继续。

位置

Flow [image] Start

另请参阅

Raise Error, Exit Thread, Exit UserObject, Stop和Properties (对象)

启动VEE程序


Starts With

如果字符串开头是提供的子字符串，那么会返回布尔值真。

位置

System   [image] String [image] Starts With


Status Bar

View菜单上的一种切换功能，控制着VEE Status Bar的可视性。

用途

使用Status Bar打开或关闭VEE状态栏。在打开时，Status Bar菜单选项左面会出现一个对号。

Status Bar是位于VEE工作空间底部的信息框。Status Bar显示各种有用信息，包括：

显示文件加载进度和加载的文件名。

VEE下拉菜单上每个项目的描述文本。

VEE Toolbar上每个按钮的描述文本。

在VEE工作空间中定位对象时，显示临时信息，如X,Y坐标数据。它还为确定对象大小提供了对象Width和Height信息。

VEE程序执行模式的恒定可视状态。

VEE Profiler状态的恒定可视状态。

指明VEE程序是否已经被修改。

提供各种其它临时状态信息，如"File Saved"或"3 objects selected"等等。

位置

View [image] Status Bar

另请参阅

Toolbar


Step Into

一次运行一个基本对象，执行一个程序。

用途

使用Step Into调试程序。每次在选中时，Step Into运行一个基本对象。要执行的下一个对象有一个黄色边框(在默认情况下)。

在遇到一个UserObject或局部或导入的UserFunction时，VEE会把对象放在其细节视图中，执行每个对象。

备注

Step Into 不打开远程函数、内置函数或汇编的函数。Step Into将打开从Formula对象和Call对象中调用的UserFunctions，但不打开从处理对象中调用的UserFunctions。

只有在UserFunction或UserObject进行时间分片时，Step Into才能用于UserFunction或UserObject中。只有在从Call, Formula, If/Then/Else或Sequencer对象中调用时(仅从Function field中)，UserFunction 才进行时间分片。在从To File, To String或类似对象中调用时，或通过控制端提供公式时，UserFunction不进行时间分片。

在VEE 4及更高的执行模式中，只有在从不同的线程中调用时，UserObject才进行时间分片。

不能从有安全保护的程序中使用Step Into。

只有在第一次选择Step Into时才发生PreRun。

快捷方式

F11与Debug [image] Step Into对应。

位置

Debug [image] Step Into

另请参阅

Call Stack, Step Over, Step Out, 默认首选项, Pause, Run/Resume, Run, Show Data Flow, Show Execution Flow, Start, Stop,和切换断点。

逐步通过程序


Step Out

执行完当前UserObject或UserFunction，在下一个对象上暂停。

用途

使用Step Out调试程序。每次在选中时，Step Out运行一个基本对象。要执行的下一个对象有一个黄色边框(在默认情况下)。

如果执行位于UserObject或UserFunction中，VEE将执行完该UserObject或UserFunction中的所有对象，然后退出UserObject或UserFunction。

备注

不能从有安全保护的程序中使用Step Out。

在第一次选择Step Out时会发生PreRun。

快捷方式

Shift-F11与Debug [image] Step Out相对应。

位置

Debug [image] Step Out

另请参阅

Call Stack, Step Into, Step Over, Default Preferences, Pause, Run/Resume, Run, Show Data Flow, Show Execution Flow, Start, Stop和切换断点。

逐步通过程序


Step Over

一次运行一个基本对象，执行一个程序，而不打开UserObjects或UserFunctions。

用途

使用Step Over调试程序。每次在选中时，Step Over运行一个基本对象。要执行的下一个对象有一个黄色边框(在默认情况下)。

在遇到UserObject或UserFunction时，VEE会整个执行对象。

备注

不能从有安全保护的程序中使用Step Over。

在第一次选择Step Over时，会发生PreRun。

快捷方式

F10与Debug [image] Step Over相对应。

位置

Debug [image] Step Over

另请参阅

Call Stack, Step Into, Step Out, Default Preferences, Pause, Run/Resume, Run, Show Data Flow, Show Execution Flow, Start, Stop和切换断点。

逐步通过程序


Stop

停止程序中的所有线程。

用途

使用Stop停止程序执行。在选择Stop后，按Resume继续执行。

备注

在选择Stop时，程序进入"停止"状态，清除任何高亮度显示，关闭任何打开的文件和I/O通道。

位置

Debug [image] Stop

另请参阅

默认首选项, Pause, Run/Resume, Run, Step Into, Step Over, Step Out, Properties (对象), Stop (对象), 和Toggle Breakpoint。

逐步通过程序

停止VEE程序


Stop (Object)

Stop (对象)

停止执行程序的一个对象。

用途

使用Stop，暂停执行程序中的所有线程，返回一个错误代码。Stop通常用于针对某个条件执行测试以后。

打开视图参数

Exit Code - 一个数字，指明程序的状态。可以在凹进的矩形中输入Exit Code，或作为数据输入添加Exit Code。Exit Code是一个8位整数，输出到操作系统中；如果输出大于255，那么它是输出模数256 (256输出为0)。

如果使用-r选项运行VEE，Stop会退出VEE。

位置

Flow [image] Stop

另请参阅

Exit Thread, Exit UserObject, Raise Error, Start和Stop。

停止VEE程序


String - Add

在字符串集合中添加一个字符串。

位置

System [image] Collections [image] StringCollection [image] Add String


String Collection - Clear

清除给定集合中的所有字符串。

位置

System [image] Collections [image] StringCollection [image] Clear StringCollection


String Collection - Create

创建一个字符串项目集。

位置

System [image] Collections [image] StringCollection [image] Create


String - Contains String?

在某个字符串集合中搜索某个字符串值。

位置

System [image] Collections [image] StringCollection [image] Contains String?


String - Count

计算字符串集合中的字符串数量。

位置

System [image] Collections [image] StringCollection [image] Count


String - Get

从给定索引给定集合中获得一个字符串。

位置

System [image] Collections [image] StringCollection [image] Get String


String - Get All

从给定集合中获得所有字符串。

位置

System [image] Collections [image] StringCollection [image] Get All Strings


String - Remove

从字符串集合中删除一个字符串。

位置

System [image] Collections [image] StringCollection [image] Remove String


Set String

设置给定集合给定索引的字符串值。

位置

System [image] Collections [image] StringCollection [image] Set String


String Compare

比较两个字符串值。还可以检查大小写。

位置

System [image] String [image] Compare


Strip Chart

显示连续生成的数据的对象。

用途

使用Strip Chart显示连续生成的数据的最新历史。对每个y输入值，x值会以指定的Step步长递增。在新数据运行到显示画面右侧之外时，画面会自动滚动，显示最新数据。

Strip Chart保存发送它上面的所有数据，直到被删除，但在缓冲器容量设置为限定值时除外。

与其它图形画面不同，数组数据将追加到Strip Chart的末尾，而不是先清除轨迹。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Y name - Y轴的名称。

Trace1 - 第一条轨迹的名称。

Step Size: - X轴上数据点之间的距离。

X name - X轴的名称。

对象菜单

Auto Scale [image] - 点击这些菜单项，立即把画面重新定标成显示整条轨迹。(可以添加为控制端）

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用�橡皮圈�框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Radius轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

ShowScalesLabels - 在Open View中，控制标为标度轴的值的可视性。默认值为True。

 Show Scroll Bars - 在Open View中，控制X和Y标度上滚动条的可视性。默认值为True。

ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

EnableEditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType: - None - 不显示格线。

Markers Group: - 允许查找显示的曲线上某个数据点的确切值。如果在对数标度上绘制数据图，标尺上显示的值是线性数据点。

为把标尺移动到一条不同的轨迹上，进入Open View，点击画面底部附近标尺值左面的按钮。按钮顺序通过不同轨迹的不同线型和颜色。

NumMarkers - 图表上的标尺数。 None是默认值。

MarkerInterpolate - 在属性为True时，可以把标尺放在显示的数据点之间。通过线性内插计算显示的标尺值。默认值为False。

BufferSize - 指定内存中存储的点数。默认值为10000。

Display BackColor: - 允许从调色板中选择显示区域的颜色。当画面出现在细节视图和面板视图中时，可以选择不同的颜色。默认的Background颜色在Screen Element: Graph Background的Colors 栏Default Preferences中设置。

Scale Label组：

Text: - 允许从系统提供的字体列表中选择标度标记的字体。默认标度标记文本的字体在Screen Element: Graph Background的Fonts栏Default Preferences中设置。

Traces 组：（每条轨迹一个）

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Scale: - 如果有多个Y标度，选择这条轨迹使用的Y标度。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值为yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这个轨迹定标的标度。

Scales 属性： (每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

 Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 不能调节。默认值为off。可以作为控制输入添加Auto Scale。也可以使用General栏中的Show Auto Scale Button，或使用对象菜单中的Auto Scale调整显示画面。

Maximum: - 标度最大值。

Minimum: - 标度最小值。

Label Spacing: - 控制哪个标志标有标度值。X标度的默认值为Every Other Tic； Y标度的默认值为Every Major Tic。

Mapping: - y数据映射到显示画面的方式。映射可以是线性或对数。X轴不能调节。默认值为 Linear。

Log Cycles: -当Auto Scale被激活时显示的10的最大数量（从y最大值向下数）。当Mapping是Log时，只能使用Log Cycles。当轨迹在数据中包含一个大的动态范围时，使用Log Cycles。默认值为4。

Scale Color -任意背景栅格或tic号的颜色。默认值为Gray。

Step Size -X轴上数据点之间的距离。只适用于X轴线。默认值为1。

ScaleNumberFormat：（X标度和Y标度及任何额外Y标度出现的一个组）

Global Format -使用默认格式。默认值为on。

Real: -如果Global Format关闭，指定在这个对象上显示的实数的数字格式。选项包括：Fixed （如98.6000），Scientific （如9.8600E+01)，Engineering （如98.6000E0），Standard （如98.6），和Time Stamp（如Sat 01/Jan/1994 17:01:38）。默认值为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入必须是能够转化成Real64类型的Scalar或Array 1D。在输入到Strip Chart之前，必须�拆除�Complex，PComplex和Spectrum值。

为在Strip Chart上实现最佳的更新速度和最大的显示区域，复位某些Properties。把Set Grid Type设为None。在Layout区域中，除必须选项外，关闭所有其它选项。把Buffer Size设得尽可能小。设置X标度Maximum值，以便降低画面滚动频度。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到n的整数，其中0不绘图，n是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Strip Chart

另请参阅

Complex Plane, 默认首选项, Magnitude Spectrum, Polar Plot, Waveform (Time), XY Trace和X vs Y Plot.

在显示画面中设置标尺, 获得和设置标尺属性


SubRecord

允许用户从一条记录中切掉大量字段的对象。

用途

使用SubRecord在Record输出端上输出原始记录的一个子集，并从记录中"切掉"指定的字段。要编辑的记录在Record输入端输入。输出记录中"包括"或"不包括"的字段列表在Fields输入端输入。

如果在open view中选择Include fields，输出记录只由Fields输入中的字段组成。

如果在open view中选择Exclude fields，输出记录由原始记录中的所有字段组成，但不包括 Fields输入中列出的字段。

Open View参数

Include fields -- (默认模式) 只使用其字段位于Fields数据输入端字段名称列表中的输入记录构建输出记录。这个选项与Exclude fields切换。

Exclude fields -- 只使用其字段没有位于Fields数据输入端字段名称列表中的输入记录构建输出记录。

备注

Fields输入端可以是由输出记录中包括/不包括的记录字段名称组成的文本数组。

如果试图包括/不包括的字段不在输入记录中，那么会发生错误。如果不包括记录的所有字段，那么会发送空输出信号。

注意UnBuild Record, SubRecord和Get Field对象之间的区别。

UnBuild Record对象为输入记录字段Name List和Type List提供输出。UnBuild Record对象的其它(可选)输出A, B等返回的结果与多个Get Field对象相同。

Get Field对象的工作方式与Formula对象的类似之处是它使用句点语法(A.B)构建记录。注意，Get Field允许使用A.B.C之类的表达式，用一个步骤拆除记录的记录。这一过程要求两个UnBuild Record对象。

SubRecord对象与UnBuild Record和Get Field的区别在于，其输出总是一条记录。SubRecord对象允许包括或不包括一条记录中的字段列表，形成一条子记录。

位置

Data [image] Access Record [image] SubRecord

另请参阅

Build Record, From DataSet, Get Field, Record Constant, Set Field, To DataSet, UnBuild Record和Properties (对象)


Subtract (System Menu)

Subtract

从另一个时间值中减去一个时间值。

位置

System [image] DateTime [image] Subtract


System Directory

检索主机系统的系统目录。

位置

System [image] Environment [image] System Directory


Tank

使用坦克图形内部的色条以图形方式显示Scalar数字值的对象。

用途

使用Tank在模拟标度上用坦克图形内部的色条及可选的数字字段显示一个数字值。

Open View

通过点击当前值，输入一个新值，可以在对象的open view上设置Tank的最小值和最大值。它自动计算和显示Tic号及其标签。最小值必须小于最大值。

还可以作为控制输入添加这些值。

属性

ClearAtPreRun - 在这一属性为True时，在PreRun时清除Tank的内容。默认值为True。

ClearAtActivate - 在这一属性为True时，在Activate时清除Tank的内容。默认值为True。

Orientation - 选择怎样显示Tank。 默认值为Vertical。

ShowDigitalDisplay - 在这一属性为True时，在对象Open View的底部会显示输入值的数字画面。如果没有选择复选框，不显示数字画面，对象运行速度会更快。默认值为True。

ShowTics - 控制是否显示标度的tic号和标签。默认值为True。

Logarithmic - 在启动时，把标度从线性变成对数。默认值为False。

LabelSpacing - 控制在哪个tic号上标上标度值。默认值为Every Other Tic。

HighColor - 指定最高范围使用的颜色 (即大于High Limit)。

High Limit - 定义最高范围的数字下限。这个值必须大于等于Low Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

MidColor - 指定中间范围使用的颜色 (即小于等于High Limit，且大于Low Limit)。

Low Limit - 定义最低范围的数字上限。这个值必须小于等于High Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

LowColor - 指定最低范围使用的颜色(即小于等于Low Limit)。

NumberFormat:

Global Format - 使用默认格式。默认值为on。

Real: - 如果Global Format关闭，那么为这个对象上显示的实数指定数字格式。选项包括 Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Wed 01/Jan/2003 17:01:38)。默认值为Standard。

备注

输入数据必须是Scalar，并能够转换成Real64 (Complex, PComplex, Spectrum和Coord必须先"拆散"。)

Low Limit必须小于High Limit。

如果只想使用两个颜色范围，把Low Limit设置成等于High Limit。

如果只想使用一种颜色，把Low Color、 Mid Color和High Color设置成相同的颜色。

快捷方式

为迅速改变Tank的方向，只需把它调整到所需的形状。它会自动改变方向。

位置

Display [image] Indicator [image] Tank

另请参阅

AlphaNumeric, Color Alarm, Fill Bar, Logging AlphaNumeric, Meter, Thermometer和对象菜单

显示数据的模拟画面


Text

输出常数字符串Scalar或Array 1D的对象。

用途

使用Text设置字符串常数或请求用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的提示使用Text，把Text对象的名字变成提示，如 What is your name? 。用户在输入字段中填写请求的信息。

属性

DataShape - 设置这一对象输出的值的初始数据形状。

ArraySize: - 在选择1D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择1D Array时才能使用这一选项。

 PasswordMasking - 在这一属性为True时，open view输入字段中的字段返回星号(*)。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

 InitialValue - 指定要设置的值。默认值为 null string。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个Complex值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

在这个常数中没有换码符解释。输入内容会完全复现在输出端。

注意，InitialValue字段一直是一个标量，即使Text 配置成数组。

位置

Data [image] Constant [image] Text

另请参阅

Complex, Constant, Coord, Date/Time, UInt8, Int16, Int32, PComplex, Real32, Real64, Selection Control和Toggle Control。

使用数据常数


Text Input

显示一个接受文本输入的弹出对话框的对象。

用途

使用Text Input提示用户输入文本，接受这些文本，使用用户自定义测试检查这些文本是否有效。

在弹出对话框中，在按OK按钮时，Value输出端输出用户输入的文本。在按Cancel按钮时，Cancel输出端输出1。

Open View

  • Prompt/Label - 这个 字符串提示用户添写文本字段。可以作为数据输入添加这个参数。默认值为Enter Text:

  • Default Value - 在输入任何数据前位于对话框输入字段中的文本。如果用户在没有输入任何数据的情况下按OK，那么输出这个文本。可以作为数据输入添加这个参数。默认值为空白。

  • Value Constraint - 测试输入文本是否有效的等式。可以使用任何数学表达式，或调用一个UserFunction。可以作为数据输入添加这个参数。默认值为strLen(value)>0，表示检查用户输入是一个或多个字符，它不支持空字符串。如果想支持任何值，使用表达式1。

  • Error Message - 如果用户输入没有满足Value Constraint，那么消息框中输出这些文本。可以作为数据输入添加这个参数。默认值为You must enter text。

属性

  • PopupTimeoutEnabled - 在这一属性为True时，Timeout输出端添加到对象中。默认值为False。

  • PopUpDuration - 设置弹出对话框显示的时间长度。在过了这段时间之后，对话框超时，Timeout输出端输出值1。如果 Timeout端执行，那么任何其它输出端都没有数据。只有在选中Timeout Enabled复选框时才能使用这个字段。默认值为60 seconds。

  • PopupOKLabel - 在True时把按钮标注设置为OK。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupCancelLabel - 在True时把按钮标注设置为Cancel。如果用户的母语不是英语，也可以使用其它字。不管使用什么字，按钮的功能都是一样的。

  • PopupPasswordMasking - 在这一属性为True时，输入文本表现为星号 (*)。在操作人员输入敏感数据时，如口令，适合使用这种功能。它不会掩蔽Value输出端上输出的字符串。默认值为False。

备注

弹出对话框的默认位置大约位于工作区中心。如果移动弹出对话框，下次它会弹出到新位置。

错误信息对话框的标题文本与Text Input对象标题相同。

只使用键盘对弹出对话框作出响应：在对话框弹出时，开始输入信息，使用Enter和Esc键。使用Tab键在输入字段和按钮之间移动，然后使用Space栏选择按钮。

只有在程序运行时才显示弹出对话框和错误对话框。在显示弹出对话框时，整个程序会暂停执行，在对话框关闭时继续执行。

位置

Data [image] Dialog Box [image] Text Input

另请参阅

File Name Selection, Int32 Input, List Box, Message Box, Real64 Input和UserObject。

使用数据输入对话框


Thermometer

使用温度计图形内部的色条以图形方式显示Scalar数字值的对象。

用途

使用Thermometer在模拟标度上用温度计图形内部的色条及可选的数字字段显示一个数字值。

Open View

通过点击当前值，输入一个新值，可以在对象的open view上设置Thermometer的最小值和最大值。它自动计算和显示Tic号及其标签。最小值必须小于最大值。

还可以作为控制输入添加这些值。

属性

ClearAtPreRun - 在这一属性为True时，在PreRun时清除Thermometer 的内容。默认值为True。

 ClearAtActivate - 在这一属性为True时，在Activate时清除Thermometer 的内容。默认值为True。

Orientation - 选择显示Thermometer的方向。默认值为Vertical。

 ShowDigitalDisplay - 在这一属性为True时，在对象Open View的底部会显示输入值的数字画面。如果没有选择复选框，不显示数字画面，对象运行速度会更快。默认值为True。

ShowTics - 控制是否显示标度的tic号和标签。默认值为True。

Logarithmic - 在启动时，把标度从线性变成对数。默认值为False。

 LabelSpacing - 控制在哪个tic号上标上标度值。默认值为Every Other Tic。

HighColor - 指定最高范围使用的颜色 (即大于High Limit)。

 High Limit - 定义最高范围的数字下限。这个值必须大于等于Low Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

 MidColor - 指定中间范围使用的颜色 (即小于等于High Limit，且大于Low Limit)。

 Low Limit - 定义最低范围的数字上限。这个值必须小于等于High Limit。可以作为控制输入添加这个值，它会使该属性的编辑字段失效。

 LowColor - 指定最低范围使用的颜色(即小于等于Low Limit)。

NumberFormat:

Global Format - 使用默认格式。默认值为on。

Real: - 如果Global Format关闭，那么为这个对象上显示的实数指定数字格式。选项包括 Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6)和Time Stamp (如Wed 01/Jan/2003 17:01:38)。 默认值为Standard。

备注

输入数据必须是Scalar，并能够转换成Real64 (Complex, PComplex, Spectrum和Coord必须先"拆散"。)

Low Limit必须小于High Limit。

如果只想使用两个颜色范围，把Low Limit设置成等于High Limit。

如果只想使用一种颜色，把Low Color、 Mid Color和High Color设置成相同的颜色。

快捷方式

为迅速改变Thermometer的方向，只需把它调整到所需的形状。它会自动改变方向。

位置

Display [image] Indicator [image] Thermometer

另请参阅

AlphaNumeric, Color Alarm, Fill Bar, Logging AlphaNumeric, Meter, Tank和对象菜单

显示数据的模拟画面


Tile Horizontally

管理VEE工作空间中的窗口的函数。

用途

使用Tile Horizontally把所有打开的没有最小化的窗口排列为非重叠的窗口。这些窗口将堆叠在另一个窗口的顶部。

位置

Window [image] Tile Horizontally

另请参阅

Cascade, Close All, Minimize All和Tile Vertically。


Tile Vertically

管理VEE工作空间中的窗口的函数。

用途

使用Tile Vertically把所有打开的没有最小化的窗口排列为非重叠的窗口。这些窗口将并列排列在VEE工作空间中。

位置

Window [image] Tile Vertically

另请参阅

Cascade, Close All, Minimize All和Tile Horizontally。


Timer

输出顶部数据输入端和底部数据输入端激活时间之差(单位为秒)的对象。

用途

使用Timer测量两个事件之间相差多少时间，如对象运行，在激活第一个输入和第二个输入时，会发生这种情况。如果第二个输入在第一个输入之前激活，那么第二个输入上的容器被忽略，Timer对象不执行。

备注

时间用秒显示。

在Windows上， 如果系统提供，Timer可以使用高分辨率计数器。

位置

Device [image] Timer

另请参阅

Date/Time, Do, Properties (对象)和 对象菜单


To

一个菜单项目。

用途

使用To存取作为I/O操作目的地的下述对象：

To File

To DataSet

To Printer

To String

位置

I/O [image] To

另请参阅

From


To DataSet

允许用户把记录采集到一个文件中的对象。

用途

使用To DataSet把拥有相同模式定义的记录采集到一个文件中，以备日后检索。可以添加下述控制端：

File Name -- 这个控制端允许用户改变将写入的记录的文件名称。

Rewind -- 这个控制端"倒带"文件，以便能够使用全新的记录类型进行重写。其效果与选中Clear File At PreRun复选框时把第一条记录发送到文件中的效果相同。

Close -- 这个控制端关闭文件。

Open View参数

To DataSet: -- 点击名称字段，显示一个对话框，然后选择包含DataSet的文件名。

Clear File At PreRun -- 如果选中这个对话框，那么会在第一次执行To DataSet时(在收到第一条记录时)清除和重写整个DataSet。由于DataSet被完全擦除，可以发送拥有新模式定义的记录 -- 第一条记录确定新的模式定义。

备注

进入To DataSet文件的记录必须拥有相同的模式(数据形状和类型)。写入文件的第一条记录将定义所有后续记录都必须拥有的模式。

每次在使用一个输入(只允许一个输入)执行To DataSet对象时，新记录会追加到文件末尾。如果新记录是一个数组，那么会追加数组的每个记录要素。每个记录的模式(字段数量和每个字段名、类型和形状)必须匹配，但记录的形状(标量/数组)无关紧要。To DataSet对象将继续追加到文件中，直到激活一个Rewind控制输入，或选择Clear File At PreRun和发生PreRun。下次执行To DataSet对象时，它开始在开头写入文件，再次从第一个记录的模式开始。这一模式可能与文件中的模式不同。

位置

I/O [image] To [image] DataSet

另请参阅

Build Record, From DataSet, Record Constant, UnBuild Record, Properties (对象)和对象菜单

把数据写入文件


To File

使用事务语句把数据写入文件的对象。

用途

使用To File输出各种编码和格式，允许灵活地输出到文件中。每个文件保持一个指针，因此不同To File对象输出的数据按对象运行的顺序写入到文件中。

To File操作：

WRITE - 使用指定编码和格式把数据写入文件。

EXECUTE - 把文件的写入指针重新定位到文件开头，可以擦除(CLEAR)、也可以不擦除(REWIND)文件内容。在选择Clear File at PreRun & Open时，只能使用EXECUTE REWIND。注意在VEE程序停止时，文件会自动关闭。但是，可以使用EXECUTE CLOSE事务，在程序执行过程中关闭文件。EXECUTE DELETE会删除文件。

WAIT - 在执行下一个事务前等待指定的秒数。

To File编码：

TEXT - 把所有数据类型写入到人可以阅读的文件中，这些文件可以简便地编辑或移植到其它应用软件中。在写入时，VEE数字数据自动转换成文本。

BYTE - 把数字数据转换成二进制整数，写入最低有效字节。

CASE - 把一个枚举的值或一个整数映射到一个字符串，写入字符串。例如，可以使用CASE接受错误编号，写入错误信息。

BINARY - 以特定机器二进制格式写入所有数据类型。

BINBLOCK - 在带有IEEE 488.2一定长度码组包头的二进制文件中写入所有VEE数据类型。

CONTAINER - 以特定机器文本格式写入所有数据类型。使用CONTAINER通过"To File"对象把数据直接导出到PV-WAVE中，执行可视数据分析。

Open View 参数

Clear at PreRun & Open - 擦除文件内容，把文件指针设置到文件开头。在没有选中复选框时，数据追加到文件末尾。

如果有多个To File对象指向同一个文件，那么多个复选框会连接起来，如果在一个位置改变对象，那么会改变所有复选框。

open view显示要执行的事务列表。

对象菜单

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Print Trans - 打印详细对话框，描述目前高亮度显示的事务。

属性

EolSequence - 指定在使用EOL ON的WRITE事务末尾发送的字符。这个字段中的项目必须包含用双引号引起来的0个或多个ASCII字符。默认值是"\n"。

 ArraySeparator - 指定隔离WRITE TEXT事务编写的数组要素使用的字符串。这个字段中的项目必须用双引号引起来。

MultiFieldFormat: 为WRITE TEXT事务的多字段数据类型指定下面两种格式化样式。影响的数据类型有Coord, Complex, PComplex和Spectrum。

Data Only - 用逗号分隔每个多字段项目，但不使用圆括号括起这个组。复数2+2j将格式化2,2。

(...) Syntax - (默认) 用逗号分隔每个多字段项目，使用圆括号括起这个组。复数2+2j将格式化为(2,2)。

ArrayFormat group: 确定怎样格式化多维数组。

Linear - 线性排列数组要素。

Block - (默认) 在每一行末尾使用EOL字符，排列两维或多维模块中的数组要素。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

位置

I/O [image] To [image] File

另请参阅

Formula, From File和对象菜单

把数据写入文件


To/From DDE

通过事务与支持Dynamic Data Exchange (DDE)的Microsoft Windows应用程序交换数据的对象。

用途

DDE为希望实现流程间通信的编程人员提供了一个工具。

必须在To/From DDE中添加一个或多个事务。为此，点击对象菜单中的Add Trans。

目前，.NET Framework的功能、文档和支持已经全面的得多。

否则，ActiveX Automation可以更强健地满足您的需求，对大多数服务器可以更好地编制文档。如需与ActiveX有关的信息，参阅Help => Contents and Index => Tell Me About... => Active X。

Open View参数

Application - 支持DDE的Windows应用程序的名称。(如Excel)

Topic - 数据种类的专用标识符。(如Sheet1)

此外，open view会显示要执行的事务列表。

可以作为控制输入添加Application和Topic字段。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

属性

EolSequence - 指定在使用EOL ON的WRITE事务结尾发送的字符。这个字段中的项目必须包含用双引号引起的零或多个ASCII字符。默认值"\n"。

 ArraySeparator - 指定用来分隔WRITE TEXT事务编写的数组要素的字符串。这个字段中的项目必须带有双引号。

MultiFieldFormat组: 为WRITE TEXT事务的多字段数据类型指定下面两种格式化方式。影响的数据类型包括：Coord, Complex, PComplex和Spectrum。

Data Only - 用逗号分隔每个多字段项目，不用括弧把组括起来。复数2+2j将格式化为2,2。

(...) Syntax - (默认值) 用逗号分隔每个多字段项目，使用括弧把组括起来。复数2+2j将格式化为(2,2)。

ArrayFormat组: 确定怎样格式化多维数组。

Linear - 以线性方式排列数组。

Block - (默认值) 在每行结尾使用EOL字段以每个码组两个或多个维度排列数组要素。

备注

To/From DDE可以与支持Dynamic Data Exchange的Windows应用程序通信。但是，用户负责确定从VEE到特定应用程序成功地进行DDE通信所需的专用协议。这是一种高级编程功能。

支持DDE的Windows应用程序可以作为客户端、服务器或两者操作。但是，VEE只提供了客户端功能。

To/From DDE使用四种事务：

READ(REQUEST) - 从DDE传送中读取数据。

WRITE(POKE) - 把数据写入(插入)DDE传送中。

EXECUTE - 把命令发送到VEE正在通信的DDE服务器，然后服务器会执行命令。

WAIT - 等待指定时间(单位为秒)。

To/From DDE作为函数的一部分启动和结束DDE操作。不需要明确启动和结束这些事务。

如需查看使用DDE的实例，请参阅与程序通信。

快捷方式

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

位置

I/O [image] To/From DDE

另请参阅

Formula, From, From File, To File, To, 对象菜单和编辑事务


To/From IVI-COM

使用调用IVI-COM驱程函数的事务语句，向仪器写入数据及从仪器中读取数据的对象。

用途

为正在使用的仪器下载和安装IVI驱程。Instrument Manager内部有一条指向下载网站的链接。

如果想为仪器自动配置IVI-COM驱程，启动Instrument Manager。在"Auto Discovery"中，点击"Find Instruments"。选择想要配置驱程的仪器，然后在"Auto Discovery"中，点击"Configure Drivers"。VEE将试图为这台仪器配置所有驱程。如果找到IVI-COM驱程，那么"IVI-COM Driver"按钮不再是灰色。

如果想为某个接口手动配置IVI-COM，启动Instrument Manager。添加一台仪器，选择接口。从同一个Instrument Properties对话框中，选择Advanced，然后选择IVI-COM Driver栏。选择与仪器匹配的IVI-COM驱程名称，检验仪器地址。

为访问To/From IVI-COM对象，从I/O菜单中调用Instrument Manager。选择一台仪器。然后在"Create I/O Object"中，选择"IVI-COM Driver"。如果还没有为该仪器配置IVI-COM驱程，那么选项会变成灰色。

Open View参数

open view显示可以执行事务列表。每项事务都是一个IVI-COM命令(调用IVI-COM驱程中的函数)。

在双击一个空事务时，会出现Select an Operation from...对话框。这个对话框允许选择要执行的操作。对话框底部的文本区域描述了当前选择的成员的描述。成员的分层树图显示了不同类别。左面带+号的成员表明有子成员。左面不带+号的文件夹表明没有子成员。

CreateInstance一直是第一个事务，后面跟着一个Initialize事务。这时，可以插入所需的其它事务，但要记住用Close事务结尾，以便释放资源。

在选择操作并点击OK后，会出现Edit对话框。这个对话框允许编辑操作的值，配置输入端和输出端。

这时点击Cancel将取消整个选择过程。

Edit对话框包含下面的字段：

Edit Parameters栏：

这些参数随着选择的操作变化。一般来说，所需的答案会自行显现。

Configure Terminals栏：

您通常不需要修改这些值。

点击OK会关闭Edit对话框，创建事务。

在双击现有事务时，将出现Edit对话框，然后可以编辑当前选中的函数调用。

对象菜单

Edit Operation - 编辑当前高亮度显示的函数。

Add Operation - 在列表末尾添加一个函数。

Insert Operation - 在目前高亮度显示的函数前插入一个函数。

Cut Operation - 剪切(删除)目前高亮度显示的函数，但把它保存在函数"剪切和粘贴"缓冲器中。

Copy Operation - 把目前高亮度显示的函数复制到函数"剪切和粘贴"缓冲器中。

Paste Operation - 粘贴以前"剪切"或"复制"的函数。

Delete Oper - 删除列表中高亮度显示的函数。

Move Oper Up - 上移高亮度显示的函数。

Move Oper Down - 下移高亮度显示的函数。

IVI-COM Help - 为您提供与IVI-COM驱程有关的帮助信息。这些信息由硬件制造商提供，每个驱程带有这些信息。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

位置

I/O [image] Instrument Manager...

备注

在少数情况下，将不加载IVI-COM驱程。在这种情况发生时，参阅COM对象 - 问题诊断。

另请参阅

To/From IVI-COM - Advanced, 对象菜单


To/From NIDAQ

使用调用NIDAQ驱程的事务语句，向仪器写入数据及从仪器中读取数据的对象。

用途

使用To/From NIDAQ与拥有NIDAQ驱程的仪器通信。

为访问To/From NIDAQ对象，从I/O菜单中调用Instrument Manager。添加NIDAQ接口，选择NIDMM, NISCOPE, NISWITCH, NIFGEN, NIDAQ或NIDAQmx。然后在"Create I/O Object"中选择"NIDAQ Driver"。如果没有为该仪器配置NIDAQ驱程，那么选项会变成灰色。

Open View参数

open view显示要执行的事务列表。每项事务都是一个NIDAQ命令(调用NIDAQ驱程中的C函数)。

在双击一个空事务时，会出现Select a Function Panel对话框。

这个对话框允许选择要执行的函数。对话框底部的文本区域描述了当前选择的函数面板。函数的分层树图显示了不同类别的函数面板。左面带+号的文件夹表明提供了多个文件夹或函数面板。左面带-号的文件夹表明已经显示了多个文件夹或函数面板。如果想全部展开一个树枝，选择要展开的项目，按*键。

在选择函数，点击OK后，出现Edit Function Panel对话框。这个对话框允许编辑函数面板上的值，设置变量，自动建立输入端和输出端。

这时点击Cancel，取消整个函数面板选择流程。

Edit Function Panel对话框包含下述字段：

Panel栏：

Controls (在对话框顶部) - 每个控制功能表示函数的一个参数。编辑控制功能中的值允许为参数指定常数值。控制功能的名称是从函数面板文件中指定的标注。如果想获得与控制功能有关的帮助，在控制功能上按鼠标右键。某些控制面板可能没有任何控制功能。

Configuration栏：(并不是所有函数都有这一栏) - 允许为函数参数指定变量。

label name组：从函数面板文件中指定的控制功能名称。

Parameter Type: - 指定参数的类型和形状。

Parameter Value: Constant | Variable - 指定参数设置成常数值(从Panel栏)还是作为变量输入到C函数。如果参数必须是Variable (如数组类型)，Parameter Value变成灰色。如果选择了Variable，那么会启动Name和Create Terminal字段。

Name - C函数传送的变量的名称。在默认情况下，Name设置成从函数面板文件中指定的标注名称。如果变量是输入变量，这个字段还包含UserFunction调用，UserFunction会返回一个在运行时求解的值(然后将传送到函数调用)、变量和表达式。

Create Terminal - 在选中复选框时，如果其目前不存在，那么会创建输入和/或输出端。如果Name字段设置成无效的端名(如UserFunction调用或表达式)，那么这个字段会变成灰色。

Auto-Allocate Input - 如果Parameter Type是一个数组或Text类型，必须分配发送给提取数据的函数的存储器。编辑容量字段，告诉VEE分配多少存储器，来容纳数组要素数量或字符串长度。一定要把容量设置得足够大。可以反选这个框，使用输入端自行分配存储器，但不建议采取这种作法。

在双击现有事务时，将出现Edit Function Panel对话框，然后可以编辑当前选择的函数调用。

对象菜单

Edit Function - 编辑当前高亮度显示的函数。

Add Function - 在列表末尾添加一个函数。

Insert Function - 在目前高亮度显示的函数前插入一个函数。

Cut Function - 剪切(删除)目前高亮度显示的函数，但把它保存在函数"剪切和粘贴"缓冲器中。

Copy Function - 把目前高亮度显示的函数复制到函数"剪切和粘贴"缓冲器中。

Paste Function - 粘贴以前"剪切"或"复制"的函数。

Delete Function - 删除列表中高亮度显示的函数。

Move Function Up - 上移高亮度显示的函数。

Move Function Down - 下移高亮度显示的函数。

Instrument Help - 为您提供与NIDAQ驱程有关的帮助信息。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按Insert会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按CTRL+N或CTRL+P。

备注

NIDAQ不支持任何Advanced I/O功能。

NIDAQ函数调用不会出现在VEE的Bus I/O Monitor中。

必须为传送到NIDAQ驱程中的数组和文本参数分配存储器。如果没有为这些参数分配足够的存储器，函数可能会覆盖存储器，可能会导致General Protection Fault或Segmentation Violation。强烈建议您一直使用Auto-Allocate Input功能，一定要把存储器容量设置得足够大。

由于VEE自动调用init()和close()，为您处理会话句柄，不要调用可能位于驱程中的任何init()函数。如需更多信息，请参阅Advanced I/O帮助内容。

部分NI-FGEN调用会创建句柄。这些句柄要求在VEE要特别注意。参阅NI-FGEN。

NI-SCOPE中的部分调用返回波形数据的方式与VEE不一致。参阅NI-SCOPE Fetch/Read函数。

位置

I/O [image] Instrument Manager...

另请参阅

Advanced I/O, Component Driver, Formula, Instrument Manager, Panel Driver, 编辑事务和NI-DAQmx


To/From Socket

通过事务与支持Dynamic Data Exchange (DDE)的Microsoft Windows应用程序交换数据的对象。

用途

Socket 是那些希望实现过程间通信的程序员的工具。To/From Socket 使用事务I/O。

首先要定义需连接或绑定的端口，然后在To/From Socket中加入一个或多个事务来读或写数据。

To/From Socket 的操作：

READ - 使用指定编码和格式读数据。

WRITE - 使用指定编码和格式写数据。

EXECUTE - 使用EXECUTE CLOSE事务专门终止一个socket连接。

WAIT - 执行下一个事物前等待指定的秒数。

To/From Socket 编码：

TEXT -把所有数据类型写入到人可以阅读的文件中，这些文件可以简便地编辑或移植到其它应用软件中。在写入时，VEE数字数据自动转换成文本。

BYTE - 把数字数据转换成二进制整数，写入最低有效字节。

CASE - 把一个枚举的值或一个整数映射到一个字符串，写入字符串。例如，可以使用CASE接受错误编号，写入错误信息。

BINARY - 以特定机器二进制格式写入/读出所有数据类型。

BINBLOCK - 在带有IEEE 488.2一定长度码组包头的二进制文件中写入/读出所有VEE数据类型。

CONTAINER - 以特定VEE文本格式写入/独出所有数据类型。

Open View 参数

Open view显示指定端口连接或绑定的域，超时时间段，和要执行的事务的列表。

Connect/Bind Port - 此按钮在绑定和连接模式之间切换。Bind Port绑定计算机上的一个端口，VEE在这个计算机上运行并等待一个连接的发生。Connect Port 连接一个远程计算机上的bound socket。在相关的文本域中输入端口号。可以使用从5000到6000的端口号。

主机名 - 在Bind Port模式，显示VEE运行的那个主机名。在Connect Port模式，输入要连接的远程主机的名称或Internet Protocol (IP) 地址。

Timeout - 以秒来计算的超时时段的整数值，它表示可以接受的允许绑定货连接的时间。连接过后，这一时段为允许进行 READ和WRITE事务的时段。设为0可以让超时时间为无限长。

对象菜单

Edit Function - 编辑当前高亮度显示的函数。

Add Function - 在列表末尾添加一个函数。

Insert Function - 在目前高亮度显示的函数前插入一个函数。

Cut Function - 剪切(删除)目前高亮度显示的函数，但把它保存在函数"剪切和粘贴"缓冲器中。

Copy Function - 把目前高亮度显示的函数复制到函数"剪切和粘贴"缓冲器中。

Paste Function - 粘贴以前"剪切"或"复制"的函数。

Delete Function - 删除列表中高亮度显示的函数。

Move Function Up - 上移高亮度显示的函数。

Move Function Down - 下移高亮度显示的函数。

Instrument Help - 为您提供与NIDAQ驱程有关的帮助信息。

属性

EolSequence - 指定在使用EOL ON的WRITE事务末尾发送的字符。这个字段中的项目必须包含用双引号引起来的0个或多个ASCII字符。默认值是"\n"。

ArraySeparator - 指定隔离WRITE TEXT事务编写的数组要素使用的字符串。这个字段中的项目必须用双引号引起来。

MultiFieldFormat: 为WRITE TEXT事务的多字段数据类型指定下面两种格式化样式。影响的数据类型有Coord, Complex, PComplex和Spectrum。

Data Only - 用逗号分隔每个多字段项目，但不使用圆括号括起这个组。复数2+2j将格式化2,2。

(...) Syntax - (默认) 用逗号分隔每个多字段项目，使用圆括号括起这个组。复数2+2j将格式化为(2,2)。

ArrayFormat group: 确定怎样格式化多维数组。

Linear - 线性排列数组要素。

Block - (默认) 在每一行末尾使用EOL字符，排列两维或多维模块中的数组要素。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

注释

To/From Socket对象设为绑定一个socket或创建一个连接会阻塞VEE中的所有线程直到连接超时。

多个To/From Socket对象绑定到同一个端口时，将共享同一个socket。同样，所有端口号和主机名配置相同且试图连接到同一个bound socket的对象回共享这个socket。建立连接的额外负载发生在所有这些对象中第一对象执行时。

设置超时为零使超时无效，等待连接的时间为无限长。违反超时会导致错误，造成VEE运行终止。

当尝试连接时，远程主机不存在或关机时，忽略超时。在这种情况下，VEE接口会被冻结直到连接确实已经失败，这大概需要1分钟的时间。

当一个VEE程序停止时，该程序建立的所有socket连接都会中断。连接中断后，服务器和客户端对象必须重复绑定/连接协议以重新建立连接。

所有 READ 操作都会阻塞并等待接收事务所指定的数据类型和数量直到发生超时。使用READ IOSTATUS事务检测数据何时在socket上有效，可以避免阻塞线程。

位置

I/O [image] To/From Socket

另请参阅

Formula, Object Menu, 和 编辑事务。


To/From VXIplug&play

使用调用VXIplug&play驱程的事务语句向仪器写入数据及从仪器读取数据的对象。

用途

使用To/From VXIplug&play与具有VXIplug&play驱程的仪器通信。这部仪器可以是"机架堆叠式"仪器，也可以是VXI仪器。

为存取To/From VXIplug&play对象，从I/O菜单中调出Instrument Manager，选择一部仪器。然后在"Create I/O对象"中选择"Plug&play Driver"。如果还没有为该仪器配置VXIplug&play驱程，这个选项会变成灰色。

注意，并不是所有VXIplug&play驱程都支持所有平台。另外，可能并不是所有平台上都支持某些VTL/VISA版本 (与GPIB卡一起提供)。请与相应厂商进行核对。

Open View参数

Open view显示要执行的事务列表。每项事务都是一条VXIplug&play命令(调用VXIplug&play驱程中的C函数)。

在双击空白事务时，出现Select a Function Panel对话框。

这个对话框允许选择要执行的函数。对话框底部的文本区域描述了当前选择的函数面板。函数的分层树图显示了函数面板的不同类别。左边带有+号的文件夹表明提供了多个文件夹或函数面板。左边带有-号的文件夹表明显示了多个文件夹或函数面板。左侧的f(x)表明一个函数面板。为全部展开树枝，选择要展开的项，按*键。

在选择函数、点击OK后，出现Edit Function Panel对话框。这个对话框允许编辑函数面板上的值，设置变量，自动创建输入端和输出端。在这个对话框的任何非控制区域上按鼠标右键，可以获得与函数调用有关的帮助。在任何控件上按鼠标右键，可以获得控件描述。

这时点击Cancel会取消整个函数面板选择过程。

Edit Function Panel对话框包含下述字段：

Panel一栏:

控件(在对话框顶部) - 每个控件表示函数的一个参数。编辑控件中的值可以为参数指定一个常数值。控件的名称是从函数面板文件中指明的标注。在控件上按鼠标右键，可以获得控件相关帮助。对某些函数面板，可能没有任何控件。

Session Handle - 显示每部仪器唯一的会话句柄。

Status - 如果在执行这个函数面板时发生错误，那么显示一个非零值。

函数调用(在对话框底部) - 在执行对象时调用的C函数(及其参数)。这个命令字符串在对象的open view中也显示为一项事务。.

Configuration一栏: (可能并不是对所有函数都存在这一栏) - 允许为函数指定参数变量。

label name组: 函数面板文件中指定的控件名称。

Parameter Type: - 指定参数的类型和形状。

Parameter Value: Constant | Variable - 指定参数是设置为常数值(从Panel一栏)还是作为变量输入到C函数中。如果参数必须是Variable (如对数组类型)，那么Parameter Value会变成灰色。如果选中Variable，那么会启用Name和Create Terminal字段。

Name - C函数传送的变量名称。在默认情况下，Name设置成从函数面板文件中指定的标注名称。如果变量是一个输入变量，那么这个字段还可以包含UserFunction调用，返回一个值(然后被传送到函数调用)、变量及在运行时求解的表达式。

Create Terminal - 在选中这个复选框时，如果其目前不存在，那么会创建输入和/或输出端。如果Name字段设置成无效的端名称(如UserFunction调用或表达式)，那么这个字段会变成灰色。

Auto-Allocate Input - 如果Parameter Type是一个数组或Text类型，那么必须分配内存，发送到函数中检索数据。编辑容量字段，告诉VEE分配多少内存，以适应数组要素数量或字符串长度。一定要设置足够大的容量。可以不勾选这个框，而使用输入端自己分配内存，但不推荐采用这种方法。

在双击现有的事务时，将出现Edit Function Panel对话框，然后可以编辑当前选中的函数调用。

对象菜单

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Instrument Help - 提供与VXIplug&play驱程有关的帮助信息。这些信息由硬件制造商提供，每个驱程都包括这些信息。

快捷方式

通过把光标放在输入端或输出端显示区域上，然后按CTRL+A，可以迅速添加一个数据端。每按一下CTRL+A会额外添加一个数据端。

通过把光标放在端查看区域上，然后按CTRL+D，可以迅速删除一个数据端。

为迅速插入一个事务，把光标放在事务上。按CTRL+O会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按CTRL+K。

为从"kill"缓冲器中粘贴一个事务，按CTRL+Y。

为迅速移到下一个事务或上一个事务，分别按CTRL+N或CTRL+P。

Properties

IgnoreCautionsReturned - 在选中这个复选框时，对某些制造商VXIplug&play驱程的事务调用返回的任何注意信息，都不会导致弹出注意对话框及暂停程序。一般来说，只有在已经从VXIplug&play获得注意信息，并修改程序处理注意情况后，才应该勾选这个复选框。

Configured Instrument - 包含着Instrument Manager中与这个对象连接哪个配置名称有关的不可编辑的信息。

备注

在Edit Function Panel对话框中，在Panel一栏背景上按鼠标右键，获得函数面板帮助信息。

在一个控件上按鼠标右键，获得参数解释。

VXIplug&play不支持任何Advanced I/O功能。例如，VXIplug&play驱程忽略实地模式设置。

VXIplug&play函数调用将不会出现在VEE的Bus I/O Monitor中。

VXIplug&play函数调用不能与Direct I/O或Instrument Panels混合，与程序中相同的仪器通信。但是，可以对同一程序中的不同仪器使用不同类型的I/O。

必须为传送到VXIplug&play驱程中的数组和文本参数分配内存。如果没有为这些参数分配足够的内存，那么函数会重写内存，可能会导致一般保护问题或分段违规。由于VXIplug&play共享库直接链接到VEE中，因此这种情况可能会导致VEE瘫痪和退出。强烈推荐总是使用Auto-Allocate Input功能，确认设置足够大的内存容量。

由于VEE自动调用init()和close()，负责处理会话，因此不要调用可能位于驱程中的任何init()或autoconnect()函数。如需更多信息，请参阅Advanced I/O帮助内容。

位置

I/O [image] Instrument Manager...

另请参阅

Advanced I/O, Component Driver, Formula, Instrument Manager和Panel Driver。

使用Plug&play Driver对象

VEE高级技术


Toggle Control

输出1 (已按下, 已复选, 或已选中)或0的对象。Toggle Control对象有各种显示格式，但所有这些格式的工作方式相同。

用途

使用Toggle Control对象设置输出1或0。Toggle Control对象通常与包含A==1条件的If/Then对象一起使用。

属性

Format组: - 指定Toggle Control对象的外观及选择选项的方式。默认格式是从菜单中选择的任何对象。

Button - 通过按一个按钮选择一个选项。

Check Box - 通过点击凹进的框选择一个选项。对号表示on (1)。

Vertical Paddle - 垂直桨状开关。绿点表示on (1)。

Horizontal Paddle - 水平桨状开关。绿点表示on (1)。

Vertical Rocker - 垂直摇杆开关。绿点表示on (1)。

Horizontal Rocker - 水平摇杆开关。绿点表示on (1)。

Vertical Slide - 垂直滑动开关。绿点表示on (1)。

Horizontal Slide - 水平滑动开关。绿点表示on (1)。

<Custom> - 在选中时，可以为on和off指定自己的位图。从Custom一栏中选择位图。

Execution组:

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

Layout组：

Scaled - 如果这一属性为True，切换图像缩放到对象的尺寸。如果这一属性为False，向左调节切换图像。默认值为False。

Show Caption - 如果这一属性为True，显示对象的open view上的图示内容。图示内容中包含与标题栏相同的文本。

Initialization组：

InitialValue - 指定要设置的值。默认值为0 (零)。

InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

CustomOnPicture - 选择在Toggle Contro输出值为1时希望显示的图形图像文件。

CustomOffPicture - 选择在Toggle Control输出值为0希望显示的图形图像文件。

Preview - 显示选中的当前图形图像。

显示的目录是安装目录下的bitmaps目录。如果想从另一个目录中选择一个文件，按Browse ...按钮。

VEE检查文件，确定文件格式。目前支持的格式有：

位图(*.BMP)

GIF87a (*.GIF)

Windows MetaFile (*.WMF)

可移植网络图形(*.PNG)

默认位图位于VEE程序安装目录下的bitmaps目录中。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这个输入要求一个Int32 Scalar值。取值0表示切换off。任何其它值表示切换on。

Reset输入允许以程序化方式把取值设置为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。.

位置

Data [image] Toggle Control

另请参阅

Complex, Constant, Coord, Date/Time, Selection Control, If/Then/Else, UInt8, Int16, Int32, PComplex, Real32, Real64和Text。


Toggle Breakpoint

设置或清除选定对象上的执行断点。

用途

使用Toggle Breakpoint作为调试工具，设置或清除断点。选择多个对象，然后选择Toggle Breakpoint。这一操作在选定的没有断点的任何对象上设置断点，在选定的有断点的任何对象上清除断点。

在对象上设置断点会在这个对象前停止执行程序。如果想继续执行程序，在VEE工具栏上按Resume按钮；如果想只运行有断点的对象，按其中一个Step按钮。

在设置断点后，对象会使用一个彩色外框高亮度显示(默认值为橙色)。

备注

为设置单个对象的断点，在对象属性窗口上使用Breakpoint选项。

在通过Toggle Breakpoint设置断点时，Properties窗口中的Breakpoint选项会打勾。

断点与程序一起保存。如果不希望打开程序时再次出现断点，在保存程序前使用Clear All Breakpoints。

快捷方式

为切换断点，高亮度显示要设置的对象，然后按CTRL-B。

位置

Debug [image] Toggle Breakpoint

另请参阅

Activate Breakpoints, Properties (对象), Clear All Breakpoints, Run/Resume, Select All, Show Data Flow, Show Execution Flow, Step Into, Step Over和Step Out。

控制断点


Toolbar

View菜单上控制VEE Toolbar可视性的一种切换函数。

用途

使用Toolbar打开或关闭VEE工具栏。当打开时，Toolbar 菜单选项的左面会出现一个对号。

在看得见Toolbar时，可以通过快捷方式进入许多VEE编程和调试功能，如打开新的VEE程序文件，打开已有的VEE程序文件，或开始、暂停和停止执行VEE程序。

通过把鼠标光标放到按钮上，可以确定Toolbar 按钮的功能；按钮下面会出现工具提示。工具提示简要描述了按钮的功能。同时，位于VEE工作空间底部的Status Bar中也会出现Toolbar 按钮的功能描述。

位置

View [image] Toolbar

另请参阅

Status Bar


To Printer

把数据发送到打印机的对象。

用途

使用To Printer，采用各种编码和格式把数据输出到打印机。

To Printer操作：

WRITE - 使用指定编码和格式打印数据。

WAIT - 在执行下一个事务前等待指定的秒数。

To Printer编码：

在几乎所有情况下，都应使用TEXT or CASE编码打印数据。高级用户可以使用其它编码。

TEXT - 以人可读的形式写入所有数据类型。VEE数字数据在写入时自动转换成文本。

BYTE - 把数字数据转换成二进制整数，写入最低有效字节。

CASE - 把枚举的值或整数映射到字符串，写入字符串。例如，可以使用CASE，接受错误编号，写入错误消息。

BINARY - 以机器专用二进制格式写入所有数据类型。

BINBLOCK - 使用IEEE 488.2限定长度码组包头写入二进制文件中的所有VEE数据类型。

CONTAINER - 以机器专用文本格式写入所有数据类型。

Open View参数

open view显示了要执行的事务列表。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

属性

EolSequence - 指定在使用EOL ON的WRITE事务结尾发送的字符。这个字段中的项目必须包含用双引号引起的零或多个ASCII字符。默认值"\n"。

ArraySeparator - 指定用来分隔WRITE TEXT事务编写的数组要素的字符串。这个字段中的项目必须带有双引号。

MultiFieldFormat组: 为WRITE TEXT事务的多字段数据类型指定下面两种格式化方式。影响的数据类型包括：Coord, Complex, PComplex和Spectrum。

Data Only - 用逗号分隔每个多字段项目，不用括弧把组括起来。复数2+2j将格式化为2,2。

(...) Syntax - (默认值) 用逗号分隔每个多字段项目，使用括弧把组括起来。复数2+2j将格式化为(2,2)。

ArrayFormat组: 确定怎样格式化多维数组。

Linear - 以线性方式排列数组。

Block - (默认值) 在每行结尾使用EOL字段以每个码组两个或多个维度排列数组要素。

备注

如果使用WRITE TEXT事务打印，那么To Printer不能打印嵌入控制字符的ASCII文本。而应使用To File对象，在文件名文本字段中，输入一个端口名称，如LPT1。

如果想配置目的打印机，使用Print Setup。

在程序中第一个To Printer对象运行时，它启动一项打印作业。程序中的所有To Printer对象都共享打印作业，因此其输出顺序出现在同一个打印输出中。

打印作业保持打开，直到PostRun，或直到执行EXECUTE CLOSE事务或激活任何To Printer上的End Job控制输入。在程序中所有线程执行结束或在按Stop两次时，会发生PostRun。可以通过对象菜单中的Add Control Input选项进入End Job控制输入端。

快捷方式

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

位置

I/O [image] To [image] Printer

See Also

Default Preferences, Formula, To, To File, 把数据发送到打印机和编辑事务


To String

使用事务把格式化文本写入字符串的对象。

用途

使用To String，创建使用事务的格式化文本。

如果To String事务只生成一个事务，那么输出容器是一个字符串标量。在生成一个以上的字符串时，输出容器是Array 1D。

以"EOL ON"结尾的WRITE事务将结束当前输出字符串，导致To String列表中的下一个事务把数据写入输出容器下一个数组要素中。不能为End Of Line (EOL)属性指定数据格式的分隔符序列。

以"EOL OFF"结尾的WRITE事务将不会结束输出字符串，导致To String列表中下一个WRITE事务生成的字符被追加到当前输出字符串的末尾。To String列表中最后的事务将一直结束输出字符串，而不是该事务的"EOL"模式如何。

To String操作：:

WRITE - 使用指定编码和格式写入数据。

WAIT - 在执行下一个事务前等待指定的秒数。

To String编码：

在几乎所有情况下，都应使用TEXT编码写入数据。

TEXT - 以人可读的形式写入所有数据类型。VEE数字数据在写入时自动转换成文本。

BYTE - 把数字数据转换成二进制形式，写入同等的映射最低有效字节。的ASCII文本。例如，下面的事务写入字符A (ASCII 65十进制)：

WRITE BYTE 65

CASE - 把枚举的值或整数映射到字符串，写入字符串。例如，可以使用CASE，接受错误编号，写入错误消息。

Open View参数

open view显示了要执行的事务列表。

对象菜单

Edit Trans - 编辑当前高亮度显示的事务。

Add Trans - 在列表末尾添加一个事务。

Insert Trans - 在目前高亮度显示的事务前插入一个事务。

Cut Trans - 剪切(删除)目前高亮度显示的事务，但把它保存在事务"剪切和粘贴"缓冲器中。

Copy Trans - 把目前高亮度显示的事务复制到事务"剪切和粘贴"缓冲器中。

Paste Trans - 粘贴以前"剪切"或"复制"的事务。

Delete Trans - 删除列表中高亮度显示的事务。

Move Trans Up - 上移高亮度显示的事务。

Move Trans Down - 下移高亮度显示的事务。

Print Trans - 打印描述当前高亮度显示的事务的详细对话框。

属性

EolSequence - 指定在使用EOL ON的WRITE事务结尾发送的字符。这个字段中的项目必须包含用双引号引起的零或多个ASCII字符。默认值"\n"。

 ArraySeparator - 指定用来分隔WRITE TEXT事务编写的数组要素的字符串。这个字段中的项目必须带有双引号。

MultiFieldFormat组: 为WRITE TEXT事务的多字段数据类型指定下面两种格式化方式。影响的数据类型包括：Coord, Complex, PComplex和Spectrum。

Data Only - 用逗号分隔每个多字段项目，不用括弧把组括起来。复数2+2j将格式化为2,2。

(...) Syntax - (默认值) 用逗号分隔每个多字段项目，使用括弧把组括起来。复数2+2j将格式化为(2,2)。

ArrayFormat组: 确定怎样格式化多维数组。

Linear - 以线性方式排列数组。

Block - (默认值) 在每行结尾使用EOL字段以每个码组两个或多个维度排列数组要素。

范例

To String为考察TEXT事务的工作方式提供了一个有用的调试工具。把Logging AlphaNumeric显示画面连接到To String输出端，可以立即查看结果。

快捷方式

为迅速插入一个事务，把光标放在事务上。按Insert键会在放置光标的事务上插入一个事务。

为迅速删除("杀掉")一个事务，把光标放在该事务上，按Delete键。

为从"kill"缓冲器中粘贴一个事务，按CTRL+V。

为迅速移到下一个事务或上一个事务，分别按Up Arrow键或Down Arrow键。

位置

I/O [image] To [image] String

另请参阅

Formula, To, To File, 把数字转换成字符串和编辑事务


类型转换

Function & Object Browser对话框里的一类Built-in Function。

用途

使用Type Conversion可以访问下述函数。

asBoolean(x)
asClrType(x, t)
asComplex(x)
asCoord(x)
asInt16(x)
asInt32(x)
asInt64(x)
asPComplex(x)
asReal32(x)
asReal64(x)
asText(x)
asUInt8(x)
asVariant(x)
asVariantBool(x)
asVariantCurrency(x)
asVariantDate(x)
asVariantEmpty(x)
asVariantError(x)
asVariantNull(x)
isVariant(x)
isVariantBool(x)
isVariantCurrency(x)
isVariantDate(x)
isVariantEmpty(x)
isVariantError(x)
isVariantNull(x)
typeName(x)

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Type Conversion


UInt8

输出1字节的整数标量或1D数组常数的对象。

用途

使用UInt8设置整数常数或获得用户输入。点击输入字段，输入一个值。

范例

为作为面板视图上的提示使用UInt8，把UInt8对象的名字变成提示，如Enter the number of seconds to delay:。用户在输入字段中填写请求的信息。

在UInt8中输入公式12*24，计算结果。

属性

General栏：

DataShape - 设置这一对象输出的值的初始数据形状。可能的值为标量和Array 1D。

 ArraySize: - 在选择DataShape 1D Array时，ArraySize设置数组的长度。

 ArraySizeFixed - 在这一属性为True时，数组不能添加或删除行。只有在选择DataShape 1D Array时才能使用这一选项。

 ShowArrayIndices - 在这一属性为True时，输入字段中的每一行都带有索引。只有在选择DataShape 1D Array时才能使用这一选项。默认值为True。

Wait for Input - 在这一属性为True时，只有在对象值变化时对象才会操作。在这一属性为False时，一旦满足限制，对象将会操作，并输出当前自动选择的值。默认值为False。

 AutoExecute - 在这一属性为True时，在选择一个值时，对象操作并启动程序的其余部分。如果程序已经运行，那么会忽略AutoExecute。默认值为False。

Initialization 组：

 InitialValue - 指定要设置的值。默认值为0。

 InitializeAtPreRun - 在这一属性为True时，在PreRun时设置InitialValue。默认值为False。

 InitializeAtActivate - 在这一属性为True时，在Activate时设置InitialValue。默认值为False。

NumberFormat：

Global Format - 使用默认格式。默认值为启动。

Integer: - 如果Global Format关闭，指定在这个对象上显示的整数的数字格式。选项包括Decimal (如42), Octal (如#Q52), Hexadecimal (如#H2a),和Binary (如#B00101010)。默认值为Decimal。

备注

Initialize最常用的用途是初始化UserObject内部的值。设置初始值的另一种方法是使用大多数数据常数上提供的Default Value控制端。

可以为Default Value, Reset, Enable Editing和Disable Editing添加控制输入。

Default Value输入可以以程序化方式改变当前值。这一输入要求一个整数值，其可以是Scalar或Array 1D。可以重新配置Constant，以便与进入的数据形状相匹配。

Reset输入可以以程序化方式把值设为零。如果Constant配置为Array 1D，那么所有值都设为零。忽略Reset输入上的实际数据。

Enable Editing和Disable Editing输入可以以程序化方式控制是否在对象的open view中改变值。

注意，InitialValue字段一直是一个标量，即使UInt8配置成数组。

位置

Data [image] Constant [image] UInt8

另请参阅

Alloc UInt8, Complex, Constant, Coord, Date/Time, Selection Control, 默认首选项, Int16, Int32, PComplex, Real32, Real64, Text, 和 Toggle Control.

使用数据常数


UnBuild Complex

作为Real64数字输出Complex数字的实数部分和虚数部分的对象。

用途

使用UnBuild Complex从矩形Complex数字中提取实数部分和虚数部分。

备注

还可以使用re(x)和imag(x)函数或对象，获得Complex数字的实数部分和虚数部分。

即使输入有映射，输出仍没有映射。

位置

Data [image] UnBuild Data [image] Complex

另请参阅

Build Complex, UnBuild Data, UnBuild PComplex, Properties (对象)和对象菜单


UnBuild Coord

作为Real64数字输出Coord值的对象。

用途

使用UnBuild Coord提取Coord数据类型的x, y, z ...值。可以为z和其它坐标维度添加其它输出。输出数量必须与输入数据的坐标维数相匹配。

位置

Data [image] UnBuild Data [image] Coord

另请参阅

Build Coord, UnBuild Data, Properties (对象)和对象菜单


UnBuild Data

一个菜单项。

用途

使用UnBuild存取下述数据类型转换对象：

Coord

Complex

PComplex

Waveform

Spectrum

Record

位置

Data [image] UnBuild Data

另请参阅

Access Array, Build Data, UnBuild Complex, UnBuild Coord, UnBuild PComplex, UnBuild Record, UnBuild Spectrum, UnBuild Waveform和对象菜单


UnBuild PComplex

作为Real64数字提取并输出PComplex数字的幅度部分和相位部分的对象。

用途

使用UnBuild PComplex从PComplex数字中提取幅度部分和相位部分。

备注

还可以使用mag(x)和phase(x)函数或对象，获得PComplex数字的各个部分。

即使输入有映射，输出仍没有映射。

位置

Data [image] UnBuild Data [image] PComplex

另请参阅

Build PComplex, Default Preferences, UnBuild Complex, UnBuild Data, Properties (对象)和对象菜单


UnBuild Record

允许对象拆除记录、恢复其组件的对象。

用途

使用UnBuild Record从记录中提取数据组件 (A, B, 等等)，获得这些组件的Name List和Type List。

Name List输出端输出由输入记录字段名的所有名称组成的一个Text数组。

Type List输出端输出由输入记录所有数据类型组成的一个Text数组。

A, B等输出端输出从记录中拆除的各个数据组件。

备注

可以在这个对象中添加任意数量的输出端。每个输出端名称必须与一个记录字段名对应。字段名不分大小写(小写和大写一样)。

注意UnBuild Record, SubRecord, Get Field,和From DataSet对象之间的区别。

UnBuild Record对象为输入记录字段Name List和Type List提供输出。UnBuild Record对象的其它(可选)输出A, B等返回的结果与多个Get Field对象相同。

Get Field对象的工作方式与Formula对象的类似之处是它使用句点语法(A.B)构建记录。注意，Get Field允许使用A.B.C之类的表达式，用一个步骤拆除记录的记录。这一过程要求两个UnBuild Record对象。

SubRecord对象与UnBuild Record和Get Field的区别在于，其输出总是一条记录。SubRecord对象允许包括或不包括一条记录中的字段列表，形成一条子记录。

From DataSet根据逻辑表达式的限制从由多个记录组成的文件(一个"数据集")中读取记录。例如，可以提取在记录字段中拥有PASS值的所有记录。

位置

Data [image] UnBuild Data [image] Record

另请参阅

Build Record, From DataSet, Get Field, Record Constant, Set Field, SubRecord, To DataSet, Properties (对象)和对象菜单

从记录中提取字段


UnBuild Spectrum

输出PComplex值和Spectrum的频率范围的对象。

用途

使用UnBuild Spectrum从Spectrum中提取Array 1D的PComplex值和间隔。

Open View参数

Start/Stop | Center/Span - 改变输出中描述Spectrum的频率范围的值。

位置

Data [image] UnBuild Data [image] Spectrum

另请参阅

Build Spectrum, UnBuild Data, UnBuild Waveform, Properties (对象)和对象菜单


UnBuild Waveform

输出Waveform的幅度值和时间跨度的对象。

用途

使用UnBuild Waveform从Wavefrom的时间跨度中提取Array 1D的幅度值和实数值。

备注

Real64数组输出将没有映射。

位置

Data [image] UnBuild Data [image] Waveform

另请参阅

Build Waveform, UnBuild Data, UnBuild Spectrum, Properties (对象)和对象菜单


Unpack (Object Menu)

Unpack (对象菜单)

一个菜单选项，仅位于UserObject的对象菜单中，用来?#25286;包?/span>UserObject。UserObject会消失，但UserObject内的对象会变成程序主要上下文的一部分。

用途

使用Unpack会删除UserObject，把它的内容放到程序的主要上下文中。在嵌大式UserObject中，则会把它的内容放在拆包的UserObject所在的UserObject的上下文中。由于构成UserObject的对象仍在新上下文内保持连接线，因此UserObject内的功能保持不变。

备注

Unpack是Create UserObject的逆操作。如果选择多个对象，执行Create UserObject，那么这些对象及其连接变成新的UserObject的一部分。如果之后在UserObject上执行Unpack，对象会返回到程序的主要上下文，就象从未创建UserObject一样。

位置

在对象菜单上（仅UserObjects） [image] Unpack

另请参阅

创建UserObject 和 UserObject。


Until Break

重复执行子线程直到遇到Break的对象。

用途

使用Until Break启动一套操作，这套操作一直重复，直到遇到Break 。

备注

由Until Break 提供主机的子线程会一直执行，直到发生其中一种下述情况：

所有对象已经运行；子线程被去活。通过重新启动Until Break 输出，直到遇到一个Break 对象，子线程被重新激活。

一个Break对象运行。子线程被去活，序列输出端被激活。

一个Next对象运行。通过重新启动Until Break 输出，直到遇到一个Break 对象，子线程子线程被去活，然后被重新激活。

Until Break输出一个实数值为零的输出输出执行信号。

当由Until Break 对象提供主机的子线程完成迭代时，在下一个迭代之前，在前一个迭代期间发送的所有数据容器会失效。这可以防止来自上一个迭代的?#26087;?#25968;据重用在当前迭代中。但是，如果在迭代子线程中存在流程分支，那么某些对象在每次迭代中可能会不执行。因此，这些对象发送的数据容器可能会失效，然后才能在数据上执行其它对象。为在这种情况下获得希望的传播，使用Sample & Hold对象。

位置

Flow [image] Repeat [image] Until Break

另请参阅

Break, For Count, For Log Range, For Range, Next, On Cycle, Sample & Hold, 和 Properties (对象)

循环部分VEE程序


UserFunction

从一个UserObject 或选择的一组对象中创建的一个用户自定义函数。

用途

通过创建一个UserObject，然后执行Make UserFunction （详情请参阅UserObject），可以创建一个UserFunction。还也可以通过选择一组对象，使用Edit Create UserFunction...，创建一个UserFunction。

一旦已经创建，可以使用Edit UserFunction 编辑UserFunction。UserFunctions存在于“后台”中，使用Call Function或从某些表达式中调用。

UserFunction较UserObject的一个优势是，在程序内可以多次调用UserFunction，但它作为源代码只位于一个位置。

对象菜单

  • Edit - 是调出UserFunction 的上下文Edit 的父菜单。这个菜单包含的选项与Edit 菜单的主菜单相同。在UserFunction 工作区上按鼠标右键，会弹出Edit 菜单。 下列选项与UserFunction有关：

  • Clean Up Lines – 在对象周围引导UserFunction中的直线。

  • Add To Panel – 为UserFunction创建一个面板视图（如果目前不存在面板视图），其中包含选择的对象。

  • Create UserObject – 创建一个由当前选择的对象构成的UserObject。

  • Create UserFunction – 创建一个由当前选择的对象构成的UserFunction 。

  • Cut – 从VEE及内存中删除UserFunction ，把它放在粘贴缓冲器里。UserFunction及其内容可以粘贴到另一个VEE会话中。对Windows 2000和XP，这还会把UserFunction编辑窗口图像及其内容放在剪切板上，可以随时粘贴到其它应用程序中。

  • Copy – 把UserFunction复制到粘贴缓冲器中。UserFunction及其内容可以粘贴到另一个VEE会话中。对Windows 2000和XP，这还会把UserFunction编辑窗口图像及其内容放在剪切板上，可以随时粘贴到其它应用程序中。

  • Make UserObject – 是Make UserFunction的相反操作。把UserFunction转换回UserObject。 Save Secured Version – 保存用户不能编辑的UserFunction版本。系统会提示安全版本的名称，它将使用.vee扩展名保存。

  • Locate – 在Program Explorer中高亮度显示UserFunction 的位置。

  • Generate - 创建包含参考UserFunction标题的表达式的其中一个下述对象。可以把生成的对象放在程序的另一个部分中： Call 创建一个 Call对象。 Formula Call 创建一个 Formula 对象。 If/Then/Else Call创建一个If/Then/Else对象。 ShowPanel创建一个带有ShowPanel()函数的Formula 对象。 HidePanel 创建一个带有HidePanel()函数的Formula对象。

  • Calls – 打开Find Results 对话框，其中包含这个UserFunction调用的其它UserFunction组成的列表。

  • Called By – 打开Find Results对话框，其中包含调用这个UserFunction的其它UserFunction 组成的列表。

  • Create Panel – 创建一个UserFunction 面板视图，面板中不添加任何对象。

  • Delete Panel – 删除UserFunction的面板视图及面板中添加的任何对象。与面板一起删除的对象不会从细节视图中删除。

  • Close – 隐藏UserFunction 编辑窗口。UserFunction 仍装在内存中。在运行程序前，不需要Close UserFunctio编辑窗口。

属性

  • TrigMode 组：

  • Degrees | Radians | Gradians – 指定在这个UserFunction中使用的三角单位的默认值。

  • PopupPanelTitle: - 在执行窗口中面板上显示的标题。

  • ShowPanelOnExecute – 当属性为 True时，显示UserFunction运行时与UserFunction相关的面板视图。默认值为False。

  • PopupMoveable – 当属性为True时，用户不能移动弹出面板。 默认值为False。

  • ShowPopupPanelTitle – 当属性为True时，显示弹出面板上的标题栏。默认值为True。

  • ShowPopupPanelBorder – 当属性为 True时，显示弹出面板周围的边框。默认值为True。

备注

通过创建多个UserFunctions，然后把它们都保存到一个文件中，可以创建一个UserFunctions 库。然后可以使用Import Library把这个库导入一个程序中，使用Delete Library 删除这个库。

不仅可以使用Call Function调用UserFunction，还可以从求解延迟到运行时的任何表达式中调用UserFunction，包括各种对象中的表达式，如Formula、If/Then/Else和 Set Values以及Sequencer和 I/O 处理中的表达式。但是，在表达式中调用函数的语法只允许返回一个值。因此，从这样的表达式中调用UserFunction只会返回第一个输出上的值。如果还有其它输出（不包括序列输出），那么输出值会被丢掉。如果没有输出，返回的值将未定义。

为找到显示的面板名称（通过showPanel()或ShowPanelonExecute），在面板上按鼠标右键，将弹出面板名称。

如果通过UserFunction传送零，且requiredType 或 requiredShape不是Any，那么会发生错误。

带有描述的UserFunctions有专用图标。在程序浏览器及标题栏中，图标 表明其中带有描述，因为右上角有一个红色三角形。

位置

从Edit =〉Edit UserFunction或从Call Function对象菜单 Edit UserFunction中，选择UserFunction 名称，或在Program Explorer中双击UserFunction 名称。

另请参阅

Call, Delete Library, Edit UserFunction, Formula, hidePanel(), If/Then/Else, Import Library, lockPosition(), panelPosition(), panelSize(), Sequencer, showPanel(), unlockPosition(), Remote Functions, 和 UserObject 。

在程序使用多个对象创建UserFunction .


UserName

检索目前登录到机器上的用户名称。

位置

System [image] Environment [image] User Name


UserObject

可以包含其他对象的对象。

用途

使用UserObject 在逻辑上和物理上把多个对象划分在一组中。UserObject 构成一个与程序的根上下文不同的“上下文”在一个程序中可以使用多个UserObjects 或嵌套的UserObjects。

为创建希望的UserObject，可以把其它对象移动到UserObjectOpen View的工作区中，也可以选择多个对象，然后从Edit 菜单中使用Create UserObject。

对象菜单中的Make UserFunction 项允许把UserObject 转换成UserFunction，然后可以使用Call Function对象或从特定表达式中调用UserFunction。

运行:

UserObject的运行方式与其它对象相同--只有在UserObject的所有数据输入被激活时，UserObject内部的对象才会运行。在输出数据被激活前，UserObject内部的所有操作必须已经完成。 在UserObject 内部的对象连接到UserObject 外部的对象时，当选择Create UserObject时，会自动创建输入端和输出端。为在现有UserObjects中添加输入端和输出端，从对象菜单中使用Add Terminal 。

创建UserFunction:

一旦已经创建了一个UserObject，可以使用Make UserFunction （参阅下面的“对象菜单”创建一个拥有相同功能的UserFunction。UserObject将从屏幕中消失，而被一个Call Function 对象所取代，其中包含调用新的UserFunction 和新的UserFunctions 窗口。UserFunction将被添加到提供的User Functions列表中，这个列表位于程序内的“后台”。可以使用Call Function 对象或从某些表达式中调用UserFunction。可以使用Edit 菜单中的Edit UserFunction，编辑UserFunction。

对象菜单

可以从对象菜单按钮中选择UserObject 对象菜单，但不能从UserObject打开窗口的工作区中选择它。从这个窗口内部，按鼠标右键会弹出一个Edit 菜单，与主窗口中提供的菜单相同。当指针移动到UserObject内部的一个对象上时，按鼠标右键，会出现该对象的对象菜单。通过把指针放到UserObject边界外，按鼠标右键，也可以获得UserObject对象菜单。

  • Edit -是调出UserObject的上下文Edit 的父菜单。这个菜单包含的选项与Edit 菜单的主菜单相同。在UserObject工作区上按鼠标右键，会弹出Edit 菜单。

以下选项与UserObject相关：

Clean Up Lines - 在对象周围引导UserObject中的直线。

Add To Panel -为UserObject创建一个面板视图，其中包含选择的对象。

Create UserObject - 创建一个由当前选择的对象构成的UserObject。

Create UserFunction - 创建一个由当前选择的对象构成的UserFunction 。

Maximize - 调整UserObject打开窗口的大小，使其占据整个VEE工作区。使用Restore 返回到以前的Open View大小。

  • Cut - 从VEE及内存中删除UserObject，把它放在粘贴缓冲器里。UserObject及其内容可以粘贴到另一个VEE会话中。对Windows 2000和XP，这还会把UserObject编辑窗口图像及其内容放在剪切板上，可以随时粘贴到其它应用程序中。

  • Copy - 把UserObject复制到粘贴缓冲器中。UserObject及其内容可以粘贴到另一个VEE会话中。对Windows 2000和XP，这还会把UserObject编辑窗口图像及其内容放在剪切板上，可以随时粘贴到其它应用程序中。

  • Make UserFunction ?把UserObject转换成UserFunction。UserObject将从屏幕中消失，而被一个Call Function 对象所取代，其中包含调用新的UserFunction。在进行这一操作前，在标题字段中输入一个唯一的名称。这个名称将成为UserFunction的名称，Call Function 或某些表达式可以通过这个名称来调用UserFunction。如果这个名称是最初的- UserObject- 或不是唯一的，那么系统会提示您输入一个函数名称。

  • Unpack ?删除UserObject，但不删除其中包含的对象。

  • Save Secured Version - 保存用户不能编辑的UserObject版本。系统会提示安全版本的名称，它将使用.vee扩展名保存。

  • Locate - 在Program Explorer中高亮度显示UserObject的位置。

  • Calls - 打开Find Results 对话框，其中包含这个UserObject调用的UserFunction组成的列表。

  • Create Panel - 创建一个UserObject面板视图，面板中不添加任何对象。

  • Delete Panel - 删除UserObject的面板视图及面板中添加的任何对象。与面板一起删除的对象不会从细节视图中删除。

  • Close - 隐藏UserObject编辑窗口。UserObject仍装在内存中。在运行程序前，不需要Close UserObject编辑窗口。

属性

  • TrigMode 组：

  • Degrees | Radians | Gradians - 指定在这个UserObject中使用的三角单位的默认值。

  • PopUpPanelTitle: - 在执行窗口中面板上显示的标题。

  • ShowPanelOnExecute - 当选中复选框时，显示UserObject运行时与UserObject相关的面板视图。只有在已经创建UserObject面板后（使用Create Panel）才能使用这个选项。默认值为False。

  • PopupMoveable - 当属性为True时，用户不能移动弹出面板。 默认值为False。

  • ShowPopupPanelTitle - 当属性为True时，显示弹出面板上的标题栏。默认值为True。

  • ShowPopupPanelBorder -当属性为 True时，显示弹出面板周围的边框。默认值为True。

备注

为创建由当前选择的对象组成的一个UserObject，使用Create UserObject。

可以方便地保存常用函数的UserObjects（使用Save Objects），创建一个函数库，以便再次使用。

通过创建多个UserObjects，把它们转换成UserFunctions，然后保存到一个文件中，可以创建一个UserFunctions库。然后可以使用Import Library把这个库导入到程序中，使用Delete Library删除这个库。

为找到显示的面板名称（通过ShowPanelonExecute），在面板上按鼠标右键，将弹出面板名称。

UserObject 面板视图可以添加到Main 面板视图或作为外层上下文的UserObject面板视图中，换句话说，面板可以嵌套。当面板被添加到parent面板中时，会生成完全重复的源面板。在源面板被修改时，所有重复面板也会更新。

如果UserObject带有相关描述，它会有一个特殊的图标 ，注意右上角是红色。

为把UserObject面板添加到父面板中，如Main面板：

1. 在创建一个UserObject及其面板后，在UserObject 的图标视图上按鼠标右键，出现其对象菜单。

2. 点击Restore，出现Open View。它看起来像一个面板视图。不要删除这个视图，否则会从父程序中删除UserObject。

3. 选择UserObject，高亮度显示UserObject。

4. 点击Add To Panel工具栏按钮（Edit Add To Panel）。UserObject出现在父面板中。

位置

Device =〉UserObject

另请参阅

Add To Panel, Call, Create UserObject, Delete Library, Direct I/O, Edit UserFunction, Formula, If/Then/Else, Import Library, Create RunTime Version, Sequencer 和 UserFunction。

在程序使用多个对象创建UserFunction

在程序中创建UserFunction


UTCNow

检索系统的通用时间(格林威治标准时间)。

位置

System [image] DateTime [image] UTCNow


Variable

一个菜单项。

用途

使用variable存取下面的对象，设置和获得变量值。

Set Variable

Get Variable

Delete Variable

Declare Variable

备注

在一个程序的一个上下文中定义的变量可以用于程序内部任何其它上下文中。例如，可以使用Set Variable对象在程序的根上下文中定义一个变量，然后包括Get Variable，在UserObject中获得该变量。在整个程序中必需避免名称冲突：

如果两个或多个Set Variable对象试图设置同一个变量(使用相同的名称)，那么在执行每个Set Variable 时会覆盖当前值。如果不知道存在重复名称，这可能会导致意想不到的行为。

如果有一个数据端变量的名称与变量相同，那么数据端变量优先。

如需进一步信息，请参阅VEE高级技术手册中的"变量"。

位置

Data [image] Variable

另请参阅

默认首选项, Declare Variable, Delete Variable, Get Variable, Set Variable, View Variables。

创建变量

删除变量

使用变量


Variant

变量

用途

Variant数据类型不是确定的数据类型。它在表达式中用以表明，其代表的值可以成为许多其它数据类型中的一种。它是当时保持的数据类型。任何一个数据类型都可以晋级或降级至一个Variant，同时一个Variant也能够晋级或降级至其所保持的相关数据，而且此数据遵守相应的规则。

如果这个容器被传送到ActiveX自动化服务器或控件，它将转换成VT_VARIANT，而不是在Variant容器中的数据类型。如果ActiveActiveX自动化方法需要VT_VARIANT或ByRef VT_VARIANT类型参数，那么只需要Variant类型。

范例

在函数sin(var)中，在Variant数据类型(var)中的数据可以是整数、实数或波形，取决于它被赋予的值。

在表达式a=sin(var)中，a将得到一个(var)所包含的数据类型。

位置

创建Variant数据类型的唯一方式是：

Data [image] Variable [image] Declare Variable
选择类型Variant；或

使用asVariant()函数。

另请参阅

asVariant(), Declare Variable。


Vertical Paddle

垂直桨

参阅Toggle Control。


Vertical Rocker

垂直摇杆

参阅Toggle Control。


Vertical Slide

垂直滑条

参见Toggle Control。


View Detail

把显示的视图从面板视图切换到细节视图。

用途

在按这个按钮时，View Detail会显示程序、UserObject或UserFunction的细节视图。

备注

在UserObjects和UserFuntions上，只有在创建了面板视图以后才能看到View Detail。

在保护面板视图安全后，看不到View Detail按钮。

位置

主VEE窗口、UserObject或UserFunction的标题栏 (在已经创建相关面板时)。

另请参阅

添加到面板, 查看面板,和创建RunTime版本.

在面板中添加对象

从面板中删除对象


View Panel

把显示的视图从细节视图切换到面板视图。

用途

在按View Panel时，显示创建的面板视图，作为主VEE窗口、UserObject或UserFunction上的程序接口。

备注

在UserObjects或UserFunctions上，只有在创建了面板视图时才能看到View Panel。

在已经保护面板视图安全后，看不到View Panel按钮。

位置

主VEE窗口、UserObject或UserFunction的标题栏 (在已经创建相关面板时)。

另请参阅

Add To Panel, View Detail,和创建RunTime版本.

在面板中添加对象

从面板中删除对象


View Properties

打开或关闭Properties窗口的一个View菜单项。

用途

Properties菜单选项是一个切换函数，确定是否显示Properties窗口。在其激活时，Properties窗口位于VEE工作空间左侧。

通过在VEE工作空间和Properties窗口之间的垂直间隔上盘旋鼠标指针，可以调节Properties窗口的宽度。在鼠标光标的形状变成竖的分开光标时，按鼠标左健，向右或向左拖动光标，提高或降低窗口大小。

通过在Program Explorer和和Properties窗口之间的水平分隔符上盘旋鼠标指针，可以调节Properties窗口的高度(如果能够看到Program Explorer和Properties)。

Properties窗口的目的是向编程人员显示当前选中的对象的属性。除少数例外情况下，可以修改这些属性。

位置

View [image] Properties

另请参阅

Properties (对象)


Virtual Source

一个菜单项。

用途

使用Virtual Source存取下面的虚拟信号发生器。

Function Generator

Pulse Generator

Noise Generator

备注

Virtual Source对象输出Waveforms。

位置

Device [image] Virtual Source

另请参阅

Build Arb Waveform, Function Generator, Instrument Manager, Noise Generator和Pulse Generator。


Watch Window

打开或关闭Watch Window对话框的一个View菜单项。

用途

通过使用Watch Window (VEE 8.0中的新功能)，可以：

  • 在调试程序时查看变量和端。

  • 编辑并继续操作。可以在调试程序时改变变量和端。程序可以继续执行，包括任何改变的值。

  • 在细节视图中确定对象的位置。可以方便地找到当前变量或端属于哪个对象。

  • 把Watch Window中的项目复制到复制-粘贴缓冲器中。

对话框信息

Watch Window对话框包括四栏：Locals, Globals, Watch Terminals和Watch Variables。每栏有三个字段。

  • Name字段显示变量或端的名称或标识。

  • Value字段显示并允许编辑变量或端的值。这一功能适用于标量和多维数组。

  • Type字段显示变量或端的数据类型和形状。

Locals栏：

活动上下文中的Local to Context变量将自动出现在Locals栏下。

在活动上下文变化时，Locals栏的内容将变化。在从活动上下文中删除变量时，变量会从Watch Window对话框中自动消失。

Globals栏：

所有Declared Global变量和Local to Library Declared变量将自动出现在Globals栏下。

未声明变量(如通过Set Variable对象)或Imported Libraries中的变量将不会在其添加到程序后立即出现在Watch Window中。在程序执行过了Set Variable对象后，将出现一个Undeclared变量；通过运行程序导入库后，或通过Import Library对象的上下文菜单手动加载库后，将出现Imported库中的Global变量。

Watch Terminals栏：

可以选择性地把端添加到 Watch Window的Watch Variables栏中。有3种方式在Watch Window中添加一个端：

1. 双击输入端或输出端，打开Input / Output Terminal Information对话框，如下图所示。

点击Watch按钮。如果Watch Window中已有一个端，它将不会再次添加到Watch Window中。

2. 在输出线上按鼠标右键，打开Edit Line对话框，如下图所示：:

选择Watch Data。如果Watch Window中已有一个输出端，那么它将不会再次添加到Watch Window中。

3. 双击一条输出线，打开Line Value对话框，如下图所示：

点击Watch按钮。如果Watch Window中已有一个输出端，那么它将不会再次添加到 Watch Window中。

在Watch Terminal栏下，状态栏会显示与选定的端有关的部分信息，如端的上下文、设备名称和端的名称。

Watch Terminals栏中Name的格式为：

{对象标题 -对象标识}.输出端名称.

例如，在下图中，Watch Window对话框中的一个项目是{bigNum-M.21}。Int16. "bigNum"是对象标题；"M.21"是对象标识，与Properties窗口中的项目一致。"Int16"是输出端的名称。

Watch Variables栏：

可以选择性地把变量添加到Watch Window的Watch Variables栏中。有4种方式在Watch Window中添加一个变量：

    1. 双击并输入Watch Variables栏下的名称字段；

    2. 在变量上按鼠标右键，查看Locals栏或Globals栏，然后选择Add Watch；

    3. 在VEE程序的Declare Variable对象、Set Variable对象或Get Variable对象上按鼠标右键，然后选择Add Watch；

    4. 在变量按鼠标右键，查看VEE Program Explorer，然后选择Add Watch。

上下文菜单

在Locals栏或Globals栏下按鼠标右键，打开一个上下文菜单，如下图所示。

在Watch Variable栏或Watch Terminals栏下按鼠标右键，打开一个上下文菜单，如下图所示。

  • Copy -- 把选定的项目(包括Name, Value和Type字段)复制到"复制-粘贴"缓冲器中。

  • Copy Nested -- 把数组复制到"复制-粘贴"缓冲器中。Copy Nested复制选定的数组，包括其所有项目，即使Watch Window中没有展开数组。

  • Locate -- 迅速确定相应变量或端在活动上下文中的位置。在细节视图很大时，Locate提供了一种非常方便的功能。

  • Select All -- 选择当前栏下的所有项目。

  • Delete -- 从Watch Variables或Watch Terminals栏中删除选定的变量。

  • Delete All -- 从Watch Variables栏中删除所有变量，或从Watch Terminals栏中删除所有端。

  • Add Watch -- 把变量添加到Watch Variables栏中。

备注

  • Watch Window按字母顺序对所有项目分类。

  • 在关闭Watch Window或在VEE程序关闭时，将保存Watch Terminals和Watch Variables栏下的所有项目。在重新打开Watch Windows时，Watch Window将恢复保存的所有这些项目。VEE只保存这些项目的名称字段和类型字段，而不保存任何值。

更新和编辑值

只有在程序暂停(如遇到断点)或停止时，才会更新Watch Window中的变量和端值。

在程序暂停或停止时，通过双击希望编辑的项目的取值字段，可以编辑Watch Window中的变量和端值。不能改变变量和端的名称和类型。

在Watch Window中，在项目不能编辑时，项目会变成灰色。

Watch Window支持的数据类型

下表列出了Watch Window支持的数据类型。

数据类型 | 查看 | 编辑
Boolean | 是 | 是
Uint8 | 是 | 是
Int16 | 是 | 是
Int32 | 是 | 是
Int64 | 是 | 是
Real32 | 是 | 是
Real64 | 是 | 是
PComplex | 是 | 是
Complex | 是 | 是
Waveform | 是 | 是
Spectrum | 是 | 是
Coord | 是 | 是
Text | 是 | 是
Enum | 是 | 否
Record | 是 | 是
.NET | 是 | 是 (部分支持)
COM | 最小 | 否
Variant | 最小 | 否
Boolean,UInt8, Int16, Int32, Int64, Real32, Real64, PComplex, Complex, Coord, Text数组 | 是 | 是

快捷方式

按工具栏上的 [image] 按钮。

位置

View [image] Watch Window


Waveform (Time)

在两维图形画面上显示时域信息(波形)的对象。

用途

使用Waveform (Time)在时域内显示波形或频谱。频谱将通过反向快速傅立叶变换(ifft)自动转换成波形。X轴为输入波形的取样单位（一般是秒）。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Mag - Y轴的名称。

Trace1 - 第一条轨迹的名称。

Freq - X轴的名称。

对象菜单

Auto Scale [image] - 点击这些菜单项，立即把画面重新定标成显示整条轨迹。(可以添加为控制端，或使用Scales属性栏设置成在采集数据后自动重新定标画面。)

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用- 橡皮圈- 框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Y轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

 ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

 ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

 ShowScaleLabels - 在Open View中，控制标度轴标为H的取值的可视性。默认值为True。

 ShowScrollBars - 在Open View中，控制X和Y标度上的滚动条。默认值为True。

 ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

 EditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType类别：

None-不显示网格线。

Tic Marks - 在图像四边上主格和分格上显示tic号。

Axis - 在图像的X和Y轴上的主格和分格上显示tic号。如果实际轴滚动到图像区域之外，轴线将被画在距轴最近的界线上。

Lines - 在主格显示线，在分格显示tic号。X和Y轴用粗线显示。

NumMarkers 类别: -允许在显示曲线上找到数据点的确切值。如果使用对数标度绘制数据，标尺上显示的值为线性数据点。

点击在画面底部附近的标尺值左面的按钮，可以将标尺移动至一条不同的轨迹上。按钮可以循环顺序通过不同轨迹的不同线型和颜色。

Off - 不显示标尺。此选项为默认值。

One - 提供一个标尺。

Two - 提供两个标尺。

Delta - 提供两个标尺，并显示x和y之差。

 MarkerInterpolate - 当复选框被选中时，可以在显示的数据点中设置标尺。显示的标尺值从线性内插计算得出。默认设置为False。

默认标尺颜色为yellow。

DisplayBackColor - 允许从调色板中选择画面区域的颜色。在细节视图和面板视图中显示时，可以选择不同的颜色。在设置Screen Element: Graph Background的Colors栏上的Default Preferences中，设置默认的Background颜色。

 Font - 允许从系统提供的字体列表中选择标度标记的字体。标度标记文本的默认字体在Screen Element: Graph Scale Label Text的Fonts栏上的Default Preferences中设置。

Traces类别：

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scales类别

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

ScaleNumberFormat: (X和Y标度及任何其它Y标度出现的属性。)

GlobalFormat - 使用默认格式。默认值为True。

Real - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如Sat 01/Jan/1994 17:01:38)。默认设置为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入必须为标量或数组1D。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。.

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到 n 的整数，其中0不绘图，n 是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] Waveform (Time)

另请参阅

Complex Plane, Magnitude Spectrum, Polar Plot, Strip Chart, X vs Y Plot, XY Trace和默认首选项。

显示波形, 在显示画面中设置标尺, 获得和设置标尺属性


什么是IVI?

IVI (可互换的虚拟仪器)是IVI协会制订的一项新标准。可以查阅http://www.ivifoundation.org获得更多信息。IVI协会的目标是建立一个驱程标准，允许仪器实现互换，同时仍能提供很高的质量和性能。互换能力意味着您可以为福禄克公司的任意波形发生器(ARB)编写一个程序，然后换上安捷伦ARB和驱程。程序仍能工作，因为ARB的IVI标准要求不同制造商的ARB能够支持完全相同的一套函数调用。当然，对互换能力有一些限制。

IVI-C与IVI-COM比较

IVI协会目前规定了两类驱程。IVI-C驱程扩展了VXIplug&play驱程规范，使用方式类似。IVI-COM驱程与ActiveX控件类似。因此，尽管这两个驱程的功能类似，但使用方式有很大差别。

另请参阅

.NET和IVI驱程


WhichOS()

用来输出Agilent VEE Pro目前正在运行的操作系统的对象。

用途

使用whichOS()确定Agilent VEE Pro正在运行的操作系统。它会返回其中下面一个字符串：

Windows_NT

Windows_98

Windows_2000

Windows XP

范例

在PC上Agilent VEE Pro for Windows 98: whichOS()返回Windows_98。

备注

whichOS()对象是一个在没有输入的情况下初始化的Formula对象，其中包含whichOS()公式。还可以在任何其它Formula对象或表达式中输入whichOS()。

位置

Device > Function & Object Browser

Type: Built-in Functions Category: System Information Member: whichOS

另请参阅

Formula, whichVersion().


whichVersion()

用来输出目前正在运行的VEE版本的对象。

用途

使用whichVersion()确定正在运行的VEE版本。这个字符串与Help [image] About对话框中出现的字符串相同。

范例

对VEE 3.2版，whichVersion()返回文本字符串3.2。

备注

whichVersion()对象是一个在没有输入的情况下初始化的Formula对象，其中包含whichVersion()公式。还可以在任何其它Formula对象或表达式中输入whichVersion()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: whichVersion

另请参阅

Formula和whichOS()


Write to Event Log

把VEE错误信息写入到Application事件日志中。

位置

System [image] Write to Event Log


X vs Y Plot

显示Cartesian曲线的对象。

用途

当X和Y数据有不同的数据信息时，使用X vs Y Plot来绘制并显示这些值。在打印一条以上的轨迹时，每次执行X vs Y Plot对象会使用一个X输入数据及每条轨迹的Y输入数据，因此所有轨迹共享相同的X输入数据。如果需要不同的X数据值，必须为每条轨迹建立坐标或映射的数组，并使用X-Y Trace对象。

所有的输入的大小和形状必须相同。忽略输入数据上的映射信息。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Y name - Y轴的名称。

YData1 - 第一条轨迹的名称。

X name 朮轴的名称。

对象菜单

Auto Scale [image] -点击这些菜单项，立即把画面重新定标成显示整条轨迹。（可以添加为控制端，或在收集数据后使用Scales属性栏设置，自动调整显示画面的大小。）

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用 "橡皮圈" 框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Radius轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

ShowScalesLabels - 在Open View中，控制标为标度轴的值的可视性。默认值为True。

 Show Scroll Bars - 在Open View中，控制X和Y标度上滚动条的可视性。默认值为True。

ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

EnableEditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType类别：

None-不显示网格线。

Tic Marks - 在图像四边上主格和分格上显示tic号。

Axis - 在图像的X和Y轴上的主格和分格上显示tic号。如果实际轴滚动到图像区域之外，轴线将被画在距轴最近的界线上。

Lines - 在主格显示线，在分格显示tic号。X和Y轴用粗线显示。

NumMarkers 类别: -允许在显示曲线上找到数据点的确切值。如果使用对数标度绘制数据，标尺上显示的值为线性数据点。

点击在画面底部附近的标尺值左面的按钮，可以将标尺移动至一条不同的轨迹上。按钮可以循环顺序通过不同轨迹的不同线型和颜色。

Off - 不显示标尺。此选项为默认值。

One - 提供一个标尺。

Two - 提供两个标尺。

Delta - 提供两个标尺，并显示x和y之差。

 MarkerInterpolate - 当复选框被选中时，可以在显示的数据点中设置标尺。显示的标尺值从线性内插计算得出。默认设置为False。

默认标尺颜色为yellow。

DisplayBackColor - 允许从调色板中选择画面区域的颜色。在细节视图和面板视图中显示时，可以选择不同的颜色。在设置Screen Element: Graph Background的Colors栏上的Default Preferences中，设置默认的Background颜色。

 Scale Label Text - 允许从系统提供的字体列表中选择标度标记的字体。标度标记文本的默认字体在Screen Element: Graph Scale Label Text的Fonts栏上的Default Preferences中设置。

Traces组：（每条轨迹一个）

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这条Trace使用的标度。

Scales属性(每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

ScaleNumberFormat: (X和Y标度及任何其它Y标度出现的属性。)

GlobalFormat - 使用默认格式。默认值为True。

Real - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如 Wed 01/Jan/2003 17:01:38)。默认设置为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入必须为标量或数组1D。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到 n 的整数，其中0不绘图，n 是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] X vs Y Plot

另请参阅

Complex Plane, Magnitude Spectrum, Polar Plot, Strip Chart, Waveform (Time), XY Trace, 默认首选项 和 对象菜单

显示XY值, 在显示画面中设置标尺, 获得和显示标尺属性


XY Trace

显示两维Cartesian曲线的对象。

用途

当在使用均匀间隔的x值生成y数据时，使用XY Trace显示所映射的数组或一组值。在您不需要（或拥有）带标度的x数据值时，可以使用XY Trace快速查看数据。

自动生成的x值取决于轨迹数据的数据类型。例如，如果轨迹为实数值，则x值为0、1、2，等等。如果轨迹是一个波形，那么x值为时间值。

Open View参数

下面是默认的Open View参数。其用途及其它参数的使用情况由对象菜单及Properties对话框中的选项控制 (对象菜单 [image] Properties)。

Y name - Y轴的名称。

Trace1 - 第一条轨迹的名称。

X name 朮轴的名称。

对象菜单

Auto Scale [image] -点击这些菜单项，立即把画面重新定标成显示整条轨迹。（可以添加为控制端，或在收集数据后使用Scales属性栏设置，自动调整显示画面的大小。）

Auto Scale - 自动定标两个轴。

Auto Scale X - 自动定标X轴。

Auto Scale Y - 自动定标Y轴。

Zoom [image] - 缩放显示画面。

In - 放大显示画面，只包含使用指针选定的矩形区域。在选择这一功能后，通过在图形区域上拖动，可以选择区域。这一操作使用“橡皮圈”框确定信息外形。

Out 2|5|10|20|50|100X - 在相对于中心的X方向和Y方向上，以某个倍数扩大显示范围。

Clear Control [image] - 指明什么时候清除显示画面的参数。

Display - 清除显示的轨迹。这个参数可以添加为控制端。

Next Curve - 复位画面，显示一系列曲线中的下一个曲线 (画面下次运行时的数据)，而不会清除上一个曲线。在系列中每条新曲线前必须选择(或激活)Next Curve。可以作为控制输入添加这个参数。

Center Markers - 如果提供了标尺，那么把它们放到轨迹看得到的部分的中心。如果滚动画面，看不到标尺，可以使用这种功能。

Add Right Scale - 添加最多两个额外的Radius轴标度，允许多条轨迹有不同的标度范围。在添加适当的标度后，可以添加输入端 (对象菜单 [image] Add Terminal [image] Data Input)。然后使用 Properties对话框上的Traces和Scales栏设置其属性。

Print - 出现Print对话框。按OK将在选定的输出设备上打印或绘制设备的整个画面拷贝。可以作为控制输入添加Print。

属性

Name - 为显示画面指配一个变量值。通过输入名称，在打开时可以以程序化方式读取标尺值。变量是Object数据类型，是存在画面的上下文的局部变量。详情请参阅备注。

ClearAtPreRun - 在属性为True时，在PreRun时清除画面。默认值为True。

ClearAtActivate - 在属性为True时，在Activate时清除画面。默认值为True。

ShowTracesLegend - 在Open View中，控制轨迹名称和颜色的可视性。使用EditTracesAndScales控制轨迹图例的编辑按钮功能。默认值为True。

ShowScalesLegend - 在Open View中，控制标度名称的可视性。使用EditTracesAndScales控制标度图例的编辑按钮功能。默认值为True。

ShowScalesLabels - 在Open View中，控制标为标度轴的值的可视性。默认值为True。

 Show Scroll Bars - 在Open View中，控制X和Y标度上滚动条的可视性。默认值为True。

ShowAutoScaleButton - 在Open View中，控制Auto Scale按钮的可视性。默认值为False。

EnableEditTracesAndScales - 在Open View中，控制轨迹和标度属性的编辑按钮功能。在启用时，点击各个轨迹或标度名称，编辑其属性。默认值为True。使用ShowTracesLegend和ShowScalesLegend控制轨迹和标度名称的可视性。

GridType类别：

None-不显示网格线。

Tic Marks - 在图像四边上主格和分格上显示tic号。

Axis - 在图像的X和Y轴上的主格和分格上显示tic号。如果实际轴滚动到图像区域之外，轴线将被画在距轴最近的界线上。

Lines - 在主格显示线，在分格显示tic号。X和Y轴用粗线显示。

Markers组: -允许在显示曲线上找到数据点的确切值。如果使用对数标度绘制数据，标尺上显示的值为线性数据点。

点击在画面底部附近的标尺值左面按钮的Open View，可以将标尺移动至一条不同的轨迹上。按钮可以循环顺序通过不同轨迹的不同线型和颜色。

Markers 组:

Off - 不显示标尺。此选项为默认值。

One - 提供一个标尺。

Two - 提供两个标尺。

Delta - 提供两个标尺，并显示x和y之差。

 MarkerInterpolate - 当复选框被选中时，可以在显示的数据点中设置标尺。显示的标尺值从线性内插计算得出。默认设置为False。

 MarkerColor - 允许您改变画面上的标尺颜色。

BackColor - 允许从调色板中选择画面区域的颜色。在细节视图和面板视图中显示时，可以选择不同的颜色。在设置Screen Element: Graph Background的Colors栏上的Default Preferences中，设置默认的Background颜色。

Scale Label组:

Text - 允许从系统提供的字体列表中选择标度标记的字体。标度标记文本的默认字体在Screen Element: Graph Scale Label Text的Fonts栏上的Default Preferences中设置。

Traces 组：每条轨迹一个。

Name: - 在图形区域左面显示的轨迹名称及相应的输入端名称。

Color: - 轨迹的颜色。每条新增的轨迹有一个与现有轨迹不同的颜色。第一条轨迹的默认值是yellow。

LineStyle: - 连接多个数据点的线的格式。默认值为continuous line。

PointStyle: - 标记每个数据点的符号。为显示没有连接的数据点，选择单点LineStyle格式及希望的PointStyle符号。默认值为dot。

Scale - 如果存在一个以上的Y标度，选择这条Trace使用的标度。

Scales属性(每个X和Y标度一个，外加额外的Y标度)

Show Scale: - 如果有多个Y标度，那么这个选项(使用复选框)将指明在图形区域右面是否显示端点和每个新增的适当标度的轴。

Scale Name: - Open View中出现的标度名称。

Automatic Scaling: - 控制画面是否自动重新定标，在收到数据后立即显示整条轨迹。默认值为打开。如果这一项关闭，可以在Layout组中使用General栏上的Auto Scale按钮，或在对象菜单上使用Auto Scale命令，来重新定标画面。

Maximum: - 标度的最大值。

Minimum: - 标度的最小值。

Label Spacing: - 控制哪个tic号中标上标度值。X标度的默认值是Every Other Tic；Y标度的默认值是Every Major Tic。

Mapping: - x和y数据与画面映射的方式。映射可以是线性映射或对数映射。为绘制log-log图，把X轴和Y轴都变成Log。默认值为Linear。

Log Cycles: - 在Automatic Scaling启动时显示的10的最大数量(从x和y最大值向下计数)。只有在Mapping为Log时，才使用Log Cycles。在轨迹数据中包含大的动态范围时，适合使用Log Cycles。默认值为4。

Scale Color - 任何背景栅格或tic号的颜色。默认值为Gray。

ScaleNumberFormat: (X和Y标度及任何其它Y标度出现的属性。)

GlobalFormat - 使用默认格式。默认值为True。

Real - 如果Global Format关闭，指定这个对象上显示的实数数字格式。选项有：Fixed (如98.6000), Scientific (如9.8600E+01), Engineering (如98.6000E0), Standard (如98.6),和Time Stamp (如 Wed 01/Jan/2003 17:01:38)。默认设置为Standard。

X和Y标尺值采用与其附在的标度相同的数字格式。X和Y的增量标尺值使用默认数字格式，除非使用Time Stamp格式。如果X标度上的标尺1和标尺2或Y标度上的两个标尺都使用Time Stamp格式，增量标尺值将使用Delta Time格式。

备注

输入必须为可以转换成Real64类型的标量或数组1D。在输入XY Trace之前，必须"unbuild" Complex、PComplex和Spectrum数据。

通过只使用x和y值，而不是先转换成Spectrum类型，来绘制Coord 型输入数据图。

使用Add Terminal [image] Data Input对象菜单选项添加轨迹，最多支持12条轨迹。

在Automatic Scaling属性打开时(Scales栏)，如果把整个数据集合发送到显示画面上，程序执行速度要更快。然后，显示画面会自动重新定标一次。如果程序一次把一个数据点发送到显示画面上，显示画面可以在每个数字点以后自动重新定标，这会降慢程序执行速度。在这种情况下，使用Collector对象创建一个数组，然后把数组发送到显示画面上。

添加控制输入

可以添加一个Title控制输入端，把标题栏名称设置成指定的文本值。这可以程控打印画面时显示的标题。

可以添加一个Traces控制输入端。控制输入数据必须是由多个记录组成的数组(或如果只想控制一条轨迹，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为TraceNum的字段及一个整数值(1是第一条轨迹)。要求 TraceNum字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name

Pen

LineType

PointType

Name字段必须有一个文本值。Pen, LineType和PointType值必须是从0到 n 的整数，其中0不绘图，n 是提供的选项数量。

可以添加一个Scales控制输入端，控制上面列出的标度参数。控制输入数据必须是由多个记录组成的数组(如果只想控制一个标度，那么可以是一个记录标量)。使用Record Constant或Build Record对象，创建由多个记录组成的数组；每个记录必须有下述字段：

一个名为Scale的Text字段，取值为X, Y (或Y1), Y2或Y3。要求 Scale字段，如果省略这个字段，会发生错误。

一个或多个下述字段：

Name - 在Open View中改变标度名称。必须是一个文本值。

Min - 设置X标度的最小值。必须是一个整数值或实数值。

Max - 设置X标度的最大值。必须是一个整数值或实数值。

Mapping - 必须有一个Linear或Log文本值。

AutoScale - 控制自动定标。必须有一个On或Off的文本值。

如需进一步信息，请参阅使用记录和使用DataSets。

以程序化方式设置和读取标尺值

可以以程序化方式获得和设置标尺值。为准备显示，打开Properties窗口。为Name输入一个值。Name值暗示声明Object变量是显示画面上下文的局部变量。然后，在Markers组中打开一个设置。VEE为标尺的X位置和Y位置指配下述属性，包括增量值。(Marker1指向下；Marker2指向上。)

Marker1X (作为Real64获得位置)

Marker1Y (作为Real64获得位置)

Marker2X (作为Real64获得位置)

Marker2Y (作为Real64获得位置)

MarkerDX (作为Real64获得位置)

MarkerDY (作为Real64获得位置)

Marker1 (作为Coord获得/设置位置)

Marker2 (作为Coord获得/设置位置)

可以使用Marker1和Marker2属性，读取当前标尺位置，或把标尺移动到新位置。所有其它标尺属性都是只读的。如果试图把标尺移动到不在轨迹的坐标上，标尺会"咬"住轨迹上最近的点上。

在程序中，在Formula对象中输入一个或多个表达式，设置或读取标尺值。每个表达式必须包含显示画面Name和相关的标尺属性。标尺属性名称不分大小写。如果显示画面的Name是XY，同时打开Delta Markers，那么下述表达式将读取提供的所有标尺值，并作为Real64标量把它们指配给变量a到f：

a = XY.Marker1X

b = XY.Marker1Y

c = XY.Marker2X

d = XY.Marker2Y

e = XY.MarkerDX

f = XY.MarkerDY

可以把显示画面Name指配给一个全局变量。在Formula对象中，在程序内添加一个赋值表达式，使用Declare Variable对象声明全局变量。例如，假设已经声明globalXY变量为全局变量，并把其Type设为Object，那么在存在显示画面的上下文中，在程序中添加下面的表达式：

Set globalXY = XY

可以从使用表达式的程序的另一个上下文中读取显示画面的标尺值，如：

a = globalXY.Marker1X

在开发程序时，您可能想包括一种方式暂停程序，以便在程序读取值之前手动重新定位标尺。暂停程序的方式之一是在显示画面的序列输出和Formula对象的序列输入之间添加一个Confirm (OK)按钮。您也可能想以程序化方式定位标尺。

位置

Display [image] XY Trace

另请参阅

Complex Plane, Magnitude Spectrum, Polar Plot, Strip Chart, Waveform (Time), X vs Y Plot, 默认首选项 和 对象菜单

显示XY值, 在显示画面中设置标尺, 获得和设置标尺属性


abs(x)

返回x的绝对值的对象。

用途

使用abs(x)获得容器中的数字的绝对值。x是任何形状，返回的形状相同。对Complex, PComplex和Spectrum类型，绝对值是复数的幅度；因此会返回相同形状的Real64。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | 相同形状的Real64
PComplex | 相同形状的Real64
Spectrum | 相同形状的Real64

范例

abs(-34) 返回34。

备注

结果中保留映射关系。最大的负Int32将引起错误。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: abs

另请参阅

Complex Parts, mag(x), Real Parts和signof(x)。


acos(x)

返回x的反余弦的对象。

用途

使用acos(x)生成x数据的反余弦，结果范围为0 - PI。x可以是任意形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

acos(1) 返回0，Trig Mode设为Degrees。

acos((1.54308, @0)) 返回(0.9999, @1.87079)， Trig Mode设为Radians。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: acos

另请参阅

acosh(x), cos(x), sin(x), tan(x), Trig和默认首选项。


acosh(x)

返回x的双曲线反余弦的对象。

用途

使用acosh(x)生成x数据的双曲线反余弦。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

acosh(1)返回0。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: acosh

另请参阅

acos(x), cosh(x), Trig, sinh(x)和tanh(x)。


acot(x)

返回x的反余切的对象。

用途

使用acot(x)生成x数据的反余切，返回atan(1/x)。acot(0) 将返回PI/2。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

返回值将采用当前的Trig Mode单位。

范例

acot(1) 返回45，其中Trig Mode设为Degrees。

acot((1.31303, @PI/2)) 返回(1.00, @-1.57079)，其中Trig Mode设为Radians。

备注

结果中保留映射关系。把Trig Mode设成Radians之外的其它值可能会导致在第12个有效位之后出现精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: acot

另请参阅

acoth(x), atan2(y,x), cos(x), sin(x), tan(x), Trig和首选默认项。


acoth(x)

返回x的双曲线反余切的对象。

用途

使用acoth(x)生成x数据的双曲线反余切。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

acoth(1.5) 返回0.8047。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: acoth

另请参阅

acot(x), cosh(x), coth(x), Trig, sinh(x)和tanh(x)。


a + b (add)

a + b (加法)

在两个运算对象上执行加法运算的对象。

用途

使用a + b把两个容器值相加。两个容器可以是任何类型和任何形状。如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行加法运算。

文本以级联方法执行加法运算。Enums在加法中转换成Text。注意两个字符串相加与concat(x, y)函数不同。在concat函数中，concat("hello","there")会得到长2的一维数组["hello", "there"]。

范例

数组加标量： [1, 2, 3] + 3得到[4, 5, 6]。

两个Complex标量：(2,4) + (1,3)得到(3,7)。

两个数组：[1, 2, 3] + [4, 5, 6]得到[5, 7, 9]。

两个Coord标量：coord(1,3) + coord(1,5)得到coord(1,8)。

两个Coord标量：coord(1,3) + coord(2,5)得到错误。

两个文本："hello" + "there"得到"hellothere"。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: +

另请参阅

concat(x,y), a / b (除法), a * b (乘法),和a - b (减法)。


Ai(x)

用来计算x的Airy分数阶贝塞尔函数的对象。

用途

使用Ai(x)找到x的分数阶贝塞尔函数Airy。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

对Coord输入类型，运算在相关变量上完成。

范例

Ai(10)返回0.110475325528986。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: Ai

另请参阅

Bi(x), j0(x), j1(x), jn(x,n), y0(x), y1(x)和yn(x,n)。


a ~= b (almost equal to)

a ~= b (约等于)

在两个运算对象上执行约等于运算的对象。

用途

使用a ~= b确定一个容器的值在小数点后前七位中是否等于另一个容器的值。两个容器可以是任何类型和任何形状。它将精确比较Integer、Enum和Text类型。如果其中一个容器是一个数组(或一个记录)，另一个容器必须是相同大小和形状的一个标量或一个数组(或一个记录)。结果是值为0或1的标量Int32。如果第一个运算对象约等于第二个运算对象，那么结果值为1；否则值为0。

X ~= 0 (零)在本处没有意义，因为零有无穷大的精度位数，没有数量级。这要求与零进行的任何比较都要精确匹配。因此，把任何值X与0 (零)比较一直会返回0 (假)，除非X就等于0。

约等于不能执行与Device [image] Comparator相同的运算。在比较包含零的波形或数组时，应使用Comparator。Comparator可以从参考数据的幅度中导出"虚零"值。

如果两个运算对象的类型都是Coord，其所有相关变量的小数点后前七位必须相匹配，结果才为1。如果独立变量不匹配，那么会返回一个错误。Complex、PComplex和Spectrum容器的两个部分必须大体匹配，运算结果才会返回1。Enums转换成Text进行比较。

数组中两个容器的对应值都是约等于时，运算才会返回1。

范例

两个标量: 3.1234560 ~= 3.1234559返回1。

两个标量: 3.1234560 ~= 3.1234459返回0。

一个标量和一个数组: 3.1234560 ~= [3.1234559, 3.1234562, 3.1234563]返回1。

一个标量和一个数组: 3.1234560 ~= [3.1234459, 3.1234562, 3.1234569]返回0。

两个Complex标量: (2.12345,3.12345) ~= (2.12344,3.12345)返回0。

两个Complex标量: (2.1234567,3.12345) ~= (2.1234566,3.12345)返回1。

两个Coord标量: coord(1,3.123456) ~= coord(1,3.123446)返回0。

两个Coord标量: coord(1,3.123456) ~= coord(2,3.123456)返回Values for independent variables must match。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

Complex和Polar Complex数字的"约等于"测试略有差异。对两个实数(a和b)，"约等于"测试为：

a - b <= a * 10E-7

但是，对两个Complex值(a和b)，测试为：

re(a) - re(b) <= mag(a) * 10E-7

其中：

re(a)是a的实数部分。

re(b)是b的实数部分。

mag(a)是a的矢量幅度。

这一测试同时用于Complex和Polar Complex数字，避免与“约等于”的矩形和极坐标处理有关的任何模棱两可情况。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: ~=

另请参阅

a AND b, a == b (等于), a > b (大于), a >= b (大于等于), a < b (小于), a <= b (小于等于), NOT a, a != b (不等于), a OR b, 比较和a XOR b。

Comparator, Conditional和If/Then/Else。


a AND b

在两个运算对象上执行AND逻辑运算的对象。

用途

使用a AND b，确定两个容器的值是否在逻辑上都是真(非零)。两个容器可以是任何类型和任何形状。如果其中一个容器是一个数组，另一个容器必须是一个标量或相同大小和形状的数组。结果是形状与运算对象相同的Int32，值为0或1。如果两个运算对象都不是零，那么AND的运算值为1；否则运算值为0。

如果两个运算对象的类型都是Coord，那么其独立变量必须完全匹配，否则会返回错误。AND运算中只考虑相关(最后)变量。

对Complex、PComplex和Spectrum容器，如果任意部分都不是零，那么运算对象的值为真。如果非零，Text的运算值为真。Enums在运算中会转换成Text。

如果两个操作数都为Boolean，结果为与操作数具有相同数据形状的Boolean。

范例

两个Boolean标量：True AND False 返回False。

一个标量和一个数组: 3 AND [3, 3, 3]返回[1, 1, 1]。

一个标量和一个数组: 3 AND [-3, 0, 3]返回[1, 0, 1]。

两个数组: [1, 2, 3] AND [0, 1, (-1)]返回[0, 1, 1]。

两个数组: (1,@90) AND (1,@85)返回1。

两个Complex标量: (2,3) AND (0,1)返回1。

两个Complex标量: (0,1) AND (1,0)返回1。

两个Complex标量: (0,0) AND (0,0)返回0。

两个Coord标量: coord(1,3) AND coord(1,5)返回1。

两个Coord标量: coord(1,3) AND coord(2,3)返回错误。

一个Text标量和一个标量数字: "too" AND 2返回1。

一个Text标量和一个标量数字: "" AND 0返回0，因为一个字符串为空，另一个不是("0")。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同。返回值的映射关系与运算对象相同，否则会返回错误。

注意If/Then/Else对象要求里面的表达式的解为标量或数组，要么全为0，要么全为1。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Logical
Member: AND

另请参阅

NOT a, a OR b, 比较和a XOR b。

Conditional和If/Then/Else。


Arithmetic

Function & Object Browser对话框中的Category of Operators。

用途

使用Arithmetic运算符，存取下述对象，在两个运算对象上执行运算函数：

a + b

a - b

a * b

a / b

a ^ b

a MOD b

a DIV b

备注

在采用两种不同类型的二元运算中，将把两种类型中较低的类型转换成较高的类型。参阅帮助主题"使用二元运算符"中的类型转换信息和类型层级。

在下面的二元运算范例中，添加一个数组和一个标量，在数组的每个要素上执行运算。得到的结果是一个大小和形状与数组运算对象相同的数组。例如，一个标量加一个由4个要素组成的线性数组，5 + [1, 2, 3, 6]，得到由4个要素组成的线性数组[6, 7, 8, 11]。这同样适用于指数运算，因此，2 ^ [3, 4]得到[8, 16]。

在采用两个数组的二元运算中，要求运算对象相一致，即大小和形状相同。得到的结果是一个大小和形状与运算对象相同的数组。运算逐个要素完成。例如，由三个要素组成的两个线性数组相加，得到一个长三个要素的线性数组。[1, 2, 3] + [4, 5, 6]，得到[5, 7, 9]。如果两个数组不一致，结果会发生错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic

另请参阅

a + b (加), a / b (除), a div b (截断除法), a ^ b (指数), a mod b (模数), a * b (乘), 和 a - b (减)。


Array

Function & Object Browser对话框上Built-in Functions的一个Category:。

用途

使用Array存取下述对象，在数组上执行各种函数：

init(x,val)

totSize(x)

rotate(x,numElem)

concat(x,y)

sum(x)

product(x)

sort(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array

另请参阅

concat(x,y), init(x,val),
 product(x), rotate(x, numElem),
sort(x, 方向, 字段), sum(x)和totSize(x)。


asBoolean(x)

把x值转换成Boolean 值的对象。x可以是任何形状。

用途

使用asBoolean(x)把x数据转换成数据类型asBoolean。 x可以是任何形状，返回的形状相同。如果x非零，asBoolean(x) 返回True，否则返回False。

允许的输入类型 返回类型

Boolean | Boolean
UInt8 | Boolean
Int16 | Boolean
Int32 | Boolean
Int64 | Boolean
Real32 | Boolean
Real64 | Boolean
Text* | Boolean

如果x的类型是Text，它只能为"True"或"False".

范例

asBoolean(4.5) 返回 Boolean值True。

asBoolean(0) 返回 Boolean值False。

asBoolean("True") 返回 Boolean值True。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asInt32

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asInt64(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)


asComplex(x)

把x值转换成Complex值的对象。

用途

使用asComplex(x)把x数据转换成数据类型Complex。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Complex
Int16 | Complex
Int32 | Complex
Real32 | Complex
Real64 | Complex
PComplex | Complex
Text | Complex

如果x的类型是Text，它必须包含转换成Complex的值。

范例

asComplex(4.5) 返回Complex值(4.5, 0)。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asComplex

另请参阅

asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asCoord(x)

把x值转换成Coord值的对象。

用途

使用asCoord(x)把x数据转换成数据类型Coord。x的形状必须是1D数组，返回的形状与x相同。如果数组被映射，Coord数组将使用映射生成x值。如果数组没有被映射，那么将从0开始创建x值，然后递增1。

允许的输入类型 返回类型

UInt8 | Coord
Int16 | Coord
Int32 | Coord
Real32 | Coord
Real64 | Coord

范例

asCoord([4, 5]) 返回Coord数组[(0,4), (1,5)]。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asCoord

另请参阅

asComplex(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asInt16(x)

把x值转换成Int16值的对象。您可能还想考虑使用round(x)获得容器的舍入整数值。x可以是任何形状。round(x)函数把最近的整数(类型相同)返回x。分界线是是0.5，超过0.5的进一。

用途

使用asInt16(x)把x数据转换成数据类型Int16。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Int16
Int16 | Int16
Int32 | Int16
Real32 | Int16
Real64 | Int16
Text | Int16

如果x的类型是Text，它必须包含将转换成Int16的值。

范例

asInt16(4.5) 返回Int16值5。

asInt16(4.25)返回Int16值4。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Type Conversion
Member: asInt16

另请参阅

asComplex(x), asCoord(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asInt32(x)

把x值转换成Int32值的对象。您可能还想考虑使用round(x)获得容器的舍入整数值。x可以是任何形状。round(x)函数把最近的整数(类型相同)返回x。分界线是是0.5，超过0.5的进一。

用途

使用asInt32(x)把x数据转换成数据类型Int32。 x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Text | Int32

如果x的类型是Text，它必须包含将转换成Int32的值。

范例

asInt32(4.5)返回Int32值5。

asInt32(4.25)返回Int32值4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asInt32

另请参阅

asComplex(x), asCoord(x), asInt16(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asInt64(x)

把x值转换成Int64值的对象。您可能还想考虑使用round(x)获得容器的最接近的舍入整数值。x可以是任何形状。round(x)函数把最近的整数(类型相同)返回给x。分界线是是0.5，超过0.5的进一。

使用

使用asInt64(x)把x数据转换成数据类型Int64。 x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Int64
Int16 | Int64
Int32 | Int64
Int64 | Int64
Real32 | Int64
Real64 | Int64
Text | Int64

如果x的类型是Text，它必须包含将转换成Int64值。

范例

asInt64(4.5)返回Int64值5。

asInt64(4.25)返回Int64值4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asInt32

另请参阅

asBoolean(x), asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x).


asPComplex(x)

把x值转换成PComplex值的对象。

用途

使用asPComplex(x)把x数据转换成数据类型PComplex。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | PComplex
Int16 | PComplex
Int32 | PComplex
Real32 | PComplex
Real64 | PComplex
Complex | PComplex
Text | PComplex

如果x的类型是 Text，它必须包含将转换成PComplex的值。

范例

asPComplex(4.5)返回PComplex值(4,5, @0)。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asPComplex

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asReal32(x)

把x值转换成Real32值的对象。

用途

使用asReal32(x)把x数据转换成数据类型Real32。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real32
Int16 | Real32
Int32 | Real32
Real32 | Real32
Real64 | Real32
Text | Real32

如果x的类型是 Text，它必须包含将转换成Real32的值。

范例

asReal32("3.1415") 返回Real32值3.1415

asReal32(6) = 6.0

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asReal32

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asReal64(x)

把x值转换成Real64值的对象。

用途

使用asReal64(x)把x数据转换成数据类型Real64。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Text | Text

如果x的类型是 Text，它必须包含将转换成Real64的值。

范例

asReal64("3.1415")返回Real64值3.1415

asReal64(7) = 7.0

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asReal64

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asText(x)

把x值转换成Text值的对象。

用途

使用asText(x)把x数据转换成数据类型Text。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Text
Int16 | Text
Int32 | Text
Real32 | Text
Real64 | Text
Coord | Text
Waveform | Text
Complex | Text
PComplex | Text
Spectrum | Text
Text | Text

范例

asText(3.4)返回Text值"3.4"。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asText

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x).


asUInt8(x)

把x值转换成Unsigned Int8 (字节)值的对象。您可能还想考虑使用round(x)获得容器的舍入整数值。x可以是任何形状。round(x)函数把最近的整数(类型相同)返回x。分界线是是0.5，超过0.5的进一。

用途

使用asUInt8(x)把x数据转换成数据类型UInt8。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | UInt8
Int32 | UInt8
Real32 | UInt8
Real64 | UInt8
Text | UInt8

如果x的类型是 Text，它必须包含将转换成UInt8的值。

范例

asUInt8(4.5)返回UInt8值5。

asUInt8(4.25)返回UInt8值4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asUInt8

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asVariant(x)

把"x"转换成ActiveX Automation类型Variant的对象。保证从"x"创建的ActiveX Automation变量类型为VT_VARIANT。

用途

在把一个VEE数据容器传送到要求VT_VARIANT类型参数的ActiveX控件或服务器时，使用这个函数。

返回VEE Variant数据类型。如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_VARIANT特点丢失。参见下面的范例。

允许的输入类型 返回类型

UInt8 | Variant
Int16 | Variant
Int32 | Variant
Real32 | Variant
Real64 | Variant
Text | Variant

范例

有效：

A = asVariant(A);
Obj.method(ByRef A);

Array = asVariant(Array);

无效：

Obj.method(ByRef asVariant(A));

Array[0] = asVariant(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariant

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asVariantBool(x)

保证从"x"创建的ActiveX Automation变量类型为VT_BOOL (Boolean)。

用途

在把一个 VEE数据容器传送到要求VT_BOOL类型参数的ActiveX控件或服务器时，使用这个函数。

返回VEE Int16数据类型，在希望是Variant Bool的数据容器上有一个"提示"标记。如果这个容器传送到ActiveX Automation Server或Control，它会转换成VT_BOOL，而不是VT_I2。只有在ActiveX Automation方法要求VT_BOOL或ByRef VT_BOOL类型的参数时，才需要这个"提示"标记。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_BOOL特点丢失。参见下面的范例。

范例

有效：

A = asVariantBool(A);
Obj.method(ByRef A);

Array = asVariantBool(Array);

无效：

Obj.method(ByRef asVariantBool(A));

Array[0] = asVariantBool(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantBool

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asVariantCurrency(x)

保证从 "x"创建的 ActiveX Automation变量类型为VT_CY (Currency)。

用途

在把一个 VEE数据容器传送到要求VT_CY类型参数的ActiveX控件或服务器时，使用这个函数。

返回VEE Real64 数据类型，在希望是Variant Currency的数据容器上有一个"提示"标记。如果这个容器传送到ActiveX Automation Server或Control，它会转换成VT_CY。只有在ActiveX Automation方法要求VT_CY或ByRef VT_CY类型的参数时，才需要这个"提示"标记。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_CY特点丢失。参见下面的范例。

范例

有效：

A = asVariantCurrency(A);
Obj.method(ByRef A);

Array = asVariantCurrency(Array);

无效：

Obj.method(ByRef asVariantCurrency(A));

Array[0] = asVariantCurrency(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantCurrency

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x).


asVariantDate(x)

保证从 "x"创建的 ActiveX Automation变量类型为VT_DATE.

用途

在把一个 VEE数据容器传送到要求VT_DATE类型参数的ActiveX控件或服务器时，使用这个函数。

返回VEE Real64 数据类型，在希望是Variant Date的数据容器上有一个"提示"标记。如果这个容器传送到ActiveX Automation Server或Control，它会转换成VT_DATE。只有在ActiveX Automation方法要求VT_DATE或ByRef VT_DATE类型的参数时，才需要这个"提示"标记。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_DATE特点丢失。参见下面的范例。

范例

有效：

A = asVariantDate(A);
Obj.method(ByRef A);

Array = asVariantDate(Array);

无效：

Obj.method(ByRef asVariantDate(A));

Array[0] = asVariantDate(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantDate

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantEmpty(x), asVariantError(x), asVariantNull(x)。


asVariantEmpty(x)

保证从"x"创建的ActiveX Automation变量类型为VT_EMPTY。

用途

在把一个 VEE数据容器传送到要求VT_EMPTY类型参数的ActiveX控件或服务器时，使用这个函数。

只能用于标量上。在与ByRef参数使用时无效。返回相同的数据类型，在希望是Variant Empty的数据容器上有一个"提示"标记。如果这个容器传送到ActiveX Automation Server或Control，它会转换成 VT_EMPTY，而不是容器的实际数据类型。只有在ActiveX Automation方法要求VT_EMPTY类型的参数时，才需要这个"提示"标记。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_EMPTY 特点丢失。参见下面的范例。

范例

A = asVariantEmpty(A);
Obj.method(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantEmpty

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantError(x), asVariantNull(x)。


asVariantError(x)

保证从"x"创建的ActiveX Automation变量类型为VT_ERROR。

用途

在把一个VEE数据容器传送到要求VT_ERROR类型参数的ActiveX控件或服务器时，使用这个函数。

返回VEE Int32数据类型，在希望是Variant Error的数据容器上有一个"提示"标记。如果这个容器传送到ActiveX Automation Server或Control，它会转换成VT_ERROR。只有在ActiveX Automation方法要求VT_ERROR或ByRef VT_ERROR类型的参数时，才需要这个"提示"标记。返回值表示错误编码(scode)。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_ERROR 特点丢失。参见下面的范例。

范例

有效：

A = asVariantError(A);
Obj.method(ByRef A);

Array = asVariantError(Array);

无效：

Obj.method(ByRef asVariantError(A));

Array[0] = asVariantError(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantError

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantNull(x)。


asVariantNull(x)

保证从"x"创建的ActiveX Automation变量类型为VT_NULL。

用途

在把一个参数传送到ActiveX控件或服务器、且希望把这个参数解释为VT_NULL时，使用这个函数。

只能用于标量上。在与ByRef参数使用时无效。返回相同的数据类型，在希望是Variant Null的数据容器上有一个"提示"标记。如果这个容器传送到 ActiveX Automation Server或Control，它会转换成 VT_NULL，而不是容器的实际数据类型。只有在ActiveX Automation方法要求VT_NULL类型的参数时，才需要这个"提示"标记。

如果这个函数的结果指配给一个记录字段或一个数组要素，那么其VT_NULL特点丢失。

范例

A = asVariantNull(A);
Obj.method(A);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: asVariantNull

另请参阅

asComplex(x), asCoord(x), asInt16(x), asInt32(x), asPComplex(x), asReal32(x), asReal64(x), asText(x), asUInt8(x), asVariant(x), asVariantBool(x), asVariantCurrency(x), asVariantDate(x), asVariantEmpty(x), asVariantError(x)。


asin(x)

返回x的反正弦的对象。

用途

使用asin(x)生成x数据的反正弦，Real值的结果范围为-PI/2到+PI/2。返回值采用当前Trig Mode单位。x可以是任意形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

asin(1) 返回90，其中Trig Mode设为Degrees。

asin((1.1752012, @90)) 返回(1, @90)，其中Trig Mode设为Degrees。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: asin

另请参阅

asinh(x), cos(x), sin(x), tan(x), Trig,和默认首选项。


asinh(x)

返回x的双曲线反正弦的对象。

用途

使用asinh(x)生成x数据的双曲线反正弦。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

asinh(0) 返回0。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: asinh

另请参阅

asin(x), cosh(x), Trig, sinh(x)和tan(x)。


Assignment

一个公式类对象，允许为Local或Global变量赋值，或为部分数组或记录赋值。

用途

使用Assignment对象为Local或Global变量赋值，或改变部分数组或记录的值。Assignment对象上的Result输出端只包含Local或Global变量新赋的值，或者包含变化的部分数组或记录。例如，在使用Assignment运算符时，如a[2]=4，Result端将包含a[2] (其值为4)。它不会包含所有a。为得到所有a，添加一个名为a的输出端。

备注

在已经选择Category: Assignment时，Function & Object Browser对话框的Member列会显示各种Assignment范例。点击其中一个范例，会出现预先加载该Assignment公式的VEE对象。范例对象包括：

a[2,*,5:6,4]=b - 修改部分复杂的数组的一个Assignment对象。

a[2]=b - 修改部分数组的一个Assignment对象。

globalA=2*b+3 - 修改global/variable的一个Assignment对象 (以进行Set Variable操作)。

rec.field=b - 修改部分记录的一个Assignment对象。

rec.field[2]=b - 修改部分记录字段的一个Assignment对象。

rec[2].field=b - 修改部分记录数组的一个Assignment对象。

tmp=a, a=b, b=tmp - 交换使用局部变量的值的一个Assignment对象。

tmp=a[2], a[2]=a[3], a[3]=tmp - 交换数组中使用局部变量的值的一个Assignment对象。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Assignment

另请参阅

Function & Object Browser

改变数组中的值

使用赋值操作


atan(x)

返回x的反正切的对象。

用途

使用atan(x)生成x数据的反正切，其结果对Real值的范围是-PI/2到+PI/2。返回值采用当前的Trig Mode单位。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

atan(1) 返回45，其中Trig Mode设为Degrees。

atan((1.5574, @0)) 返回(0.999, @0)，其中Trig Mode设为Radians。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: atan

另请参阅

atanh(x), atan2(y,x), cos(x), sin(x), tan(x), Trig和默认首选项。


atan2(y,x)

返回y除以x的反正切的对象。

用途

使用atan2(y,x)生成y除以x的反正切，它采用正确的符号，对Real值的范围是-PI到+PI。如果其中一个容器是一个数组，另一个容器必须是一个标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。假设x和y采用当前的Trig Mode单位。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

atan2(1, -1) 返回135，其中Trig Mode设为Degrees。

atan2((1, 1), (5, 5)) 返回(0.19739, 0)，其中Trig Mode设为Radians。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: atan2

另请参阅

atan(x), cos(x), sin(x), tan(x), Trig和默认首选项。


atanh(x)

返回x的双曲线反正切的对象。

用途

使用atanh(x)生成x数据的双曲线反正切。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

atanh(0.5) 返回0.5493。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: atanh

另请参阅

atan(x), cosh(x), sinh(x)和tanh(x)。


bartlet(x)

用来把Bartlet窗口应用到时序值的对象。

用途

使用bartlet(x)过滤x中的值，其方式与使用Bartlet函数的频谱变换对x求卷积的方式相同。由于输入序列尾部及在对周期信号取样时潜在的不连续点，这会抑制部分噪声。

输入x必须是Array 1D。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum

如果x是Spectrum，先使用ifft(x)把它转换成Waveform，然后应用窗口。然后再使用fft(x)，把窗口结果转换回到Spectrum类型。

范例

bartlet([1, 1, 1, 1, 1, 1, 1, 1]) 返回
[0.125, 0.375, 0.625, 0.875, 0.875, 0.625, 0.375, 0.125]。

备注

时域中的Bartlet函数表示为2*(n+0.5)/N，其中n是数组中的位置(索引)，N是数组的大小。结果是与x类型相同的数组，其映射与x相同(如有)。

如需了解旁瓣电平和相干增益，请参阅： Ziemer, Tranter和Fannin, Signals and Systems, Macmillan Publishing, New York, NY, 1983. ISBN #0-02-431650-4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: bartlet

另请参阅

blackman(x), convolve(a,b), fft(x), hamming(x), hanning(x), ifft(x)和rect(x)。


baseName(str)

返回文件路径字符串的文件名部分的对象。

用途

使用baseName()隔离目录/文件路径末尾的文件名。

例如，如果pathStr是：

c:\Program Files\Agilent\VEE Pro 7.5\examples\apps\chaos.vee

那么baseName(pathStr)会返回chaos.vee。

前斜杠( / )和反斜杠( \ )都作为目录(文件夹)名称后面的分界符处理。如果整个pathStr只包含一个名称，那么该名称视为一个文件名。

备注

baseName()对象是使用一个输入初始化、并包含baseName()等式的Formula对象。还可以在任何其它Formula对象或表达式中输入baseName()。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: System Information
Member: baseName

另请参阅

dirName(), Formula


Bessel

Function & Object Browser对话框上Built-in Functions的一个Category(一类内置函数)。

用途

使用Bessel计算输入数据的贝塞尔函数。

i0(x)

i1(x)

j0(x)

j1(x)

jn(x,n)

k0(x)

k1(x)

y0(x)

y1(x)

yn(x,n)

Ai(x)

Bi(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel

另请参阅

i0(x), i1(x), j0(x), j1(x), jn(x,n), k0(x), k1(x), y0(x), y1(x), yn(x,n), Ai(x)和Bi(x)。


beta(x,y)

用来计算输入(x,y)的beta函数的对象。

用途

使用beta(x,y)在x上计算beta函数。beta函数定义为：

( gamma(x) * gamma(y) ) / gamma(x+y)

x值和y值必须是正数。

x输入可以是任何形状和大小。第二个y参数必须是同一类型，或能够转换成与x输入值相同的类型。如果两个输入都是数组，那么它们的形状和大小必须完全相同。返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

beta(3, 1) 返回0.333333333333333。

beta(8, 7) 返回4.16250416250416E-05。

beta(-1, 3) 返回错误。

备注

如果两个输入都有映射，那么映射必须相同。如果映射任一输入，返回值的映射关系与输入相同。如果两个输入都没有映射，那么输出没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: beta

另请参阅

comb(n,r), factorial(n), gamma(x),和perm(n,r)。


Bi(x)

用来计算第二类x的B-Airy分数阶贝塞尔函数的对象。

用途

使用Bi(x)找到第二类x的分数阶贝塞尔函数B-Airy。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

对Coord输入类型，在相关变量上完成操作。

范例

Bi(1)返回1.20742359495287。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: Bi

另请参阅

Ai(x), j0(x), j1(x), jn(x,n), y0(x), y1(x)和yn(x,n)。


binomial(a,b)

计算一次获得b的a个事项的组合数量的对象。

用途

使用binomial(a,b)计算一次获得b的a个事项的组合数量，使用的公式如下：

binomial(a, b) = a!/((a-b)! * b!)

!符号表示阶乘。

a可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

第二个参数b必须与a输入值类型相同，或能够转换成与a输入值相同的类型。如果两个输入都是数组，那么它们的形状和大小必须完全相同。

binomial(a,b)运算只定义给整数运算对象，因此在计算前，要把唯一类型的输入数字转换成Int32类型。

范例

binomial(10,3) 将返回120，公式如下：

10!/((10-3)!*3!) = 10!/(7!*3!) =(10*9*8)/(3*2*1) = 120

binomial(10.4,3.9) 将返回210，公式如下：

10!/((10-4)!*4!) = 10!/(6!*4!) = (10*9*8*7)/(4*3*2*1) = 210

把实数转换成Int32的规则会把10.4舍入为10，把3.9舍入为4。

备注

a和b必须都是正数，且a必须大于b。

这一函数与 comb(n,r)完全相同。

如果两个输入都有映射，那么映射必须相同。如果任一输入有映射，那么返回值的映射与输入相同。如果两个输入都没有映射，那么输出没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: binomial

另请参阅

beta(x,y), comb(n,r), factorial(n), gamma(x)和perm(n,r)。


bit(x,n)

返回某个比特位置中的二进制值的对象。

用途

使用bit(x,n)返回x的第n个位置的比特值，值为0或1。如果x的类型是Real32, Real64, Coord或Waveform，它在运算前转换成Int32。n必须是一个Int32类型的容器，或可以转换成Int32类型的容器，取值在0和31之间(含)。n必须是标量，或与x形状相匹配。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Inr32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bit(9,0) 返回1，因为9的二进制值是1001，且设置了0位。

备注

返回值的映射关系与x相同。忽略n上的映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bit

另请参阅

bits(str), Bitwise, clearBit(x,n)和setBit(x,n)。


bitAnd(x,y)

返回x和y的Bitwise AND的对象。

用途

使用bitAnd(x,y)在两个容器上执行二进制AND操作。x和y可以是任何形状。但如果这两个容器都是数组，那么其形状和大小必须相匹配。如果x或y的类型是Real32, Real64, Coord或Waveform，它们在运算前先转换成Int32。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bitAnd(5, [3, 12]) 返回[1, 4]。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器会保留输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bitAnd

另请参阅

a AND b, bit(x,n), bitCmpl(x),
 bitOr(x,y), Bitwise,
 bitXor(x,y), NOT a, a或b和a XOR b。


bitCmpl(x)

返回Bitwise 1的x的补集的对象。

用途

使用bitCmpl(x)在容器上执行二进制1的补集。如果x的类型是Real32, Real64, Coord或Waveform，在运算前它会转换成Int32。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bitCmpl(7) 返回-8。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bitCmpl

另请参阅

a AND b, bit(x,n), bitAnd(x,y), bitOr(x,y), Bitwise, bitXor(x,y), NOT a, a OR b,和a XOR b。


bitOr(x,y)

返回x和y的Bitwise OR的对象。

用途

使用bitOr(x,y)在两个容器上执行二进制OR运算。x和y可以是任何形状。但如果这两个容器都是数组，那么其形状和大小必须匹配。如果x或y的类型是Real32, Real64, Coord或Waveform，在运算前它们必须转换成Int32。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bitOr(5, [3, 12]) 返回[7, 13]。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器保留输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bitOr

另请参阅

a AND b, bit(x,n), bitAnd(x,y), bitCmpl(x), Bitwise, bitXor(x,y), NOT a, a OR b和a XOR b。


bits(str)

返回由0和1组成的字符串的二进制值的对象。

用途

使用bits(str)返回Int32，取值为Text str中的位值，作为基数2转换成Int32。str必须是任何形状的Text容器。str可能只包含前导白色空格，然后是0和1，构成一个二进制数字。

范例

bits("011")返回3。

备注

返回值的映射与输入容器相同。最没用的位在右面，最有用的位在左面。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bits

另请参阅

bit(x,n), Bitwise, clearBit(x,n),和setBit(x,n)。


bitShift(x,y)

为x返回把比特左移或右移y个位置的对象。

用途

使用bitShift(x,y)把容器x的比特移动y个位置。x可以是任何形状。如果x的类型是Real32, Real64, Coord或Waveform，在运算前它先转换成Int32。y必须是Int32的容器或可以转换成Int32的容器。如果y是负数，那么比特右移；否则比特左移。y必须是标量或与x的形状相匹配。如果y大于31或小于-31，那么返回值为零。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bitShift([1, 7, 7], [3, 2, (-2)])返回[8, 28, 1]。

bitShift(8,2)返回32。

bitShift(8,-2)返回2。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bitShift

另请参阅

bit(x,n), bitAnd(x,y),
 bitOr(x,y), Bitwise,
 bitXor(x,y), clearBit(x,n),
 rotate(x, numElem)和setBit(x,n)。


Bitwise

Function & Object Browser对话框中Built-in Functions的一个Category (一类内置函数)。

用途

使用Bitwise存取下述对象，这些对象在nt16或Int32中设置、清除、存取或位移位，或在Int16s或Int32上执行二进制AND, OR和XOR运算。

bit(x,n)

bits(str)

setBit(x,n)

clearBit(x,n)

bitAnd(x,y)

bitOr(x,y)

bitXor(x,y)

bitCmpl(x)

bitShift(x,y)

备注

Bitwise菜单上的对象只对Uint8, Int16或Int32类型有意义。但为了简便易用，大多数对象接受大多数类型，在执行函数前会把自变量转换成Int32。这意味着在对象内部会截短Real32s, Real64s, Coords和Waveforms的值。

位从零开始编号。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise

另请参阅

bit(x,n), bits(str), bitAnd(x,y), bitCmpl(x),
 bitOr(x,y), bitShift(x,y),
 bitXor(x,y), clearBit(x,n),
 setBit(x,n), a AND b, NOT a, a OR b, Comparison,和a XOR b。


bitXor(x,y)

返回x和y的Bitwise XOR的对象。

用途

使用bitXor(x,y)在两个容器上执行二进制XOR (异或)运算。x和y可以是任何形状。但如果这两个容器都是数组，那么其形状和大小必须匹配。如果x或y的类型是Real32, Real64, Coord或Waveform，在bitXor()前它们必须转换成Int32。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

bitXor(5, [3, 12]) 返回 [6, 9]。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器保留输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: bitXor

另请参阅

a AND b, bit(x,n), bitAnd(x,y), bitCmpl(x), bitOr(x,y), Bitwise, NOT a, a OR b和a XOR b。


blackman(x)

用来对时序值应用Blackman窗口的对象。

用途

使用blackman(x)过滤x中的值，其方式与使用Blackman函数的频谱变换对x求卷积的方式相同。由于输入序列尾部及在对周期信号取样时潜在的不连续点，这会抑制部分噪声。

输入x必须是Array 1D。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum

如果x是Spectrum，先使用ifft(x)把它转换成Waveform，然后应用窗口。然后再使用fft(x)，把窗口结果转换回到Spectrum类型。

范例

blackman([1, 1, 1, 1, 1, 1, 1, 1]) 返回
[0.014, 0.172, 0.555, 0.938, 0.938, 0.555, 0.172, 0.014].

备注

Blackman函数在时域中表示为：

0.42 - 0.5*cos(2*PI*(n+0.5)/N) + 0.08*cos(4*PI*(n+0.5)/N)

其中n是数组中的位置(索引)，N是数组的大小。结果是与x类型相同的数组，其映射与x相同(如有)。

如需了解旁瓣电平和相干增益，请参阅： Ziemer, Tranter和Fannin, Signals and Systems, Macmillan Publishing, New York, NY, 1983. ISBN #0-02-431650-4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: blackman

另请参阅

bartlet(x), convolve(a,b), fft(x), hamming(x), hanning(x), ifft(x)和rect(x)。


Calculus

Function & Object Browser对话框上Built-in Functions的一个Category (一类内置函数)。

用途

使用Calculus对由简单数字值组成的一维数组(整数, 实数, 波形, ...)或由二维(两个字段)坐标组成的列表求积分或导数。

integral(x)

deriv(x,1)

deriv(x,2)

deriv(x,order)

defIntegral(x,a,b)

derivAt(x,1,pt)

derivAt(x,2,pt)

derivAt(x,order,pt)

备注

积分和导数函数适用于由简单数字值组成的一维数组(整数, 实数, 波形, ...)或由代表等间隔排序数据的二维(两个字段)坐标组成的列表。对没有映射的数组，假设数据间隔相等并排序，假设各点之间的间隔dx取值为1。对映射的数组，使用等于(Xmax-Xmin)/N的间隔值dx执行运算，因此其相应地自动定标。对坐标列表，先检查独立的(第一个字段)值，确保其已经排序，且间隔相等，然后使用前面确定的间隔作为dx值，在相关的(第二个字段)值上执行运算。

如果使用没有映射的数组，但通过其它方式知道各点之间的间隔是某个值dx，那么仍可以获得正确的运算值。对积分，把结果乘以已知的dx值。对导数，把结果除以已知的dx值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Calculus

另请参阅

defIntegral (x,a,b), deriv(x, order), derivAt(x, order,pt)和integral(x)。


ceil(x)

把x的值舍入到容器最近的整数和对象。

用途

ceil(x)函数返回大于等于x的最小整数(类型相同)，即x值舍入到下一个更大的整数，即趋向正无穷大的最近的整数。

x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

ceil([23.0, 23.1, 23.9, 23.5, (-23.5)])返回[23, 24, 24, 24, -23]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: ceil

另请参阅

abs(x), Complex Parts, floor(x), fracPart(x), intPart(x), Real Parts和round(x)。


charToInt(a)

把输入字符串的第一个字符转换成十进制值的对象。

用途

使用charToInt(a)把ASCII输入串a的第一个字符转换成Int32类型的十进制值。支持的字符是可以转换成0-255范围内的值的字符。

范例

charToInt("A") 返回65。

charToInt("Arthur") 也 返回65。

charToInt("a") 返回97。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: charToInt

另请参阅

intToChar(a)和String。


clearBit(x,n)

返回x、其中第n位设为0的对象。

用途

使用clearBit(x,n)把容器x的某个二进制位设置为0。x可以是任何形状。如果x的类型是Real32, Real64, Coord或Waveform，它在运算前转换成Int32。n必须是一个Int32类型的容器，或可以转换成Int32类型的容器，取值在0和31之间(含)。n必须是标量，或与x形状相匹配。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

范例

clearBit(7,1)返回5，因为7的二进制是111，清除第一个位，得到101 (十进制5)。(位从0开始编号)

备注

返回值的映射关系与x参数相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: clearBit

另请参阅

bits(str), bit(x,n), Bitwise和setBit(x,n)。


clipLower (x,a)

用来把输入数据x剪切到某个最小值a的对象。

用途

使用clipLower(x,a)，把数据剪切到最小值a，即小于a的任何数据都将变成a。

x输入可以是任何大小和形状。剪切参数a的类型必须与x输入值相同，或能够转换成与x输入值相同的类型，其形状必须是Scalar或形状和大小与x相同。如果其中一个输入是Scalar，一个输入是非Scalar，那么Scalar输入作为与非Scalar输入相同形状和大小的数组处理。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Text | Text

范例

在数据上使用clipLower(x,.5)函数，其中x是数组[.1, .4, .6, .9]，返回[.5, .5, .6, .9]。

使用clipLower([.1, .4, .6, .9],[.2, .2, .7, .7])，返回[.2, .4, .7, .9]。

可以使用clipLower把Waveform值剪切到任意下限。使用Coord数组定义波形上的限制点。限制点是定义限制波形形状的线段的端点。可能只有部分这样的点。通过Build Arb Waveform对象发送Coord数组，创建点数与实际波形相同的下限波形。把这个新波形作为a输入发送到clipLower函数中。在clipLower(x,a)完成时，输入波形x的所有值将低于剪切到a输入允许最小值的下限。

备注

如果两个输入都有映射，那么映射必须相同。如果任一输入有映射，那么返回值的映射与该输入相同。如果两个输入都没有映射，那么输出没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering
Member: clipLower

另请参阅

clipUpper (x,a), Build Arb Waveform,和Comparator.


clipUpper (x,a)

用来把输入数据x剪切到某个最大值a的对象。

用途

使用clipUpper(x,a)，把数据剪切到最大值a，即大于a的任何数据都将变成a。

x输入可以是任何大小和形状。剪切参数a的类型必须与x输入值相同，或能够转换成与x输入值相同的类型，其形状必须是Scalar或形状和大小与x相同。如果其中一个输入是Scalar，一个输入是非Scalar，那么Scalar输入作为与非Scalar输入相同形状和大小的数组处理。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Text | Text

范例

在数据上使用clipUpper(x,.5)函数，其中x是数组[.1, .4, .6, .9]，返回[.1, .4, .5, .5]。

使用clipUpper([.1, .4, .6, .9],[.2, .2, .5, .5]) 返回[.1, .2, .5, .5]。

可以使用clipUpper把Waveform值剪切到任意上限。使用Coord数组定义波形上的限制点。限制点是定义限制波形形状的线段的端点。可能只有部分这样的点。通过Build Arb Waveform对象发送 Coord数组，创建点数与实际波形相同的上限波形。把这个新波形作为a输入发送到clipUpper 函数中。在clipUpper(x,a)完成时，输入波形x的所有值将高于剪切到a输入允许最大值的上限。

备注

如果两个输入都有映射，那么映射必须相同。如果任一输入有映射，那么返回值的映射与该输入相同。如果两个输入都没有映射，那么输出没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering
Member: clipUpper

另请参阅

clipLower (x,a), Build Arb Waveform和Comparator。


cofactor(x, row,col)

用来计算输入数组x在第r行和第c列的余因子的对象。

用途

使用cofactor(x,row,col)计算方阵x的余因子。矩阵的余因子定义为输入矩阵x的子矩阵的行列式，它通过删除第r行和第c列获得，倍数(-1)提高到(r+c)幂。

x输入的形状必须是方阵。要删除的行和列r和c的输入必须是Int32 Scalar，或能够转换成Int32类型。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex, Scalar形状
PComplex | PComplex, Scalar形状

方阵的行数与列数相同。

范例

cofactor(a,1,2)，其中a是数组[ [3, -1, 2], [4, 5, 6], [7, 1, 2] ]，得到34。

备注

忽略运算对象上的映射。

r和c输入的类型预计是Int32，或能够转换成该类型。矩阵的行和列编号为0到n-1。因此，在指定要使用哪一行和哪一列时要特别注意。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: cofactor

另请参阅

det(x)和minor(x,row, col).


comb(n,r)

用来计算一次获得r的n个事项的组合数量的对象。

用途

使用comb(n,r)，使用下述公式计算一次获得r的n个事项的组合数量：

comb(n, r) = n!/((n -r)! * r!)

!符号表示阶乘。

n输入可以是任何形状和大小。第二个r参数的类型必须与n输入值类型相同，或能够转换成与n输入值相同的类型。如果两个输入都是数组，那么其形状和大小必须完全相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

comb(n, r)运算只适用于整数运算对象，因此在进行计算前先把输入数字(唯一类型)转换成Int32类型。

范例

comb(10,3)将返回120，公式如下：

10!/((10-3)!*3!) = 10!/(7!*3!) = (10*9*8)/(3*2*1) = 120

comb(10.4,3.9)将返回210，公式如下：

10!/((10-4)!*4!) = 10!/(6!*4!) = (10*9*8*7)/(4*3*2*1) = 210

把实数转换成Int32的规则会把10.4强制转换成10，把3.9强制转换成4。

备注

n和r都必须是正数，n必须大于r。

如果两个输入都有映射关系，那么映射关系必须相同。如果任何一个输入有映射关系，那么返回值的映射关系必须与输入相同。如果两个输入都没有映射关系，那么输出没有映射。

这一函数与binomial(a,b)完全相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: comb

另请参阅

beta(x,y), binomial(a,b), factorial(n), gamma(x)和perm(n,r)。


逗号运算符

"," (逗号)可以作为二元运算符用于表达式中。在使用","分隔两个表达式时，对左手的表达式求解，但丢弃结果。返回右手的表达式的结果。

用途

在Formula对象中使用逗号运算符，语法如下：

表达式, 表达式

","保证先对左手的表达式求解，但会丢弃结果，然后返回右手的表达式的结果。

范例

UserFunc(A),A调用名为UserFunc的函数，丢弃结果，然后返回A的值。

位置

逗号运算符必须用于采取表达式的Formula对象或其它对象中。

另请参阅

三元运算符。


commandLine()

返回发起这个VEE会话使用的命令行参数的对象。

用途

返回值是一个1D Text数组。数组的索引0包含用来发起VEE会话的VEE程序名称。后续数组要素(如有)是命令行上跟在程序名称后面的参数。

在希望使用VEE命令行，把参数(选项)传送到VEE程序时，可以使用这一函数。针对VEE环境本身的选项在命令行上在前面有一个减号( - )。请参阅使用命令行选项启动Agilent VEE。VEE环境会忽略前面有两个减号的选项，用来使用commandLine()对象的VEE程序。例如：

vee.exe -maximize --radians My_Trig.vee

这个命令行使用最大化窗口启动VEE，加载程序My_Trig.vee，允许程序使用--radians选项。

备注

commandLine()对象是一个在没有输入的情况下初始化的Formula对象，其中包含commandLine()公式。还可以在任何其它Formula对象或表达式中输入commandLine()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: commandLine

另请参阅

installDir, programName, Formula


Comparison

Function & Object Browser对话框中Operators的一个Category。

用途

使用Comparison存取下述对象，在两个运算对象上执行比较运算：

a ~= b

a == b

a != b

a < b

a > b

a <= b

a >= b

备注

所有这些运算都返回一个取值为0或1的标量Int32，其分别对应于运算为真还是运算为假。

有可能两个运算对象不能比较，即两个运算对象之间的关系不是小于、大于或等于的关系，如映射关系不匹配的Coords和数组。例如，[1, 2, 6] != [2, 3, 4]为真，但两个运算对象之间的关系既不是小于，也不是大于，只是不相等。也就是说，[1, 2, 6] < [2, 3, 4]为假，[1, 2, 6] > [2, 3, 4]也为假，因为第一个数组中的每个要素与第二个数组中每个要素都不是<OR>的关系。

另外注意Comparison下的项目与菜单项Conditiona之间的区别。Comparisons是输出0或1的公式；Conditionals是If/Then/Else，有两个输出，其中一个输出激活。

注意返回值的类型是Int32，形状与运算对象相同。这与条件运算相同，如一直返回标量的==。

逻辑运算符只从字符串是否为空的角度定义给Text类型。也就是说，"zoo"AND"" (空字符串)在逻辑上为假，因为第二个字符串为空。记住，在比较Text类型与非字符串类型时，后者晋级为Text类型。这意味着"zoo" AND 0为真，因为实数0晋级为字符串"0"，另外由于两个字符串都不是空，因此AND表达式为真，返回结果1。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison

另请参阅

a ~= b (约等于), a AND b, a == b (等于), a > b (大于), a >= b (大于等于), a < b (小于), a <= b (小于等于), NOT a, a != b (不等于), a OR b和a XOR b。

Comparator, Conditional和If/Then/Else。


Complex Parts

Function & Object Browser对话框中Built-in Functions的一个Category 。

用途

使用Complex Parts存取下述对象，返回Complex和PComplex容器的不同部分：

j(x)

re(x)

im(x)

mag(x)

phase(x)

conj(x)

备注

Complex Parts菜单上的对象只适用于类型Complex和PComplex。但为了使用方便，大多数对象都接受和返回大多数类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts

另请参阅

conj(x), im(x), j(x), mag(x), phase(x), re(x)和Real Parts。

Build Complex, Build PComplex, Complex, UnBuild Complex和UnBuild PComplex.


concat(x,y)

用来连接容器的对象。

用途

使用concat(x,y)连接两个容器。输入参数可以是任何类型和任何形状。concat(x,y)会把大于一维的数组平坦化为Array 1D，然后再把得到的1D数组连接起来。对所有类型的x和y输入，将返回最高类型的1D容器。

范例

如果x是实数Scalar容器，包含的数字为3，y是Text数组容器，包含的内容为["This", "is", "a", "test"]，那么concat(x,y)将返回一个Text数组容器["3", "This", "is", "a", "test"]。在这种情况下，在concat运算前，数字3已经转换成较高的类型Text字符串"3"。

备注

如果x值有映射关系，y可以有映射关系并采用相同的点间隔，也可以没有映射关系。结果将从Xmin映射到Xmin+dx*N，其中Xmin是x映射的最小值，dx是x中两个连续点之间的距离，N是得到的数组大小。

注意在Text输入上concat(x,y)和sum(x)函数之间的差别。concat(x,y)在所有情况下都生成一个Array 1D。sum(x)函数只是把所有文本字符串连接起来，形成一个大的输出字符串。也就是说，在x是 Scalar Text值"a"，y是 Scalar Text输入"b"时，concat(x,y)得到Array 1D ["a","b"]。而sum(["a","b"])则会返回Scalar容器，其中包含文本值"ab"。

所有空输入自动转换成取值为0的Real64标量。因此，在x为空，y是Int32标量值5时，concat(x,y)得到长为2的Array 1D，类型为Real64，取值为[0, 5]。相比之下，有两个输入(空值和Int32标量值5)的Concatenator对象将输出长为1的Int32数组，取值为[5]。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: concat

另请参阅

sum(x)和Concatenator。


conj(x)

返回Complex数字x的复共轭的对象。

用途

使用conj(x)生成Complex数字x的复共轭。x可以是任何形状及Complex、PComplex或Spectrum类型。Complex数字的复共轭简单地颠倒虚数部分的符号。PComplex数字的复共轭简单地颠倒相位的符号。

范例

conj( (2, 3) )返回(2, -3)。

conj( (8, @45) )返回(8, @-45)，其中Trig Mode设置为Degrees。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts
Member: conj

另请参阅

im(x), j(x), mag(x), phase(x), re(x), Real Parts, Build Complex, Default Preferences和UnBuild Complex。


convolve(a,b)

用对两个数据数组求卷积的对象。

用途

使用convolve(a,b)计算两个1D数组a和b的离散非周期卷积。结果是类型相同及大小为(Na+Nb)-1的数组，其中Na是输入数组a的大小，Nb是输入数组b的大小。

输入值a和b必须是Array 1D。a和b的大小不一定相同。得到的值没有归一化。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | 最高类型的输入
Waveform | 最高类型的输入

范例

convolve([1, 2, 3, 4, 5],[1, 1, 1]) 返回[1, 3, 6, 9, 12, 9, 5]。

备注

输入a和b必须表示等间隔数据。此外，a的任意两个值之间的间隔必须与b的任意两个值之间的间隔相同。对两个没有映射的数组，假设间隔总为1。对映射的数组，间隔是(Xmax-Xmin)/N，其中Xmax和Xmin对映，N是数组的大小。在一个输入有映射关系，而另一个数组没有映射时，没有映射的输入假设取样频率与有映射的输入相同。得到的值从未归一化为任何标度系数。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: convolve

另请参阅

fft(x)和xcorrelate (a,b)。


cos(x)

返回x的余弦的对象。

用途

使用cos(x)生成x数据的余弦。假设x采用当前Trig Mode单位。x可以是任意形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

cos([0, 180])返回[1, -1]，其中Trig Mode设置为Degrees。

cos((1, PI/4))返回(0.715684, -0.73096)，其中Trig Mode设置为Radians。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: cos

另请参阅

acos(x), cosh(x), sin(x), tan(x), Trig和Default Preferences.


cosh(x)

返回x的双曲线余弦的对象。

用途

使用cosh(x)生成x数据的双曲线余弦。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

Int8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

cosh(0)返回1。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: cosh

另请参阅

acosh(x), cos(x), sinh(x)和tanh(x)。


cot(x)

返回x的余切的对象。

用途

使用cot(x)生成x数据的余切。假设x采用当前Trig Mode单位。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

cot([45, 90])返回[1, 61E-18]，其中Trig Mode设为Degrees。注意第二个数字应该是零，它低于系统精度。

cot((3, @PI/2))返回(1.0049698, @-1.57079)，其中Trig Mode设为Radians。

cot((3, @90))返回(1.0049698, @-90)，其中Trig Mode设为Degrees。

备注

结果中保留映射关系。把Trig Mode设成Radians之外的其它值可能会导致在第12个有效位之后出现精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: cot

另请参阅

acot(x), atan2(y,x), cos(x), coth(x), sin(x), tan(x), Trig和默认首选项。


coth(x)

返回x的双曲线余切的对象。

用途

使用coth(x)生成x数据的双曲线余切。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

coth(0.4)返回2.631。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: coth

另请参阅

acoth(x), cot(x), sinh(x)和tanh(x)。


Create Instance(AssemblyName, ClassName)

创建AssemblyName和ClassName指定的.NET对象的新实例，返回一个参考。可以指定其它参数，调用对象的特定构造函数。

用途

使用CreateInstance在程序中创建一个.NET对象。您应该不必自己编写CreateInstance公式，而是打开Function & Object Browser，选择组件、名字空间、类的类型、相应的构造函数，然后使用Create Instance按钮，创建公式模板。这提供了最佳方式，可以省去部分录入工作，避免发生错误。

AssemblyName是通过.NET组件参考对话框已经参考的组件名称。ClassName是具有相应名字空间的类的名称。

CreateInstance获得任意数量的新增参数，调用对象的特定构造函数。再次使用Function & Object Browser，选择和创建公式模板。

范例

本范例创建System.Collections.Hashtable类的一个实例，返回一个参考。

Set hashtable = CreateInstance("mscorlib", "System.Collections.Hashtable");

备注

VEE必须设置成VEE 5 (或更高)执行模式，以支持.NET(默认首选项)。

必须把.NET类型的组件参考提供给VEE，然后才能创建使用该.NET类型的表达式(Device [image] .NET Assembly References�)。

您将注意到并不是Function & Object Browser中列明的所有.NET类型都有构造函数。这是正常的。对没有列出构造函数的类型，不必调用CreateInstance存取.NET对象。

此外，为调用.NET类型的静态成员(带有 [image] 图标)，不需要先调用CreateInstance。例如，为调用 System.DateTime的静态属性Now，不必先构建一个对象实例。

位置

Device [image] Function & Object Browser

Type: Built-in Functions

Category: .NET Automation

Member: CreateInstance

另请参阅

参阅.NET范例目录下的程序范例

.NET程序范例


CreateObject(ProgID)

创建ProgID指定的ActiveX Automation对象的新实例，返回一个参考。

释放ActiveX参考

用途

使用CreateObject在程序中创建automation对象。您需要修改初始表达式，执行所需的操作。在大多数情况下，您希望在VEE控制的服务器应用的新实例中创建一个新的automation对象实例。

对象的ProgID是编写automation对象的人指配的名称(人可以阅读的字符串)。它一般是一个库或应用名称、周期和组件或对象名称。为给任何ActiveX Automation Server找到有效的ProgIDs，请咨询该服务器提供的文档。

CreateObject使用可选的第二个参数，指定实例化对象的远程主计算机(服务器)的名称。这一功能要求在客户端计算机和服务器计算机上都安装DCOM。语法如下：

createObject( ProgID [, hostName ] )

其中：

hostName的类型必须是Text，并可以指定为有效的UNC或DNS域名。有效的hostName规范的部分范例如下：

Set obj = createObject("lib.obj",
 "server")
Set obj = createObject("lib.obj", "\\\\server")
Set obj = createObject("lib.obj", "server.domain.com")
Set obj = createObject("lib.obj", "135.5.33.19")

范例

这个范例会启动Microsoft Excel的一个新实例 (即使Excel已经运行)，并把一个参考返回新的Worksheet对象：

SET excel = CreateObject ("Excel.Sheet")

释放ActiveX参考

如果VEE程序使用Automation Server (如Excel)，您可能会注意到在程序结束时，不会总是退出Excel (或其它)应用程序。在退出时或在进行File [image] New操作时，VEE会释放所有ActiveX参考。如果您还想在程序结束时释放ActiveX参考，那么必须采取部分编程操作。要求进行下述操作，以保证在其对象被删除或VEE程序结束时退出实例化Automation Server。

在Default Preferences中选择Disable Debug Features。在启用调试时，VEE保留Line Probe使用的数据和指针参考。(您需要确定哪个对您更重要：是调试和线路探测，还是在程序结束时释放ActiveX服务器)

在程序结束前，删除所有声明和未声明VEE变量。提示：在Delete Variable对象中选择All Variables。

如果对Excel电子表格作出任何改动，Excel会询问"Do you want to save changes?"。即使VEE已经释放到Excel的所有参考，Excel仍希望得到某个人的回答，然后才会退出。为避免这种情况，一种方式是在Excel中调用Quit()方法。

一种替代方案是把所有ActiveX函数放到一个单独的VEE库中。然后使用Import Library加载这些函数，使用Delete Library在不再需要时释放所有ActiveX参考。例如，您可以作为 VEE UserFunctions编写所有Excel操作，把它们存储在名为揈xcelFuncs.vee�的库文件中。在主程序希望存取Excel电子表格时，它会对ExcelFuncs.vee进行Import Library操作，调用相应的UserFunctions处理和存储电子表格，然后对ExcelFuncs.vee进行Delete Library操作。这时，将删除到Excel Automation Server的所有参考，退出Excel。

这种方案需要额外的工作，创建和管理单独的UserFunction库。但是，您可以在启用调试和线路探测的情况下，以程序化方式退出Excel。如前所述，您仍需保存电子表格变化或调用Excel的Quit()函数，然后才能调用Delete Library。

备注

VEE必须设置成VEE 5 (或更高)执行模式，以支持ActiveX (默认首选项)。

必须把ActiveX应用的类型库提供给VEE，然后才能创建控制该应用的表达式(Device [image] ActiveX Automation References�)。

VEE对在远程计算机上实例化对象使用的安全设置没有提供任何编程控制。这可以通过属于DCOM的dcomcnfg.exe程序以静态方式完成。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: ActiveX Automation
Member: CreateObject

另请参阅

参阅ActiveX范例目录中的程序范例
Help [image] Open Example�

ActiveX Automation References, 默认首选项, GetObject。


cubert(x)

返回x值的立方根的对象。

用途

使用cubert(x)生成数字x的立方根。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

对PComplex，cubert(x)定义为幅度和1/3相位的立方根。在应用这一函数前，Complex先转换成PComplex。

范例

cubert( (8, @90) )将返回(2, @30)。

cubert( (1,1) )将返回(1.08, 0.291)。

备注

结果中保护映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: cubert

另请参阅

a ^ b (指数), Power, sq(x)和sqrt(x)。


Data Filtering

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Data Filtering，对数据应用过滤算法，使数据平滑化。

polySmooth(x)

meanSmooth(x,numPts)

movingAvg(x,numPts)

clipUpper(x,a)

clipLower(x,a)

minIndex(x)

maxIndex(x)

minX(x)

maxX(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering

另请参阅

polySmooth (x), meanSmooth (x,numPts), movingAvg (x,numPts), clipUpper (x,a), clipLower (x,a), minIndex(x), maxIndex(x), minX(x), maxX(x), Regression和Signal Processing。


defIntegral (x,a,b)

使用Simpson的 1/3规则计算位于a点和b点(含)之间输入数据值的积分的对象。

用途

使用defIntegral(x,a,b)计算a点和b点之间有序的等间隔值集合的积分的数字近似结果。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Waveform | Real64

范例

defIntegral([ 0, 1, 2, 3, 4, 4, 3, 2, 1, 0 ], 2, 5)返回10.12。

备注

defIntegral(x,a,b)函数适用于由简单的数字值组成的一维数组及代表等间隔有序数据的二维(两个字段)坐标组成的列表。对没有映射的数组，值a和b代表数组(0到N-1)中的指数。对坐标列表，值a和b代表坐标列表中第一个点和最后一个点(含)的x值之间的实数值。对映射的数组，值a和b代表Xmin映射和Xmax-dx (含)之间的实数值，其中dx是两个连续点之间的间隔：(Xmax-Xmin)/N。

对没有映射的数组，假设数据等间隔且有序，各点之间的间隔dx值是1。对映射的数组，使用间隔值dx等于(Xmax-Xmin)/N执行运算，从而相应地自动定标。对坐标列表，先检查独立(第一个字段)值，保证其有序、且等间隔，然后使用前面确定的间隔作为 dx值，在相关(第二个字段)值上执行运算。

如果使用没有映射的数组，但从其它途径知道各点之间的间隔是某个值dx，那么通过把defIntegral(x,a,b)结果乘以已知的dx值，可以获得运算使用的正确值。

在这些值代表有噪声的数据时，通过先过滤或平滑数据，通常可以改善defIntegral(x)的结果(从务实的角度看)。平滑操作会去掉叠加在底层值上的大部分不想要的噪声。范例请参阅polySmooth(x)函数和相关的平滑函数。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Calculus
Member: defIntegral

另请参阅

integral(x)


deriv(x, order)

用来使用弹性四阶(5点)多项式在所有输入数据值中计算阶order的导数的对象。

用途

使用deriv(x,order)在有序等间隔值(x)集合的所有点中计算阶order的导数的数字近似结果。结果是大小和形状与输入x相同的数组。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Waveform | Waveform

范例

deriv([0, 1, 2, 3, 3, 2, 1, 0], 1) 返回
[1.25, 0.9167, 1.083, 0.5833, -0.5833, -1.083, -0.9167, -1.25]。

备注

deriv(x,order)函数适用于由简单的数字值组成的一维数组及代表等间隔有序列数据的两维(两个字段)坐标列表。对映射的数组，得到的数组的映射关系将与x完全相同。对坐标列表，值a和b代表坐标列表中第一个点和最后一个点(含)之间的实数值。对映射的数组，值a和b代表Xmin映射和Xmax-dx (含)之间的实数值，其中dx是两个连续点之间的间隔： (Xmax-Xmin)/N。

对没有映射的数组，假设数据等间隔且有序，各点之间的间隔dx值是1。对映射的数组，使用间隔值dx等于(Xmax-Xmin)/N执行运算，从而相应地自动定标。对坐标列表，先检查独立(第一个字段)值，保证其有序、且等间隔，然后使用前面确定的间隔作为 dx值，在相关(第二个字段)值上执行运算。

如果使用没有映射的数组，但从其它途径知道各点之间的间隔是某个值dx，那么通过把deriv(x,order)结果乘以已知的dx值，可以获得运算使用的正确值。

在这些值代表有噪声的数据时，通过先过滤或平滑数据，通常可以改善deriv(x,order)的结果(从务实的角度看)。平滑操作会去掉叠加在底层值上的大部分不想要的噪声。范例请参阅polySmooth(x)函数和相关的平滑函数。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Calculus
Member: deriv

另请参阅

derivAt(x, order,pt)


derivAt(x, order,pt)

用来使用弹性四阶(5点)多项式在输入数据的pt值上计算阶order的导数的对象。

用途

使用derivAt(x,order,pt)在有序等间隔值(x)集合的某个点pt上计算阶order的导数的数字近似结果。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Real64

范例

derivAt([ 0, 1, 2, 3, 3, 2, 1, 0 ], 1, 3)返回0.5833。

Notes

derivAt(x,order,pt)函数适用于由简单的数字值组成的一维数组(整数, 实数, Waveform)及代表等间隔有序列数据的两维(两个字段)坐标列表。对没有映射的数组，值a表示数组(0到N-1)中的数组。对坐标列表，值a和b代表坐标列表中第一个点和最后一个点(含)之间的实数值。对映射的数组，值a和b代表Xmin映射和Xmax-dx (含)之间的实数值，其中dx是两个连续点之间的间隔： (Xmax-Xmin)/N。

对没有映射的数组，假设数据等间隔且有序，各点之间的间隔dx值是1。对映射的数组，使用间隔值dx等于(Xmax-Xmin)/N执行运算，从而相应地自动定标。对坐标列表，先检查独立(第一个字段)值，保证其有序、且等间隔，然后使用前面确定的间隔作为 dx值，在相关(第二个字段)值上执行运算。

如果使用没有映射的数组，但从其它途径知道各点之间的间隔是某个值dx，那么通过把derivAt(x,order,pt)结果乘以已知的dx值，可以获得运算使用的正确值。

在这些值代表有噪声的数据时，通过先过滤或平滑数据，通常可以改善derivAt(x,order,pt)的结果(从务实的角度看)。平滑操作会去掉叠加在底层值上的大部分不想要的噪声。范例请参阅polySmooth(x)函数和相关的平滑函数。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Calculus
Member: derivAt

另请参阅

deriv(x, order)


det(x)

计算一个正方形矩阵的行列式。

用途

使用det(x)计算一个正方形矩阵的行列式。x 输入必须为正方形矩阵。正方形矩阵为行数和列数相同的方形矩阵。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex, Scalar in shape
PComplex | PComplex, Scalar in shape

范例

方形矩阵x [ [1, 2], [3, 4] ], det(x)返回 -2.

注释

忽略操作数上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: det

另请参阅

identity(x), inverse(x), 和 transpose(x).


dirName()

dirName(str)

返回文件路径字符串的目录部分的对象。

用途

使用dirName()隔离一个目录/文件路径前面发现的目录信息。

例如，如果pathStr是：

c:\Program Files\Agilent\VEE\examples\apps\chaos.vee

那么dirName(pathStr)返回：

c:\Program Files\Agilent\VEE\examples\apps

正斜杠( / )和反斜杠( \ )都作为目录(文件夹)名称后面的定界符处理。如果整个pathStr只包含一个名称，那么这个名称视为文件名。在这种情况下，dirName()返回空字符串。

备注

dirName()对象是使用一个输入初始化、并包含dirName()函数的Formula对象。还可以在任何其它Formula对象或表达式中输入dirName()。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: System Information
Member: dirName

另请参阅

baseName(), Formula


a div b (truncated division)

a div b (截短除法)

在两个运算对象上执行代数div (截短除法)运算的对象。

用途

使用a div b确定一个容器除尽另一个容器的倍数，即截短除法值。两个容器可以是任何形状。但是，如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行div运算。

范例

一个标量div一个数组: 3.2 DIV [1, 2, 3, 4]返回[3, 1, 1, 0]。

一个数组div一个标量: [1, 2, 3] DIV 2返回[0, 1, 1]。

两个标量: 12.95 DIV 4返回3。

两个Coord标量: coord(1,3) DIV coord(1,5)返回coord(1,0)。

两个Coord标量: coord(1,3) DIV coord(2,5)返回错误。

备注

如果任一容器被映射(即类型为 Waveform, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: DIV

另请参阅

a + b (加法), a / b (除法), a * b (乘法),和a - b (减法)。


a / b (divide)

a / b (除法)

在两个运算对象上执行除法代数运算的对象。

用途

使用a / b用一个容器的值除以另一个容器的值。两个容器可以是任何形状。但是，如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行除法运算。

这个除法运算在所有数组上执行并行除法，包括矩阵。对矩阵除法，参阅函数matDivide(numer,denom)。

范例

一个标量除以一个数组: 3.0 / [1, 2, 3]返回[3, 1.5, 1]。

两个数组: [4, 5, 6] / [1, 2, 3]返回[4, 2.5, 2]。

两个PComplex标量: (1,@90) / (2,@30)返回(0.5, @60)，Trig Mode设置为Degrees。

两个Coord标量: coord(1,3) / coord(1,5)返回coord(1,0.6)。

两个Coord标量: coord(1,3) / coord(2,5)返回错误。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: /

另请参阅

a + b (加法), a div b (截短除法), matDivide (numer, denom), a * b (乘法)和a - b (减法)。


dmyToDate (d,m,y)

返回把d, m和y参数值转换成日期的对象。

用途

使用dmyToDate(d,m,y)把三个值日、月、年转换成日期。d, m和y可以是任何形状。如果其中一个容器是数组，另一个数组必须是相同大小和形状的标量或数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

dmyToDate(25, 12, 1991)返回62.8293999G。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器包含输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

还要注意dmy指定为现代Gregorian日期。

d (天)的值必须位于1 - 31范围内。

m (月)的值必须位于1 - 12范围内。

Location

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: dmyToDate

另请参阅

hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), month(aDate), now(), Time & Date, wday(aDate)和year(aDate)。


a == b (equal to)

a == b (等于)

在两个运算对象上执行等于运算的对象。

用途

使用a == b确定一个容器的值是否等于另一个容器的值。两个容器可以是任何类型和任何形状。如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象等于第二个运算对象，那么结果值为1；否则值为0。

如果两个运算对象的类型都是Coord，其所有独立变量和相关变量必须相匹配，结果才为1。如果独立变量不匹配，那么会返回一个错误。Complex、PComplex和Spectrum容器的两个部分必须相匹配，运算结果才会返回1。Enums转换成Text进行比较。

数组中两个容器的对应值都相等时，运算才会返回1。

如果两个操作数都为Boolean，结果为与操作数具有相同数据形状的Boolean。

范例

两个Boolean标量：True != False 返回False。

一个标量和一个数组: 3.0 == [3, 3, 3]返回1。

一个标量和一个数组: 3.0 == [3, 1, 3]返回0。

两个arrays: [1, 2, 3] == [1, 2, 4]返回0。

两个PComplex标量: (1,@90) == (1,@85)返回0。

两个Complex标量: (2,3) == (2,4)返回0。

两个Complex标量: (2,3) == (2,3)返回1。

两个Coord标量: coord(1,3) == coord(1,5)返回0。

两个Coord标量: coord(1,3) == coord(2,3)返回错误：Values for independent variables must match。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: ==

另请参阅

a ~= b (约等于), a AND b, a > b (大于), a >= b (大于等于), a < b (小于), a <= b (小于等于), NOT a, a != b (不等于), a OR b, Comparison, a XOR b, Comparator, Conditional和If/Then/Else。


erf(x)

用来计算输入x的误差函数的对象。

用途

使用erf(x)计算x的误差函数。erf函数定义为：

(2/SQRT(PI) ) * [ the integral of ( e^(-t^2)) * dt ]

其中对0 - x范围求积分。x输入可以是任何形状和大小。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

erf(.5)返回0.52049987781305。

备注

忽略运算对象上的映射，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: erf

另请参阅

erfc(x)。


erfc(x)

用来计算输入x的互补误差函数的对象。

用途

使用erfc(x)计算x的误差函数。erfc函数定义为：

1-(2/SQRT(PI)) * [the integral of ( e^(-t^2)) * dt]

其中对0 - x范围求积分。x输入可以是任何形状和大小。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

erfc(.5)返回0.47950012218695。

备注

忽略运算对象上的映射，输出容器的映射关系与输入相同。

如果在erf(x)中调用大的x时，会导致相对精度丢失严重，因此提供了erfc(x)函数，其会返回1.0 - erf(x)，用1.0减去结果(例如, x=5, 会丢失12个位置)。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: erfc

另请参阅

erf(x).


errorInfo()

提供了与错误输出端上捕获的最后错误有关的信息的对象。

用途

使用errorInfo()确定使用错误输出端时捕获的最后错误的错误信息。在捕获错误后，执行errorInfo()对象，创建一条记录，其中包含将在错误对话框中显示的所有信息。记录中包含下述字段：

字段名称 数据类型 描述

Number Int32标量 错误编号

Message Text标量 与这一错误有关的错误消息文本

More Text 1D数组 与这一错误有关的任何其它信息

Title Text标量 生成错误的对象标题

Type Text标量 生成错误的对象类型

备注

errorInfo()对象是一个在没有输入的情况下初始化的Formula对象，其中包含errorInfo()公式。还可以在任何其它Formula对象或表达式中输入errorInfo()。

如果没有任何错误输出到错误输出端，那么ErrorInfo创建的记录不包含任何数据。

errorInfo()只捕获运行时错误，而不捕获运行前错误，如在输入端没有连接时。

errorInfo()不提供与没有捕获的错误有关的信息 (这会生成一个错误消息对话框)。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: errorInfo

另请参阅

Error Output (对象菜单), Formula和Raise Error。


exp(x)

返回x值的指数的对象。

用途

使用exp(x)得到数字x的指数或自然对数(基数e)，即e提高到x幂。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

exp(10) 返回22.0264657948k。

exp((1,2))返回(-1.131204384, 2.471726672)。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: exp

另请参阅

exp10(x), a ^ b (指数), log(x), log10(x)和Power。


exp10(x)

返回x值的指数基数10的对象。

用途

使用exp10(x)得到数字x的常用逆对数(基数10)，即10提高到x幂。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

exp10(10)返回10G。

exp10((1, 2))返回(-4.16146837, 9.09297427)。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: exp10

另请参阅

exp(x), a ^ b (exponent), log(x), log10(x)和Power。


a ^ b (exponent)

a ^ b (指数)

在两个运算对象上执行指数算术运算的对象。

用途

使用a ^ b把一个数字提升为另一个数字的幂。两个容器可以是任何类型和任何形状。但如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是类型最高的容器，形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | *
Int16 | *
Int32 | *
Real32 | *
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

*是两个运算对象中最高的类型。例如，如果数字是uint8，幂是int32，那么返回类型是int32。如果两个类型颠倒，这一结果仍然适用。

如果两个运算对象的类型都是Coord，其所有独立变量和相关变量必须相匹配，否则会返回错误。只在相关(最后)变量上执行指数运算。

范例

一个标量上提升一个数组: 3.0 ^ [1, 2, 3]返回[3, 9, 27]。

一个数组提升一个标量: [1, 2, 3] ^ 3返回[1, 8, 27]。

两个数组: [4, 5, 6] ^ [1, 2, 3]返回[4, 25, 216]。

两个Complex标量: (2,3) ^ (4,5)返回(-0.753046, -0.986429)。

两个Coord标量: coord(4,3) ^ coord(4,2)返回coord(4,9)。

两个Coord标量: coord(1,3) ^ coord(2,5)返回错误。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同。返回值的映射与运算对象相同，否则会返回错误。

从VEE 4到VEE 5行为发生了变化。在VEE 4中，幂假设是实数类型，而不管怎样表示数字，即-1是实数-1.0。在VEE 5中，幂假设为是整数。如果幂表示为1.，那么其作为实数识别。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: ^

另请参阅

exp(x)和log(x).


exponential regression

指数回归

用来把指数曲线拟合到(x,y)数据的对象。

用途

使用指数回归把数据拟合到等式y = C0 + exp(C1*x)，其中x是x坐标，C0和C1是计算得出的系数。exp函数把超越数字e升为(C1*x)幂。

指数回归对象预计Coord类型的输入数组，并带有一个独立变量，即一个(x,y)对。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。如果输入数据有映射(Waveform, Spectrum或映射的数组)，那么到Coord的转换使用映射信息，生成(x,y)对的x部分。如果输入数据没有映射(如一个数组)，那么会从数组中的位置默示生成(x,y)对的x部分。

Open View参数

使用open view上的Fit Type字段把回归类型变成linear, logarithmic, exponential, power curve或polynomial regression。点击这个字段，会出现由不同回归类型组成的列表。

范例

Coord转换范例请参阅Regression。

备注

与回归有关的通用注释请参阅Regression。

位置

Device [image] Regression

然后从对话框上的Fit Type字段中选择相应的Fit Type。

另请参阅

Regression, 线性回归, 对数回归, meanSmooth (x,numPts), movingAvg (x,numPts), 多项式回归, polySmooth (x), 功率曲线回归和Build Coord。


factorial(n)

用来计算输入数字n的阶乘的对象。

用途

使用factorial(n)计算自然数n的阶乘。对任何自然数n，阶乘定义为n! = (n) * (n-1) * (n-2) . . . (3) * (2) * (1)。

n输入可以是任何形状和大小。n输入不得小于零。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

factorial(n)只适用于整数运算对象，因此在进行计算前先把输入数字(唯一类型)转换成 Int32类型。

范例

factorial(6)通过乘法运算6*5*4*3*2*1得到720。

factorial(6.7)通过乘法运算 7*6*5*4*3*2*1得到5040。把实数转换成 Int32的规则把6.7强制转换成7。

备注

忽略运算对象上的映射关系，输出容器的映射与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: factorial

另请参阅

beta(x,y), binomial(a,b), comb(n,r), gamma(x)和perm(n,r)。


fft(x)

在输入数据上计算离散傅立叶变换的对象。

用途

使用fft(x)计算x中的值的离散傅立叶变换。结果是变换的值的一半正值。得到的数组大小是(N DIV 2)+1，其中N是输入数组的大小。

允许的输入类型 返回类型

UInt8 | Complex Array
Int16 | Complex Array
Int32 | Complex Array
Real32 | Complex Array
Real64 | Complex Array
Waveform | Waveform

输入x必须表示由有序的等间隔数据组成的数组。对非Waveform输入，输出是由Complex值组成的没有映射的数组。对Waveform输入，将从最小频率0到最大频率(1+(N DIV 2))/(Tmax-Tmin)映射输出，其中N是输入数组的大小，Tmin和Tmax是输入Waveform的映射。另外注意输出不会归一化。

范例

fft([0, 1, 2, 3, 4, 5, 6, 7])

返回[(28,0), (-4,9.657), (-4,4), (-4,1.657), (-4,0)]

备注

截短和周期：在使用离散傅立叶变换时，一个基本假设是给定的波形h(t)具有周期性，否则波形必须截短，表示为周期函数。对带限周期函数h(t)，必须在周期的整数倍上截短波形；否则得到的离散和连续傅立叶变换在旁瓣和频率泄漏方面会有相当大的差异，可能会出现急剧的不连续点。通过使用窗口，通常可以减少这些困难。如果波形没有带限，那么一般必须调节(提高)截短间隔，使用窗口[0,L]降低时域截短误差。L定义为波形的周期。

假信号：在取样间隔T太大时，会发生假信号(频率折叠)问题。在取样速率接近内奎斯特取样速率时，预计离散傅立叶变换性能会劣化。如果波形不是周期性的或没有带限，那么提高截短间隔[0,L]及降低取样间隔T可以帮助控制截短误差和假信号。

fft参考资料可以参阅：E. Oran Brigham, 快速傅立叶变换及其应用, 第二版, Prentice-Hall, Inc., Englewood Cliffs, NJ, 1988. ISBN #0-13-307505-2。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: fft

另请参阅

convolve(a,b)和ifft(x)。


floor(x)

返回把x舍入到最近的整数值的对象。

用途

x可以是任何形状。floor(x)函数返回小于等于x的最大整数(类型相同)，即x值舍入到下一个更小的整数，即趋向负无穷大的最近的整数。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

floor([23.0, 23.1, 23.9, 23.5, (-23.5)])返回[23, 23, 23, 23, -24]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: floor

另请参阅

abs(x), ceil(x), Complex Parts, fracPart(x), intPart(x), Real Parts和round(x)。


fracPart(x)

返回x的小数部分的值的对象。

用途

使用fracPart(x)获得容器的小数部分。x可以是任何形状。fracPart(x)函数返回符号相同的x的小数部分。它返回x - intPart(x)。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

fracPart([23.0, 23.1, 23.9, 23.5, (-23.5)]) 返回
0, 0.1, 0.9, 0.5, -0.5]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: fracPart

另请参阅

abs(x), ceil(x), Complex Parts, floor(x), intPart(x), Real Parts和round(x)。


Freq Distribution

Function & Object Browser对话框上Probability & Statistics的Category中Built-in Functions的一部分。

用途

使用Freq Distribution函数计算某个范围上的值在固定数量的子范围中的分布。这些函数的Name是：

magDist(x,from,thru,step)

logMagDist(x,from,thru,logStep)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics

另请参阅

Function & Object Browser, logMagDist (x,from,thru, logStep)和magDist(x, from,thru, step)。


gamma(x)

用来计算输入x的gamma函数的对象。

用途

使用gamma(x)计算x的gamma函数。gamma函数定义为：

(the integral of [ t^(x-1) * e^(-t) * dt ])

其中在0到无穷大范围内求积分。x输入可以是任何形状。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

gamma(8) 返回(8-1)! = 5040。

gamma(-1) 返回错误。

gamma(3.7) 返回= 4.17065178379660。

gamma(-3.7) 返回= 0.251643995902422。

备注

gamma(x)函数不适用于x的非正整数值。在x是正整数时，gamma(x)定义为(x-1)! (阶乘)。

忽略运算对象上的映射关系，输出容器的映射与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: gamma

另请参阅

beta(x,y), comb(n,r), factorial(n)和perm(n,r)。


Generate

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Generate存取下面的对象，生成由特定值数据组成的Real64一维数组。

ramp(numElem,from,thru)

logRamp(numElem,from,thru)

xramp(numElem,from,thru)

xlogRamp(numElem,from,thru)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Generate

另请参阅

logRamp (numElem, from,thru), ramp (numElem, from,thru), xlogRamp (numElem, from,thru),和xramp (numElem, from,thru).


getEnv(envStr)

VEE系统信息Built-in Functions部分，允许存取环境变量。

用途

可以使用getEnv存取VEE中环境变量的值。在选择这个函数时，将出现getEnv(envStr)对象。(envStr)表示一个字符串(Text对象)，识别正在查找的环境变量的名称。在圆括号内，输入正在查找的环境变量的字符串名称。

在getEnv(envStr)对象执行时，它将作为Text对象返回字符串指定的环境变量值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: getEnv

另请参阅

errorInfo(), getHostname(), installDir(), whichOS()和whichVersion()


getHostname()

VEE系统信息Built-in Functions部分，允许确定VEE正在运行的主计算机的名称。

用途

可以使用getHostname()找到VEE程序正在运行的主计算机的名称。在选择getHostname函数时，将出现getHostname()对象。这个对象不要求任何参数，但在执行对象时，它会返回主计算机的名称。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: getHostname

另请参阅

errorInfo(), getEnv(envStr), installDir(), whichOS()和whichVersion()。


GetObject

GetObject(fileName, ProgID)

使用ProgID指定的对象加载fileName中保存的ActiveX Automation对象，向其返回一个参考。

用途

使用GetObject获得正在运行的程序中已经存在的一个ActiveX automation对象，或从一个文件中加载一个已有的对象。如果使用CreateObject函数通过表达式创建了一个对象，或对象创建发生在VEE程序范围之外，那么这个对象已经存在。您需要修改初始表达式，执行所需的操作。

对象的ProgID是编写automation对象的人指配的一个名称(人可以阅读的字符串)。它一般是一个库或应用名称、一个周期及一个组件或对象名称。为了找到任何ActiveX Automation Server的有效ProgIDs，应查看与该服务器一起提供的文档。ProgID参数是可选的。如果省略ProgID，VEE会使用组件对象模型(COM)库，确定哪个应用与这个文件相关。

范例

下面的范例把一个参考返回目前正在运行的Microsoft Excel程序的Application对象。Excel必须正在运行，否则这个表达式会导致错误：

SET excel = GetObject ("","Excel.Application")

下面的范例从一个文件中加载一个已有的对象。它把一个参考返回与当前正在运行的Excel程序中的d:\tmp\TestData.xlsSheet相关的对象。如果Excel没有运行，那么它会在加载对象前启动。

SET excel = GetObject ("d:\\tmp\\TestData.xls","Excel.Sheet")

备注

VEE必须设置成VEE 5 (或更高)执行模式，以支持ActiveX (默认首选项)。

必须把ActiveX应用的类型库提供给VEE，然后才能创建控制该应用的表达式 (Device [image] ActiveX Automation References�)。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: ActiveX Automation
Member: GetObject

另请参阅

参阅ActiveX范例目录中的程序范例
Help [image] Open Example�

ActiveX Automation References, 默认首选项, CreateObject.


a > b (greater than)

a > b (大于)

在两个运算对象上执行大于运算的对象。

用途

使用a > b确定一个容器的值是否大于另一个容器的值。两个容器可以是任何形状。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32
Enum | Int32

如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象大于第二个运算对象，那么结果值为1；否则值为0。

如果两个运算对象的类型都是Coord，其独立变量必须完全相同，才能进行这一运算；否则会返回错误。Enums转换成Text进行比较。Text按ASCII单词顺序进行比较。

在比较两个数组时，每对要素必须符合关系运算符，运算才会返回1。

范例

一个标量和一个数组: 3.0 > [1, 3, 9]返回0。

一个数组和一个标量: [5, 9, 7] > 4返回1。

两个数组: [3, 4, 7] > [2, 3, 5]返回1。

两个数组: [3, 4, 3] > [2, 3, 5]返回0。

两个Coord标量: coord(1,3) > coord(1,5)返回0。

两个Coord标量: coord(1,3) > coord(2,5)返回Values for independent variables must match。

两个Text标量: "too" > "zoo"返回0。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: >

另请参阅

a ~= b (约等于), a AND b, a == b (等于), a >= b (大于等于), a < b (小于), a <= b (小于等于), NOT a, a != b (不等于), a OR b, Comparison, a XOR b, Comparator, Conditional和If/Then/Else。


a >= b (greater than or equal to)

a >= b (大于等于)

在两个运算对象上执行大于等于运算的对象。

用途

使用a >= b确定一个容器的值是否大于等于另一个容器的值。两个容器可以是任何形状。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32
Enum | Int32

如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象大于等于第二个运算对象，那么结果值为1；否则值为0。

如果两个运算对象的类型都是Coord，其独立变量必须完全相同，才能进行这一运算；否则会返回错误。Enums转换成Text进行比较。 Text按ASCII单词顺序进行比较。

在两个数组相互映射时，每个要素集必须符合关系运算符，运算才会返回1。

范例

一个标量和一个数组: 3.0 >= [1, 3, 9]返回0。

一个数组和一个标量: [4, 5, 6] >= 4返回1。

两个数组: [3, 3, 6] >= [2, 3, 5]返回1。

两个数组: [1, 4, 3] >= [2, 3, 5]返回0。

两个Coord标量: coord(1,3) >= coord(1,5)返回0。

两个Coord标量: coord(1,3) >= coord(2,5)返回Values for independent variables must match。

两个Text标量: "too" >= "zoo"返回0。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: >=

另请参阅

a ~= b (约等于), a AND b, a == b (等于), a > b (大于), a < b (小于), a <= b (小于等于), NOT a, a != b (不等于), a OR b, Comparison, a XOR b, Comparator, Conditional和If/Then/Else。


hamming(x)

用来对时序值应用Hamming窗口的对象。

用途

使用hamming(x)过滤x中的值，过滤方式与使用Hamming函数频谱变换对x求卷积的方式相同。这会抑制在取样周期性信号时由于输入序列尾部及其表示的不连续点导致的部分噪声。

输入x必须是Array 1D。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum

如果x是Spectrum，它先使用ifft(x)转换成Waveform，然后再应用窗口。然后再使用fft(x)把窗口结果转换回到Spectrum类型。

范例

hamming([1, 1, 1, 1, 1, 1, 1, 1])返回[0.115, 0.364, 0.716, 0.965, 0.965, 0.716, 0.364, 0.115]。

备注

Hamming函数在时域中表示为

0.54-0.46*cos(2*PI*(n+0.5)/N)

其中n是数组中的(索引)，N是数组的大小。结果是形状与x相同的数组，映射关系与x相同(如有)。

如需了解旁瓣电平和相干增益，请参阅：Ziemer, Tranter和Fannin, 信号和系统, Macmillan Publishing, New York, NY, 1983. ISBN #0-02-431650-4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: hamming

另请参阅

bartlet(x), blackman(x), convolve(a,b), fft(x), hanning(x), ifft(x)和rect(x)。


hanning(x)

用来对时序值应用Hanning窗口的对象。

用途

使用hanning(x)过滤x中的值，过滤方式与使用Hanning函数频谱变换对x求卷积的方式相同。这会抑制在取样周期性信号时由于输入序列尾部及其表示的不连续点导致的部分噪声。

输入x必须是Array 1D。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum

如果x是Spectrum，它先使用ifft(x)转换成Waveform，然后再应用窗口。然后再使用fft(x)把窗口结果转换回到Spectrum类型。

范例

hanning([1, 1, 1, 1, 1, 1, 1, 1])返回[0.038, 0.309, 0.691, 0.962, 0.962, 0.691, 0.309, 0.038]。

备注

Hanning函数在时域中表示为

0.5*(1-cos(2*PI*(n+0.5)/N))

其中n是数组中的(索引)，N是数组的大小。结果是形状与x相同的数组，映射关系与x相同(如有)。

如需了解旁瓣电平和相干增益，请参阅：Ziemer, Tranter和Fannin, 信号和系统, Macmillan Publishing, New York, NY, 1983. ISBN #0-02-431650-4。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: hanning

另请参阅

bartlet(x), blackman(x), convolve(a,b), fft(x), hamming(x), ifft(x)和rect(x)。


help(topic,filename)

VEE系统信息Built-in Functions部分，允许链接到自定义帮助主题。

用途

通过使用help对象，可以链接到自定义help主题文件。语法是：

help(topic,filename)

topic - 希望链接到的help主题的名称。

filename - 包含help主题信息的filename。

在VEE程序启动及执行这个对象时，help系统将打开与指定topic相关的filename。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: help

另请参阅

installDir()


hidePanel()

隐藏使用showPanel()显示的UserFunction面板的对象。

用途

使用hidePanel()停止显示使用showPanel()显示的UserFunction面板。

Open View

必须包括文本hidePanel()。在圆括号内部输入下面的参数：

"UFname" - UserFunction的名称，在这个名称外面必须有双引号。这个参数是必填参数。

可以在hidePanel()对象中添加一个数据输入端，设置UserFunction名称，但必须用输入端名称替换"UFname"。

备注

hidePanel()对象是在没有输入的情况下初始化的、包含hidePanel("UFname")公式的Formula对象。还可以在任何其它Formula对象中输入hidePanel() (和相关参数)。

可以通过控制端输入整个hidePanel()公式。

一旦程序停止执行，将隐藏所有面板。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: hidePanel

另请参阅

Call, lockPosition(),
 showPanel(), panelPosition(),
 panelSize(), unlockPosition()和UserFunction。


hmsToHour (h,m,s)

返回转换成小时的参数h, m和s的值的对象。

用途

使用hmsToHour(h,m,s)把小时、分钟和秒三个值转换成小时。h, m和s可以是任何形状。如果其中一个容器是数组，另一个数组必须是或相同大小和形状的标量或数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

hmsToHour(1, [0, 12, 60], 36)返回[1.01, 1.21, 2.01]。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器包含输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: hmsToHour

另请参阅

dmyToDate (d,m,y), hmsToSec (h,m,s), mday(aDate), month(aDate), now(), Time & Date, wday(aDate)和year(aDate)。


hmsToSec (h,m,s)

返回转换成秒的参数h, m和s的值的对象。

用途

使用hmsToSec(h,m,s)把小时、分钟和秒三个值转换成秒。h, m和s可以是任何形状。如果其中一个容器是数组，另一个数组必须是或相同大小和形状的标量或数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

hmsToSec(1,[2, 4, 6],3)返回[3723, 3843, 3963]。

备注

如果任何输入参数有映射，那么这些映射必须相同。得到的容器包含输入容器的映射。如果只有其中一个输入有映射，那么得到的容器也有这些映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: hmsToSec

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), mday(aDate), month(aDate), now(), Time & Date, wday(aDate)和year(aDate)。


Hyper Bessel

参阅帮助主题Bessel。


Hyper Trig

参阅帮助主题Trig。


i0(x)

用来计算第一类阶零的x修改后的(双曲线)贝塞尔函数的对象。

用途

使用i0(x)找到第一类阶零的x修改后的(双曲线)贝塞尔函数。x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

i0(1) 返回 1.26606587775200.

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Bessel
Member: i0

另请参阅

i1(x), k0(x), 和 k1(x).


i1(x)

用来计算第一类阶1的x修改后的(双曲线)贝塞尔函数的对象。

用途

使用i0(x)找到第一类阶1的x修改后的(双曲线)贝塞尔函数。x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

i1(1) 返回0.565159103992485。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: i1

另请参阅

i0(x), k0(x), 和 k1(x).


identity(x)

用来返回标识矩阵的对象。

用途

使用identity(x)返回大小与输入方阵相同的标识矩阵。x输入必须是一个方阵。方阵的行数和列数相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex
PComplex | PComplex

范例

如果x是一个方阵[ [1, 2], [3, 4] ]，identity(x)返回
[ [1, 0], [0, 1] ]。

如果x是复方阵[ [(1,1), (2,2)], [(3,3), (4,4)] ]，identity(x)返回[ [(1,0), (0,0)], [(0,0), (1,0)] ]。

备注

忽略运算对象上的映射关系，输出包含的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: identity

另请参阅

det(x), inverse(x)和transpose(x)。


ifft(x)

在输入数据上计算逆离散傅立叶变换的对象。

用途

使用ifft(x)计算x中的值的逆离散傅立叶变换。输入x应该是对称Complex、PComplex或Spectral序列的值的一半正值。

允许的输入类型 返回类型

Complex Real64

PComplex Real64

Spectrum Waveform

得到的数组大小取决于创建输入数组使用的信息。如fft(x中所述，在由256点组成的数组和由257点组成的数组上进行fft，得到包含129点的数组。根据不同的点数，每个数组中的信息略有不同。在由129点组成的这些数组上使用ifft(x)，得到原始的256点数组和257点数组。对非Spectrum输入，输出是Real值组成的没有映射的数组。对Spectrum输入，映射必须是线性映射(而不是对数映射)，Fmin必须是0。输出将从最小时间0映射到最大时间N/(Fmax-Fmin)，其中N是输入数组的大小，Fmin和Fmax是输入Spectrum的映射。另外注意输出将不会归一化。

它假设x的值表示没有归一化的数据。

范例

ifft([(3.5,0), (-1,2.414), (-1,1), (-1,0.414), (-1,0)])返回
[0, 1, 2, 3, 4, 5, 6, 7]。

备注

1. 截短和周期：在使用离散傅立叶变换时，一个基本假设是给定的波形h(t)具有周期性，否则波形必须截短，表示为周期函数。对带限周期函数h(t)，必须在周期的整数倍上截短波形；否则得到的离散和连续傅立叶变换在旁瓣和频率泄漏方面会有相当大的差异，可能会出现急剧的不连续点。通过使用窗口，通常可以减少这些困难。如果波形没有带限，那么一般必须调节(提高)截短间隔，使用窗口[0,L]降低时域截短误差。L定义为波形的周期。

2. 假信号：在取样间隔T太大时，会发生假信号(频率折叠)问题。在取样速率接近内奎斯特取样速率时，预计离散傅立叶变换性能会劣化。如果波形不是周期性的或没有带限，那么提高截短间隔[0,L]及降低取样间隔T可以帮助控制截短误差和假信号。

fft参考资料可以参阅：E. Oran Brigham, 快速傅立叶变换及其应用, 第二版, Prentice-Hall, Inc., Englewood Cliffs, NJ, 1988. ISBN #0-13-307505-2。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: ifft

另请参阅

fft(x)。


im(x)

返回复数x的虚数部分的对象。

用途

使用im(x)提取复数x的虚数部分。x可以是任何形状。(PComplex先转换成Complex。)

允许的输入类型 返回类型

UInt8 | UInt8, 零值
Int16 | Int16, 零值
Int32 | Int32, 零值
Real32 | Real32, 零值
Real64 | Real64, 零值
Coord | Coord, 零值
Waveform | Waveform, 零值
Complex | Real64, 虚数部分的值
PComplex | Real64, 虚数部分的值
Spectrum | Real64, 虚数部分的值

范例

im( (1,2) )返回2。

im( (1,@90) )，其中Trig Mode为Degrees，返回1。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts
Member: im

另请参阅

conj(x), j(x), mag(x), phase(x), re(x), Real Parts, Build Complex和UnBuild Complex。


inDaylightSavings()

表明计算机时间是不是夏令时的一个对象。

用途

使用inDaylightSavings()确定计算机是使用夏令时还是标准时间。如果计算机当前时间是标准时间，这个对象会返回零。如果计算机当前时间是夏令时，这个对象会返回非零。

备注

inDaylightSavings()对象是在没有输入的情况下初始化的一个Formula对象，并包含inDaylightSavings()公式。还可以在任何其它Formula对象或表达式中输入inDaylightSavings()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: inDaylightSavings

另请参阅

now, Formula


init(x,val)

用来把数组初始化为某个值的对象。

用途

使用init(x,val)把输入数组x初始化为val的值。x输入可以是任何大小和形状及任何类型。对所有x输入类型，返回的输出类型相同(Error输出除外，它返回Text)。第二个val参数必须是相同类型，或能够转换成与x输入值相同的类型。

如果输入x是一个数组，那么val初始值参数可以是一个Scalar值或一个数组。如果val是一个数组，其维数和大小必须与x输入相同。也就是说，如果x是一个Array 1D，那么val可以是一个Scalar或相同大小的Array 1D。对Records，x和val的图表必须匹配。

范例

init(a,5)把输入数组初始化为5的值。

init(a,[1, 2, 3])把三个要素组成的输入数组初始化为值[1, 2, 3]。

备注

初始值的类型必须与输入数组相同，或能够转换成相同的类型。也就是说，不能把实数数组初始化为复数初始值，因为复数不能转换成实数。

输出容器上的映射与输入val相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: init

另请参阅

ramp (numElem, from,thru), randomize (x,low,high)和Allocate Array。


installDir()

返回安装了Agilent VEE的目录路径的对象。

用途

可以使用installDir()确定计算机上安装了Agilent VEE的目录。路径从PC上的注册记录中检索得出。

备注

可以使用命令行选项-d <dirname>，指定与安装目录不同的开始目录。如果使用-d选项，installDir()会返回命令行上指定的开始目录。

installDir()对象是一个在没有输入的情况下初始化的Formula对象，其中包含installDir()公式。还可以在任何其它Formula对象或表达式中输入 installDir()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: installDir

另请参阅

errorInfo(), getEnv(envStr), getHostname(), whichVersion()和commandLine()。


integral(x)

使用Simpson 1/3法计算所有数据输入值的积分的对象。

用途

integral(x)计算一组排序的空间均匀分布的值的不定积分的数字近似值。

允许的输入类型 返回类型

UInt8 | Real64 (same mappings, if any)
Int16 | Real64 (same mappings, if any)
Int32 | Real64 (same mappings, if any)
Int64 | Real64(same mappings, if any)
Real32 | Real64 (same mappings, if any)
Real64 | Real64 (same mappings, if any)
Coord | Coord
Waveform | Waveform

范例

integral([ 0, 1, 2, 3, 3, 2, 1, 0 ]) 返回
[ 0, 0.5, 2, 4.5, 7.667, 10.17, 11.67, 12.17 ].

注释

integral(x)函数可以用于简单值的一维数组和两维（两个域）坐标的列表，该列表表示的是空间均匀分布且已排序的数据。对映射的数组，结果数组和x的映射关系相同。对坐标列表, 每个坐标的独立域（第一个域）的值要与x的相应域相同。

对非映射数组，假设数据是已排序且空间均匀分布，且1被假定为点间的间距dx。对映射数组，操作中使用的间距dx等于(Xmax-Xmin)/N且自动被正确地缩放。对坐标列表，将首先检查独立域（第一个域）以确保它们已排序且在空间上均匀分布，然后用前面已确定的间隔作为dx在从属点（第二个域）上操作。

如果使用非映射数组，但知道点间的间距为某dx, 那么正确的操作值就可以通过将integral(x)的结果和已知的dx相乘而获得。

当对噪音数据操作时，integral(x)的结果通常可以通过先滤波和平滑数据来提高（实际上的）。平滑可以去除许多不想要但被添加到实际数据上的噪音。参阅polySmooth(x)函数及相关平滑函数。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Calculus
Member: integral

另请参阅

defIntegral (x,a,b).


intPart(x)

返回x的整数部分的值得对象。

用途

使用intPart(x)可获得一个容器的整数部分。x可以为任何形状。The intPart(x)返回数据的整数部分。如果数据小雨0，它返回ceil(x)；否则它返回floor(x)。结果与x的映射关系相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

intPart([23.0, 23.1, 23.9, 23.5,(-23.5)]) 返回
[23, 23, 23, 23, -23].

注释

结果保持原有的映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: intPart

另请参阅

abs(x), ceil(x), Complex Parts, floor(x), fracPart(x), Real Parts, 和 round(x).


intToChar(a)

把数字输入转换成ASCII字符的对象。

用途

使用intToChar(a)把数字输入转换成ASCII字符。这个对象先把输入转换成长整数，然后把整数转换成字符。

备注

转换成字符的取值范围是0 - 255。通过只转换32位整数输入的低阶字节，这个对象支持位于这一范围之外的输入。它忽略最上面的三个字节。

VEE使用与C和C++相同的TEXT(String)，因此intToChar(0)等同于NUL或空字符串。NUL是一个字符串终结符。例如，字符串123NUL456会生成字符串123。它忽略字符串的其余部分456。

范例

intToChar(65) 返回A。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: IntToChar

另请参阅

charToInt(a)和String。


inverse(x)

用来计算方阵倒置矩阵的对象。

用途

使用inverse(x)计算方阵x的倒置矩阵。x输入的形状必须是方阵(行数与列数相同)。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex
PComplex | PComplex

范例

如果x是一个方阵[ [1, 2], [3, 4] ]，inverse(x)返回
[ [-2, 1], [1.5, -0.5] ]。

备注

忽略运算对象上的映射关系，输出包含的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: inverse

另请参阅

det(x), identity(x)和transpose(x)。


isVariant(x)

查询"x"，确定其是不是从ActiveX变量创建的。

用途

如果"x"是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariant(A)会正常运行，而isVariant(A[0])则不能正常运行。

ActiveX数据可以声明为Variant类型，然后指配某个类型的数据。isVariant函数告诉您变量是否声明为Variant。typeName函数告诉您目前为Variant指配的数据类型。

范例

someMethod (ByRef x);

isVar = isVariant (x);

isVar变量现在包含一个零值或非零值，表明"x"是不是真正的Variant类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariant

另请参阅

isVariantBool(x), isVariantCurrency(x), isVariantDate(x), isVariantEmpty(x), isVariantError(x), isVariantNull(x), typeName(x).


isVariantBool(x)

查询"x"，确定其是不是从Boolean类型的ActiveX变量创建的。

用途

ActiveX Automation Boolean数据类型(VT_BOOL)作为Int16容器返回VEE，并带有一个"提示"，表明容器类型实际上是VT_BOOL。可以查询容器，确定其实际类型是Int16还是Boolean。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantBool(A)会正常运行，而isVariantBool(A[0])则不能正常运行。返回值是一个Int16，假时为0，真时为非零值。

范例

someMethod (ByRef x);

isBool = isVariantBool (x);

isBool变量现在包含一个零值或非零值，表明"x"是不是真正的VT_BOOL类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantBool

另请参阅

isVariant(x), isVariantCurrency(x), isVariantDate(x), isVariantEmpty(x), isVariantError(x), isVariantNull(x), typeName(x)


isVariantCurrency(x)

查询 "x"，确定其是不是从Currency类型的ActiveX变量创建的。

用途

ActiveX Automation Currency数据类型(VT_CY)作为Real64容器返回VEE，并带有一个 "提示"，表明容器类型实际上是VT_CY。可以查询容器，确定其实际类型是Real64还是Currency。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantCurrency(A)会正常运行，而isVariantCurrency(A[0])则不能正常运行。返回值是一个Int32，假时为0，真时为非零值。

范例

someMethod (ByRef x);

isCurrency = isVariantCurrency (x);

isCurrency变量现在包含一个零值或非零值，表明 "x"是不是真正的VT_CY类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantCurrency

另请参阅

isVariant(x), isVariantBool(x), isVariantDate(x), isVariantEmpty(x), isVariantError(x), isVariantNull(x), typeName(x)


isVariantDate(x)

查询 "x"，确定其是不是从Date类型的ActiveX变量创建的。

用途

ActiveX Automation Date数据类型(VT_DATE)作为 Real64容器返回 VEE，并带有一个 "提示"，表明容器类型实际上是VT_DATE。可以查询容器，确定其实际类型是Real64还是Date。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantDate(A)会正常运行，而isVariantDate(A[0])则不能正常运行。返回值是一个Int32，假时为 0，真时为非零值。

范例

someMethod (ByRef x);

isDate = isVariantDate (x);

isDate变量现在包含一个零值或非零值，表明 "x"是不是真正的VT_DATE类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantDate

另请参阅

isVariant(x), isVariantBool(x), isVariantCurrency(x), isVariantEmpty(x), isVariantError(x), isVariantNull(x), typeName(x)


isVariantEmpty(x)

查询 "x"，确定其是不是从空的ActiveX变量创建的。

用途

用来确定返回的Variant是不是Empty (而不是包含空字符串的Variant)。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantEmpty(A)会正常运行，而isVariantEmpty(A[0])则不能正常运行。返回值是一个Int32，假时为 0，真时为非零值。

范例

someMethod (x);

isEmpty = isVariantEmpty (x);

isEmpty变量现在包含一个零值或非零值，表明 "x"是不是真正的空Variant。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantEmpty

另请参阅

isVariant(x), isVariantBool(x), isVariantCurrency(x), isVariantDate(x), isVariantError(x), isVariantNull(x), typeName(x)


isVariantError(x)

查询 "x"，确定其是不是从Error类型的ActiveX变量创建的。

用途

ActiveX Automation Error数据类型(VT_ERROR)作为Int32 容器返回VEE，并带有一个 "提示"，表明容器类型实际上是VT_ERROR。可以查询容器，确定其实际类型是Int32还是Error 。值代表错误编号(scode)。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantError(A)会正常运行，而isVariantError(A[0])则不能正常运行。返回值是一个Int32，假时为 0，真时为非零值。

范例

someMethod (x);

isError = isVariantError (x);

isError变量现在包含一个零值或非零值，表明 "x"是不是真正的VT_ERROR类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantError

另请参阅

isVariant(x), isVariantBool(x), isVariantCurrency(x), isVariantDate(x), isVariantEmpty(x), isVariantNull(x), typeName(x)


isVariantNull(x)

查询 "x"，确定其是不是从包含Null的ActiveX变量创建的。

用途

用来确定返回的Variant是否包含VT_NULL (而不是Int32值0)。

如果 "x" 是一个数组，那么这个函数在数组容器上操作，而不是在各个数组要素上操作。例如，isVariantNull(A)会正常运行，而isVariantNull(A[0])则不能正常运行。返回值是一个Int32，假时为 0，真时为非零值。

范例

someMethod (x);

isNull = isVariantNull (x);

isNull变量现在包含一个零值或非零值，表明 "x"是不是真正的VT_NULL类型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: isVariantNull

另请参阅

isVariant(x), isVariantBool(x), isVariantCurrency(x), isVariantDate(x), isVariantEmpty(x), isVariantError(x), typeName(x)


j(x)

将x作为虚数部分返回一个复数的对象。

用途

用j(x)产生一个与x形状相同的复数，x作为虚数部分，0位实数部分。返回值得形状相同。

允许的输入类型 返回类型

UInt8 | Complex
Int16 | Complex
Int32 | Complex
Int64 | Complex
Real32 | Complex
Real64 | Complex
Waveform | Complex

范例

j(5) 返回复数 (0,5).

备注

结果保持原映射关系。要返回一个以x作为实数部分的复数，可以使用在输入端将real型转为Complex型。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts
Member: j

另请参阅

Complex Parts, conj(x), im(x), mag(x), phase(x), re(x), Real Parts, Build Complex, 和 UnBuild Complex.


j0(x)

用来计算第一类阶零的x的贝塞尔函数的对象。

用途

使用j0(x)计算第一类阶零的x的贝塞尔函数。 x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

j0(10) 返回 -0.245935764451348.

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Bessel
Member: j0

另请参阅

Ai(x), Bi(x), j1(x), jn(x,n), y0(x), y1(x), 和 yn(x,n).


j1(x)

用来计算第一类阶1的x的贝塞尔函数的对象。

用途

使用j0(x)计算第一类阶零的x的贝塞尔函数。 x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

j1(1) 返回 0.440050585744933.

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Bessel
Member: j1

另请参阅

Ai(x), Bi(x), j0(x), jn(x,n), y0(x), y1(x), 和yn(x,n).


jn(x,n)

用来计算第一类阶n的x的贝塞尔函数的对象。

用途

使用jn(x,n)找到第一类阶n的x的贝塞尔函数。x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

n参数的类型必须是Int32，或能够转换成Int32。其形状必须是Scalar，或者形状与x相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

jn(1,2)返回0.114903484931900。

备注

如果两个输入都有映射，那么映射必须相同。如果任一输入有映射，返回值的映射关系与输入相同。如果两个输入都没有映射，那么输出没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: jn

另请参阅

Ai(x), Bi(x), j0(x) , j1(x), y0(x), y1(x)和yn(x,n)


k0(x)

用来计算第二类阶零的x修改后的(双曲线)贝塞尔函数的对象。

用途

使用k0(x)找到第二类阶零的x修改后的(双曲线)贝塞尔函数。x输入可以是任何大小和形状。对Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

k0(1)返回0.421024438240708。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

x自变量必须是正值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: k0

另请参阅

i0(x), i1(x)和k1(x)。


k1(x)

用来计算第二类阶1的x修改后的(双曲线)贝塞尔函数的对象。

用途

使用k1(x)找到第二类阶1的x修改后的(双曲线)贝塞尔函数。x输入可以是任何大小和形状。对 Coord输入类型，运算在相关变量上完成。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

k1(1)返回0.601907230197234。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

x自变量必须是正值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: k1

另请参阅

i0(x), i1(x)和k0(x)


a < b (less than)

a < b (小于)

在两个运算对象上执行小于运算的对象。

用途

使用a < b确定一个容器的值是否小于另一个容器的值。两个容器可以是任何形状。但如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象小于第二个运算对象，那么结果值为1；否则值为0。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32
Enum | Int32

如果两个运算对象的类型都是Coord，其独立变量必须完全相同，才能进行这一运算；否则会返回错误。Enums转换成Text进行比较。Text按ASCII单词顺序进行比较。

在比较两个数组时，每对要素必须符合关系运算符，运算才会返回1。

范例

一个标量和一个数组: 3.0 < [1, 3, 9]返回0。

一个数组和一个标量: [1, 2, 3] < 4返回1。

两个数组: [1, 2, 3] < [2, 3, 5]返回1。

两个数组: [1, 4, 3] < [2, 3, 5]返回0。

两个Coord标量: coord(1,3) < coord(1,5)返回1。

两个Coord标量: coord(1,3) < coord(2,5)返回Values for independent variables must match。

两个Text标量: "too" < "zoo"返回1。

备注

如果任一容器被映射(即类型为Waveform, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: <

另请参阅

a ~= b (约等于), a AND b, a == b (等于) , a > b (大于), a >= b (大于等于), a <= b (小于等于), NOT a, a != b (不等于), a OR b, Comparison, a XOR b, Comparator, Conditional和If/Then/Else。


a <= b (less than or equal to)

a <= b (小于等于)

在两个运算对象上执行小于等于运算的对象。

用途

使用a <= b确定一个容器的值是否小于等于另一个容器的值。两个容器可以是任何形状。但如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象小于等于第二个运算对象，那么结果值为1；否则值为0。

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32
Enum | Int32

如果两个运算对象的类型都是Coord，其独立变量必须完全相同，才能进行这一运算；否则会返回错误。Enums转换成Text进行比较。Text按ASCII单词顺序进行比较。

在比较两个数组时，每对要素必须符合关系运算符，运算才会返回1。

范例

一个标量和一个数组: 3.0 <= [1, 3, 9]返回0。

一个数组和一个标量: [1, 2, 4] <= 4返回1。

两个数组: [1, 2, 3] <= [2, 3, 3]返回1。

两个数组: [1, 4, 3] <= [2, 3, 5]返回0。

两个Coord标量: coord(1,3) <= coord(1,5)返回1。

两个Coord标量: coord(1,3) <= coord(2,5)返回Values for independent variables must match。

两个Text标量: "too" <= "zoo"返回1。

备注

如果任一容器被映射(即类型为Waveform, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Comparison
Member: <=

另请参阅

a ~= b (约等于), a AND b, a == b (等于), a > b (大于), a >= b (大于等于), a < b (小于), NOT a, a != b (不等于), a OR b, Comparison, a XOR b, Comparator, Conditional和If/Then/Else。


Linear Regression

线性回归

用来把线性回归线拟合到(x,y)数据的对象。

用途

使用线性回归使用等式y = C0 + C1*x把直线拟合到数据中，其中x是x坐标，C0和C1是计算得出的系数。这类回归应视为通过数据拟合最佳直线。

线性回归对象预计Coord类型的输入数组，并带有一个独立变量，即一个(x,y)对。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。如果输入数据有映射(Waveform, Spectrum或映射的数组)，那么到Coord的转换使用映射信息，生成(x,y)对的x部分。如果输入数据没有映射(如一个数组)，那么会从数组中的位置默示生成(x,y)对的x部分。

Open View 参数

使用 open view上的Fit Type字段把回归类型变成linear, logarithmic, exponential, power curve或polynomial regression。点击这个字段，会出现由不同回归类型组成的列表。

范例

Coord转换范例请参阅Regression。

备注

与回归有关的通用注释请参阅Regression。

位置

Device [image] Regression

然后从对话框上的Fit Type字段中选择相应的Fit Type。

另请参阅

Regression, 指数回归, 对数回归, meanSmooth (x,numPts), movingAvg (x,numPts), 多项式回归, polySmooth (x), 功率曲线回归和Build Coord.


lockPosition()

防止移动正在显示的UserFunction面板的对象。

用途

在使用showPanel()显示UserFunction面板，且已经使用unlockPosition()或已经反选Lock Panel Position属性、允许用户移动面板时，可以使用lockPosition()防止用户移动面板。

Open View

必须包括文本lockPosition()。在圆括号内部输入下面的参数：

"UFname" - UserFunction的名称，在这个名称外面必须有双引号。这个参数是必填参数。

可以在lockPosition()对象中添加一个数据输入端，设置UserFunction名称，但必须用输入端名称替换"UFname"。

备注

lockPosition()对象是在没有输入的情况下初始化的、包含lockPosition()公式的Formula对象。还可以在任何其它Formula对象或表达式中输入lockPosition()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: lockPosition

另请参阅

Call, hidePanel(),
 panelPosition(), panelSize(),
 showPanel(), unlockPosition()和UserFunction。


log(x)

返回x值的自然对数的对象。

用途

使用log(x)得到数字x的自然对数(基数e)。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

log([10, 2])将返回[2.302585092994, 0.693147180559945]。

log((1,2))将返回(0.804718956, 1.10714872)。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: log

另请参阅

exp(x), exp10(x), a ^ b (exponent), log10(x)和Power。


log10(x)

返回x值的常用对数的对象。

用途

使用log10(x)得到数字x的常用对数(基数10)。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

log10([10, 2])将返回[1, 0.301029995663981]。

log10((1,2))将返回[0.349485, 0.480828579]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: log10

另请参阅

exp(x), exp10(x), a ^ b (指数), log(x)和Power。


logarithmic regression

对数回归

用来把对数曲线拟合到数据的对象。

用途

使用对数回归把数据拟合到等式：

y = C0 + C1*log(x)

其中x是x坐标，C0和C1是计算得出的系数。对数函数是自然对数。输入数据(x)必须一直大于0。

对数回归对象预计Coord类型的输入数组，并带有一个独立变量，即一个(x,y)对。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。如果输入数据有映射(Spectrum或映射的数组)，那么到Coord的转换使用映射信息，生成(x,y)对的x部分。如果输入数据没有映射(如一个数组)，那么会从数组中的位置默示生成(x,y)对的x部分。

Open View参数

使用open view上的Fit Type字段把回归类型变成linear, logarithmic, exponential, power curve或polynomial regression。点击这个字段，会出现由不同回归类型组成的列表。

范例

Coord转换范例请参阅Regression。

备注

与回归有关的通用注释请参阅Regression。

这个函数不能用于没有映射的数组。没有映射的数组转换成从x=0开始的Coord，不能进行对数函数转换。同理，这个函数不能用于Waveform。

位置

Device [image] Regression

然后从对话框上的Fit Type字段中选择相应的Fit Type。

另请参阅

Regression, exponential regression, meanSmooth (x,numPts), movingAvg (x,numPts), polynomial regression, polySmooth (x), power curve regression,和Build Coord.


Logical

Function & Object Browser对话框中Operators的一个Category。

用途

使用Logical存取下述对象，在两个运算对象上执行逻辑运算：

a AND b

a OR b

a XOR b

NOT a

备注

如果满足逻辑要求，那么返回1。如果没有满足逻辑要求，那么返回0。

注意返回值的类型是Int32，形状与运算对象相同。这与条件运算相同，如一直返回标量的==。

逻辑运算符只从字符串是否为空的角度定义给Text类型。也就是说，"zoo"AND"" (空字符串)在逻辑上为假，因为第二个字符串为空。记住，在比较Text类型与非字符串类型时，后者晋级为Text类型。这意味着"zoo" AND 0为真，因为实数0晋级为字符串"0"，另外由于两个字符串都不是空，因此AND表达式为真，返回结果1。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Logical

另请参阅

a AND b, NOT a, a OR b, a XOR b, Comparison, Conditional和If/Then/Else。


logMagDist (x,from,thru, logStep)

用来计算逻辑分布一定时输入容器中数字分布的对象。

用途

使用logMagDist(x,from,thru,logStep)计算输入数组值的log10值的分布。分布在from到thru的范围内完成，步长为logStep。logStep参数是log10域中对对数值分类的子范围大小(0.2的logStep等于每10 Hz有5个子范围)。

x输入可以是任何大小，形状必须是Array。对Complex, PComplex和Spectrum类型的输入，将先计算复数的幅度，然后使用该幅度确定频率分布。

允许的输入类型 返回类型

UInt8 | Real64 Array 1D
Int16 | Real64 Array 1D
Int32 | Real64 Array 1D
Real32 | Real64 Array 1D
Real64 | Real64 Array 1D
Coord | Real64 Array 1D
Waveform | Real64 Array 1D
Complex | Real64 Array 1D
PComplex | Real64 Array 1D
Spectrum | Real64 Array 1D

由于没有为x<=0的值定义log10(x)，因此输入值应为正值。

对所有类型的输入，都返回Real64 Array 1D。每个数组要素表示将有多少个输入值落入每个分布范围内。

from, thru和logStep参数的形状必须是Scalar，类型必须是Real64，或能够转换成Real64类型。

from参数必须小于thru参数。

logStep参数必须大于零。

范例

logMagDist(x,1,100,1)，其中x是数组：

[1, 2, 3, 10, 40, 50, 100, 100 ,100]

返回数组[3, 6]。在本例中，从1到2 x 1有两个子范围。输出数组显示了有多少个输入数字落入每个子范围内。

备注

分布的子范围由下面的范围参数确定：

Range 1

Range Minimum: "from" parm

range: <= range1

Range Maximum: < "from" parm + "step" parm(range1limit)

Range 2

Range Minimum: range1limit

range: <= range2

Range Maximum: < range1limit + "step" parm (range2limit)

Range 3

Range Minimum: range2limit

range: <= range3

Range Maximum: < range2limit + "step" parm (range3limit)

Range n-1

Range Minimum: range(n-2)limit

range: <= range(n-1)

Range Maximum: <= "thru" parm

在确定范围分布前，需要先计算"from"和"thru"参数的log10。

忽略运算对象上的映射，返回值没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: logMagDist

另请参阅

magDist(x, from,thru, step).


logRamp (numElem, from,thru)

生成对数斜坡数组的对象。

用途

使用logRamp(numElem,from,thru)生成长度为numElem的Real64一维数组，对数值从from向thru倾斜。numElem必须是一个标量容器，其类型是Int32或能够转换成Int32，取值大于零。from和thru必须是标量容器，或能够转换成Real。如果from小于thru，那么斜率为正；否则，斜率自动为负。from和thru的值都必须大于零。

范例

logRamp(3, 1, 100)返回一个1D Array，取值为[1, 10, 100]。

备注

返回值没有映射。

生成各个值的算法是：

Y[I]=exp10(log10(from)+I*((log10(thru)-log10(from))/numElem-1))
for I=0..numElem-1

这会导致得到的数组中的最后一个要素值是thru。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Generate
Member: logRamp

另请参阅

Alloc Real64和ramp (numElem, from,thru)


mag(x)

返回一个PComplex数x的级数的对象。

用途

使用mag(x)可获取一个PComplex数x的级数。对integer, Real, Coord, 和 Waveform类型，返回的为相同的类型和数值。 对Complex, PComplex, 和Spectrum类型， mag(x)返回一个Real型容器，其值为PComplex数的级数。(Complex会先被转换为PComplex.)

允许的x输入类型 返回类型

UInt8 | Uint8, 值相同
Int16 | Int16, 值相同
Int32 | Int32, 值相同
Int64 | Int64, 值相同
Real32 | Real32, 值相同
Real64 | Real64, 值相同
Coord | Coord, 值相同
Waveform | Waveform, 值相同
Complex | Real64
PComplex | Real64
Spectrum | Real64

范例

mag( (1,@45) ) 返回 1.

注释

结果中保留映射关系。

Location

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts
Member: mag

另请参阅

conj(x), im(x), j(x), phase(x), re(x), Real Parts, Build Complex, Default Preferences, 和 UnBuild Complex.


magDist(x, from,thru, step)

用来计算输入容器中数字分布的对象。

用途

使用magDist(x,from,thru,step)计算输入数组中数字的分布。分布在from到thru的范围内完成，步长为step。step参数是数字将落入的子数组范围的大小。

x输入可以是任何大小。对Complex, PComplex和Spectrum类型的输入，将先计算复数的幅度，然后使用该幅度确定频率分布。x输入形状必须是Array。

允许的x输入类型 返回类型

UInt8 | Real64 Array 1D
Int16 | Real64 Array 1D
Int32 | Real64 Array 1D
Real32 | Real64 Array 1D
Real64 | Real64 Array 1D
Coord | Real64 Array 1D
Waveform | Real64 Array 1D
Complex | Real64 Array 1D
PComplex | Real64 Array 1D
Spectrum | Real64 Array 1D

返回的数组中的每个要素表示有多少个输入值将落到每个分布范围中。

from, thru和step参数的形状必须是Scalar，类型必须是Real64，或能够转换成Real64类型。

from参数必须小于thru参数。

step参数必须大于零。

范例

magDist(x,1,5,1)，其中x是数组array [1, 2, 3, 4, 5, 5, 3, 3, 3, 2, 2, 2]，返回数组[1, 4, 4, 3]。在本例中，从1到5 x 1有四个子范围。输出数组显示了有多少个输入数字落入每个子范围内。

备注

分布的子范围由下面的范围参数确定：

Range 1

Range Minimum: "from" parm

range: <= range1

Range Maximum: < "from" parm + "step" parm(range1limit)

Range 2

Range Minimum: range1limit

range: <= range2

Range Maximum: < range1limit + "step" parm (range2limit)

Range 3

Range Minimum: range2limit

range: <= range3

Range Maximum: < range2limit + "step" parm (range3limit)

Range n-1

Range Minimum: range(n-2)limit

range: <= range(n-1)

Range Maximum: <= "thru" parm

忽略运算对象上的映射，返回值没有映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: magDist

另请参阅

logMagDist (x,from,thru, logStep).


matDivide (numer, denom)

这个对象将把两个矩阵A和B相除。matDivide(numer,denom)运算的代数表达式定义为A/B；但在矩阵(线性代数)中，它定义为inv(B)*A。

用途

使用matDivide(numer,denom)用一个矩阵除以另一个矩阵。假设线性系统BX=A，其中B和A矩阵已知，对矩阵X求解。在代数运算中，X求解方法是用A除以B：X = A/B。但是，在对使用线性代数矩阵规则的公式系统求解时，运算实际上是X = inv(B)*A。这一运算可以用来对n个未知数的n个等式的线性系统求解。

如果B是一个n x n矩阵(方阵)，那么线性系统BX = A是由n个未知数的n个等式组成的系统。假设B不是单数，那么存在inv(B) (B的倒数)，在BX = A的两侧都乘以inv(B)，得到X = inv(B)*A。

inv(B)*A乘法的求解方法与线性系统一定的求解方法相同。如果B不是单数，那么系统有一个唯一的解。

范例

matDivide(A,B)，其中A是一个3x1矩阵[ [8], [24], [8] ],
B是一个3x3矩阵[ [1, 1, 1], [0, 2, 3], [5, 5, 1] ]
返回一个3x1矩阵[ [0], [0], [8] ]。

备注

忽略运算对象上的映射关系，返回值没有映射关系。

matDivide(A,B)使用B的倒数；因此B必须是一个方阵。matMultiply(A,B)规则应用到inv(B) * A运算中。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: matDivide

另请参阅

a / b (除法)和matMultiply (A,B)。


matMultiply (A,B)

用来根据线性代数规则把两个矩阵乘起来的对象。

用途

使用matMultiply(A,B)把两个输入矩阵A和B乘起来。令A是一个m x p矩阵，B是一个p x n矩阵。matMultiply A和B是一个新矩阵Z，即一个m x n矩阵。注意只有在矩阵的大小是A是一个m x p矩阵、B是一个p x n矩阵时才能定义乘法(即第二个矩阵的行数等于第一个矩阵的列数)。

输入矩阵必须是矩阵形状。如果两个矩阵的类型不同，类型较低的矩阵晋级到较高的类型，返回的值是较高的类型。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex
PComplex | PComplex

范例

matMultiply(A,B)，其中A是一个2x1矩阵[ [3], [1] ]，B是一个1x2矩阵[2, 4]，得到一个2x2矩阵[ [6, 12], [2, 4] ]。

备注

忽略运算对象上的映射关系，返回值没有映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: matMultiply

另请参阅

matDivide (numer, denom)和a * b (乘法)。


Matrix

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Matrix运算，在矩阵上计算常用线性代数运算结果：

det(x)

inverse(x)

transpose(x)

identity(x)

minor(x,row,col)

cofactor(x,row,col)

matMultiply(A,B)

matDivide(numer,denom)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix

另请参阅

cofactor(x, row,col), det(x), identity(x), inverse(x), matMultiply (A,B), matDivide (numer, denom), minor(x,row, col)和transpose(x)。


max(x)

用来返回输入容器最大值的对象。

用途

使用max(x)返回容器中的最大值。

x输入可以是任何长度和形状。对Coord输入类型，操作在相关变量上完成。对Text输入类型，max(x)文本字符串是词典中排在最前面的字符串。

允许的输入类型 返回类型

UInt8 | UInt8, 形状标量
Int16 | Int16, 形状标量
Int32 | Int32, 形状标量
Int64 | Int64, 形状标量
Real32 | Real32, 形状标量
Real64 | Real64, 形状标量
Coord | Coord, 形状标量
Waveform | Real 64, 形状标量
Text | Text, 形状标量

范例

max(x)，其中x是数组[5, 34, 1, 54, 6, 2, 9, 7, 16, 42]，返回值为54。

为计算两个标量的值，使用数组构建语法，创建一个数组，在数组上调用max()。例如：

备注

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: max

另请参阅

maxIndex(x), maxX(x), mean(x), median(x), min(x), mode(x), rms(x), sdev(x), 和vari(x).


maxIndex(x)

返回输入数组中最大元素的索引号的对象。

用途

使用maxIndex(x)获得1D数组中最大元素的索引号。x必须为1D数组.

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Int64 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32

范例

将maxIndex(x)用于一个数组，x为一维数组[.1, .4, .6, .9]，返回值为3因为.9 是这个数组中最大的数。

x为 ["Ken", "Sue", "Randy", "Bill", "Doug"]，maxIndex(x)返回1因为按字典顺序"Sue"为最大值。

注释

注意数组索引从0开始。

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Data Filtering
Member: maxIndex

另请参阅

max(x), maxX(x), min(x), minIndex(x), 和 minX(x).


maxX(x)

返回输入的1D数组所映射到的数组中的最大点的x值得对象。

用途

使用maxX(x)返回一个1D (线性)数组中最大值的Xindex。x必须为1D数组。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Int64 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar
Text | Real64 Scalar

如果为映射数组，返回值为输入数据的最大y值所对应的x值。x值用数组映射关系来计算。如果数据为非映射数组， 那么返回值为数组中最大y值的索引号。也就是，它会返回数组中最大x值得位置（隐式的）。

对Coord类型，返回最大y值的独立变量x。

这个函数只能用于映射的数据或Coord类型，因为对非映射数据它与maxIndex(x)功能相同。

范例

当x为一个有256个点并且映射到从0到20毫秒的正弦波时，maxX(x)返回.009219.

当x为非映射数组时，比如 [.1, .4, .6, .9]， maxX(x)返回3，因为 .9是这个数组中最大的元素。这和maxIndex(x)完全一致。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Data Filtering
Member: maxX

另请参阅

max(x), maxIndex(x), min(x), minIndex(x), minX(x), Get Mappings, 和 Set Mappings。


mday(aDate)

返回时间x的月份中天的对象。

用途

使用mday(x)把一定时间x转换成与月份中的天对应的1 - 31值形状相同的容器。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

mday(dmyToDate(25,12,1991))返回25，表示一个月的第25天。

备注

mday(aDate)返回1-31，而不是0-30。 这是VEE中为数不多的基于非零值的函数之一。返回值保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: mday

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), month(aDate), now(), Time & Date, wday(aDate)和year(aDate)。


mean(x)

用来计算输入容器中数据的中间值的对象。

用途

使用mean(x)返回容器的中间(平均)值。输入容器中的数字相加，然后把得到的和除以输入中的单元数量。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar

对Coord输入类型，将在相关变量上完成运算。

范例

如果x是数组[1, 2, 3, 11, 12, 34]，mean(x)返回10.5。

备注

忽略运算对象上的映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: mean

另请参阅

max(x), median(x), min(x), mode(x), rms(x), sdev(x)和vari(x)。


meanSmooth (x,numPts)

用来在相关数据点周围使用指定数量数据的中间值平滑输入数据、计算平滑后的数据点的对象。

用途

使用meanSmooth(x,numPts)执行与polySmooth(x)程序类似的数据平滑操作。该算法计算被平滑的点周围numPts数据点的代数中间值。例如，如果numPts是5，那么对下述点取中间值：当前点前面的两个点，当前点，当前点后面的两个点。如果numPts是偶数，那么该算法将在点数上加1，使其变成奇数。x输入的形状必须是Array 1D。

允许的x输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

Coord输入类型的独立变量必须等距，即相邻点之间的间隔x必须是常数。只能在相关变量上进行平滑操作(Coord的y数据)。

这种技术的噪声抑制功能与指定的平均运算的numPts大小有关。大的numPts值抑制噪声的能力要远远超过小的numPts值。如果用来预处理数据，通常使用这一函数，大幅度改善其它函数的结果(如deriv(x,order))。

备注

忽略输入参数上的映射关系，输出的映射关系与输入参数x相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering
Member: meanSmooth

另请参阅

movingAvg (x,numPts), polySmooth (x), Regression类型和Signal Processing。


median(x)

用来计算输入容器中值的对象。

用途

使用median(x)返回容器的中值。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar

对Coord输入类型，将在相关变量上完成运算。

范例

median([1, 2, 3, 8, 20])返回3。

median(x)，其中x是数组[1, 2, 5, 11, 12, 33]，返回8。中值是数字范围中的一个值。在数字数量为偶数时，中值计算为两个中间数的平均值。在这种情况下，中值是5和11的平均值8。

median([20, 5, 10])返回10。

备注

忽略运算对象上的映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: median

另请参阅

max(x), mean(x), min(x), mode(x), rms(x), sdev(x)和vari(x)。


min(x)

用来返回输入容器最小值的对象。

用途

使用min(x)返回容器中的最小值。x输入可以是任何长度和形状。

允许的输入类型 返回类型

UInt8 | UInt8, 形状标量
Int16 | Int16, 形状标量
Int32 | Int32, 形状标量
Int64 | Int64, 形状标量
Real32 | Real32, 形状标量
Real64 | Real64, 形状标量
Coord | Coord, 形状标量
Waveform | Real64, 形状标量
Text | Text, 形状标量

对Coord输入类型，操作在相关变量上完成。对Text输入类型，min(x)文本字符串是词典中排在最下面的字符串。

范例

min(x), 其中x是数组[5, 34, 1, 54, 6, 2, 9, 7, 16, 42]，返回值为1。

为计算两个标量的值，使用数组构建语法，创建一个数组，在数组上调用max()。例如：

备注

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: min

另请参阅

max(x), mean(x), median(x), minIndex(x), minX(x), mode(x), rms(x), sdev(x), 和vari(x).


minIndex(x)

返回输入数组中最小元素的索引号的对象。

用途

使用minIndex(x)获得1D数组中最小元素的索引号。x必须为1D数组.

允许的输入类型 返回类型

UInt8 | Int32
Int16 | Int32
Int32 | Int32
Int64 | Int32
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32
Text | Int32

范例

当x为一维数组[.1, .4, .6, .9]，minIndex(x)返回值为0因为.1 是这个数组中最小的数。

当x为 ["Ken", "Sue", "Randy", "Bill", "Doug"]，minIndex(x)返回3因为按字典顺序"Bill"为最小值。

注释

注意数组索引从0开始。

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Data Filtering
Member: minIndex

另请参阅

max(x), maxIndex(x), maxX(x), min(x), 和 minX(x)。


minor(x,row, col)

计算矩阵x在r行和c列的子行列式的对象。

用途

使用minor(x,row,col)计算矩形输入矩阵x的子行列式。 子行列式定义为输入矩阵x删除地r行和第c列后的子矩阵的子行列式。x必须为方形矩阵(有相同行的数和列数)。将被删去的行和列r和c, 必须为Int32或可被转为Int32型的标量。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Complex | Complex, 标量
PComplex | PComplex, 标量

范例

minor(a,1,2), a = [ [3, -1, 2], [4, 5, 6], [7, 1, 2] ],
返回 -34.

注释

忽略运算对象上的映射。

输入变量 r 和 c 应为Int32或可被转换为Int32。 请在制定行数和列数时务必注意，矩阵的行和列是从0 到 n-1。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: minor

另请参阅

cofactor(x, row,col) 和 det(x)。


minX(x)

返回输入的1D数组所映射到的数组中的最小点的x值得对象。

用途

使用minX(x)返回一个1D (线性)数组中最小值的Xindex。x必须为1D数组。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Int64 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar
Text | Real64 Scalar

如果为映射数组，返回值为输入数据的最小y值所对应的x值。x值用数组映射关系来计算。如果数据为非映射数组， 那么返回值为数组中最小y值的索引号。也就是，它会返回数组中最小x值的位置（隐式的）。

对Coord类型，返回最小y值的独立变量x。

这个函数只能用于映射的数据或Coord类型，因为对非映射数据它与minIndex(x)功能相同。

范例

当x为一个有256个点并且映射到从0到20毫秒的正弦波时，minX(x)返回.0107.

当x为非映射数组时，比如 [.1, .4, .6, .9]， minX(x)返回 0，因为 .1是这个数组中最小的元素。这和minIndex(x)完全一致。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Data Filtering
Member: minX

另请参阅

max(x), maxIndex(x), maxX(x), min(x), minIndex(x), Get Mappings, 和 Set Mappings。


a mod b (modulo)

a mod b (模数)

对两个运算对象执行代数模数(余数)运算的对象。

用途

使用a mod b确定两个容器相除的余数。两个容器可以是任何形状。但是，如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。

允许的输入类型 返回类型

UInt8 | Highest type
Int16 | Highest type
Int32 | Highest type
Real32 | Highest type
Real64 | Highest type
Coord | Highest type
Waveform | Highest type

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行模数运算。

范例

一个标量对一个数组求模: 3.2 MOD [1, 2, 3]返回[0.2, 1.2, 0.2]。

一个数组对一个标量求模: [1, 2, 3] MOD 2返回[1, 0, 1]。

两个Coord标量: coord(1,3) MOD coord(1,5)返回coord(1,2)。

两个Coord标量: coord(1,3) MOD coord(2,5)返回错误。

两个标量: 12.95 mod 2返回0.95。

两个标量: 12.95 mod 2.1返回0.35。

备注

如果任一容器被映射(即类型为Waveform, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: MOD

另请参阅

a + b (加法), a div b (截短除法), a / b (除法), a * b (乘法)和a - b (减法)。


mode(x)

用来计算输入容器中数据模式的对象。

用途

使用mode(x)，返回容器中的取值模式。模式值是数据中最常见的值。在双模数据(两个数字表示相同的次数)或更高的模式下，mode(x)返回数组容器中取值最低的模式。

在没有模式值的情况下(即每个数字都是唯一的)，返回输入容器中的第一个值。

x输入可以是任何长度和形状。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Real64 Scalar
Waveform | Real64 Scalar

对Coord输入类型，运算在相关变量上完成。

范例

单模: 其中x是数组[2, 1, 12, 11, 2, 33], mode(x)返回2。

双模: 其中x是数组[2, 1, 2, 12, 11, 12], mode(x)返回2。

没有模式: 其中x是数组[3, 2, 1, 11, 12, 33], mode(x)返回3。

备注

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: mode

另请参阅

max(x), mean(x), median(x), min(x), rms(x), sdev(x), 和vari(x).


month(aDate)

返回时间x的年份中月份的对象。

用途

使用month(aDate)把一定值x转换成与一年中的月份对应的1 - 12值形状相同的容器。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

month(dmyToDate(25,12,1991))返回12，表示一年中的第12个月。

备注

month(aDate)返回1-12，而不是0-11。这是VEE中为数不多的基于非零值的函数之一。返回值保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: month

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), now(), Time & Date, wday(aDate)和year(aDate)。


movingAvg (x,numPts)

用来使用相关数据点前面指定数量数据点的平均值平滑输入数据、计算平滑后的数据点的对象。

用途

使用movingAvg(x,numPts)执行与meanSmooth(x,numPts)程序类似的数据平滑操作。该算法计算numPts前面数据点的代数中间值。x输入的形状必须是Array 1D。

允许的x输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

Coord输入类型的独立变量必须等距，即相邻点之间的间隔x必须是常数。只能在相关变量上进行平滑操作(Coord的y数据)。

这种技术更多地表示数据的"历史"视图，因为对数组中的任何点，都只会从以前的点中计算平均值。而在polySmooth(x)和meanSmooth(x,numPts)中，则在有问题的点两侧的点中计算平均值。

范例

如果numPts是5，那么将使用4个前面的点和相关点的平均值，确定平滑的点应该是多少。

备注

忽略输入参数上的映射关系，输出的映射关系与输入参数x相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering
Member: movingAvg

另请参阅

meanSmooth (x,numPts), polySmooth (x), Regression类型和Signal Processing


a * b (multiply)

在两个运算对象上执行乘法运算的对象。

用途

使用a * b把两个容器值相乘。两个容器可以是任何类型和任何形状。如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器，其形状与运算对象相同。

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行乘法运算。

如果其中一个容器是Text，那么另一个容器必须是Int32。Text乘法会把字符串重复Int32值给出的次数。Enums先转换成Text，然后再执行乘法运算。

这个乘法运算在所有数组上执行并行乘法，包括矩阵。对矩阵乘法，参阅函数matMultiply(A,B)。

范例

数组乘以一个标量: [1, 2, 3] * 3返回[3, 6, 9]。

两个数组: [4, 5, 6] * [1, 2, 3]返回[4, 10, 18]。

两个PComplex标量: (2,@45) * (3,@90)返回(6,@135)，Trig Mode设置为Degrees。

两个Coord标量: coord(1,3) * coord(1,5)返回coord(1,15)。

两个Coord标量: coord(1,3) * coord(2,5)返回错误。

文本乘以一个标量: "hello" * 3返回"hellohellohello"。

一个Text数组乘以一个数组: ["hello", "b"] * [3, 2]返回
["hellohellohello", "bb"]。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: *

另请参阅

a + b (加法), a / b (除法), matMultiply (A,B)和a - b (减法)。


NOT a

对一个操作数进行逻辑非操作的对象。

用途

使用NOT来计算一个容器值的逻辑非。该容器可以为任意类型和形状。结果为一个与操作数有相同数据形状的Int32型的数，其取值可为 0 或 1。如果操作数为false(0)，计算结果为1；否则为0。

如果操作数为布尔类型，结果就为与操作数形状相同的布尔值。

对Coord容器，NOT只作用于从变量(最后一个)。

对Complex, PComplex, 和Spectrum 容器，如果任一部分非零,操作数为真（True）。非空的文本为真（True）。Enums会被先转换为Text型，然后在操作。

范例

两个Boolean标量：NOT False 返回True。

一个标量: NOT 3返回1。

一个标量: NOT 0返回1。

一个数组: NOT [-3, 0, 3] 返回 [0, 1, 0]。。

一个PComplex标量: NOT (1,@90)返回0。

一个Complex标量: NOT (0,1) 返回0。

一个Complex标量: NOT (0,0) 返回1。

一个Coord标量: NOT coord(1,3)返回0。

一个Coord标量: NOT coord(1,0)返回1。

一个Text标量: NOT "too"返回0。

一个Text标量: NOT ""返回1。

备注

结果与操作数有相同的映射关系。

注意If/Then/Else对象要求里面的表达式的解为标量或数组，要么全为0，要么全为1。

位置

Device [image] Function & Object Browser

Type: Operators
Category: Logical
Member: NOT

另请参阅

Conditional 和 If/Then/Else。


a != b (not equal to)

a != b (不等于)

在两个运算对象上执行不等于运算的对象

用途

使用a != b确定一个容器的值是否不等于另一个容器的值。两个容器可以是任何类型和任何形状。如果其中一个容器是一个数组，另一个容器必须是相同大小和形状的一个标量或一个数组。结果是值为0或1的标量Int32。如果第一个运算对象不等于第二个运算对象，那么结果值为1；否则值为0。

如果两个运算对象的类型都是Coord，其所有独立变量和相关变量必须相匹配，结果才为1。如果独立变量不匹配，那么会返回一个错误。Complex、PComplex和Spectrum容器的两个部分必须相匹配，运算结果才会返回1。Enums转换成Text进行比较。

数组中两个容器的对应值都相等时，运算才会返回1。

如果两个操作数都为Boolean，结果为与操作数具有相同数据形状的Boolean。

范例

两个Boolean标量：True != False 返回True。

一个标量和一个数组: 3.0 == [3, 3, 3]返回0。

一个标量和一个数组: 3.0 == [3, 1, 3]返回1。

两个arrays: [1, 2, 3] == [1, 2, 4]返回1。

两个PComplex标量: (1,@90) == (1,@85)返回1。

两个Complex标量: (2,3) == (2,4)返回1。

两个Complex标量: (2,3) == (2,3)返回0。

两个Coord标量: coord(1,3) == coord(1,5)返回1。

两个Coord标量: coord(1,3) == coord(2,3)返回错误：Values for independent variables must match。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type: Operators
Category: Comparison
Member: !=

另请参阅

a ~= b (almost equal to), a AND b, a == b (equal to), a > b (greater than), a >= b (greater than or equal to), a < b (less than), a <= b (less than or equal to), NOT a, a OR b, Comparison, a XOR b, Comparator, 和 Conditional.


now()

返回当前时间的对象。

用途

使用now()生成带有当前时间值的Real64标题容器。Real64值是UTC中给出的 00:00 hours 1 January 0001 AD(公元1年1月1日零时)以后的秒数。

范例

now()返回约62.802G。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date
Member: now

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), month(aDate), Time & Date, wday(aDate), 和year(aDate)。


a OR b

在两个运算对象上执行OR逻辑运算的对象。

用途

使用a OR b，确定两个容器的值是否在逻辑上有一个是真(非零)。两个容器可以是任何类型和任何形状。如果其中一个容器是一个数组，另一个容器必须是一个标量或相同大小和形状的数组。结果是形状与运算对象相同的Int32，值为0或1。如果两个运算对象都不是零，那么AND的运算值为1；否则运算值为0。

如果两个运算对象的类型都是Coord，那么其独立变量必须完全匹配，否则会返回错误。AND运算中只考虑相关(最后)变量。

对Complex、PComplex和Spectrum容器，如果任意部分都不是零，那么运算对象的值为真。如果非零，Text的运算值为真。Enums在运算中会转换成Text。

如果两个操作数都为Boolean，结果为与操作数具有相同数据形状的Boolean。

范例

两个Boolean标量：True OR False 返回False。

一个标量和一个数组: 3 OR [3, 3, 3]返回[1, 1, 1]。

一个标量和一个数组: 0 OR [-3, 0, 3]返回[1, 0, 1]。

两个数组: [1, 0, 0] OR [0, 1, (-1)]返回[1, 1, 1]。

两个数组: (1,@90) OR (1,@85)返回1。

两个Complex标量: (0,0) OR (0,1)返回1。

两个Complex标量: (0,1) OR (1,0)返回1。

两个Complex标量: (0,0) OR (0,0)返回0。

两个Coord标量: coord(1,3) OR coord(1,5)返回1。

两个Coord标量: coord(1,3) OR coord(2,3)返回错误。

一个Text标量和一个标量数字: "too" OR  0返回1。

一个Text标量和一个标量数字: "" OR 0返回1，因为一个字符串为空，另一个不是空("0")。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同。返回值的映射关系与运算对象相同，否则会返回错误。

注意If/Then/Else对象要求里面的表达式的解为标量或数组，要么全为0，要么全为1。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Logical
Member: OR

另请参阅

a AND b, NOT a, Comparison, a XOR b, Conditional, 和 If/Then/Else.


ordinal(x)

返回x的序号值的对象。

用途

使用ordinal(x)获得一个容器的序号值。x可以为任意形状。对于整数，实数, Coord, 和 Waveform, 结果与参数的相同且映射关系相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Enum | Int32

对Enum, 结果为一个Int32类型的数，它与x的数据形状相同，它的值为x在Enum中的初始序号。 根据Enum Constant而创建的Enum的序号是从0到n-1,n为该Enum中值的数量。

范例

用排序的字符串 "a", "b", "c" 创建一个Enum常数，并且选择"a"为当前值, ordinal(x)会返回0因为选择的是第一个值。请记住VEE从0开始计数。如果，对上述同一个Enum常数，选择"c"为当前值，那么ordinal(x)就会返回当前选择值的序号 2。

注释

忽略操作数上的映射。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Real Parts
Member: ordinal

另请参阅

Complex Parts, Selection Control, 和 Real Parts。


panelPosition()

输出UserFunction面板位置的对象。

用途

在使用showPanel()显示UserFunction面板时，使用panelPosition()输出面板的位置。输出是Coord，其中包含UserFunction面板左上角的位置(如果面板上有边框和标题区，那么不包括边框和标题区)，即从工作区左上角开始的像素数量。

Open View

必须包括文本panelPosition()。在圆括号内，输入下述参数：

"UFname" - UserFunction的名称。这个名称外面必须使用双引号。这个参数是必填的参数。

可以在panelPosition()对象中添加一个数据输入端，设置UserFunction名称，但必须用输入端名称代替"UFname"。

备注

如果UserFunction没有面板视图或程序中还没有显示面板视图，panelPosition()会返回Coord (0, 53)。

如果目前没有显示UserFunction面板，panelPosition()会返回上次显示的面板位置。

panelPosition()对象是没有输入的情况下初始化的、包含panelPosition()等式的Formula对象。还可以在任何其它Formula对象或表达式中输入panelPosition()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: panelPosition

另请参阅

Call, hidePanel(),
 lockPosition(), panelSize(),
 showPanel(), unlockPosition(),
和UserFunction。


panelSize()

输出UserFunction面板的大小的对象。

用途

在使用showPanel()显示UserFunction面板时，使用panelSize()输出面板的大小。输出是Coord，其中包含用像素表示的UserFunction面板的大小，但不包括边框和标题区的大小(如果面板上有边框和标题区)。

Open View

必须包括文本panelSize()。在圆括号内，输入下述参数：

"UFname" - UserFunction的名称。这个名称外面必须使用双引号。这个参数是必填的参数。

可以在panelSize()对象中添加一个数据输入端，设置UserFunction名称，但必须用输入端名称代替"UFname"。

备注

如果UserFunction没有面板视图或程序中还没有显示面板视图，panelSize()会返回Coord (0, 0)。

如果目前没有显示UserFunction面板，panelSize()会返回上次显示的面板大小。

panelSize()对象是没有输入的情况下初始化的、包含panelSize()等式的Formula对象。还可以在任何其它Formula对象或表达式中输入panelSize()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: panelSize

另请参阅

Call, hidePanel(),
 lockPosition(), panelPosition(),
 showPanel(), unlockPosition(),和 UserFunction。


perm(n,r)

计算n个数中一次选择r个数的排列的对象。

用途

perm(n,r)按下述公式计算n个数中一次选择r个数的排列:

Perm(n, r) = n! / (n - r)!

符号!表示阶乘。n可以为任意形状和大小。底二个参数r必须与n的类型相同或可以转换为n的类型。如果所有的输入参数都为数组，那么它们的形状和大小必须相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

perm(n, r)只可以用于整数操作数，所以计算前都会把所有输入参数转换为Int32。

范例

根据下述公式，perm(10,3) 返回 720
10!/(10-3)! = 10!/7! = 10*9*8 = 720。

根据下述公式，perm(10.4,3.9)返回 5040
10!/(10-4)! = 10!/6! = 10*9*8*7 = 5040。根据将一个实数转换为Int32规则，10.4被转换为10，3.9 被转换为 4。

注释

n和r必须为正数，且n必须比r大。如果两个输入都被映射，它们的映射关系必须相同。如果一个输入是映射的，返回值就会与它有相同的映射关系。如果没有输入是映射的，则输出也是非映射的。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Probability & Statistics
Member: perm

另请参阅

beta(x,y), binomial(a,b), comb(n,r), factorial(n), 和 gamma(x)。


phase(x)

返回PComplex数x的相位的对象。

用途

phase(x)用于获得PComplex型数x的相位。x可以为任意形状。对Complex, PComplex, 和Spectrum类型，phase(x) 返回一个Real64类型的容器，它的值是PComplex的极性相角。(Complex 会先被转换成PComplex。)

允许的输入类型 返回类型

UInt8 | UInt8, 0
Int16 | Int16, 0
Int32 | Int32, 0
Int64 | Int64, 0
Real32 | Real32, 0
Real64 | Real64, 0
Coord | Coord, 0
Waveform | Waveform, 0
Complex | Real64
PComplex | Reail64
Spectrum | Real64

phase(x)返回值得单位是当前的Trig Mode。

范例

phase((1,@45)) 返回 45。

注释

结果保留原映射关系。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Complex Parts
Member: phase

另请参阅

conj(x), im(x), j(x), mag(x), re(x), Real Parts, Build PComplex, Default Preferences, 和 UnBuild PComplex。


poly(x,vec)

poly(x,[a0, a1]), poly(x,[a0, a1, a2]), poly(x,[a0, a1, a2, a3])和poly(x,[a0, a1, ... aN])对象的总称。这些对象返回x的多项式值和vec值。

用途

使用poly(x,vec)生成x数据的多项式结果和vec系数。x可以是任何形状，返回的形状相同。vec必须是一个标量或一个一维数组。poly(x,vec)取vec的要素作为多项式系数，取x作为数据。vec从a0开始，然后是a1，依此类堆，直到vec的长度。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64

多项式公式计算：

a0 + a1*x + a2*x*x + a3*x*x*x + ...

范例

poly([10, 2], [3, 2, 4])得到[423, 23]。

备注

得到的容器中的映射关系与输入容器x相同。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: poly

另请参阅

ramp (numElem, from,thru).


多项式回归

用来把任意度的多项式曲线拟合到(x,y)数据的对象。

用途

使用多项式回归把数据拟合到等式
y = C0 + C1*x + C2*x^2 + ... , 其中x是x坐标，C0和C1等是计算得出的系数。多项式曲线拟合要求在回归对象的Order输入字段上设置多项式的度。

多项式回归对象预计Coord类型的输入数组，并带有一个独立变量，即一个(x,y)对。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。如果输入数据有映射(Waveform, Spectrum或映射的数组)，那么到Coord的转换使用映射信息，生成(x,y)对的x部分。如果输入数据没有映射(如一个数组)，那么会从数组中的位置默示生成(x,y)对的x部分。

Open View Parameters

使用open view上的Fit Type字段把回归类型变成linear, logarithmic, exponential, power curve或polynomial regression。点击这个字段，会出现由不同回归类型组成的列表。

Order输入字段用来设置数据拟合的多项式顺序。多项式拟合顺序必须大于等于1。顺序1的多项式拟合会把数据拟合成直线，结果与linear regression选项相同。

范例

Coord转换范例请参阅Regression。

备注

与回归有关的通用注释请参阅Regression。

位置

Device [image] Regression

然后从对话框上的Fit Type字段中选择相应的Fit Type。

另请参阅

Regression, 指数回归, 线性回归, 对数回归, meanSmooth (x,numPts), movingAvg (x,numPts), polySmooth (x), 功率曲线回归和Build Coord。


polySmooth (x)

使用数据多项式拟合平滑数据的对象。

用途

使用polySmooth(x)平滑数据。四阶多项式拟合到数据上，使用多项式根据曲线拟合计算新的数据点。为进行四阶曲线拟合，将使用5个点：被拟合的数据点两侧各两个，以及数据点本身，要特别注意两个端点。x输入形状必须是Array 1D。

允许的x输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

Coord输入类型的独立变量必须等距，即相邻点之间的间隔x必须是常数。只能在相关变量上进行平滑操作(Coord的y数据)。

备注

使用的方法是取一个5个要素的滑动窗口，对第四次Stirling排列多项式应用公式。参阅Francis Scheid, Schaum数字分析原理和问题概论, McGraw Hill, New York, NY, 1968. ISBN #07-055197-9。

忽略输入参数上的映射关系，输出的映射关系与输入参数x相同。

使用这一技术得到的滤波运算的�频响�是固定的，只抑制数据中噪声最大的部分。如果要求更多的噪声抑制能力，参阅meanSmooth(x,numPts)函数，可以使用这一函数抑制多得多的噪声。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Data Filtering
Member: polySmooth

另请参阅

meanSmooth (x,numPts), movingAvg (x,numPts), Regression 类型和Signal Processing。


Power

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Power存取下面的对象，执行幂函数，如平方根、平方、对数、指数和log 10。

sq(x)

sqrt(x)

cubert(x)

recip(x)

log(x)

log10(x)

exp(x)

exp10(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power

另请参阅

cubert(x), exp(x), exp10(x), log(x), log10(x), recip(x), sq(x), sqrt(x), a + b (加法), a / b (除法), a ^ b (指数), a * b (乘法)和a - b (减法)。


功率曲线回归

用来把功率曲线拟合到(x,y)数据的对象。

用途

使用功率曲线回归把数据拟合到等式y = C0 * x^C1，其中x是x坐标，C0和C1是计算得出的系数。

功率曲线回归对象预计Coord类型的输入数组，并带有一个独立变量，即一个(x,y)对。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。如果输入数据有映射(Spectrum或映射的数组)，那么到Coord的转换使用映射信息，生成(x,y)对的x部分。如果输入数据没有映射(如一个数组)，那么会从数组中的位置默示生成(x,y)对的x部分。

Open View参数

使用open view上的Fit Type字段把回归类型变成linear, logarithmic, exponential, power curve或polynomial regression。点击这个字段，会出现由不同回归类型组成的列表。

范例

Coord转换范例请参阅Regression。

备注

与回归有关的通用注释请参阅Regression。

这个函数不能用于没有映射的数组。没有映射的数组转换成从x=0开始的Coord，不能进行对数函数转换。对数函数用于内部回归计算中。

位置

Device [image] Regression

然后从对话框上的Fit Type字段中选择相应的Fit Type。

另请参阅

Regression, 指数回归, 线性回归, 对数回归, meanSmooth (x,numPts), movingAvg (x,numPts), 多项式回归, polySmooth (x)和Build Coord。


Probability & Statistics

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Probability & Statistics函数，处理随机数字、概率和统计计算等问题。

beta(x,y)

binomial(a,b)

comb(n,r)

erf(x)

erfc(x)

factorial(n)

gamma(x)

logMagDist(x,from,thru,logStep)

magDist(x,from,thru,step)

max(x)

mean(x)

median(x)

min(x)

mode(x)

perm(n,r)

random(low,high)

randomize(x,low,high)

randomSeed(seed)

rms(x)

sdev(x)

vari(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics

另请参阅

beta(x,y), binomial(a,b), comb(n,r), erf(x), erfc(x), factorial(n), gamma(x), logMagDist (x,from,thru, logStep), magDist(x, from,thru, step), max(x), mean(x), median(x), min(x), mode(x), perm(n,r), random (low,high), randomize (x,low,high), randomSeed (seed), rms(x), sdev(x)和vari(x)


product(x)

用来把输入数组的所有要素乘起来的对象。

用途

使用product(x)把输入数组的所有要素乘在一起。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Real64 scalar
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | PComplex Scalar

这个对象的输出是输入容器中包含的所有数据的代数乘积，其形状为Scalar。

范例

如果x是数组[1, 2, 3, 4]，product(x)返回24。

备注

忽略运算对象上的映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: product

另请参阅

a * b (乘法)和sum(x)


programName()

返回目前正在执行的VEE程序名称的对象。

用途

返回目前正在执行的VEE程序的整个路径，包括名称。这个函数没有参数。

备注

programName()对象是在没有输入的情况下初始化的、包含programName()公式的对象。还可以在任何 Formula对象或表达式中输入programName()。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: System Information
Member: programName

另请参阅

installDir, commandLine, Formula


ramp (numElem, from,thru)

产生一个线性渐变数组的对象。

用途

ramp(numElem,from,thru)用于产生一个 Real64型的一维数组，其长度为numElem，其值从from到 thru(包括)线性渐变。numElem必须是标量容器，或可以转换为Int64型且大于0的数。from 和 thru 也必须为Real64或可转换为Real64型标量。

如果from小于thru，渐变为正。否则它自动递减。

范例

ramp(3, 0.5, 0) 返回一个一维数组其值为 [0.5, 0.25, 0]。

ramp(5, 2, 10) 返回一个一维数组其值为 [2, 4, 6, 8, 10]。

注释

返回值没有映射。

产生计算结果的算法为：

Y[I] = from + I*(thru-from/numElem-1)
for I=0..numElem-1

返回数组的最后一个元素其值为thru。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Generate
Member: ramp

另请参阅

Alloc Real64, logRamp (numElem, from,thru), 和 xramp (numElem, from,thru)。


random (low,high)

用来生成低值和高值之间的随机数字的对象。这一函数使用线性叠合算法和48位整数代数运算生成伪随机数字。

用途

使用random(low,high)生成low值和high值之间的伪随机数字。生成的数字位于包括低值、但不包括高值的间隔内，其表示为"[l h)"。l和h输入的形状必须是Scalar。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64

对位于"[l h)"范围内的所有情况，都返回一个Real64 Scalar。

这一函数只输出一个Scalar值。对数组输入使用randomize(x,low,high)函数，会生成由带标度的随机数字组成的数组。

如果l值大于h值，那么返回的随机数字范围位于间隔"(l h]"范围内。

范例

random(0,1)将生成(0.0 1.0)范围内的实数，即包括0.0，但不包括1.0。

备注

random(low,high)将返回"(0.0 1.0)"范围内的一个Real Scalar容器。

另外，每次在程序中使用时或由迭代器对象激活多次时，random(low,high)会返回一个不同的数字。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: random

另请参阅

randomize (x,low,high)和randomSeed (seed)


randomize (x,low,high)

用来随机化[low high)范围中数字输入容器值的对象。生成的数字位于包括low、但不包括high的间隔内，其表示为"[low high)"。这一函数使用线性叠合算法和48位整数代数运算生成伪随机数字。

还可以使用这一对象，随机化位于[low high]范围内的Text输入容器的字符串。

用途

对数字值：

使用randomize(x,low,high)生成low和high(即高值和低值)之间的伪随机数字。输入容器中的所有数据x都用伪随机数字重写。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord, 参阅下面
Waveform | Waveform
Complex | Complex
PComplex | PComplex, 参阅下面
Spectrum | Spectrum, 参阅下面

对PComplex和Spectrum类型，只有数字的幅度位于[low high)范围内。相位在(-PI to PI)范围内是随机的。对Coord类型，只能随机化相关变量。

low输入和high输入的形状必须是Scalar，类型必须可以转换成x的类型。生成的随机数字位于[low high)范围内。

如果low值大于high值，那么返回的伪随机数字范围位于间隔(low high]中。

对字符串值：

为随机化字符串，对Text数据类型的输入值使用randomize(x,low,high)。输入字符串(x输入上的数据容器)将被伪随机顺序的、位于[low high]范围内的ASCII字符组成的输出字符串所重写，其中low是low输入容器中的第一个字符，high是high输入容器的第一个字符。(注意，范围中同时包含 low和high，这与数字值不同。) 输出字符串的长度与输入字符串的长度相同。

low和high的默认值是空格(" ", ASCII 32)和鄂化符号("~", ASCII 126)。

备注
在low或high的输入数据是"" (空字符串)时，字符串使用默认值。

范例

数字范例：

如果x输入上的容器的数据类型是Real64，randomize(x,0,10)将把输入容器x的所有值随机化成(0.0 10.0)范围内的实数，即包括0.0，但不包括10.0。

字符串范例：

randomize("abcdef","a","b")可能会返回"abbaba"。

randomize("abcabcabcab","a","z")可能会返回"pterodactyl"。(只是可能!)

randomize("abcabc","","")可能会返回"Al@z~#"。(在low和high为空字符串时，将使用默认极限-- ASCII 32 - 126。)

randomize("aaaaa","go","stop")可能会返回"smjpg". (在确定范围时只使用low和high中的第一个字符。)

randomize("aaaaa","97","99")返回"99999". (low值和high值被理解为字符串，而不是ASCII十进制值。)

备注

忽略输入参数上的映射关系，输出的映射关系与输入参数x相同。

对数字x输入，randomize(x)将返回一个大小和形状与x相同，但数据在(0.0 - 1.0)内随机化的容器。

对字符串运算，输出的字符串集不能在low = ASCII 32和high = ASCII 126极限范围外定义输出的字符串集合。即随机化字符串中的输出不允许使用32以下和126以上的ASCII字符。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: randomize

另请参阅

random (low,high)和randomSeed (seed).


randomSeed (seed)

用来设置random(low,high)和randomize(x,low,high)函数初始值的对象。

用途

使用randomSeed(s)为random(low,high)和randomize(x,low,high)函数使用的线性叠合算法输入一个随机籽输入点。

籽输入s的形状必须是Scalar，类型必须是Int32或能够转换成Int32。这个函数返回的值是s籽值。

范例

randomSeed(97)初始化伪随机数字算法。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: randomSeed

另请参阅

random (low,high)和randomize (x,low,high)


re(x)

返回复数x实数部分的对象。

用途

使用re(x)提取复数x的实数部分。x可以是任何形状。

允许的输入类型 返回类型

UInt8 | UInt8, 取值相同
Int16 | Int16, 取值相同
Int32 | Int32, 取值相同
Int64 | Int64, 取值相同
Real32 | Real32, 取值相同
Real64 | Real64, 取值相同
Coord | Coord, 取值相同
Waveform | Waveform, 取值相同
Complex | Real64, 复数的实数部分值
PComplex | Real64, 复数的实数部分值
Spectrum | Real64, 复数的实数部分值

PComplex先转换成Complex。

范例

re( (1,2) )返回1。

re(1,@180)，其中Trig Mode用Degrees表示，返回-1。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Complex Parts
Member: re

另请参阅

Complex Parts, conj(x), im(x), j(x), mag(x), phase(x), 和Real Parts。

Build Complex和UnBuild Complex。


Real Parts

Function & Object Browser对话框中Built-in Functions的一个Category 。

用途

使用Real Parts存取下述对象，返回容器的不同部分：

abs(x)

signof(x)

ordinal(x)

round(x)

floor(x)

ceil(x)

intPart(x)

fracPart(x)

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts

另请参阅

abs(x), ceil(x), floor(x), fracPart(x), intPart(x), ordinal(x), round(x), signof(x)和Complex Parts。


recip(x)

返回x的倒数的对象。

用途

recip(x)用于产生一个数的倒数，即用1除以x，x可以为任何形状，返回值的形状与它相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

对于PComplex，recip(x)被定义为对幅度求倒数，相位的符号求反。Complex要先转换为PComplex再用此函数计算。

范例

recip( (5, @45) ) 返回 (0.2, @-45)。

recip( (1,-1)) ) 返回 (0.5, 0.5)。

注释

结果保留原映射关系。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Power
Member: recip

另请参阅

a / b (divide), Power, sq(x), 和 sqrt(x)。


rect(x)

将矩形窗应用于时间序列值的对象。

用途

rect(x)用于对 x 的值进行滤波。它等同于对 x 进行矩形函数的 spectral 变换。它可以消除一个由于输入序列的尾部而产生的干扰和在采样周期信号时它们所代表的潜在的不连续性。输入参数 x 必须为1D数组。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum

如果x是Spectrum, 那么在窗口应用前，使用ifft(x)先把它转换为Waveform。 对于窗口的结果也会使用fft(x)再把它转换成 Spectrum。

范例

rect([1, 1, 1, 1, 1, 1, 1, 1]) 返回 [1, 1, 1, 1, 1, 1, 1, 1].

注释

rect 函数把时域里的所有值都表示为1, 这里0 <= n <= N -1, n是数组里的位置（索引），N是数组的大小。结果是与x类型相同的数组，且映射关系也与x相同（如果有的话）。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Signal Processing
Member: rect

另请参阅

bartlet(x), blackman(x), convolve(a,b), fft(x), hamming(x), 和 hanning(x)。


Regression

一个菜单项。

用途

使用Regression把各类回归等式拟合到数据中。

linear

logarithmic

exponential

power curve

polynomial

备注

所有回归对象都预计Coord类型的输入数组。如果输入数组的类型不是Coord，那么它会试图把输入数组转换成Coord。Coord类型转换遵守下面的标准类型转换规则。如果输入数组没有映射，那么会从数组索引中生成默示的x参数。也就是说，回归必须在(x,y)对上完成。x值从零开始，范围直到n - 1，其中n是数据点数。如果输入数组有映射，那么生成的x数据范围将从映射的低值直到映射的高值。

回归提供拟合到选择的公式的数据数组作为输出。输出数组的点数与输入数据数组相同。它还输出一个由系数组成的数组，这些系数与为每个回归类型导出的常数对应。参阅各个回归类型，确定数据拟合到哪个公式。第三个输出是R-squared或"拟合程度"系数。其范围位于-1和1之间。-1或1表示完全拟合，-1和1之间的数字表示变化的拟合程度。

范例

有一个没有映射的数组输入[10, 20, 30, 40, 50]，其转换成Coord数组：

[ (0, 10), (1, 20), (2, 30), (3, 40), (4, 50) ].

如果输入数组是数组[1, 2, 3, 4, 5]，且其从1映射到2 (如单位为秒)，那么它将转换成Coord数组：

[ (1, 1), (1.25, 2), (1.5, 3), (1.75, 4), (2, 5) ].

位置

Device [image] Regression

另请参阅

指数回归, 线性回归, 对数回归, 多项式回归, 功率曲线回归, meanSmooth (x,numPts), movingAvg (x,numPts)和polySmooth (x)。

Properties (对象)


rms(x)

用来返回输入容器中数据的rms (均方根)值的对象。

用途

使用rms(x)计算输入容器的均方根值。rms值定义为[(The sum of x^2)/N]的平方根，其中N是点数。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Waveform

对Coord输入类型，在相关变量上完成运算。

范例

其中x是数组[1, 2, 3, 4, 5, 11, 12, 13, 14, 34]， rms(x)返回13.319159。

备注

忽略运算对象上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: rms

另请参阅

max(x), mean(x), median(x), min(x), mode(x), sdev(x)和vari(x)。


rotate(x, numElem)

用于循环移位一个数组中元素的对象。

用途

rotate(x,n)用于循环移动输入数组x中的元素n个位置。x可以为任何大小和形状。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum
Text | Text

输入参数n必须为Int32类型或可以转换为Int32型的标量。如果循环移位数n为正值，循环移位的方向为沿数组向下（向前）。比如，如果 n 是 2, 那么数组的第一个元素就会被移到第三位(x[2])，第二个元素会被移到第四位(x[3])，其他以此类推。 如果n为负值，数组元素就会往上移(向后)。

如果循环移位数大于数组中元素的个数，那么移位的次数通过用数组元素个数对循环移位次数取模来得到。比如，如果输入数组有5个元素，但要移动13次，实际的移动次数为3(13 MOD 5 = 3)。

范例

rotate(x,5) 把输入数组的所有元素都向右移动5个位置。

rotate(x,15), 如果输入数组有15个元素，什么都不做因为所有元素有被移回原来的位置。

rotate([1, 2, 3, 4, 5], 1) 返回 [5, 1, 2, 3, 4].

注释

当执行循环移位操作时，可将数组视为一个循环列表，即数组中最后一个元素与第一个元素相连。当数组元素移到数组末尾时，它就会返回到数组的开始处。比如，A为一个长度为10的数组，rotate(A,5)会将数组中的第10个数移到第五位。

忽略输入参数的映射且输出结果与参数x有相同的映射关系。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Array
Member: rotate

另请参阅

concat(x,y) 和 init(x,val)。


round(x)

返回x的四舍五入值的对象。

用途

使用round(x)获得容器四舍五入到最近整数的值。x可以是任何形状。round(x)函数返回距x最近的整数(采用相同的类型)。分界线是0.5，超过0.5的进一位。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

round([23.0, 23.1, 23.9, 23.5, (-23.5)])返回
[23, 23, 24, 24, -23]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: round

另请参阅

abs(x), ceil(x), Complex Parts, floor(x), fracPart(x), intPart(x)和Real Parts。


savePanelImage(UFName, fileName, numColors)

使用numColors的像素深度，把名为UFName的UserFunction的面板图像保存到文件 fileName中。

用途

使用savePanelImage(UFName, fileName, numColors)以程序化方式把一个VEE UserFunction面板绘制成标准图像文件，在报告中可以使用VEE UserFunction面板。savePanelImage函数中不支持UserObject面板。

在重复运行程序时，将重写图形文件，而不会事先通知用户，除非改变fileName。

Open View

这一函数包括三个参数；只有UFName是必填参数：

"UFName" - (必填) UserFunction标题栏的名称。这个参数是必填参数。也可以使用特殊名称"Execution Window" (输入要和这里所示的内容完全一样)代替"UFName"。在这个名称外面必须有双引号。

"fileName" (可选) 绘制的图像的目标文件名，可以包括目的驱动器和目录。在这个名称外面必须有双引号。默认文件名使用UFName的基本名称。如果UFName是Execution Window，那么默认文件名将是Execution。默认目的地是VEE默认工作目录，在标准VEE安装中是"C:\My Documents"。

fileName的文件扩展名确定输出文件的图形格式。默认的图形格式是JPEG。支持的格式包括：

.bmp - Bitmap

.jpg/.jpeg - 联合照相专家小组(JPEG)

numColors (可选) 颜色深度，指明每个像素的最大颜色数量。这个数字是2的幂数 (2, 4, 8, ... 2M)。默认值为256。

备注
numColors只适用于位图图形文件(.bmp)。如果指定的数字较小，那么会缩小得到的文件容量，降低图像的清晰度。

范例

下面的范例绘制名为my_userfunc的本地UserFunction的图像，使用可选参数的默认值编写一个文件。这个文件在VEE当前工作目录中另存为my_userfunc.jpeg。

savePanelImage("my_userfunc")

下面的范例与上一个范例类似，但表达式将在当前状态下保存Execution Window。

savePanelImage("Execution Window")

下面的范例绘制名为someUF的本地 UserFunction的图像，使用JPEG格式在目的目录d:\tmp\somedir中写入一个名为myimage.jpeg的文件。

savePanelImage("someUF", "d:/tmp/somedir/myimage.jpeg")

下面的范例绘制名为someUF的本地UserFunction的图像，使用JPEG格式在目的目录d:\tmp\somedir中写入一个名为myimage.bmp的文件。它使用每个像素16色写入文件，而不是默认的256色。

savePanelImage("someUF", "d:/tmp/somedir/myimage.bmp", 16)

下面的范例绘制导入的UserFunction named statusPanel的图像，它位于lib1库中。它使用JPEG格式在/usr/lib/veepanels目录中写入一个名为status.jpeg的文件。

savePanelImage("lib1.statusPanel", "/usr/lib/veepanels/status.jpeg")

备注

savePanelImage()函数在为三个参数中每个参数预先配置一个数据输入的Formula对象中创建。可以在任何其它Formula对象中输入savePanelImage()函数。

通过添加名为Formula的控制输入，可以以程序化方式输入整个表达式。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: savePanelImage

另请参阅

Call, Execution Window, hidePanel(), showPanel()和UserFunction.


sdev(x)

一个用于返回输入容器中数据的标准偏差的对象。

用途

sdev(x)用于计算输入容器中数据的标准偏差。sdev(x)被定义为vari(x)的平方根。输入参数x可以为任意大小和形状。

允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Int64 | Real64 Scalar
Real32 | Real32 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar

对Coord类型的输入，操作只作用于从属变量。

范例

x为[1, 2, 3, 4, 5, 11, 12, 13, 14, 34], sdev(x) 返回 9.50789.

注释

结果中保留映射关系

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Probability & Statistics
Member: sdev

另请参阅

max(x), mean(x), median(x), min(x), mode(x), rms(x), 和 vari(x)。


setBit(x,n)

为x返回第n个位设为1的对象。

用途

使用setBit(x,n)把容器x的某个二进制位设为1。x可以是任何形状。如果x的类型是Real32, Real64, Coord或Waveform，那么在操作前它会转换成Int32。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

n必须是Int32类型或可以转换成Int32类型，且取值位于0 - 31(含)之间的容器。n必须是标量，或与x形状相匹配。

范例

setBit(8,0)返回9。

setBit(8.24,0.9) 也返回9。

备注

返回值的映射关系与x参数相同。

最无效的位在右面，最有效的位在左面。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bitwise
Member: setBit

另请参阅

bit(x,n), bits(str), Bitwise和clearBit(x,n)。


showPanel()

显示UserFunction面板的对象。

用途

使用showPanel()显示UserFunction面板，直到执行hidePanel()或程序运行结束。showPanel()允许在需要时启动一个状态面板。为使用showPanel()，不得在UserFunction上选择Show Panel on Execute。

Open View

存在三个版本的showPanel()对象，显示使用的语法。必须在编辑字段中包括文字showPanel()。在圆括号中，可以在任何对象中输入下述参数：

"UFname" - UserFunction的名称，在这个名称外面必须有双引号。这个参数是必填参数。

x, y - UserFunction面板左上角的位置(用像素表示)(包括存在的边框和标题栏区域)。这个参数是可选的；如果没有指定x和y坐标，那么面板显示在工作区的中心。

width, height - 面板的大小(用像素表示)。这个参数是可选的；如果指定width和height，那么必须指定x, y参数。如果没有指定width和height，那么会使用当前面板大小。width和height设置从面板视图的右侧和下侧增删空间，如果存在标题栏和边框，那么也包括标题栏和边框。

在用输入端名称替换参数时，可以在showPanel()对象中添加数据输入端，设置任何参数。

备注

showPanel()不运行UserFunction，它只显示Panel View。为查看面板，运行UserFunction，先使用showPanel()，然后调用UserFunction。

如果您只想在UserFunction运行时查看Panel View，应从UserFunction Properties窗口中选择Show Panel on Execute，而不是使用showPanel()。

showPanel()对象是在没有输入的情况下初始化的、包含showPanel(...)公式的Formula 对象。还可以在支持表达式的任何对象中输入showPanel() (和相关参数)，如Formula和Sequencer对象。

可以通过控制端输入整个showPanel()等式。

VEE没有把弹出面板的位置限定在工作区的大小，可以指定�屏幕外�(超出看得见的窗口)的x和y。

只有在程序运行时才显示使用showPanel()显示的所有面板。

一次只能显示一个UserFunction面板拷贝。如果使用相同的UserFunction名称多次调用showPanel()，那么将显示最后调用的面板，隐藏以前调用的面板。

为查找显示的面板名称，在面板上点击鼠标右键，会弹出面板名称。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Panel
Member: showPanel

另请参阅

Call, hidePanel(),
 lockPosition(), panelPosition(),
 panelSize(), unlockPosition()和UserFunction.


Signal Processing

Function & Object Browser对话框上的一个Built-in Functions类别。

用途

使用Signal Processing，存取应用到某些函数一维数组(UInt8, Int16, Int32, Real32, Real64, Complex, PComplex, Waveform, Spectrum)及两维(两个字段)坐标列表的多个信号处理函数。

fft(x)

ifft(x)

convolve(a,b)

xcorrelate(a,b)

bartlet(x)

hamming(x)

hanning(x)

blackman(x)

rect(x)

备注

Signal Processing下的Built-in Functions适用于表示有序的、间隔相等的数据值组成的一维数组。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing

另请参阅

bartlet(x), blackman(x), convolve(a,b), fft(x), hamming(x), hanning(x), ifft(x), rect(x)和xcorrelate (a,b)。


signof(x)

返回x的符号的对象。

用途

使用signof(x)获得容器的符号。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Int32
Real64 | Int32
Coord | Int32
Waveform | Int32

返回值是-1, 0或+1，具体取决于x值是负数、是零还是正数。如果x是负数，那么返回-1；如果x是零，那么返回0；如果x是正数，那么返回+1。

范例

signof([23, 0, -1])返回[1, 0, -1]。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Real Parts
Member: signof

另请参阅

abs(x), Complex Parts和mag(x)。


sin(x)

返回x的正弦的对象。

用途

使用sin(x)，生成x的正弦数据。假设x采用当前Trig Mode单位。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

sin([0, PI/2])返回[0, 1]，其中Trig Mode设为Radians。

sin((1, @PI))返回(0.84147, @3.14159)，其中Trig Mode设为Radians。

备注

结果中保留映射关系。使用设置成Radians之外的值的Trig Mode可能会在第12个有效位以后导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: sin

另请参阅

asin(x), cos(x), tan(x), sinh(x), Trig和默认首选项。


sinh(x)

返回x的双曲正弦的对象。

用途

使用sin(x)，生成x的正弦数据。假设x采用当前Trig Mode单位。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

sinh(1.2) 返回 1.509。

注释

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Trig
Member: sinh

另请参阅

asinh(x), cosh(x), Trig, sin(x), 和 tanh(x)。


sort(x, direction, field)

sort(x, 方向, 字段)

对数据数组分类的函数(任意数据类型)。

用途

在Formula对象中使用sort函数，对输入x上的数据数组分类。它支持所有数据类型，在默认情况下，会按升序对数据分类。如果在Formula对象中使用sort，那么语法如下：

sort(x [,方向[,字段] ] )

其中:

方向(可选)指定分类方向。默认值是升序，任何非零值都表示升序。取值为0表示按降序分类。

字段(可选)指定按哪个字段对数组分类：

对实数、整数和Text数据类型，忽略这个参数。

对Complex数据类型，指定0或"real"对实数字段分类。指定1或"imag"对虚数字段分类。必须指定所有这三个参数。

对PComplex数据类型，指定0或"mag"对幅度字段分类。指定1或"phase"对相位字段分类。必须指定所有这三个参数。

对Coordinate数据类型，在默认状态下数组将根据相关字段分类(x-y对中的"y", x-y-z三元组中的"z")。指定0或"x"按x字段分类，指定1或"y"按y字段分类，依此类推。(注意对Coordinate数据类型，即使可能会改变输入端名称，但字段名称一直是x, y, z, w, v, u, t, s, r, q。)

对Record数据类型，在默认情况下将根据第一个字段对数组分类。也可以按数字(0, 1, 等等)或按名称("operator", "date", 等等)指定名称。

范例

sort(x)将以升序对实数数组x分类。

sort(x,0)将以降序对实数数组x分类。

sort(x,1,"real")或sort(x,1,0)将以升序按实数字段对Complex数组x分类。

sort(x,0,"phase")或sort(x,0,1)将以降序按相位字段对PComplex数组x分类。

sort(x,1,"A")或sort(x,1,0)将以升序按"A"字段对Coordinate数组x分类。

sort(x,1,1)将以升序按第二个字段对Record数组x分类。

备注

文本数据按标准ASCII字符代码顺序分类。因此，大写字母位于小写字母之前。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: sort

另请参阅

Formula


sq(x)

返回x平方的对象。

用途

sq(x)计算x的平方(x乘以x)。x可以为任意形状，返回同样的形状。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

sq([1, 4]) 返回 [1, 16]。

sq((1,2)) 返回复数 (-3,4)。

注释

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type: Built-in Functions
Category: Power
Member: sq

另请参阅

Power 和 sqrt(x)。


sqrt(x)

返回x平方根的对象。

用途

sq(x)计算x的平方根。x可以为任意形状，返回同样的形状。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

对于PComplex，sqrt(x)被定义为幅度的平方根和相位的一半。Complex型输入要先转换为PComplex再计算。

范例

sqrt( (16, @90) ) 返回 (4, @45)。

sqrt( (1,1) ) 返回 (1.1, 0.455)。

sqrt([4, 9, 64]) 返回 [2, 3, 8]。

注释

结果中保留映射关系。.

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Power
Member: sqrt

另请参阅

cubert(x), a ^ b (exponent), Power, 和 sq(x)。


Statistics

参阅Probability & Statistics。


strDown(str)

把一个字符串中的所有大写字母字符变成小写字符的对象。

用途

使用strDown(str)把输入字符串str的大小写变成小写。所有大写字母字符("A" - "Z")转换成相应的小写字符("a" - "z")。非字母ASCII字符保持不变。

范例

strDown("ABCdefg%+#")返回"abcdefg%+#"

strDown("123456")返回"123456"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strDown

另请参阅

strRev(str), strTrim (str,trimlist), strUp(str)和String。


strFromLen (str,from,len)

返回指定长度和起点的子字符串的对象。

用途

使用strFromLen(str,from,len)从输入字符串str中返回一个子字符串，开始位置是索引位置from，长度是以字节为单位的len。如果from = 0，那么子字符串从输入字符串开头开始。使用Base 0索引字符串。

备注

如果len的值小于等于0，那么会返回一个空字符串。

如果from的值大于输入字符串str的长度，那么会返回一个空字符串。

如果len的值大于输入字符串str的长度，那么返回的字符串会在输入字符串结束时停止。

如果输入字符串是一个由字符串组成的数组，那么输入数组的每个要素作为单独的字符串运算。返回值是一个字符串数组。

范例

strFromLen("Now is the time",0,6)返回"Now is"

strFromLen("Now is the time",6,9)返回" the time"

strFromLen("Now is the time",0,30)返回"Now is the time"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strFromLen

另请参阅

strFromThru (str,from, thru), strPosChar (str,char), strPosStr (str1,str2)和String。


strFromThru (str,from, thru)

返回指定起点和终点的子字符串的对象。

用途

使用strFromThru(str,from,thru)从输入字符串str中返回一个子字符串，开始位置是索引位置from，结束位置是索引位置thru。如果from = 0，那么子字符串从输入字符串开头开始。使用Base 0索引字符串。

备注

from或thru负数值转换成0。

大于输入字符串str长度的from或thru值会转换成输入字符串中最后字符的索引位置。

如果from的值大于输入字符串str的长度或大于thru，那么会返回一个空字符串。

如果输入字符串是一个由字符串组成的数组，那么输入数组的每个要素作为单独的字符串运算。返回值是一个字符串数组。

范例

strFromThru("Now is the time",0,6)返回"Now is "

strFromThru("Now is the time",0,0)返回"N"

strFromThru("Now is the time",6,9)返回" the"

strFromThru("Now is the time",0,30)返回"Now is the time"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strFromThru

另请参阅

strFromLen (str,from,len), strPosChar (str,char), strPosStr (str1,str2)和String。


String

Function & Object Browser对话框中Built-in Functions(内置函数)的一个Category (类别)。

用途

使用String函数对字符串数据执行下述运算：

strDown(str)

strFromLen(str,from,len)

strFromThru(str,from,thru)

strLen(str)

strPosChar(str,char)

strPosStr(str1,str2)

strRev(str)

strTrim(str)

strUp(str)

intToChar(a)

charToInt(a)

备注

所有字符串函数都能在作为字符串数组的输入上执行运算。其结果是文本或数字数组。运算在输入字符串数组的每一个要素上完成。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String

另请参阅

charToInt(a), intToChar(a), strDown(str), strFromLen (str,from,len), strFromThru (str,from, thru), strLen(str), strPosChar (str,char), strPosStr (str1,str2), strRev(str), strTrim (str,trimlist)和strUp(str)。


strLen(str)

用来确定字符串长度(单位为字节)的对象。

用途

使用strLen(str)确定输入字符串str的长度。返回值是一个Int32 Scalar，给出存在的字节数量。每个日文字符和其它16位字符算作两个字节。

备注

如果输入字符串是一个数组，那么将在输出数组中返回每个要素的长度。

范例

strLen("ABCdefg%+#") 返回10

strLen("123456") 返回6

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strLen

另请参阅

String


strPosChar (str,char)

返回字符列表char中的任何字符在输入字符串str内部的索引的对象。

用途

使用strPosChar(str,char)返回字符串列表char中的任何字符在输入字符串str内部第一次发生的索引。字符串使用Base 0索引。

备注

如果一个以上的列明字符发生一次以上，那么只返回发现的第一个列明字符的索引。

如果输入字符串str中没有找到char中列明的字符，那么会返回值-1。

如果str或char是空字符串，那么会返回值-1。

注意，字符匹配区分大小写。

如果输入字符串是一个数组，那么作为单独的字符串搜索数组的每个要素。字符串要素中的字符位置放到一个输出数组中。

范例

strPosChar("Now is the time","Nwme")返回0

strPosChar("Now is the time","nwme")返回2

strPosChar("Now is the time","x yz ")返回3

strPosChar("Now is the time","")返回-1

strPosChar("Now is the time","xyz")返回-1

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strPosChar

另请参阅

strFromLen (str,from,len), strFromThru (str,from, thru), strPosStr (str1,str2)和String。


strPosStr (str1,str2)

返回字符串str2在字符串str1内部的索引的对象。

用途

使用strPosStr(str1,str2)返回字符串str2在字符串str1内部第一次发生的索引，也就是说，str2在str1内部开始的索引位置。使用Base 0索引。

备注

如果str2在str1中发生一次以上，那么只返回第一次发生的索引。

如果在str1内部没有找到发生str2，那么会返回值-1。

如果str1或str2是空字符串，那么会返回值-1。

注意，字符匹配区分大小写。

如果输入字符串是一个数组，那么作为单独的字符串搜索数组的每个要素。字符串要素中的字符位置放到一个输出数组中。

范例

strPosStr("Now is the time","Now")返回0

strPosStr("Now is the time","is the")返回4

strPosStr("Now is the time","")返回-1

strPosStr("Now is the time","is The")返回-1

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strPosStr

另请参阅

strFromLen (str,from,len), strFromThru (str,from, thru), strPosChar (str,char)和String。


strRev(str)

用来颠倒一个字符串的顺序的对象。

用途

使用strRev(str)颠倒字符串中字符出现的顺序。

备注

如果输入字符串是一个数组，那么返回值是每个要素颠倒的一个字符串数组。

范例

strRev("ABCdefg%+#")返回"#+%gfedCBA"

strRev("123456")返回"654321"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strRev

另请参阅

strDown(str), strTrim (str,trimlist), strUp(str)和String。


strTrim (str,trimlist)

用来从字符串前面和后面去掉空格和制表符的对象。

用途

使用strTrim(str)对象从输入字符串str中去掉前面和后面的空格和制表符。它去掉第一个非空格/非制表符前面的或最后一个非空格/非制表符后面的所有空格和制表符。在Formula对象中，完整的语法是：

strTrim(str [,trimlist] )

使用strTrim(str,trimlist)从trimlist中包含的str中去掉任何字符。注意，只有在其是str中前面的字符或后面的字符时才会去掉这些字符。

备注

通过在拥有两个输入str和trimlist的Formula对象中使用这个函数，可以把这个函数的语法扩展到strTrim(str,trimlist)中。在这种情况下，trimlist字符串中列出的任何字符，不管是前面的还是后面的，都从str输入字符中去掉。

如果输入字符串是一个数组，那么返回值是每个要素都被去掉空格和制表符的一个字符串数组。

范例

strTrim(" ABCdefg%+#")返回"ABCdefg%+#"

strTrim("eeeABCdefg%+#","eg#")返回"ABCdefg%+"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strTrim

另请参阅

strDown(str), strRev(str), strUp(str)和String。


strUp(str)

用来把一个字符串中的所有小写字母字符变成大写字符的对象。

用途

使用strUp(str)把输入字符串str的大小写变成大写。所有小写字母字符("a" - "z")转换成相应的大写字符("A" - "Z")。非字母ASCII字符保持不变。

备注

如果输入字符串是一个数组，那么返回值是每个要素都作为单独字符串处理的一个字符串数组。

范例

strUp("ABCdefg%+#")返回"ABCDEFG%+#"

strUp("123456")返回"123456"

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: String
Member: strUp

另请参阅

strDown(str), strRev(str), strTrim (str,trimlist),和String.


a - b (subtract)

a - b (减法)

在两个运算对象上执行减法代数运算的对象。

用途

使用a - b从另一个容器中减去一个容器的值。两个容器可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Coord | Coord
Waveform | Int32
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

如果其中一个容器是数组，另一个数组必须是标量或相同大小和形状的数组。结果是最高类型的容器。

如果两个运算对象的类型都是Coord，它们必须有完全匹配的独立变量，否则会返回错误信息。只能在相关(最后)变量上执行乘法运算。

范例

数组减一个标量: [1, 2, 3] - 3返回[-2, -1, 0]。

标量减一个数组: 3 - [1, 2, 3]返回[2, 1, 0]。

两个数组: [4, 5, 6] - [3, 2, 1]返回[1, 3, 5]。

两个Complex标量: (2,4) - (1,3)返回(1,1)。

两个Coord标量: coord(1,3) - coord(1,5)返回coord(1,-2)。

两个Coord标量: coord(1,3) - coord(2,5)返回错误。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任意其它类型的映射数组)，另一个容器必须没有映射或具有完全相同的映射。返回值的映射关系将与运算对象相同；否则会返回错误。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Arithmetic
Member: -

另请参阅

a + b (乘法), a / b (除法)和a * b (乘法)。


sum(x)

用来加总(累加)输入数组所有要素的对象。

用途

使用sum(x)把输入数组的所有要素加在一起。x输入可以是任何大小和形状。

允许输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real64
Coord | Real64 Scalar
Waveform | Real64 Scalar
Complex | Complex
PComplex | PComplex
Spectrum | PComplex
Text | Text Scalar

这个对象的输出（对数字类型）是输入容器中包含的所有数据的算术和，并且是一个Scalar。对Text类型输入，输出是一个Scalar Text容器，包含联在一起的共同构成一个大字符串的所有Text要素。

对Text字符串，sum(x)对象遵守的规则与二元运算符+相同。

范例

x是一个数组[1, 2, 3, 4]，sum(x)返回10。

x是一个数组["first", "second", "third"]，sum(x)返回"firstsecondthird"。

备注

忽略运算对象上的映射关系。

注意对文本输入，concat(x,y)和sum(x)函数之间的区别。在所有情况下，concat(x,y)都创建一个 Array 1D 。sum(x)函数则简单地连接所有文本字符串，构成一个大的输出字符串。也就是说，如果x是Scalar Text 值"a" ，y是Scalar Text 值"b"，那么concat(x,y)会得到Array 1D ["a","b"]。而sum(["a","b"])则返回Scalar容器及其中的Text 值"ab" 。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: sum

另请参阅

a + b (加法)，concat(x,y)，和product(x)。


tan(x)

返回x的正切的对象。

用途

使用tan(x)生成x数据的正切。x可以是任何形状，返回的形状相同。x假设采用当前的Trig Mode单位。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

tan([0, 45])返回[0, 1]，其中Trig Mode设为Degrees。

tan((1, 2))返回(33.8128m, 1.01479)，其中Trig Mode设为Radians。

tan((3, @PI/2))返回(0.99505, @1.57079)，其中Trig Mode设为Radians。

备注

结果中保留映射关系。把Trig Mode设为Radians之外的任何值可能会在第12个有效位以后会导致精度误差。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: tan

See Also

atan(x), atan2(y,x), cos(x), cot(x), sin(x), tanh(x), Trig 和默认首选项。


tanh(x)

返回x的双曲线正切的对象。

用途

使用tanh(x)生成x数据的双曲线正切。x可以是任何形状，返回的形状相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform
Complex | Complex
PComplex | PComplex
Spectrum | Spectrum

范例

tanh(0.6)返回0.537。

备注

结果中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig
Member: tanh

另请参阅

atanh(x), cosh(x), Trig, sinh(x)和tan(x)。


Time & Date

Function & Object Browser对话框中Built-in Functions的一个Category(类别)。

用途

使用Time & Date 存取下面的对象，执行日期和时间转换：

now()

wday(aDate)

mday(aDate)

month(aDate)

year(aDate)

dmyToDate(d,m,y)

hmsToSec(h,m,s)

hmsToHour(h,m,s)

备注

now()和dmyToDate(d,m,y)函数将输出从Epoch（公元0001年1月1日零时）起经过的秒数，并作为时间存储在UTC （通用协调时间）中。也就是说，将在您的当地时间与GMT （格林威治时间）之间应用校正。由于wday()、mday()、month()和year()函数预计输入是UTC类型的时间（从now()、dmyToDate,()、Time Stamp 或Date Time常数），因此在进行计算前它们将先去掉校正。

hmsToSec(h,m,s)和hmsToHour(h,m,s)只转换到增量（经过的）时间，不应用任何UTC校正。您可能会注意到，在字母画面上显示的其中一个函数的输出（以某种Time格式）存在着时差，即您所在的时区与UTC 之间的时间差。您将需要在处理的字母Time Stamp 画面上使用Delta Time选项来显示这一信息。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Time & Date

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), month(aDate), now(), wday(aDate), year(aDate)和 To String。


totSize(x)

返回容器总长度的Int32值的对象。

用途

在Formula对象中使用totSize(x)函数，确定输出x上的容器大小。如果x是一个标量或只有一个要素的数组，totSize(x)会返回取值1。

范例

对x= scalar: totSize(x)返回1。

对x= [1]: totSize(x)返回1。

对x= [1, 2]: totSize(x)返回2。

对x= [ [1, 2] ,[3 ,4] ]: totSize(x)返回4。

备注

totSize(x)函数执行的功能与TotSize pin in the Get Values对象相同。

这个对象不接受零要素数组。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Array
Member: totSize

另请参阅

Formula和Get Values。


transpose(x)

用来计算2D数组(矩阵)转置矩阵的对象。

用途

使用transpose(x)返回矩阵的转置矩阵。x输入必须是任何二维数组，不一定是方阵。

允许的输入类型 返回类型

UInt8 | UInt8
Int16 | Int16
Int32 | Int32
Real32 | Real32
Real64 | Real64
Complex | Complex
PComplex | PComplex
Text | Text

范例

如果x是方阵[ [1, 2], [3, 4] ]，transpose(x)返回
[ [1, 3], [2, 4] ].

如果x是矩阵[ [1, 2, 3], [4, 5, 6] ]，transpose(x)返回
[ [1, 4], [2, 5], [3, 6] ]。

备注

忽略运算对象上的映射关系，输出容器的映射关系转置。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Matrix
Member: transpose

另请参阅

det(x), identity(x)和inverse(x)。


三元运算符

一个对象，如果条件为真，返回一个表达式的结果；如果条件为假，则返回另一个表达式的结果。

用途

在Formula对象中使用三元运算符的语法如下：

(条件? 表达式 : 表达式)

如果条件为真，那么返回第一个表达式的结果。

如果条件为假，那么返回第二个表达式的结果。

三元运算符必须用于Formula对象或获取表达式的其它对象内部。

范例

如果A<10为真，(A<10 ? A*2 : A*3)返回A*2的结果；如果A<10为假，则返回A*3的结果。

备注

要求用圆括号括起来。

三元运算符可以用来设置"IF/THEN/ELSE"条件测试。其语法与C语言三元运算符相同。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Miscellaneous
Member: (a ? b : c)

另请参阅

逗号运算符, Formula, If/Then/Else和各种运算符。


Trig

Function & Object Browser对话框上Built-in Functions的一个Category。

用途

使用Trig存取下述对象，在数据上执行三角函数：

acos(x)

acosh(x)

acot(x)

acoth(x)

asin(x)

asinh(x)

atan(x)

atan2(y,x)

atanh(x)

cos(x)

cosh(x)

cot(x)

coth(x)

sin(x)

sinh(x)

tanh(x)

tan(x)

备注

所有Trig操作都以Radians进行。如果Trig Mode设为Degrees，那么所有容器必须从Degrees转换成Radians之后，才能执行函数。因此，为实现最佳性能，应使用设为Radians的Trig Mode。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Trig

另请参阅

acos(x), acosh(x), acot(x), acoth(x), asin(x), asinh(x), atan(x), atan2(y,x), atanh(x), cos(x), cosh(x), cot(x), coth(x), sin(x), sinh(x), tanh(x), tan(x)和默认首选项。


typeName(x)

返回x的数据类型的对象。

用途

使用typeName(x)报告容器中目前的数据类型。X可以是任何大小和形状。作为文本返回下面其中一个名称：

VEE 6 模式 所有其他模式

Uint8 | Uint8
Int16 | Int16
Int32 | Int32
Int64 | Int64
Real32 | Real32
Real64 | Real
Complex | Complex
PComplex | PComplex
Text | Text
Enum | Enum
Coord | Coord
Waveform | Waveform
Spectrum | Spectrum
Record | Record
Object | Object

范例

x是一个Complex数组，
typeName(x)返回Complex。

备注

如果x声明为Variant，typeName(x)会返回x内容的数据类型。例如，如果x是一个Variant，目前包含一个Int32，那么typeName(x)返回Int32。

位置

Location: Device [image] Function & Object Browser

Type: Built-in Functions
Category: Type Conversion

另请参阅

isVariant(x), isVariantBool(x), isVariantCurrency(x), isVariantDate(x), isVariantEmpty(x), isVariantError(x), isVariantNull(x)。


unlockPosition()

允许用户移动目前正在显示的UserFunction面板的对象。

用途

在使用showPanel()显示UserFunction面版，且已经使用lockPosition()或已经复选Lock Panel Position属性，以防止用户移动面板时，使用unlockPosition()允许用户移动面板。

Open View

必须包括文本unlockPosition()。在圆括号中，输入下述参数：

"UFname" 朥serFunction的名称，名称外面必须有双引号。这个参数是必填的参数。

可以在unlockPosition()对象中添加一个数据输入端，设置UserFunction名称，但必须用输入端名称替换"UFname" 。

备注

unlockPosition()对象是在没有输入的情况下初始化的、包含unlockPosition()公式的Formula对象。还可以在任何其它Formula对象或表达式中输入unlockPosition()。

位置

Device [image] Function & Object Browser

Type： Built-in Functions
Category： Panel
Member： unlockPosition

另请参阅

Call, hidePanel(),
 lockPosition(), panelPosition(),
 panelSize(), showPanel(),
 和
 UserFunction。


vari(x)

返回输入容器中数据的方差的对象。.

用途

vari(x)用于计算容器中数据的方差。x可以为任意大小和形状。

   允许的输入类型 返回类型

UInt8 | Real64 Scalar
Int16 | Real64 Scalar
Int32 | Real64 Scalar
Int64 | Real64 Scalar
Real32 | Real64 Scalar
Real64 | Real64 Scalar
Coord | Real64 Scalar
Waveform | Real64 Scalar

对于Coord型输入，该操作作用于从属变量。

vari(x)被定义为：
[The SUM of (Xi - Xmean)^2] divided by (numPts - 1)
这里 Xi单个数据点，mean数据点的平均值，numPts是输入数组 x 中元素的个数。

范例

数组 x 为 [1, 2, 3, 4, 5, 11, 12, 13, 14, 34]，
vari(x) 返回 90.4。

注释

忽略操作数上的映射。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Probability & Statistics
Member: vari

另请参阅

max(x), mean(x), median(x), min(x), mode(x), rms(x), 和 sdev(x)。


wday(aDate)

返回时间x的周几的对象。

用途

使用wday(aDate)将给定时间x转换成与值0 ?6形状相同的容器，对应一周的工作日。0值对应周日，1对应周一，依此类推，6对应周六。x可以是任意形状，返回的形状相同。

允许输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Int64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

wday(dmyToDate(2,1,2003))返回4，所以Jan 2, 2003是周四。

备注

返回值中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions

Category: Time & Date

Member: wday

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), month(aDate), now(), Time & Date和year(aDate).


xcorrelate (a,b)

用来交叉相关两个数据数组的对象。

用途

使用xcorrelate(a,b)计算两个1D数组a和b的离散交叉相关。结果是相同类型及大小为(Na+Nb)-1的数组，其中Na是输入数组a的大小，Nb是输入数组b的大小。

输入值a和b必须是Array 1D，其大小不一定相同。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

返回类型与输入的最高类型相同。得到的值没有归一化。

范例

xcorrelate([1, 2, 3, 4, 5],[3, 2, 1])返回[1, 4, 10, 16, 22, 22, 15]。

备注

输入a和b必须表示等间隔数据。此外，a的任意两个值之间的间隔必须与b的任意两个值之间的间隔相同。对两个没有映射的数组，假设间隔总为1。对映射的数组，间隔是(Xmax-Xmin)/N，其中Xmax和Xmin对映，N是数组的大小。在一个输入有映射关系，而另一个数组没有映射时，没有映射的输入假设取样频率与有映射的输入相同。得到的值从未归一化为任何标度系数。

注意xcorrelate(a,b)算法基本上与标准离散卷积算法完全相同，但第二个运算对象与第一个运算的对象顺序不是相反的，而卷积中则是相反的。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Signal Processing
Member: xcorrelate

另请参阅

convolve(a,b).


xlogRamp (numElem, from,thru)

生成对数斜坡数组的对象，其方式与为映射的1D Arrays的坐标转换生成x值使用的方式相同。

用途

使用xlogRamp(numElem,from,thru)生成长度为numElem的Real64一维数组，对数值从from向thru倾斜。numElem必须是一个标量容器，其类型是Int32或能够转换成Int32，取值大于零。from和thru必须是标量容器，或能够转换成Real64。如果from小于thru，那么斜率为正；否则，斜率自动为负。from和thru的值都必须大于零。

范例

xlogRamp(3, 1, 100)返回一个1D Array，取值为[1, 10, 100]。

备注

返回值没有映射。

生成各个值的算法是：

Y[I]=exp10(log10(from)+I*((log10(thru)-log10(from))/numElem))
for I=0..numElem-1

这会导致得到的数组中的最后一个要素值小于thru：

exp10(log10(thru)-log10(from)/numElem).

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Generate
Member: xlogRamp

另请参阅

Alloc Real64, logRamp (numElem, from,thru)和xramp (numElem, from,thru)。


a XOR b

在两个运算对象上执行排除OR逻辑运算的对象。

用途

使用XOR b，确定两个容器中一个容器、且只有一个容器的值是否在逻辑上都是真(非零)。两个容器可以是任何类型和任何形状。如果其中一个容器是一个数组，另一个容器必须是一个标量或相同大小和形状的数组。结果是形状与运算对象相同的Int32，值为0或1。如果两个运算对象都不是零，那么XOR的运算值为1；否则运算值为0。

如果两个运算对象的类型都是Coord，那么其独立变量必须完全匹配，否则会返回错误。XOR运算中只考虑相关(最后)变量。

对Complex、PComplex和Spectrum容器，如果任意部分都不是零，那么运算对象的值为真。如果非零，Text的运算值为真。Enums在运算中会转换成Text。

如果两个操作数都为Boolean，结果为与操作数具有相同数据形状的Boolean。

范例

两个Boolean标量：True XOR False 返回True。

一个标量和一个数组: 3 XOR [3, 3, 3]返回[0, 0, 0]。

一个标量和一个数组: 3 XOR [-3, 0, 3]返回[0, 1, 0]。

两个数组: [1, 2, 3] XOR [0, 1, (-1)]返回[1, 0, 0]。

两个PComplex标量: (1,@90) XOR (1,@85)返回0。

两个Complex标量: (0,0) XOR (0,1)返回1。

两个Complex标量: (0,1) XOR (1,0)返回0。

两个Complex标量: (0,0) XOR (0,0)返回0。

两个Coord标量: coord(1,3) XOR coord(1,5)返回0。

两个Coord标量: coord(1,3) XOR coord(2,3)返回错误。

一个Text标量和一个标量数字: "too" XOR 0返回1。

一个Text标量和一个标量数字: "" XOR 0返回1，因为实数0晋级为"0"，这是一个非空字符串。

备注

如果任一容器被映射(即类型为Waveform, Spectrum, Coord或任何其它类型的映射数组)，另一个容器必须没有映射，或映射完全相同。返回值的映射关系与运算对象相同，否则会返回错误。

注意If/Then/Else对象要求里面的表达式的解为标量或数组，要么全为0，要么全为1。

位置

Device [image] Function & Object Browser

Type:  Operators
Category: Logical
Member: XOR

另请参阅

a AND b, NOT a, a OR b, Comparison, Conditional和If/Then/Else。


xramp (numElem, from,thru)

生成一个线性斜坡数组的对象，其方式与为映射的1D Arrays (如Waveform)的坐标转换生成x值使用的方式相同。

用途

使用xramp(numElem,from,thru)生成长numElem的一个Real64一维数组，取值从from线性倾斜到thru (不含thru)。numElem必须是一个Int32类型或能够转换成Int32类型的标量容器，且取值要大于0。from和thru必须是一个Real64类型或能够转换成Real64类型的标量容器。

如果from小于thru，那么斜率为正；否则，斜率自动为负。

范例

xramp(3, 0.5, 0)返回一个一维数组，取值为
[0.5, 0.3333, 0.1667]。

xramp(5, 2, 10)返回一个一维数组，取值为
[2, 3.6, 5.2, 6.8, 8.4]。

备注

返回值没有映射关系。

生成取值的算法是：

Y[I] = from + I*(thru-from/numElem)
for I=0..numElem-1

这会导致得到的数组中最后一个要素的值一直小于thru，小于量为取样间隔大小：(thru-from)/numElem。

如果希望倾斜中包含thru值，应使用ramp(numElem,from,thru)函数。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Generate
Member: xramp

另请参阅

Alloc Real64, ramp (numElem, from,thru)和xlogRamp (numElem, from,thru)。


y0(x)

用来计算第二类阶零的x的贝塞尔函数的对象。

用途

使用y0(x)找到第二类阶零的x的贝塞尔函数。x可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

对Coord输入类型，运算在相关变量上完成。

范例

y0(2)返回0.510375672649745。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

x的值必须是正值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: y0

另请参阅

Ai(x), Bi(x), j0(x), j1(x), jn(x,n), y1(x)和yn(x,n)


y1(x)

用来计算第二类阶1的x的贝塞尔函数的对象。

用途

使用y1(x)找到第二类阶1的x的贝塞尔函数。x可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

对Coord输入类型，运算在相关变量上完成。

范例

y1(9)返回值0.104314575196715。

备注

忽略运算对象上的映射关系，输出容器的映射关系与输入相同。

x的值必须是正值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: y1

另请参阅

Ai(x), Bi(x), j0(x), j1(x), jn(x,n), y0(x)和yn(x,n)


year(aDate)

返回时间x的年份的对象。

用途

使用year(aDate)将给定时间x转换成与时间x的年份值相同形状的容器。x可以是任何形状，返回的形状相同。

允许输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Int64 | Int64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

范例

year(dmyToDate(25,12,1991))返回1991。

提示

返回值中保留映射关系。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions

Category: Time & Date

Member: year

另请参阅

dmyToDate (d,m,y), hmsToHour (h,m,s), hmsToSec (h,m,s), mday(aDate), now(), month(aDate), Time & Date和 wday(aDate)。


yn(x,n)

用来计算第二类阶n的x的贝塞尔函数的对象。

用途

使用yn(x,n)找到第二类阶n的x的贝塞尔函数。x输入可以是任何大小和形状。

允许的输入类型 返回类型

UInt8 | Real64
Int16 | Real64
Int32 | Real64
Real32 | Real64
Real64 | Real64
Coord | Coord
Waveform | Waveform

对Coord输入类型，运算在相关变量上完成。

n参数的类型必须是Int32，或能够转换成Int32。其形状必须是Scalar，或者形状与x相同。

范例

yn(10,4)返回-0.144949511868093。

备注

如果两个输入都有映射，那么映射必须相同。如果任一输入有映射，返回值的映射关系与输入相同。如果两个输入都没有映射，那么输出没有映射。

x值必须是正值。

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Bessel
Member: yn

另请参阅

Ai(x), Bi(x), j0(x), j1(x), jn(x,n), y0(x)和y1(x)。


I/O事务汇总

表1汇总了VEE的I/O事务类型，表2汇总了VEE的I/O事务对象。

表1 I/O事务类型汇总表

操作 | 说明
WRITE | 把数据写入对象中指定的目的地。
READ | 从对象中指定的来源中读取数据。
EXECUTE | 执行低级命令，控制与对象有关的文件、仪器或接口。EXECUTE用来调节文件指针，关闭管道和文件，提供仪器和硬件接口低级控制功能。
WAIT | 在执行下一项事务前等待指定的秒数。 对Direct I/O对象，WAIT还可以等待某个串行轮询响应，或等待可以访问的VXI仪器寄存器中的某些值。
SEND | 把IEEE 488定义的总线消息(总线命令和数据)发送到GPIB接口。
READ(REQUEST) | 从另一个应用程序中读取DDE数据。
WRITE(POKE) | 把DDE数据写入另一个应用程序中。

表2 I/O事务对象汇总表

对象 | 支持的事务
 | EXECUTE | WAIT | READ | WRITE | SEND
To File | X | X |  | X |
From File | X | X | X |  |
To Printer |  | X |  | X |
To String |  | X |  | X |
From String |  | X | X |  |
To StdOut |  | X |  | X |
From StdIn |  | X | X |  |
To StdErr |  | X |  | X |
To/From Socket | X | X | X | X |
Direct I/O | X | X | X | X |
MultiInstrument Direct I/O | X | X | X | X |
Interface Operations | X |  |  |  | X
To/From DDE | X | X | X | X |

另请参阅

WRITE事务，READ事务，EXECUTE事务，WAIT事务，SEND事务，READ(REQUEST)事务，WRITE(POKE)事务


WRITE事务

本节在下表中描述了WRITE事务。本节开头概括了与所有WRITE编码对应的内容。

路径专用行为

某些WRITE事务会表现出不同的行为方式，这要视到目的地的I/O路径而定。为区分这些行为，本节使用下面的术语：

  • MS-DOS路径是不同于仪器的任何目的地，如MS-DOS文件、字符串或打印机。

  • 直接I/O路径是使用Direct I/O访问的任何仪器。

适用于所有路径的行为

除特别指明外，下表中描述的行为适用于所有路径。

表 WRITE编码和格式

编码 | 格式
TEXT | DEFAULT STRING QUOTED STRING BYTE INT16 INT32 INT64 BOOLEAN OCTAL HEX REAL32 REAL64 COMPLEX PCOMPLEX COORD TIME STAMP
BYTE | Not Applicable
CASE | Not Applicable
BINARY | STRING BYTE INT16 INT32 INT64 BOOLEAN REAL32 REAL64 COMPLEX PCOMPLEX COORD
BINBLOCK | BYTE INT16 COMPLEX INT32 INT64 BOOLEAN PCOMPLEX REAL32 REAL64 COORD
CONTAINER | 不适用
STATE a | 不适用
REGISTER b | BYTE WORD16 WORD32 REAL32
MEMORY b | BYTE WORD16 WORD32 REAL32 WORD32*2 REAL64
IOCONTROL c | 不适用

a. 仅适用于Direct I/O到GPIB。

b. 仅适用于Direct I/O到VXI。

c. 仅适用于Direct I/O到GPIO。

另请参阅

TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


TEXT 编码（write 事务）

WRITE TEXT 事务采取下面的形式：

WRITE TEXT ExpressionList [Format]

ExpressionList 是单个表达式或逗号分隔的表达式列表。

Format 是一个可选项。它指定下表所列的格式之一。

WRITE TEXT 事务的格式

格式 | 描述
DEFAULT | 根据所写项的数据类型，VEE 自动确定一个合适的文本表示。
STRING | 写 Text 数据时不做任何转换。写数字类型的数据时， 将其作为数字精度最大的文本。
QUOTED STRING | 写数据时与 STRING 格式相同，除了数据要被双引号（ASCII 码 34）。
BYTE | 将数据作为一个１０进制形式的８位的二的补码的整数来写。
INT16 | 将数据作为一个１０进制形式的１６位的二的补码的整数来写。
INT32 | 将数据作为一个１０进制形式的３２位的二的补码的整数来写。
INT64 | 将数据作为一个１０进制形式的６４位的二的补码的整数来写。
BOOLEAN | 将数据作为一个布尔常量来写。(True or False)
OCTAL | 将数据作为一个８进制形式的３２位的二的补码的整数来写。
HEX | 将数据作为一个１６进制形式的３２位的二的补码的整数来写。
REAL32 | 将数据作为一个３２位的浮点数来写。该数可以是包括定点１０进制和科学计数法在内的各种不同计数法。
REAL64 | 将数据作为一个６４位的浮点数来写。该数可以是包括定点１０进制和科学计数法在内的各种不同计数法。
COMPLEX | 将数据作为一个complex类型的数来写。该 complex 数由一对由逗号分隔的６４位浮点数来表示。第一个数表示实数部分，第二个数表示虚数部分。
PCOMPLEX | 将数据作为一个complex类型的数来写。该 complex 数由一对由逗号分隔的６４位浮点数来表示。 第一个数代表幅度，第二个数表示相位角它的单位由该事务指定。
COORD | 写一个由逗号分隔的一系列 64 为浮点数。它表示一个矩形坐标。
TIME STAMP | 将一个实数（比如从now()函数得到的输出）转变为一个具有意义格式并将其写为年，月，日及时间的组合。

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）

WRITE事务，BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）ng


DEFAULT格式 (write 事务）

WRITE TEXT (默认值)事务采取下面的形式：

WRITE TEXT ExpressionList

ExpressionList是单个表达式或逗号分隔的表达式列表。

该事务把ExpressionList中的每个项目转换成有意义的字符串，并写入字符串。看一下下面所示的写入标量变量X的简单实例：

  • 如果X包含文本，如：

bird cat dog

那么不执行任何转换，该事务写入恰好12个字符。

  • 如果X包含一个标量Integer，如：

8923 X的值 (十进制符号)

那么数字值转换成文本，VEE写入恰好4个字符。

  • 如果X包含一个标量实数，如：

1.2345678901234567 X的值(17位标量实数值)

写入每个有效位，直到16个有效位。最无效的位是近似值，因为VEE在内部二进制形式和十进制符号之间进行转换。如果采用下面的事务使用这个标量实数值：

WRITE TEXT a EOL

那么VEE写入：

1.234567890123457 16位值

如果数字的绝对值足够大或足够小，那么会使用指数符号。构成Coord、Complex和PComplex子要素的Real的行为方式相同。

如果为任何WRITE TEXT DEFAULT事务指定EOL ON，那么将在ExpressionList中最后一个字符之后写入EOL Sequence字段中为该对象指定的字符。

另请参阅

STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


STRING格式（write事务）

WRITE TEXT STRING事务采取下面的形式：

WRITE TEXT ExpressionList STR

ExpressionList是单个表达式或逗号分隔的表达式列表。

WRITE TEXT STRING事务的行为方式基本上与WRITE TEXT (默认值)事务相同(有一个例外，参见下面的讨论)。其明显差异在于，STRING允许指定与输出格式有关的其它细节，包括字段宽度、对齐和字符数量。

字段宽度和对齐

如果事务指定DEFAULT FIELD WIDTH，那么只写入ExpressionList内部把项目转换成Text得到的字符。

如果事务指定FIELD WIDTH: F，那么写入转换后的Text，并在宽F个字符的空格内右对齐或左对齐。

下面的事务指定在宽20个字符的字段内写入所有字符，并且左对齐。

WRITE TEXT X STR FW:20 LJ EOL
WRITE TEXT Y STR FW:20 LJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

bird cat dog

12345678901234567

^ ^

VEE实际上并不会写入脱字符(^)，这里显示脱字符的目的是帮助您查看字段宽度。dog右面的字符和第二个7右面的字符是空格(ASCII 32十进制).

如果对齐方式变成RIGHT JUSTIFY，那么会出现下面的事务：

WRITE TEXT X STR FW:20 RJ EOL
WRITE TEXT Y STR FW:20 RJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

bird cat dog

12345678901234567

^ ^

VEE实际上并不会写入脱字符(^)，这里显示脱字符的目的是帮助您查看字段宽度。bird左面的字符和第一个1左面的字符是空格(ASCII 32十进制)。

如果字符串的长度超过指定字段宽度，那么会输出整个字符串。字段宽度指标不得截短写入的字符串，因为只有MAX NUM CHARS才能截短字符。

下面的事务指定在宽4个字符的字段内写入所有字符，并且左对齐。

WRITE TEXT X STR FW:4 LJ

如果X有下面的值：

bird cat dog X的Text值, 12个字符

那么VEE写入：

bird cat dog 全部12个字符

尽管指字的字段宽度是4个字符，但该事务写入了字符串的全部12个字符。

字符数量

如果指定ALL CHARS，那么写入ExpressionList中每个项目转换产生的所有字符。如果指定MAX NUM CHARS: M，那么只写入ExpressionList中每个项目的前M个字符。

下面的事务指定在每个字符中写入最大7个字符，字段宽度为12个字符，字段项目左对齐。

WRITE TEXT X STR:7 FW:20 LJ EOL
WRITE TEXT Y STR:7 FW:20 LJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

bird ca

1234567

^ ^

Y的数字值先转换成Text，然后截短字符。MAX NUM CHARS不会舍入数字值。

VEE实际上并不会写入脱字符(^)，这里显示脱字符的目的是帮助您查看字段宽度。bird右面的字符和第一个1右面的字符是空格(ASCII 32十进制)。

使用Direct I/O写入数组

把数组写入Direct I/O路径的WRITE TEXT STR事务会忽略Direct I/O对象的Array Separator设置。在写入时，这些事务总是使用换行(ASCII十进制10)，分隔数组的每个要素(这是一个字符串)。这一行为与大多数仪器的需求是一致的。

备注

数组的这种特殊行为不适用于任何其它类型的事务。

另请参阅

DEFAULT格式 (write 事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


QUOTED STRING格式（write 事务）

WRITE TEXT QUOTED STRING事务采取下面的形式：

WRITE TEXT ExpressionList QSTR

ExpressionList是单个表达式或逗号分隔的表达式列表。

一般来说，我们讨论的STRING格式的行为也适用于QUOTED STRING格式。STRING与QUOTED STRING有两个区别：

  • 对QUOTED STRING，在字符串开头和结尾增加一个双引号(ASCII 34十进制)。需要先应用双引号，然后才能添加任何填充空格，对齐指定字段宽度内部的字符串。

  • 控制字符(ASCII 0-31十进制)、换码符及嵌入在双引号引起来的字符串内部的字符' (ASCII 39十进制)和" (ASCII 34十进制)需要特殊对待。

字段宽度和对齐

如果指定DEFAULT FIELD WIDTH，那么只写入ExpressionList内部把项目转换成Text得到的且双引号引起来的字符。

如果指定FIELD WIDTH: F，那么写入转换后的Text和引号，并在宽F个字符的空格内右对齐或左对齐。

下面的事务指定作为宽20个字符的字段内带引号的字符串写入所有字符，并且左对齐。

WRITE TEXT X QSTR FW:20 LJ EOL
WRITE TEXT Y QSTR FW:20 LJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

"bird cat dog"

"12345678901234567"

^ ^

VEE实际上并不会写入脱字符 (^)，这里显示脱字符的目的是帮助您查看字段宽度。dog"右面的字符和7"右面的字符是空格(ASCII 32十进制)。

如果对齐方式变成RIGHT JUSTIFY，那么会出现下面的事务：

WRITE TEXT X QSTR FW:20 RJ EOL
WRITE TEXT Y QSTR FW:20 RJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

"bird cat dog"

"12345678901234567"

^ ^

VEE实际上并不会写入脱字符(^)，这里显示脱字符的目的是帮助您查看字段宽度。"bird左面的字符和"1左面的字符是空格(ASCII 32十进制)。

如果字符串的长度超过指定字段宽度，那么会输出整个字符串。字段宽度指标不得截短写入的字符串，因为只有MAX NUM CHARS才能截短字符。

下面的事务指定在宽4个字符的字段内写入所有字符，并且左对齐。

WRITE TEXT X QSTR FW:4 LJ

如果X有下面的值：

bird cat dog X的Text值, 12个字符

那么VEE写入：

"bird cat dog" 全部12个字符

字符数量

如果指定ALL CHARS，那么写入ExpressionList中每个项目转换产生的且带有双引号的所有字符。如果指定MAX NUM CHARS: M，那么只写入ExpressionList中每个项目的前M个字符及周围的双引号。换句话说，对ExpressionList中的每个项目写入总共M+2个字符。

下面的事务指定MAX NUM CHARS:7 (字段宽20, 左对齐)。

WRITE TEXT X QSTR:7 FW:20 LJ EOL
WRITE TEXT Y QSTR:7 FW:20 LJ EOL

如果X和Y有下面的值：

bird cat dog X的Text值

12345678901234567 Y的Real值

那么VEE写入：

"bird ca"

"1234567"

^ ^

VEE实际上并不会写入脱字符(^)，这里显示脱字符的目的是帮助您查看字段宽度。ca"右面的字符和7"右面的字符是空格(ASCII 32十进制)。

嵌入式控制字符和换码符

在本讨论中，控制字符和换码符具有特定的意义。控制字符是单字节数据，与ASCII字符十进制0-31之一对应。例如，换页是ASCII 10十进制，符号<LF>表示本讨论中的换页符。字符串\n是一种人可以读的换码符，表示VEE识别的换页。VEE使用换码符在带引号的字符串内部表示控制字符。

参见下面的换码符图。

换码符 | ASCII代码(十进制) | 意义
\n | 10 | 换行
\t | 9 | 水平制表符
\v | 11 | 垂直制表符
\b | 8 | 退格
\r | 13 | 回车
\f | 12 | 换页
\" | 34 | 双引号
\' | 39 | 单引号
\\ | 92 | 反斜杠
\ddd |  | ASCII字符，与三位八进制值ddd对应

考虑各种嵌入式换码符对下面的事务的影响。

WRITE TEXT X QSTR EOL

  • 如果X的取值如下：

bird\ncat dog

VEE把这个值写入直接I/O路径中：

"bird<LF>cat dog"

其中<LF>表示单个字符换行(ASCII 10十进制)。

  • 如果X的取值如下：

bird \"cat\" dog

VEE把这个值写入串行接口的Direct I/O路径中：

"bird \"cat\" dog"

对相同的事务和数据，VEE把这个值写入GPIB接口的直接I/O路径中：

"bird ""cat"" dog"

GPIB接口的这种独特行为用来满足IEEE 488.2的要求。

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），INTEGER格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


INTEGER格式（write 事务）

WRITE TEXT INTEGER事务采取下面的形式：

WRITE TEXT ExpressionList INT16

WRITE TEXT ExpressionList INT32

WRITE TEXT ExpressionList INT64

ExpressionList是一个表达式或逗号分隔的表达式列表。

这一事务生成的整数类型是16位、32位或64位2的补数整数。16位整数的范围是-32768到+32767。32位整数的范围是-2 147 483 648到+2 147 483 647。64位整数的范围是-9223372036854775808到+9223372036854775807。写入的表示这些数值的字符是+-0123456789。

VEE试图把ExpressionList中的每一项转换成Int64, Int32或Int16数据类型，然后再把它转换成Text，进行最后格式化。VEE遵守普通转换规则。详情请参阅Help => Contents and Index => Tell Me About...下面的?#25968;据类型转换?/span>部分。

如果使用INT16、INT32或INT64格式写入Real32：

  • 超出Int16范围的实数值会生成错误。

  • 位于Int64、Int32或Int16有效范围内的值会进行转换，截短Real的小数部分。

如果使用INT16、INT32或INT64格式写入Real64：

  • 超出Int32或Int16范围的实数值会生成错误。

  • 位于Int64、 Int32或 Int16有效范围内的值会进行转换，截短Real的小数部分。

数字数量

如果指定DEFAULT NUM DIGITS，那么事务只写入表达整数值要求的数字，不使用前导零。

如果指定MIN NUM DIGITS: M，事务会根据要求在输出中填充前导零，以提供总共M个数字。

看一下下面两个Int16或Int32事务，其在规范中的差别只在于输出数字的数量。

WRITE TEXT X INT16 EOL default number of digits
WRITE TEXT X INT16:6 EOL six digits

或

WRITE TEXT X INT32 EOL default number of digits

WRITE TEXT X INT32:6 EOL six digits

如果X的值为：

4567

VEE写入：

4567

004567

MIN NUM DIGITS永远不会截短输出字符串。下面的事务指字最小数字数量为1。

WRITE TEXT X INT16:1 EOL

或

WRITE TEXT X INT32:1 EOL

如果X的值为：

12345678

VEE写入：

12345678 全部8个数字

符号前缀

可以作为WRITE TEXT INT事务的一部分，选择性地指定下表中列出的其中一个符号前缀。

前缀 | 说明
/- | 正数写入时不带前缀，没有+、也没有空格。所有负数写入时都带前缀-。
+/- | 所有正数写入时都带有前缀+。所有负数写入时都带前缀-。
" "/- | 所有正数写入时都带有空格(ASCII 32十进制)前缀。所有负数写入时都带前缀-。

任何前缀符号不会趋向MIN NUM DIGITS进行计数。下面的事务为正数和负数指定了明确的前导符号。

WRITE TEXT X INT16:6 SIGN:"+/-" EOL
WRITE TEXT Y INT32:6 SIGN:"+/-" EOL

如果X和Y的值为：

123 X的整数值

-123 Y的整数值

VEE写入：

+000123 6个数字加上符号

-000123

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


OCTAL格式（wirte事务）

WRITE TEXT OCTAL事务采取下面的形式：

   WRITE TEXT ExpressionList OCT

ExpressionList是一个表达式或逗号分隔的表达式列表。

这一事务生成的整数类型是64位2的补数整数。这些整数的范围是-9223372036854775808到+9223372036854775807。写入的表示这些八进制数值的唯一字符是01234567。可以指定可选的前缀，其中可以包括其它字符。

VEE试图把使用OCTAL写入的任何数据转换成Int64数据类型，然后再把它转换成Text，进行最后格式化。VEE遵守普通转换规则。

如果使用OCTAL格式写入Real：

  • 超出Int164范围的实数值会生成错误。

  • 位于Int64有效范围内的值会进行转换，截短Real的小数部分。

数字数量

DEFAULT NUM DIGITS和MIN NUM DIGITS的行为与WRITE TEXT INTEGER事务数字数量中描述的相同。

八进制前缀

可以作为WRITE TEXT OCTAL事务的一部分，指定下表中列出的其中一个符号前缀。

前缀 | 说明
NO PREFIX | VEE写入每个八进制数值，没有任何前缀。只有数字01234567出现在输出中。
DEFAULT PREFIX | 对直接I/O路径，VEE作为前缀在每个八进制数值前面加上#Q。它支持IEEE 488.2定义的非十进制数字数据格式。
PREFIX:string | VEE作为前缀在每个八进制数值前面加上string中指定的字符。

下面的事务指定了默认前缀和6个数字：

WRITE TEXT X OCT:6 PREFIX EOL

  • 如果X的值如下：

15 十进制值15

VEE把下述内容写入直接I/O路径中：

#Q000017 6个数字加上前缀

下面的事务指定了自定义前缀和10个数字：

WRITE TEXT X OCT:10 PREFIX:"oct>" EOL

  • 如果X的值如下：

15 十进制Integer值15

VEE把下述内容写入直接I/O路径中：

oct>000017

DEFAULT PREFIX写入的前缀取决于目的地，但PREFIX: 字符串写入的前缀独立于目的地。

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


HEX格式(write事务)

WRITE TEXT HEX事务采取下面的形式：

   WRITE TEXT ExpressionList HEX

这一事务写入的整数类型是64位2的补数整数。整数范围为--9223372036854775808到+9223372036854775807。写入的代表这些十六进制数字的唯一字符是0123456789abcdef。可以指定可选的前缀，其中可以包括其它字符。

WRITE TEXT HEX的行为几乎与WRITE TEXT OCTAL完全相同。唯一的区别在于提供的前缀集及DEFAULT PREFIX的行为。

十六进制前缀

可以指定下面列出的前缀之一，作为WRITE TEXT HEX事务的一部分。

前缀 | 说明
NO PREFIX | VEE写入每个十六进制数字，没有任何前缀。输出中只出现字符0123456789abcdef。
DEFAULT PREFIX | 对直接I/O路径，VEE作为前缀在每个十六进制数字中增加#H。它支持IEEE 488.2定义的十六进制非十进制数字数据格式。
PREFIX:string | VEE作为前缀在每个十六进制数字中增加string中指定的字符。

下面的事务指定了默认前缀和6个位：

WRITE TEXT X HEX:6 PREFIX EOL

如果X的值如下：

15 十进制整数值15

VEE写入直接I/O路径：

#H00000f 整整6位加前缀

下面的事务指定了自定义前缀和3个位：

WRITE TEXT X HEX:3 PREFIX:"hex>" EOL

如果X的值如下：

15 十进制整数值15

VEE写入直接I/O路径：

hex>00f 整整3位加前缀

DEFAULT PREFIX写入的前缀取决于目的地，而PREFIX: string写入的前缀独立于目的地。

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），REAL32和REAL64格式（write事务） COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


REAL32和REAL64格式（write事务）

WRITE TEXT REAL32事务采取下面的形式：

WRITE TEXT ExpressionList REAL32

这一事务生成的Real数字类型是32位IEEE 754浮点数字，数字范围为：

-3.40282347E38 到 3.40282347E38

WRITE TEXT REAL64事务采取下面的形式：

WRITE TEXT ExpressionList REAL64

这一事务生成的Real数字类型是64位IEEE 754浮点数字，数字范围为：

-1.797 693 134 862 315E+308 到 1.797 693 134 862 315E+308

唯一写入的表示这些数字的字符是
+-.0123456789E。

符号和数字

可以作为WRITE TEXT REAL事务的一部分，选择性地指定下面的符号之一。

符号 | 说明
STANDARD | VEE自动确定是否应该使用固定点符号(要求小数点, 而不是指数)或指数符号写入每个Real值。从不写入非有效零。
FIXED | VEE作为固定点数字写入每个Real值。带有小数位的数字自动舍入，以适应NUM FRACT DIGITS指定的小数位数。根据要求添加尾部零位，提供指定的小数位数。
SCIENTIFIC | VEE使用指数符号写入每个Real值。每个指数包括明确的符号(+或-)，并总是使用大写E。带有小数位的数字自动舍入，以适应NUM FRACT DIGITS指定的小数位数。根据要求添加尾部零位，提供指定的小数位数。

下面的事务指定STANDARD符号和4个有效位。

WRITE TEXT X REAL32 STD:4 EOL
WRITE TEXT Y REAL64 STD:4 EOL
WRITE TEXT Z REAL32 STD:4 EOL

If X, Y和Z有下面的值：

1.23456E2 X的Real32值

1.23456E09 Y的Real64值

1.23 Z的Real32值

那么VEE写入：

123.5 根据要求舍掉尾数

1.235E+09 用指数符号表示的大数字

1.23 尾部不带零

下面的事务指定FIXED符号和4个小数位。

WRITE TEXT X REAL64 FIX:4 EOL
WRITE TEXT Y REAL32 FIX:4 EOL
WRITE TEXT Z REAL64 FIX:4 EOL

If X, Y和Z有下面的值：

1.2345678E2 X的Real64值

1.2345678E-09 Y的Real32值

1.23 Z的Real64值

那么VEE写入：

123.4568 根据要求舍入尾数

0.0000 小数舍入为零

1.2300 根据要求添加尾数零

下面的事务指定SCIENTIFIC符号和4个小数位。

WRITE TEXT X REAL32 SCI:4 EOL
WRITE TEXT Y REAL64 SCI:4 EOL
WRITE TEXT Z REAL32 SCI:4 EOL

If X, Y和Z有下面的值：

1.2345678E2 X的Real32值

-1.2345678E-09 Y的Real64值

0 Z的Real32值

那么VEE写入：

1.2346E+02 指数E外加两个带符号的位

-1.2346E-09 根据要求舍入最后一位

0.0000E+00 根据要求填充尾数零

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，COMPLEX, PCOMPLEX和COORD格式(write 事务), TIME STAMP格式（write事务）


COMPLEX, PCOMPLEX和COORD格式(write 事务)

COMPLEX, PCOMPLEX和COORD对应拥有相同名称的VEE多字段数据类型。这三种格式的行为非常类似。除特别注明外，本节介绍的行为适用于这三种格式。

与VEE数据类型Complex、PComplex和Coord由多个Real数字组成一样，COMPLEX、PCOMPLEX和COORD格式在本质上是REAL64格式的复合形式。它写入每个多字段数据类型的Real构成值，适用的输出规则与单独的REAL64格式化值相同。

涉及多字段格式的事务的最终输出受到有问题的对象的Multi-Field格式设置影响。对Direct I/O对象，可以通过I/O => Instrument Manager访问Multi-Field格式；对所有其它对象，可以通过对象菜单中的Config访问Multi-Field格式。Multi-Field格式的两种可能设置是：

  • Data Only。这会作为没有圆括号的逗号分隔的数字列表写入多字段数据格式。

  • (...) Syntax。这会作为逗号分隔的、用圆括号划分的数字列表写入多字段数据格式。

下面的范例将演示这些行为。

COMPLEX格式

WRITE TEXT COMPLEX事务采取下面的形式：

WRITE TEXT ExpressionList CPX

下面的事务指明了一个固定十进制符号、明确的前导符号、由10个字符组成的字段宽度及右对齐。

WRITE TEXT X CPX FIX:3 SIGN:"+/-" FW:10 RJ EOL

  • 如果Multi-Field格式设置为(...) Syntax，X的值如下：

( -1.23456 , 9.8 ) X的Complex值

那么VEE写入：

( -1.235 , +9.800)

^ ^ ^ ^

  • 如果Multi-Field格式设置为Data Only，X有相同的值，那么VEE写入：

-1.235, +9.800

^ ^ ^ ^

VEE实际上并不会写入脱字符(^)，之所以显示脱字符，是为了帮助您查看字段宽度。+左面的字符是空格(ASCII 32十进制)。

在使用(...) Syntax时，空格-逗号-空格序列把宽10个字符的字段分开，这些字段中包含着Complex数字的实数部分和虚数部分。不管是哪种Multi-Field格式，实数部分和虚数部分都有单独的10个字符的字段。字段中不包括圆括号或分隔逗号和空格。

PCOMPLEX格式

WRITE TEXT PCOMPLEX事务采取下面的形式：

WRITE TEXT ExpressionList PCX

PCOMPLEX格式允许指定其写入的极坐标复数的相位单位。相位单位与Properties中的Trig Mode设置的单位无关。参阅下图。

单位 | 说明
DEG | 度
RAD | 弧度
GRAD | 梯度

下面第一项事务的相位测量单位为度，第二项事务的相位测量单位为弧度。

WRITE TEXT X PCX:DEG STD EOL
WRITE TEXT X PCX:RAD STD EOL

如果Multi-Field格式设置为Data Only，X的值如下：

(-1.23456, @90) X的PComplex值, 相位用度表示

那么VEE写入：

1.23456,-90

1.23456,-1.570796326794897

下面的事务指明了单位为弧度的相位测量、固定的十进制符号、三个小数位、明确的前沿符号、10个字符的字段宽度和右对齐。

WRITE TEXT X PCX:RAD FIX:3 SIGN:"+/-" FW:10 RJ EOL

  • 如果Multi-Field格式设置为(...) Syntax，X的值如下：

(-1.23456 , @9.8) X的PComplex值, 角用弧度表示

那么VEE写入：

( +1.235 , @ +0.375)

^ ^ ^ ^

VEE归一化所有PComplex数字，得到一个正幅度及位于+p和-p之间的相位。

  • 如果Multi-Field格式设置为Data Only，X拥有相同的值，那么VEE写入：

+1.235, +0.375

^ ^ ^ ^

VEE实际上并不会写入脱字符(^)，之所以显示脱字符，是为了帮助您查看字段宽度。-左面的字符和+左面的字符是空格(ASCII 32十进制)。

COORD格式

WRITE TEXT COORD事务采取下面的形式：

WRITE TEXT ExpressionList COORD

COORD格式拥有COMPLEX格式所有相同的行为。唯一的区别是COORD可能会包含任意数量的字段，而COMPLEX只有两个字段。

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务）, TIME STAMP格式（write事务）


TIME STAMP格式（write事务）

WRITE TEXT TIME STAMP事务采取下面的形式：

WRITE TEXT ExpressionList [DATE:DateSpec] [TIME:TimeSpec]

ExpressionList是单个表达式或逗号分隔的表达式列表。

DateSpec是下面预先定义的日期和时间组合之一：

  • Date

  • Time

  • Date&Time

  • Time&Date

  • Delta Time

如果指定一项包括Date的事务，那么还可以指定Weekday DD/Month/YYYY或DD/Month/YYYY的DateSpec。

如果指定一项包括Time的事务，那么还可以指定TimeSpec。TimeSpec采用下面预先定义的时间格式组合：

  • HH:MM (时和分)

  • HH:MM:SS (时分秒)

  • 12 HOUR

  • 24 HOUR

ExpressionList中的每个项目转换成Real，解释为日期和时间。这个Real数字表示自UTC公元1年1月1日凌晨起经过的秒数。这个Real数字最常见的来源是Time Stamp对象输出。可以使用TIME STAMP格式，把这个Real数字转换成有意义的字符串，其中包含人可以读的日期和/或时间。

TIME STAMP支持各种写入日期和时间的符号。如果Real变量包含下面的值：

62806574669.31164

可以使用下面的任何Time和Date符号写入TIME STAMP：

符号

结果

Date with Weekday
DD/Month/YYYY

Thu 04/Apr/1999

Time with HH:MM:SS and 24 HOUR

15:44:29

Date&Time with Weekday
DD/Month/YYYY, HH:MM:SS,
and 24 HOUR

Thu 04/Apr/1999 15:44:29

Time&Date with HH:MM:SS, 24 HOUR

and Weekday DD/Month/YYYY

15:44:29 Thu 04/Apr/1999

Delta Time with HH:MM:SS

17446270:44:29

Date with Weekday
DD/Month/YYYY

Thu 04/Apr/1999

Date with DD/Month/YYYY

04/Apr/1999

Time with HH:MM:SS and 24 HOUR

15:44:29

TIME with HH:MM and 24 HOUR

15:44

TIME with HH:MM:SS and 24 Hour

15:44:29

TIME with HH:MM:SS and 12 Hour

3:44:29 PM

另请参阅

DEFAULT格式 (write 事务），STRING格式（write事务），QUOTED STRING格式（write 事务），INTEGER格式（write 事务），QUOTED STRING格式（write 事务）， OCTAL格式（wirte事务），HEX 格式(write)，REAL32和REAL64格式（write事务） COMPLEX， PCOMPLEX和COORD格式(write 事务)


BYTE编码(write事务)

BYTE编码(write)

BYTE事务采取下面的形式：

WRITE BYTE ExpressionList

ExpressionList是单个表达式或逗号分隔的表达式列表。

VEE 5或以前的Execution Mode把ExpressionList中的每个项目转换成Int16 (16位2的补数整数)，写入最无效的8个位。VEE 6执行模式把ExpressionList中的每个项目转换成、并写入UInt8 (8位2的补数整数)。这是把一个字符写入仪器的事务。ExpressionList中的每个表达式必须是一个标量。

在VEE 6或以后的Execution Mode中，取值大于256会导致错误。例如，在VEE 5及更低的Execution Mode中，下面的事务会产生下述字符数据输出：

   ABCAA

WRITE BYTE 65,66,67
WRITE BYTE 65+1024,65+2048

在VEE 6或以后的Execution Mode中，上面的第二项事务会导致错误。

另请参阅

WRITE事务，TEXT 编码（write 事务），CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


CASE编码(write事务)

CASE编码(write)

WRITE CASE事务采取下面的形式：

WRITE CASE ExpressionList1 OF ExpressionList2

ExpressionList是单个表达式或逗号分隔的表达式列表。

VEE把ExpressionList1中的每个项目转换成一个整数，并把它作为ExpressionList2中的索引使用。ExpressionList2中带索引的项目写入的字符串格式与WRITE TEXT (默认值)相同。

ExpressionList2中的项目索引基于零。

下面的事务说明了CASE格式的行为。

WRITE CASE 2,1 OF "Str0","Str1","Str2"
WRITE CASE X OF 1,1+A,3+A

如果变量值如下：

2 X的Real32值

0.1 A的Real64值

VEE写入：

Str2Str1

3.1

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


BINARY编码( write 事务）

WRITE BINARY事务采取下面的形式：

WRITE BINARY ExpressionList DataType

ExpressionList是一个表达式或逗号分开的表达式列表。

DataType　是其中下面一个预先定义的VEE数据类型：

• Boolean - 32位2的补数整数

• BYTE - 8位不带符号的字节

• INT16 - 16位2的补数整数

• INT32 - 32位2的补数整数

• INT64 - 64位2的补数整数

• REAL32 - 32位IEEE 754浮点数字

• REAL64 - 64位IEEE 754浮点数字

• STRING - 以空字符结尾的字符串

• COMPLEX - 等于两个REAL64

• PCOMPLEX - 等于两个REAL64

• COORD - 等于两个或多个REAL64

备注

VEE 5及更低的执行模式使用INT32存储和处理所有整数值，使用Real数据类型(也称为REAL64)存储和处理所有实数。因此，INT16和REAL32数据类型只用于I/O操作。VEE 5及更低的执行模式在输出事务上为仪器I/O执行下面的数据类型转换。

INT32值逐个转换成INT16值，输出到仪器上。但是，由于INT16数据类型的范围是-32768到32767，因此落在这个范围外的值将截短到16位。

REAL64值逐个转换成REAL32值，输出到仪器上。但是，由于REAL32数据类型的范围要小于REAL64数据类型，因此落在这个范围外的值不能转换成REAL32，会产生错误。

在VEE 6执行模式下，数据转换成相应的类型，如果数据超出范围，那么会生成错误。

BINARY编码的事务把ExpressionList中指定的每个值转换成DataType指定的VEE数据类型。然后使用指定的二进制格式写入转换后的每个项目。但是，由于写入的二进制数据是计算机存储器中的拷贝，因此其不能简便地在不同计算机结构或硬件之间共享。

BINARY编码数据的优势是非常紧凑。READ BINARY事务可以读取任何相应的WRITE BINARY数据。

BINARY编码只写入每个数据类型的数字部分。例如，在写入TEXT编码的Complex和Coord数据时可以包括的圆括号和逗号，在使用BINARY编码时从不会写入。

类似的，在写入数组时，BINARY编码不会写入任何Array Separator。WRITE BINARY事务不允许指定EOL ON。很少需要使用BINARY事务写入EOL，因为数字数据类型的长度是固定的，字符串用零字符结束。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


BINBLOCK编码(write事务)

BINBLOCK编码

WRITE BINBLOCK事务采用下面的形式：

WRITE BINBLOCK ExpressionList DataType

ExpressionList是单个表达式或用逗号分隔的表达式列表。

DataType是下面预先定义的VEE数据类型之一：

• BYTE - 8位无符号字节

• INT16 - 16位2的补数整数

• INT32 - 32位2的补数整数

• REAL32 - 32位IEEE 754浮点数

• REAL64 - 64位IEEE 754浮点数

• COMPLEX - 等于两个REAL64

• PCOMPLEX -等于两个REAL64

• COORD - 等于两个或多个REAL64

BINBLOCK作为单独的数据码组写入ExpressionList中的每个项目。使用的码组包头取决于执行WRITE的对象类型和对象的配置。

非GPIB BINBLOCK

如果对象不是到GPIB的Direct I/O，那么WRITE BINBLOCK总是写入一个IEEE 488.2确定长度任意码组响应数据码组。这一数据格式主要用来与使用Direct I/O的GPIB仪器通信，但其它对象也支持这一数据格式。

每个确定长度任意码组采取下面的形式：

#<Num_digits><Num_bytes><Data>

其中：

  • #是所示的#字符。

  • <Num_digits>是一个一位(十进制符号)的ASCII字符，表明<Num_bytes>中的位数。

  • <Num_bytes>是一个多位(十进制符号)的ASCII字符列表，表明后面的<Data>中的字节数量。

  • <Data>是由任意8位数据字节组成的序列。

GPIB BINBLOCK

如果对象是到GPIB的Direct I/O，那么WRITE BINBLOCK事务的行为取决于Conformance和Binblock的Direct I/O Configuration设置；通过I/O Þ Instrument Manager菜单选项进入这些设置。

如果Conformance设置为IEEE 488.2，那么WRITE BINBLOCK总是写入一个 IEEE 488.2确定长度任意码组响应数据码组。

如果Conformance设置为IEEE 488，那么使用的包头类型取决于Binblock。Binblock可以指定IEEE 728 #A, #T或#I码组包头。如果Binblock是None，那么WRITE BINBLOCK写入一个 IEEE 488.2确定长度任意码组响应数据码组。

IEEE 728码组包头采取下面的形式：

#A<Byte_Count><Data>

#T<Byte_Count><Data>

#I<Data><END>

其中：

  • #是所示的字符。

  • A,T, I是所示的字符。

  • <Byte_Count>由两个字节组成，这两个字节一起构成一个16位无符号整数，指定后面的<Data>中的字节数量。(VEE自动计算这一数字。)

  • <Data>是由任意字节组成的字节流。

  • <END>表明使用最后传输的数据字节声称EOI。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


CONTAINER编码（write事务）

WRITE CONTAINER事务采取下面的形式：

WRITE CONTAINER ExpressionList

ExpressionList是单个表达式或逗号分隔的表达式列表。

WRITE CONTAINER事务使用特殊的VEE文本表示方式写入ExpressionList中的每个项目。

这种表示方式保留与写入的数据类型有关的所有VEE属性，如形状、大小和名称。可以使用READ CONTAINER，在不丢失信息的情况下检索任何WRITE CONTAINER数据。

例如，下面的事务：

WRITE CONTAINER 1.2345

写入：

(Real

(data 1.2345)

)

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


STATE编码（write事务）

WRITE STATE事务采取下面的形式：

WRITE STATE [DownloadString]

DownloadString是一个可选的字符串，如果之前在Direct I/O配置中没有为相应的仪器指定下载字符串，那么您可以指定一个下载字符串。

Direct I/O对象使用WRITE STATE事务，把学习字符串下载到一台仪器上。这是与Direct I/O对象的每个实例相关的学习字符串。通过在Direct I/O对象菜单中点击Upload，可以上传这个学习字符串。在第一次选择Upload之前，学习字符串包含空字符串。

WRITE STATE的行为受到Conformance和Download String的Direct I/O Configuration设置的影响。通过I/O => Instrument Manager菜单选项，可以进入这些设置。如果Conformance是IEEE 488，那么WRITE STATE事务写入后面跟着学习字符串的Download String。如果Conformance是IEEE 488.2，那么会下载学习字符串，而没有IEEE 488.2定义的任何前缀。如需与WRITE STATE事务有关的信息，请参阅使用VEE控制仪器。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，REGISTER Encoding（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


REGISTER 编码（write事务）

WRITE REGISTER 用来向VXI仪器的A16存储器中写数。

WRITE REGISTER 事务采取下面的形式：

WRITE REG: SymbolicName ExpressionList INCR

-或-

WRITE REG: SymbolicName ExpressionList

这里:

SymbolicName是在配置VXI仪器过程中定义的名称。这个名称指明仪器寄存器空间内部的具体地址。WRITE REGISTER事务的具体数据类型是：

  • BYTE - 不带符号的8位字节

  • WORD16 - 16位2的补数整数

  • WORD32 - 32位2的补数整数

  • REAL32 - 32位IEEE 754浮点数字

  • WORD32*2 - 一个Int32的数组中的两个相邻的32位2的补数整数

  • REAL64 - 64位数IEEE 754浮点数字

在配置VXI仪器过程中也指定这些数据类型，这些数据类型不会出现在事务中。

ExpressionList是一个表达式或逗号分隔的表达式列表。

INCR指定从SymbolicName指定位置开始，以递增的方式写数组数据。从开始位置写入数组的第一个元素，从该位置加上长度等于数据类型字节数的偏移量写入第二个要素，依此类推，直到写入数组的所有元素。如果在事务中没有指定INCR，那么将从SymbolicName指定的单个位置写入整个数组。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），MEMORY 编码（write事务），IOCONTROL编码（write事务）


MEMORY 编码（write事务）

WRITE MEMORY 用来向VXI仪器的A24或A32存储器中写入数据。

WRITE MEMORY 事务采取下面的形式：

WRITE MEM: SymbolicName ExpressionList INCR

-或-

WRITE MEM: SymbolicName ExpressionList

这里:

SymbolicName是在配置VXI仪器过程中定义的名称。这个名称指明仪器扩展存储器内部的具体地址 WRITE MEMORY事务的具体数据类型是:

  • BYTE - 不带符号的8位字节

  • WORD16 - 16位2的补数整数

  • WORD32 - 32位2的补数整数

  • REAL32 - 32位IEEE 754浮点数字

  • WORD32*2 - 一个Int32的数组中的两个相邻的32位2的补数整数

  • REAL64 - 64位数IEEE 754浮点数字

在配置VXI仪器过程中也指定这些数据类型，这些数据类型不会出现在事务中。

ExpressionList是一个表达式或逗号分隔的表达式列表。

INCR指定从SymbolicName指定位置开始，以递增的方式写入数组数据。从开始位置写入数组的第一个元素，从该位置加上长度等于数据类型字节数的偏移量处写入第二个元素，依此类推，直到写入数组的所有元素。如果在事务中没有指定INCR，那么将从SymbolicName指定的单个位置写入整个数组。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），IOCONTROL编码（write事务）


IOCONTROL编码（write事务）

WRITE IOCONTROL事务采取下面的形式：

WRITE IOCONTROL CTL ExpressionList

或

WRITE IOCONTROL PCTL ExpressionList

ExpressionList是单个表达式或逗号分隔的表达式列表。

IOCONTROL编码仅用于Direct I/O到GPIO接口。

这一事务设置GPIO接口的控制线：

WRITE IOCONTROL CTL a

VEE把取值a转换成Integer。Integer值最无效的位X映射到接口的控制线上，其中X是控制线数量。

例如，HP 98622A GPIO接口使用两条控制线：CTL0和CTL1。

写入的值 | CTL1 | CTL0
0 | 0 | 0
1 | 0 | 1
2 | 1 | 0
3 | 1 | 1

在上表中，1表明确认控制线，0表明清除控制线。这一事务控制着GPIO接口计算机驱动的握手线：

WRITE IOCONTROL PCTL a

如果a的值不是零，那么设置PCTL线。如果a的值是零，那么不采取任何操作。在外设满足握手要求时，会自动清除PCTL。

另请参阅

WRITE事务，TEXT 编码（write 事务），BYTE编码(write)，CASE编码(write)，BINARY编码(write 事务），BINBLOCK编码(write)，CONTAINER编码（write事务），COMPLEX, PCOMPLEX和COORD格式(write 事务)，STATE编码（write事务），REGISTER Encoding（write事务），MEMORY 编码（write事务）


READ事务

Read编码和格式请参阅下表。

编码 | 格式
TEXT | CHAR TOKEN STRING QUOTED STRING BYTE INT16 INT32 INT64 BOOLEAN OCTAL HEX REAL32 REAL64 COMPLEX PCOMPLEX COORD TIME STAMP
BINARY | STR BYTE INT16 INT32 INT64 BOOLEAN REAL32 REAL64 COMPLEX PCOMPLEX COORD
BINBLOCK | BYTE INT16 INT32 INT64 BOOLEAN REAL32 REAL64 COMPLEX PCOMPLEX COORD
CONTAINER | Not Applicable
IOSTATUS | Not Applicable
REGISTERa | BYTE WORD16 WORD32 REAL32
MEMORYa | BYTE WORD16 WORD32 WORD32*2 REAL32 REAL64

a. 仅适用于Direct I/O到VXI。

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，BINBLOCK编码(read事务)，CONTAINER编码( read事务），IOSTATUS编码（read事务），REGISTER编码（read事务），MEMORY编码（read事务）


TEXT编码（read事务）

READ TEXT事务可以读取和丢弃不相关的项目，选择性地读取重要的项目。在大多数情况下其工作良好，但偶尔必须非常认真地分析VEE把哪些项目视为不相关项目，把哪些项目视为重要项目。

如果读取使用VEE编写的文本文件，只要读取格式与写入格式相同，那么很少会发生问题(偶尔也会有问题)。在试图从另一个应用软件中导入文件时，最可能发生问题。

下表以一般方式描述了READ TEXT行为。一定要阅读下面各节的内容，了解所有可能的变化。

格式 | 说明
CHAR | 读取任何8位字符。
TOKEN | 把相邻的字符列表作为一个单位处理，称为令牌。令牌使用指定的分界符分开(您可以指定分界符)。例如，在普通的书面英语中，单词是令牌，空格是分界符。
STRING | 作为一个单位读取8位字符列表。将读取和声明大多数控制字符。在已经读取指定字符数量或在遇到换行符时，会到达字符串末尾。
QSTRING | 读取符合IEEE 488.2任意长度字符串的8位字符列表，这个任意字符串在开头和末尾都使用双引号(ASCII 34)。不丢弃控制字符。换码符扩展到相应的控制字符。在已经读取双引号字符(ASCII 34)时，会到达字符串的末尾。
BYTE | 读取字符列表，把它们解释为8位整数的十进制表示或非十进制表示。唯一视为十进制INTEGER一部分的字符是0123456789-+。VEE识别前缀0x (十六进制)及IEEE 488.2指定的所有非十进制数字格式：#H (十六进制), #Q (八进制), #B (二进制)。
INTEGER16 | 读取字符列表，把它们解释为16位整数的十进制表示或非十进制表示。唯一视为十进制INTEGER一部分的字符是0123456789-+. VEE识别前缀0x (十六进制)及IEEE 488.2指定的所有非十进制数字格式：#H (十六进制), #Q (八进制), #B (二进制)。
INTEGER32 | 读取字符列表，把它们解释为32位整数的十进制表示或非十进制表示。唯一视为十进制INTEGER一部分的字符是0123456789-+. VEE识别前缀0x (十六进制)及IEEE 488.2指定的所有非十进制数字格式：#H (十六进制), #Q (八进制), #B (二进制)。
INTEGER64 | 读取字符列表，把它们解释为64位整数的十进制表示或非十进制表示。唯一视为十进制INTEGER一部分的字符是0123456789-+. VEE识别前缀0x (十六进制)及IEEE 488.2指定的所有非十进制数字格式：#H (十六进制), #Q (八进制), #B (二进制)。
BOOLEAN | 读取字符列表，把它们解释为布尔数据。
OCTAL | 读取字符列表，把它们解释为整数的八进制表示。被视为OCTAL一部分的字符是01234567。VEE还识别八进制数字使用的IEEE 488.2非十进制数字前缀#Q。
HEX | 读取字符列表，把它们解释为整数的十六进制表示。被视为HEX一部分的唯一字符是0123456789abcdefABCDEF。字符组合0x是默认前缀；它不是数字的一部分，会读取并忽略它。VEE还识别十六进制数字使用的0x和IEEE 488.2非十进制数字前缀#H。
REAL32 | 读取字符列表，把它们解释为十进制Real 32位(浮点)数字的表示。它识别所有常用符号，包括前导符号、带符号的指数和小数点。作为REAL32一部分识别的字符是0123456789-+.Ee。 VEE还会把某些字符识别为Real数字的后缀乘数 (参阅本表)。
REAL64 | 读取字符列表，把它们解释为Real 64位(浮点)数字的表示。它识别所有常用符号，包括前导符号、带符号的指数和小数点。作为REAL一部分识别的字符是0123456789-+.Ee。 VEE还会把某些字符识别为Real数字的后缀乘数 (参阅本表)。
COMPLEX | 读取两个REAL64的同等值，把它们解释为复数。第一次读取的是实数部分，第二次读取的是虚数部分。
PCOMPLEX | 读取两个REAL64的同等值，把它们解释为极坐标形式的复数。某些工程设计学科把这称为"相量符号"。第一次读取的数视为幅度，第二次读取的数视为角度。可以为事务中的相位指定度量单位。
COORD | 读取两个或多个REAL64的同等值，把它们解释为矩形坐标。
TIME STAMP | 读取指定的表示日历日期和/或周几的VEE时戳格式之一。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）

BINARY 编码 (read 事务)，BINBLOCK编码(read)，CONTAINER编码（write事务），IOSTATUS编码（read事务），REGISTER编码（read事务），MEMORY编码（read事务）


READ TEXT通用注释

读到末尾

READ TEXT格式支持选择读取指定数量的要素或一直读到遇到EOF。在一个事务中，NumElements是一个表达式或逗号分隔的表达式列表，指明了VarList中每个变量的维度。

如果第一个表达式是一个星号(*)，那么事务将一直读取数据，直到遇到EOF。只对下述命令支持读到末尾：

  • From File

  • From String

  • From StdIn

  • Execute Program

只有第一个维可以有一个星号，而不是一个数字。

例如，下面的事务读取文件：

READ TEXT a REAL ARRAY:*,10

它将一直读取文件，直到遇到EOF，得到一个10栏的两维数组。行数取决于文件中的数据量。读取的数据要素总数必须能够被已知维度的乘积整除，在本例中是10。如果不满足这一标准，那么将发生错误。

每个READ的字符数量

这些READ TEXT格式支持选择DEFAULT NUM CHARS和MAX NUM CHARS：

  • STRING

  • INT16

  • INT32

  • INT64

  • BOOLEAN

  • OCTAL

  • HEX

  • REAL32

  • REAL64

本节讨论了DEFAULT NUM CHARS和MAX NUM CHARS对这些格式的影响。

DEFAULT NUM CHARS和MAX NUM CHARS的基本区别是：

  • DEFAULT NUM CHARS导致VEE读取和忽略没有作为其预计的数字或字符串的一部分出现的大多数字符。

  • MAX NUM CHARS允许一直读到指定数量的8位字符，以建立指定类型的数字或字符串。一旦满足READ，VEE会停止读取字符。将读取所有字符，VEE会试着把它们转换成事务中指定的数据类型。

如果指定DEFAULT NUM CHARS，那么事务会读取填充每个变量所需的多个字符。将读取并忽略对指定数据类型没有意义的字符。

如果指定MAX NUM CHARS，VEE不会试图对指定数据类型没有意义的字符分类。如果遇到没有意义的字符，那么将读取这些字符，以后可能会产生错误。

不管是哪种情况，换行和文件末尾都作为字符串或数字的终结符使用。对数字格式，将读取和忽略任何有效字符(位)之前遇到的白空格。在读取有效字符后，白空格或其它非数字字符会结束当前READ。这些是整体行为。如需更多信息，请参阅下面的范例。

本例将区分使用INT32格式的DEFAULT NUM CHARS和MAX NUM CHARS。假设您想读取包含下述数据的文件：

bird dog cat 12345 horse

不可能通过使用MAX NUM CHARS的READ TEXT INT32事务，从这些数据中提取整数12345，而不管读取多少个字符。这是因为将一直读取数字前面的字符bird dog cat，因此不能转换成整数，从而会生成错误。

DEFAULT NUM CHARS将通过读取并忽略bird dog cat，作为分界符处理5以后的白空格，来提取整数12345。

带引号的字符串的影响

带引号的字符串影响着所有I/O路径的READ TEXT QSTR和READ TEXT TOKEN行为，及仪器或接口I/O的READ TEXT STRING行为。在本讨论中，带引号的字符串是指在开头和结尾带有双引号字符、且没有嵌入(非换码)双引号字符的字符集。双引号字符是ASCII 34十进制字符。带有双引号影响着这些READ事务把字符分组成字符串和令牌的方式以及怎样处理嵌入式控制字符和换码符。

在本讨论中，控制字符和换码符有特定的含义。控制字符是与其中一个ASCII字符0-31十进制数字对应的单字节数据。例如，换行是ASCII 10十进制数据，符号<LF>在本讨论中表示换行符。字符串\n是一个人可以阅读的换码符，代表VEE识别的换行。

在处理带引号的字符串时，某些事务的行为取决于特定的I/O路径。对仪器I/O之外的所有I/O路径，READ TEXT QSTR会以特殊方式处理带引号的字符串。对仪器I/O之外的所有I/O路径，READ TEXT STRING不识别带引号的字符串。

对仪器I/O，没有READ TEXT QSTR事务。相反，READ TEXT STRING识别带引号的字符串，相应地进行处理，因为带引号的字符串在IEEE 488.2规范中有特定的含义。对包括仪器在内的所有I/O路径，READ TEXT TOKEN会以特殊方式处理带引号的字符串。在下面的讨论中，我们假设I/O路径是文件I/O。

在字符串没有以双引号开头和结尾时，READ TEXT STRING事务及指定SPACE DELIM的READ TEXT TOKEN事务读取和丢弃换行之外的控制字符。在STRING和TOKEN事务中，换行终结READ。换行符序列简单地作为两个字符(\和n)读取，如\n(换行)。

在带双引号的字符串内部，READ TEXT QSTR和READ TEXT TOKEN将读取引起来的所有字符(包括控制字符)，并把它们存储在输入变量中。将读取嵌入的换行，象任何其它字符一样处理，而不会终结当前READ。将读取换码符序列，转换成相应的单字符。

通过使用范围，可以最好地解释分组效应。在本节其余部分的讨论中，读取的数据是一个文件，内容如下：

"This is in quotes." This is not.

假设对这些事务使用From File读取上面的文件：

READ TEXT x QSTR

READ TEXT y QSTR

在读取文件后，结果是：

x = This is in quotes.

y = This is not.

双引号被解释为分界符，不会出现在输入变量中。

现在，假设对这些事务使用From File读取上面的文件：

READ TEXT x QSTR MAXFW:4

READ TEXT y QSTR

在读取文件后，结果是：

x = This

y = This is not.

这里的双引号仍作为分界符。第一个事务从双引号读到双引号，把前4个字符指配给x。这会把文件的读取指针定位在第二次发生This前面。第二项事务象以前一样读取相同的字符串。

然后假设对这些事务使用From File读取上面的文件：

READ TEXT x TOKEN

READ TEXT y QSTR

在读取文件后，结果是：

x = This is in quotes.

y = This is not.

这里，双引号把整个第一句有效地放在一个令牌中。尽管默认TOKEN分界符是白空格，但带引号的整个字符串作为单个令牌处理。此外，TOKEN读取和丢弃双引号字符。


CHAR 格式（read事务）

READ TEXT CHAR事务采取下面的形式：

READ TEXT VarList CHAR:NumChar ARRAY:NumStr

VarList是单个Text变量或逗号分隔的Text变量列表。

NumChar指定必须读取的8位字符数量，以填充VarList中每个变量的每个要素。

NumStr是单个表达式或逗号分隔的表达式列表，指明VarList中每个变量的维度。如果事务配置成读取一个标量，那么事务中不会出现关键字ARRAY。

ARRAY:1是有一个要素的一维数组。VEE可以区分标量与只含有一个要素的一维数组。

在希望一次只读取一个字符时，或需要读取每个字符、而又不忽略任何进入的数据时，可以使用CHAR格式。

这一事务读取两个两维Text数组。每个数组中的每个要素包含两个字符。

READ TEXT X,Y CHAR:2 ARRAY:2,2

如果上面的事务读取的文件包含下面的字符：

<space>ABCDEFG"AB"<LF>'CD

那么变量X和Y在READ后面包含下面的值：

X [0 0] = <space>A

X [0 1] = BC

X [1 0] = DE

X [1 1] = FG

Y [0 0] = "A

Y [0 1] = B"

Y [1 0] = <LF>'

Y [1 1] = CD

符号<space>表示单个字符空格(ASCII 32十进制)。符号<LF>表示单个字符换行(ASCII 10十进制)。在读取空格、换行和双引号时不需要任何特殊考虑或解释。

另请参阅

TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


TOKEN格式（read事务）

READ TEXT TOKEN事务采取下面的形式：

READ TEXT VarList TOKEN Delimiter ARRAY:NumElements

VarList是单个Text变量或逗号分隔的Text变量列表。

Delimiter指定结束(分隔)每个令牌的字符组合。

NumElements是单个表达式或逗号分隔的表达式列表，指明VarList中每个变量的维度。如果事务配置成读取一个标量，那么事务中不出现ARRAY关键字。ARRAY:1是带有一个要素的一维数组。VEE可以区分标量与只包含一个要素的一维数组。

TOKEN格式允许使用下面其中一个Delimiter选项定义令牌的分隔符(边界)：

  • SPACE DELIM

  • INCLUDE CHARS

  • EXCLUDE CHARS

下面对分隔符的讨论解释了分隔符的选择怎样影响读取下面所示内容的文件( file1)：

A phrase.
"A phrase."
Tab follows.
XOXXOOXXXOOOXXXX
XAXXBCXXXDEF

文件中只包含字母O，不包含数字零。

上面文件的前四行中，在每一行的结尾有一个看不见的换行符，在文本编辑器中它会显示出来，如vi。

SPACE DELIM

如果使用SPACE DELIM，令牌将使用任何空白处结束。空白处包括空格、制表符、换行和文尾。这大体上与书面英文单词对应。通过使用SPACE DELIM，可以读取包含一段文本的文件，并分隔各个单词。

带双引号的字符串进行特殊处理。带双引号的字符串作为一个令牌读取，去掉双引号。在输出变量中返回嵌入在带双引号的字符串中的控制字符(ASCII 0-31十进制)。带双引号的字符串中嵌入的换码符(如\n)转换成同等的控制字符。

对双引号的字符串的这种特殊处理只适用于SPACE DELIM事务。INCLUDE CHARS和EXCLUDE CHARS处理双引号、换码符和控制字符的方式与任何其它字符相同。

如果对这一事务使用SPACE DELIM读取file1中的数据：

READ TEXT a TOKEN ARRAY:8

变量a包含下面的值：

a[0] = A

a[1] = phrase.

a[2] = A phrase.

a[3] = Tab

a[4] = follows

a[5] = .

a[6] = XOXXOOXXXOOOXXXX

a[7] = XAXXBCXXXDEF

INCLUDE CHARS

如果使用INCLUDE CHARS，那么可以指定READ中返回的令牌中"包括"的字符列表。这些指定的字符将是任何令牌中返回的唯一字符。指定INCLUDE字符之外的任何其它字符都会结束当前令牌。令牌中不包括结束字符，将剥离结束字符。

如果VEE对这一事务使用INCLUDE CHARS读取file1中的数据：

READ TEXT a TOKEN INCLUDE:"X" ARRAY:7

变量a包含下面的值：

a[0] = X

a[1] = XX

a[2] = XXX

a[3] = XXXX

a[4] = X

a[5] = XX

a[6] = XXX

如果VEE对这一事务使用INCLUDE CHARS读取file1中的数据：

READ TEXT a TOKEN INCLUDE:"OXZ" ARRAY:4

变量a包含下面的值：

a[0] = XOXXOOXXXOOOXXXX

a[1] = X

a[2] = XX

a[3] = XXX

INCLUDE列表中的第一个字符是字母O，而不是数字零。

假设要读取包含下面的数据的文件( file2 )：

111 222 333 444 555

如果要使用这一事务读取file2中的数据：

READ TEXT x,y,z TOKEN INCLUDE:"1234567890"

Text变量x, y和z将包含下面的值：

x = 111

y = 222

z = 333

完成这一操作的另一种方式是指定一个大于1的ARRAY，把数据读入数组中。例如，如果使用这一事务读取上面的数据：

READ TEXT x TOKEN INCLUDE:"1234567890" ARRAY:3

Text变量x包含下面的值：

x[0] = 111

x[1] = 222

x[2] = 333

EXCLUDE CHARS

如果使用EXCLUDE CHARS，可以指定字符列表，其中任何一个字符都会结束当前令牌。令牌中不包括结束字符。将读取并丢弃结束字符。

如果对这一事务使用EXCLUDE读取file1中的数据：

READ TEXT a TOKEN EXCLUDE:"X" ARRAY:8

变量a包含下面的值：

a[0] = A phrase.<LF>"A phrase."<LF>Tab follows .<LF>

a[1] = O

a[2] = OO

a[3] = OOO

a[4] = <LF>

a[5] = A

a[6] = BC

a[7] = DEF<LF>

假设从仪器向VEE发送下面的数据。

++1.23++4.98++0.45++2.34++0.01++23.45++12.2++

如果VEE使用这一事务读取上面的数据：

READ TEXT x TOKEN EXCLUDE:"+" ARRAY:7

变量x将包含下面的值：

x[0] = null string (empty)

x[1] = 1.23

x[2] = 4.98

x[3] = 0.45

x[4] = 2.34

x[5] = 0.01

x[6] = 23.45

尽管提供了7个"数字"，但只读取6个数字。在这一事务结束时，VEE读取了7个以+结束的令牌，包括在填充任何数据前结束的第一个字符。

备注

EXCLUDE CHARS的行为在VEE 5 Execution Mode和以后版本与VEE 4 Execution Mode和以前版本之间不同。如需差异介绍，请参阅READ TEXT事务。

另请参阅

CHAR 格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


STRING格式（read事务）

READ TEXT STRING事务采取下面的形式：

READ TEXT VarList STR ARRAY:NumElements

或

READ TEXT VarList STR MAXFW:NumChars ARRAY:NumElements

VarList是单个Text变量或逗号分隔的Text变量列表。

NumChars指定在构建数字时可以读取的8位字符的最大数量。

NumElements是单个表达式或逗号分隔的表达式列表，指明VarList中每个变量的维度。如果事务配置成读取一个标量，那么事务中不出现ARRAY关键字。ARRAY:1是带有一个要素的一维数组。VEE可以区分标量与只包含一个要素的一维数组。

这一事务读取所有进入的字符，返回字符串。它删除前面的空格。下面的讨论只适用于仪器I/O路径，如GPIB或VXI。所有其它I/O路径，如文件或名称12-pipes，将不会以特殊方式处理Quoted Strings。如需与带双引号的字符串对READ TEXT STRING的影响有关的详情，请参阅带引号的字符串的影响。

控件和换码符的影响

在本讨论中，控制字符和换码符具有特定的意义。控制字符是单字节数据，与ASCII字符十进制0-31之一对应。例如，换页是ASCII 10十进制，符号<LF>表示本讨论中的换页符。字符串\n是一种人可以读的换码符，表示VEE识别的换页。VEE使用换码符在带引号的字符串内部表示控制字符。

根据是否出现在带双引号的字符串内部，控制字符和换码符会以不同的方式处理。

在带双引号的字符串外部，会读取和丢弃换页之外的控制字符。换页结束当前字符串。换码符如\n作为两个单独的字符读取(\和n)。

在带双引号的字符串内部，会读取控制字符和换码符，并包括在READ返回的字符串内部。带双引号的字符串内部的换页不会结束当前字符串。换码符如\n作为同等的单个字符读取(<LF>)，并作为控制字符包括在返回的字符串中。

假设想使用READ TEXT STRING事务读取下面的字符串数据：

Simple string.

Random \n % $ * 慉'

"In quotes."

"In quotes

with control."

"In quotes\nwith escape."

  • 如果使用这一事务读取字符串数据：

READ TEXT x STR ARRAY:5

变量x包含下面的值：

a[0] = Simple string.

a[1] = Random \n % $ * 慉'

a[2] = In quotes.

a[3] = In quotes<LF>with control.

a[4] = In quotes<LF>with escape.

  • 如果使用这一事务读取相同的字符串数据：

READ TEXT x STR MAXFW:16 ARRAY:5

变量x包含下面的值：

a[0] = Simple string.

a[1] = Random \n % $ *

a[2] = 慉'

a[3] = In quotes.

a[4] = In quotes<LF>with c

在已经读取16个字符 (a[1])或读取没有引号的<LF> (a[2])时，这一事务结束当前READ。带引号的字符串从双引号到双引号读取，返回前16个分界的字符(a[4])。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


QUOTED STRING格式（read事务）

READ TEXT QUOTED STRING事务采取下面的形式：

READ TEXT VarList QSTR ARRAY:NumElements

或

READ TEXT VarList QSTR MAXFW:NumChars ARRAY:NumElements

VarList是单个Text变量或逗号分隔的Text变量列表。

NumChars指定在试图构建字符串时可以读取的8位字符的最大数量。

NumElements是单个表达式或逗号分隔的表达式列表，它指定VarList中每个变量的维度。如果事务配置成读取一个标量，那么事务中不出现ARRAY关键字。ARRAY:1是一个有一个要素的一维数组。VEE可以区分标量和只包含一个要素的一维数组。

这一事务读取所有进入的字符，返回字符串。下面的讨论与所有非仪器I/O路径有关。仪器I/O路径不实现READ TEXT QSTR事务。如需与双引号字符串对READ TEXT STRING的影响有关的详细信息，请参阅双引号的影响。

另请参阅控件和换码符的影响。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


INTEGER 格式（read事务）

READ TEXT INTEGER事务采取下面的形式：

READ TEXT VarList INT16(或INT32, INT64) ARRAY:NumElements

或

READ TEXT VarList INT16(或INT32, INT64) MAXFW:NumChars ARRAY:NumElements

VarList是单个Integer变量或由Integer变量组成的逗号分隔的列表。

NumChars指定在构建数值时可以读取的最大8位字符数量。

NumStr是一个表达式或逗号分隔的表达式列表，指明了VarList中每个变量的维度。如果事务配置成读取标量，那么事务中不出现ARRAY关键字。ARRAY:1是有一个要素的一维数组。VEE区分标量与只包含一个要素的一维数组。

READ TEXT INT16事务把进入的字符解释为16位2的补数整数。这些整数的有效范围是32767到-32768。超出这一范围的任何数字会隐藏起来，因此永久不会发生溢出情况。例如，32768解释为-32768。

READ TEXT INT32事务把进入的字符解释为32位2的补数整数。这些整数的有效范围是2 147 483 647到-2 147 483 648。超出这一范围的任何数字会隐藏起来，因此永久不会发生溢出情况。例如，2 147 483 648解释为-2 147 483 648。

READ TEXT INT64事务把进入的字符解释为64位2的补数整数。这些整数的有效范围是-9223372036854775808到+9223372036854775807。超出这一范围的任何数字会隐藏起来，因此永远不会发生溢出情况。例如，9223372036854775808解释为-9223372036854775808。

在开始构建数值时，VEE丢弃没有识别为数值一部分的任何前导字符。一旦VEE开始构建数值，那么不能识别为数值一部分的任何字符都将终结该数值的READ。下表说明了识别为INT16、INT32或INT64一部分的字符组合。

符号 | 识别的字符
十进制 | 有效字符是?/span>0123456789。前导零不解释为八进制前缀，因为其位于VEE数据输入字段中。
VEE十六进制 | VEE把0x解释为十六进制数值的前缀。前缀后面的有效字符是0123456789aAbBcCdDeEfF。
IEEE 488.2二进制 | VEE把#b或#B解释为二进制数值的前缀。前缀后面的有效字符是0和1。
IEEE 488.2八进制 | VEE把#q或#Q解释为八进制数值的前缀。前缀后面的有效字符是01234567。
IEEE 488.2十六进制 | VEE把#h或#H解释为十六进制数值的前缀。前缀后面的有效字符是0123456789aAbBcCdDeEfF。

所有下述符号都解释为十进制Integer值15：

15

+15

015

0xF

0xf

#b1111

#Q17

#hF

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


OCTAL格式（read事务）

READ TEXT OCTAL事务采取下面的形式：

READ TEXT VarList OCT ARRAY:NumElements

或

READ TEXT VarList OCT MAXFW:NumChars

其中：

ARRAY:NumElements

VarList是单个Integer变量或由Integer变量组成的逗号分隔的列表。

NumChars指定在构建数值时可以读取的最大8位字符数量。

NumElements是一个表达式或逗号分隔的表达式列表，指明了VarList中每个变量的维度。如果事务配置成读取标量，那么事务中不出现ARRAY关键字。ARRAY:1是有一个要素的一维数组。VEE区分标量与只包含一个要素的一维数组。

READ TEXT OCTAL事务把进入的字符解释为表示64位2的补数整数的八进制数字。这些整数的有效范围是-9223372036854775808到+9223372036854775807十进制数字。

如果事务指定MAX NUM CHARS (MAXFW)，那么读取的八进制数值可以包含超过64位的数据。例如，假设VEE读取下面的八进制数据：

37723745621456724377745277234

使用下面的事务：

READ TEXT x OCT MAXFW:32

VEE读取八进制数据中的所有数字，但只使用最后22个数字(5621456724377745277234)为x值构建数值。这是因为每个数字与3个位对应，八进制数值必须存储在VEE Integer中，其中包含64个位。22个八进制数字得到66位，它丢掉最有用的两个位，以适应VEE Integer中的值。不可能发生溢出。

备注

在VEE 6&7及以前的模式中，READ TEXT OCTAL事务把进入的字符解释为代表32位2的补数整数的八进制数字。这些整数的有效范围是2 147 483 647到-2 147 483 648十进制数字。

如果事务指定DEFAULT NUM CHARS，它将持续读取字符，直到构建足够的数值，填充VarList中的每个变量。换行符不会提前结束数值构建。例如，下面的事务：

READ TEXT x OCT ARRAY:4

把下面八进制数据的每一行解释为相同的四个八进制数值集：

0345 067 003<LF>0377<LF>

345 67 3 377<EOF>

345,67,3,377,45,67<EOF>

符号<LF>表示单字符换行(ASCII 10十进制)。符号<EOF>表示文件末尾条件。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


HEX 格式（read事务）

READ TEXT HEX事务采取下面的形式：

READ TEXT VarList HEX ARRAY:NumElements

或

READ TEXT VarList HEX MAXFW:NumChars ARRAY:NumElements

VarList是单个Integer变量或由Integer变量组成的逗号分隔的列表。

NumChars指定在构建数字时可以读取的8位字符数量。

NumElements是一个表达式或逗号分隔的表达式列表，指明了VarList中每个变量的维度。如果事务配置成读取标量，那么事务中不出现ARRAY关键字。ARRAY:1是有一个要素的一维数组。VEE区分标量与只包含一个要素的一维数组。

READ TEXT HEX事务把进入的字符解释为代表64位2的补数整数。这些整数的有效范围是-9223372036854775808十进制到+9223372036854775807十进制。

如果事务指定MAX NUM CHARS (MAXFW)，那么十六进制数字读取中可能包含超过64位的数据。例如，假设VEE读取下面的十六进制数据：

ad2469Ff725BCdef37964 十六进制数据

使用这一事务：

READ TEXT x HEX MAXFW:32

VEE读取十六进制数据中的所有数字，但只使用最后16个数字(9Ff725BCdef37964)，为x值构建一个数值。这是因为每个数字与4个位对应，十六进制数字必须存储在VEE Integer中，其包含64个位。16个十六进制数字恰好得到64个位，不可能发生溢出。

备注

在VEE 6&7及以前的模式中，READ TEXT HEX事务把进入的字符解释为代表32位2的补数整数的八进制数字。这些整数的有效范围是2 147 483 647到-2 147 483 648十进制值。

假设VEE读取相同的十六进制数据，但使用不同的MAX NUM CHARS，如下面的事务所示：

READ TEXT x HEX MAXFW:3 ARRAY:7

在这种情况下，事务读取相同的数据，把它解释为7个Integer，每个整数由三个十六进制数字组成。

如果事务指定DEFAULT NUM CHARS，那么它将持续读取字符，直到其构建足够的数字，填充VarList中的每个变量。每个数字将读取恰好8个十六进制数字。换行符将不会提前结束数字构建。

假设VEE读取相同的十六进制数据，但使用DEFAULT NUM CHARS，如下面的事务所示：

READ TEXT x HEX ARRAY:2

在这种情况下，事务读取相同的数据，把它解释为两个Integer，每个整数由八个十六进制数字组成。不读取最后五个数字(37946)。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


REAL32和REAL64格式（read事务）

READ TEXT REAL32和READ TEXT REAL64事务采取下面的形式：

READ TEXT VarList REAL32(或REAL64) ARRAY:NumElements

或

READ TEXT VarList REAL32(或REAL64) MAXFW:NumChars ARRAY:NumElements

VarList是单个Real变量或逗号分隔的Real变量列表。

NumChars指定在构建数字时可以读取的8位字符的最大数量。

NumElements是单个表达式或逗号分隔的表达式列表，指明VarList中每个变量的维度。如果事务配置成读取一个标量，那么事务中不出现ARRAY关键字。ARRAY:1是带有一个要素的一维数组。VEE可以区分标量与只包含一个要素的一维数组。

这一事务读取的十进制数字被解释为VEE Real32，这是一个32位IEEE 754浮点数字。这些数字的范围是：

-1.175 494 35E-38

-3.402 823 47E+38

到

3.402 823 47E+38

1.175 494 35E-38

这一事务读取的十进制数字被解释为VEE Real64，这是一个64位IEEE 754浮点数字。这些数字的范围是：

-1.797 693 134 862 315E+308

-2.225 073 858 507 202E-307

到

2.225 073 858 507 202E-307

1.797 693 134 862 315E+308

如果事务指定MAX NUM CHARS (MAXFW)，那么读取的Real数字可能包含超过17位的数据。例如，假设VEE读取下面的实数数据：

1.234567890123456789实数数据

使用这一事务：

READ TEXT x REAL64 MAXFW:19

VEE读取实数数据中的所有位，但只使用尾数中17个最有效的位，为x值构建一个数字。这是因为每个Real包含一个54位尾数，其相当于大于16个小数位，但小于17个小数位。结果，x的值为1.2345678901234567。

Text到Real转换不能保证对最无效的位得到相同的值。比较两个最无效的位是失策的。

假设VEE读取相同的实数数据，但使用不同的MAX NUM CHARS，如下面的事务中：

READ TEXT x REAL64 MAXFW:6 ARRAY:3

在这种情况下，该事务读取相同的数据，把它解释为3个Real数字，每个数字由6个十进制字符组成。不读取最后两个字符。

如果事务指定DEFAULT NUM CHARS，那么它将继续读取字符，直到构建足够的数字，填充VarList中的每个变量。每个数字将读取最多17个小数位。换行字符、空白处和其它非数字字符将在读取17位以前结束构建数字。

READ TEXT REAL64和REAL32事务识别Real数字最常用的十进制符号，包括前导符号、小数点和带符号的指数。字符+-.0123456789Ee被所有READ TEXT REAL事务识别为Real数字的有效部分。如果事务指定DEFAULT NUM CHARS，那么还会识别下表中显示的后缀字符。后缀字符必须直接位于数字的最后位后面，而没有相干的空白处。

后缀 | 乘法器
P | 1015
T | 1012
G | 109
M | 106
k or K | 103
m | 10-3
u | 10-6
n | 10-9
p | 10-12
f | 10-15

下面的Text数据代表六个实数：

1001

+1001.

1001.0

1.001E3

+1.001E+03

1.001K

  • 如果VEE使用下面的事务读取实数文本数据：

READ TEXT x REAL64 ARRAY:6

那么Real变量x的每个要素包含值1001：

  • 如果VEE使用下面的事务读取相同的数据：

READ TEXT x REAL64 MAXFW:20 ARRAY:6

那么Real变量x的前五个要素包含值1001，第六个要素包含值1.001。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），HEX 格式（read事务），OCTAL格式（read事务），COMPLEX, PCOMPLEX和COORD格式（read事务）


COMPLEX, PCOMPLEX和COORD格式（read事务）

COMPLEX, PCOMPLEX和COORD对应拥有相同名称的VEE多字段数据类型。这三种READ格式的行为非常类似。除特别注明外，本节介绍的行为适用于这三种格式。

与VEE数据类型Complex、PComplex和Coord由多个Real64数字组成一样，COMPLEX、PCOMPLEX和COORD格式在本质上是REAL64格式的复合形式。它写入每个多字段数据类型的Real构成值，适用的输出规则与单独的REAL64格式化值相同。

COMPLEX格式

READ TEXT COMPLEX事务采取下面的形式：

READ TEXT VarList CPX ARRAY:NumElements

每个READ TEXT COMPLEX事务读取两个REAL格式化数字的同等值。读取的第一个数字被理解为实数部分，读取的第二个数字被理解为虚数部分。

PCOMPLEX格式

READ TEXT PCOMPLEX事务采取下面的形式：

READ TEXT VarList PCX:PUnit ARRAY:NumElements

PUnit指定测量PComplex相位的角测度的单位。

每个READ TEXT PCOMPLEX事务读取两个 REAL格式化数字的同等值。读取的第一个数字被理解为幅度，读取的第二个数字被理解为相位。

如果读取COMPLEX, PCOMPLEX或COORD格式的任何事务遇到没有括上的圆括号，那么其会预计找到一个括上的圆括号。

假设想读取一个文件，其中包含下面的含有圆括号的数据：

(1.23 , 3.45 (6.78 , 9.01) (1.23 , 4.56)

如果VEE使用这一事务读取数据：

READ TEXT x,y CPX

那么变量x和y包含下面的Complex值：

x = (1.23 , 3.45)

y = (1.23 , 4.56)

该事务读取上面的6.78和9.01，找到括上的圆括号。如果数据中完全省掉圆括号，那么y的值将为(6.78 , 9.01)。

COORD格式

READ TEXT COORD事务采取下面的形式：

READ TEXT VarList COORD:NumFields ARRAY:NumElements

VarList是单个Coord变量或逗号分隔的Coord变量列表。

NumFields是单个变量或表达式，指定每个Coord值中的矩形维度数量。为无差错地执行READ，这个值必须是2或更大。

NumElements是单个表达式或逗号分隔的表达式列表，指定VarList中每个变量的维度。如果该事务配置成读取一个标量，那么事务中不会出现关键字ARRAY。ARRAY:1是一个有一个要素的一维数组。VEE可以区分标量与只包含一个要素的一维数组。

另请参阅

CHAR 格式（read事务）, TOKEN格式（read事务）, STRING格式（read事务）, QUOTED STRING格式（read事务）, INTEGER 格式（read事务），REAL32和REAL64格式（read事务），HEX 格式（read事务），OCTAL格式（read事务）


BINARY 编码 (read 事务)

READ BINARY事务采取下面的形式：

READ BINARY VarList DataType ARRAY:NumElements

VarList是一个变量或逗号分开的变量列表。

DataType　是其中下面一个预先定义的VEE数据类型：

• Boolean - 32位2的补数整数

• BYTE - 8位不带符号的字节

• INT16 - 16位2的补数整数

• INT32 - 32位2的补数整数

• INT64 - 64位2的补数整数

• REAL32 - 32位IEEE 754浮点数字

• REAL64 - 64位IEEE 754浮点数字

• STRING - 以空字符结尾的字符串

• COMPLEX - 等于两个REAL64

• PCOMPLEX - 等于两个REAL64

• COORD - 等于两个或多个REAL64

备注

VEE 5及更低的执行模式使用INT32存储和处理所有整数值，使用Real数据类型(也称为REAL64)存储和处理所有实数。因此，INT16和REAL32数据类型只用于I/O操作。VEE 5及更低的执行模式在输入事务上为仪器I/O执行下面的数据类型转换。

在VEE 5及更低的执行模式下，从仪器上输入的INT１６的值将逐个被转换成INT３２的值。该转换将INT16的值默认为带符号数。你如果需要一个无符号的INT32的数，可以用下面的 Formula　对该数进行处理：

BITAND(a, 0xFFFF)

在VEE 5及更低的执行模式下，从仪器上输入的 Real32 的值将逐个被转换成 Real64 的值。

在VEE 6执行模式下，数据转换成相应的类型，如果数据超出范围，那么会生成错误。

NumElements 是一个表达式或逗号分开的表达式列表。它指定　VarList　中每个变量的维数。 如果第一个表达式是一个星号(*), 该事务就会一直读到 EOF 才停止。这种读直到结束的操作只支持以下事务对象：

  • From File

  • From String

  • From StdIn

  • Execute Program

只有第一维可以为星号而不是数字。如果一个事物被配置成读一个标量，关键字 ARRAY 不会在事务中出现。 ARRAY:1 是一个只有一个元素的一维数组。在　VEE　中标量和只有一个元素的一维数组是不同的。

例如，下面的事务从一个文件读数：

READ BINARY a REAL64 ARRAY:*,10

它会一直读到遇见 EOF 才停止。读回的结果是一个有１０列的二维数组。行数取决于文件中数据的个数。读回的数据元素的总数必须为已知各维数的乘积的倍数。本例中为 10.

READ BINARY 事务要求输入数据的格式与同等的WRITE BINARY事务输出的数据格式完全一致。BINARY 编码的数据具有紧凑的优点，但是它不易于与非　VEE 的应用程序共享。

另请参阅

TEXT编码（read事务），BINBLOCK编码(read事务)，CONTAINER编码( read事务），IOSTATUS编码（read事务），REGISTER编码（read事务），MEMORY编码（read事务）


BINBLOCK编码(read事务)

BINBLOCK编码(read)

READ BINBLOCK事务采取下面的形式：

READ BINBLOCK VarList DataType ARRAY:NumElements

VarList是单个变量或用逗号分隔的变量列表。

DataType是下面预先定义的VEE数据类型之一：

• BYTE - 8位无符号字节

• INT16 - 16位2的补数整数

• INT32 - 32位2的补数整数

• REAL32 - 32位 IEEE 754浮点数

• REAL64 - 64位 IEEE 754浮点数

• COMPLEX - 等于两个REAL64

• PCOMPLEX -等于两个REAL64

• COORD - 等于两个或多个REAL64

NumElements是单个变量或用逗号分隔的变量列表，指明VarList中每个变量的维度。列数等于binblock包含的通道数量。行数等于每条通道的读数。只有第一个维度可以有一个星号，而不是数字。

如果第一个表达式是星号(*)，该事务将读取数据，直到遇到EOF。只支持使用下述命令读到文尾：

• From File

• From String

• From StdIn

• Execute Program

如果事务配置成读取一维数组，那么对单个通道，单个维度代表多个行，可以有一个星号。

例如，下面的读取文件事务：

READ BINBLOCK a REAL64 ARRAY:*,10

将读取文件，直到遇到EOF，得到一个10列的两维数组。每一列表示一条仪器通道。行数取决于每条通道中的数据量。binblock包含的数据要素总数必须能够被列数除尽，在本例中是10。

不需要指定与进入的数据格式有关的任何其它信息，因为码组包头包含足够的信息。READ BINBLOCK可以使用WRITE BINBLOCK事务读取前面介绍的任何码组格式。

下面的事务读取示波器提供的两条轨迹，示波器把轨迹格式化为IEEE 488.2确定长度任意码组响应数据：

READ BINBLOCK a,b REAL64

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，CONTAINER编码( read事务），IOSTATUS编码（read事务），REGISTER编码（read事务），MEMORY编码（read事务）


CONTAINER编码( read事务）

READ CONTAINER事务采取下面的形式：

READ CONTAINER VarList

VarList是单个变量或逗号分隔的变量列表。

READ CONTAINER事务读取WRITE CONTAINER事务写入的特殊文本表示方式中存储的数据。在使用READ CONTAINER时不需要指定其它指标，如格式，因为信息是容器的一部分。

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，BINBLOCK编码(read事务)，IOSTATUS编码（read事务），REGISTER编码（read事务），MEMORY编码（read事务）


REGISTER编码（read事务）

READ REGISTER用来从VXI仪器的A16存储器中读取值。

READ REGISTER事务采取下面的形式：

READ REG: SymbolicName ExpressionList INCR ARRAY:NumElements

或

READ REG: SymbolicName ExpressionList ARRAY:NumElements

其中：

SymbolicName是在配置VXI仪器过程中定义的名称。这个名称指明仪器寄存器空间内部的具体地址。READ REGISTER事务的具体数据类型是：

BYTE - 不带符号的8位字节

WORD16 - 16位2的补数整数

WORD32 - 32位2的补数整数

REAL32 - 32位IEEE 754浮点数字

在配置VXI仪器过程中也指定这些数据类型，这些数据类型不会出现在事务中。

ExpressionList是一个表达式或逗号分隔的表达式列表。

INCR指定从SymbolicName指定位置开始，以递增的方式从寄存器中读取数组数据。从开始位置读取数组的第一个元素，从该位置加上长度等于数据类型字节数的偏置读取第二个元素，依此类推，直到读取数组的所有元素。如果在事务中没有指定INCR，那么将从SymbolicName指定的单个位置读取整个数组。

NumElements是一个表达式或逗号分隔的表达式列表，指定了VarList中每个变量的维度。如果事务配置成读取标量，ARRAY关键字不会出现在事务中。ARRAY:1是有一个要素的一维数组。VEE区分标量与只包含一个要素的一维数组。

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，BINBLOCK编码(read事务)，CONTAINER编码( read事务），IOSTATUS编码（read事务），MEMORY编码（read事务）


MEMORY编码（read事务）

READ MEMORY用来从VXI仪器的A24或A32存储器中读取值。

READ MEMORY事务采取下面的形式：

READ MEM: SymbolicName ExpressionList INCR ARRAY:NumElements

或

READ MEM: SymbolicName ExpressionList ARRAY:NumElements

其中：

SymbolicName是在配置VXI仪器过程中定义的名称。这个名称指明仪器扩展存储器内部的具体地址。READ MEMORY事务的具体数据类型是：

  • BYTE - 不带符号的8位字节

  • WORD16 - 16位2的补数整数

  • WORD32 - 32位2的补数整数

  • REAL32 - 32位IEEE 754浮点数字

  • WORD32*2 - Int32数组相邻要素中的两个32位2的补数整数

  • 　REAL64 - 64位IEEE 754浮点数字

在配置VXI仪器过程中也指定这些数据类型，这些数据类型不会出现在事务中。

ExpressionList是一个表达式或逗号分隔的表达式列表。

INCR指定从SymbolicName指定位置开始，以递增的方式从存储位置中读取数组数据。从开始位置读取数组的第一个要素，从该位置加上长度等于数据类型字节数的偏置读取第二个要素，依此类推，直到读取数组的所有要素。如果在事务中没有指定INCR，那么将从SymbolicName指定的单个存储位置读取整个数组。

NumElements是一个表达式或逗号分隔的表达式列表，指定了VarList中每个变量的维度。如果事务配置成读取标量，ARRAY关键字不会出现在事务中。ARRAY:1是有一个要素的一维数组。VEE区分标量与只包含一个要素的一维数组。

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，BINBLOCK编码(read事务)，CONTAINER编码( read事务），IOSTATUS编码（read事务），REGISTER编码（read事务）


IOSTATUS编码（read事务）

READ IOSTATUS事务采取下面的形式：

READ IOSTATUS STS Bits VarList

或

READ IOSTATUS DATA READY VarList

VarList是单个Integer变量或逗号分隔的Integer变量列表。

Direct I/O for GPIO接口、From StdIn和To/From Named Pipe使用READ IOSTATUS事务。

GPIO的READ IOSTATUS事务读取接口上提供的外设状态位。读取的位数取决于接口的型号。它返回一个整数值，这是加权后的所有状态位之和。

例如，HP 98622A GPIO接口支持两条外设状态线：STI0和STI1。下表说明了怎样解释这一事务中的x值：

READ IOSTATUS STS Bits a

读取的值 | STI1 | STI0
0 | 0 | 0
1 | 0 | 1
2 | 1 | 0
3 | 1 | 1

READ IOSTATUS事务读取状态线的瞬时值；状态线没有以任何方式进行锁存或缓冲。

如果有准备读取的数据，READ IOSTATUS事务会返回Boolean YES (1)。如果不存在数据，那么返回Boolean NO (0)。可以使用READ IOSTATUS事务，避免阻塞程序执行、直到提供数据的READ。

另请参阅

TEXT编码（read事务），BINARY 编码 (read 事务)，BINBLOCK编码(read事务)，CONTAINER编码( read事务），REGISTER编码（read事务），MEMORY编码（read事务）


EXECUTE事务

EXECUTE事务发送低级命令，控制与某个对象有关的文件、仪器或接口。EXECUTE用来调节文件指针，清除缓冲器，提供硬件接口低级控制。下面汇总了各种EXECUTE命令。

命令 | 说明
To File, From File
REWIND | 把读取指针(From File)或写入指针(To File)设置在文件的开头，不改变文件中的数据。
CLEAR | (仅适用于To File)。擦除文件中的现有数据，把写入指针设置在文件的开头。
CLOSE | 明确关闭文件。适用于多个流程读写同一个文件的情况。
DELETE | 明确删除文件。适用于删除临时文件。
Interface Operations
CLEAR | 对GPIB，通过发送DCL (Device Clear)清除所有仪器。对VXI，复位接口，运行资源管理器。
TRIGGER | 对GPIB，通过发送GET (Group Execute Trigger)触发确定收听地址的所有仪器。对VXI，触发指定的背板触发线或嵌入式控制器上的外部触发器。
LOCAL | 对GPIB，释放REN (Remote Enable)线，把仪器置于本地模式。
REMOTE | 对GPIB，确认REN (Remote Enable)线。
LOCAL LOCKOUT | 对GPIB，发送LLO (Local Lockout)消息。在发送LLO时任何远程仪器会锁住前面板操作。
ABORT | 通过确认IFC (Interface Clear)线，清除GPIB接口。
LOCK INTERFACE | 在共享资源的多流程系统中，令一个流程在关键流程中锁定资源供自己使用，防止另一个流程使用这些资源。
UNLOCK INTERFACE | 在一个流程已经锁定共享资源供自己使用的多流程系统中，解锁资源，允许其它流程访问这些资源。
Direct I/O to GPIB
CLEAR | 通过发送SDC (Selected Device Clear)，清除Direct I/O对象地址上的仪器。
TRIGGER | 通过确定收听地址及发送GET (Group Execute Trigger)，触发Direct I/O对象地址上的仪器。
LOCAL | 把Direct I/O对象地址上的仪器置于本地状态。
REMOTE | 把Direct I/O对象地址上的仪器置于远程状态。
Direct I/O to GPIO
RESET | 通过脉冲PRESET线 (Peripheral Reset)，复位与Direct I/O对象有关的GPIO接口。
基于Direct I/O到消息的VXI
CLEAR | 通过发送字串命令Clear (0xffff)，清除与Direct I/O对象有关的 VXI仪器。
TRIGGER | 通过发送字串命令Trigger (0xedff)，触发与Direct I/O对象有关的VXI仪器。
LOCAL | 通过发送字串命令Clear Lock (0xefff)，把与Direct I/O对象有关的VXI仪器置于本地状态。
REMOTE | 通过在远程状态下发送字串命令Set Lock (0xeeff)，把与Direct I/O对象有关的VXI仪器置于本地状态。
Direct I/O到串行接口
RESET | 复位与Direct I/O对象有关的串行接口。
BREAK | 在与Direct I/O对象有关的串行接口的Data Out线上发送一个信号，具体如下： 逻辑High 400毫秒 逻辑Low 60毫秒
CLOSE | 关闭与Direct I/O对象有关的串行接口的连接。在下次连接时会重建连接(如有)。
Execute Program, To/From Named Pipe
CLOSE READ PIPE | 关闭与(To/From)对象有关的读取指明管道或与(Execute Program)有关的stdin管道。
CLOSE WRITE PIPE | 关闭与(To/From)对象有关的写入指明管道或与(Execute Program)有关的stdout管道。
To/From Socket
CLOSE | 关闭与客户端和服务器插座的连接。为重建连接，客户端和服务器必须重复12-accept和connect-to协议。
Direct I/O, MultiInstrument Direct I/O, GPIB, VXI, 串行和GPIO接口操作
LOCK | 在共享资源的多流程系统中，令一个流程在关键区段中锁定资源供自己使用，防止另一个流程使用这些资源。
UNLOCK | 在一个流程已经锁定共享资源供自己使用的多流程系统中，解锁资源，允许其它流程访问这些资源。

GPIB详细介绍

Direct I/O to GPIB仪器和Interface Operations使用的EXECUTE命令类似，但有一些差异。

  • Direct I/O EXECUTE命令确定接收命令的仪器地址。

  • Interface Operations EXECUTE命令可能会影响已经确定收听地址的多部仪器。

下面6个表指明了Direct I/O和Interface Operations EXECUTE事务进行的确切的总线操作。

EXECUTE ABORT GPIB操作

Direct I/O | Interface Operations
无 | IFC (>=100 祍ec)
 | REN
 | ATN

EXECUTE CLEAR GPIB操作

Direct I/O | Interface Operations
ATN | ATN
MTA | DCL
UNL |
LAG |
SDC |

EXECUTE TRIGGER GPIB操作

Direct I/O | Interface Operations
ATN | ATN
MTA | GET
UNL |
LAG |
GET |

EXECUTE LOCAL GPIB操作

Direct I/O | Interface Operations
ATN | REN
MTA | ATN
UNL |
LAG |
GTL |

EXECUTE REMOTE GPIB操作

Direct I/O | Interface Operations
REN | REN
ATN | ATN
MTA |
UNL |
LAG |

EXECUTE LOCAL LOCKOUT GPIB操作

Direct I/O | Interface Operations
无 | ATN
 | LLO

VXI详细介绍

Direct I/O to VXI仪器和Interface Operations使用的EXECUTE命令类似，但有一些差异。基于消息的VXI仪器的参考信息也适用于I-SCPI支持的基于寄存器的仪器。

  • Direct I/O EXECUTE命令寻址基于消息的VXI仪器，接收字串命令。

  • Interface Operations EXECUTE直接影响VXI接口，可能会影响接口伺服区域内部的VXI仪器。

Interface Operations对象EXECUTE TRIGGER事务采取下面的形式：

EXECUTE TRIGGER TriggerType Expression TriggerMode

TriggerType指定EXECUTE TRIGGER事务将使用哪个触发组。触发组包括：

  • TTL - 指定VXI背板上的八条TTL触发线。

  • ECL - 指定VXI背板上的四条ECL触发线。

  • EXT - 指定嵌入式VXI控制器上的外部触发。

Expression求解为代表码型的单个Integer变量，表明对某个TriggerType将触发哪条触发线。取值为5(用二进制表示为101)表明触发TTL线0和2。取值为255会触发所有八条TTL线。TriggerMode表明确认触发线的方式：

  • PULSE - 在不连续的时限内(与TriggerType有关)脉冲线路。

  • ON - 确认触发线，并保持确认状态。

  • OFF - 从以前的ON事务确认的触发线中去掉确认。

下面的表格指明了Direct I/O和Interface Operations EXECUTE事务进行的总线操作。

EXECUTE CLEAR VXI操作

Direct I/O | Interface Operations
字串命令Clear(0xffff) | 脉冲SYSRESET线, 重新运行Resource Manager

EXECUTE TRIGGER VXI操作

Direct I/O | Interface Operations
字串命令Trigger(0xedff) | 触发背板上的TTL或ECL触发线或嵌入式VXI控制器上的外部触发器。可以为每个触发类型指定触发哪条线。

EXECUTE LOCAL VXI操作

Direct I/O | Interface Operations
字串命令Set Lock(0xeeff) | 无

EXECUTE REMOTE VXI操作

Direct I/O | Interface Operations
字串命令Clear Lock(0xefff) | 无


WAIT事务

有四种WAIT事务类型：

  • WAIT INTERVAL

  • WAIT SPOLL (仅适用于Direct I/O to GPIB和基于消息的VXI仪器)

  • WAIT REGISTER (仅适用于Direct I/O to VXI仪器)

  • WAIT MEMORY (仅适用于Direct I/O to VXI仪器)

WAIT INTERVAL事务等待指定的秒数，然后才执行对象的open view中列明的下一项事务。例如，这一事务等待10秒：

WAIT INTERVAL:10

WAIT SPOLL事务采取下面的形式：

WAIT SPOLL Expression Sense

Expression是求解得到一个整数的表达式。这个整数将作为位掩码使用。

Sense是一个字段，可能值有两个：

  • ANY SET

  • ALL CLEAR

WAIT SPOLL事务一直等到相关仪器的串行轮询响应字节满足某个条件。通过把串行轮询响应与指定掩码进行位逻辑AND运算，并把得到的位与单个试验位进行OR运算，可以试验串行轮询响应。在满足下面其中一个条件时，在WAIT SPOLL后执行事务：

  • 事务指定ANY (ANY SET)，试验位为真(1)。

  • 事务指定CLEAR (ALL CLEAR)，试验位为假(0)。

下面的事务说明了使用WAIT SPOLL的一种方式：

  • WAIT SPOLL:256 ANY 一直等到设置任何位。

  • WAIT SPOLL:256 CLEAR 一直等到清除所有位。

  • WAIT SPOLL:0x40 ANY 一直等到设置第6位。

  • WAIT SPOLL:0x40 CLEAR 一直等到清除第6位。

WAIT REGISTER和WAIT MEMORY事务采取下面的形式：

  • WAIT REG:SymbolicName MASK:Expression Sense [Expression]

  • 或

  • WAIT MEM:SymbolicName MASK:Expression Sense [Expression]

其中：

SymbolicName是配置VXI仪器期间定义的名称。这个名称指的是仪器的A16或扩展存储器内部的某个地址。

MASK:Expression是求解得到一个整数的表达式。这个整数将作为位掩码使用。这个掩码值的字节数取决于已经配置SymbolicName的数据类型。

Sense是一个字段，可能值有三个：

  • ANY SET

  • ALL CLEAR

  • *EQUAL

[Expression]是求解得到一个整数的可选的比较值。只有在Sense是EQUAL时，才使用这个整数。

WAIT REGISTER或MEMORY事务一直等到从相关VXI仪器SymbolicNames指定的寄存器或存储位置中读取的值满足某个条件。

在读取的值与MASK:Expression中指定的位掩码进行逻辑AND运算，得到试验值。试验值的大小取决于为指定寄存器或存储位置配置的数据类型。在满足下面其中一个条件时，在WAIT SPOLL之后执行事务：

  • 事务指定ANY (ANY SET)，试验值至少一个位为真(1)。

  • 事务指定CLEAR (ALL CLEAR)，试验值所有位为假(0)。

  • 事务指定EQUAL，对[Expression]中指定的比较值，试验值的位与位相等。


SEND事务

SEND事务采取下面的形式：

SEND BusCmd

BusCmd是下表中列出的总线命令之一。

SEND事务用于Interface Operations对象内部，通过GPIB接口传送低级总线消息。IEEE 488.1中详细定义了这些消息。

命令 | 说明
COMMAND | 把ATN设为真，发送指定的数据字节。ATN为真表明数据表示一条总线命令。
DATA | 把ATN设为假，发送指定的数据字节。ATN为假表明数据表示仪器相关信息。
TALK | 在指定一级总线地址(0-31)上确定发话的仪器。
LISTEN | 在指定一级总线地址(0-31)上确定接听的仪器。
SECONDARY | 在TALK或LISTEN命令后面指定一个二级总线地址。二级地址一般由卡槽式仪器使用，卡槽位于一级地址，每个插件模块位于二级地址。
UNLISTEN | 强制所有仪器停止接听，并发送UNL。
UNTALK | 强制所有仪器停止发话，并发送UNT。
MY LISTEN ADDR | 确定接听的运行VEE的计算机，发送MLA。
MY TALK ADDR | 确定发话的运行VEE的计算机，发送MTA。
MESSAGE | 发送一条多行总线消息。详情请查阅IEEE 488.1。多行消息包括： DCL Device Clear SDC Selected Device Clear GET Group Execute Trigger GTL Go To Local3 LLO Local Lockout SPE Serial Poll Enable SPD Serial Poll Disable TCT Take Control


WRITE(POKE)事务

WRITE(POKE)事务与WRITE事务非常类似，但它只适用于To/From DDE对象。WRITE(POKE)的主要差异是必须指定一个项目名称。例如：

WRITE ITEM:"r2c3" TEXT a EOL

允许使用下面的编码：

  • TEXT

  • BYTE

  • CASE

  • CONTAINER

如需与这些格式有关的更具体的信息，请查阅WRITE事务。


READ(REQUEST)事务

READ(REQUEST)事务与READ事务非常类似，但它只适用于To/From DDE对象。READ(REQUEST)的主要差异是必须指定一个项目名，例如：

READ ITEM:"r2c3" TEXT a EOL

只有VEE for Windows才支持READ(REQUEST)事务。

支持下面的编码：

  • TEXT

  • CONTAINER

如需与这些格式有关的更具体的信息，请参阅READ事务。


在万维网上访问Agilent VEE Pro

VEE网站提供了许多有用的资源。如果想访问这些网站，请参阅VEE中的Help菜单：

Help [image] Agilent VEE on the Web

VEE Users Group (vrf)
提供了通过数千名VEE用户互动收集的丰富信息。您可以张贴问题，搜索技巧，找到其它VEE专家用户。

Support
提供了各种服务，可以下载驱程和产品升级程序、技术信息和改善生产效率的其它资源。

Instrument Drivers
为下载驱程提供了各种服务。提供的驱程包括IVI Driver、惠普/安捷伦仪器使用的VXIplug&play Driver以及Panel Driver。

Education/Training
提供了与安捷伦全球教育和培训有关的信息。

Agilent VEE Home Page
为访问VEE新闻、信息、应用和其它支持提供了一个中心位置。

Agilent Developers Network
提供了各种服务，可以下载驱程和产品升级程序、技术信息、白皮书和改善生产效率的其它资源。

Agilent Technologies Home Page
可以访问安捷伦科技新闻和信息，并链接到提供测量和分析解决方案的其它网站。

安捷伦主页是：

http://www.agilent.com

VEE主页是：

http://www.agilent.com/find/vee


下载仪器驱程

可以从VEE支持网站中获得免费启动支持。

如果想访问VEE支持网站，参阅VEE中的Help菜单：

Web [image] Support上的Help [image] Agilent VEE

-和-

可以从下述网站中下载驱程：http://www.agilent.com/find/adn

这是安捷伦提供的一项免费服务，用户可以一周七天、全天24小时获得驱程、白皮书和其它免费服务。


Call Centers

呼叫中心

指定地点为世界上主要地区提供支持。这些呼叫中心提供免费启动帮助、联机技术支持、信息和销售帮助。请拨打本地区的电话号码。

可以在下述网站中找到联系办法：

http://www.agilent.com/find/assist


关于VEE Pro RunTime产品

VEE Pro RunTime产品为运行VEE程序提供了一个环境，它与VEE Pro开发环境是分开的。用户不能使用VEE Pro RunTime开发程序，而可以使用VEE开发环境创建、测试、调试和保存VEE程序。然后，应在将运行VEE程序的系统上安装VEE Pro RunTime，如控制处理器或操作测试系统。运行人员可以使用VEE程序，但不能修改VEE程序。他们只在面板视图中查看程序。

在大多数情况下，用户开发VEE程序的目的是帮助人们测试或监测某种东西。运行VEE程序的系统一般需要与仪器交互的接口卡。尽管可以在“没有文档”的情况下开发VEE程序，但用户应该知道程序在运行时的上下文中运行时要求哪些接口卡，并应为使用程序的人员提供必要的信息。(如果有与支持的接口卡有关的问题，请与安捷伦销售代表联系。)

除接口卡外，运行VEE程序的系统可能需要安捷伦I/O程序库套件(第14版或更高版本)。如需与控制仪器有关的更多信息，请参阅控制仪器。

VEE Pro RunTime产品在包含VEE Pro开发环境的同一张光盘上发售。在从VEE Pro光盘上运行setup.exe时，可以选择安装VEE Pro RunTime或VEE Pro开发环境。

分发VEE程序

如需了解与开发要分发的VEE程序有关的技术，请参阅How Do I … Build an Operator Interface(“我怎样…构建操作人员界面”)标题下的 VEE Help(“VEE帮助”)。在Preparing a program for Distribution to Others(“准备程序分发给别人”)标题下，参阅Creating a Distribution Package(“创建分发软件包”)中的内容。如需与把程序传送到另一个系统上运行的具体信息，请参阅包括需要的全部文件。

非常重要

用来运行程序的VEE Pro RunTime版本不得低于开发程序使用的VEE版本。

安捷伦I/O程序库版本必须兼容开发程序使用的VEE Pro开发环境版本，并兼容VEE Pro RunTime。(对VEE 7.5，需要使用安捷伦I/O程序库套件第14版或更高版本。) 为保证这种兼容能力，应使用与VEE一起发售的安捷伦I/O程序库。如果使用从安捷伦网站上下载的补丁程序升级VEE，一定要检验安捷伦I/O程序库是否兼容。

备注

Agilent VEE Pro许可允许不受限制地安装和分发VEE Pro RunTime及与VEE Pro产品一起提供的安捷伦I/O程序库。在分发VEE程序时，可以在用户所在公司的内部或外部系统上安装VEE Pro RunTime和安捷伦I/O程序库。

另请参阅

VEE Pro RunTime系统要求请参阅VEE Pro RunTime的系统要求。安装说明请参阅安装VEE Pro RunTime。配置说明请参阅配置VEE Pro RunTime。


VEE Pro RunTime系统要求

VEE Pro RunTime的最低系统要求是：

.NET Framework 2.0

PC，采用Pentium 120 MHz处理器 (推荐采用266 MHz Pentium II或更高的处理器)

Windows 2000(SP4)或Windows XP(SP1)操作系统

Windows 2000/ Windows XP需要48 MB RAM

空闲硬盘空间：最低70 MB (安装MATLAB和教程时需要105 MB)

光驱

15英寸监视器800x600 SVGA (推荐采用17英寸1024x768 Ultra VGA或更大的监视器)

PC键盘

两键鼠标 (如果有第三个按键，这个按键不使用)

希望的仪器、接口卡和需要的其它外设


安装VEE Pro RunTime

在开发VEE程序后，您可能希望在其它系统上运行这些程序。VEE程序不是自含式.exe文件。运行VEE程序的任何系统上必须安装一个VEE版本。当然，可以使用整个VEE Pro开发环境运行VEE程序，但VEE Pro RunTime为这些?#32431;运行?#31995;统提供了更加经济的方案。

本文介绍了怎样在还没有安装VEE的Windows系统上安装VEE Pro RunTime。

备注

VEE Pro所有者对VEE Pro RunTime产品拥有不受限制的安装和分发权。在分发VEE程序时，您可以在公司内部和外部的系统上安装VEE Pro RunTime。您可能需要为程序提供安装说明。

VEE Pro开发环境可以安装在VEE Pro软件许可协议和使用许可允许的系统上。

注意，您必须拥有系统管理员权限，才能在运行Windows 2000或Windows XP操作系统的计算机上安装VEE Pro RunTime。

为开始安装，先运行Windows，停止所有程序。把光盘插入光驱中，等待自动开始安装。这时会发生下面其中一种情况：

1. 监视器上出现一个屏幕，允许安装开发环境或运行时环境。

选择运行时环境，然后根据屏幕提示，安装环境。

2. 光盘安装流程没有自动启动。因此，您必需运行下述命令，开始安装运行时环境：

e:\runtime\setup.exe

上述命令假设光驱是E:驱动器。为运行这个命令，在Windows任务条中选择Start按钮，然后选择Run，输入命令。


配置VEE Pro RunTime

运行时环境是为运行程序、而不是开发程序设计的。因此，在只安装了VEE Pro RunTime的系统上，不能存取VEE主窗口和工作空间。一般在VEE主窗口中通过菜单选择存取的VEE环境特点必须使用不同于VEE Pro RunTime的机制进行设置。通过命令行选项可以存取两个重要的配置区域。这些特性还作为图标在Agilent VEE Pro 8.0 RunTime Config Start菜单组中提供。

为修改仪器配置，运行下述命令：

veerun.exe -ioconfig

这会运行VEE Pro RunTime，打开Instrument Manager，允许用户改变和保存I/O配置。在程序没有嵌入式I/O配置时，这一功能非常重要。

为修改Default Preferences，运行下述命令：

veerun.exe -prefconfig

这会运行VEE Pro RunTime，打开Default Preferences对话框，允许用户改变和保存默认首选项。可能对RunTime用户非常重要的部分设置包括：

Web Server配置

执行模式 (主要用于远程用户函数)

在运行前检查仪器地址

在运行前删除变量

打印配置

颜色和字体 (如果没有与程序一起保存的话)

备注

在同时配有VEE Pro和VEE Pro RunTime的系统上，两个版本可以共享相同的配置设置，也可以不共享相同的配置设置。如果当前用户设置了HOME环境变量，两个VEE版本将在该 HOME目录中查找配置文件。这意味着它们拥有相同的默认首选项等等。如果当前用户没有HOME环境变量，那么VEE Pro和VEE Pro RunTime会在不同地方存储配置数据。在这种情况下，必须单独设置每个版本的配置。

如果Instrument Manager或Default Preferences对话框没有落在VEE窗口内，那么还可以使用-geometry选项，放大VEE或VEERun窗口。如需更多信息，请参阅使用命令行选项启动Agilent VEE。


关于VEE Express 8.0

Agilent VEE Express 8.0 是 Agilent VEE Pro 8.0 的一个子集。

下表显示了Agilent VEE Pro 8.0 和 Agilent VEE Express 8.0的区别。

Features |  | Agilent VEE Pro 8.0 | Agilent VEE Express 8.0
Interfaces | GPIB, LAN, RS-232,VXI, PXI, SCXI | 支持 | 不支持
 | USB | 支持 | 支持 (只支持已通过USB接口连接且已加电的安捷伦设)
MatlabScript 对象和 MatlabScript 引擎 |  | 支持 | 不支持
创建Agilent VEE 程序的运行版本和 Agilent VEE 对象的安全版本 |  | 支持 | 不支持
运行时动态修改仪器地址 |  | 支持 | 不支持
可调用服务器功能，即将按捷伦VEE 作为一个ActiveX Automation 服务器来调用 |  | 支持 | 不支持
远程函数调用功能, 即调用一个运行在远程主机上的Agilent VEE 进程中的UserFunction |  | 支持 | 不支持
其它功能 |  | 支持 | 支持

Note

Agilent VEE Express 8.0 只支持 Agilent USB 仪器。如需对其他仪器的支持，请升级到或购买Agilent VEE Pro。 注意使用Agilent VEE Express 8.0不能程序化地改变仪器属性，如仪器地址。

Agilent VEE Express 8.0 不支持MatlabScript对象。 不能添加新的 MatlabScript 对象到一个程序或是运行一个带有 MatlabScript对象的程序。但是打开带有MatlabScript对象的程序。

使用VEE Express 8.0，不能把 Agilent VEE 程序，UserObjects 和 UserFunctions存为运行或安全版本，但是打开一个VEE程序的 RunTime 版本，也能将一个安全版本的UserObject 或 UserFunction导入一个VEE程序中。

如需使用 Agilent VEE Express 不支持的功能，请购买或升级到Agilent VEE Pro。


VDC数组格式

许多VEE数据容器把数据封装在数组中。在VEE中，Build Coordinate之类的对象把您与这些数组的内部结构隔开。在VEE外面(如在Visual Basic客户端中)，必须正确声明和填充这些数组，以避免错误或混淆。

以3D Coordinates组成的VEE 1D数组为例。您会立即看到其中一个混淆来源："维度"一词用来描述两个不同的概念。对坐标，维度是一个轴(一般称为"X", "Y"和"Z")。对数组，维度是结构索引(一般称为"行"和"列")。在VEE中，这个数据类型是存储位置的一个行，每个存储位置保留一个Coordinate。假设变量名为"MyVeeData"，第一个Coordinate是MyVeeData[0]，第10个Coordinate是MyVeeData[9]，依此类推。

由于Visual Basic没有"3D Coordinate"数据类型，因此一个存储位置不能保留整个Coordinate。封装来自"MyVeeData"数组的所有数据在Visual Basic中要求一个二维数组。这个数组的行表示坐标；这个数组的列表示每个坐标的三个"X,Y,Z"值。

假设变量名为"MyVbData"，第一个坐标的Z部分是MyVbData(0,2)，第10个坐标的X部分是MyVbData(9,0)，依此类推。

其它VEE数据类型使用类似的排列。在为VEE Complex数据构建一个VB数组时，MyVbData(Element, 0)是实数部分，MyVbData(Element, 1) 是虚数部分。下面概括了相应的VEE数据类型及其数组格式：

VDC数据类型数组格式

Complex 1D数组行是复数。
第0列是实数部分。
第1列是虚数部分。

Polar Complex 1D数组行是极坐标复数。
第0列是幅度部分。
第1列是相位部分。

2D Coordinate 1D数组行是坐标。
第0列是X部分。
第1列是Y部分。

3D Coordinate 1D数组行是坐标
第0列是X部分。
第1列是Y部分。
第2列Z部分。

Coordinate 1D数组行是坐标。
第0列是X部分。
第1列是Y部分。
第N列是第N维部分。


buildRecord()

buildRecord(fieldNameTextArray, field1, field2, fieldN)

一个对象，通过在运行时指定字段名和字段值来构建记录。

用途

使用buildRecord()构建一个直到运行时才知道字段名和字段值的记录。第一个参数是字段名称的字符串数组。下面的参数是每个字段的值，这些参数的数量必须与数组长度相匹配。

buildRecord()返回一个Scalar Record及指定的字段名称和字段值。

范例

buildRecord(fieldNameList2Long, field1, field2);

builldRecord(fieldNameList8Long, field1, field2, field3... field8);

位置

Device [image] Function & Object Browser

Type:  Built-in Functions
Category: Type Conversion
Member: buildRecord

另请参阅

Build Record


.topic 0
Click the NI button to create an NI object for the instrument currently selected.
This could be an NI-DMM, NI-SWITCH, NI-FGEN, NI-DAQ, or NI-SCOPE.

.topic 0
Launches a new VEE with the sample file loaded. Since the correct instrument address
is already configured for the instrument you selected, all you have to do is press
Run.

.topic 0
Click the IVI-COM button to  create an IVI-COM object for the instrument currently selected. (If there is no IVI-COM driver for the instrument, this button remains grayed out.)

.topic 0
When the Profiler is started, it provides comparative information about the execution time of each UserObject and UserFunction. Clicking on any column label (such as Name, or Time) displays the Profiler data sorted on that field. Clicking again reverses the sort. Double-click on any UserObject or UserFunction shown in the Name field, and its view opens in the VEE workspace.

.topic 0
When this box is checked, data is written to the data file with commas as delimiters (separators) between the various Profiler data fields. Using comma delimiters makes it easier to import the data into some other applications, such as spreadsheets.  When this box is not checked, the data fields are aligned using multiple spaces.

.topic 0
Specifies the local directory that will be accessible to the remote Web browser. VEE uses the file index.html in the Root Directory as its home page. A default homepage is installed as ~installDir/www/index.html. This file can be modified and/or copied to a different Root Directory.

.topic 0
When OK is pressed, any changes to Default Preferences become valid for the current work session only. When you exit and restart VEE, the previous Default Preferences(saved in the "veerc" file) are restored.

.topic 0
The Fonts property allows you to choose the default font for any screen element in your VEE program.

.topic 0
The Program Explorer button shows or hides the Program Explorer window. The Program Explorer shows the hierarchical structure of the current VEE program.

.topic 0
The Delete Line button provides the Delete Line cursor, which you then click on the line to be deleted. (A handy shortcut to delete lines is Ctrl-Shift-Click.)

.topic 0
The Call Stack button aids debugging by displaying the hierarchy of UserObjects or UserFunctions invoked to reach the current paused UserObject or UserFunction. Clicking on any entry in the Call Stack dialog opens that UserObject or UserFunction in the VEE workspace.

.topic 0
Click the (Interface) Properties button to view specific details about the currently selected interface. Note that VEE cannot modify the hardware characteristics of an interface or alter the configuration performed by the operating system or the I/O Config utility. If you enter different values in any of the Interface Properties fields, you must use values that match an existing, configured interface.

.topic 0
Click the Save button to save the instrument configuration to disk and close the Instrument Manager. This overwrites the vee.io file with the current configuration.  If the instrument configuration is embedded in the program, a Save from the InstrumentManager is not necessary, because an embedded configuration is saved when the programis saved.

.topic 0
The Clear button resets all Profiler data values to 0 (zero).

.topic 0
The Number tab allows you to choose the default format for displaying numbers in your VEE program.

.topic 0
The Stop button stops execution of all program threads and closes any open files.  When a program is in the stopped state, pressing Step or Run/Resume restarts program execution from the beginning.

.topic 0
The Step Over button aids debugging by executing one primitive object at a time.  When a UserObject or UserFunction is encountered, it is executed in its entirety and is not opened into a detail view.

.topic 0
The Run button starts execution of all threads in a program. If your program has several threads, and you want to run only one of them, use a Start object to that thread instead of the Run button.

.topic 0
The Instrument Manager button provides the Instrument Manager dialog. This dialog provides convenient editing, viewing, and creating of I/O resources such as instrument transactions and drivers.

.topic 0
The Add To Panel button places the selected objects onto the panel view of the program.  If a panel view does not already exist, one is created. Panels are associated with the current context and can be nested.

.topic 0
Click the Add button to add an instrument to your I/O configuration. A manual Add operation is needed for instruments that are not discovered by the Find Instruments button. For example, RS-232 instruments or instruments connected via a LAN gateway.(An interface entry is automatically added when you add an instrument associated with that interface.)

.topic 0
The bottom line of the VEE window is a status message area. This status line shows various types of information, depending upon the current operation. For example, the program run state, error messages, pixel position of moved objects, and helpful hints.

.topic 0
Specifies the maximum time (in seconds) that the Web server will wait for VEE to respond.

.topic 0
When Enable Server is checked, VEE's built-in Web server is activated. The Web server allows you to monitor a VEE program from a remote Web browser.

.topic 0
The Step Out button aids debugging by executing one primitive object at a time. If the execution is in a UserObject or UserFunction, VEE completes execution of all objects in that UserObject or UserFunction.

.topic 0
The Pause button stops execution of all program threads temporarily. When a program is in the paused state, either Step or Run/Resume can be used to proceed with program execution from the point it was paused.

.topic 0
This field indicates the scope of the search. The default is the Entire Program.  If you want to limit the scope of a search, open the Find dialog from the ProgramExplorer by clicking with the right mouse button on a particular context, such as a UserFunction or UserObject.

.topic 0
The Save button writes the Profiler data to the file name specified using the Options button.

.topic 0
When instrument checking is enabled, VEE checks the configured instruments during prerun to verify that they are accessible. If an address does not respond, you are iven the opportunity to power-on the instrument, choose a different bus address, etc. When this box is not checked, disconnected or improperly configured instruments will probably cause a timeout error when the program is running.

.topic 0
The Show Execution Flow button aids debugging by highlighting the currently executing object(s) while the program is running. In the paused or error state, Show Execution Flow highlights all objects that have already executed.

.topic 0
The Copy button places a copy of the selected objects in the Paste buffer and on the Windows Clipboard.

.topic 0
When this box is checked (the default), the search traverses all levels of nested User Objects. If not checked, only the current level is searched.

.topic 0
Creates a Formula object to Set the value of the currently selected member (property).Place the Formula in a program context. It is simply a template which can be edited as desired.

.topic 0
Click the Plug&play Driver button to create a VXIplug&play driver object for the instrument currently selected. (A VXIplug&play driver is an industry standard API based upon VISA.)

.topic 0
The Settings dialog controls some of the actions performed during instrument discovery.  If Detect only is selected, the Find Instruments button simply detects whether a device is present at each bus address. If Detect, identify, and configure... is selected, the Find Instruments button also performs an identification and driver configuration for each instrument detected. If Ask before sending... is checked, a confirmation dialog is presented before *IDN? is sent to identify each instrument. If not checked, *IDN? is sent to all instruments without operator confirmation. You may want the confirmation dialog if your system contains old, non-IEEE-488.2 instruments.

.topic 0
When this box is checked, Profiler data is shown only for those UserObjects and UserFunctions that executed.

.topic 0
Specifies the file path to the http.log file. This file records all incoming requests processed by the Web server and can grow without bounds.

.topic 0
When Binary RunTime File Format is checked, .vxe files are saved using a binary formatwhich gives improved security and smaller file size. When this box is not checked, .vxe files are stored in ASCII format (similar to .vee files).

.topic 0
When this box is checked, the Find text must match the entire field of the text being searched.

.topic 0
When this box is checked, a match is reported if the Find text occurs at the end of the text being searched.

.topic 0
Specifies the number of pixels placed between objects when you perform an Edit  Align... operation. This Alignment Spacing value is used only when Space Equally is enabled.

.topic 0
The New button clears the VEE workspace. You will be prompted if there are any unsaved changes in the current program.

.topic 0
The Default Preferences button provides the Default Preferences dialog. This dialog has six tabs containing many and varied customizable VEE settings.

.topic 0
The Property buttons can be used to constrain the search according to various object properties. Once a Property is selected, specify the desired constraint in the Value column. For example, if you select Breakpoint/On, then only objects with active break points are searched.

.topic 0
This field specifies the number of digits displayed to the right of the decimal point.

.topic 0
The Trig Mode selection chooses the default trigonometric units used in the program.  Radians are VEE's default (and fastest) units.

.topic 0
When Reset is pressed, any pending changes to Default Preferences are discarded, and the previous Default Preferences (saved in the "veerc" file) are restored.

.topic 0
Specifies the magnification used when printing a VEE program. Smaller numbers create a smaller image. The value you specify might be rounded by some printer drivers.

.topic 0
The Toggle Breakpoint button aids debugging by setting or clearing execution breakpoints at the selected objects. A breakpoint on an object pauses program execution immediately before that object. Breakpoints can also be accessed in the Object Menu Properties.

.topic 0
The Start Profiling button is a toggle function that starts or stops profiling.

.topic 0
Profile data is collected whenever the Profiler is running, but the data displayed in the dialog box is not updated automatically. You must click the Refresh button to cause the Profiler to display the latest profile data.

.topic 0
The Step Into button aids debugging by executing one primitive object at a time.  When a UserObject or local or imported UserFunction is encountered, VEE puts it into its detail view and executes each object in that view.

.topic 0
This area displays the run state of the program. Indicators are: Blank, Ready (stopped), Green Arrow Running, Yellow Bars Paused, Red Bars Error

.topic 0
The Function & Object Browser button provides the Function & Object Browser dialog.  This browser provides convenient access to various math operations, objects, and properties.

.topic 0
Creates a Formula object for the currently selected function or operator.  Place the Formula in a program context. It is simply a template which can be edited as desired.

.topic 0
This field indicates if the currently loaded program has any unsaved changes (modifications).When the box is "grayed out," no unsaved changes are pending.

.topic 0
This field shows the Execution Mode of the currently loaded VEE program. ExecutionMode allows newer versions of VEE to run older VEE programs with complete backwards compatibility. The possible modes are VEE 3, VEE 4, etc. up through the current VEE version. Execution Mode is saved with the VEE program and can be changed in the Default Preferences dialog.

.topic 0
This field specifies the file name where Profiler data is saved. Click this field to bring up the Save data filename dialog box.

.topic 0
The Appearance Property Group allows you to choose the default color for any screen element in your VEE program.

.topic 0
The Object Type property constrains the search to objects of the type(s) selected in the Value list. The default is all object types. To constrain the search, click the Value button and check or uncheck the desired types. Select All and Clear All buttons are provided for convenience.

.topic 0
Creates a Formula object to Get the value of the currently selected member (property).Place the Formula in a program context. It is simply a template which can be edited as desired.

.topic 0
Click the Component Driver button to create a Component Driver object for the currently selected instrument. (A Component Driver is an efficient link to one component of an instrument's Panel Driver.)

.topic 0
Click the (Instrument) Properties button to view or modify the I/O-related properties of the currently selected instrument. The interface type determines the set of properties available. For example, RS-232 instruments have a Properties field for setting the Baud rate, while GPIB instruments have a Properties field for setting the bus address.

.topic 0
If Detect only is selected, the Find Instruments button simply detects whether a device is present at each bus address. If Detect, identify, and configure... is selected, the Find Instruments button also performs an identification and driver configuration for each instrument detected.

.topic 0
The Options button brings up the Profiler Options dialog box. These options customize the format of displayed and saved data.

.topic 0
When this box is checked, the printout includes an open view of all nested UserObjects.

.topic 0
When Print Cover Page is checked, a cover section is generated at the beginning of the printout. This default format choice can be overridden in the Print Program dialog.

.topic 0
The Open button loads a program file into the VEE workspace, replacing any existing program. You will be prompted if there are any unsaved changes in the current program.

.topic 0
The Cut button deletes the selected objects and places them in the Paste buffer and on the Windows Clipboard.

.topic 0
The Find button provides a dialog box used to search for text strings and certain object properties in your VEE program. Various search properties, such as Match Case and Object Type, can be used to constrain your searches. To limit the scope of a search, open Find from the Program Explorer by clicking a specific context with the right-hand mouse button.

.topic 0
The Configure Drivers button identifies the selected instrument and configures any available VXIplug&play and Panel Drivers for that instrument. (Only IEEE 488.2 (and most VXI) instruments can be identified.)

.topic 0
Click the Direct I/O button to create a Direct I/O object for the instrument currently selected. (A Direct I/O object allows low-level transactions with the instrument.)

.topic 0
Click the OK button to save the instrument configuration in an internal cache and close the Instrument Manager. The current configuration is used by the program, but is not yet saved to disk.

.topic 0
When Disable Debug is checked, all debugging features are disabled, giving the fastest program execution speed.

.topic 0
When Auto Line Routing is checked, the lines between objects are automatically rerouted when an object is connected, moved, or resized. Auto-routing uses only horizontal and vertical lines, and gives the same results as Edit -> Clean Up Lines. When auto-routing is off, lines are drawn directly from pin to pin, often diagonally.

.topic 0
The Profiler button provides the Profiler dialog. The Profiler provides comparative information about the execution time of each UserObject and UserFunction.

.topic 0
The Print Screen button sends the visible contents of the VEE window to a printer.  To configure the printer, use File -> Print Screen.

.topic 0
When the root node is selected, click the Find Instruments button to search for available interfaces and instruments. When a specific interface is selected, click this button to search for all instruments connected to the selected interface. The exact operations performed by the Find Instruments button are controlled by the Settings dialog.

.topic 0
The Print button brings up a standard Windows Print dialog. The Instrument Manager printout is a bitmap dump of the full Instrument List tree view.

.topic 0
This field indicates if Profiling is currently enabled. When the box is "grayed out, "profiling is stopped.

.topic 0
When this box is checked, each printout page is given a page number and other header information, and an Index is generated at the end of the printout.

.topic 0
Sets the speed at which the Data Flow markers move. Select a rate from 1 to 10. The default is 6 and the fastest is 10.

.topic 0
Save colors and fonts with program saves all the default colors and fonts in the program file that are selected in the Default Preferences dialog box. This ensures that whoever opens your program will also get all of your default colors and fonts.  If this option is not selected, only the colors and fonts explicitly set in your program are saved in your program file. This allows others using your program to retain their own default colors and fonts. If an existing program is loaded, the option is set according to how the program was saved previously.

.topic 0
This field indicates if the VEE Web Server is currently enabled. When the box is "grayed out," the Web Server is disabled. The VEE Web Server is controlled in the Default Preferences dialog.

.topic 0
Specifies the port number used by VEE's Web server. This port number must be allocated in your system's services file and must not be used by any other Web server.

.topic 0
When Delete Variables at PreRun is checked, the values stored in all variables are deleted before each program runs. Therefore, Get Variable objects will error if their values have not been properly set. When this box is not checked, Get Variable objects can access old data left from the previous program run. Such old data may or may not be valid for the new program run.

.topic 0
Save I/O configuration with program saves the veeio I/O configuration information with the program file, and not in the veeio resource file. The configuration information is specified in the Instrument Manager. If this option is not selected, the current program's configuration information is saved in the veeio file. If an existing program is loaded, the option is set according to how the program was saved previously.

.topic 0
The View Variables button displays a list of all variables that are currently defined.  Double-click a variable's name to view details such as type, shape, and data values.

.topic 0
When this box is checked, the search is constrained to exact matches of the letter-case specified in the Find line. The default is off, which treats upper-case and lower-case letters as equal.

.topic 0
Click the Remove button to delete an instrument entry from the I/O configuration.(An interface entry is automatically removed when all the instruments associated with that interface are removed.)

.topic 0
When this box is checked, a match is reported if the Find text occurs anywhere in the text being searched.

.topic 0
When this box is checked, all matches are reported for each object. The default is off, which reports only the first match found for each object.

.topic 0
Creates a Call object for the currently selected function. Place the Call in a program context. It is simply a template which can be edited as desired.

.topic 0
When this box is checked, each click of the Save button overwrites the data previously saved in the Profiler data file. When this box is not checked, each Save appends to the existing data.

.topic 0
When this box is checked, the printout includes a detailed view of each object in the program. All but the simplest objects are printed in open view form.

.topic 0
When Save is pressed, any changes to Default Preferences become valid for the curren work session and are saved in the "veerc" file. When you exit and restart VEE, the new saved Default Preferences are used. (The exact path to the "veerc" file is system dependent.)

.topic 0
When Print Header and Index Page is checked, each printout page is given a page number and other header information, and an Index is generated at the end of the printout.  This default format choice can be overridden in the Print Program dialog.

.topic 0
When Print Program Explorer is checked, the printout includes the overview information contained in the Program Explorer window. This default format choice can be overridden in the Print Program dialog.

.topic 0
The Find Results button displays the results from the most recent Find search. You can change the sorting order of a column by clicking on the column header.

.topic 0
Enter the text string you want to find in your VEE program. If you leave this line blank, the search will match any text.

.topic 0
When this box is checked, a match is reported if the Find text occurs at the beginning of the text being searched.

.topic 0
Click the Remove button to delete an instrument entry from the I/O configuration.(An interface entry is automatically removed when all the instruments associated with that interface are removed.)

.topic 0
When this box is checked, the printout includes the overview information contained in the Program Explorer window.

.topic 0
When this box is checked, a cover section is generated at the beginning of the printout.

.topic 0
When Print I/O Configuration is checked, the printout includes the expanded treeview of the I/O configuration (from the Instrument Manager). This default format choice can be overridden in the Print Program dialog.

.topic 0
The B&W Printer Darkness setting allows you to choose a shade of gray for each screen element in your VEE program. This shade of gray is used when you print the program on a non-color printer. (The settings in the Appearance Property Group are used for a color printer.)

.topic 0
The Show Data Flow button aids debugging by visually indicating the route that data takes through the program. The speed of the small square data marker is set in the Default Preferences   General tab, Debug area.

.topic 0
The Save button writes the current program to the previously specified file name.  Save uses the file shown in the VEE window title bar. If this is a New program that has not been saved previously, you will be prompted for a file name. To change filenames, use File -> Save As.

.topic 0
When this box is checked, the printout includes the expanded tree view of the I/O configuration (from the Instrument Manager).

.topic 0
If Ask before sending... is checked, a confirmation dialog is presented before *IDN? is sent to identify each instrument. If not checked, *IDN? is sent to all instruments without operator confirmation. You may want the confirmation dialog if your system contains old, non-IEEE-488.2 instruments.

.topic 0
The Paste button places a copy of the Paste buffer onto the VEE workspace. You can Paste objects that were accidentally Cut, and connections to those objects will be restored.

.topic 0
The Reset button restores the default Property/Value list, which is all object typeswith no constraints.

.topic 0
This browser presents functions and objects in a hierarchical arrangement. Choose the broad classification from the left column, the sub-category from the middle column, and the specific function or object from the right column. Then click one of the Create... buttons (or double-click the selection) to create a VEE object from your selection. Place this VEE object in a program context and edit it as desired.

.topic 0
Displays Help for the currently selected function or object (not Help about the Browser).

.topic 0
Click the Panel Driver button to create a VEE Panel Driver object for the currently selected instrument. (A Panel Driver is the full-featured graphical simulation of an instrument's front panel.)


.NET和COM

以互动方式使用.NET对象和COM对象意味着必须理顺这两种对象在存储器中的存在方式。.NET对象装在被管理的存储器中，由CLR控制，在运行时可以按需移动，提高性能。COM对象装在没有管理的存储器中，其指针指向存储器中不移动的位置。

由于这两种对象管理存储器的方式有很大差异，因此需要一个包装器，帮助他们进行通信。下图说明了.NET怎样使用包装器，在两个透明对象之间通信。这两个包装器是.NET Framework中COM互通策略的基础。如果想深入地、可以理解地考察Runtime Callable Wrapper和COM Callable Wrapper，请参阅Mike Gunderloy在MSDN中发表的文章，题为“从.NET客户端中调用COM组件”和“从COM组件中调用.NET组件”。


Error 300

<n>号输入端没有连接。

解决办法

在三种不同的情况下可能会获得这一错误信息：

1. 数据输入端没有连接。

必须连接一个对象上的所有数据输入端之后，才能运行程序。找到导致错误的对象(带有红色外框的对象)，完成必要的连接。

2. 在UserObject/UserFunction上，输出端的一个内部端没有连接。

在错误信息提到一个输出缓冲器的输入端时，您可能会在UserObject或UserFunction上得到这一信息。这表明一个输出端的内部端没有连接到UserObject或UserFunction内部的一个对象上。必须连接输出端的所有内部端之后，才能运行程序。

为确定哪个端没有连接，查看UserObject的open view或UserFunction的编辑视图。从Properties Window中，选择Show Terminals，查看端区域。

3. 导入UserFunction时。

如果在导入UserFunction时获得这一信息，那么UserFunction内部的一个对象有一个输入端没有连接。您需要通过File [image] Open File [image] Merge Library加载UserFunction，修改UserFunction，然后保存UserFunction。打开以前的程序，运行程序；将正确导入UserFunction。


Error 553
ActiveX对象在<操作> <名称>过程中返回错误。

解决办法

ActiveX对象返回错误代码DISP_E_EXCEPTION时会发生这种错误。引起这种错误原因可能是把坏值传送给一个属性或方法，也可能是某些情况下要求ActiveX对象发出"错误"。例如，Windows Common Dialog控件可以存取多个常用的对话框。如果对象按Cancel按钮，那么可以把这些对话框设置成"错误"。在这种情况下，ActiveX对象会返回错误，表明用户按了Cancel按钮。


Error 593
MATLAB Script执行错误。

解决办法

许多MATLAB运行时错误都会映射到VEE Error 593，VEE错误框上的"Go To"按钮只会显示MATLAB Script对象，而不是单独的MATLAB程序行。也就是说，必须进行诊断，才能找到和校正错误593导致的实际问题。这里有两个有益的提示：查看MATLAB错误信息文字，使用msgbox函数。下面的范例对此进行了演示。

这个小的VEE范例读取一个文件中多个"Y"值组成的矢量，生成一个由多个"X"值组成的线性斜率，然后使用这两个矢量绘制X-Y图。假设运行这一程序时会发生下面的错误。

注意在这个对话框中，第二段包含着MATLAB Script生成的错误信息，在本例中是Invalid fid，它表明fscanf函数被指配了一个无效的文件标识符。为进一步查看问题，显示fopen函数返回的值。例如，插入下面的一行：

dfile=fopen('C:sineWave.txt','r')
uiwait(msgbox(int2str(dfile)))
ydat=fscanf(dfile,'%f')

第二行显示了MATLAB Script使用的部分有用的调试技术。uiwait(msgbox(...))组合显示了一个文本框，等待您按其OK按钮。由于没有"line probes"(线路探头)或"watch windows"(观察窗口)查看MATLAB变量，因此消息框为调试时显示值提供了一种方便的方式。msgbox函数要求一个字符串参数，因此使用int2str函数据转换数字文件ID。

在添加调试行运行范例时，消息框报告-1的文件ID。fopen的MATLAB Help Desk主题表明，-1是fopen失败时返回的值。换句话说，fscanf函数看到无效的文件ID，因为没有打开任何文件。任何典型的文件系统原因都可能会导致这种问题，如没有权限、路径名称拼写错误等等。假设改变文件路径，返回范例，会出现下面的错误。

第二段再次显示MATLAB错误信息。在本例中，plot函数失效，因为X矢量和Y矢量的长度不同。可以使用msgbox检查xdat和ydat的长度，也可以查看MATLAB冒号运算符的示意图。不管是哪种方式，系统都会提醒您MATLAB数组以要素"0"开头。因此，如果length(ydat)是256，那么使用257个要素0..256创建xdat斜率。校正后的语句是：

xdat=0:1:length(ydat)-1;

这只是一个虚构的范例，但它介绍了在调试MATLAB Script对象时有用的技术。概括如下：

查看详细的MATLAB错误信息。"VEE Run Time Error"框中的第二段列出了失效的MATLAB函数，有一行描述了问题的特点。

插入msgbox显示值。在显示之前，把数字值转换成字符串。记住在调试后不再需要时，要删除任何不需要的msgbox行。

经常使用MATLAB文档。为从VEE窗口中查看MATLAB Help，选择：Help [image] MATLAB Script [image] Help Desk


Error 601
表达式无效：<描述>

解决办法

如果发生这一错误，<描述>中提到Formula对象表达式中发生语法错误，那么应进行下述检查：

1. 在每个表达式结尾一定要使用";" (分号)。尽管错误信息中表明错误的位置，但上一个表达式的末尾可能会漏掉分号，表达式可能会位于前一行上。

2. 不要在较低的执行模式中使用作为较高执行模式下唯一关键字的变量名称，包括Set和ByRef之类的关键字。为检查程序的执行模式设置，查看VEE窗口右下角的状态栏。

3. 不要为内置常数赋值。VEE在VEE 5 (或更高的)执行模式下定义了下述内置常数：TRUE, FALSE, PI。

4. 三元运算符要求在整个语句外面加上圆括号：

正确：
(a==0 ? TRUE : FALSE)

错误：
a==0 ? TRUE : FALSE

5. 在构建或修改数组的表达式中，语法要求使用逗号分隔的索引：

正确：
[1,1,0]

错误：
[1 1 0]


Error 810

仪器驱程错误<n>: <description>
如需进一步信息，请参阅仪器手册

解决办法

仪器已经发生错误。这个错误表明仪器错误从仪器传送到仪器驱程中，然后又传送到VEE中。

例如，错误可能类似于：
Instrument driver error 1051: Device xxx reported error nnn

"xxx" - 是为I/O [image] Instrument Manager下的仪器指配的名称

"nnn" - 是仪器中的错误信息，可以查阅仪器手册，确定实际错误。仪器手册将提供详细的信息。


Error 811

发生I/O错误或超时

解决办法

在VEE不能与仪器通信时会发生这种错误。通常可以采取下面的操作解决这个问题：

仔细检查是否插好并打开仪器。

检查电缆连接，确认电缆插牢。

确认I/O地址正确。

在使用仪器驱程时，确认为仪器指定了正确的驱程文件。

备注

如果传送大量的数据或仪器速度很慢，可以通过I/O [image] Instrument Manager提高超时值。


Error 851
主机<名称>上没有Service Manager。

解决办法

不能启动Service Manager，在下述情况下会得到这条错误信息：

1. Service机器没有启动Service Manager。

对Windows NT上运行的程序:

Service Manager是VEE安装目录下名为veesm.exe的控制台程序。从Start菜单下使用Run运行这个程序：

"C:\Program Files\Agilent\VEE 5.0\veesm.exe"

如果愿意，可以把Service Manager放在Startup组下，以在Windows开始运行时自动启动这个程序。设置快捷方式属性，以便Service Manager在运行时最小化。


Error 906
带反馈的线程要求START对象

解决办法

反馈允许设置初始值或从以前的循环迭代中存取值。

为使用反馈，必须把Start对象连接到反馈循环中的一个对象上，指明应先执行哪个对象(或子线程)。


Error 910
流程超出内存容量，立即保存程序

解决办法

立即把程序另存为不同的文件名。

对Windows NT上运行的程序：

程序已经用尽了所有可用的交换空间。

一个可能的原因是程序分配了非常大的数组或记录，并在所有结构上执行操作。在这种情况下，您可能要修改程序，只在部分结构上执行操作。

否则，您需要分配更多的交换空间，然后才能运行用完所有交换空间的VEE程序。

在Windows NT上：在My Computer上按鼠标右键，选择Properties。 选择Performance栏，选中Virtual Memory按钮，调节虚拟内存设置。


Error 935
在反馈周期内部要求Junction。

解决办法

在VEE 4 (或更高的)兼容模式下，在反馈周期内部要求一个Junction对象，而不再要求Start对象。

范例请参阅安捷伦VEE高级编程技术手册附录A。


Error 937
没有为Sample & Hold提供任何数据。

解决办法

已经到达Sample & Hold对象的XEQ端，但对象中没有包含数据，因此没有要输出的数据。改变程序，确保在执行XEQ端以前把数据发送到Sample & Hold对象。只在VEE 4 (或更高的)兼容模式下生成这一错误。


Error 938
VEE不能汇编这部分程序。

解决办法

在VEE 3.x和较老的版本中，可能会交叉迭代对象。它不定义执行对象，但会受到连接顺序影响。这也适用于在VEE 3兼容模式下运行的程序。

在VEE 4.x和较新的版本中，在兼容模式设为VEE 4 (或更高)时，只允许使用通过Junction对象交叉的循环。任何其它交叉循环都会生成这种错误。

如需更多信息，请参阅安捷伦VEE高级编程技术手册附录A。


Error 939
在线程连接到输入端时不能推送START。

解决办法

有一个UserObject或UserFunction包含Start对象，在按Start时试图运行与上下文以外生成的数据相关的线程。由于在按Start时只执行上下文内部的对象，因此数据丢失会阻止执行一个或多个对象；数据丢失会生成这种错误。只有VEE 4 (或更高的)兼容模式下才会生成这种错误。

解决方案包括：

为对象提供数据。临时断开来自UserObject或UserFunction输入端的输入，把它们连接到Constant对象或输出数据的其它对象上。或使用一个Junction提供初始值。

把其放在单独的UserObject中，让其自行运行，把试图调试的线程段分开。


Error 940
非法反馈形式。

解决办法

在没有迭代器的情况下存在反馈循环时，在VEE 4 (或更高的)兼容模式下会生成这个错误。由于没有迭代器，因此不能完成反馈循环。

可以在程序中插入一个迭代器完成循环，也可以去掉Junction对象，消除反馈。


Error 941
必须在T2之前激活T1。

解决办法

在VEE 4 (或更高的)兼容模式下，必须在下面的数据输入端(T2)之前执行Timer对象最上面的数据输入端(T1)。可以切换线路连接(在T1和T2之间)，也可以改变程序逻辑，以正确的顺序执行各端。


在 Agilent VEE 8.0 中修复的错误

ID | 描述 | 出错的版本
27961 | VSE: Junction 对象在不应该的时间，传递了 NULL。如果它被引用为非空 non-nil, 以后的表达式会 VSE 。 | 7.52
28140 | VEE 将陷入死循环如果我们改变DropDownList中的值。 | 7.52
28234 | 在Instrument Manager 删除仪器会产生VSE。 | 7.52
28141 | 用户可以控制已经被锁住的DropDownLists | 7.52
27672 | 产生VSE，如果传入一个不是3的参数给savePanelImage。 | 7.52
28508 | 错误的消息代码：允许删除没有连接的仪器 。 | 7.52
28110 | 不能导入一个用日语命名的UF。 | 7.52
28362 | 双击XYTrace上的 "scales"控制节点会产生VSE。 | 7.52
27997 | 在动态的IO Active X 控件中无法显示USB接口。 | 7.52
28118 | 在程序停止时，VEE 应该自动为 .NET 对象调用 Dispose。 | 7.52
28479 | 范例程序：Games\Starveego\network 中输出不匹配。 | 7.52
28225 | 当创建 .NET 控件的事件句柄时，弹出错误 401。 | 7.52
28278 | 编辑文本数组会导致VEE死机。 | 7.52
28130 | 不能在.NET operation builder中使用转义字符。 | 7.52
28151 | 选择或删除多个 RecordField 数据会导致VEE停止工作。 | 7.52
28107 | 如果使用SYSTEM选项中的GetFile(path)方法，在日语环境中不能得到正确完整的文件名。 | 7.52
27776 | 运行很多次测试之后，USB仪器会超时。 | 7.52
27871 | NI DAQ驱动不能导入 Toolkit Driver Session wizard。 | 7.52
27811 | 打开一个有embedded IO的文件会导致死循环。 | 7.52
28087 | 移动List Box会改变其中的文字的格式。 | 7.52
28285 | Program Explorer 里显示重复的变量名。 | 7.52
28235 | 在弹出的"adding instrument"对话框中，点击取消按钮将导致出现“unexpected error”信息框。 | 7.52
28204 | 在 formula 中把仪器的地址改为 0 不能使仪器状态变为 "live mode off"。 | 7.52
28187 | 不该自动产生一个名字是“Result”的输出端。 | 7.52
28295 | 在 Record 常数中用 Coord 类型的数据将产生VSE。 | 7.52
28155 | Concatenator不能整合两个或以上的不同整形的常数。 | 7.52
27702 | 在 VEE 联机帮助里缺少仪器的例子。 | 7.52
28089 | 如果改变了一个已声明变量的数据类型，在关闭VEE的时候没有提示。 | 7.52
28311 | DExplore 继续存在即使退出VEE。 | 7.52
28049 | "Declare Variable" & Real64 的行为古怪。. | 7.52
28158 | DateTime.Compare 对象的输入端跟formula不匹配 | 7.52
27665 | 如果在NIDAQ SCAN_Start()方法中运用异步或缓存的数据将导致VSE。 | 7.51
28457 | PageUp会在FOB中导致错误。 | 7.51
28379 | 显示或是隐藏一个PRC或是DLL的函数导致VSE | 7.51
27293 | 在编辑时，.NET Op Builder 的数据类型检查需要放松。 | 7.51
27179 | COM类型的转换没有运用QueryInterface。 | 7.51
27668 | 错误514：在方法复原中数据溢出 | 7.51
27696 | 很多次循环之后，IVI-COM对象会转变为一个System.__ComObject对象 | 7.51
27574 | 如果驱动的前缀跟软件模式名字不匹配，VEE不能自动找到IVI-COM驱动。 | 7.51
27135 | VEE不能处理重叠，NI-MAX分配的仪器地址... | 7.51
27438 | Description Indicator 不清晰。 | 7.51
27126 | IVI-COM例子引入了很多无关的信息. | 7.51
27650 | 当加入一个USB或是TCPIP仪器，显示重复的信息。 | 7.51
28268 | 当读取文本且dimSizeBlock 为0时，在 iopath.m 的 mod zero 会导致VSE。 | 7.5
28200 | 当导入一个.NET类型的控件库VEE产生错误提示。 | 7.5
27635 | 不能复制/粘贴一个NIDAQ对象。 | 7.5
27674 | LockPosition 的联机帮助仍然指向 Lock Panel Position 属性，已经过时了。 | 7.5
23402 | Vxipnp & DllFunc 不能完全的支持 UInt8 (被转换为 Int16 )。 | 7.0
23296 | DynamicFindRemoteInstruments.vee范例只能查找到连接在GPIB上的仪器，找不到连接在LAN上的。 | 7.0
28333 | 在contextView.m中打印一个仪器名超过200的会导致VSE。 | 7.0
27684 | VSE当一个 VEE 弹出面板拥有焦点，一个 .NET 对话框弹出，且程序停止 - kbdFocusView = freed id from popupPanel。 | 7.0
27990 | 当 XY trace 执行后，才把它加入面板，且该 XY trace 拥有焦点时，退出VEE会产生 VSE。 | 7.0
27889 | 当取消对一个在选择过程中出错的对象的选择时，会出现 VSE。比如，一个指向非法bmp / jpg的 Picture 对象。 | 7.0
27571 | 要重新启动VEE才能看到在IO库中做的改变 | 7.0
28421 | VEE显示错误的IO错误信息。 | 7.0
26948 | .net改变了浮点类型错误控制的行为。 | 7.0
28378 | 没有针对TCPIP和USB的仪器的SRQ或RQS方法。 | 7.0
27770 | 在一个 UO 的上级上下文不可见时 Undo 对它的 Cut 时会在 PropGrid 中出现错误的值。 | 7.0
23994 | 不能编辑 Real64 Input 和 Int32 Input 对象的 Value Constraint Field。 | 7.0
27656 | VSE loading corrupt save file 'Cannot create views for component' parsing viewFor/devCarrierFor dd with no NPort devId 'dd'。 | 7.0
28079 | 在UO中双击iconized PCall会导致VSE。 | 7.0
28030 | 在Record属性中有重复的int16数据类型。 | 6.2
28097 | vee.io中GPIB的网关名字超过32个字节会导致VSE。 | 6.0
27998 | 在一个库中点击Call user function object会转到一个错误的库中。 | 6.0
27494 | VSE，在 runtime 弹出面板上的一个对象被释放后，它的上下文菜单会发出 MENUPICKEVENT。 | 6.0
27596 | UInt8数组有时给出错误结果。 | 6.0
27463 | 在程序运行或是停止的状态下，File->Create Runtime Version 应为不可用状态。 | 6.0
27838 | VSE，UO 名字有效但却在当NameSpace中有重复， UserObject -> "Make UserFunction"会发生 VSE。 | 5.0
27687 | VSE，当把 sort() 用于一个rec of rec of array时，会出现 Internal 'compareValues not defined for this type' | 5.0
27729 | 在暂停状态下且有一个 PopupPanel 时，按下F1会导致 VSE， PopupPanel 不能识别 selectList。 | 5.0
27799 | VSE，当交互地删除一个带有 Global-Scope 的声明变量的子 UO 的 UO 时，会出现 VSE。 | 4.0
27683 | VSE 当 veerun 停止时，释放带有全局 DeclVar 的子 UO 的 UO 时，会出现 VSE。 | 4.0
28411 | IODevCreate.m 有内存泄漏。 | 4.0
27544 | Veesm 不能连接一个名字以数字开头的服务器。 | 3.0
27573 | Sequencer 变量 "thisTest" 中不存在于 EnabledIf 的表达式中（帮助文件中说存在），除非你打开再点击“OK”。 | 3.0
27608 | VSE 在报告代码为 950-999 的错误时，应该给出一些类似 “不要做这些操作”的信息。 | 3.0

VSE: VEE 严重错误。


HC_BrowserCall

为当前选择的函数创建一个Call对象。把Call放在程序上下文中。它是一个可以按需编辑的模板。


HC_BrowserFormula

为当前选择的函数创建一个Formula对象。把Formula放在程序上下文中。它是一个可以按需编辑的模板。


HC_BrowserGet

创建一个Formula对象，Get当前选择的成员的值(属性)。把Formula放在程序上下文中。它是一个可以按需编辑的模板。


HC_BrowserHelp

为当前选择的函数或对象显示Help(而不是与Browser有关的Help)。


HC_BrowserSelectArea

这个浏览器以层级排列方式显示函数和对象。从左栏中选择一个大类，从中间一栏中选择子分类，从右栏中选择具体函数或对象。然后点击其中一个Create...按钮(或双击选项)，从选项中创建一个VEE对象。把这个VEE对象放在程序上下文中，根据需要进行编辑。


HC_BrowserSet

创建一个Formula对象，Set当前选择的成员的值(属性)。把Formula放在程序上下文中。它是一个可以按需编辑的模板。


HC_FindAllMatches

在复选这个框时，将报告每个对象的所有匹配项。默认值为关闭，只报告每个对象找到的第一个匹配项。


HC_FindMatchCase

在复选这个框时，搜索限定为Find一行中指定的大小写字母都要完全匹配。默认值为关闭，即大写字母和小写字母视为相同。


HC_FindNested

在复选这个框时(默认值)，搜索会横贯所有级别的嵌套User Objects。如果没有复选这个框，那么只搜索当前级别。


HC_FindObjectType

Object Type属性把搜索范围限定在Value列表中选择的对象类型。默认值是所有对象类型。为限制搜索范围，点击Value按钮，复选或反选所需的类型。为方便起见，提供了Select All按钮和Clear All按钮。


HC_FindOtherProperty

可以使用Property按钮，根据各种对象属性限制搜索范围。一旦选择了一个Property，可以在Value栏中指定所需的限制。例如，如果选择Breakpoint/On，那么只搜索具有活动断点的对象。


HC_FindReset

Reset按钮恢复默认的Property/Value列表，这是没有任何限制的所有对象类型。


HC_FindSearchIn

这个字段表明搜索范围。默认值是Entire Program。如果想限定搜索范围，在特定上下文上按鼠标右键，如UserFunction或UserObject，从Program Explorer中打开Find对话框。


HC_FindShowBegin

在复选这个框时，如果Find文本发生在被搜索的文本开头，那么会报告匹配。


HC_FindShowContain

在复选这个框时，如果Find文本发生在被搜索的文本的任何地方，那么会报告匹配。


HC_FindShowEnd

在复选这个框时，如果Find文本发生在被搜索的文本末尾，那么会报告匹配。


HC_FindShowExact

在复选这个框时，Find文本必须与被搜索的文本的整个字段匹配。


HC_FindTarget

输入要在VEE程序中查找的文本字符串。如果这一行留为空，搜索将与任何文本相匹配。


HC_IconAddToPanel

Add To Panel按钮把选中的对象放到程序的面板视图上。如果面板视图还不存在，那么将创建一个面板视图。面板与当前上下文相关，可以嵌套面板。


HC_IconBreakpoint

Toggle Breakpoint按钮通过设置或清除选定对象上的断点，来协助进行调试。对象上的断点恰好在对象前暂停执行程序。还可以在对象菜单Properties中存取断点。


HC_IconCallStack

Call Stack按钮通过显示为到达当前暂停的UserObject或 UserFunction而调用的UserObjects或UserFunctions的层级，来协助进行调试。点击Call Stack对话框中的任何项目，可以在VEE工作空间中打开该UserObject或UserFunction。


HC_IconCopy

Copy按钮把选定的对象放在Paste缓冲器中及Windows剪切板上。


HC_IconCut

Cut按钮删除选定的对象，把它们放在Paste缓冲器中及Windows剪切板上。


HC_IconDefaultPrefs

Default Preferences按钮提供Default Preferences对话框。这个对话框有六栏，包含许多、而且是可变的定制VEE设置。


HC_IconDelLine

Delete Line按钮提供Delete Line光标，然后可以点击要删除的行。(删除多个行的快捷方式是Ctrl-Shift-Click)


HC_IconFind

Find按钮提供了一个对话框，用来在VEE程序中搜索文本字符串和特定对象属性。可以使用各种搜索属性，如Match Case和Object Type，限定搜索范围。为限定搜索范围，在某个上下文上按鼠标右键，从Program Explorer中打开Find。


HC_IconFindResults

Find Results按钮显示最近一次Find的搜索结果。通过点击栏的标题，可以改变栏的分类顺序。


HC_IconFuncBrowser

Function & Object Browser按钮提供Function & Object Browser对话框。这个浏览器可以方便地存取各种数学运算、对象和属性。


HC_IconInstrMgr

Instrument Manager按钮提供Instrument Manager对话框。这个对话框可以方便地编辑、查看和创建I/O资源，如仪器事务和驱程。


HC_IconNew

New按钮清除VEE工作空间。如果当前程序中的任何变化没有保存，系统会给出提示。


HC_IconOpen

Open按钮把一个程序文件加载到VEE工作空间中，替换任何已有的程序。如果当前程序中有任何没有保存的变化，系统会给出提示。


HC_IconPaste

Paste按钮把Paste缓冲器的一个拷贝放到VEE工作空间上。可以Paste意外Cut的任何对象，将恢复到这些对象的连接。


HC_IconPause

Pause按钮临时停止执行所有程序线程。在程序处于暂停状态时，可以使用Step或Run/Resume从暂停点继续执行程序。


HC_IconPrint

Print Screen按钮把VEE窗口中看得见的内容发送到打印机上。如果想配置打印机，可以使用File [image] Print Screen。


HC_IconProfiler

Profiler按钮提供Profiler对话框。Profiler提供与每个UserObject和UserFunction的执行时间有关的比较信息。


HC_IconProgExplorer

Program Explorer按钮显示或隐藏Program Explorer窗口。Program Explorer显示当前VEE程序的层级结构。


HC_IconRun

Run按钮开始执行程序中的所有线程。如果程序有多个线程，您只想运行其中一个线程，那么对该对象使用Start对象，而不是Run按钮。


HC_IconRunState

这个区域显示程序的运行状态。指示符包括：

空白 准备就绪(已停止)
绿箭头 正在运行
黄条 已暂停
红条 错误


HC_IconSave

Save按钮把当前程序写入前面指定的文件名中。Save使用VEE窗口标题栏中显示的文件。如果这是一个以前还没有保存的New程序，系统会提示输入一个文件名。为改变文件名，使用File [image] Save As。


HC_IconShowData

Show Data Flow按钮以可视方式表明数据通过程序所使用的路由，来协助进行调试。在Default Preferences [image] General栏Debug区域中设置小的方形数据标尺的速度。


HC_IconShowExec

Show Execution Flow按钮在程序正在运行时高亮度显示正在执行的对象，来协助进行调试。在暂停状态或错误状态下，Show Execution Flow会高亮度显示已经执行的所有对象。


HC_IconStepIn

Step Into按钮一次执行一个图元对象，来协助进行调试。在遇到UserObject或本地或导入的UserFunction时，VEE会把它放到细节视图中，在该视图中执行每个对象。


HC_IconStepOut

Step Out按钮一次执行一个图元对象，来协助进行调试。如果在UserObject或UserFunction中执行对象，VEE会执行完该UserObject or UserFunction中的所有对象。


HC_IconStepOver

Step Over按钮一次执行一个图元对象，来协助进行调试。在遇到UserObject或UserFunction时，它会整个执行，而不会在细节视图中打开。


HC_IconStop

Stop按钮停止执行所有程序线程，关闭打开的任何文件。在程序处于停止状态时，按Step或Run/Resume，从头重新开始执行程序。


HC_IconViewVars

View Variables按钮显示当前定义的所有变量的列表。双击一个变量名称，查看类型、形状和数据值等细节。


HC_InstrMgrDlgAdd

点击Add按钮，在I/O配置中添加一部仪器。对Find Instruments按钮没有发现的仪器，需要进行手动Add操作，如RS-232仪器或通过LAN网关连接的仪器。(在添加与该接口相关的仪器时，会自动添加一个接口项。)


HC_InstrMgrDlgComponent

点击Component Driver按钮，为当前选择的仪器创建一个Component Driver对象。(Component Driver可以高效地连接仪器Panel Driver的一个组件。)


HC_InstrMgrDlgConfigDrivers

Configure Drivers按钮识别选定的仪器，为该仪器配置任何可用的VXIplug&play和Panel Drivers。(只能识别IEEE 488.2仪器及大多数VXI仪器。)


HC_InstrMgrDlgDirectIO

点击Direct I/O按钮，为当前选择的仪器创建一个Direct I/O对象。(Direct I/O对象支持仪器低级事务。)


HC_InstrMgrDlgFindInstr

在选定根节点时，点击Find Instruments按钮，搜索提供的接口和仪器。在选择某个接口时，点击这个按钮，搜索连接到选定接口的所有仪器。Find Instruments按钮执行的具体操作由Settings对话框控制。


HC_InstrMgrDlgIVICOM

点击IVI-COM按钮，为当前选择的仪器创建一个IVI-COM对象。(如果仪器没有IVI-COM驱程，这个按钮一直为灰色。)


HC_InstrMgrDlgLoadSampls

启动一个新的VEE，并加载范例文件。由于已经为选择的仪器配置了正确的仪器地址，因此您只需按Run即可。


HC_InstrMgrDlgNidaq

点击NI按钮，为当前选择的仪器创建一个NI对象。这可以是NI-DMM, NI-SWITCH, NI-FGEN, NI-DAQ, NI-SCOPE或 NI-DAQmx。


HC_InstrMgrDlgOK

点击OK按钮，把仪器配置保存在内部高速缓存中，关闭Instrument Manager。程序使用当前配置，但不会保存到磁盘中。


HC_InstrMgrDlgPanel

点击Panel Driver按钮，为当前选定的仪器创建一个VEE Panel Driver对象。(Panel Driver是仪器前面板的全功能图形仿真。)


HC_InstrMgrDlgPnP

点击Plug&play Driver按钮，为当前选定的仪器创建一个tVXIplug&play驱程对象。(VXIplug&play驱程是基于VISA的行业标准API。)


HC_InstrMgrDlgPrint

Print按钮启动一个标准Windows Print对话框。Instrument Manager打印输出是整个Instrument List树型图的转储位图。


HC_InstrMgrDlgPropertiesInstr

点击(Instrument) Properties按钮，查看或修改当前选定的仪器的I/O相关属性。接口类型决定着提供的属性集。例如，RS-232仪器有一个设置波特率的Properties字段，GPIB仪器则有一个设置总线地址的Properties字段。


HC_InstrMgrDlgPropertiesIntf

点击(Interface) Properties按钮，查看与当前选定的接口有关的特定细节。

注意，VEE不能修改接口的硬件特点，或改变操作系统或I/O Config辅助工具执行的配置。如果在任何Interface Properties字段中输入不同的值，那么必须使用与配置好的现有接口匹配的值。


HC_InstrMgrDlgRemoveInstr

点击Remove按钮，从I/O配置中删除仪器项目。(在与该接口相关的所有仪器被删除时，会自动删除这个接口项目。)


HC_InstrMgrDlgRemoveIntf

点击Remove按钮，从I/O配置中删除仪器项目。(在与该接口相关的所有仪器被删除时，会自动删除这个接口项目。)


HC_InstrMgrDlgSave

点击Save按钮，把仪器配置保存到磁盘中，关闭Instrument Manager。这会用当前配置覆盖vee.io文件。

如果仪器配置嵌入到程序中，那么没有必要使用Instrument Manager中的Save，因为在保存程序时会保存嵌入式配置。


HC_InstrMgrDlgSettings

Settings对话框控制着仪器发现过程中执行的部分操作。

如果选择Detect only，那么Find Instruments按钮会检测每个总线地址上是否存在一台设备。如果选择Detect, identify, and configure...，那么Find Instruments按钮还会对检测到的每部仪器执行标识和驱程配置操作。

如果复选Ask before sending...，那么在发送*IDN?标识每部仪器前会出现一个确认对话框。如果没有复选，那么*IDN?会发送到所有仪器，而不需操作人员确认。如果系统中包含老的非IEEE-488.2仪器，应使用确认对话框。


HC_InstrMgrDlgSettingsFind

ss


HC_InstrMgrDlgSettingsId

如果复选Ask before sending...，那么在发送*IDN?标识每部仪器前会出现一个确认对话框。如果没有复选，那么*IDN?会发送到所有仪器，而不需操作人员确认。如果系统中包含老的非IEEE-488.2仪器，应使用确认对话框。


HC_PrefsAutoLineRoute

在复选Auto Line Routing时，在连接、移动或调整对象时，会自动重新路由对象之间的线。自动路由只使用横线和竖线，结果与Edit [image] Clean Up Lines相同。在自动路由关闭时，会从端到端直接画线，通常是对角线。


HC_PrefsBinaryRunTime

在复选Binary RunTime File Format时，会使用二进制格式保存.vxe文件，改善安全性，缩小文件容量。在没有复选这个框时，.vxe文件会使用ASCII格式存储(类似于.vee文件)。


HC_PrefsCheckAddrs

在启用仪器检查时，VEE会检查预运行期间配置的仪器，检验能否存取这些仪器。如果地址没有响应，那么您可以开机，选择不同的总线地址，等等。在没有复选这个框时，断开连接的仪器或配置不正确的仪器可能会在程序运行时导致超时错误。


HC_PrefsColors

Appearance Property Group允许为VEE程序中的任何屏幕单元选择默认的颜色。


HC_PrefsDelVars

在复选Delete Variables at PreRun时，在每个程序运行前，将删除所有变量中存储的值。因此，如果没有正确设置其值，那么Get Variable对象会发生错误。在没有复选这个框时，Get Variable对象可以存取上一次程序运行留下的旧数据。这些旧数据可能对新程序运行有效，也可能无效。


HC_PrefsDisableDebug

在复选Disable Debug时，所有调试功能失效，程序执行速度最快。


HC_PrefsExecMode

可以使用Execution Mode选项，强制向下兼容用老版本VEE编写的某些程序。Execution Mode与VEE程序一起存储，可以在Default Preferences对话框中改变Execution Mode。

如果设置的Execution Mode低于当前版本，那么程序不能使用较新的VEE功能。建议使用最高的Execution Mode，除非在极少数情况下较高的模式会导致程序行为以不需要的方式变化。


HC_PrefsFlowRate

设置Data Flow标尺移动的速度。可以从1 - 10中选择一个速率，默认值是6，速度最快的是10。


HC_PrefsFonts

Fonts栏允许为VEE程序中的任何屏幕单元选择默认的字体。


HC_PrefsNumberFormat

Number栏允许为VEE程序中显示数字选择默认的格式。


HC_PrefsOKButton

在按OK时，Default Preferences的任何变化只对当前工作会话有效。在退出和重启VEE时，将恢复上一个Default Preferences (保存在"veerc"文件中)。


HC_PrefsPrintCover

在复选Print Cover Page时，在打印输出开始时会生成一个封面。Print Program对话框中可以不使用这个默认格式选项。


HC_PrefsPrintDarkness

B&W Printer Darkness设置允许为VEE程序中的每个屏幕单元选择一个灰色阴影。在黑白打印机上打印程序时，将使用这个灰色阴影。(Appearance Property Group中的设置用于彩色打印机。)


HC_PrefsPrintExplorer

在复选Print Program Explorer时，打印输出包括Program Explorer窗口中包含的概况信息。Print Program对话框中可以不使用这个默认格式选项。


HC_PrefsPrintHeaderIdx

在复选Print Header and Index Page时，每张打印输出页面会分配一个页码及其它标题信息，在打印输出结束时会生成一个Index。Print Program对话框中可以不使用这个默认格式选项。


HC_PrefsPrintIOConfig

在复选Print I/O Configuration时，打印输出包括I/O配置展开的树形图 (从Instrument Manager)。Print Program对话框中可以不使用这个默认格式选项。


HC_PrefsPrintMag

在打印VEE程序时指定放大倍数。数字越小，图像越小。某些打印机驱程可能会对指定的值进行舍入。


HC_PrefsResetButton

在按Reset时，将丢弃任何未决珠Default Preferences变化，恢复以前的Default Preferences (保存在"veerc"文件中)。


HC_PrefsSaveButton

在按Save时，任何Default Preferences变化将对当前工作会话生效，并保存在"veerc"文件中。在退出和重启VEE时，将使用保存的新Default Preferences。(到"veerc"文件的具体路径取决于系统。)


HC_PrefsSpacing

在执行Edit [image] Align...操作时，指定对象之间放置的像素数量。只有在启用Space Equally时，才使用这个Alignment Spacing值。


HC_PrefsTrigMode

Trig Mode选项选择程序中使用的默认三角测量单位。弧度是VEE的自然单位(速度最快)。


HC_PrefsWebEnable

在复选Enable Server时，会激活VEE的内置Web服务器。Web服务器允许从远程Web浏览器上监测VEE程序。


HC_PrefsWebLogFile

指定到http.log文件的文件路径。这个文件记录Web服务器处理的所有进入请求，可以进行无界扩张。


HC_PrefsWebPortNum

指定VEE的Web服务器使用的端口号码。必须在系统的services文件中分配这个端口号码，任何其它Web服务器不得使用这个端口号码。


HC_PrefsWebRootDir

指定远程Web浏览器可以存取的本地目录。VEE使用Root Directory中的index.html文件作为主页。默认主页安装为~installDir/www/index.html。可以修改这个文件，和/或把这个文件复制到不同的Root Directory下。


HC_PrefsWebTimeout

指定Web服务器等待VEE响应的最大时间(单位为秒)。


HC_PrintPrgCover

在复选这个框时，在打印输出开始时会生成一个封面。


HC_PrintPrgExplorer

在复选这个框时，打印输出会包括Program Explorer窗口中包含的概况信息。


HC_PrintPrgHeaderIdx

在复选这个框时，每张打印输出页会分配一个页码及其它标题信息，在打印输出结束时会生成Index。


HC_PrintPrgIOConfig

在复选这个框时，打印输出会包括I/O配置展开的树形图(从Instrument Manager)。


HC_PrintPrgNested

在复选这个框时，打印输出会包括所有嵌套UserObjects的open view。


HC_PrintPrgObjects

在复选这个框时，打印输出会包括程序中每个对象的详细视图。除最简单的对象外，所有对象都以open view形式打印。


HC_ProfilerClear

Clear按钮把所有Profiler数据值复位成0 (零)。


HC_ProfilerCommas

在复选这个框时，数据写入数据文件中，各个Profiler数据字段之间使用逗号作为定界符(分隔符)。通过使用逗号定界符，可以更简便地把数据导入某些其它程序中，如电子表格中。在没有复选这个框时，数据字段使用多个空格对准。


HC_ProfilerFileName

这个字段指定保存Profiler数据的文件名称。点击这个字段，出现Save data filename对话框。


HC_ProfilerNumDigits

这个字段指定小数点右面显示的位数。


HC_ProfilerOnlyExecuted

在复选这个框时，只对执行的UserObjects和UserFunctions显示Profiler数据。


HC_ProfilerOptions

Options按钮调出Profiler Options对话框。这些选项定制显示和保存的数据格式。


HC_ProfilerOverwrite

在复选这个框时，每点击一下Save按钮会重写Profiler数据文件以前保存的数据。在没有复选这个框时，每次Save都会把新数据追加到现有的数据后面。


HC_ProfilerRefresh

在Profiler运行时，会收集廓线数据，但不会自动更新对话框中显示的数据。必须点击Refresh按钮，才能使Profiler显示最新的廓线数据。


HC_ProfilerResults

在启动Profiler时，它提供了与每个UserObject和UserFunction的执行时间有关的比较信息。点击任何一栏标签(如Name或Time)会显示该字段上存储的Profiler数据。再次点击会按相反顺序分类。双击Name字段中显示的任何UserObject或UserFunction及其视图，会在VEE工作空间中打开它。


HC_ProfilerSave

Save按钮把Profiler数据写入使用Options按钮指定的文件名中。


HC_ProfilerStart

Start Profiling按钮是启动或停止绘制廓线的切换功能。


HC_SaveAsDlgColorsFonts

Save colors and fonts with program把默认颜色和字体保存在Default Preferences对话框中选择的程序文件中。这保证了不管谁打开程序，都会得到默认的所有颜色和字体。如果没有选择这个选项，那么只有程序中明确设置的颜色和字体才保存在程序文件中。使用程序的其它人仍可以保留自己的默认颜色和字体。如果加载一个已有程序，那么会根据以前保存程序的方式设置选项。


HC_SaveAsDlgDeviceConfig

Save I/O configuration with program与程序文件一起保存veeio I/O配置信息，而不是保存在veeio资源文件中。配置信息在Instrument Manager中指定。如果没有选择这个选项，那么当前程序的配置信息保存在veeio文件中。如果加载一个已有程序，那么会根据以前保存程序的方式设置选项。


HC_StatusExecMode

这个字段显示当前加载的VEE程序的Execution Mode。Execution Mode允许较新版本的VEE运行较老版本的VEE程序，实现全面向下兼容能力。可能的模式有VEE 3、VEE 4等等，直到当前VEE版本。Execution Mode与VEE程序一起保存，可以在Default Preferences对话框中改变Execution Mode。


HC_StatusModified

这个字段表明当前加载的程序是否有没有保存的变化(修改)。在这个框变成"灰色"时，表明不存在没有保存的变化。


HC_StatusMsg

VEE窗口的最下面一行是状态信息区域。这个状态行显示各类信息，具体视当前操作而定，如程序运行状态、错误信息、移动的对象的像素位置及有用提示。


HC_StatusProfiler

这个字段表明目前是否启用Profiling。在这个框变成"灰色"时，会停止绘制廓线。


HC_StatusWebServer

这个字段表明目前是否启用VEE Web Server。在这个框变成"灰色"时，Web Server失效。VEE Web Server在Default Preferences对话框中控制。


GPIB 仪器属性

对通过GPIB接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

visaAddress | Text | 仪器的VISA型I/O地址。例如: GPIB0::23::INSTR
visaAlias | Text | 仪器的别名
enableEOI | Text | 在write事务的最后一个字节使能EOI。 零 = 使能；非零 = 不使能。缺省值为不使能。
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符。
interfaceType | Text | 为GPIB仪器返回"GPIB"。
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

对GPIB（legacy）仪器，请参阅下表

属性 数据类型 描述

address | Text | 仪器的VEE型I/O地址。例如:723
enableEOI | Text | 在write事务的最后一个字节使能EOI。 零 = 使能；非零 = 不使能。缺省值为不使能。
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符。
hostname | Text | 远程服务器主机名或IP地址。
interfaceType | Text | 为GPIB仪器返回"GPIB"。
pnpResource | Text | 仪器的VISA型I/O地址。例如: GPIB0::23::INSTR
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager,GPIO 仪器属性,串行口仪器属性,VXI 仪器属性,USB 仪器属性,TCPIP 仪器属性。


GPIO 仪器属性

对通过GPIO接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

address | Int32 | 仪器的VEE型I/O地址。例如 12
eolSequence | Text | 在write事务的最后一个字节使能EOI。 零 = 使能；非零 = 不使能。缺省值为不使能。
hostname | Text | 远程服务器主机名或IP地址。
interfaceType | Text | 为GPIO仪器返回"GPIO"。
pnpResource | Text | GPIO无此项。
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager, GPIB 仪器属性,串行口仪器属性,VXI 仪器属性,USB 仪器属性,TCPIP 仪器属性。


Serial 仪器属性

对通过串行(RS-232)接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

visaAddress | Text | 仪器的VISA型I/O地址。例如: ASRL0::INSTR
visaAlias | Text | 仪器别名。
baudRate | Int32 | RS-232接口的当前带宽。缺省为9600.
charSize | Int32 | 每个字符帧的数据位。取值范围为5到8。缺省为8.
EnableEOI | Text | 在write事务的最后一个字节使能EOI。 零 = 使能；非零 = 不使能。缺省值为不使能
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符
handshake | Text | 当前连接的同步机制。可以为None, XonXoff, RtsCts, 或 DtrDsr。缺省为None。
interfaceType | Text | 为RS-232仪器返回"Serial"。
parity | Text | 校验位产生/检查。可以为None, Even, Odd, Mark, 或 Space. 缺省为None。
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
stopBits |  | 串行停止位。可以为1或2。 缺省为1。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

对Serial（legacy）仪器，请参阅下表

属性 数据类型 描述

address | Int32 | 仪器的VEE型I/O地址。例如: 9
baudRate | Int32 | 仪器的VISA型I/O地址。例如: ASRL0::INSTR
charSize | Int32 | 仪器的VISA型I/O地址。例如: ASRL0::INSTR
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符
handshake | Text | 当前连接的同步机制。可以为None, XonXoff, RtsCts, 或 DtrDsr。缺省为None。
hostname | Text | 远程服务器主机名或IP地址。
interfaceType | Text | 为RS-232仪器返回"Serial"。
parity | Text | 校验位产生/检查。可以为None, Even, Odd, Mark, 或 Space. 缺省为None。
pnpResource | Text | 仪器的VISA型I/O地址。例如: ASRL0::INSTR
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager,GPIO 仪器属性,GPIB 仪器属性,VXI 仪器属性,USB 仪器属性,TCPIP 仪器属性。。


TCPIP 仪器属性

对通过TCPIP接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

visaAddress | Text | 仪器的VISA型I/O地址。例如: GPIB0::23::INSTR
visaAlias | Text | 仪器的别名
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符。
interfaceType | Text | 为GPIB仪器返回"GPIB"。
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager,GPIO 仪器属性,GPIB 仪器属性,串行口仪器属性,VXI 仪器属性,USB 仪器属性。


USB 仪器属性

对通过USB接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

visaAddress | Text | 仪器的VISA型I/O地址。例如: GPIB0::23::INSTR
visaAlias | Text | 仪器的别名
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符。
interfaceType | Text | 为GPIB仪器返回"GPIB"。
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager,GPIO 仪器属性,GPIB 仪器属性,串行口仪器属性,VXI 仪器属性,USB 仪器属性,TCPIP 仪器属性。


VXI 仪器属性

对通过VXI接口连接的仪器，下表中的属性都可以程序化地访问。

属性 数据类型 描述

address | Text | 仪器的VEE型I/O地址。例如: 16
enableEOI | Text | 在write事务的最后一个字节使能EOI。 零 = 使能；非零 = 不使能。缺省值为不使能。
eolSequence | Text | 在write事务的结束时发送的字符序列。缺省值为new-line字符。
hostname | Text | 远程服务器主机名或IP地址。
interfaceType | Text | 为VXI仪器返回"VXI"。
pnpResource | Text | 仪器的VISA型I/O地址。例如: VXI 0::23::INSTR
readTerm | Int32 | 用于终止read事务的字符。缺省值为new-line字符。
timeout | Real64 | 事务超时的时间，单位为秒。缺省值为5秒。

位置

Device [image] Function & Object Browser [image] Instruments

另请参阅

Instrument Manager,GPIO 仪器属性,GPIB 仪器属性,串行口仪器属性,USB 仪器属性,TCPIP 仪器属性。


No Help Topic Available

这个对象或对话框的Help内容还没有实现。


NotOnNet

Error

这台计算机没有连接到网络上。

我们对此带来的不便深表歉意。


Polynomial

一个菜单项。

用途

使用Polynomial存取下面的对象，从数据和系数值中生成一个Real64多项式结果。这些对象汇总为poly(x,vec)。

poly(x,[a0, a1])

poly(x,[a0, a1, a2])

poly(x,[a0, a1, a2, a3])

poly(x,[a0, a1, ... aN])

位置

Math [image] Polynomial

另请参阅

Generate和poly(x,vec)。


Agilent VEE 颜色的RGB值

可以使用下述的RGB值创建用户位图或匹配一个VEE的颜色，比如，匹配一个面板背景色。

下列颜色及它们的RGB值可能会在未来的VEE版本中发生变化。

Black | r:0 | g:0 | b:0
Dark Beige | r:105 | g:95 | b:80
Darkest Gray | r:96 | g:96 | b:96
Dark Gray | r:128 | g:128 | b:128
Med Dark Gray | r:160 | g:160 | b:164
Gray | r:192 | g:192 | b:192
Med Light Gray | r:208 | g:208 | b:208
Light Gray | r:224 | g:224 | b:224
Lightest Gray | r:240 | g:240 | b:240
White | r:255 | g:255 | b:255
Darkest Red | r:121 | g:0 | b:21
Dark Red | r:128 | g:0 | b:0
Med Red | r:207 | g:14 | b:48
Warning Red | r:230 | g:30 | b:30
Red | r:255 | g:0 | b:0
Light Warning Red | r:229 | g:64 | b:93
Med Light Red | r:247 | g:102 | b:129
Light Red | r:255 | g:128 | b:128
Med Pale Red | r:253 | g:164 | b:181
Pale Red | r:255 | g:197 | b:207
Darkest Orange | r:113 | g:32 | b:0
Dark Orange | r:188 | g:55 | b:0
Med Dark Orange | r:243 | g:91 | b:27
Med Orange | r:245 | g:123 | b:73
Orange | r:255 | g:128 | b:0
Golden Orange | r:239 | g:145 | b:0
Light Orange | r:255 | g:162 | b:124
Light Golden Orange | r:246 | g:191 | b:105
Pale Orange | r:252 | g:209 | b:193
Pale Golden Orange | r:253 | g:227 | b:186
Dark Brown | r:96 | g:64 | b:64
Med Brown | r:113 | g:68 | b:0
Golden Brown | r:163 | g:105 | b:0
Dark Gold | r:149 | g:108 | b:54
Brown | r:150 | g:110 | b:75
Gold | r:176 | g:145 | b:91
Beige | r:148 | g:139 | b:123
Golden Beige | r:175 | g:160 | b:126
Light Gold | r:203 | g:182 | b:128
Light Beige | r:220 | g:211 | b:184
Darkest Yellow | r:78 | g:79 | b:0
Darkest Green Yellow | r:118 | g:121 | b:0
Dark Green Yellow | r:150 | g:150 | b:0
Med Green Yellow | r:179 | g:185 | b:0
Dark Yellow | r:192 | g:192 | b:0
Med Dark Yellow | r:213 | g:213 | b:45
Med Yellow | r:234 | g:236 | b:94
Yellow | r:255 | g:255 | b:0
Light Yellow | r:255 | g:255 | b:128
Pale Yellow | r:252 | g:254 | b:185
Dark Green | r:0 | g:96 | b:0
Forest Green | r:49 | g:101 | b:1
Med Dark Green | r:0 | g:130 | b:70
Med Green | r:67 | g:142 | b:0
Green | r:0 | g:193 | b:19
Med Yellow Green | r:64 | g:229 | b:10
Yellow Green | r:128 | g:255 | b:0
Light Yellow Green | r:163 | g:242 | b:95
Light Green | r:128 | g:255 | b:128
Pale Green | r:219 | g:255 | b:184
Darkest Teal | r:0 | g:78 | b:71
Med Dark Teal | r:0 | g:107 | b:97
Dark Teal | r:0 | g:128 | b:128
Med Teal | r:0 | g:150 | b:136
Teal | r:0 | g:160 | b:160
Med Light Teal | r:0 | g:183 | b:165
Light Teal | r:0 | g:192 | b:192
Blue Gray | r:120 | g:184 | b:210
Cyan | r:0 | g:255 | b:255
Pale Cyan | r:140 | g:244 | b:234
Dark Blue | r:0 | g:0 | b:128
Med Dark Blue | r:70 | g:0 | b:240
Blue | r:0 | g:0 | b:255
Dark Sky Blue | r:51 | g:101 | b:251
Med Light Blue | r:0 | g:128 | b:255
Lavender | r:128 | g:128 | b:255
Light Blue | r:96 | g:192 | b:255
Sky Blue | r:162 | g:193 | b:254
Pale Blue | r:193 | g:206 | b:255
Light Blue Gray | r:195 | g:211 | b:219
Darkest Purple | r:80 | g:0 | b:147
Dark Purple | r:90 | g:0 | b:170
Med Purple | r:123 | g:0 | b:228
Purple | r:128 | g:0 | b:255
Violet Purple | r:146 | g:52 | b:219
Light Violet Purple | r:183 | g:96 | b:249
Med Light Purple | r:200 | g:120 | b:253
Light Purple | r:212 | g:159 | b:255
Med Pale Purple | r:227 | g:190 | b:255
Pale Purple | r:240 | g:210 | b:255
Dark Magenta | r:128 | g:0 | b:128
Dark Pink Magenta | r:181 | g:0 | b:105
Hot Pink | r:255 | g:0 | b:128
Light Pink Magenta | r:217 | g:49 | b:146
Med Magenta | r:236 | g:24 | b:200
Magenta | r:255 | g:0 | b:255
Light Magenta | r:255 | g:128 | b:255
Pink | r:255 | g:128 | b:192
Light Pink | r:243 | g:159 | b:209
Pale Pink | r:253 | g:192 | b:229


Set Last File Write Time

设置给定文件最后一次文件写入时间。

位置

System [image] File [image] Set Last File Write Time


Tab Index

Tab Index只在Panel视图上激活，允许设置Panel上Object的tab顺序。

用途

通过Properties窗口进入Tab Index，可以在Panel视图上设置Object的Tab顺序。在操作人员只有一个键盘时，这种功能特别有用。

另请参阅

面板视图导航技术

以程序化方式改变属性

编程属性


一般技巧

在开发程序时，应使用与目的系统相同(或类似的)屏幕分辨率。Panel View是不能滚动的特定尺寸的窗口(用像素数量表示)。需要确认Panel View适合目的系统的屏幕。

在创建VEE窗口前，可以指定VEE窗口尺寸。在启动VEE时，使用命令行选项-geometry，指定Detail View的尺寸，从而在创建时指定Panel View的尺寸。如需与使用命令行选项有关的更多信息，请参阅使用命令行选项启动Agilent VEE。

如果有多个目的系统类型，在开发程序时，应使用公分母最低的系统，以便能够实际感受最坏情况下的分辨率(文本可读性)、执行速度和颜色。

在程序最终成形前，在目的系统测试程序。

在为用户提供指令时，可能存在重要的键盘差异。例如，Esc可能位于键盘上不同的位置。

不要使用二进制数据文件。把数据文件保存为ASCII。


在程序中创建UserFunction

下面的范例分步说明了怎样创建一个简单的UserFunction，然后在VEE程序中连接这个UserFunction。在理想情况下，UserFunction中一起使用的多个对象应执行某项任务。

1. 在Main工作区中添加一个UserFunction (Device UserFunction).，出现UserFunction编辑窗口。

2. 在UserFunction工作区中添加对象，根据需要连接对象之间的端。可以使用与“在UserObject工作区中添加对象”相同的技术，在UserFunction中添加对象。

3. 添加并为UserFunction连接输入端和输出端：

a. 把鼠标光标放在UserFunction的输入端区域，按Ctrl+A。数据输入端出现在编辑窗口的端区域中。

b. 在编辑窗口中，把输入端的内部端连接到UserFunction内部的相应对象上。

c. 把鼠标光标放在UserFunction的输出端区域，按Ctrl+A。数据输出端出现在编辑窗口的端区域中。

d. 在编辑窗口中，把输出端的内部端连接到UserFunction内部的相应对象上。

4. 把UserFunction标题变成描述名称，以便能够在程序中识别它。在UserFunction编辑窗口中双击标题栏。在Properties Window对话框中，输入一个新标题。标题中不能含有空格。

5. 在程序中添加一个Call对象。在UserFunction编辑窗口的对象菜单中，点击Generate Call。出现一个Call对象，其中包括与添加到UserFunction的对象对应的标题和端。

根据UserFunction的用途，您可能想从Generate菜单其中一个其它对象中生成UserFunction调用。

6. 把线连接到Call对象上的输入端和输出端。

7. 运行程序，测试UserFunction。

下例显示了打开UserFunction编辑窗口的一个程序。

另请参阅

构建UserFunction面板

在程序中调用UserFunction

在程序中使用多个对象创建UserFunction

编辑UserFunction

UserFunction

从表达式中调用UserFunction


迭代一条记录

Copyright (c) 1991-2007 Agilent Technologies, Inc.


To Iterate an Array

Copyright (c) 1991-2007 Agilent Technologies, Inc.


Express 欢迎

欢迎!

欢迎使用 Agilent VEE Pro 帮助。点击上面的 Contents 或 Index 按钮可以方便地找到您需要的内容。

现在 Agilent VEE Pro 还提供其他语言版本的帮助。您只需将安装目录下的vee.chm重命名为English.chm，再将您想要的本地化版本的帮助文件重命名为vee.chm就可以了。比如，将veeJapanese.chm重名为vee.chm。

Agilent VEE Pro 8.0 新增功能

在 Agilent VEE Pro 8.0中所修复的错误

Microsoft/MS-DOS/Windows/MS Windows/Windows NT/Excel/Word/.NET/Outlook/ActiveX/Visual Basic/Visual C# 是微软公司在美国和/或其他国家的商标或注册商标。

PostScript 是Adobe系统公司的商标。

MATLAB 是 MathWorks 公司的注册商标。.

National Instruments/NI/LabVIEW/和 SCXI/是国家半导体公司的注册商标。

PXI 是PXI系统联盟的注册商标。

IVI/and IVIplug&play 是IVI Foundation的注册商标。

Pentium Intel 公司在美国的注册商标。

Arial/和 Times New Roman/是Monotype公司在美国的注册商标。


版本信息

下面列出了 VEE 5., 6.0, 7.0, 和 7.5 的所有新功能和改进 。详细信息请选择下列连接。

Version 7.5

Version 7.0

Version 6.0
Version 5.0

Agilent VEE Pro 7.5 新功能

用VEE Pro 7.0 或 7.5 保存的程序，不能装入之前的 VEE 版本。

Excel Library Add-in

The Excel Library add-in 提供了 Microsoft Excel 和 VEE 之间的简单连接，无需再处理 ActiveX。使用菜单和可选设置，就可以直接使用所需的 Excel。详情请参阅 Help [image] How Do I [image] Use the VEE Excel Library。

For Each 语句

For Each 语句与 For Count 或 For Range 语句类似，它会对数组中的每一个元素执行那段语句。它可以支持多达10维的数组。详情请参阅 For Each。

NI 数据采集支持 (PXI 和 PCI)

提供对 NI 数据采集驱动器库的支持包括 NI-SWITCH, NI-DMM, NI-SCOPE, NI-DAQ, 和 NI-FGEN。这些支持包括对这些库中的函数及每个函数的联机帮助的访问。请参阅 To/From NIDAQ。

.NET Operation Builder

使用.NET Operation Builder 你可以很容易地选择 .NET 类型，然后再选择方法和属性建立 .NET 操作。该操作的形式与 To/From 事务框很类似。详情请参阅 .NET Operation Builder。

.NET Controls

The .NET Framework 提供了很多 System.Windows.Forms assembly 中的标准控件。使用.NET Controls 功能可以很容易地使用这些控件。选择 Device [image] Windows Forms Controls，就会出现一个控件的列表，你可以从中选择所需的控件添加到 VEE 程序中。注意下图所示只是控件列表的一部分。

装入所选仪器的范例程序

选择 Instrument Manager 中的一个仪器，然后点击 Load Sample，就会出现一个范例程序列表。选择一个范例后，该程序会被装入一个新的 VEE。 仪器也会自动配置好，只要按 Run 运行该范例就行了。

文档说明指示符

以前很难判断一个对象是否有说明。现在只要在 Default Preferences 使能文档说明指示符, a small red triangle appears in the upper right corner of objects that have a description.

IVI-COM 和 Instrument Manager

现在可以在 Instrument Manager 中选择，这使得为你的程序配置和使用 IVI-COM 驱动更为容易。

详细视图中的新的上下文菜单 Go To Panel

在面板视图的上下文菜单中已经有一个叫做 Go to Detail 的选项。现在，在详细视图的上下文菜单中新添加了一个叫做Go To Panel 的上下文菜单。

Agilent VEE Pro 7.0 新功能

Agilent VEE Pro 7.0 添加了许多新功能，比如， Property Grid 和 Microsoft Visual Studio .NET，使得 VEE Pro 7.0 存储格式很独特。用VEE Pro 7.0 保存的程序将无法装入先前的VEE版本中。

Undo/Redo

Undo 是用户最需要的功能之一。VEE 会在许多通用操作中提供对Undo 和 Redo 的支持。比如 ，剪切一条线，删除一个终端，从面板上删除对象， 粘贴对象，移动对象，和许多其他操作。

请参阅 Undo 和 Redo

对象属性操作

VEE 提供了一个与 Visual Basic 所提供的非常类似的属性编辑框 ，Properties Window， 使用它可以很容易地改变 VEE 对象的许多属性。这个操作很简单，而且大多数情况下，只需两次点击就可以完成操作。也可以同时多个对象进行操作It works when you select multiple objects (为两个不同的对象提供了一个交叉点。)。可以在详细视图和面板视图上操作。

请参阅 Properties (Object)

面板编辑特性

对面板上的视图的对象的编辑更为容易，因为添加了如下新功能：一个可见的网格，对象对齐功能，使用“橡皮圈”同时选择多个对象，创建面板时撤销某些通用操作，至于最上面，放在最下面，tab 排序，及许多其他功能。

在 Notepad 和 Description 中使用 Rich Text Format

现在编辑注释和描述更为容易了，使用 .NET 的强大功能，已经在注释和描述中实现了。此外，注释和描述还可以自动识别连接，并在一个浏览器中打开该连接。它们都支持 undo (CTRL-Z) 和 redo (CTRL-Y) 以及其它你所熟悉的快捷键。可以直接从一个.rtf文件或字处理文件中剪切和粘贴到注释和描述中。 最后，你开可以创建一个用户模板(缺省得模板是 templates\notepad.rtf 和 templates\description.rtf)。当你创建一个新对象时，这些模板将被打开。当然，如果你不需要模板，也可以把它们删除。

程序化地使用 .NET Assemblies

目前，已经有许多.NET 类，将来还会有更多。 有时，这些类提供的功能不能在VEE 中使用，或要求得比VEE 能提供的更多。 为了能使用这些有用的功能，VEE 7.0 提供了对 Microsoft .NET Framework Library 进行访问的手段。这些库包含功能强大的类，可以象在VEE 5.x 或更高版本中使用ActiveX 一样使用它们。请参阅 DotNet 范例目录下的范例，可以体会到 .NET Framework 带给 VEE 的新功能。

另一个新功能是可以导入namespace。从 Device > .NET Assembly References 菜单，选择 "Import namespaces after closing" ，选择一个或多个 .NET Assemblies，就会提示你选择一个或多个 namespace。也可以从 Device选择 Import .NET Namespace。这有什么用途呢？如果没有导入 namespace，你也许要输入 System.IO.File.Exists()。 如果有导入了 namespace ，调用就可以写成 File.Exists()。只是几下简单的点击就替代了许多地输入。

添加了一个新的类型转换函数 asClrType。该函数把一个VEE 数据类型转换为一个 .NET/CLR 数据类型。所有有效的 .NET/CLR 数据类型包括所有主要的数据类型 (Boolean, Byte, SByte, Int16, Int32, Uint32, Int64, Char, Double 和Single), Decimal, DataTime, 和 String。VEE很少需要使用 asClrType 因为 VEE 会自动完成 VEE 和 .NET 之间 的数据类型转换。有关使用 asClrType 的范例，请参阅 examples\dotnet\datetime.vee.

请参阅 Tell Me About > .NET Framework

基于 USB 的仪器的连接性

保持 VEE 对最新的 Agilent 仪器的支持以及保持 VEE 的竞争性是 Agilent 的一贯宗旨和目标。到目前为止，I/O 子系统已经提供了对多种仪器的支持，包括 Universal Serial Bus (USB)。另一个有关 USB 支持的属性是 USB aliases。 USB aliases 用 USB 地址替换了原来的长的和古怪的地址串。

基于 LAN 的仪器的连接性

就像 USB 连接性中所描述的，对仪器的连接变得更为标准。为了适应这些变化，VEE 还是增强了对基于 LAN 的连接支持。

对 IVI-COM 驱动器的使用

IVI-COM 是仪器兼容性的最新标准，由 IVI Foundation 创建。它鼓励仪器生产商生产可互相兼容的仪器。为了采用这些新标准，VEE 可以使用所有 Agilent IVI-COM 驱动程序和一些第三方的 IVI-COM 驱动程序。

通过查找 Primary Interop Assembly (PIA)，VEE 可以和 IVI-COM 驱动程序交互。assembly 是一个 .EXE 或 DLL 文件，它是 .NET 应用程序的基本模块。PIA 是一个 .NET assembly ，它由基于 COM 的组件的提供商提供。既然 IVI-COM 驱动程序是一个基于 COM 的组件， VEE 就会去查找它的 PIA。一旦找到后，VEE 就可以象使用其它.NET assembly 一样使用它了。

请参阅 What is IVI?

新的错误报告机制

Agilent 改变了 VEE 的错误报告机制。请利用这些有用的机制。详情请参阅 Minidumps。

Agilent VEE 6.0的新功能

欢迎加入 Agilent VEE 软件家族，6.0版。下面为所有新功能和改进功能的列表。详情请参阅 "新功能" 或 "改进功能。" 在 Help Contents 或 Index中可以找到所有功能的说明。

新功能

多媒体教程
集成的 MATLAB Script
Callable VEE ActiveX Automation Server
新的数据类型
VEE 6 执行模式
新函数
与程序一起保存 VEE I/O Configuration File
可编程的仪器属性
动态 I/O Automation 服务器
I/O 诊断特性
Instrument Manager 工具栏按钮
对 VXI 64-bit 内存访问的支持
对 PC Plug-In 卡的支持
添加了 Program Explorer 的子菜单
新的 RunTime 选项
在注册表中保存程序设置
MAPI Email 支持
对 Microsoft 智能鼠标轮的支持

Agilent VEE (Windows) 现在提供了多媒体教程来帮助你提高效率。下面是一些简单的步骤：

1. 把 VEE CD 放入安装VEE的相同的 CD 驱动器中。
2. 运行 VEE 并点击 Welcome Window 中的 "Tutorials" 按钮。
3. 学习列出的帮助教程。

集成的 MATLAB Script

Agilent VEE 6.0 提供了对 MATLAB 的支持。VEE 发布时带有一个 MATLAB Script 的运行时版本。在 Device 菜单下新增加了一个 MATLAB Script 对象。所有可用的 MATLAB 函数都会列在 VEE 的 Function & Object Browser。 (VEE 不提供HP-UX上对 MATLAB 的支持。)

Callable VEE ActiveX Automation 服务器

VEE 以前的版本提供了两种从其它开发环境执行 VEE 代码的途径：C-to-VEE API 和 Callable VEE ActiveX 控件。 Agilent VEE Pro 6.0 用 ActiveX Automation 服务器替换了旧的 ActiveX Control， 这样可以很容易地从其它编程环境比如Visual Basic 中访问 VEE 代码。(只对 Windows 平台提供 Callable VEE 服务器功能)

详情请参阅 VEE CallServer 帮助。

新的数据类型

UInt8, Int16, Real32, 和 Variant 都是 Agilent VEE 6.0 的新数据类型。这些数据类型会出现在所有执行模式和事务操作中，比如，WRITE TEXT INT16。然而，新事务操作在旧的执行模式下仍将保持原来的执行方式。比如，在 VEE 5 模式下， WRITE BINARY INT16 实际执行的是 WRITE BINARY INT32 而且不会把数据转换为Int16。在 VEE 6 模式下，WRITE BINARY INT16 就会把数据转换为 Int16 类型。请参阅有关 Execution Mode 的帮助文件，以了解 VEE Execution Mode 会怎样改变程序行为。

位置

Data [image] Constant [image] UInt8
Data [image] Constant [image] Int16
Data [image] Constant [image] Real32
Data [image] Allocate Array [image] UInt8
Data [image] Allocate Array [image] Int16
Data [image] Allocate Array [image] Real32

VEE 6 执行模式

Agilent VEE 6.0 在 Default Preference 对话框中新增了一个 VEE 6 执行模式。详情请参阅与 Execution Mode 有关的帮助文件。

新函数

VEE的新数据类型 (Int16, Real32, Variant, UInt8) 帮助扩展了与 ActiveX automation 服务器的兼容性。此外，新的函数也使对其它在 VEE 中没有对应的数据类型(比如，Currency 和 Date)的 ActiveX 数据类型的处理变得容易了。请参阅 Type Conversion 帮助文档。下述为新添加到 Agilent VEE 6.0 中的函数。

asVariant()
asVariantBool()
asVariantCurrency()
asVariantDate()
asVariantError()
asVariantEmpty()
asVariantNull()
baseName(pathStr)
commandLine()
dirName(pathStr)
inDaylightSavings()
isVariant()
isVariantBool()
isVariantCurrency()
isVariantDate()
isVariantError()
isVariantEmpty()
isVariantNull()
programName()
typeName(x)

与程序同时保存 VEE I/O 配置文件

VEE 6.0 允许将 I/O 配置文件嵌入到程序中，而不是使用 veeio 资源文件。如要把把配置信息嵌入到程序中，必须在 Save File 对话框中选择 “Save I/O configuration with program”选择框。更多有关保存 I/O 配置的信息，请参阅 Instrument Manager。

位置: File Save (保存一个新文件)

File Save As (Save As)

可编程仪器属性

Agilent VEE 6.0 新增了一个可以在运行时改变仪器参数(比如超时值)的功能。它不再使用到 Direct I/O 对象的控制输入，并且允许用户在运行时 Get/Set 一些仪器的参数。(虽然对控制输入的需求在减少，VEE仍将提供对控制输入的支持。) 可用的仪器及其属性列在 Function and Object Browser对话框中，formulas 也可以从这些列表中产生。

有关那些可用属性的信息，请参阅 GPIB Instrument Properties , GPIO Instrument Properties , Serial Instrument Properties , 和 VXI Instrument Properties。下面是两个范例:

examples\InstrumentIO\ProgrammableInstrProperty1.vee

examples\InstrumentIO\ProgrammableInstrProperty2.vee

动态 I/O Automation 服务器

在 VEE 之前的版本中， VEE I/O 配置文件中的仪器总线地址是静态的(固定的)。比如，6.0, Dynamic I/O Automation Server 允许你动态地查找和确定仪器。这就提供了更为高级的灵活性。例如，可以先找到所有仪器然后使用可编程仪器属性来设置 Direct I/O 对象。(只提供 Windows 上的动态 I/O Automation Server的支持)

请参阅 Dynamic I/O Automation Server。

新的 I/O 诊断功能

VEE 6.0 新增了一些 I/O 诊断功能。这些功能可以被分为错误预防，错误恢复，主要为仪器的检查。

错误预防

VEE 6.0 可以在 VEE 程序执行前就进行仪器检查。要检查仪器，请使用 File Default Preferences 并选择 PreRun 框中的 Check Instrument Addresses。详情请参阅e Default Preferences (在 "Debug" 组)。

错误恢复

当检测到一个I/O超时错误时，VEE 6.0 在 VEE Run Time Error 对话框中新增了一个 Troubleshooting 按钮。可诊断的 I/O 错误会导致 Error 811 - 超时或 一般 I/O 错误。

当因为一个不存在的接口或未占用的数据地址而引起 VEE 仪器访问失败，诊断功能就可以指明错误类型并提供一些改正错误的建议。

Instrument Manager 工具栏按钮

6.0 在工具栏上新加了一个 Instrument Manager 图标以便于更容易地访问 Instrument Manager。当然，仍然可以从菜单中打开 Instrument Manager 对话框。

支持对 VXI 64-bit 的内存访问

Agilent I/O 库 G.02.02 对一些 VXI 仪器的内存空间的访问提供 64-bit 的支持。它使得 VEE 程序可以以64-bit的单位来读/写内存。如果安装了 G.02.02 (或更高) 版本，就可以使用在Advanced Instrument Properties对话框中的 A24/A32 Space 栏来使能这种访问方式。

位置: I/O Instrument Manager

(选择一个 VXI 仪器) Instrument Properties Advanced... A24/A32 Space tab.

PC Plug-In 卡的支持

VEE 6.0 支持有ODAA (Open Data Acquisition Association)兼容软件驱动程序的 PC Plug-In 卡。要使用这些卡，必须先安装硬件和软件，然后根据生产商的指令配置子系统。在 Agilent VEE Instrument Manager 中，点击 Find Instruments 按钮。

如果正确配置了 PC Plug-In 卡，就可以在 Instrument Manager 中看到已配置好的子系统。选择所需的子系统，然后点击 PCPI Driver 按钮，会创建一个 Formula 对象。也可以先浏览属性和方法后，再从 Function & Object Browser 中创建一个 formula。

新的 Program Explorer 子菜单

Agilent VEE 6.0 为 Program Explorer 中的 Globals 新增了一个子菜单，叫做 "Generate," 它为包含 Global Variable 的操作，比如 Get, Set, 和 If/Then/Else 提供了方便的访问方式。

新 RunTime 选项

VEE Pro RunTime 有了一个新的选择 - enablewarnings。它可以让用户在 RunTime 时对程序进行检查以保证已经有了所有需要的文件。如果没有 -enablewarnings, RunTime 会把那些不重要的错误静静地忽略掉，比如 "Picture file is missing."之类的错误。

在注册表中保存程序设置

在 VEE 4.x 和 5.0, 某些信息 (比如，Toolbar，Status bar 是否可见，等) 是保存在一个缺省配置文件(vee.rc)。在 VEE 6.0中，这些设置就不再保存在 vee.rc 文件中了。

令外，Windows 上的之前版本的 VEE 把一些设置还保存在 v.ini 文件中。VEE 也不再在MS Windows上使用 v.ini 文件了。 所有这些设置都保存在每个用户的 Windows 注册表中的 HKEY_CURRENT_USER\Software\Agilent\VEE 之下。

在 HP-UX 上，这些信息保存在一个名为 .vee-settings 的文件中，它位于用户的 $HOME 目录下。(这个文件以前叫做 .vee-history。)

保存这些程序设置无需作任何操作，因为这些设置会在 VEE 退出时自动保存。下次打开 VEE 时，它会在同样的地方，以同样的大小显示，而且用户接口选项也保持不变。

MAPI Email 的支持

VEE 6.0 新增了一个 "Send Program by Email" 文件菜单项，用于有MAPI profile 的系统。对 HP-UX 系统和没有MAPI profile 的 PCs, VEE 不支持这项功能。

位置: File Send Program by Email

对 Microsoft 智能鼠标轮的支持

VEE 6.0 提供了对 Microsoft 智能鼠标轮的支持。如使用的是 Microsoft 智能鼠标或其兼容产品，滚动鼠标轮可以使视图上下滚动。

改进功能

改进的安装程序
从 Variant 到 VEE 数据类型的转换。改进的数组操作。
改进的 Automation Server 清理
更多的图形文件的支持
改进的 XY Marker 属性
智能创建事务对象的端
Get 和 Set Formula 的按钮
更新的函数
改进的 PC Execute 对象
Instrument Manager 更新
方便地改变对象的大小
更多的键盘快捷键
改进的 Sequence Line 颜色
配置存储选项

改进的安装程序

新的安装程序可以使你完成一些用旧的安装程序无法做到的一些事情。安装完 VEE 后，你可以从控制面板上先选择 "Add/Remove Program"，然后选择 Agilent VEE。你会注意到一些新功能。不仅可以删除 Agilent VEE，而且可以修改现有的安装。这样，你就可以安装一些在开始时不需要的组件，比如, 非 HP 的面板驱动程序。你也可以删除一个不再使用的组件。修复共能可以修复已安装的 Agilent VEE。

从 Variant 到 VEE 数据类型的转换。改进的数组操作

当从 ActiveX Automation Server (比如 Excel) 或 ActiveX 控件返回数据时, VEE 必须把这些数据转换为 VEE 数据类型。 在 VEE 5.0, Variant 的数组被转换为 VEE 的记录。 在 VEE 6.0 (在 VEE 6 执行模式下),Variant 的数组会被转换为a VEE 数组只要其中的所有元素具有相同的数据类型。(如果为混合的数据类型，与 VEE 5.0 没有区别。)

如果所有Variant 的源 Safearray 中的所有元素的数据类型相同，从 Variant 数据类型到 VEE 数组数据类型的转换如下。(注意：这个功能只有在 VEE 6 执行模式下才有效。)

Variant 数组成员的类型 VEE 6.0 数据类型

VT_UI1 UInt8
VT_BOOL Int32
VT_I2 Int16
VT_UI2 Int16
VT_I4 Int32
VT_UI4 Int32
VT_R4 Real32
VT_R8 Real64
VT_DATE Real64
VT_CY Real64
VT_BSTR Text
VT_DISPATCH Object

改进的 Automation Server 清理

你也许已经注意到了，当一个 VEE 程序结束时，它使用的 Automation Server (比如 Excel), 有时不会自动退出。VEE 6.0 改进了对 ActiveX references 的处理并且会释放所有不再需要的指针。有关影响 ActiveX references 清理的编程技巧请参阅 CreateObject 帮助文档。

更多的图形文件的支持

VEE 6.0 增加了在 Windows 95/98/NT 上对 JPG, WMF, 和 PNG 格式文件的只读功能，可以读取更多的 BMP 和 GIF 格式的文件了。请参阅 Picture 对象的帮助文档。

改进的 XY Marker 属性

在 VEE 6.0 中可以在任何表达式中以值的形式得到 Marker 的位置。有关该功能的详细信息，请参阅 XY Display 帮助文档中的 "Programmatically Setting and Reading Marker Values" 部分。一些 XY Displays 的例子是 XY Trace, Magnitude Spectrum, 和 Polar Plot。也可以参阅： To Get and Set Marker Properties。

智能创建事务对象的端

基于事务的对象现在可以根据事务中端的名字来自动产生输入/输出端。这个功能可以区分局部和全局变量，所以当是一个局部和全局变量名时，不会添加输入/输出端。

Get 和 Set Formula 的按钮

现在，Function & Object Browser 支持为 ActiveX, VEE 对象, 及仪器组中的属性创建两种类型的 formulas。点击不同的按钮可以创建 "Get Property" formula 或 "Set Property" formula。

更新的函数

Agilent VEE 6.0 更新了一下函数：

whichOS() 增加了 Windows 98 和 Windows 2000。

createObject() 增加了可选择的主机名参数。

改进的 PC Execute 对象

现在 PC Execute 对象可以支持从一个执行程序中返回一个终止代码，也可以使用注册的后缀运行相关的程序。请参阅 Execute Program (PC) 帮助文档。

Instrument Manager 更新

VEE 6.0 在 Instrument Manager 中增加了一个 "Configure Drivers" 按钮，它简化了对仪器驱动程序的配置。只需简单的一个点击，不仅可以选择单个仪器，仪器接口卡，还可以选择整个 I/O 配置，及配置驱动程序。更多详情请参阅 Instrument Manager 帮助文档。

方便地改变对象的大小

在 Agilent VEE 6.0 中，可以方便地通过拖动对象的四个角中的一个来改变对象的大小。不论在面板视图还是在详细视图中都可以改变对象的大小。

缺省状态下，对对象大小的改变限制在网格上进行，不论是在面板视图还是在详细视图中。把鼠标移动到对象的角上，当鼠标变为一个双箭头图标时，单击鼠标右键拖动鼠标就可以任意改变对象的大小了。 如果按下shift键并单击鼠标右键拖动鼠标就可以按网格改变对象的大小了。网格大小在详细视图中固定为 10 pixels，在面板视图中缺省为也为 10 pixels。

在 VEE 5.0 中，在面板视图中只能在网格上进行大小调整，而在详细视图中只能进行连续调整。

更多的键盘快捷键

为调试增加了一些新的功能键：

F5 为 "Run" 或 Ctrl-G

F10 为 "Step Over"

F11 为 "Step Into"

Shift-F11 为 "Step Out"

详细信息请参阅 Using Keyboard Shortcuts。

改进的 Sequence Line 颜色

在 Agilent VEE 6.0 中，所有连接到 sequence 输入端的线都是 1 pixel 宽和浅灰色，这样可以使那些真正传输数据的线更为醒目。(许多 VEE 程序的线都是指定顺序，而不是数据。)

配置存储选项

在 Agilent VEE 6.0 中, "Save colors/fonts with program" 和 "Save Device Configuration" 已经从 "Default Preferences" 对话框中删除了。下面的选项则移到了 "Save File" 对话框中：

选项

[ ] Save colors and fonts with program

[ ] Save I/O configuration with program

参阅 Save As 。

位置: File Save As?/p>

HP VEE 5.0 的新功能

感谢您使用HP VEE。这个版本中的许多功能是新开发的或从先前的版本修改而来，HP VEE Help的这个部分就是为您讲述这些特点和新功能的。浏览以下的条目可以看到新功能的总结和与现有系统的兼容问题处理的介绍。点击这些连接可以得到更多关于这些新功能使用的介绍。而有关这些新功能和所有HP VEE中现有功能的详细信息，请看HP VEE Help。

HP VEE的Web站点上有支持信息，仪器驱动程序的下载指导和许多其它对用户有帮助的资源。您可以通过 Help => HP VEE 的窗口链接到我们的网站。

注释

HP VEE 3.x 之后保存文件的格式发生了变化。如果您的 HP VEE 3.x 的程序在 HP VEE 4.0 或更高版本的系统中保存过，您将不能再在 HP VEE 3.x 或更早的版本中打开了。

在 HP VEE 4.x 和 HP VEE 5.0 中保存文件的格式是相同的。然而，如果您的程序在两个版本之间移动过，这个程序可能无法正常进行。举例来说，如果您在 HP VEE 5.0 打开 HP VEE 4.x 的程序并使用新的功能，然后保存这个程序，您在 HP VEE 4. x还可以打开这个程序，但是，新的功能将被删除，还有可能损坏整个程序。

ActiveX Support HP VEE for Windows 支持在装有 Windows95/NT4.0 或更新版本的电脑上的ActiveX automation 和控件（不支持Unix）。

ActiveX automation 让您像一个自动控制器一样使用HP VEE。这让您可以控制其它的诸如 Microsoft Word、Execl 以及Access 等的应用程序，比如发送数据到应用程序以产生报告的动作。对于自适应的应用程序，这个特性大大超越了我们现存的应用程序控制解决方案，例如动态数据交换（DDE）。

ActiveX controls，适用于各种供应商，利用ActiveX的自动属性、方法和事件提供特定域服务而扩展HP VEE的功能。大多数ActiveX控制也提供一个用户界面，让您操纵一个类似日历的控制来模拟基于日历日期的事件。

监控HP VEE的Web包括一个内置的Web服务器，用来让您通过一个使用标准HTTP协议的远程Web浏览器监视一个HP VEE的应用并排除可能出现的故障。使用这个功能您可以

· 确定并排除一个运行于factory floor上的系统的故障。

· 通过HP VEE程序检索信息。

· 监视一个测试系统

HP VEE 的对象和功能

XY显示包含一些增强的功能让您定义缩放比例标签和占用的空间，以及设定数字格式。

Knob, Slider 和 Indicator 对象包含增强的功能让您选择对数的或线性的缩放比例，设定数字格式，以及控制tic mark标识和它们的空间。

Formula 对象现在可以接受多行的数值表达式。当您输入一个或多个表达式的时候，您可以每行输入一个表达式，或把表达式分割放在多个行中。

UserFunction 菜单选择让您自动生成从对象和函数中对 UserFunction 的调用，下列函数经常被用于调用 UserFunction ：Call, Formula, If/Then/Else, showPanel(), and hidePanel()。

SavePanelImage 功能允许按程序复制 HP VEE UserFunction 面板到一个文件，让您在报告中动态嵌入HP VEE 面板。

开发环境

HP VEE开发环境包含以下一些变化

· 在缺省的 Default Preferences 对话框中执行模式改为了兼容模式；模式包括VEE3，VEE4和标准。

· 选择功能的对话框就是函数及对象浏览器。在UNIX中是函数浏览器。

· 扩展的剪贴板支持让您从HP VEE复制对象位图给其它的Windows应用。

· .vxe二进制文件更为精简，RunTime 程序安全性更高。

· 对在线帮助信息的访问更为快捷。

Instrument Manager

Instrument Manager 对话框上的按钮标签改变了。Configuration 区域按钮的标签会随着 Instrument List 中选择的不同而动态地发生变化。这样会为每个选项提供更有针对性的配置信息。详细信息请参阅 Instrument Manager。

ActiveX 的支持

HP VEE for Windows 在运行 Windows 95/NT 4.0 或更高版本的PC上支持 ActiveX automation 和 controls (不支持 UNIX)。

注释

要使用 ActiveX 支持，HP VEE 必须在 Default Preferences 对话框中的 General 栏中被设置为 Standard 模式。该模式为所有新程序的缺省模式。请参阅 Development Environment 中 "Execution Mode" 部分，以获得更多关于在非 Standard 模式下改变菜单，对象和函数的信息。

ActiveX Automation 可以让你将 HP VEE 作为一个 Automation 控制器。可以控制其它应用，比如 Microsoft Word, Excel, 和 Access 以完成诸如发送数据以产生报表的操作。这将完全取代当前的对具有automation能力的应用的控制解决方案和动态数据交换。

可以从各种供货商出得到的 ActiveX Controls 将扩展 HP VEE 的功能，因为可以通过 ActiveX automation 属性，方法和事件提供针对域的服务。 大部分 ActiveX controls 也可以提供用户接口以便操纵一个控件，比如操纵 Calendar 根据日历数据开始一个事件。

推荐阅读

Microsoft Office 97 Visual Basic Programmer's Guide
Microsoft Press, 1997
ISBN 1-57231-340-4

HP VEE 使用 Microsoft Visual Basic 的标准实现对 ActiveX 的支持。如果不熟悉 ActiveX 技术，可以复习书中有关Object Models 和 ActiveX Controls 的章节。对这些概念的理解会有助于使用 HP VEE 的 ActiveX 功能。

阅读 HP VEE Advanced Programming Techniques 手册中的 "Using ActiveX Automation Objects and Controls" 可以学习如何在 HP VEE 中使用 ActiveX。可以在 \examples 目录下发现许多新的范例程序。从 HP VEE 窗口中打开这些程序，请使用 Help => Open Example。程序位于 \ActiveXAutomation and \ActiveXControls 目录下。

Web 监控

HP VEE 有一个内置的 Web 服务器，它允许用户使用标准的 HTTP 协议远程地监视和调试 HP VEE 应用程序。可以使用下面的功能：

  • 调试一个在远程工厂运行的系统。

  • 从HP VEE 程序中提取信息。

  • 监控一个测试系统。

在 Default Preferences 对话框中的 Web Server 栏中可以使能 Web 服务器。要使用这个功能，HP VEE 必须运行在一台连接到网络的系统上。要从 Web 浏览器上远程监控程序，必须知道系统的主机名。详情请参阅 Default Preferences。

HP VEE对象和函数

XY Display 包括一些增强功能，这些增强功能用于定义坐标标签和空间，以及设置数字格式。在属性对话框可以看到这些变化。这儿只是这些变化的摘要。如果需要详细地了解这些变化，则需要在帮助中选择display对象，比如XY Trace。每个display对象可能包含了一些不同的设置。

  • 我们可以在属性对话框的Colors栏中设置单个Display对象的XY显示背景色。改变栏中的显示区域的颜色会覆盖Default Preferences中的默认颜色。

  • 显示对象的详细视图中的有关轨迹和坐标的信息已经发生了变化。轨迹和坐标的可编辑的域变成了平的按钮。坐标的主要点加上了标签，而且不能在对象的详细视图中编辑最大/最小值。

要编辑属性，点击对象详细视图上的一个轨迹或坐标的名字会弹出一个编辑框。 或双击对象的标题栏使用 Properties 对话框。 你会发现轨迹和坐标不在 General 栏中了，但增加了两个新栏 Traces 和 Scales。

轨迹的属性从 HP VEE 4.x 开始就没有改变过。

Scales 的属性改变了。现在，你只能与其它属性一起才能改变最大/最小值，两个新增的属性是 - Label Spacing 和 Automatic Scaling。 每个坐标的属性都可以单独改变。(包括新增的右坐标)

如要在主要的标志点上设置标签空间， 点击 Label Spacing 旁的下箭头并选择你的选项。对于新程序，X 坐标的默认值为每个主要的Tic，X 坐标的默认值为每两个 Tic。对于老程序, 缺省的为 Only Max & Min 以保持与旧的显示对象相类似的外观。

可以在显示对象 Properties 对话框中的的 Fonts 栏中为标签单独设置与对象不同的字体。在该栏中改变坐标标签的字体会覆盖 Default Preferences 中的缺省设置。标签的颜色与对象文本的颜色相同，可以在 Default Preferences 对话框或对象的 Properties 对话框中设置。

Autoscale 属性也发生了变化， 增加了一个 Automatic Scaling 模式。显示对象详细视图上的 Auto Scale 按钮是可选的。 可以在 Properties 对话框中的 General 栏的 Layout 区中将其设为可见或隐藏。可以同时设置 Automatic Scaling 模式和 X 和 Y-Main 坐标的其他属性。当 Automatic Scaling 为 On 时，坐标会自动 "auto scales" 输入的数据。其它 right scales (Y2 和 Y3) 与 Y-Main 保持一致。这种模式不建议用于 Strip Chart。

对于有显示对象的老程序，Automatic Scaling 是关闭的且 Auto Scale 按钮会出现在对象的详细视图中以保持与旧式显示对象外观的类似。加入老程序的新的显示对象使用缺省设置，X 和 Y-Main 设为 Automatic Scaling 模式打开，但没有 Auto Scale 按钮。

有关 Auto Scale X, Auto Scale Y, 和 Auto Scale 的控制输入保持不变。Scales 的控制输入记录可以接受一个新的被称为 AutoScale 的文本域，它的值可以为 On 或 Off。这样就可以动态地访问 Automatic Scaling 了。这个功能不支持 Strip Chart。

  • 可以在 Properties 对话框中的 Number 栏下为每个坐标设置数字格式。

Marker 值的格式与它所在的坐标的数字格式相同。X 和 Y 坐标的 Delta Markers 使用在 Default Preferences 对话框中的缺省数字格式。但是，如果 X 和 Y 坐标 Marker1 和 Marker2 使用时戳格式，Delta Marker 就是用 Delta Time 格式。

  • General 栏中的 Layout 区域也发生了改变。新的选项提供了更大的灵活性来控制对象详细视图的外观和安全性：

    • 显示 Traces Legend 会把 Trace 编辑按钮打开和关闭。

    • 显示 Scales Legend 会把 X 和 Y 坐标的编辑按钮打开和关闭。

    • 显示 Scale Labels 会把坐标标签打开和关闭。

    • 显示 Scroll Bars 会把滚动条打开和关闭。

    • 显示 Auto Scale 按钮会把 Auto Scale 按钮打开和关闭。

    • 使能 Trace/Scale Editing 将控制 Trace 和 Scales 编辑按钮的功能。

Knob, Slider 和 Indicator 对象

包括一些可以进行对数和线性比例缩放，设置数字格式，和控制tic mark的标记和间隔的改进。这些改进会影响 Integer/Real Knob 和 Slider, Meter, Thermometer, Fill Bar 及 Tank 对象。Color Alarm 只增加了数字格式的控制。所有这些变化都会出现在每个对象的Properties 对话框中。

· 在 General栏上的 Scale 区域中，在线性和对数缩放比例之间进行选择。对数比例缩放不支持Integer Knob/Slider 对象。

· 在 General栏上的 Scale 区域中为tic mark设置标签间隔。点击Label Spacing旁的下箭头选择所需的选项。

· 可以把 Knob, Thermometer, Fill Bar 和 Tank 对象的 tic marks 的标签设置为 on 和 off。以前这个功能只能支持 Slider 和 Meter 对象。

· 为Thermometer, Fill Bar, Tank, 和 Color Alarm 的 Properties 对话框增加了一个数字格式栏。现在，这些对象，比如 Knob, Slider, 和 Meter, 将会以当前的数字格式显示它们的最大/最小值和tic 标签。

· 详细信息请参阅 Integer KnobInteger_Knob, Integer SliderInteger_Slid, Real KnobReal_Knob, Real SliderReal_Slider, Fill BarFill_Bar, MeterMeter, TankTank, ThermometerThermo.

Formula 对象可以接受多行的表达式。当输入长的表达式时这个功能可以把 Formula 对象在水平和垂直方向扩展。老程序中的Formula 对象在这个版本的 HP VEE 中打开后，会具有这些新功能。当你输入一个或多个表达式时，可用一行一个表达式，也可以把一个或多个表达式分在多行中，就像下述的范例一样。

(a == someLongExpr

? "return someLongTrue"

: "return someLongFalse"

)

· 每行结束出都加一个回车符 (\r)；但它是不可见的。当一个 Formula 对象失去焦点时，对表达式进行语法检查以确定它的有效性。下面两个例子中，第一个表达式会引起语法错误，因为看起来一个变量名被分开了。最后的错误信息指向错误位置：

2 * A +

3 - foo

bar - snafu

下一个例子在 foo后加了一个操作符，改正了这个问题：

2 * A +

3 - foo -

bar - snafu

· Formula 对象的Control 输入可以接受 Array 或 Scalar Text。

· 为了更易于编辑多行表达式，Formula 中添加了编辑功能。

· 详细信息请参阅 FormulaFormula_Object>main。

在 UserFunction 菜单中，Generate 菜单项是层叠的，这主要是为了包括更多的选项以便可以从对象和最常用于调用 UserFunctions的函数，比如 Call, Formula, If/Then/Else, showPanel(), 和 hidePanel() 中自动产生对UserFunctions 的调用。以前，只有 Call 对象可以自动产生。其它的菜单选项可以用于产生从其他对象到 UserFunction 的调用，比如用If/Then/Else 对象引用一个Boolean 函数，或使用 showPanel() 和 hidePanel() 控制程序的外观。其它 Generate 菜单项与此相同。

· 在 Program Explorer, 在一个UserFunction 的名字上点击鼠标右键。

· 在一个 UserFunction 窗口中，使用对象菜单。

· 详情请参阅 UserFunctionUser_Function>main.

savePanelImage() 函数动态地把一个 HP VEE UserFunction 面板复制到一个文件中。这使你可以动态地把一个HP VEE UserFunction 面板加入一个报告。UserObject 面板不支持这个功能。savePanelImage() (Device => Function & Object Browser) 位于面板类的内置函数。Formula 对象执行函数调用。savePanelImage()支持的图形格式有 Windows Bitmap (Windows) 和 JPEG (Windows 和 UNIX)。详细信息请参阅 savePanelImage()。

开发环境

执行模式已经在 Default Preferences 对话框的 General 栏中改为 Compatibility Mode。支持的模式有 Standard, VEE 4, VEE 3。 令外，Disable Debug Features 选择框移到了 Debug 区域。VEE 4 和 VEE 3 模式的兼容性保持在 HP VEE 4.x 中的定义。下面将会提到，一些微小的改变不会影响到以前的程序，只要它们在最初的运行模式下执行。

这个新的 Standard 模式是 VEE 4 模式的超集，它引入了一些显著的改变将影响到程序的兼容性。大部分的变化都可以使用ActiveX automation 功能，它们也许会hey may impact your programming techniques if you use any of the features described below - even if you do not use ActiveX. For information about ActiveX automation and controls, see ActiveX Support.

新的 HP VEE 5.0 程序会在 Standard 模式下打开。如果需要，旧的程序需要在 Default Preferences 对话框中手动地改我为新模式。当一个程序改为 Standard 模式，会发生错误，和以一个不再允许的事情的列表。必须修改好这些问题后，HP VEE 才能接受被转换为Standard 模式。HP VEE 不会自己检查和修复错误。下面列出了 Standard 模式兼容性改变的概述。

注释

有关Compatibility 模式的详细信息，可以参阅HP VEE Advanced Programming Techniques手册的附录 "Using the Compatibility Mode" 。如需把 HP VEE 3.x 程序改为 Standard 模式，就必须先确保它们可以在 VEE 4 模式下正确执行，然后再把它们变为Standard 模式。

Standard 模式兼容性的变化包括：

· HP VEE 是编译的。

· 在 Formula 对象中:

· SET 和 ByRef 是用于ActiveX automation 的关键字，不能用语终端的名称。

· 为支持 ActiveX automation 提供了对新语法结构的支持，比如，excel.worksheets(1).cells(1,2) = 2。

· 输入的没有逗号的数组，比如 [1 2 3]，会在 Formula失去焦点时产生语法错误。

· 象 1 一样的值会返回 Integer, 1.0 返回一个 Real。 先前，都只返回一个 Real。

· 为ActiveX automation 提供了两个内置的新函数： CreateObject() 和 GetObject()。

· 在 PreRun 打开时( Default Preferences 中) 删除 Variables 变量。引用 ActiveX 的全局变量不会被删除。

· Declare Variable 对象新增了一个叫做Object for ActiveX automation 的变量类型。

· 对象变量类型可以用于 Input Terminals 作为返回类型，虽然它不能被强制。

· Device 菜单有了新的菜单项：ActiveX Automation References，ActiveX Control References，和 ActiveX Controls。

· 全局 namespace 规则也发生了改变：

· 局部 UserFunctions, Library 名, 全局的已声明的和未声明的变量，和local to library 的已声明的和未声明的变量都位于同一个namespace, 且必须使用唯一的名字。所以 UserFunction 和声明的变量不能同名。

· 在一个库中，局部 UserFunctions 和 local-to-library 声明的变量必须位于同一个namespace, 且必须使用唯一的名字。

· To String 和 From String对象中的 READ TEXT 事务也改变了如何在使用TOKEN format with EXCLUDE CHARS时读取指针行为。 现在，在 READ TEXT 事务后，指针前行到下一个可接受的字符，准备下一个事务。在VEE 3 和 VEE 4 模式，指针会停留在不接受的字符上。

· 在 VEE 3 和 VEE 4 模式中，一个带有EXECUTE REWIND 事务的 To File 或 From File 对象，与另一个使用 To DataSet 或 From DataSet 的对象如果访问同一个数据文件，会导致一些不可知的交叉，数据回被写错。在Standard 模式，这些不确定的交叉已经修复好 ，所以数据可以准确地写入文件。

对所有模式都发生的改变：

· 当打开一个老程序时，根据保存的不同，它们可能在 VEE 3 或 VEE 4 模式。有句法错误的表达式，比如[1 2 3] (没有逗号) 会在程序重新装入时被重新进行句法分析和重新修改。

· 可以接受 Formula 对象的语法，比如 lib.func(a,b) = RightHandExpr。

这种语法分析在各个模式下都是正确的，但只有在 Standard 模式下执行是正确的。( VEE 4 和 VEE 3在运行时是错误的。)这样可以在修改模式时修复带导入库的全局 namespace 问题。.

· UNIX 程序可以放在 Standard 模式下。 这会像上面描述的那样影响全局 namespace 。然而，ActiveX 菜单项永远不会出现，因为它们不在UNIX 上支持该功能。一个调用支持ActiveX 的HP VEE 函数，比如，CreateObject()，的程序会发生错误。 Standard 模式程序带声明变量对象变量类型会装入 UNIX, 但无法正常运行。

选择函数

这个对话窗口被重新命名为Function & Object Browser(设备菜单), 它包含对ActiveX自动化和控件的支持以及对已经存在的数学函数和操作的支持。在NNIX 里面，这个对话窗口是一个函数浏览器，如果想得到更多的关于函数和对象，请参阅 Function and Object Browser 和VEE高级编程技术里面的“Using ActiveX Objects and Controls”。

支持剪切板

用户可以把Vee里面的对象剪切/拷贝/粘贴到支持图像处理的Windows 程序。在以前只支持从Vee程序之间互相拷贝。选择你想拷贝和剪切的对象，然后使用HP VEE Edit菜单或工具条粘贴到其他支持图像处理的应用程序里面，这个操作同样支持用户对象和用户函数。

创建保密的运行程序

这个是对于.vxe文件的。为了让你的程序更小和更好的保密性，你可以通过File-> Save Secured RunTime Version来把程序保存成一个二进制的运行时版本。在缺省设置里面，缺省的运行时文件的设置是保存成二进制的格式，用户可以改成ASCII格式。为了更安全，.vxe文件不能被合并到其他的程序里面，无论这个.vxe程序是否被保存成二进制格式。HP VEE 仍将导入的库保存为.vxe 文件。

HP VEE 帮助

提供了更为便捷的信息访问方法：

  • 当 HP VEE 运行时，使用 F1 键可以很方便地打开对程序中某个对象的帮助。在详细视图中，点击 F1 可以得到最后选择的那个对象的帮助文档。 否则，HP VEE Help Contents 窗口会出现。

  • Help 菜单中包括了许多有用的网站的连接。(只对 Windows)

  • 新的 HP VEE Help Contents 窗口中包含了到 HP VEE 范例程序的连接和说明。概括了所有与 HP VEE 一起发布的范例程序，点击连接可以直接从帮助中打开范例程序。


概述

在VEE中，可以通过多种方式控制仪器：

• Direct I/O对象允许通过支持的许多接口发送命令，检索数据。

• VXIplug&play驱程可以用来调用C函数控制仪器。安捷伦科技及其它厂商在其支持的仪器提供了这些驱程。

• NI Data Acquisition库可以用来控制连接到National Instruments PXI/PCI卡的仪器，另外还提供了某些SCXI支持。

• “Panel”驱程提供了一个简单的用户界面(或“前面板”)，从计算机屏幕上控制仪器。在改变VEE面板驱程中的参数时，会改变仪器的相应状态。安捷伦科技在VEE中提供了面板驱程，涵盖了来自不同厂商的450多种仪器。

• 可以导入I/O库，控制PC插件电路板，然后从使用Call对象的库中调用函数。这些库通常作为动态链接库(DLLs)提供。

面板驱程

Agilent VEE为不同仪器厂商提供了450多种面板驱程。面板驱程的工作方式是在VEE中使用显示画面，来控制相应物理仪器中的设置。面板驱程提供了最大的简便易用性，节约了大多数开发时间。下图是面板驱程范例。

带有I/O库的PC插件电路板

I/O库由PC插件电路板厂商提供，其通常作为PC插件电路板的动态链接库(或DLL)提供。通过使用Call对象调用库函数，VEE可以控制PC插件电路板。下图显示了在VEE中提供函数的Import Library对象范例。

NI Data Acquisition库

可以从VEE内部访问National Instruments的Data Acquisition库。支持的库包括niDMM, niSWITCH, niFGEN, niSCOPE, niDQAmx和niDAQ。下图提供了VEE中的niDMM ConfigureMeasurement事务范例。

VXIplug&play驱程

VXIplug&play驱程由仪器厂商或安捷伦科技提供。(如需安捷伦科技提供的VXIplug&play驱程列表，请参阅VEE资料或 VXIplug&play介绍。其它VXIplug&play驱程请与仪器厂商联系。) 通过调用驱程，VEE可以使用VXIplug&play驱程控制仪器。下图是从VEE调用VXIplug&play驱程的范例。

其它I/O功能

1 利用VEE在I/O [image] Advanced I/O子菜单中I/O的全部功能，包括：Interface Operations, Instrument Event, Interface Event和 MultiInstrument Direct I/O。

2 可以显示、打印或存储总线活动，使用I/O菜单中的Bus I/O Monitor调试系统。

3 VEE包括一个ActiveX Automation服务器，以程序化方式查找仪器。

4 还可以以程序化方式在运行时改变I/O配置。

另请参阅

配置仪器，使用面板驱动程序，使用Direct I/O，使用PC插件电路板，在VEE中使用NI Data Acquisition，IVI-COM和Instrument Manager，使用VXIplug&play驱动程序，在VEE中使用ActiveX Automation


Agilent VEE中的ActiveX Automation

ActiveX Automation指VEE能够作为Automation Server应用的Automation Controller，如MS Excel、MS Word和MS Access。下面的练习重点是在实践中应用微软ActiveX技术，生成测试和测量程序报告。

另请参阅

实验6-1: 把Agilent VEE数据发送到MS Excel

实验6-2: 在MS Excel模板中创建Agilent VEE

实验6-3: 使用MS Word编制Agilent VEE报告


支持的I/O接口

下表列出了支持的I/O接口。

平台 | 支持的I/O接口
Windows 2000和Windows XP | GPIB, 串行, GPIO, USB, TCP/IP, NIDAQ, VXI


Code Completion

使用Code Completion

Code Completion可以通过Code Completion窗口(如下面所示)迅速访问有效的成员、属性或变量。

触发Code Completion

  • 自动触发Code Completion

  1. 在Formula框中输入内容时，将自动出现Code Completion窗口，列出提供的所有选项及简要描述，这称为Instant Completion。

Instant Completion可用的选项包括：

        • 变量(Global, Local to Context, Local to Library)

        • VEE常数

        • 端(包括当前Formula对象的输入端和输出端。不包括输出端"Result"。)

        • 内置函数

        • .NET名字空间和类

        • COM常数

  2. 在Formula对象中对象名称后输入一个 "."时(如OK Button, Toggle控制, .NET对象, COM对象等VEE对象)，会自动出现一个Code Completion窗口，列出该对象的所有成员或属性。下面是Code Completion窗口范例。arraylist是一个.NET对象。Code Completion窗口中列出了arraylist 的所有成员。

在设置VEE对象(如OK按钮, Label等等)的Declared Name属性时，Code Completion窗口中还会列出该VEE对象的Properties。如需与Declared Name属性有关的详细信息，请参阅 程序属性。

  3. 在使用'='为指明对象设置颜色属性时，或使用'=?为预先定义为COM常数的COM对象设置值时，或使用'=?为枚举类型的.NET对象属性设置值时，在输入'='后会出现Code Completion窗口，列出可用的所有选项。在下图中，XYSin是一个指明对象。Code Completion窗口中列出了所有属性。

在下图中，g_ActiveMovie是一个COM对象。其属性Appearance是一个COM常数。在输入'='后出现Code Completion窗口。

在下图中，Button是一个.NET对象。其属性Anchor的类型是枚举类型。在输入'='后出现 Code Completion窗口及名字空间。

  • 手动触发Code Completion

使用公式字段中的编辑光标，按"Ctrl + SPACE"触发Code Completion窗口。Code Completion窗口列出所有可用的选项。如果目前没有可用的选项，那么不会出现Code Completion窗口。在下图中，如果按"Ctrl + SPACE"，那么会出现Code Completion窗口。

如果在输入变量名称或名字空间名称过程中触发Code Completion窗口，那么将列出所有可用的变量和.NET名字空间。

结束代码

在显示Code Completion窗口时，双击选项、按Tab键或在选中该选项时按Enter键，将选中结束表达式的选项。也可以在选项中手动输入内容。在这种情况下，输入时将高亮度显示最近的匹配选项。在下图中，在输入Con时，高亮度显示Contains。在选中选项时，将显示选项的简要描述。

.

备注

在默认情况下启动VEE Code Completion。使用General栏下的File => Default Preferences会禁用VEE Code Completion。

在Default Preferences对话框中，还可以对内置函数或COM Constants启动或禁用Code Completion支持。

另请参阅

Code Insight


Code Insight

在Formula对象中输入函数时，Code Insight显示一个Code Insight窗口，其中包含完整的函数原型，包括各个参数。还会为嵌套函数显示Code Insight窗口。

触发Code Insight

在Formula对象中函数名称(如 VEE用户函数、 .NET方法等的名称)后面输入一个开始的圆括号时，会出现一个Code Insight窗口(即黄色的工具提示)。Code Insight窗口中将列出完整的函数原型，包括返回值的圆括号。Code Insight窗口的细节程度会有所不同，如只有在.NET组件带有自己的XML文档文件时，才会出现.NET函数的详细描述信息。当前参数用黑体显示。参阅下图：

Code Insight窗口中显示"2 of 9 METHOD Int32 IndexOf (System.Char value)"。

'2 of 9'表示有9种方法拥有相同的名称"IndexOf"，这是第二种方法。如果想查看所有这9种方法，在Code Insight窗口中按UP或Down箭头。Int32是返回值，这种方法中有一个参数。

隐去Code Insight窗口

在显示Code Insight窗口时，在任何时候按ESC，或者输入结束圆括号，可以隐去Code Insight窗口。在逗号上或在最左面的开始圆括号上移动光标，也可以隐去这个窗口。

如果在函数完成前隐去Code Insight窗口，希望再次看到这个窗口，那么按CTRL+SHIFT+SPACE。

备注

在默认情况下会启动Code Insight功能。可以在General 一栏下的File [image] Default Preferences中禁用这一功能。

Code Insight支持的对象

  • .NET对象的方法

  • 局部用户函数

  • 导入的用户函数

  • 内置函数

  • 导入的远程函数

  • 导入的汇编函数

  • COM对象

另请参阅

Code Completion


VEE中的关键字和常数

关键字

Keywords are reserved by Agilent VEE and cannot be used to name your objects or terminals, or used in IO transactions .

The following table lists all Keywords which cannot be used to name your objects or terminals.

AND | ASAWF | ASBOOLEAN | ASCOMPLEX | ASCOORD
ASDOUBLE | ASFS | ASINT | ASINT16 | ASINT32
ASINT64 | ASINTEGER | ASLONG | ASLONGINT | ASPCOMPLEX
ASREAL | ASREAL32 | ASREAL64 | ASSHORT | ASSPECTRUM
ASSTR | ASSTRING | ASTEXT | ASUINT8 | ASWAVEFORM
Builtin | ByRef | COORD | DIV | Main
MAXINT | MAXINT16 | MaxInt16 | MAXINT32 | MaxInt32
MAXINT64 | MaxInt64 | MaxLong | MAXLONG | MaxShort
MAXSHORT | Me | MinInt | MININT | MININT16
MinInt16 | MinInt32 | MININT32 | MinInt64 | MININT64
MOD | NOT | OR | PI | SET
XOR | XYZZY |  |  |

The following table shows all Reserved Words which cannot be used in IO transactions.

ABORT | ACK | ALL | ARRAY | BEL
BINARY | BINBLOCK | BOOL | BOOLEAN | BREAK
BS | BYTE | CAN | CASE | CHAR
CLEAR | CLOSE | CLOSEREAD | CLOSEWRITE | CMD
CMND | CONTAINER | COORD | COUNT | CPX
CR | CTL | CTS | DATA | DATAREADY
DATE | DC1 | DC2 | DC3 | DC4
DCL | DEG | DELETE | DELTIME | DLE
DMY | DSR | DTR | ECL | EM
ENQ | EOI | EOL | EOT | EQUAL
ERR | ESC | ETB | ETX | EXCLUDE
EXECUTE | EXT | FF | FIX | FS
FW | GET | GRAD | GS | GTL
H12 | H24 | HEX | HM | HMS
HT | INCLUDE | INCR | INT | INT16
INT32 | INT64 | INTERVAL | IOCONTROL | IOSTATUS
ITEM | LF | LISTEN | LJ | LLO
LOCAL | LOCALLOCKOUT | LOCK | MASK | MAXFW
MEM | MLA | MSG | MTA | NAK
NOEND | NOP | NUL | OCT | OF
OFF | ON | PASS_CONTROL | PCTL | PCX
PPC | PPU | PREFIX | PULSE | QSTR
RAD | READ | REAL | REAL32 | REAL64
REG | REMOTE | RESET | REWIND | RJ
RS | SCI | SDC | SEC | SEND
SET | SI | SIGN | SO | SOH
SPD | SPE | SPEC | SPOLL | STATE
STD | STR | STS | STX | SUB
SYN | TALK | TCT | TEXT | TIME
TOKEN | TRIGGER | TTL | UNL | UNLOCK
UNT | US | VT | WAIT | WDMY
WF | WRITE | RTS |  |

注释

By Default True and False are considered as Boolean data. It is not recommended to use True and False as object name.

常数

The following table lists Constants in Agilent VEE and their values:

Constants | Value
MaxInt | 2147483647
MinInt | -2147483648
MaxInt16 | 32767
MinInt16 | -32768
MaxInt32 | 2147483647
MinInt32 | -2147483648
MaxInt64 | 9223372036854775807
MinInt64 | -9223372036854775808
MaxLong | 2147483647
MaxShort | 32767
PI | 3.142


NI-DAQmx

从VEE 8.0版开始，VEE支持National Instruments NIDAQmx库。

VEE NI-DAQmx驱程的工作方式与其它VEE NIDAQ驱程类似，如NI-DMM, NI-SCOPE, NI-SWITCH, NI-FGEN和传统NIDAQ。To/From NI-DAQmx事务对象可以访问National Instruments NI-DAQmx Library中的大多数函数。这些事务与National Instruments NI-DAQmx C Reference Help文件中列出的函数一对一对应。按"Function Help"按钮，同时浏览事务列表，用户将被带到该函数的帮助页面。它假设用户熟悉NI-DAQmx API编程，理解National Instruments DAQmx "物理信道语法"。

VEE NI-DAQmx驱程与其它VEE NIDAQ驱程有一个重大区别。其它驱程"硬链接到"VEE Instrument Manager中的某台设备，NI-DAQmx库则不是。NI-DAQmx事务允许输入NI "物理信道语法"，可以对同一个事务对象中的多个设备/端口编程。由于这一原因，为"Physical Channel"参数(如"Dev1/Line0")提供的默认值更多的是用于说明目的(告诉你正在查找哪类字符串)。用户要足够熟悉National Instruments DAQmx "物理信道语法"及可用的仪器，才能输入相应的字符串。

另请参阅

To/From NIDAQ, NI-FGEN, NI-SCOPE Fetch/Read函数, 在VEE中使用NI Data Acquisition


在VISA式设备上进行标准化

安捷伦正在分期淘汰旧的不一致的I/O设备(SICL和VISA混合)，以在声明/使用I/O设备时实现更加统一的方法(VISA)。这可以保持向下兼容能力，即使我们“鼓励”用户使用新式设备。

Instrument Manager将只找到ACE (Agilent Connection Expert)中设置的仪器，NIDAQ设备除外。一旦已经为ACE中的仪器完成必要的配置工作，只要仪器已经连接，那么按VEE Instrument Manager中的Find Instruments将找到这台仪器，而没有任何进一步配置。

在默认情况下，Agilent VEE 8.0将不会在Instrument Manager中添加SICL式设备。为找到传统设备，复选Default Preference对话框中IO栏下的Enable Pre 8.0 Legacy IO项目。

备注

在Agilent VEE 7.5中，使用Instrument Manager中的Find Instruments将一直查找Serial接口。在Agilent VEE 8.0中，只有连接一台串行设备时，才会查找Serial接口。

另请参阅

Instrument Manager