LabVIEW中的曲线图

LabVIEW中的曲线图
LabVIEW中的曲线图

LabVIEW中的曲线图

LabVIEW的曲线图与波形图控件不同之处在于:波形图可以交互的实时绘出数据曲线;而曲线图则是一次性绘出预先生成的数据数组,曲线图没有向已有数据追加新数据的能力。在LabVIEW中有多种曲线图控件的类型,这大大提高了曲线图控件的灵活性,这些类型包括了波形曲线图、XY曲线图、密度曲线图、3D曲线图、数字信号波形曲线图以及一些特殊类型的曲线图。在本文里面我们主要讲一下波形和XY曲线图。波形曲线图以及XY曲线图控件在VI程序的前面板中的外观是一样的,不过其功能却是完全不同的。

一个有多个曲线的曲线图控件如下图所示:

这两种类型的曲线图控件可以在Controls控件面板的Modern>>Graph子面板中找到。波形曲线图空间只能用来绘制单值曲线(就是说对每个X值只对应一个Y值),并且这些值所对应的X轴的间距都是一致的,例如由固定采样间隔采集到的波形数据曲线。这个控件最适合绘制数据点均匀分布的数组数据。

XY曲线图控件则是通用的、基于笛卡尔坐标系的曲线图控件,可以用来绘制变时基或者一个X值对应多个Y值的数据曲线。这两种曲线图控件看起来一样,不过它们的输入数据类型是不同的,这一点要非常注意才是。

单曲线波形曲线图

对于简单的单点曲线图,你可以如下图所示将一个Y值的数组直接连接到波形曲线图控件的输入端点上。在这种模式下,默认X的初始值为0,并且X值的增量为1。你可以看到在下图中,程序框图中曲线图控件的输入端点是一个数组指示控件。

如前面所讲到的数组的介绍,上图中的For循环中的输出就是一个一维的数组。

有些时候,为了灵活起见,你可能需要修改曲线图的时基。例如,你在进行数据采集的起始时间并不是0,或者是你的数据采样间隔并不是1个标准单位(可能大或者小于一个标准单位)。这是要修改时基的话,就将X0起始值、ΔX 值以及数据数组绑定到一个簇中,之后再将这个簇连接到曲线图。如下图所示,可以看到曲线图控件的输入端已经变成簇指示器的模样了。

多曲线波形曲线图

通过创建一个上面单曲线例子中数组(或者是新建一个2维数组)就能够在曲线图控件中显示多条曲线了,如下图所示。可以看到曲线图的输入端随着连接到其上的数据结构的不同也产生了相应的变化。

在上图中,所显示的两个数组都是设定为初始X值为0,X值的增量为1。Build Array函数是从两个一维数组创建了一个二维数组。可以看到这个二维数组的两个有100行的列。默认情况下,曲线图控件会将二维数组的每列作为一个独立的波形曲线进行绘制。如果你的数据是按行进行组织的,那么在绘图之前你需要转置你的数组。转置意味着将行和列中的数值调换位置。例如,如果你要转置一个三列十行的二维数组,你最后得到的就是一个十列三行的二维数组。在LabVIEW中,只要简单的在曲线图控件上点击鼠标右键并在右键菜单中选择Transpose Array选项即可,如果你的曲线图没有二维数组的输入,这个选项就为灰色并不可点击。另外你也可以使用Functions菜单中的Array子面板中的Transpose 2D Array函数来完成此操作。

在下图中,每个数组的X0值以及ΔX值都进行了设定。每组数据的X参数没有必要是一样的。

同样,我们可以使用Context Help窗口来查看连接到曲线图控件的数据类型的详细描述,如下图所示。这是一个很有用的参考。只要在程序框图中,将鼠标光标移动到曲线图的输入端点就可以在Context Help窗口看到绘制曲线的数据输入的详细描述了。通过菜单Help>>Show Context Help或者是快捷键都可以启动这个Context Help窗口。

原文:LabVIEW中的曲线图

利用Labview实现任意波形发生器的设计

沈阳理工大学课程设计专用纸No I

1 引言 波形发生器是一种常用的信号源,广泛应用于通信、雷达、测控、电子对抗以及现代化仪器仪表等领域,是一种为电子测量工作提供符合严格技术要求的电信号设备。随着现代电子技术的飞速发展,现代电子测量工作对波形发生器的性能提出了更高的要求,不仅要求能产生正弦波、方波等标准波形,还能根据需要产生任意波形,且操作方便,输出波形质量好,输出频率范围宽,输出频率稳定度、准确度及分辨率高,频率转换速度快且频率转换时输出波形相位连续等。可见,为适应现代电子技术的不断发展和市场需求,研究制作高性能的任意波形发生器十分有必要,而且意义重大。 波形发生器的核心技术是频率合成技术,主要方法有:直接模拟频率合成、锁相环频率合成(PLL),直接数字合成技术(DDS)。 传统的波形发生器一般基于模拟技术。它首先生成一定频率的正弦信号,然后再对这个正弦信号进行处理,从而输出其他波形信号。早期的信号发生器大都采用谐振法,后来出现采用锁相环等频率合成技术的波形发生器。但基于模拟技术的传统波形发生器能生成的信号类型比较有限,一般只能生成正弦波、方波、三角波等少数的规则波形信号。随着待测设备的种类越来越丰富,测试用的激励信号也越来越复杂,传统波形发生器已经不能满足这些测试需要,任意波形发生器(AWG)就是在这种情况下,为满足众多领域对于复杂的、可由用户自定义波形的测试信号的日益增长的需要而诞生的。随着微处理器性能的提高,出现了由微处理器、D/A以及相关硬件、软件构成的波形发生器。它扩展了波形发生器的功能,产生的波形也比以往复杂。实质上它采用了软件控制,利用微处理器控制D/A,就可以得到各种简单波形。但由于微处理器的速度限制,这种方式的波形发生器输出频率较低。目前的任意波形发生器普遍采用DDS(直接数字频率合成)技术。基于DDS技术的任意波形发生器(AWG)利用高速存储器作为查找表,通过高速D/A转换器对存储器的波形进行合成。它不仅可以产生正弦波、方波、三角波和锯齿波等规则波形,而且还可以通过上位机编辑,产生真正意义上的任意波形。

