LabVIEW教程——深入理解For循环与数组操作


前言

在LabVIEW开发中,For循环与数组的组合堪称数据处理的核心利器,无论是采集、分析还是控制逻辑的实现,几乎都离不开这两个元素的紧密配合。很多初学者能搭建简单的循环结构,但在处理复杂数组或多维数据时却不知从何下手。回想我自身的学习经历,正是在深入理解For循环和数组操作之后,才真正建立了强大的信心,感觉自己算是正儿八经入门了。本教程将以具体案例为主线,深入浅出地解析For循环与数组的各种高效用法。


一、For循环

1.1 基础For循环

image-20250702204106178
  • 总数接线端(N)的值作为执行的次数。计数接线端(i)可提供当前的循环计数,取值范围是0到n-1。
  • 总数接线端(N)指定For循环内部代码执行的次数。如将0或负数连接至总数接线端,循环不执行。默认情况下,该接线端显示。

1.2 条件For循环

image-20250702213834702

条件For循环可通过上图所示方式配置,条件接线端用于指定For循环的结束条件。For循环通常在完成总数接线端指定的循环次数后结束执行。条件接线端可用来指定在某个条件(例如,错误)发生时停止For循环。

默认状态下,条件接线端设置为真(T)时停止。将条件接线端改变为真(T)时继续

1.3 并行For循环

image-20250702210045529

上图所示操作可配置For循环并行执行,提升执行效率,但请不要滥用,否则可能会适得其反。

  • 并行实例接线端指定LabVIEW执行并行循环的循环实例数量。如不连接并行实例接线端,LabVIEW将自动检测计算机逻辑处理器的数量,并将其作为默认的并行实例接线端的值。
  • 也可按照上图操作,使用并行实例接线端和For循环并行迭代对话框的生成的并行循环实例数量选项来控制For循环的执行速度。

1.4 For循环的隧道

下图所示为隧道输入示意图,循环隧道用于在For循环之间传递数据,隧道传递数据方式如下:

  • 隧道将数据传出和传入For循环,不进行额外处理。

  • 移位寄存器获取上一次循环的数据,并将数据传递至下一次循环。

  • 将数组或群体数据类型连接至For循环的输入隧道时,自动索引隧道每次读取数组或群体的一个元素,同时数组或群体数据元素个数也决定For循环执行次数,若有多个数组或裙子数据类型连接For循环的输入隧道,以元素最少的个数确定For循环执行次数。

image-20250719095821541

下图所示为隧道输出,分别是Last Value、Indexing、Concatenating、Conditional,各含义如下:

Last Value:For循环返回最后一次循环的输出值;

Indexing:循环生成的数组;

Concatenating:如果是字符串则返回是连接后的字符串,如果是数组则返回相连接后的数组;

Conditional:可配置条件是否输出Indexing数组元素。

image-20250719095152332

二、数组

2.1 数组简介

LabVIEW数组是一组相同数据类型的集合,每个元素通过索引访问,索引从 0 开始。例如,一个包含 [1, 2, 3, 4, 5] 的数组可以通过索引 2 访问到值 3。LabVIEW 支持一维(1D)数组和多维数组(如2D 矩阵)。下图所示为数组操作函数。红框框住部分为比较常用的函数,几乎可以满足日常使用,可自行使用了解各函数作用。

202507102037557

三、示例

接下来以实际代码进一步练习,请思考以下一个功能:

给定一个16行*16列的二维数组,元素类型为I32数值类型,数组元素大部分都是0,其余零星分布的元素1;现在要编写一个算法实现,将该二维数组中元素为1的上下左右相邻是0的元素替换为2。下图为示例二维数组常量,可先自行思考,与下述思路对比。

image-20250713201010922

思路:

1.考虑特殊情况,比如元素1在边缘时,属于特殊情况,需特殊处理;

2.先通过两层For循环隧道输入,将元素是1的行列索引找到连接成簇数组,这里可以用到For循环隧道输出的Indexing,Concatenating以及Conditional;

3.再用一个For循环,将元素为1的行列簇数组接入For循环隧道输入,分别计算该元素上下左右的元素行列索引;

4.如果计算的行或列索引小于0,说明是在边缘,则不做任何处理;若计算的行列索引不小于0,则判断该元素是否为0,如果是0则替换为2,否则不做处理,这个逻辑是通用的,可封装为一个子VI,这里为方便介绍,将子VI名称定义为Replace;下图所示为Replace子VI的程序框图;

image-20250719152239643

5.将第三步计算的上下左右元素索引分别捆绑成簇,然后创建簇数组,以For循环和寄存器的形式调用第4步的子vi,下图所示为最终代码。

image-20250719153928259

以示例二维数组常量为输入,执行上述代码后生成的Array out如下图所示,可以看到元素1上下左右元素都已替换为元素2。

image-20250719160700299

对于上述代码,前边的双层For循环也可配置为并行执行提升效率,但如果数据量较小,效率提升不太明显;对于使用了寄存器的For循环,是不能配置并行执行的,会报错,从原理上也比较容易理解。

思考题:

示例的二维数组的各元素增加相对于左上角第一个元素的距离信息X和Y,假设每个元素都代表一个边长为1的正方形,现将元素1周围半径为 r=2 的范围内的为0的元素都替换为2,然后输出只包含元素的二维数组。下图所示为增加距离信息的二维簇数组部分元素示意。

对于初学者,若能思考自主实现,算是对LabVIEW有了较为深刻的认识,也对LabVIEW的学习建立了强大的信心。

image-20250719163518335

总结

本文到此就结束了,文中示例仅做学习说明,希望可以起到抛砖引玉的作用。可关注博主,WeiXin同名,后续会针对重点知识点进行扩展,也会分享自己的工作学习知识点,帮助大家更好的学习和使用LabVIEW。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未央LabVIEW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值