labview自定义控件Control, Type Def. ,Strict Type Def.区别(转)

本文详细介绍了LabVIEW中用户自定义控件的三种定义形式:无关联控件、类型定义控件及严格类型定义控件,并解释了它们之间的区别与应用场景。

   为了解释清楚,先定义一下要用到的概念。我们把以 .ctl 文件名定义的控件叫做用户自定义控件,把通过拖拽或打开这个 .ctl 文件在 VI 上生成的控件叫做实例。

    LabVIEW 的用户自定义控件包括了三种定义形式:打开一个 .ctl 文件,在它上方的“control”下拉条中有三个选择,分别是无关联控件(Control)、类型定义(Type Def.)或者严格类型定义(Strict Type Def.)。
    无关联控件是指这个控件与它的实例之间没有任何关联。例如,你制作了一个漂亮的按钮控件保存在 .ctl 文件中。需要用到它时,通过拖拽或打开这个 .ctl 文件就可以在 VI 中生成这个用户自定义控件的一个实例。这个实例一旦生成,就和原用户自定义控件无任何关联了。无论是你修改这个实例,还是修改原用户自定义控件,都不会对 另一方产生任何影响。
    类型定义控件是指实例控件与用户自定义控件的空间类型是相关联的。比如,你的用户自定义控件是一个数值型控件,那么它的所有实例控件也都是数值型的。如果我们在 .ctl 文件中把用户自定义控件的类型改为字符串,那么它已有的所有实例都将自动变成字符串类型。
    有时候,只是类型相关联还不够。比如对于 Ring(Enum,Combo Box)这类的控件来说,如果在用户自定义控件中添加了一项内容(item),一般总是希望它所有的实例也同时添加这一选项。如果使用类型定义控件,因为 控件类型没变,还是 Ring,实例们是不会自动跟随更新的。这时就需要使用严格类型定义控件。选择严格类型定义后,不但实例与用户自定义控件的类型是相关联的,其他一些控件 属性,比如颜色等等,也是相关联的。

    使用严格类型定义时有一点容易被误解:严格类型定义只是与实例控件相关联,由它生成的实例常量的属性是不与之关联的。实例常量是指通过拖拽或生成常量等方 法,在程序框图上生成的一个与 .ctl 文件相关联的常量。比如在 Ring 型用户自定义控件中添加了一项内容,相关的实例常量是不会发生任何改变的。很多人按常理想,认为常量也应当自动更新,但事实上不行。这也是我不采用它做常 量定义的原因之一。

### LabVIEW自定义控件与子VI的区别 #### 定义与功能差异 LabVIEW中的自定义控件(Control, Type Def., Strict Type Def.)主要用于构建具有特定外观和行为的界面组件,这些组件可以被重复利用于不同VI中[^4]。而子VI(Sub-VI)则是用于封装复杂逻辑的功能模块,通常作为独立单元参与程序设计。 - **自定义控件** 自定义控件主要关注的是UI层面的设计,允许开发者创建统一风格或特殊需求的输入/输出接口元件。例如,通过设置类型定义(Type Def.)或严格类型定义(Strict Type Def.),可以在多个地方同步更新控件样式及其数据类型约束条件[^3]。这意味着当某个项目的规格发生变化时,只需调整源CTL文件即可让所有引用处反映最新改动。 - **子VI** 子VI更侧重于算法实现和技术细节处理方面的工作。它们能够接收参数并返回计算结果,类似于传统编程语言里的函数调用机制。借助图形化连接方式来传递信号流信息,有助于简化主流程图布局的同时提高代码重用率[^2]。 #### 使用场景对比分析 | 特性 | 自定义控件 | 子VI | |--------------------|-----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | 主要用途 | 创建标准化、可共享的人机交互部件 | 将复杂的业务逻辑拆分成易于管理的小块 | | 数据交换形式 | 基于预设的数据结构(如簇Cluster) | 输入端口(Output Terminals)/输出端口(Input Terminals),支持任意合法LVDT(LabVIEW Data Types) | | 更新一致性 | 支持通过Type Definition或Strict Type Definition维持跨实例的一致性 | 需手动维护各版本间兼容性;每次修订可能涉及重新验证测试 | | 性能开销 | 较低,仅限于显示效果优化 | 取决于具体实现内容,可能会引入额外负载 | ```python # 示例:如何在一个项目里有效运用两者优势? def main_program(): custom_control_instance = load_custom_control('path_to_ctl_file') # 加载预先配置好的Custom Control sub_vi_result = call_sub_vi(custom_control_instance.get_value()) # 调用Sub-VI进行进一步加工操作 display_output(sub_vi_result) if __name__ == "__main__": main_program() ``` 上述伪代码展示了将定制化的前端元素同后台服务相结合的一种常见实践模式。其中`load_custom_control()`负责初始化所需表单字段对象;随后将其读取到的结果传送给专门负责核心运算工作的外部模块(`call_sub_vi()`)完成最终呈现前必要的换步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值