labview曲线图与波形图控件的组成

曲线图与波形图控件的组成 曲线图与波形图有很多强大的特色功能,通过掌握对这些功能的应用,你可以自定义自己的曲线。在本文中将讲解如何运用与配置这些曲线图的选项。 一个曲线图的组成元素如下图所示: 其中每个组件的说明如下: 1——曲线图例(Plot legend) 2——光标(Cursor) 3——分度标记(Grid mark) 4——小分度标记(Minor-grid mark) 5——曲线图工具栏(Graph palette) 6——光标移动器(Cursor mover) 7——光标图例(Cursor legend) 8——比例图标(Scale legend) 9—— X轴刻度(X-scale) 10——Y轴刻度(Y-scale) 11——曲线图标记(Label) 玩转比例尺 波形图与曲线图都能自动调整它们的水平与垂直方向的刻度比例以对绘于其上的数据点作出反应,也就是说比例尺能够按最大的分辨率调整自己以显示数据曲线上的所有数据点。你可以在曲线图或波形图对象上面点击鼠标右键,在右键弹出菜单中的X Scale菜单或Y Scale菜单里面对AutoScale X或AutoScale Y选项进行设置就可以将自动比例尺调整功能关闭或打开。在比例图标(Scale Legend)里面我们也可以对自动比例尺调整进行设置(在后面我们会讲到这些)。在LabVIEW中,默认是将曲线图控件的自动调整功能启用的,而波形图控件这是默认关闭的。不过,通过启用这个选

项可能会使波形图或曲线图更新缓慢,缓慢程度与计算机的处理性能和显示性能有关,缓慢的原因是每条曲线的新比例在每次数据更新的时候都要重新计算一次。 X与Y轴比例尺菜单 X与Y轴的比例尺都有一个用来设置的子菜单,如下图所示: 通过选择该菜单中的AutoScale选项,就可以关闭或打开自动比例尺功能。 一般情况下,当你执行自动比例尺功能的时候,比例尺就设定为输入数据的实际数值范围。如果你想要让LabVIEW 将比例尺显示为更好看的数值,可以启用菜单中的Loose Fit选项。在启用该选项之后,比例尺上的数值就成为比例尺增量的整数倍值。比如,你的比例尺的增量为5,那么比例尺的最大最小值就是5个倍数而不是实际的数值范围。 Formatting...选项就会打开一个曲线图属性对话框,并显示该对话框的格式与精度页面(Format and Precision),如下图所示。在这里就可以配置比例尺上的数字的格式。 在Scale标签页里面,如下图所示。可以对如下选项进行设置:

labview结构的使用

结构的使用 本页关键词:labview labview 下载labview8.2 labview教程labview论坛labview 8.20 labview 7.0 labview 序列号labview7.1 labview 8.0 结构的使用 条件结构 条件结构是执行条件语句的一种方法。这类似于文本编辑语言中常见的If…Then…Else语句。它位于程序框图中,函数→编程→结构→条件结构。如图所示: 条件结构包含有两个或者更多的子框图,每一个子框图包含一段程序代码,由此对应一个程序分支。多个子框图就像一摞卡片重叠在一起,任何时候只有一个是可见的,执行哪一个取决于于选择端子外部接口相连的某个整数,布尔数,字符串或者枚举指,用户也可以直接输入所有可能出现的值。 1.选择端口的输入值 条件结构选择端口的输入值是由与它相连的输入控件对象决定的,数据类型可以是布尔量,整形,字符串型或者枚举型。条件结构顶部中间是各分支的选择标识,它自动调整为输入的数据类型,可以在工具模板上使用标签工具直接键入单个数值或某个数据范围。数值之间用逗号来分开,例如:“..0,2,4..10”表示选择条件为:≤0,2,4,5,6,7,8,9,10。 对于字符型和枚举型数值在条件标识上会自动加上双引号,当键入的选择器标识值与连接选择端口的数值类型不同时,选择器标识变为红色标识有错误。如图:

设置默认分支的方法是,选择一个分支结构,在快捷菜单中执行“本分支设置为默认分支”,它的作用是当选择端口的值与选择器标识值没有一个匹配时,就执行默认分支。如图: 2.条件结构的数据通道 条件结构的数据通道就是数据的输入和输出端口。将结构内外的端子相连后,边框上就会出现一个小矩形框,这就是数据通道,用于传输数据。向条件结构的一个分支提供数据时,这个数据对于所有的分支都是有效的,也就是其他分支都可以使用这个输入数据。条件结构的输出通道有些不同,当在一个分支中创建输出通道后,所有分支的同一位置都会出现一个白色小方框,它要求每一个分支都必须为这个通道予以连接,通道变为实心后程序才可以运行。也可以在通道的快捷菜单中选定“未连线时使用默认”为没有连接的分支定义一个默认输出值,这时输出通道变为灰色。如图: 条件结构应用举例 例一:

中大型LABVIEW软件三层设计架构

