当前位置: 首页 > news >正文

【Labview】虚拟仪器技术

一、背景知识

1.1 虚拟仪器的定义、组成和应用

  • 虚拟仪器的特点

虚拟仪器的突出特征为“硬件功能软件化”,虚拟仪器是在计算机上显示仪器面板,将硬件电路完成信号调理和处理功能由计算机程序完成。

  • 虚拟仪器的组成

硬件+软件

硬件是基础,负责将物理信号转换成数字信号。

软件是灵魂,负责控制硬件,又负责对采集到的数据进行分析、显示和存储。

  • 虚拟仪器的应用

DRLab综合实验平台 

 1.2 labview软件的应用

labview软件是NI设计平台的核心,主要用途:

  1.  测试测量。至今,大部分主流的测试仪器、数据采集设备都拥有专门的 labview驱动程序,使用labview可以非常便捷的控制这些硬件设备。
  2. 程序控制。labview拥有专门用于控制领域的模块——LaBVIEWDSC。除此之外,工程控制领域常用的设备、数据线等通常也都带有相应的labview驱动程序。使用labview可以十分方便的编制控制程序。
  3. 仿真。在设计机电设备之前,可以先在计算机上用LaBVIEW搭建仿真原型,验证设计的合理性。

注:驱动——一种特殊的软件程序,其中包含硬件设备的信息,便于计算机和软件识别和控制硬件设备。

1.3 常用快捷键 

Ctrl+T:可用于左右栏显示labview的前面板和程序框图。

Ctrl+鼠标滚轮:可快速浏览条件分支。

Ctrl+E:前面板与程序框图前后切换。


二、 基本数据类型

2.1 控件与常量

输入控件与输出控件的区别

  • 输入控件 = 来自用户的输入 = 数据源
  • 显示控件 = 给用户的输出     = 数据的目的地或“接收器”

如何创建控件与常量

  • 控件的两种创建方式
  1. 在前面板中通过控件选板创建
  2. 在程序框图中通过快捷菜单创建
  • 常量的两种创建方式
  1. 在程序框图中通过函数选板创建
  2. 在程序框图中通过快捷菜单创建

labview中数据类型可以通过连线的形状和颜色来分辨:

  • 数值型——浮点数、复数——橙色
  • 数值型——整型——蓝色
  • 布尔型——绿色
  • 字符串型——粉色

2.2 数值型

2.2.1 数值类型控件

 数值类型控件

  • 创建数值输入控件默认为双精度浮点型(DBL)
  • 可以手动改变数值类型(控件鼠标右键-属性-表示法)
  • labview中的数值类型主要分三类:浮点型、整数型、复数型
  • 类型的详细分类如下:
图标数据类型
EXT扩展精度浮点型
DBL双精度浮点型
SGL单精度浮点型
FXP定点浮点型
I6464位整型
I32长整型
I16双字节整型
I8单字节整型
U64无符号64位整型
U32无字符长整型
U16无字符双字节整型
U8无字符单字节整型
CXY扩展精度复数
CDB双精度复数
CSG单精度复数

2.2.2 数值类型转换

数值类型转换

  • 强制转换(直接在不同数据类型的数值输入输出控件间连线) 

  • 显示转换(非强制转换,即温柔转换)

程序框图鼠标右键-数值-转换

数值进制转换(仅用于整型数值) 

控件鼠标右键-显示项-基数

2.2.3 课后小练

例一:整型数值之间进行进制转换(十进制->二进制、八进制、十六进制)

例二:利用labview实现一个单位换算器

2.3 布尔型

2.3.1 布尔型控件

  • labview的布尔类型占用一个字节
  • 布尔控件的外观分为四大类(新式、银色、系统、经典)
  • 布尔型输入控件,分为按钮型布尔输入控件、开关型输入控件

按钮型:按下时会改变状态,松开时恢复状态。

开关型:按下时会改变状态,松开时会一直保持在当前稳定的状态,直到下一次按下开关。

2.3.2 布尔型控件的机械动作

  • 布尔控件机械动作图标

M:表示操作控件时鼠标的动作。

V:表示控件的输出值。

RD:表示VI读取空间的时刻

  • 布尔控件机械动作类型(转换型、触发型)

转换型(第一行三个):类似开关型,按下后一直保持值改变的状态。

触发型(第二行三个):类似按钮型,按下后值改变,随后又恢复初始状态。

2.4 字符串型

2.4.1 字符串型控件的显示方式

  • labview字符串控件有四种不同的显示方式

正常显示,\代码显示,密码显示,十六进制显示

2.4.2 字符串型控件的属性

  • 限于单行输入:只允许输入一行文本,不响应回车换行操作。
  • 键入时刷新:控件的值在输入每个字符时将同步刷新,默认情况未选中,表明必须在结束输入时才产生字符串值改变事件。
  • 启用自动换行:当输入到字符串输入控件的行末尾时,将自动转到下一行。

