写子 VI 的时候,绝大多数人只关心两件事:里面算得对不对,外面连线顺不顺。
连接板(Connector Pane)常常被当成"自动生成的东西",从不打开看一眼。但它其实是子 VI 唯一的对外契约------里面怎么改都行,连接板一变,所有调用处都得跟着动。
CLAD 第 13 讲里,有 4 道题专考连接板:端子数上限、端子的方向、三种连线优先级、动态分配。这篇把它们串起来讲。
01 28 个端子,是怎么算出来的
13-05 那道题很直接:一个 VI 的连接板最多能有多少个端子?
答案是 28。
这个数字不是拍出来的,它来自 LabVIEW 连接板图案的排布规则。图案用一串数字命名,比如题库里出现的 4x2x2x4,读法是:
- 上下两排各 4 个(共 8 个);
- 左右各有两列,每列 2 个(共 8 个);
- 合计 12 个端子。
按同样的规则推到极限,就是 8x2x2x2x2x2x2x8:上下两排各 8 个,加上六列、每列 2 个。
8 + 8 + 2×6 = 28。
所以 28 不是"软件的限制",是这个排布模型的算术上限。你选不到第 29 个端子,因为图案里没有那个位置。

配图 1
这个上限在实战里的意义不是"我能不能用到 28",而是反过来:当一个子 VI 的端子数逼近十几个的时候,就该怀疑它是不是该拆成两个了。 我见过一个采集子 VI 有 19 个输入端子,改一个参数要翻三页说明,最后谁都不敢动。那不是模块,那是一段被包装起来的意大利面。
02 端子在哪一边,不代表它是输入还是输出
13-04 是这批题里最容易被绕进去的一道。
题目给两个子 VI,用的是同一个 4x2x2x4 连接板,各只连了一个端子------子 VI #1 的端子 A,子 VI #2 的端子 B。问哪个说法正确。
正确答案是:A 连的是子 VI #1 内部的控件(control),B 连的是子 VI #2 内部的显示控件(indicator)。
也就是说,A 是输入,B 是输出,但这个结论不是从位置推出来的,是从"它连的是什么"推出来的。
很多人默认"输入在左、输出在右",其实 LabVIEW 只给了一句建议,没做强制。你完全可以把一个控件(输入)放到连接板的右下角,把一个显示控件(输出)放到左上角,LabVIEW 照样编译、照样运行。
题库里那道题的选项还埋了一个彩蛋:有个选项说"这是 Steve 用 GIMP 修图修的"。出题人自己也知道,这题看起来像是在开玩笑------因为位置真的不说明任何事。
真正决定方向的是三件事:
- 你在子 VI 里面板上的那个控件,是输入控件 还是显示控件;
- 你在连接板上右键它,选的
This Connection Is里是 Input 还是 Output; - 连到调用处时,线是"流进去"还是"流出来"------这个由前两条决定,不由坐标决定。
那为什么大家都把输入放左边?因为读图的人从左往右读,这符合数据流的直觉。这是工程约定,不是语法。
03 三种优先级:Required、Recommended、Optional
这是 13-19 那道多选题的核心,也是最容易答错的地方。
右键连接板上的任意一个端子,会看到三选一:
- Required(必需):不连线,调用节点直接断线,程序跑不起来。这是硬约束。
- Recommended(推荐):不连线也能跑,未连的输入使用默认值。这是默认设置。
- Optional(可选):不连线也能跑,同样使用默认值,但含义上更弱------它表示"这个参数你基本可以不管"。
Required 和另外两个的差别是硬的,一眼能看出来:没连线,Run 箭头就是断的。
Recommended 和 Optional 的差别是软的,只能从提示上看出来。在 Context Help 窗口里,三种端子的显示样式不同:Required 最醒目,Recommended 正常,Optional 更淡。这是给读代码的人看的信号,不是给编译器看的。
顺手把另外两个选项说清楚,因为它们经常被混:
- 默认的端子类型是 Recommended,这是对的。
- 默认值不是在 Tool 菜单里改 ,而是在
Tools >> Options >> Front Panel,那里有一个"Connector pane terminals default to"的下拉框,可以改成 Required 或 Optional。
所以 13-19 的正确组合是:输入端子能设三种、输出端子也能设三种、默认是 Recommended、Context Help 里显示不同。至于"在 Tool 菜单里改默认"那两条,是拿来骗人的------菜单位置记错,是这类题最常见的失分点。
实战里怎么用这三档?

配图 2
- 电源、通道号、采样率这种不给就没法算的,设 Required,让编译期就拦住;
- 超时、单位换算系数、调试开关这种有合理默认值的,设 Recommended;
- 几乎不用改、只在特殊场合才动的(比如内部测试用的句柄),设 Optional。
一个子 VI 如果所有端子都是 Required,用起来会很累;全都 Recommended,又容易在别人漏连参数时静默算错。分档本身就是接口设计的一部分。
04 动态分配:为什么只能有一个输入
13-08 那道题给的图里,连接板的左上和右上两个端子被画上了特殊的标记。答案:这两个端子被配置成了动态分配(Dynamic Dispatch)。
规则有两条,一条硬一条松:
- 动态分配的输入端子,一个 VI 最多只能有一个,而且必须标记为 Required;
- 动态分配的输出端子可以有多个。
为什么输入只能有一个?因为动态分配的本质是"按这个输入的运行时类型,去决定调用哪个成员 VI"。如果允许两个动态输入,两个类型指向不同的实现,LabVIEW 就不知道该听谁的。
这个设计跟面向对象里的"单分派"是一个道理:方法由接收者(第一个参数)的类型决定,其余参数只是参数。
动态分配不是"多态 VI"。这两个概念在中文里都叫"多态",但完全不是一回事:
- 动态分配(Dynamic Dispatch):面向 LabVIEW 类,靠继承和重写,运行时按对象类型选实现。需要 LabVIEW 面向对象模块。
- 多态 VI(Polymorphic VI) :是一个"外壳",里面装若干实例 VI,按输入数据的类型(数值、字符串、数组、簇)自动选一个。不需要类,是编译期就能确定的选择。
一句话分开:多态 VI 看数据类型,动态分配看对象类型。

配图 3
05 连接板设计的五条规矩
这部分不是题库内容,是我自己这些年改别人代码改出来的。
一、输入从左到右,按"重要性递减"排。
最常用的参数放最前面。别按变量名的字母序排,那是给机器看的。
二、错误簇固定放最左下、最右下。
这是 LabVIEW 的通行约定,几乎所有自带 VI 都这么干。你把错误簇放中间,别人一眼就找不着。
三、同一类信号聚在一起。
三个通道号挨着放,别被一个字符串参数隔开。
四、端子数控制在 12 个以内。
超过 12 个,说明这个子 VI 承担的职责太多。参考 28 这个上限------上限是给编译器看的,12 是给人看的。
五、连接板图案和面板布局对得上。

配图 4
面板上控件在左、显示在右、错误簇在底,连接板就按同样的方位排。这样调用者不看文档也能猜对连线。
写在最后
连接板是子 VI 的"门面",但它的设计成本极低------右键点几下就完了。所以它最容易被敷衍,也最容易在半年后反咬你一口。
判断一个连接板设计得好不好,有个很简单的测试:把子 VI 的面板关掉,只看连接板,你能不能猜出每个端子该接什么。 猜得出,设计就对了;猜不出,说明你在靠记忆维护接口。
下一篇讲子 VI 的三笔隐形开销:内联到底省了什么、递归为什么必须开可重入、按引用调用和静态调用的数据空间差在哪。
你见过最离谱的连接板长什么样?说说看。