通常一个VI若包含三、四十个以上的subVI(不包含LabVIEW本身在Functions中提供的VI)时,就可算是一个中大型的软件计划(software project)了。虽然比起软件工程中的一些作业环境软件(如Windows系列)或大型应用软件(如Word、Excel)等仍算是小工程,但其复杂性亦在一定程度之上,若没有事先想好在撰写程序时的一些规划与方法,想要完成这类中大型的软件绝对不是一件简单的事。尤其这类软件通常不是由一个人,而是由一个团队所共同完成的,因此整个软件的结构,就要能让团队中的每一成员都能清楚的了解,而且要够简单,才算是好的软件结构。以下将参考由Rick Bitter等人所着”LabVIEW Advanced Programming Techniques”,中之第4章的部分内容,介绍所谓软件计划中的三层式结构(the Three-Tiered Structure)的概念及其优点。 需要软件结构的主要原因,是当软件人员发展软件到某一阶段时,若没有计划或无意的创造了许多subVI,但各subVI之间有许多部分其实是重复撰写的;或各VI相互间呼叫时没有一定的纪律,使得在VI Hierarchy中所看到的各VI间的联机是错综复杂,像个盘丝洞一般,这将可能会使多人发展的软件计划增加所耗费的时间和可能出错的机会、减低程序的效率,以及增加debugging时的困难。为了改善上述的情形,所以要提倡三层式结构的概念。 三层式结构由上而下依次为:Main Level、Test Level和Driver Level,这种结构是由经验中得来的,在多人发展的软件计划中显得简单明了,当大家都能遵照这个结构来写程序时,这种结构就可以充分显现出它的优点。那这三个阶层到底如何区别呢?以通俗的比喻来说,假设我们如果要组织一个篮球队参加全国比赛,每个球员要练习基本动作及体能,如何跑、如何跳、手脚该如何放置才是正确位置等,这就相当于系统中Driver Level所做的事情;接下来,将各球员组合练习某一套防守或进攻的战术,如二三区域联防、人盯人防守,每个人该在什么位置才能正确接应等,则像是T est Level中一项项的test了;而最后比赛时,场上的战略运用,包括何时要用什么战术组合、如何更换球员、何时喊暂停、终场前是不是要故意犯规或采拖延战术等等,对照过来,就像是在Main Level中,如何将T est Level中各test 做最有效能的整合与排列组合等的工作。 简单来说,Driver Level包含了程序与所有仪器、组件、马达或其它应用软件的沟通、控制等较低阶的事情,使其可完成某一项基本的动作,例如初始化、马达走到home位置、雷射以设定的能量及频率发射光束???等。可注意到我们在这边所说的driver,并不像一般在别处所称驱动程序的那种driver那么低阶,真正最低阶的工作还是要有现成的VI来帮忙才行;在Test Level中,则是如何连接各个Driver VI的基本动作,使可做完出一套连续、有意义的流程,来执行某项测试,例如让手臂由A点走到B点,下降夹取一个螺丝,再走至C点装到某面板上,然后回到A点等待,类似这样控制一个流程的进行,便是Test VI的工作内容;Main Level则包含了使用者接口(User Interface)或称人机接口(Man-Machine Interface) ,目的是整合各项测试和例外处理(Exception Handling)等,将它们以适当的顺序及流程组合,很容易地让使用者操作。 当一个软件计划严格的遵照上述的三层结构来撰写时,最大的优点是可使程序代码的再使用(code reuse)达到最大化,在不同的T est VI中,可重复使用相同的Driver VI;而在不同程序的Main Level中,又可重复使用相同的T est VI,这将使得程序维护或修改的时间与精力大幅减少;同时当我们已有一个程序的样板(template)后,可增加软件版本更新的速度。另一个很重要的好处是,当我们在撰写某一个level中的程序时,并不需要关心在另一个level中有什么其它的程序是如何执行的,而只要专注在自己的这个level的程序上就可以了,这使得由团队来共同完成一个大型计划的工作变得容易许多。 以下将依Driver Level、Test Level、Main Level的顺序,来介绍在各level写程序时的原

LabVIEW中的波形数据

LabVIEW 中的波形数据 与其他基于文本模式的编程语言不同,在LabVIEW 中有一类被称为波形数据的数据类型,这种数据类型更类似于“簇”的结构,由一系列不同数据类型的数据构成。但是波形数据又具有与“簇”不同的特点,例如它可以由一些波形发生函数产生,可以作为数据采集后的数据进行显示和存储。这一节将主要介绍创建波形数据以及处理波形数据的方法。 1 波形数据的创建 LabVIEW 中的波形数据既可以由一些用于产生波形的函数、VIs 以及Express VIs 生成,也可以由数据采集函数从数据采集卡中采集数据而得到。下面主要介绍用函数、VIs 以及Express VIs 生成波形数据的方法。 在LabVIEW 中,与创建波形数据相关的函数、VIs 以及Express VIs 主要位于函数选板中的波形(Waveform )子选板以及信号处理(Signal Processing )子选板中,两个选板分别如图6-19以及图6-20所示。 下面介绍一些常用的用于产生波形数据的函数、VIs 以及Express VIs 的使用方法。 1.基本函数发生器函数(Basic Function Generation.vi ) 基本函数发生器函数可以产生正弦波、锯齿波、方波和三角波四种波形,并可以任意设图6-19 波形子选板 图6-20 信号处理子选板

定波形的频率、幅值、相位以及偏移量(叠加的直流分量)等属性。 图6-21所示的程序演示了基本函数发生器函数产生多种波形的方法,在例程中,用户可以指定波形的类型(正弦波、锯齿波、方波或三角波)、幅值、频率、相位以及叠加的直流分量的幅值等属性,根据这些属性生成相应的波形。 程序的后面板如图6-22所示。 2.调谐与噪声波形发生函数(Tones and Noise Waveform.vi ) 调谐与噪声波形发生函数用以产生多个一定频率、幅值、相位的正弦信号叠加的波形数据,同时可以模拟噪声和直流分量,并叠加到已有的波形数据上面。 图6-23与图6-24所示的程序演示了调谐与噪声波形发生函数的使用方法。程序中用一个频率10Hz 和一个频率为1Hz ,幅值均为10V ,相位均为0度的两路正弦波叠加,并将叠加后的波形展示于波形图形(Waveform Graph )控件中加以显示。 图6-21 基本函数发生器函数演示程序的前面板 图6-22 基本函数发生器函数演示程序的后面板

labview事件结构学习

