相信大家在使用软件时常常会用到控件的严格类型,遇到之后也搞不懂有什么用,看了文章也没看懂,那么本篇文章就通过举例和论证的方式向大家介绍一下如何使用严格控件类型。那么严格类型的控件有什么用呢?
读这篇文章之前我们应该首先明白一个点就是严格类型特指的对象是谁?,本文将针对两种严格类型所依赖的对象进行介绍。
这里题主就不跟大家卖关子了,严格类型一般有两种使用场景:
第一种使用场景一般是在属性节点或引用节点中使用
第二种使用场景的话就是在自定义的控件类型中使用。
那么什么是引用呢? 题主之前写过一篇关于引用的文章以及引用和属性节点等的使用方法的对比,那么大家如果对引用的使用不太清楚的话可以直接看下面这篇文章来深刻的了解一下。 文章的链接如下所示:
Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲
有关于引用的讲解大家可以直接跳转上述链接中文章的1.3节去查看并了解。
1.严格类型引用的定义
严格这个词语大家可以理解为 “不变” ,指的是一个控件或者一个VI它的数据类型和它的属性是不会变化的,比如说一个DBL类型 的数值控件,当使用严格类型引用时那么这个控件的数据类型就不会发生改变,比如我们将U8的数据输入到DBL类型控件中, U8类型的数据会强制转换为DBL类型的数据。如下图所示:
我们将一个U8类型的数值输入到DBL类型的严格引用的属性节点值中,可以看到在红色箭头处有一个红色的小点儿,这个点就代表U8类型的数据强制转换为了DBL类型的数据。
关于数据类型和数据类型的强制转换,有不懂的同学可以直接点开下列链接,题主之前讲过一篇有关于数据类型的文章,大家可以直接补一下这方面的知识。
8.Labview数据类型及强制类型转换https://blog.csdn.net/m0_52176775/article/details/138847314
严格类型控件引用句柄仅接收数据类型完全相同的控件引用句柄!。这里跟大家提前说一下:字符串是没有严格类型引用的(其中包含了字符串数组),数值和布尔等控件是有严格类型引用的,如下图所示:
至于为什么,题主在上面曾经提到过,严格类型的控件中的数据是可以强制转换的,那么严格类型肯定是基于一种控件有多种数据类型的情况,对于字符串来说,他是没有多种数据类型的,一般字符串显示为ASCII码的形式。
2.严格类型的分类
开篇的第一张图片题主已经向大家介绍过了,严格类型一共有三种形式,下面就这三种形式分别介绍一下这三种严格类型即:控件引用严格类型, VI引用严格类型,自定义控件严格类型的特点及区别
2.1 控件引用严格类型
由1.1中可以看到,所有的控件中除了字符串类的控件外其它引用均有严格类型,再次强调一遍: 控件严格指的就是它的数据类型是不会发生变化的,如果输入一个和它数据类型不同的控件就会被强制转换为严格控件的数据类型。下图可以看到:
如果还不明白的话我直接用实例来表达一下:如下图所示,将一个带小数点的数值输入到一个整数控件中,这个小数点数值被强制转化为了1和26,这个转换是遵循四舍五入原则的。
2.2 VI引用严格类型
这里可以先看一下如何创建一个VI引用的严格类型,我们看NI官方给的解释:
创建一个严格类型 VI 引用,即带严格类型定义的引用,使用通过引用调用节点或开始异步调用节点动态调用 VI。严格类型的 VI 引用不仅指向被调用的 VI,还指定了 VI 的连线板。按照下列步骤,为“通过引用调用”节点或“开始异步调用”节点创建一个严格类型 VI 引用。
①在程序框图上放置打开 VI 引用函数。
②将用于创建严格类型引用的 VI 的路径连接至“打开 VI 引用”函数的 VI 路径输入端。
③右键单击“打开 VI 引用”函数的类型说明符 VI 引用句柄输入端,从快捷菜单中选择创建»常量。
④右键单击类型说明符 VI 引用句柄常量,选择选择 VI 服务器类»浏览,在弹出的文件对话框中选择一个 VI。也可选择前面板或程序框图窗口右上角的 VI 图标并将其拖曳到类型说明符 VI 引用句柄常量。选中 VI 后,引用的左上角将出现一个带有删除线的图标,表示该引用为严格类型引用。
这种引用类型用于VI相关的操作,对于严格类型的VI,其属性也是不可变的,这种严格调用VI的方式一般用于“异步调用”。有异步调用结构需求的同学请打开 “帮助 ---- 查找范例 ---- 搜索框输入异步调用 ----双击点开范例” 即可学习在严格VI引用下的异步调用程序相关的使用方式,如下图所示。
2.3 自定义控件严格类型
这一节的内容是题主最想跟大家分享的,因为本节在一些大型程序中能常用到这种调用的方式。
首先要强调一下这种类型用法的好处:
当我们在使用一些没有严格类型的控件的的时候,当原来的控件发生变化的时候,那这个时候的子VI中的引用就不可以用了,因为这个引用就相当于一个指针(C语言中的指针,不了解这个概念也没关系),它指向的是原来的那个控件。但是如果在一个严格类型的自定义控件上使用引用的话,当这个控件的类型发生变化的时候所有的调用过该控件的引用的格式都随着这个控件发生变化,不用一个一个去改, 这就是它的优点。那么直接上实例来帮助大家理解具体的情况:
①首先将一个DBL类型的数值控件右键单击制作自定义类型,然后再次右键单击打开自定义类型,就会跳转至一个类似于VI设计的界面,只不过这个界面没有后面板。
②在自定义类型中的下拉框中单击严格自定义类型,然后依次单击文件 ----- 应用改动,然后将该自定义控件保存在电脑上,这样一个严格类型的自定义控件就创建完成了。
③为了对比,创建了一个没有严格的控件,可以看到自定义过的控件左上角比未定义的多了一个小三角,我们新建一个子VI并将这两个控件复制到新的子VI中,然后在子VI中分别引出两个控件的线。
④此时我们将主VI中两个控件的数据类型右键点击表示法,由DBL格式变为U8格式 (自定义的控件需要打开自定义类型更改格式),由下图所示查看主VI和子VI中两个控件的区别。
不知道大家能不能看出两种控件类型的区别,严格类型的控件是随着自定义控件一直改变的 (无论在哪个VI中),就比如说我的控件发生变化的时候后边所有的控件都随着它变化,但是非严格类型的数据发生变化的话,后边是不动的,我们得一个一个的去改。
以上的例子是为了给大家讲解一下严格自定义类型的优点,在我们实际编程的过程中往往会调用大量的子VI,而且子VI中可能会重复使用同一个控件,如果我们使用了严格类型的自定义控件的前提下,如果发生数据类型的转换的时候我们仅需要更改一个控件即完成了后续所有控件的更改,而不用浪费很多的时间去逐个更改,大量缩减了编程的时间。
3.总结
严格类型的无论是控件还是VI,均强调一个“严格”,我们或许也可以用 “强硬”和“固执” 来表达这个词语。大家理解后,都有自己对这个概念的认识
在了解这个概念之前,题主也到处查资料试图理解这个功能,因为这个功能实在是 “太抽象了!” ,但不知道题主表达的到底是否清楚,如果本篇文章大家有独到的见解可以大家一起讨论,如果题主在文章中有什么表达的不准确的地方也希望大家批评指正~
感谢大家对题主的支持,后续将更新更多相关的文章帮助大家来进阶和强化,也希望大家对文章多多的点赞关注和评论,这期文章就到这里感谢大家的观看,再见!