2.5 下拉列表与枚举控件

 下拉列表与枚举(控件->银色->下拉列表与枚举)

下拉列表和枚举都是用文本的方式表示数值.

  • 下拉列表有多种表现形式,包括文本下拉列表、菜单下拉列表、图片下拉列表、文本与图片下拉列表。下拉列表用文字或图片表示数字。数字可以是整型数、浮点数,也可以是有序值、无序值,由用户自定义它代表的数值。
  • 枚举控件只能代表整数,而且是有序的、自动分配的。

下拉列表与枚举控件的区别

  1.  下拉列表属于数值型,枚举控件属于枚举型。
  2. 下拉列表支持任何浮点实数类型,枚举只支持三种无符号整型数据(U32/U16/U8)。
  3. 下拉列表可以给每个条目设定任意值,但不能有数值相同的条目。枚举型按照顺序给每个条目设定一个整数值,从0开始,之后每个条目加1。
  4. 在条件结构选择器标签中,下拉列表按照每个条目的值判定条件是否满足;枚举控件按照每个条目的标签判断条件是否满足。
  5. 下拉列表通过控件属性设置,在程序运行时,可动态修改每一项的标签。枚举控件只能在编辑状态下修改枚举类型每一项的标签。
  6. 下拉列表都是同一种数据类型,可以直接相互赋值。而拥有不同条目的枚举属于不同数据类型,之间不能直接赋值。

三、程序结构

3.1 循环结构

3.1.1 while循环

while循环的特点

labview中的循环框图运行规律与C语言中的do-while相同,都是先执行一次循环再判断是否满足循环条件,以确定是否进行下一次循环。

while循环框图