labview事件结构学习 编程的主要目的是为了实现用户的某种功能,用户通过用鼠标、键盘、程 序内部等触发某种程序动作,从而达到某种结果,这些操作都被称作为事件,LabVIEW 中相应这些事件最常用的结构就是事件结构。事件结构内容丰富,基 本上大的程序结构都需要用到事件结构,下面将详细介绍事件结构。事件结构 在程序不能够单独响应各种事件,必须与循环结构一同使用,如下图事件添加 方式很简单,鼠标右键事件框弹出菜单如上图,有添加、删除、复制、编辑事 件等选项,按照操作即可。如下图,为事件结构添加Stop 事件,布尔控件触发 事件的方式有多种,鼠标按下、经过、离开、进入等,这里我们选择值改变。 确定后,stop 事件就被添加进去了,如下图,当我们运行程序后,点击前面板 的stop 按钮,触发事件使while 循环停止而后程序也停止。同一事件分支只能 添加一种事件吗?当然不是!有的时候有很多不同操作却会执行相同代码,怎 么编程才不会让代码冗余呢?看个例子,如下图2 个按钮stop1,stop2 点击后 都可以让程序停止,我们怎么为其添加事件呢?我们先添加一个事件stop1 的,方法上面已经描述了。由于stop2 的执行代码和stop1 一样,我们在事件stop1 上右键->弹出菜单->编辑本事件分支(Edit Event Handled by This Case)会弹出已添加事件stop1 的编辑框,这是左侧有2 个按钮如下截图我们点击Add Event 左侧事件列表会出现如下变化选中这个后,右侧列表选中stop2 的Value Change 事件后,点击确定在看该事件分支如下,2 个事件就添加在同一个分支当中了,运行程序后,点击stop1 或stop2 均可让程序停止。超时超时是事件结构特有的,看名字就知道是怎么回事,即超过一定时间没有触发事件则执行超时 事件。如果超时时间设置所以如果程序事件功能不多,又需要定时执行一段代码,可以考虑用此方式来完成;如果程序操作频繁,则不建议用此事件来定时

Labview执行结构:详细说明

执行结构:详细说明 While循环 与文本编程语言中的Do循环或Repeat-Until循环类似,必须满足特定条件之后,While循环才会执行其内的程序代码,如图1所示。 图1. LabVIEW中的While循环;具备While循环功能的流程图; 还有While循环功能的伪码范例 While 循环位于Structures面板上。从面板上选择While Loop之后,针对所要重复的代码区块,可用鼠标拖拽出矩 形并将之圈住。放开鼠标之后,即会有While循环圈住用户所选的区块。 只要将对象拖拽至While循环中,即可将其新增至While循环中。 只要条件接线端接收特定的布尔值之后,While循环随即执行代码 也可通过While 循环的条件接线端来处理基本错误。若将错误簇连接至条件接线端,则只有Status参数的真或假值传送至接线端。同样,Stop if True和Continue if True快捷菜单项目,将分别变更为Stop if Error和Continue while Error。 计数接线端属于输出端点,其中包含已完成的循环次数。 While循环的循环计数均从零开始。 注意: While循环将至少执行一次。 无限循环 无限循环为常见的程序错误,即无法停止的循环。若条件接线端 i为True时停止,而用户又在While循环外部放置布 尔控件接线端。一旦循环开始,控件值即成为FALSE,就会形成无限循环。

图2.While循环之外的布尔控件 因为在循环开始之前,仅读取该值一次,所以改变控件的值并无法停止无限循环。若要通过控件停止While循环,则必须在循环中配置控件接线端。若要停止无限循环,则按下工具栏上的Abort Execution按钮,即可终止该VI。 在图3中的While 循环将不断执行,直到随机数函数的输出大于或等于10.00,且Enable控件为TRUE时才会停止。当且仅当“与”函数的两个输入都为真时,函数的返回值才为真。否则,与函数将回传FALSE。 在图3中,只要随机函数不产生10.00以上的值,就会成为无限循环。 图3.无限循环 结构隧道 隧道负责为结构传送数据。 While循环边框上的实心区块即为隧道。此区块的颜色与隧道所连接的数据类型的颜色相同。在循环终止之后,随即有数据送回循环。当隧道传送数据进入循环时,只有数据抵达隧道之后,才会执行循环。 图4即以计数接线端连至隧道。直到While 循环执行完毕,隧道中的数值才会传送至Iterations显示控件。计数接线端在Iterations显示控件中只会显示最后的数值。 图4. While循环的隧道

LabVIEW事件结构的妙用

LabVIEW事件结构的妙用 首先,我们回顾一下上期节目:LabVIEW网络讲坛乊悬案迷思中关于事件结构的几个重要知识点。 事件结构的基本组成部分: 事件结构五大基本组成部分 事件结构由——事件选择器、超时接线端、事件数据节点、事件过滤节点和动态事件接线端5个基本部分组成。 事件结构编程的3条黄金原则: 在使用LabVIEW事件结构迚行编程的时候,我们应该注意:1.不要将事件结构放置在while循环乊外,而应该放置在while循环的内部;2.不要在事件结构的内部使用循环处理事件,可选择采用生产者消费者结构,在生产者循环中放置事件结构,在消费者循环中处理事件;3.记得为事件结构添加一个单独处理停止按钮的分支。 遵守以上三条原则将使我们的程序更加健壮,避免在使用事件结构的时候出现前面板死锁等问题。 过滤事件与通知事件:

在LabVIEW中,以问号结束的事件被称为过滤事件,其余的事件被称为通知事件。对于通知事件,程序可以感知事件的发生并且响应该事件,然后再处理在事件结构中定义的任务;而对于过滤事件,程序感知事件发生后,首先处理在事件结构中定义的任务,然后根据事件过滤节点的值(Discard?)来决定是否响应该事件或是否改变事件数据。 因此我们建议,在希望参与处理用户操作时使用过滤事件,因为过滤事件可以放弃事件或修改事件数据。如果仅需要知道并响应用户执行的某一特定操作,则应使用通知事件。 在本期节目中,我们着重介绍动态注册事件的用法。 静态和动态两种事件注册模式: 静态注册指定了事件结构的每个分支具体处理哪些事件。一旦VI开始运行,LabVIEW将自动注册这些事件,并且在VI运行的整个过程中无法改变事件结构所处理的事件。 而动态事件注册与VI服务器相结合,允许在程序运行时使用控件、VI或应用程序的引用来动态地指定和改变产生事件的对象。动态注册在控制LabVIEW产生何种事件和何时产生事件等方面更为灵活。 Demo 1和Demo 2帮助大家更好地理解动态注册事件编程方法。 Demo 1:动态注册事件_阿拉丁神灯.vi Demo概述: 在这个VI中,用严格自定义的方式将一个布尔类型的控件做出神灯的样子,并为这个布尔控件动态注册了”鼠标按下”的事件。这个事件执行的任务是显示神灯神仙,并弹出一个对话框。由于该事件采用的是动态注册的方式,所以可以通过一个按钮取消对该事件的注册。并通过另一个按钮再次注册该事件。这就是动态事件的使用效果,它可以在程序运行的过程中,动态地控制何时注册事件和注册什么样的事件。 程序实现:

labview数组、簇和图形的区别

数组是同类型元素的集合。一个数组可以是一维或者多维, 如果必要,每维最多可有231-1个元素。可以通过数组索引访问 其中的每个元素。索引的范围是0到n – 1,其中n是数组中 元素的个数。图3-1所显示的是由数值构成的一维数组。注意 第一个元素的索引号为0,第二个是1,依此类推。数组的元素 可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1数组示意图 簇(Cluster)是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C语言中的stuct。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI的连接端子的数量。 波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2数组的创建及自动索引 3.2.1创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。 如果需要用一个数组作为程序的数据源,可以选择 Functions?Array?Array Constant,将它放置在流程图中。然后 再在数组框中放置数值常量、布尔数还是字符串常量。下图显示 了在数组框放入字符串常量数组的例子。左边是一个数组壳,中 间的图上已经置入了字符串元素,右边的图反映了数组的第0个 元素为:”ABC”,后两个元素均为空。 图3-1数组的创建 在前面板中创建数组的方法是,从Controls模板中选择 Array & Cluster,把数组放置在前面板中,然后选择一个对象 (例如数值常量)插入到数组框中。这样就创建了一个数值数组。 也可以直接在前面板中创建数组和相应的控制对象,然后将

LabVIEW中的波形数据剖析

LabVIEW中的波形数据 与其他基于文本模式的编程语言不同,在LabVIEW中有一类被称为波形数据的数据类型,这种数据类型更类似于“簇”的结构,由一系列不同数据类型的数据构成。但是波形数据又具有与“簇”不同的特点,例如它可以由一些波形发生函数产生,可以作为数据采集后的数据进行显示和存储。这一节将主要介绍创建波形数据以及处理波形数据的方法。 1 波形数据的创建 LabVIEW中的波形数据既可以由一些用于产生波形的函数、VIs以及Express VIs生成,也可以由数据采集函数从数据采集卡中采集数据而得到。下面主要介绍用函数、VIs以及Express VIs生成波形数据的方法。 在LabVIEW中,与创建波形数据相关的函数、VIs以及Express VIs主要位于函数选板中的波形(Waveform)子选板以及信号处理(Signal Processing)子选板中,两个选板分别如图6-19以及图6-20所示。 图6-19 波形子选板 图6-20 信号处理子选板 下面介绍一些常用的用于产生波形数据的函数、VIs以及Express VIs的使用方法。 1.基本函数发生器函数(Basic Function Generation.vi) 基本函数发生器函数可以产生正弦波、锯齿波、方波和三角波四种波形,并可以任意设

定波形的频率、幅值、相位以及偏移量(叠加的直流分量)等属性。 图6-21所示的程序演示了基本函数发生器函数产生多种波形的方法,在例程中,用户可以指定波形的类型(正弦波、锯齿波、方波或三角波)、幅值、频率、相位以及叠加的直流分量的幅值等属性,根据这些属性生成相应的波形。 程序的后面板如图6-22所示。 图6-21 基本函数发生器函数演示程序的前面板 图6-22 基本函数发生器函数演示程序的后面板 2.调谐与噪声波形发生函数(Tones and Noise Waveform.vi) 调谐与噪声波形发生函数用以产生多个一定频率、幅值、相位的正弦信号叠加的波形数据,同时可以模拟噪声和直流分量,并叠加到已有的波形数据上面。 图6-23与图6-24所示的程序演示了调谐与噪声波形发生函数的使用方法。程序中用一个频率10Hz和一个频率为1Hz,幅值均为10V,相位均为0度的两路正弦波叠加,并将叠加后的波形展示于波形图形(Waveform Graph)控件中加以显示。

LABview 波形数据

LABview波形数据 波形数据类型是由3个元素构成的簇:当第一个采样点为采集的初始时(t0),时间值的增加或步进值(dt),以及采集到的数据数组(Y)。如果您测到的数据已经是波形数据类型的话,您可以直接把它连接到waveform chart和graph控件。关于引入时间信息作为waveform chart和graph控件的x轴请参考以下的知识库链接。 非波形数据 如果您采集的数据不是波形数据类型,但是您仍旧希望绘制数据及其采集时间的图,您需要做以下工作(参考下面的LabVIEW VI例程): 1.使用Get Date/Time In Seconds VI位于Functions ? Time & Dialog 选板。注意不要使用Get Date/Time String函数。将该函数放置在您获 得数据的循环内。 2. 使用Bundle函数位于Functions ? Cluster选板将您的数据点和时间 值在该循环内组合成簇。注意,您需要将时间值连在bundle函数上面的 输入端口,(对应x轴数值)数据位于bundle函数下端的输入端口(对应于 y轴数值) 3. 将Bundle函数的输出连到XY Graph端口位于您程序框图的循环之外。 该XY 图能够从前面板的Controls ? Graph子选板中得到。确认在循环的边界的簇连线上允许索引(enable indexing)。您可以右击循环边界上的连线隧道选择允许索引实现该功能。 4. 右击前面板上的XY图进入并点击X Scale ? Formatting... 5. 从Format下拉菜单,选择Time & Date 6. 完成您期望在x轴上显示的时间以及/或者日期格式 7. 选择OK保存该更改

