波形显示控件
LABVIEW第4章图形显示
图4-3 Waveform Graph弹出菜单
第4章 图形显示
图4-4 X 标尺菜单
第4章 图形显示
设置刻度类型为任意刻度后,Waveform Graph控件上X轴
只有第一个和最后一个刻度显示,如图4-5所示。此时Add
Maker项为可选项,利用该项可以在鼠标指针所在的位置增加 新刻度及相应的竖直网络线,如图4-6所示。
第4章 图形显示
图4-10 标尺选项
第4章 图形显示
图4-11 Cursor游标选项
第4章 图形显示
4.1.2 Waveform Graph组成元素的使用方法
根据图4-2所示,分别介绍Waveform Graph的部分组成元素
的使用方法。 1.波形设置工具
利用波形设置工具可以定义波形的各种相关参数。使用文
标签显示和标签的内容;Caption栏用来设置标题的显示和标题 的内容;Enable State栏用来设置Waveform Graph的状态;其余 几个选项用于是否显示特定的工具面板。
第4章 图形显示
图4-7 外观选项
第4章 图形显示
数据格式与精度(Format and Precision)选项如图4-8所示。
本编辑工具单击波形控制工具上的名称可以进行修改。默认情 况只显示第一条波形的图例,使用定位工具拖动下边沿可以填
加图例。
第4章 图形显示
2.图形工具选板 图形工具选板用来选择鼠标操作模式,共有3个按钮。十 字标志按钮用于切换操作模式和普通模式;第二个按钮是缩放 工具按钮,共有6个选项,从左到右,从上到下依次是按鼠标 拖拽出来的矩形放大、按鼠标拖拽水平放大、按鼠标拖拽垂直 放大、取消最近一次的操作、按鼠标所在点位置放大和按鼠标 所在点位置缩小,如图4-13所示;第三个按钮是平移工具,用 于在X-Y平面上移动可视区域的位置。
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选项。
labview波形显示控件
右击Chart选择Stack Plots
整理课件
13
• 定制Chart显示样式
– 设置更新模式 • 右击Chart选择Advanced->Update Mode…可以
设置曲线的更新模式。
• Strip Chart模式:曲线填满显示区后曲线通过左移
来更新曲线。
• Scope Chart模式:曲线填满显示区后直接清空显示
– 数字显示(Show Digital Display); – 滚动条(Show Scrollbar); – 历史记录长度(Chart History Length)。 – 多层图(Stack Plots); – 波形刷新模式(Update Mode);
整理课件
12
• 定制Chart显示样式
– 分栏显示多条曲线。
整理课件
3
一、 Chart趋势图
• Chart可以将新测得的数据添加到曲线的尾
端,从而反映实时数据的变化趋势,它主 要用来显示实时曲线。
• 控制面板的结构:
• X,Y轴;
– 图形显示区; – 波形设置; – 控件标签。
整理课件
4
• 对于标量数据,Chart图表直接将数据添加
在曲线的尾端。
整理课件
线图、密度图、数字时序图和三维图。
整理课件
16
Graph图表
• 右击Graph控件可以看到该控件有很多属性可以设置。
选择Visible Items…可以看到关于该控件的很多辅助 选项。选择这些选项可以使它们都可见,如下图所示。
整理课件
17
• 波形设置:
– 图形表示方法(Common Plots); – 数据点风格(Point Style); – 线型(Line Style); – 线宽(Line Width); – 直方图(Fill Baseline); – 连线方式(Interpolation); – 颜色(Color)。
LabVIEW入门与实战开发——编辑前面板
LabVIEW入门与实战开发——编辑前面板前面板是VI代码的接口,是用户交互界面。
前面板界面上放置了各种图形控件,这些控件主要分为输入控件(Control)和显示控件(Indicator)两大类。
例如,在实例1中打开的模板VI的前面板含有波形图显示、数值显示和停止按钮3个控件。
1. 控件选板前面板中放置的控件来源于控件选板。
显示控件选板的方法有两种:方法一,按图1-1所示在前面板的菜单栏选择“查看(V)→控件选板(C)”,弹出控件选板,如图1-2所示;方法二,如图1-3所示,在前面板的空白处单击鼠标右键,再单击固定端子按钮就能得到如图1-2所示的控件选板。
▲图1-1 从菜单栏打开控件选板▲图1-2 控件选板▲图1-3 单击鼠标右键打开控件选板说明:对于方法二,若不单击固定端子按钮,单击鼠标左键时,控件选板便会消失。
控件选板包含了创建前面板时可用的全部对象,其中最常用的是新式、系统和经典3类控件。
单击控件选板的某一个图标会进入该图标链接的下一层控件菜单。
图1-4所示为新式控件及其包含的所有类型的控件。
新式控件主要包括数值、布尔、字符串与路径、数组、矩阵与簇、列表与表格、图形、下拉列表与枚举、容器、I/O、引用句柄、变体与类等控件,以及用于修饰的图形与线条。
图1-4新式控件及其包含的所有类型的控件图1-5所示为系统控件,图1-6所示为经典控件。
由图可见,系统控件和经典控件中也包含了数值、布尔、字符串等控件,虽然在表现风格上有些差别,但在用法上基本一致。
一般情况下,相对于系统控件和经典控件来说,新式控件更常用一些。
▲图1-5系统控件▲图1-6 经典控件2.工具选板工具选板主要用于在编辑前面板和程序框图时根据需要改变鼠标的功能,从而实现连线、选择、移动等操作。
调出工具选板的方法也有两种:方法一,按图1-7所示在前面板的菜单栏中选择“查看(V)→工具选板(T)”,弹出工具选板,如图1-8所示;方法二,按住“Shift”键,在前面板或程序框图的空白处单击鼠标右键,也可以调出工具选板,但是此时如果单击鼠标左键,工具选板便会消失。
威伦触摸屏曲线图显示波形
威伦触摸屏曲线图显示波形一、实验前基本知识了解。
1、HMI内存地址LW,范围LW0~LW11300,为16位寄存器,存储32数据时,地址偏移量+2。
例如:以LW0为首地址存放一个浮点型的数,那么该浮点数存放位置为LW0-LW1,我们在操作时,只需要设置该数据的类型,系统会自动读取和写入。
2、西门子1200PLC DB数据块数据的读取。
数值元件读取写入添加一个数值元件,打开属性。
设备:选择添加好的PLC。
地址:选择DBDn,30000。
30000中的3表示数据块DB3,后面的0000表示数据块DB3中的偏移地址。
那么则我们选择的是读取变量“采集温度”。
需要注意的是数据块要取消优化访问功能才能进行偏移量显示。
威伦触摸屏幕中的地址格式可以通过在地址栏中任意输入字符点确定即可查看地址填写规则。
3、HMI宏指令。
GetData:取值指令。
格式:GetData(读取数据存放的变量, “读取数据的设备名称”, 数据名, 读取的数据首地址, 读取数据个数)。
说明:读取的数据可以来自HMI,也可以来自PLC,主要看对应参数的设置,读取的数据类型取决于数据存放变量的类型。
例:float in_1[201]GetData(in_1[200], "Siemens S7-1200/S7-1500", DBDn, 30004, 1)将PLC "Siemens S7-1200/S7-1500"中的DB3.DBD4开始读取1个数据把它存放在数组in_1[200]中。
SetData:赋值指令。
格式:SetData(要赋值的变量, “被赋值的设备名称”, 被赋值的数据名, 被赋值的首地址, 赋值的个数)。
例:float in_1[201]in_1[200]=3.14GetData(in_1[200], "Siemens S7-1200/S7-1500", DBDn, 30004, 1)将3.14的值赋给PLC "Siemens S7-1200/S7-1500"中DB3数据块中偏移量为4首地址中,被赋值数据的个数为1.4、宏指令设置。
Qt编写自定义控件60-声音波形图
Qt编写⾃定义控件60-声⾳波形图⼀、前⾔这个控件源⾃于⼀个⾳乐播放器,在写该⾳乐播放器的时候,需要将⾳频的数据转换成对应的频谱显⽰,采⽤的fmod第三⽅库来处理(fmod声⾳系统是为游戏开发者准备的⾰命性⾳频引擎,⾮常强⼤和⽜逼),fmod负责拿到⾳频数据对应的采样频谱数据,然后传给这个控件进⾏绘制即可,本控件主需要专注于绘制即可,这样fmod对应封装的类专注于⾳频采集等处理,实现了隔离,修改和增加功能⽐较⽅便,声⾳波形图控件除了可以设置采样的深度以外,还⽀持三种数据样式展⽰,线条样式、柱状样式、平滑样式。
为了可以直接定位到某⼀位置直接跳转到⾳频位置,还增加了绘制数线条定位线。
⼆、实现的功能1:可设置采样深度2:可设置当前位置线条宽度/线条颜⾊3:可设置前景⾊/背景⾊4:可设置数据展⽰样式,线条样式/柱状样式/平滑样式三、效果图四、头⽂件代码#ifndef WAVEDATA_H#define WAVEDATA_H/*** ⾳量采样值波形控件作者:feiyangqingyun(QQ:517216493) 2017-9-10* 1:可设置采样深度* 2:可设置当前位置线条宽度/线条颜⾊* 3:可设置前景⾊/背景⾊* 4:可设置数据展⽰样式,线条样式/柱状样式/平滑样式*/#include <QWidget>#ifdef quc#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))#include <QtDesigner/QDesignerExportWidget>#else#include <QtUiPlugin/QDesignerExportWidget>#endifclass QDESIGNER_WIDGET_EXPORT WaveData : public QWidget#elseclass WaveData : public QWidget#endif{Q_OBJECTQ_ENUMS(WaveStyle)Q_PROPERTY(double deep READ getDeep WRITE setDeep)Q_PROPERTY(bool showLine READ getShowLine WRITE setShowLine)Q_PROPERTY(int lineWidth READ getLineWidth WRITE setLineWidth)Q_PROPERTY(QColor lineColor READ getLineColor WRITE setLineColor)Q_PROPERTY(QColor foreground READ getForeground WRITE setForeground)Q_PROPERTY(QColor background READ getBackground WRITE setBackground)Q_PROPERTY(WaveStyle waveStyle READ getWaveStyle WRITE setWaveStyle)public:enum WaveStyle {WaveStyle_Line = 0, //线条样式WaveStyle_Smooth = 1, //平滑样式WaveStyle_Bar = 2 //柱状样式};explicit WaveData(QWidget *parent = 0);protected:void mousePressEvent(QMouseEvent *);void paintEvent(QPaintEvent *);void drawBg(QPainter *painter);void drawData(QPainter *painter);void drawLine(QPainter *painter);private:double deep; //采集深度bool showLine; //显⽰线条int lineWidth; //线条宽度QColor lineColor; //线条颜⾊QColor foreground; //前景⾊QColor background; //背景⾊WaveStyle waveStyle; //数据样式int length; //采样点长度int position; //当前位置QVector<float> data; //采样点数据public:double getDeep() const;bool getShowLine() const;int getLineWidth() const;QColor getLineColor() const;QColor getForeground() const;QColor getBackground() const;WaveStyle getWaveStyle() const;QSize sizeHint() const;QSize minimumSizeHint() const;public slots://设置深度void setDeep(double deep);//设置是否显⽰线条void setShowLine(bool showLine);//设置线条宽度void setLineWidth(int lineWidth);//设置线条颜⾊void setLineColor(const QColor &lineColor);//设置前景⾊void setForeground(const QColor &foreground);//设置背景⾊void setBackground(const QColor &background); //设置数据样式void setWaveStyle(const WaveStyle &waveStyle); //设置总长度void setLength(int length);//设置当前位置void setPosition(int position);//设置当前数据void setData(const QVector<float> &data);//清空数据void clearData();signals:void positionChanged(int position);};#endif // WAVEDATA_H五、核⼼代码void WaveData::paintEvent(QPaintEvent *){//绘制准备⼯作,启⽤反锯齿QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing);//绘制背景drawBg(&painter);//绘制数据drawData(&painter);//绘制当前位置线条drawLine(&painter);}void WaveData::drawBg(QPainter *painter){painter->save();painter->fillRect(this->rect(), background);painter->restore();}void WaveData::drawData(QPainter *painter){if (data.count() == 0) {return;}painter->save();//获取最⼤值最⼩值float max = data.at(0);float min = data.at(0);int count = data.count();for (int i = 1; i < count; i++) {if (max < data.at(i)) {max = data.at(i);}if (min > data.at(i)) {min = data.at(i);}}//转化成当前屏幕的内的坐标⼤⼩max += deep;min -= deep;//⾃动转换数据到屏幕坐标位置QVector<QPointF> points;for (int i = 0; i < count; i++) {double x = i * width() / count;double y = height() - (((data.at(i) - min) / (max - min)) * height());points.append(QPointF(x, y));}//绘制不同的风格if (waveStyle == WaveStyle_Line) {painter->setPen(foreground);for (int i = 0; i < count - 1; i++) {painter->drawLine(points.at(i), points.at(i + 1));}} else if (waveStyle == WaveStyle_Smooth) {painter->setPen(foreground);QPainterPath path = SmoothCurveCreator::createSmoothCurve(points); painter->drawPath(path);} else if (waveStyle == WaveStyle_Bar) {double penWidth = width() / (count * 1.6);QPen pen;pen.setColor(foreground);pen.setWidthF(penWidth);pen.setCapStyle(Qt::RoundCap);painter->setPen(pen);for (int i = 0; i < count; i++) {QPointF point = points.at(i);double x = point.x() + penWidth / 1.2;painter->drawLine(QPointF(x, point.y()), QPointF(x, height()));}}painter->restore();}void WaveData::drawLine(QPainter *painter){if (!showLine || position > length || data.count() <= 0) {return;}painter->save();QPen pen;pen.setWidth(lineWidth);pen.setColor(lineColor);painter->setPen(pen);//计算当前位置对应的坐标int x = ((double)position / length) * width();painter->drawLine(x, 0, x, height());painter->restore();}六、控件介绍1. 超过150个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、⾼亮按钮、滑动选择器、农历等。
LabVIEW虚拟仪器技术第3章-基本数据类型
布尔控件
布尔串控件,位于 “控件”选板->“新式”>“布尔”中。
布尔函数
对布尔量实施操 作的函数称为布尔函 数,位于“函数”选 板->“编程”->“布 尔”中。
按钮与开关
布尔输入控件分为按钮型布尔控件和开关型 布尔控件。它们都是布尔输入控件,但物理意义 有所区别。
单位标签可以在快捷菜单->显示项->单位标 签从而显示,可自由输入物理单位符号,如时间 “h”,“s”,长度“m”等。也可于单位标签上 右键->创建单位字符串进行单位选择。
LabVIEW程序可实现不同单位的自动转换, 还可以通过运算自动处理组合单位。
数值控件的基数与单位标签
数值控件的属性
在快捷菜单上选择“属性”项,即可打开属 性对话框。属性对话框由许多属性页组成,涵盖 了大量的控件属性设置信息。
我们利用控件选板所提供的各种输入控件 和显示控件就可以达到”所见即所得”的效果。
从LabVIEW数据流编程的角度看,任何数 据都必须是有源的,这个源就是输入控件或常 量。常量可以理解为特殊的输入控件。而数据 最终流向的目的地就是显示控件。
从控件本身的角度看,LabVIEW只是推荐 了控件的使用方法,而并没有绝对区分控件必 须是输入控件还是显示控件,两者之间可以相 互转化。
线型与数据类型
LabVIEW中,不同的线型代表不同的数据类型。
在LabVIEW中,数值控件的数据类型是可以 改变的。当我们使用数值控件时,需注意正确使 用数据类型,避免程序发生错误。
编写求平均数程序: 程序能否运行? 程序能否实现功能?
Result为蓝色控件,其数据类型为整型数据, 程序计算结果会被强制转换为整形数。程序能运 行,但无法正确结果。
LabView实验教程
LabVIEW是实验室虚拟仪器集成环境(Laboratory Virtual Instrument Engineering Workbench)的简称,是美国国家仪器公司(NATIONAL INSTRUMENTS,简称NI)的创新软件产品,也是目前应用最广、发展最快、功能最强的图形化软件集成开发环境。
LabVIEW是一种图形化编程语言,又称G语言。
其编写的程序称为虚拟仪器VI(Virtual Instrument),以.VI后缀。
LabVIEW模板:◆ 工具模板(Tools Palette)◆ 控件模板(Controls Palette)◆ 功能模板(Functions Palette)VI的组成:◆ 前面板(Panel)控制(Control),指示(Indicator),修饰(Decoration)。
将前面板中的控制和指示统称为前面板对象或控件。
◆ 框图程序(Diagram Programme)节点(Node),数据连线(Wire)节点有:功能函数(Functions),结构(Structures),代码接口节点(CIN),子VI(SubVI)。
数据端口有:控制端口和指示端口,节点端口。
LabVIEW编程又称为“数据流编程”。
◆ 图标/连接端口(Icon/Terminal)把VI作为一个SubVI在其它VI中调用。
常用术语:SubVI 子VI Chart 实时趋势图LLBs VI库Graph 事后记录图Objects 对象Functions 功能Panel 前面板Structures 结构Block Diagram 框图程序Cluster 簇Control 控制Bundle 打包Indicator 指示Unbundle 解包Control和Indicator 前面板对象或控件RefNum 枚举,标志号Palette 模板Local Variable 本地变量Functions Palette 功能模板Global Variable 全局变量Controls Palette 控件模板Constant 常量Tools Palette 工具模板Disable Indexing 无索引Terminal 端口Enable Indexing 有索引Wires 数据连线Read Local 本地读Bad Wires 错误数据连线Write Local 本地写Node 节点Read Global 全局读Attribute Node Write Global 全局写Property Node 属性节点Legend 图例Frame 框架Cursor 光标Channel 框架通道Bounds 边界范围Index 索引Data Acqisition(DAQ) 数据采集Shift Register 移位寄存器Label 标签运行VI1.运行VI(Run)2.连续运行VI(Run Continuously)3.停止运行VI(Abort Execution)4.暂停运行VI(Pause)调试VI1.单步执行单步(入),单步(跳),单步(出)2.设置端点3.设置探针4.显示数据流动画数据类型:基本数据类型:数字型(Numeric),布尔型(Boolean),字符串型(String)构造数据类型:数组(Array),簇(Cluster)其它数据类型:枚举(RefNum),空类型数组(Array):索引号从0开始一维数组(1D,列或向量),二维数组(2D,矩阵)组成:数据类型,数据索引(Index),数据创建:1.控制模板->Array & Cluster子模板2.根据需要将相应数据类型的前面板对象放入数组框架中使用:1. Array Size返回输入数组的长度2. Index Array返回输入数组由输入索引指定的元素3. Replace Array Element替换输入数组的一个元素4. Array Subset从输入数组取出指定的元素5. Reshape Array改变输入数组的维数6. Initialize Array初始化数组7. Build Array建立一个新数组8. Rotate 1D Array将输入数组的最后n个元素移至数组的最前面9. Sort 1D Array将数组按升序排列10.Reverse 1D Array将输入的1D数组前后颠倒,输入数组可以是任何类型的数组11.Transpose 2D Array转置输入的二维数组,也叫矩阵转置12.Search 1D Array搜索指定元素在一维数组中的位置13.Array Max & Min返回输入数组中的最大值和最小值14.Split 1D Array将输入的一维数组在指定的元素处截断,分成2个一维数组15.Interpolate 1D Array线性插值16.Threshold 1D Array一维数组阀值,是线性插值的逆过程17.Interleave 1D Arrays将从输入端口输入的一维数组插入到输出的一维数组中18.Decimate 1D Array将输入的一维数组分成数个一维数组,是Interleave 1D Arrays的逆过程簇(Cluster):类似于Pascal语言的record和C语言的struct组成:不同的数据类型创建:控制面板—>Array & Cluster子面板;向框架添加所需的元素;根据需要更改簇和簇中元素的名称使用:1.Unbundle解包。
第7章 LabView高级控件的运用
第7章高级控件的运用在设计应用程序显示界面时,简单的界面可以用基本控件构成,但是对复杂的程序而言,仅仅使用基本控件是远远不能满足界面显示需求的。
Labview除了提供常规的控件外,还提供了丰富的图形显示控件,用于显示测量数据。
7.1 列表框列表框是由一系列的项目组成的,每个项目都包括符号和文本。
其中,符号为图形显示,文本为字符显示。
列表框作为显示控件的时候比较多,比如用列表框显示一个文件夹中的所有文件名和图标。
列表框作为输入控件时,其主要用途则是提供用户选择多个项目,形成新的列表。
在前面板控件选板上找到列表、表格和树选板,即可找到列表框。
如图7-1所示。
7-1 列表框列表框可以通过右键快捷菜单的显示项选择是否显示滚动条、列首、水平行和符号等。
列表框控件内含的数据类型是I32,它本质是数值型控件。
列表框控件具有众多属性,对于不需要经常改动的属性,可以通过控件的快捷菜单设置。
需要动态设置的属性,则必须借助与属性节点来控制。
7.1.1 列表框应用实例1、列出文件夹中的所有文件及文件夹列出文件夹中的文件是列表框的典型应用之一。
使用“罗列文件夹”函数获取Labview 默认文件夹,即Labview.exe文件所在的文件夹下所有的文件和文件夹。
在函数选板中文件I/O→文件常量选择“默认目录”文件常量。
利用“罗列文件夹”(函数选板文件I/O→高级文件函数)将该目录下的所有文件和文件夹名称列表组成两个字符串数组。
将文件和文件夹名称的字符串数组串接成一个字符串数组输入到列表框的“项名”属性。
另外通过数组大小函数提取文件和文件夹的数量,并分别用文件和文件夹列表常量(函数选板对话框与用户界面→列表框符号下拉列表控件常量)初始化两个数组,并将两个数组进行连接输入到“项符号”属性。
运行程序在前面板列表框得到文件夹中所有文件和文件夹名称列表,如图7-2所示。
图7-2 列出文件夹中所有文件和文件夹2、列表框项目的添加与删除从列表框中选择合适的项目并组成新的列表,也是列表框典型的用法。
wave view用法
wave view用法
Wave view是一个视图控件,用于展示波形图形。
它可以在Android应用程序中以各种方式使用,以下是一些常见的用法:
1. 设置音频波形:Wave view可以用来展示音频波形,例如在
音频录制或播放应用程序中。
你可以使用它来实时显示正在录制的音频或已经录制的音频的波形图。
2. 音乐播放器:Wave view可以用作音乐播放器的可视化效果
之一。
你可以将它与音乐播放器的进度条结合使用,以显示当前播放的音频文件的波形。
3. 音频编辑器:Wave view可以在音频编辑器应用程序中用来
显示和编辑音频波形。
你可以使用它来放大、缩小、剪切或添加音频片段。
4. 语音识别:Wave view可以用于语音识别应用程序中,以可
视化显示用户输入的音频波形。
这有助于用户了解他们的语音输入是否被正确识别。
5. 音频效果:Wave view可以与其他音频效果或处理库(如均
衡器、降噪、声音增强等)结合使用,以可视化显示音频效果的变化。
当使用Wave view时,你可以使用其提供的方法和属性来设置波形的颜色、宽度、填充等。
你还可以根据需要自定义其外观和行为,以适应特定的应用程序需求。
LabVIEW中的波形图
LabVIEW中的波形图所谓曲线就是一组X与Y对应数值的图形化显示。
通常曲线图中的Y值代表了数据值,而X值则代表了时间。
波形图控件(waveform chart)可以在Controls工具面板的Modern>>Graph子面板中找到。
这个控件是一个专门用来显示一个或多个数据曲线的数值类型的指示器控件。
这个控件经常在循环结构中使用,用来保留与显示以前采集到的数据,并追加新产生的数据,将这些数据以连续更新的方式进行显示。
在波形图控件中,Y值表示了新产生的数据,X值表示了时间(通常,每次循环就产生一组新的Y值,而X值则表示了一个循环的时间)。
在LabVIEW中只有一种波形图控件,不过这个控件有三种数据刷新模式。
下图就是一个多曲线波形图的例子。
波形图更新模式波形图控件的三种数据更新模式分别是带状记录纸模式(strip chart),示波器图模式(scope chart)以及扫描图模式(sweep chart),如下图所示。
数据更新模式可以通过在波形图控件上面点击鼠标右键后在弹出菜单中的Advanced>>Update Mode>>子菜单来加以改变。
如果在VI程序运行期间想要修改波形图控件的数据更新模式,由于运行时的控件右键菜单与编程时的不同,就在该控件的邮件菜单中的Update Mode中选择即可。
带状记录纸模式的显示和真正的带状记录设备的显示相像。
示波器图模式则和真正示波器的曲线显示相像,该模式中当曲线到达波形图的右边界之后,整个曲线就会清除并从波形图的左边界重新开始显示。
扫描图模式与示波器图模式十分相似,不过扫描图模式中曲线到达右边界后并不会有清除动作,而是有一个竖线出现在波形图中,该竖线标识着新数据的开始,并在新数据不停添加的时候,该竖线会慢慢移动。
这些区别在看到实际波形图控件在不同刷新模式先运行之后就很容易区别开来的。
由于示波器图模式与扫描图模式在追溯以往曲线上比带状记录纸模式的开销要少,所以这两种数据更新模式要比带状记录纸模式很明显的快得多。
基于LabVIEW的频谱分析仪报告1
基于LabVIEW的频谱分析仪机电学院测控技术与仪器系晋芳摘要:以LabVIEW为平台,设计了一个简单的频谱分析仪,该仪器能实时显示采集到的信号的波形和FFT变换的图形,并将该信号的各参数测量出来。
关键字:LabVIEW FFT 频谱分析一、设计任务基于目前智能仪器实验室的硬件系统通过LabVIEW编程实现简易频谱分析仪,要求能采集-10-10V、频率2Hz-25KHz的各种信号并能显示采集到信号的幅度频谱。
二、设计要求1、基本功能(1)能够采集幅值范围在-10V~10V,频率在25KHz以下的信号并显示出来;(2)能够将所采集信号的频谱计算出来并显示出来。
(3)编写友好的人机界面;2、发挥部分(1)能够对采样信号波形失真度进行测量;(2)能够存储频谱波形;三、频谱分析原理频谱分析最常用的方法就是离散傅立叶变换(DFT),为了快速计算DFT,通常采用一种快速傅立叶变换(FFT)的方法。
当信号的采样点数是2的幂时,就可以采用这种方法。
FFT的输出都是双边的,它同时显示了正负频率的信息。
通过只使用一半FFT输出采样点转换成单边FFT。
FFT的采样点之间的频率间隔是fs/N,这里fs是采样频率。
FFT和能量频谱可以用于测量静止或者动态信号的频率信息。
FFT提供了信号在整个采样期间的平均频率信息。
因此,FFT主要用于固定信号的分析(即信号在采样期间的频率变化不大)或者只需要求取每个频率分量的平均能量。
计算机只能处理有限长度的信号,原信号x(t)要以T(采样时间或采样长度)截断,即有限化。
有限化也称为加“矩形窗”或“不加窗”。
矩形窗将信号突然截断,这在频域造成很宽的附加频率成分,这些附加频率成分在原信号x(t)中其实是不存在的。
一般将这一问题称为有限化带来的泄露问题。
泄露使得原来集中在f0上的能量分散到全部频率轴上。
泄露带来许多问题:如①使频率曲线产生许多“皱纹”(Ripple),较大的皱纹可能与小的共振峰值混淆;②如信号为两幅值一大一小频率很接近的正弦波合成,幅值较小的一个信号可能被淹没。
基于vs2010-mfc简易串口数据波形显示软件(入门篇)
基于vs2010-mfc简易串口数据波形显示软件(入门篇)软件版本vs2010旗舰版文件—新建—项目选择基本对话框语言—美国英语,若选择中国汉语,可能这版本没破解好,会有些问题。
后面就一直下一步,直到完成。
在右边工具箱中,添加下面需要用到的控件。
如下图右击类向导---项目com 类名CcomDlg。
点击成员变量,分别给他们添加变量名。
添加完如下图:添加串口控件。
右击插入Active控件(X),找到如下确定。
界面出现串口控件(小电话一样的东东)点击串口控件(小电话)右键添加变量,输入变量名m_mscomm ,同时下方出现mscomm1.h 和mscomm1.cpp,点击确定,坐标目录生成该两个文件点击菜单栏工具---选择工具箱项(X)--点击COM组件,浏览找到TeeChart8.ocx,可由网上下载。
然后添加如下之后再工具箱中最下面便可看到该控件接下来拉出图形界面。
进入类向导,点击右上角 添加类(C)—>类型库中的MFC类(T)…添加这5个类这里有很多这里有很多这里有很多在comDlg.cpp文件中添加头文件#include"CTChart.h"#include"CAxis.h"#include"CAxes.h"#include"CScroll.h"#include"CSeries.h"双击teechart,添加曲线Add这里模板很丰富,这里我们选择FastLine标题命名、初值点设置Data中、左轴底轴显示设置在Axis中,以及其他功能到此,基本框架已经搭好了 后面添加程序 双击打开串口按钮添加代码如下:void CcomDlg::OnBnClickedButtonOpen(){// TODO: 在此添加控件通知处理程序代码if( !m_mscomm.get_PortOpen()){m_mscomm.put_PortOpen(true);SetDlgItemText(IDC_BUTTON_OPEN,_T("关闭串口"));AfxMessageBox(_T("串口打开成功"));}else{m_mscomm.put_PortOpen(FALSE);SetDlgItemText(IDC_BUTTON_OPEN,_T("打开串口"));}}双击发送按钮。
LABVIEW第7章 波形显示
单曲线显示
100
100
XY Graph XY Graph 2
多曲线显示
100
XY Graph
30 0
Waveform Graph
3
例7.1.5 两个电压的采样:20点的采集、 40点的采集、用一个Graph显示。
20 Bundle
Build Array
40
例7.1.5
Bundle
两个电压的采样:采集点数Graph
40 20 2
例7.3.1 用随机函数作为XY Graph的X 轴、Y轴,观察输入输出之间的关系
160
Bundle XY Graph 2
160
Bundle
XY Graph
例7.3.2 在XY Graph显示两个信号的输入 输出关系。
20
20
Bundle
Bundle
XY Graph 30
Bundle
30
XY Graph 2 Bundle
30
XY波形图
graph波形图的Y值对应实际的测量数据,X 值对应测量点的序号,适合显示等间隔序列
的变化。
XY波形图——Y值随着X值变化的曲线。 XY波形图的特点: 1. 和graph相同,一次性完成波形显示刷新; 2. 输入数据类型由两组数据打包构成的簇,
每一组数据对应一个显示数据点的X、Y坐 标
利用For Loop自动索引特性创建一个数组, 并在waveform graph 上显示该数组波形
0
2
Waveform Graph
100
Array
创建一个VI,用于实时测量和显示温度,同 时显示温度的最大值、最小值和平均值。
max
30 min
cvi graph控件 分次绘制波形
CVI Graph控件介绍CVI Graph控件是一种用于在CVI(Measurement Studio)环境中绘制波形的控件。
CVI是一个功能强大的工程开发环境,用于创建数据采集、分析和可视化应用程序。
CVI Graph控件提供了丰富的功能和灵活的选项,使开发人员能够轻松地创建各种类型的波形图。
绘制波形CVI Graph控件可以通过以下步骤来绘制波形:1. 创建Graph控件首先,需要在CVI项目中创建一个Graph控件。
可以通过拖拽控件到界面设计器中,或者在代码中动态创建控件。
2. 设置Graph属性在绘制波形之前,可以设置Graph控件的各种属性,以满足绘制需求。
例如,可以设置图表的标题、坐标轴标签、坐标轴范围、背景颜色等等。
3. 添加波形数据然后,需要向Graph控件添加波形数据。
可以通过函数调用或者使用Graph控件的属性来添加数据。
数据可以是实时生成的,也可以是从文件或其他来源读取的。
4. 绘制波形最后,调用绘图函数将波形数据绘制在Graph控件上。
可以选择绘制不同类型的波形,如折线图、散点图、柱状图等等。
还可以设置线条颜色、线型、标记点等样式。
CVI Graph控件的特性CVI Graph控件具有许多强大的特性,使开发人员能够更好地控制和定制波形图。
1. 实时更新CVI Graph控件支持实时更新波形数据。
可以通过定时器或其他事件触发机制来更新波形数据,并实时显示在图表上。
这对于实时监测和数据可视化非常有用。
2. 数据分析CVI Graph控件提供了丰富的数据分析功能,可以对波形数据进行统计、滤波、变换等操作。
可以计算平均值、最大值、最小值、标准差等统计指标,也可以进行傅里叶变换、滤波器设计等操作。
3. 交互式操作CVI Graph控件支持交互式操作,用户可以通过鼠标或键盘与波形图进行交互。
可以选择、缩放、平移波形,以及添加标记、注释等。
这使用户能够更方便地查看和分析波形数据。
4. 导出和打印CVI Graph控件支持将波形图导出为图像文件或打印出来。
C#波形图控件制作示例程序
C#波形图控件制作⽰例程序⾸先添加⼀个timer,50s复制代码代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms;namespace High_Tech_Watch{public partial class UserControl1 : UserControl{public UserControl1(){InitializeComponent();}int[] oldLine;int SIZE = 15; //⽅格的⼤⼩Pen LINEPEN = new Pen(Color.FromArgb(3,64, 129), 1); //背景线条颜⾊Pen FORELINEPEN = new Pen(Color.LightBlue); //前景线条颜⾊private void UserControl1_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;int Bvalue;Bvalue = Value;if (shake != 0){Random ro = new Random();int r = ro.Next(0, shake);Value += (ro.Next(-shake, 0) / 2) + r/2;if (Value>100){Value = 100;}if (Value < 0){Value = 0;}}int h = (int)(this.Size.Height / SIZE);int w = (int)(this.Size.Width / SIZE )+ 1;//这⾥加1保证了滚动时最右侧垂直线及时出现for (; h >= 0;h-- ){g.DrawLine(LINEPEN, new Point(0, h * SIZE), new Point(this.Size.Width, h * SIZE));}for (; w>=0;w-- ){g.DrawLine(LINEPEN, new Point((w * SIZE) - limits, 0), new Point((w * SIZE) - limits, this.Size.Height));}for (int i = oldLine.Length - 1,j = 0;i >j ;j++ ){g.DrawLine(FORELINEPEN, new Point(j,(this.Height - (int)(((float)oldLine[j] / (float)100) * (float)this.Height) ) -1), new Point(j + 1, (this.Height - (int)(((float)oldLine[j+1] / (float)100) * (float)this.Height))-1) );}for (int i = oldLine.Length - 1, j = 0; i > j; j++){oldLine[j] = oldLine[j + 1];}oldLine[oldLine.Length - 1] = Value;pintLightPoint(e);Value = Bvalue;}private void pintLightPoint(PaintEventArgs e){Graphics g = e.Graphics;g.DrawImage(global::High_Tech_Watch.Resource1.未标题_2,new Rectangle(new Point(this.Width - 50,this.Height -(int)(((float)lightPointValue / (float)100) * (float)this.Height ) - 10),new Size(20,20)));}int lightPointValue = 50;int limits = 0;//滚动就靠他了,是⼀个范围private void timer1_Tick(object sender, EventArgs e){limits++;if (limits >= SIZE){limits = 0;}this.Invalidate();}private void UserControl1_Load(object sender, EventArgs e){oldLine = new int[this.Width - 40];}int shake = 0;[DefaultValue(0),Description("抖动率,值控件输⼊的值⾃动抖动(禁⽤是为0)"),Category("属性值")]public int Shake{get{return shake;}set{shake = value;}}[DefaultValue(0),Description("当前数值"),Category("属性值")]public int Value{get { return lightPointValue; }set { lightPointValue = value; }}[Description("当前数值"), Category("属性值")]public Pen LinePen{get { return LINEPEN; }set{LINEPEN = value;this.Invalidate();}}private void UserControl1_Resize(object sender, EventArgs e){if ((this.Width - 40) > oldLine.Length){int[] newArry = new int[this.Width - 40];oldLine.CopyTo(newArry, newArry.Length - oldLine.Length); oldLine = new int[this.Width - 40];oldLine = newArry;}if ((this.Width - 40) < oldLine.Length){int[] newArry = new int[this.Width - 40];for (int i = newArry.Length - 1,j = oldLine.Length - 1; i >=0 ;i--,j-- ) {newArry[i] = oldLine[j];}oldLine = new int[this.Width - 40];oldLine = newArry;}}}}。
基于C#的波形显示控件的实现[附完整源码下载]
编者记:09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学C# WinForm边设计,这个波形显示控件就是项目中的一部分,也花了自己绝大多数时间。
暑假一结束,也就没有再去接触C#了,主要精力放在C++,Windows 编程上去了。
此外,顺便将该波形显示控件当作自己毕业设计的内容,下文实际上是节选自自己的本科毕业论文的呵呵,希望对大家能有所帮助。
由于自己是个C#新手,所以代码以及文章有疏漏、错误、不妥之处在所难免,欢迎交流哈(现在看着十个月前写的代码,感想颇多......)欢迎转载,但请注明出处(通宵整理排版= = 很不容易的哈)/xf_z1988/archive/2010/05/11/CSharp_WinForm_Wavef orm.html(写这篇文章之时,大学再一个半月就结束了,目前在学C++、Windows编程、希望能找到个适合的工作吧)“基于C#的波形显示控件”设计于09年暑假源代码奉上呵呵:博客园下载| CSDN下载解压密码:CSharp_WinForm_Waveform《基于C#的波形显示控件的实现》写于2009年9月跳到文章目录(注意这里是采用锚链接,订阅的朋友可能访问会失效的,例如QQ邮箱中的订阅= = 还是访问原文吧)“基于C#的波形显示控件的演示程序”为配套控件使用而设计的(演示程序源代码同控件源代码一起奉上了)下面先上几张图,大家可以先了解最后做出来是个什么东西:再奉上两个波形显示控件的演示视频(两个视频内容差不多的呵呵):摘要计算机技术的飞速发展使得其在自动化系统中的应用日益增强。
大量监控、图像数据显示软件活跃在自动化工业及自动化教学领域。
同时,软件系统的日益复杂化使得模块化开发变得尤为重要。
本课题所设计的基于C#的波形显示控件就可在微软.NET平台下进行代码功能重用,达到模块化开发和快速开发的目的,使得程序员能够集中精力设计软件的具体业务流程,而不必担心波形呈现的问题。
数据采集实验报告
数据采集实验报告基于Labiew的数据采集实验报告⼀、实验⽬的通过软件Labiew编写前⾯板和程序框图,将外部信号接于数据采集卡的模拟输⼊0号通道,外部信号由单⽚机和AD9850组成的信号发⽣器发出。
当在Labview环境下运⾏程序时,信号发⽣器所发出的信号显⽰在⾯板上。
仪器⾯板如下图所⽰。
⼆、实验器材PC机⼀台,单⽚机开发箱,信号发⽣器,数据采集卡,⽰波器,Labiew 软件,220V交流电源,导线若⼲等。
三、实验原理数据采集(DAQ)是指从系统外部采集数据并进⾏转换后传输到系统内部的过程,能够提供这⼀功能的完整系统被称为数据采集系统(Data Acquisition System)。
1.显⽰波形的原理框图如下:在上图所⽰的框图中,计算机对采集卡发出指令,启动采集卡,计算机将采集的信号数据进⾏存储、处理和显⽰,从⽽将波形显⽰在⾯板上。
采集卡将被测信号转为离散的数字信号,并保存在计算机的数组中,计算机通过Labiew 软件将保存在数组中的离散数字信号显⽰在图形控件中。
/doc/b082fe4ce45c3b3567ec8bf6.html bview 数据采集在Labview 中提供了很多关于数据采集的相关的VI ,利⽤这些VI 可以创建相关的要求的数据采集系统,下图是程序框图的测量I/O 中的DAQ ⼦模板界⾯图。
下⾯介绍⼏个主要的数据采集的VI 。
1)DAQmx 创建通道模拟输⼊初始化,给其分配⼀个任务ID 。
2)DAQmx 开始任务模拟输⼊开始,将数据暂存在数据采集卡的缓存中。
3)DAQmx 读取模拟输⼊读数,从数据采集卡的缓存中读⾄计算机中。
4) DAQmx 定时采集时的⼀些参数设置。
信号采集卡计算机 Labiew 软件5)DAQmx 清楚任务模拟输⼊清楚任务。
这⼏个VI 的详细端⼦图如下所⽰:我们采⽤带缓冲的模拟输⼊,即数据先从DAQ 设备传到缓冲中,然后由DAQmxRead.VI 读取到应⽤程序内存中。
Teststand应用实例1
练习一:熟悉LabVIEW开发环境,实现频率扫描测试目标:熟悉LabVIEW开发环境,结合NI硬件,利用任意波形发生器产生正弦信号,利用示波器采集正弦信号,并最终实现频率扫描测试。
图1显示实验结果。
图1 完整练习硬件平台:连接任意信号发生器 (Arb) PXI-5421的CH0到示波器 (Digitizer) PXI-5122的CH1。
图2 系统连接操作步骤:1.启动LabVIEW 2013,在欢迎界面上按ctrl+n以创建一个新vi。
图3 新建空白VI2.开始编写程序,创建一个数值控件,通过该控件调整扫频信号的起始频率。
a.在VI前面板上右键单击,选择Numeric » Numeric Control(新式>数值»数值输入控件),如图4所示。
图4 创建数值输入控件b.修改控件标签,重命名数值输入控件为Start Frequency。
c.在起始频率控件中输入500,并在菜单工具栏中选择:Edit » Make CurrentValues Default(编辑»当前值设置为默认值),保存500为起始频率的默认值,如图5所示。
图5 保存500为默认值3.添加仿真信号Express VI产生一个正弦波信号。
a.从前面板切换到程序框图,在程序框图空白处右键单击,选择Express » Input »Simulate Signal(Express»输入»仿真信号),放置在程序框图上。
图6 添加仿真信号Express VIb.等待自动弹出Express VI配置对话框,或者双击Express VI,在对话框中将采样率 (Hz) 参数设置为10,000,000、图7 配置仿真信号Express VIc.点击OK,保存Express VI配置。
4.创建任意波形发生器的Express VI,从而用Arb硬件板卡产生正弦信号。
a.右键单击程序框图,选择Express » Output(输出)» NI-FGEN (Arb)、图8 添加NI-FGEN Express (Arb) VIb.将NI-FGEN (Arb) Express VI放置在仿真信号Express VI右边。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形是虚拟仪器的重要组成部分,Labview为用户提供了丰富的图形显示功能,在图形子模版中提供了许多可供使用的显示控件,如图:
我们将在下面的章节通过一些例子向大家介绍前三种图形显示控件的使用。
波形图及波形图表
首先放置一个波形图表到前面板上,然后在上面单击右键,如图:
或者右击后选择属性,便可以看到所有能对该控件操作的选项,如图:
例一:用波形图表显示两组随机数。
新建一个VI,在前面板上放置一个波形图表,取消X轴和Y轴的刻度标签,如图:
2定位工具上下拖动边框,让它显示两条曲线图注,如图:3然后把他们拖动到合适的位置。
如图:
4切换到程序框图,放置一个For循环,计数端子取值为100,这样每次运行产生100个数据。
在循环体内放置两个随机数产生函数,分别乘上一个因子5和-5。
如图:
运行结果如图:
例二:温度临界预警器
5新建一个VI,在前面板上放置一个波形图表,将Y轴的刻度标签改为“温度”,然后选择隐藏图例,然后将Y轴坐标的自动调整取消,如图:
6添加一个布尔圆形指示灯,并调整为合适大小,把标签内容改为“报警”当温度超出临界值时点亮报警灯,同时在前面板放置一个停止开关。
7在程序框图上放置如图所示的程序,其中添加一个定时工具,把时间间隔设为200ms。
如图:
运行结果如图:
波形图
波形图和波形图表得大部分组建及其功能都是类似的,特别的是波形图具有光标指示器,利用它可以准确地读出波形曲线上的任何一点数据,便于分析某一时刻的特性值。
如图:
波形图举例:
例一:该例的目的是用随机数函数产生100个随机数据,分别用波形图和波形图表来显示,并比较他们的区别。
8新建一个VI,在前面板上分别放置一个波形图和一个波形图表,调整为合适大小,取消显示图例,取消Y标尺自动调整,最大值设为1,最小值设为0。
9切换到程序框图,放置一个For循环结构,内部添加一个随机数产生函数,For循环结构计数端口设为100,同时添加定时工具,每次循环间隔时间为100ms.
10连线,如图所示:
运行,程序结果如图:
我们可以清楚地看到这两种显示工具的区别,它们地实现方法和过程不同,在程序框图也可以看出,波形图表产生在循环体内,这样每得到一个数据点,就立刻显示一个;而波形图产生在循环体外,100个数据都产生之后,跳出循环,然后一次显示出整个数据曲线。
程序运行第二次时,波形图表的X轴刻度就会随之增加,由0~99变为100~199,表示数据点的增加;而波形图的X轴刻度并没有发生变化,还是0~99,表示只显示当前的数据。
例二:该例的目的是学习使用“捆绑”打包函数来设置波形图的X轴刻度起始点和间隔。
11新建一个VI,在前面板上放置一个波形图,取消X轴的自动调整,使产生的波形可以充满整个X 轴刻度。
同时放置两个数值输入控件,Xo控制X轴刻度的起始点,数据类型为I32,Delta X控制X 轴刻度的水平间隔,数据类型为DBL。
12切换到程序框图,放置一个高斯白噪声函数,它位于函数→信号处理→信号生成→高斯白噪声。
如图:
13添加“捆绑”函数,用定位工具拖动它的边框为3个输入端口,然后如图所示联系。
运行,结果如图:
例三:该例的目的是学习使用簇数组来显示不同长度的数据,并比较它与直接用二维数组显示的区别。
14新建一个VI,在前面板上放置两个波形图,将它们标签内容分别改为“二维数组显示”和“簇数组显示”,标签字体大小设为18号。
15打开程序框图,添加正弦波函数和方波函数,它们位于函数→信号处理→信号生成→正弦波,方波。
分别给它们的采样端口赋值为150和200。
16在数组函数中,选择创建数组函数,将正弦波和方波的输出合并为一个二维数组。
在介绍数组时,已经得知当将两个不同长度的一维数组组成二维数组时,会自动在长度较短的一维数组后面添加0,使得它们的长度相同。
所以在图形显示时会在正弦波形后面添加一些没有意义的0。
17为了解决显示不同长度的一维数组,需要建立一个簇数组。
方法是用“捆绑”函数将一维数组打包为一个簇,然后用创建数组函数建立一个簇数组,由于每组数据是一个簇,这样就可以解决显示不同长度的一维数组。
程序框图如图所示:
运行结果如图:
XY图
以上介绍的两种波形显示器:波形图表和波形图只能描绘样点均匀分布的单值函数变化曲线,因为它们的X轴只是表示时间先后,而且是单调均匀的。
要想描绘Y与X的函数关系,就需要用XY图。
XY图形就是通常意义上的笛卡尔图形,描绘XY图首先需要两个数组X和Y,分别对应于图形的X轴和Y轴,并且需要两个数组打包构成一个簇,X轴在上,Y轴在下。
下面通过两个例子来说明XY图的一般用法。
XY图位于控件→新式→图形→XY图,如图:
例一:应用XY图显示里萨如图形。
首先简单介绍一下构成里萨如图形的原理,如果知道X和Y方向的两个数组分别按正弦规律变化(假设其数据点数,幅值和频率都相同),如果它们的相位相同,则应用XY图描绘出的里萨如图形是一条45°的斜线;当它们之间的相位差等于90°时为圆;大部分情况都是椭圆。
18新建一个VI,在前面板上放置一个XY图,调整它的边框为合适大小,同时放置一个数值输入控件“相位差”。
19切换到程序框图,添加两个正弦波函数放置到程序框图上。
将“相位差”输入控件与第二个正弦波函数的“相位输入”端口相连,默认的相位是0。
20在簇函数子模板上选择“捆绑”函数,将两个正弦信号打包为一个簇,第一个数组作为X轴的数据,第二个数组作为Y轴的数据,簇的输出与XY图相连。
如图:
例二:用XY图描绘同心圆
21新建一个VI,在前面板上放置一个XY图,使曲线图例显示两条曲线标识。
22在程序框图上放置一个For循环,给计数端子赋值为360,添加正弦函数和余弦函数,它们位于函数→数学→基本与特殊函数→三角函数→正弦,余弦。
23选择“捆绑”打包函数,将每次循环产生的一对正弦值和余弦值攒成一个簇,循环结束后将这360个簇组成一个簇函数。
24因为XY图的显示机制决定了它的输入必须是簇,所以要再用一次“捆绑”打包函数将两个簇数组转换为簇,最后再用“创建数组”函数组成一个簇数组。
程序框图如图:
运行结果如图:
Labview同时还为我们提供了另外一种XY图,就是Express XY图切换到程序框图时,
我们会看到在程序框图上,它的使用比单纯的XY图简便,从图中我们也可以看到,它的输入端口是两个,输入既可以是单个的数值,也可以是数组,这里我们不再作详细的介绍。