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

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

条件For循环可通过上图所示方式配置,条件接线端用于指定For循环的结束条件。For循环通常在完成总数接线端指定的循环次数后结束执行。条件接线端可用来指定在某个条件(例如,错误)发生时停止For循环。
默认状态下,条件接线端设置为真(T)时停止。将条件接线端改变为真(T)时继续。
1.3 并行For循环

上图所示操作可配置For循环并行执行,提升执行效率,但请不要滥用,否则可能会适得其反。
- 并行实例接线端指定LabVIEW执行并行循环的循环实例数量。如不连接并行实例接线端,LabVIEW将自动检测计算机逻辑处理器的数量,并将其作为默认的并行实例接线端的值。
- 也可按照上图操作,使用并行实例接线端和For循环并行迭代对话框的生成的并行循环实例数量选项来控制For循环的执行速度。
1.4 For循环的隧道
下图所示为隧道输入示意图,循环隧道用于在For循环之间传递数据,隧道传递数据方式如下:
-
隧道将数据传出和传入For循环,不进行额外处理。
-
移位寄存器获取上一次循环的数据,并将数据传递至下一次循环。
-
将数组或群体数据类型连接至For循环的输入隧道时,自动索引隧道每次读取数组或群体的一个元素,同时数组或群体数据元素个数也决定For循环执行次数,若有多个数组或裙子数据类型连接For循环的输入隧道,以元素最少的个数确定For循环执行次数。

下图所示为隧道输出,分别是Last Value、Indexing、Concatenating、Conditional,各含义如下:
Last Value:For循环返回最后一次循环的输出值;
Indexing:循环生成的数组;
Concatenating:如果是字符串则返回是连接后的字符串,如果是数组则返回相连接后的数组;
Conditional:可配置条件是否输出Indexing数组元素。

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

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

思路:
1.考虑特殊情况,比如元素1在边缘时,属于特殊情况,需特殊处理;
2.先通过两层For循环隧道输入,将元素是1的行列索引找到连接成簇数组,这里可以用到For循环隧道输出的Indexing,Concatenating以及Conditional;
3.再用一个For循环,将元素为1的行列簇数组接入For循环隧道输入,分别计算该元素上下左右的元素行列索引;
4.如果计算的行或列索引小于0,说明是在边缘,则不做任何处理;若计算的行列索引不小于0,则判断该元素是否为0,如果是0则替换为2,否则不做处理,这个逻辑是通用的,可封装为一个子VI,这里为方便介绍,将子VI名称定义为Replace;下图所示为Replace子VI的程序框图;

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

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

对于上述代码,前边的双层For循环也可配置为并行执行提升效率,但如果数据量较小,效率提升不太明显;对于使用了寄存器的For循环,是不能配置并行执行的,会报错,从原理上也比较容易理解。
思考题:
示例的二维数组的各元素增加相对于左上角第一个元素的距离信息X和Y,假设每个元素都代表一个边长为1的正方形,现将元素1周围半径为 r=2 的范围内的为0的元素都替换为2,然后输出只包含元素的二维数组。下图所示为增加距离信息的二维簇数组部分元素示意。
对于初学者,若能思考自主实现,算是对LabVIEW有了较为深刻的认识,也对LabVIEW的学习建立了强大的信心。

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