LabVIEW中的时标、波形以及动态数据

LabVIEW中的时标、波形以及动态数据 在LabVIEW中我们分析或采集的数据通常都是时间的函数。例如,我们可能希望知道在一天中温度随着时间的变化,或者是变化的波形在时间轴上绘出之后的样子。 LabVIEW有一些特殊的数据类型可以用来帮助一般的用户来以曲线的形式分析或展示这些数据。这些特殊的数据类型就是时标(Time Stamp)、波形(Waveform)和动态数据(dynamic data)。时标数据用来存储波形中的时间信息而多个波形可以保存在动态数据中。由于时标、波形以及动态数据的自然依赖关系,我们就在本文中对它们一起介绍。 时标(Time Stamp) 时标这个数据类型用来存储绝对日期/时间值,比如数据采集的时间。它的精度非常高,不论是对于计数秒的整数部分还是分数部分都有19位的精度。 虽然我们可通过将一个数值控件的显示方式设定为日期/时间来存储与显示时标值,不过数值控件保存的是相对值,而时标控件保存的则是绝对值。 在LabVIEW中,我们可以使用Get Date/Time In Seconds函数来获取当前的时标值。一个时标控件如下图所示: 时标是一个高精度保存绝对时间的手段,而时标控件则可以用来查看与修改时标的值。时标控件可以在Controls控件面板的Modern>>Numeric子面板中找到。 通过点击你要修改的时标控件左侧的上下箭头就可以对该时标的值进行增减操作。或者是通过键盘直接键入数值来取代时标的当前值。也可以在时标控件上点击鼠标右键,并在右键菜单中选择Data Operations>>Set Time to Now将时标的值设置为当前的日期与时间。 日期/时间浏览按钮 不过我们还有一个更有趣的修改时标的方法,那就是点击时标控件右侧的日期/时间浏览按钮。在点击该按钮之后,就会弹出下面的日期与时间设置对话框。从这个对话框,我们能够轻松的用这个日历式的界面来修改时标的日期与时间值。 这个对话框也可以在时标控件上点击鼠标右键,在右键菜单中Data Operations>>Set Time and Data菜单项打开这个对话框。对于没有日期/时间浏览按钮的时标常量以及指示器类型的控件,使用这个右键菜单是最合适的方式。 相对时间计算

labview课程设计模拟计算器事件结构

河北工程大学 《虚拟仪器设计》课程设计报告 课题:计算器模拟 姓名:张振兴 学号: 090030301 班级:测控三班 完成日期:2012 年 6月19日

目录 一、设计思路 (2) 二、实现过程 (2) 1、面板键入感应 (2) 2、运算变量的初始化 (2) 3、无操作时的默认输出 (3) 4、数字的键入1-9的输入 (3) 5、数字0的输入 (4) 6、小数点的键入 (5) 7、结果去零操作 (5) 8、“+/-”键的设计 (7) 9、“+、-、*、/”四则运算 (7) 10、等号键 (8) 11、开方运算 (9) 12、取倒数倒数运算 (9) 13、退格键CE的设计 (10) 14、清零键C (11) 15、停止键OFF (12) 三、整体程序 (12) 四、前面板的设计排版 (12) 五、while循环中寄存器能 (13) 六、此计算器可以实现的功能 (13)

一、设计思路 完成标准型计算器的一般功能。 输入第一个数,进行存储并显示输入运算的类型并存储输入第二个数,存储并显示按“=”或则按其它运算符号“+、-、*、/”进行连续的运算,最后显示运算结果。 二、具体的实现过程 1、面板键入感应 在前面板上建立22个布尔量,其中包括0--9十个数字键,1个小数点键,4个“+、-、*、/”运算键,1个等号键,1个开方键,1个符号转换键,1个倒数键,1个清零键,1个退格键,1个退出键。如下图所示: 2、运算变量的初始化 在运行程序之前,首先对需要用到的变量进行初始化,如图所示

3、无操作时的默认输出 当键盘上的键没有任何一个按下时,系统仅执行顺序结构第一帧,系统处于初始化状态输出。 4、数字1--9的输入 以数字“1”为例,当按下数字“1”后,布尔量为值改变,进入时间结构结构,将1输出到显示中,布尔量再次改变时。(图1.4.1)若再次输入1,为避免出现01这样的字符串,先判断之前显示的数据是否为0,若为0,则直接输出1,(图1.4.2)若不为0,则将这两次输入的数据通过

基于LabVIEW的任意波形发生器(含全部程序截图)

虚拟仪器课程设计报告 一、综述 1、信号发生器的发展 信号发生器是一种能够提供一定波形、频率和输出电平的信号源设备。40年代开始出现用于测试各种接收机的标准信号发生器。60年代出现了函数发生器,其多采用模拟电子技术,由分立元件或模拟集成电路构成,一般仅能产生正弦波、方波、锯齿波和三角波等几种比较简单的波形。由于模拟电路漂移问题的存在,其输出稳定性较差,同时要产生较为复杂的信号也比较困难。70年代以后开始出现微处理器,利用微处理器、模数转换器等,使得较复杂波形的产生容易了很多。 信号发生器的种类繁多,按输出波形可分为正弦信号发生器、脉冲波信号发生器、函数 发生器等等。按产生频率的方法又可以分为谐振法和合成法。 2、基于虚拟仪器的信号发生器 虚拟仪器与传统仪器相比有很多优势。就信号发生器而言,利用虚拟仪器可以很轻易地实现对信号的处理,仪器的功能能够根据需要随时进行适当调整,容易进行调试,而避免了传统仪器面临的不断更新换代的问题。同时,虚拟仪器的前面板与传统仪器相比对用户更加友好,使用起来更加清晰。 就信号发生器而言,利用虚拟仪器进行设计可以更加轻易获得所需信号,例如不具有明显周期规律的任意波形。同时,在硬件采集信号设备完好的情况下,很有效的避免了传统信 号发生器的波动不稳定性。 3、任务描述 本次课程设计利用Labview8.5以及实验室的信号采集设备,实现任意波形发生器的功能。该信号发生器除了能够产生正弦波、方波、三角波和锯齿波四种典型波形,还能根据输入的公式产生公式波形,幅值、频率等均可以调节。同时,还实现了通过手绘实现任意波形的输出。输出的信号均可以与幅值可调的均匀白噪声进行迭加。 二、程序说明 1、整体流程 该任意波形信号发生器的整体流程如下: 2、 程序具体说明