labview中的while循环框图分为三部分:循环框架、循环计数变量、循环条件

  • 循环计数变量i:返回循环执行次数,初始值为0,每执行一次循环变量i自动加1,循环条件端用于判断循环是否执行。每次循环结束时,条件端子会自动检测输入的布尔值。
  • 循环条件端:有两种可供选择(true时停止,true时继续

true时停止:若判断循环条件端子输入的布尔值为真时,循环停止。

true时继续:若判断循环条件端子输入的布尔值为真时,循环继续。

(C++中的for循环、while循环、do-while循环,循环判断语句都是真时继续)

while循环编程注意点

  • 循环体至少执行一次
  • 条件端子有两种形式,实际应用时可灵活选择
  • 避免死循环
  • 循环结束条件可以使用错误簇

课后小练:

例1:labview中利用循环结构计算0~100的和。

猜数游戏:编程猜0~100之间的整数,直到猜对程序自动停止

3.1.2 for循环

for循环框图

labview中的for循环框图分为三部分:循环框架、循环计数、循环总数

  • 循环计数i:初始值为0,每次循环递增步长为1。
  • 循环总数N:在程序运行前必须为其赋值,该值的数据类型和循环计数数据类型一致,均为I32长整型。若将其他数据类型连接到端口,for循环会进行强制类型转换,将其自动转换为长整型。

for循环的特点

  • labview的for循环最大特点在于:循环次数固定。

故,通常用于已知代码循环次数的情况。

  • labview8.5版本后,for循环新增了功能:增加条件终止端,可提前结束循环。

for循环和while循环的比较

  • for循环
  1. 按照约定的次数执行(除非增加了条件终止端)
  2. 可以一次也不执行
  3. 默认情况下,隧道输出的是一个数组(需要禁用索引才能输出值)
  • while循环
  1. 终止执行由终止条件决定的
  2. 至少会执行一次
  3. 默认情况下,隧道输出的是一个值(需要开启索引才能输出数组)

3.1.3 循环自动索引

循环结构的数据隧道

labview循环结构的数据隧道一般有三种:

  1. 一般隧道
  2. 索引隧道
  3. 移位寄存器

数据的传入与传出

数据在循环结构中的传入与传出,遵循数据流执行模式。

  • 数据的传入:数据会在循环开始前进入。
  •  数据的传出:数据会在循环结束后输出。

“启用索引”与“禁用索引”

对于数据输入隧道,如果输入的是数组,可以通过循环快捷菜单,选择“启用索引”或者“禁用索引”。

  • 启用索引:每次循环使用数组中的一个元素。
  • 禁用索引:数组会一次性的输入或输出,即操作的是所有数据。

对于数据输出隧道:

  • 当“启用索引”时,每次循环产生的数据会形成一个数组。
  • 当“禁用索引”时,数据流出的是最后一次循环所产生的数据。
  • 一般来说,while循环默认的隧道是“禁用索引”,for循环默认的隧道是“启用索引”。

自动索引与for循环次数

当开启索引时,for循环可以根据数组长度自动设定循环次数,此时循环总数N端子可以不连接任何数据。

3.1.4 移位寄存器

移位寄存器的特性

  • 移位寄存器的依附于循环结构的。
  • 使用移位寄存器可以申请一段内存空间,用来保存中间运行结果,以供下次循环使用。(移位寄存器可在循环体之间传递数据,将上次循环的值传给下一次循环)
  • 移位寄存器是数据的容器,可以包含任何数据类型,运行中的移位寄存器是不允许更改数据类型的。
  • 移位寄存器遵循先入先出(FIFO)。
  • 移位寄存器右侧接线端存储循环结束时的数据,并在下一次循环开始时出现在左侧接线端。

层叠移位寄存器

  • 在循环中,如果需要访问之前多次循环的数据,就需要使用层叠移位寄存器。可以通过增加移位寄存器左侧接线端子的数量,用来保存前几次的运行结果。
  • 移位寄存器左侧端子有几个,就可以保存循环前几次的运行结果。当第i次循环开始时,移位寄存器左侧每一个端子会将前几次循环由右侧端子存储到缓冲区的数据送出来,左侧第一个端子送出的是第i-1次循环时存储的数据,左侧第二个端子送出的是第i-2次循环时存储的数据,依此类推。

初始化移位寄存器

移位寄存器在使用之前,还需要初始化,否则它内部保存的初始数据是毫无意义的。

反馈节点

  • 反馈节点与移位寄存器在本质上是相同的。
  • 如果单纯是为了让下一次迭代使用上次迭代的数据,也可以使用反馈节点。

3.2 条件结构

3.2.1 条件结构的基本构成

基本的条件结构由以下几个基本元素组成:

  1. 条件选择器接线端:它连接的数据类型可以是布尔型、错误簇、数值型、枚举型、下拉列表、字符串等。
  2. 条件分支增减按钮:用于浏览前一个或下一个分支,具有自动回卷功能,即到达最后一个后自动回卷到第一个条件分支,反之向前浏览到最前面分支,会自动回卷到最后面的分支。
  3. 条件分支下拉列表:以下拉列表的方式显示所有分支列表,可以在这里选择需要的分支。
  4. 条件标签:用文本的形式表现当前分支的条件(工具选板->编辑文本)。
  5. 结构体:条件分支中的空白部分,用来输入程序框图。

3.2.2 条件结构的输入

labview的条件结构可以接受多种数据类型输入,可以构成各种复杂的条件结构,下面列出条件结构中的几种典型输入:

  1. 布尔型输入:相当于C语言中的if-else结构,只有真、假两个分支。默认创建的条件结构就是布尔型输入的。
  2. 错误簇输入:错误簇输入的条件结构常用创建子VI。(创建方式:1.文件->新建N->VI->基于模板->框架->带错误处理的子VI。2.新建VI->选择条件框架->给条件结构接线端连接错误簇->绿色边框正确分支,红色边框错误分支。)
  3. 数值型输入:由于条件结构的限制,labview只允许有符号整数和无符号整数作为条件结构的输入。单精度和双精度浮点数作为输入时,会自动转换为有符号整数。对于整数数值型输入,一个分支可以表示一个数值选择或多个数值选择。条件标签中数值型输入的表示方法有很多种:
    分支标签中的输入含义
    1,3,5表示1、3、5三个数的列表方法
    1...20表示包含1~20范围内的所有整数
    ...10是范围开端口表示法,指所有小于等于10的整数
    10...是范围开端口表示法,值所有大于等于10的整数
    ...10,11,13,20是列表和范围的混合表示法,表示小于等于10的整数、11、13和大于等于20的整数
    a...d字符串范围是a,b,c,但不包含d
    a...d,d字符串范围是a,b,c,d
    注:数值型必须要有默认分支。
  4. 枚举型输入:枚举型输入的条件结构具有其他类型输入的条件结构无法比拟的特点。枚举型数据在条件结构标签中显示的是枚举的字符串,能够更直观的说明分支的具体用途。
  5. 下拉列表输入:与数值型输入的条件结构类似,这也表明了下拉列表数据类型本质上就是数值型。
  6. 字符串输入:labview条件结构的强大功能还在于条件选择器接线端可以接收字符串或组合框等。使用labview的条件结构可以处理字符串命令,这在仪表通信中非常重要。编辑条件标签文本时,不要加引号,编辑完成后,labview自动添加。

3.2.3 条件结构的输出

条件结构的输出有两种方式:

  • 在条件分支内部输出数据
  • 通过数据输出隧道,在条件结构外部输出数据

注:尽量避免在分支内部输出数据,应该通过隧道输出,特别是调用子VI时。

 条件结构的分支输出隧道有三种形式:

  • 实心方框:表示数据已连接。
  • 空心方框:表示有分支未连接,此时程序错误无法运行。
  • 半空心状态:表示有分支未连接,但使用默认值。

3.3 顺序结构 

3.3.1 平铺式顺序结构

程序执行顺序

  • 传统文本编辑语言的语句是按照顺序从上到下逐条进行。
  • labview程序是由数据流驱动。
  • 若程序中有两个无数据线连接的程序,则labview自动把它们放置到不同的线程中并行执行(自动多线程)。

在labview中顺序结构有两种:平铺式和层叠式。

 平铺式顺序结构的创建

  • 顺序结构执行时会按照帧的顺序由小到大依次执行。
  • 平铺式顺序结构更利于代码的阅读、更直观。
  • 平铺式顺序结构在外形上是平铺,占用更多空间。

3.3.2 层叠式顺序结构

从本质上看,平铺式顺序结构和层叠式顺序结构是相同的,二者可以相互转换。

层叠式顺序结构的创建

  • 层叠式顺序结构适用于帧数量较多的场合。
  • 层叠式顺序结构将每帧代码都叠放隐藏,用户只能看到其中一帧。
  • 优点:节省程序框图空间。
  • 缺点:代码不直观,可读性较差。

3.3.3 顺序结构中帧间的传递

平铺式数据结构:主要采用隧道来实现帧间的数据传递。

层叠式数据结构:主要采用顺序局部变量来实现帧间的数据传递。(顺序局部变量上的箭头,表示数据流动方向)

顺序局部变量: 

顺序局部变量的使用使得层叠式顺序结构可读性降低,顺序局部变量只能通过翻看结构中的每一帧来找到数据源和接收数据的节点,其次由于一个顺序局部变量在每一帧的位置都固定,导致某些数据线上数据流动方向与从左向右的习惯不符。

labview编程的主要特点是数据流形式,这便于VI按照并行方式运行,优化了程序的计算性能。

顺序结构强行中断了labview固有的数据流程,人为规定了运行次序,禁止程序并行操作,而且顺序结构不能从指定的某帧开始执行,只能从第0帧开始直到最后一帧结束,在顺序执行中途不能停止该执行。所以用户在编程时应尽量不用或少用顺序结构,只有在必要的时候才使用。

3.3.4 局部变量

局部变量的定义

  • 局部变量的作用域是局部的,它用于单个VI中传输数据。
  • 局部变量 不能单独存在,与某个输入控件或显示控件对应。
  • 局部变量代表控件的值的属性,而不是控件的本身。
  • 一个控件可以生成数量不受限制的局部变量,每一个局部变量都需要复制它所代表的控件所包含的数据。

局部变量的创建 

  • 局部变量既可以用作写入数据,也可以作为读出数据。(右键快捷菜单->转换为读取/转换为写入,即可改变局部变量的数据流向)。

局部变量的典型应用 

  • 初始化

程序启动时,控件的初始化很重要,虽然在编程时可以设置控件的默认值,但有时候,启动初始值往往与上次结束时的状态有关。

  • 把数据写入输入控件或从显示控件读取数据
  • 并行循环间共享数据

注意事项:

  • 每一个局部变量都要引起数据的复制,小号更多内存。大的数据结构不宜使用局部变量,因为复制内存,所以局部变量的运行速度远快于控件的值属性。
  • 局部变量的使用还可能引起数据竞争。
  • 因此,在使用局部变量之前要仔细斟酌。 

四、数组及数组函数

4.1 数组的创建

4.1.1 数组的定义

  • 数组是相同类型元素的集合。
  • labview中的数组元素可以为任意数值类型(数值型、布尔型、字符串型、路径、波形、簇),但不能是数组、图表、图形
  • 数组元素必须同时都是输入控件或同事都是显示控件。
  • 数组的元素和维度

数组由元素和维度组成,元素是组成数组的数据,而维度是数组的长度、高度或深度。

  • 数组元素的索引

对数组元素的访问是通过索引进行的,索引从0开始,索引值的范围是0~n-1,其中n是数组中元素的个数。

4.1.2 数组的创建

  • 在前面板上创建数组控件

  • 在程序框图中创建数组常量

  • 采用循环结构产生数组

  • 采用数组函数创建数组

4.2 数组的运算

4.2.1 数组的运算函数

labview中有些函数专门针对数组,例如计算数组长度、排序、计算最大值最小值。也有一些函数,本来用于数值类型、布尔类型等数据的计算,也可直接用于对相应数据类型的数组进行计算。

labview可以根据输入数据的类型判断相应的运算方法,即自动实现多态。例如,在labview中可以直接将两个数组相加,labview会自动根据数组大小、数据类型决定相应的运算方法。

4.2.2 数组之间的加减乘除运算 

对于加减乘除,数组之间的运算满足以下规则:

  • 相同维度、相同大小的数组运算

将两个数组中索引相同的元素进行运算形成一个新的数组。

  • 相同维度、不同大小的数组运算

将忽略较大数组多出来的部分。

  • 数组与标量的运算

将数组的每个元素都和该数值进行运算。

  • 空数组

相同维度的数组与空数组进行运算,结果为空数组。 

4.2.3 数组之间的比较运算 

对于比较函数,数组之间的运算规则:

可在右键菜单中选择“比较元素”或“比较集合”

  • “比较元素”:是对两个数组中对应的每一个元素分别进行对比,比较结果构成一个同长度的布尔型数组。

  • “比较集合”:把数组整体作为一个数据,与另一个数组比较,结果为真或假。 

4.3 数组函数的使用

在labview中提供了大量VI函数用于数组相关的操作,这些函数的功能十分强大,使用非常灵活,参数也很多变。同一问题往往可以用多种函数来解决,因此仔细分析它们的用法非常重要,下面对常用的一些数组函数进行举例说明:

  • 数组大小函数

通过该函数返回数组每个维度中元素的个数。对于一维数组,该函数返回一个I32位整型数值,表示一维数组的长度。对于二维或多维函数,则返回一个元素为I32类型的数组,数组中每一个元素表示对应维数的大小。

  • 索引数组函数

通过该函数主要用于返回数组的元素或子数组。对于一维数组,该函数返回其中某个元素。对于二维或多维数组,该函数不仅可以返回数组中的某个元素,还可以返回数组的某行或某列。

  • 替换数组子集函数

该函数功能是从索引中指定的位置开始替换数组中的某个元素或子数组。“索引”输入端子如果不连接,则默认从0开始替换。若索引号和子数组长度大于原数组长度,则只替换到末尾,多余部分将被省略。

  • 数组插入函数

该函数功能是在n维数组中索引指定的位置插入元素或子数组。如果未连接索引则自动将新增内容加至数组末尾。如果指定的索引超出原数组范围,则操作被忽略。

  • 删除数组元素函数

该函数从数组删除一个元素或子数组,输出端子将返回删除后的数组子集和已删除的元素或子集。当索引未连接时,自动从数组末尾开始删除。

  • 初始化数组函数

函数功能是创建n维数组,每个元素都初始化为元素的值。数组大小定义的是数组的长度,向下拖动“维数大小”输入端可以增加维数。初始化数组的维数可为0,如果维数为0,则初始化后的数组为空数组。

  • 创建数组函数

该函数有两个功能:

  1. 可将多个数组合并为一个数组
  2. 可将新的数组或数组元素连接到数组尾端

在该函数的快捷菜单中,选择“连接输入”选项可以将输入数组连接起来,否则将数组合并为高一维的数组。

  • 数组最大值与最小值函数

该函数返回数组中最大、最小值及其索引。

  • 一维数组排序函数

该函数返回元素按升序排序的数组。如需要降序排列,对升序数组反转即可(加个反转一维数组函数)。

  • 搜索一维数组函数

此函数搜索一维数组中是否存在指定元素。如果存在,则返回元素的索引号,如果不存在,返回-1。搜索到第一个符合条件的元素后,搜索立即停止,如果需要搜索多个或全部符合条件的元素,可以通过while循环来实现。

  • 一维数组移位函数

当输入参数n>0时,该函数将数组最后n个元素置于前端。

当输入参数n<0时,该函数将数组前面n个元素至于后端。

  • 数组至簇和簇至数组函数
  1. 数组至簇函数:将一维数组转换为簇,簇元素和一维数组元素类型相同。数组可以自由改变大小,而簇的大小是固定的。这就需要在转换之前,手动指定簇的大小(右键单击函数,快捷菜单“簇大小”,设置簇中元素的数量)。簇的大小默认是9,最大是256
  2. 簇至数组函数:该函数要求转换的簇元素类型必须相同。

五、簇及簇函数

5.1 簇的创建

5.1.1 什么是簇?

  • 簇是由不同类型的数据元素组成的一种数据类型。
  • 使用簇可以为编程带来便利:
  1. 程序框图中不同数据类型的多个数据捆绑成簇,减少连线混乱。
  2. 子VI中有多个不同数据类型的参数输入输出时,将某些控件组成一个簇,可以减少连接板上的接线端数量。

5.1.2 簇的创建

创建方式:

  • 在前面板创建簇输入控件和显示控件。

注:簇不能同时含有输入控件和显示控件

  • 在程序框图中创建簇常量。

粉色——混合簇

褐色——数值簇

5.1.3 错误簇

控件选板->选择“数组、矩阵与簇”->选择“错误输入3D”和“错误输出3D”

黄褐色——错误簇

  • labview使用错误簇返回错误信息。
  • 错误簇包含的元素:
  1. 状态——布尔值,产生错误时布尔值为真。而无错误时布尔值为假。
  2. 错误代码——32位有符号整数,标识错误代码。
  3. 错误源——字符串,标识错误发生的位置

5.2 簇元素顺序

5.2.1 簇的大小

  • 簇的大小固定,簇元素相互独立(不同数据类型的多个元素)。
  • 自动调整簇外观大小。(无、匹配大小、垂直排列、水平排列)

5.2.2 簇元素顺序

  • 簇的逻辑次序:簇元素顺序与元素控件的位置无关。
  • 簇元素重新排序

右键(垂直排列or水平排列)->右键(重新排序簇中控件)->白框为原来顺序,黑框会更改后顺序->确认

5.2.3 簇与数组的比较

  • 簇可以包含不同数据类型,数组仅包含一种数据类型。
  • 簇与数组都只能包含输入控件或显示控件,不能同时包含两种控件。

5.3 簇函数使用

本讲主要讲解一些常见的簇函数:

(位于程序框图->簇、类与变体)

  • “解除捆绑”与“捆绑”函数
  1. 解除捆绑函数:功能是把一个簇中的每个元素进行分解,并将分解后的元素输出。
  2. 捆绑函数:有两种用法。                                                                                                   a.用捆绑函数将几个元素捆绑成一个簇——组合簇。                                                       b.用捆绑函数替换一个簇中的几个元素——替换簇元素。
  • “按名称解除捆绑”与“按名称捆绑”函数
  1. 按名称接触捆绑函数:按名称解除捆绑函数按指定的元素名称从簇中提取元素。
  2. 按名称捆绑函数:按名称捆绑函数是按簇中元素的名称替换簇中的元素。输入簇端子必须接线。
  • 数组与簇互换函数
  1. 数组至簇转换函数:把输入的一维数组转换为簇。
  2. 簇至数组转换函数:把输入的簇转换为一维数组,簇元素数据类型必须一致

六、图形显示器

6.1 波形图标

6.2 波形图

6.3 XY图

6.4 强度图

6.5 二维图片


七、子VI设计

7.1 图标和连线板设计

7.2 创建子VI

7.3 多态VI

7.4 可重入VI


八、条件结构


九、DAQ数据采集程序设计


十、顺序结构

相关文章:

【Labview】虚拟仪器技术

一、背景知识 1.1 虚拟仪器的定义、组成和应用 虚拟仪器的特点 虚拟仪器的突出特征为“硬件功能软件化”&#xff0c;虚拟仪器是在计算机上显示仪器面板&#xff0c;将硬件电路完成信号调理和处理功能由计算机程序完成。 虚拟仪器的组成 硬件软件 硬件是基础&#xff0c;负责将…...

IvorySQL 3.2原理解析|与Oracle 12c XML函数兼容性的实现机制

[发行日期&#xff1a;2024年4月11日] IvorySQL 3.2基于PostgreSQL 16.2&#xff0c;引入了多种Oracle XML函数的全面兼容性功能&#xff0c;同时修复了多个问题&#xff0c;更多信息请参考文档网站。 >>>新版本体验链接&#xff1a; https://docs.ivorysql.org/cn…...

SpringBoot + Dobbo + nacos

SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下&#xff0c;创建一个logs的文件夹&#xff1a;用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…...

学习笔记-微服务基础(黑马程序员)

框架 spring cloudspring cloud alibaba Eureka eureka-server 注册中心 eureka-client 客户端每30s发送心跳服务 服务消费者服务提供者 server 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-star…...

每日Bug汇总--Day05

Bug汇总—Day05 一、项目运行报错 二、项目运行Bug 1、**问题描述&#xff1a;**前端将从后台查询的数据作为参数进行get请求&#xff0c;参数为空 原因分析&#xff1a; 这种写法可能只支全局的参数调用方法的传参响应 代码实现 if (this.jishiName) {this.$http({url…...

docker、ctr、crictl命令对比

命令dockerctr&#xff08;containerd&#xff09;crictl&#xff08;kubernetes&#xff09;查看运行的容器docker psctr task ls/ctr container lscrictl ps查看镜像docker imagesctr image lscrictl images查看容器日志docker logs无crictl logs查看容器数据信息docker insp…...

uniapp 编译后分包下静态图片404问题解决方案

如上图官方说明&#xff1a; 在分包下建立一个static文件夹即可&#xff1a; 分包内代码引用图片 <image src"/分包名称/img/图片名称"></image> <image src"/dataView/img/图片名称"></image>...

第十二届蓝桥杯大赛软件赛省赛Java 大学 B 组题解

1、ASC public class Main {public static void main(String[] args) {System.out.println(...

关于openai和chatgpt、gpt-4、PyTorch、TensorFlow 两者和Transformers的关系

近两年&#xff0c;随着人工智能的火爆&#xff0c;不论通过哪个渠道&#xff0c;相信我们都听说过openai、gpt等这类名词&#xff0c;那么它们到底是什么意思&#xff0c;请看下文。 openai:是一家人工智能公司&#xff1b; openai-api&#xff1a;是openai提供的api&#xf…...

C 共用体

共用体是一种特殊的数据类型&#xff0c;允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体&#xff0c;但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。 定义共用体 为了定义共用体&#xff0c;您必须使用 u…...

智能合约:未来数字经济的基石

智能合约是一种自动执行交易的计算机协议&#xff0c;它以代码形式规定了交易双方的权利和义务&#xff0c;具有高度的可靠性和安全性。随着数字经济的发展&#xff0c;智能合约的重要性日益凸显&#xff0c;将成为未来数字经济的基石。 首先&#xff0c;智能合约在金融领域的应…...

第十一届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

第十一届蓝桥杯大赛软件赛省赛C/C 大学 B 组 文章目录 第十一届蓝桥杯大赛软件赛省赛C/C 大学 B 组1、字串排序2、门牌制作3、既约分数4、蛇形填数5、跑步锻炼6、七段码7、成绩统计8、回文日期9、子串分值和10、平面切分 1、字串排序 // 转载博客链接 https://blog.csdn.net/we…...

Lua语法(三)——元表与元方法

参考链接: 系列链接: Lua语法(一) 系列链接: Lua语法(二)——闭包/日期和时间 系列链接: Lua语法(三)——元表与元方法 系列链接: Lua语法(四)——协程 系列链接: Lua语法(五)——垃圾回收 系列链接: Lua语法(六)——面相对象编程 元表与元方法目录 简介正文元表元方法表相关常…...

Lua语法(五)——垃圾回收

参考链接: 系列链接: Lua语法(一) 系列链接: Lua语法(二)——闭包/日期和时间 系列链接: Lua语法(三)——元表与元方法 系列链接: Lua语法(四)——协程 系列链接: Lua语法(五)——垃圾回收 系列链接: Lua语法(六)——面相对象编程 Lua语法 五——垃圾回收 垃圾回收弱引用表__m…...

已解决java.net.NoRouteToHostException: 无法到达主机异常的正确解决方法,亲测有效!!!

已解决java.net.NoRouteToHostException: 无法到达主机异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 检查网络连接 核实目标地址 检查防火墙和路由器规则 验证VPN/代理设置 修正网络配置 …...

代码随想录算法训练营第三十八天| 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

题目与题解 参考资料&#xff1a;动态规划基础 动态规划五步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 题目链接&#xff1a;​​​​​​​509. 斐波那契数 代码随想录题解&am…...

视频中会动的进度条

视频中会动的进度条 1.成果展示&#xff1a;2.步骤&#xff1a; 1.成果展示&#xff1a; 2.步骤&#xff1a;...

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求&#xff1a;有一个函数每次调用返回的结果不一样。例如&#xff1a;两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量&#xff08;静态变量&#xff09;&#xff…...

vmware虚拟机补救

更新了虚拟机里面工具和资料&#xff0c;进行了磁盘整理和压缩&#xff0c;虚拟机运行进不去系统了。 网站找的修复方法均不可行。补救措施&#xff1a;利用DiskGenius.exe&#xff08;要用高版本不然复制的时候就知道了&#xff09; DG1342.rar - 蓝奏云 加载虚拟硬盘 2008x…...

数据结构(算法)

总结&#xff0c;建议看EXCEL的《算法》页签&#xff0c;不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP  O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度&#xff0c;只有0和m&#xff08;m叉…...

SpringCloud集成SkyWalking链路追踪并收集日志2

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)

文章目录 数学质因数分解辗转相除法求最大公约数最小公倍数&#xff1a;快速幂乘法逆元费马小定理 逆元乘法逆元素数判定与埃式筛法朴素素数判定法埃式筛法 图论并查集T3:真题--合根植物DijkstraFloyd 基础算法递归&#xff0c;循环&#xff0c;前缀和&#xff0c;差分STL 数学…...

python 最简单的网页爬虫

import requests url"https://news.ifeng.com/c/8OZc7eV01sM" rrequests.get(url) print(r.status_code) print(r.iter_lines()) # 获取响应的内容 content r.text# 打印网页内容 print(content) # responser.json() # print(response) 爬虫知识讲解&#xff1a; …...

二叉树-数据结构

二叉树-数据结构 二叉树是属性结构的一个重要类型。 如下图二叉树形状 二叉树特征如下&#xff1a; 1.二叉树由 n(n > 0) 个节点组成 2.如果 n 为 0&#xff0c;则为空树 3.如果 n 1&#xff0c;则只有一个节点称为根节点(root) 4.每个节点最多有两个节点&#xff0c;节…...

ansible使用shell模块的环境变量问题

在本机写了一个shell脚本&#xff0c;关于操作mysql的&#xff0c;在本机执行脚本可以正常操作数据库&#xff0c;脚本运行正常。 但是使用ansible ansible -i ./hosts test_teledb -m copy -a "src/etc/ansible/scripts/check.sh dest/tmp"ansible -i ./hosts test…...

ChatGPT论文写作指南:写出引人注目的论文

ChatGPT无限次数:点击直达 ChatGPT论文写作指南&#xff1a;写出引人注目的论文 作为一名有着10年经验的专业CSDN网站原创文章优质创作者&#xff0c;在当今的信息爆炸时代&#xff0c;论文写作的重要性愈发显现。如何能够写出引人注目的论文&#xff0c;吸引读者的眼球并获得…...

ARM64架构栈帧回溯

文章目录 前言一、栈帧简介二、demo演示 前言 请参考&#xff1a;ARM64架构栈帧以及帧指针FP 一、栈帧简介 假设下列函数调用&#xff1a; funb() {func() }funa() {funb() }main() {funa() }main函数&#xff0c;funa函数&#xff0c;funb函数都不是叶子函数&#xff0c;其…...

LangChain:大型语言模型(LLMs)-- 基础知识

1、LangChain的调用大型语言模型模块的介绍 LangChain是一个强大的框架&#xff0c;旨在通过调用大型语言模型&#xff08;LLM&#xff09;来开发各种语言驱动的应用程序。在LangChain中&#xff0c;LLM不仅仅是一个简单的模型调用&#xff0c;而是一个复杂链条中的关键部分。…...

总分410+专业130+国防科技大学831信号与系统考研经验国防科大电子信息与通信工程,真题,大纲,参考书。

好几个学弟催着&#xff0c;总结一下我自己的复习经历&#xff0c;希望大家复习少走弯路&#xff0c;投入的复习正比换回分数。我专业课831信号与系统130&#xff08;感觉比估分要低&#xff0c;后面找Jenny老师讨论了自己拿不准的地方也没有错误&#xff0c;心里最近也这经常回…...

chatgpt Team 4.0共享合租账号的新方式

为了更好地满足工作需求&#xff0c;我订阅了GPT PLUS会员&#xff0c;但我发现&#xff0c;4.0每三小时问答40次经常吃灰&#xff0c;而且每月近200元的费用让我感到有点肉痛。 于是&#xff0c;我开始寻找有没有什么替代品。在逛某论坛的时候&#xff0c;发现了一个共享Team…...

网站优化qq群/全国新冠疫情最新情况

掌握一定的英语知识&#xff0c;具有一定的英语水平是学习每一个专业都必备的学习计算机专业的话&#xff0c;并不会对英语水平作出特别的要求&#xff0c;因此不存在计算机专业对英语水平要求较高的这种担心&#xff0c;基本的英语术语掌握了就可以了。计算机专业的学习&#…...

wordpress调用导航菜单的内容/b站免费版入口

问题:txt进行编程操作时出现乱码-2020-6-21 场景:进行java编程时文件读入时乱码 解决:更改编码,就是另存为。 我的话修改成ANSI编码格式即可。...

真做视频网站/杭州网站搜索排名

一. Oracle 11g 默认审计说明 之前整理的一篇有关审计的说明&#xff1a; Oracle Audit 审计 说明 http://www.cndba.cn/Dave/article/1469 在Maclean 的blog上看到了2篇介绍Oracle 11g 默认审计的文章&#xff0c;原文链接如下&#xff1a; 11g默认审计选项 http://www.oracl…...

城市形象设计vi手册/百度seo新规则

gpart 分区工具 查看已经连接的设备rootlsgxbsd:~ # camcontrol devlist 1. 删除ad0上所有分区# gpart destroy -F /dev/da1注: 没有数据情况才可以这样 2. 创建gpt分区信息表# gpart create -s GPT /dev/da1 创建新的GPT分区表# gpart create -s MBR /dev/da1 创建新的MBR分区…...

涿州网站建设涿州/seo网站关键词排名优化

有三中方法可以实现验证码的功能 第一种是自定义一个filter&#xff0c;放在SpringSecurity过滤器之前&#xff0c;在用户登录的时候会先经过这个filter&#xff0c;然后在这个filter中实现对验证码进行验证的功能&#xff0c;这种方法不推荐&#xff0c;因为它已经脱离了Sprin…...

多语种网站制作/平台软件定制开发

一、压缩与解压缩1、compress [-rcv] 文件或目录 <压缩uncompress 文件.Z <解压缩-r:可以连同目录下的文件也同时进行压缩-c:将压缩数据输出成standard output(输出到屏幕)-v:可以显示出压缩后的文件信息以及压缩过程中的一些文件名变化(这个命令是非常老旧的一款)2、gzi…...