labview经典顺序结构

一. 程序执行顺序 LabVIEW 是数据流驱动的编程语言。程序在执行时按照数据在连线上的流动方向执行。同时,LabVIEW 是自动多线程的编程语言。如果在程序中有两个并行放置、它们之间没有任何连线的模块,则LabVIEW会把它们放置到不同的线程中,并行执行。 图1、2:顺序执行和并行执行的例子 顺序执行(图1):数据会从控制控件流向显示型控件,因此数据流经的顺序为“error in”控件,“SubVI A”,“SubVI B”,“error out”控件,这也是这个VI的执行顺序。 并行执行(图2):“SubVI A”,“SubVI B”没有数据线相互连接,它们会自动被并行执行。所以这个VI的执行顺序是“SubVI A”,“SubVI B”同时执行,当它们都执行完成以后,再执行“Merge Errors.vi”。 二. 顺序结构 如果需要让几个没有互相连线的VI,按照一定的顺序执行,可以使用顺序结构来完成(Sequence Structure)。 图3:Menu Palette 当程序运行到顺序结构时,会按照一个框架接着一个框架的顺序依次执行。每个框架中的代码全部执行结

束,才会再开始执行下一个框架。把代码放置在不同的框架中就可以保证它们的执行顺序。 LabVIEW 有两种顺序结构,分别是层叠式顺序结构(Stacked Sequence Structure)、平铺式顺序结构(Flat Sequence Structure)。这两种顺序结构功能完全相同。平铺式顺序结构把所有的框架按照从左到右的顺序展开在VI 的框图上;而层叠式顺序结构的每个框架是重叠的,只有一个框架可以直接在VI 的框图上显示出来。在层叠式顺序的不同的框架之间如需要传递数据,需要使用顺序结构局部变量(Sequence Local)方可。 图4:层叠式顺序结构 三. 顺序结构的使用 好的编程风格应尽可能少使用层叠式顺序结构。层叠式顺序结构的优点是及部分代码重迭在一起,可以减少代码占用的屏幕空间。但它的缺点也是显而易见的:因为每次只能看到程序的部分代码,尤其是当使用sequence local传递数据时,要搞清楚数据是从哪里传来的或传到哪里去就比较麻烦。 图5:转换顺序结构 使用平铺式顺序结构可以大大提高程序的可读性,但一个编写得好的VI 是可以不使用任何顺序结构的。由于LabVIEW 是数据流驱动的编程语言,那么完全可以使用VI间连线来保证程序的运行顺序。对于原本没有可连线的LabVIEW 自带函数,比如延时函数,也可以为其包装一个VI,并使用error in, error out,这样就可以为使用它的VI提供连线,以保证运行顺序。

labview波形图与波形图表的区别

labview中波形图和波形图标到底有什么区别2009-09-06 17:33先说明一下,不知道你在补充问题中说的公式模型发生器是什么函数, 主要要看它的输出数据类型。 波形图和波形图表支持以下数据类型。 LabVIEW使用波形图和图表显示具有恒定速率的数据。 波形图用于显示测量值为均匀采集的一条或多条曲线。波形图仅绘制单值函数,即在y = f(x)中,各点沿x轴均匀分布。例如一个随时间变化的波形。 波形图可显示包含任意个数据点的曲线。波形图接收多种数据类型,从而最大程度地降低了数据在显示为图形前进行类型转换的工作量。 注:数字波形图用于显示数字数据。 在波形图中显示单条曲线 波形图接收多种数据类型以显示单条曲线。对于一个数值数组,其中每个数据被视为图形中的点,从x = 0开始以1为增量递增x索引。波形图接受包含初始x值、△x及y数据数组的簇。波形图也接收波形数据类型,该类型包含了波形的数据、起始时间和时间间隔(△t)。 波形图还接收动态数据类型,用于Express VI。动态数据类型除包括对应于信号的数据外,还包括信号信息的各种属性,如信号名称、数据采集日期和时间等。属性指定了信号在波形图中的显示方式。当动态数据类型中包含单个数值时,波形图将绘制该数值,同时自动将图例及x标尺的时间标识进行格式化。当动态数据类型包含单个通道时,波形图将绘制整个波形,同时对图例及x标尺的时间标识自动进行格式化。 在波形图中显示多条曲线 波形图接收多种数据类型以显示多条曲线。波形图接收二维数值数组,数组中的一行即一条曲线。波形图将数组中的数据视为图形上的点,从x = 0开始以1为增量递增x索引。将一个二维数组数据类型连接到波形图上,右键单击波形图并从快捷菜单中选择转置数组,则数组中的每一列便作为一条曲线显示。多曲线波形图尤其适用于DAQ设备的多通道数据采集。DAQ设备以二维数组的形式返回数据,数组中的一列即代表一路通道的数据。 波形图还接收包含了初始x值、△x和y二维数组的簇。波形图将y数据作为图形上的点,从x初始值开始以△x为增量递增x索引。该数据类型适用于显示以相同速率采样的多个信号。 波形图接收包含簇的曲线数组。每个簇包含一个包含y数据的一维数组。内部数组描述了曲线上的各点,外部数组的每个簇对应一条曲线。以下前面板显示了这样的y簇的数组。 如每条曲线所含的元素个数都不同,应使用曲线数组而不要使用二维数组。例如,从几个通道采集数据且每个通道的采集时间都不同时,应使用曲线数组而不是二维数组,因为二维数组每一行中元素的个数必须相同。簇数组内部数组的元素个数可各不相同。 波形图接收一个包含初始值x、△x和簇数组的簇。每个簇包含一个包含y数据的一维数组。捆绑函数可将数组捆绑到簇中,或用创建数组函数将簇嵌入数组。创建簇数组函数可创建一个包含指定输入内容的簇数组。关于接收该数据类型的图形范例见

清华版labview教程

第二章程序结构 2.1循环结构 2.1.1While 循环 While 循环可以反复执行循环体的程序,直至到达某个边界 条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循 环。While 循环的框图是一个大小可变的方框,用于执行框中的 程序,直到条件端子接收到的布尔值为 FALSE。 ●该循环有如下特点: ●计数从0开始(i=0)。 ●先执行循环体,而后i+1,如果循环只执行一次,那么 循环输出值i=0。 ●循环至少要运行一次。 条件端子 循环变量 图2-1While 循环示意图 练习2-1使用While循环和图表 目的:用 While 循环和图表获得数据,并实时显示。 创建一个可以产生并在图表中显示随机数的VI。前面板有 一个控制旋钮可在0到10秒之间调节循环时间,还有一个开关 可以中止VI的运行。学习怎样改变开关的动作属性,以便不用 每次运行VI时都要打开开关。操作步骤如下: 前面板 图2-2练习2-1的前面板 1.选择FileoNew,打开一个新的前面板。 2.选择ControlsoBoolean,在前面板中放置一个开关。

设置开关的标签为控制开关。 3.使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。 4.选中ControlsoGraph,在前面板中放置一个波形图(是chart,而不是graph)。设置它的标签为随机信号。这个图表用于实时显示随机数。 5.把图表的纵坐标改为0.0 到 1.0。方法是用标签工具把最大值从10.0改为1.0。 6.选择ControlsoNumeric,在前面板中放置一个旋钮。设置旋钮的标签为循环延时。这个旋钮用于控制While 循环的循环时间。 流程图 7.开流程图,按照下图创建流程图。 图2-2练习2-1的流程图 a.从 FunctionsoStructures 中选择 While 循环,把它放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。 b.从Functionso Numeri c中选择随机数(0-1)功能函数放到循环内。 c.在循环中设置Wait Until Next ms Multiple函数(FunctionsoTime & Dialog),该函数的时间单位是毫秒,按目前面板旋钮的标度,可将每次执行时间延迟0到10毫秒。 d.照上面所示的流程图连线,把随机数功能函数和随机信号图表输入端子连接起来,并把启动开关和While 循环的条件端子连接。 8.返回前面板,调用操作工具后单击垂直开关将它打开。 9.把该 VI 保存为 LabVIEW\Activity目录中的Random Signal.vi。 10.执行该 VI。While循环的执行次数是不确定的,只要设置的条件为真,循环程序就会持续运行。在这个例子中,只要开关打开(TRUE),框图程序就会一直产生随机数,并将其在图表中显示。 11.单击垂直开关,中止该VI。关闭开关这个动作会给循环条件端子发送一个FALSE值,从而中止循环。 12.用鼠标右键单击图表,选择Data

labview经典选择结构

选择结构 选择结构相当于文本语言中的条件语句。LabVIEW 8 中新增加的Diagram Disable Structure,Conditional Disabled Structure 类似C 语言中的条件宏定义语句。 一. 程序框图禁用结构(Diagram Disable Structure) 在调试程序时常常会用到程序框图禁用结构。程序框图禁用结构中只有Enabled 的一页会在运行时执行,而Disabled 页是被禁用、即不会执行的;并且在运行时,Disable 页面里的SubVI 不会被调入内存。所以,被禁用的页面如果有语法错误也不会影响整个程序的运行。这是一般选择结构(Case Structure)无法做到的。 图1、2:使用程序框图禁用结构 例如图1、2 中的示例,如果我们在运行程序的时候暂时不希望将test 写入到文件里,但又觉得有可能以后会用到。此时,就可以使用程序框图禁用结构把不需要得程序禁用掉。需要注意的是程序框图禁用结构可以有多个被禁用的框架,但必须有且只能有一个被使用的框架。在被使用的框架中,一定要实现正确的逻辑,比如上图的例子中,在被使用的框架中一定要有连线把前后的文件句柄和错误处理联接好。 二. 条件禁用结构(Conditional Disabled Structure) 条件禁用结构则根据用户设定的符号(symbol)的值来决定执行哪一页面上的程序。其他方面与程序框图禁用结构相同。 程序中所使用的符号,可以在项目或是运行目标机器(例如“My Computer”)的属性里设置。

图3:条件禁用结构 值得注意的是:程序框图禁用结构与条件禁用结构都是静态的,如果需要在运行时决定执行哪一部分的程序可以使用选择结构。 程序框图禁用结构和条件禁用结构的一种实用案例可以参考:《其它常用调试工具和方法》 三. 选择结构(Case Structure) 在一般情况下,选择结构类似于 C 语言的switch 语句。当输入为bool 数据类型或error 数据类型时,选择结构类似于 C 语言中的if 语句。 图4:枚举类型的Case Selector 有输出时,则每一个框架中都必须连一个数据,当然也可以选择“Use Default If Unwired”。选择“Use Default If Unwired”会有一定的风险,因为你可能会忘记了连线,这时候LabVIEW 并不会提醒你,程序就可能得到不可预料的结果。 如图5所示,鼠标右击数据输出隧道,可以选择是否使用“Use Default If Unwired” 图5:选择Use Default If Unwired

相关文档
最新文档