LabVIEW的高级编程技巧
LabVIEW高级编程技巧实现多线程处理

LabVIEW高级编程技巧实现多线程处理在LabVIEW中实现多线程处理是一项高级编程技巧。
多线程处理可以提升程序的效率和性能,特别是在处理大量数据或复杂计算的情况下。
本文将介绍一些实现多线程处理的技巧和方法。
一、多线程的概念多线程是指同时执行多个线程的技术。
在LabVIEW中,线程是指程序的执行流程,可以理解为独立的程序流。
多线程处理意味着将一个程序分成多个线程并行执行,每个线程都有独立的任务和计算。
二、为何使用多线程处理1. 提高程序的响应速度:将耗时的任务分配给不同的线程,可以使程序在执行这些任务的同时响应其他操作,提高用户体验。
2. 充分利用多核处理器:多线程可以充分利用多核处理器的计算能力,提升程序的运行效率和性能。
3. 优化耗时操作:将耗时的操作分成多个线程执行,可以减少总体处理时间。
三、实现多线程处理的技巧和方法1. 使用并行循环:LabVIEW提供了并行循环结构,可以将不同任务放在不同的循环中,并行执行。
在并行循环中,每个循环都可以分配一个线程来执行任务。
2. 使用Synchronization功能:多线程处理可能存在数据访问冲突的问题,LabVIEW提供了Synchronization功能,可以解决多线程之间对共享数据的访问冲突。
通过使用锁定机制或信号机制,可以确保同时只有一个线程访问共享数据,保证数据的一致性和准确性。
3. 使用队列:队列是一种先进先出的数据结构,可以用于线程间的数据传递。
通过将需要处理的数据放入队列中,然后不同的线程从队列中获取数据进行处理,可以实现对数据的分发和多线程处理。
4. 考虑任务的划分和优先级调度:合理划分任务,将耗时的任务分配给独立的线程,可以优化多线程处理的效率。
同时,根据任务的优先级,调整线程的优先级,保证重要任务的及时执行。
四、多线程处理的注意事项1. 线程间的数据共享要注意同步机制,避免数据冲突。
2. 注意线程的优先级设置,避免出现优先级反转的情况。
第9章_labview的高级应用(事件结构编程技巧)

通过“坐标”获取鼠标的位置,并把该坐标值赋给“鼠标 按下”的控件,从而达到控件被鼠标拖动的视觉效果。
在“鼠标释放”的分支中,通过“非法引用句柄常量”取 消对“鼠标移动”事件的注册,从而实现在鼠标释放后, 控件的位置不再跟随鼠标发生变化。
• 动态注册:动态事件注册与VI服务器相结合,
允许在程序运行时使用控件、VI或应用程序 的引用来动态地指定和改变产生事件。动态 注册在控制LabVIEW产生何种事件和何时产 生事件等方面更为灵活。
用布尔控件制作 的自定义控件
为这个自定义控 件动态注册了 “鼠标按下”事
件
1:放置“注册事件”函数 2:在“注册事件”函数输入端上连接一个引用 3:在“注册事件”函数事件源,选择该引用所对应的事件
第九章
Labview 的高级应用 ——事件结构之谜
用户界面
事
件
外部I/O
程序的其它部分
超时节点
事件结构
事件选择器
动态事件注册
事件数据节点程序代码Step2:处理事件分支程序
事件结构在循环体外, 因此不再执行
Step1:值第一次被改变 Step3:值再次被改变
事件结构编写黄金法则1
将事件结构放入While循环中!
生产者消费者 循环
事件结构
• 通知事件:
如“鼠标移动”、“键按下”等
• 过滤事件:
如“鼠标移动?”、“键按下?”等
数字”0-9” “-“ ”Backspace“
事件过滤节点
事件结构注册模式
• 静态注册:事件结构的每个分支具体处理哪 些事件,一旦VI开始运行,LabVIEW将自动 注册这些事件,并且在VI运行的整个过程中 无法改变事件结构所处理的事件。
第6章 LabVIEW高级编程

第6章 LabVIEW高级编程
1.全局变量创建
建立全局变量也有两种方法,但比局部变量复杂。 (1)通过函数模板的结构子模板创建
在 函数结构 选板中选择全局变量节点,放置在后面板,此 时图标为
在图标上右键单击选择 打开前面板 或双击,打开全局变量程 序的前面板,在前面板上按照需要的数据类型加入控件,然后将 此程序关闭并保存为一个独立的文件;
向Matlab脚本节点输入Matlab文件的方法有两种: 一种是直接在框内写入文件代码; 一种是在Matlab节点的边框上单击鼠标右键,在弹出的快捷菜单中选 择 导入 选项,在弹出的对话框中选择待输入的Matlab脚本文件。 Matlab节点输入/输出变量的添加和公式节点类似,分别在快捷菜单 中选择 添加输入/添加输出 选项实现。和公式节点一样,用户可以为 Matlab脚本节点的每个输入/输出变量添加指示器或者控制器,见图6-10 。
第6章 LabVIEW高级编程
6.1.3 公式实例
【例6-1】 利用公式实现 y sin(x2) x /10 2x*cos(x) 函数,并绘制函数在x∈[0 200] 间曲线。
图6-7 程序框图和曲线
第6章 LabVIEW高级编程
【例6-2】使用公式节点创建一个VI,完成下面的公式,并绘 制x取值为0 ~100的曲线。其中参数m和b由前面板输入。
第6章 LabVIEW高级编程
在程序框图上输入数学公式或类似于C语言的表达式,可以使用的函 数如下:abs、acos、acosh、asin、asinh、atan、atan2、atanh、ceil、cos 、cosh、cot、csc、exp、expm1、floor、getexp、getman、int、intrz、ln、 lnp1、log、log2、max、min、mod、pow、rand、rem、sec、sign、sin、 sinc、sinh、sqrt、tan和tanh等。
LabVIEW编程中的数据结构与算法优化技巧

LabVIEW编程中的数据结构与算法优化技巧在LabVIEW编程中,数据结构和算法的选择与优化对于程序的性能和可维护性至关重要。
本文将介绍在LabVIEW编程中常用的数据结构和算法优化技巧,帮助开发人员提高程序的效率和可靠性。
一、数据结构的选择在LabVIEW编程中,选择合适的数据结构是实现功能的关键。
以下是几种常见的数据结构及其适用场景:1. 数组(Array):用于存储同类型的数据,并且数据的大小是固定的。
数组适用于需要按顺序访问和操作数据的场景,例如存储一组测量数据或图像像素。
2. 队列(Queue):用于实现先进先出(FIFO)的数据存储和访问方式。
队列适用于需要按顺序处理数据的场景,例如数据采集和处理时的数据缓存。
3. 栈(Stack):用于实现后进先出(LIFO)的数据存储和访问方式。
栈适用于需要按相反顺序处理数据的场景,例如函数调用的递归操作。
4. 链表(Linked List):用于存储具有动态长度的数据。
链表适用于频繁插入和删除数据的场景,例如数据缓存和排序等算法。
5. 图(Graph):用于表示多个实体之间的关系,并且这些关系保存在边中。
图适用于复杂网络分析和路径搜索等算法。
在选择数据结构时,需要考虑数据的特性、访问方式和操作需求,以及程序的性能要求等因素,综合评估后选择最合适的数据结构。
二、算法的优化除了选择合适的数据结构之外,优化算法也是提高LabVIEW程序性能的重要手段。
下面是几个常见的算法优化技巧:1. 减少循环次数:循环是LabVIEW程序中常用的操作,但过多的循环会增加程序的执行时间。
在编写程序时,应尽量减少循环次数,例如通过向量化操作或者使用矩阵运算来代替循环运算。
2. 缓存数据:对于需要频繁访问的数据,可以将其存储在缓存中,以减少对内存的访问次数。
例如使用Shift Register或者Local Variable来保存中间计算结果,避免重复计算。
3. 并行计算:LabVIEW支持并行计算,在多核处理器上可以充分利用硬件资源,提高程序的执行效率。
LabVIEW编程技巧提高效率的方法

LabVIEW编程技巧提高效率的方法LabVIEW是一种图形化编程语言,广泛应用于测量、控制和数据采集等领域。
在进行LabVIEW编程时,如何提高效率是每个程序员都关心的问题。
本文将介绍几种常用的LabVIEW编程技巧,帮助您提高编程效率。
一、使用SubVISubVI是LabVIEW中的一个重要概念,即可重用的子虚拟仪器。
通过将一段常用的代码封装成SubVI,可以提高代码的重用性和可维护性。
当我们在程序中需要多次使用同一段代码时,可以将其封装成SubVI,在需要的地方直接调用即可,避免重复编写相同的代码,提高编程效率。
二、合理使用循环结构和条件结构循环结构和条件结构是LabVIEW编程中的两个基本结构,合理使用它们可以极大地提高编程效率。
在需要重复执行一段代码时,可以使用循环结构,如For循环或While循环。
而在需要根据条件来选择执行不同的代码时,可以使用条件结构,如If条件结构或Case结构。
通过合理运用这些结构,可以简化程序逻辑,提高编程效率。
三、利用数据流控制来减少冗余代码数据流控制是LabVIEW编程的一个重要特点。
在LabVIEW中,数据流是以数据线的形式流动的,每个节点的执行都依赖于其前面节点的数据。
利用这一特点,我们可以在程序中避免冗余代码的出现。
通过合理设计数据流,将重复的代码放到相同的分支中,可以避免重复编写相同的代码,提高编程效率。
四、使用合适的数据结构LabVIEW中提供了多种数据结构,如数组、矩阵、队列等。
选择合适的数据结构可以简化程序逻辑,提高编程效率。
例如,当需要处理多个数据时,可以使用数组或矩阵来存储和处理。
而当需要对数据进行先进先出的操作时,可以使用队列来实现。
选择合适的数据结构可以使程序更加简洁、高效。
五、使用合适的LabVIEW工具和函数LabVIEW提供了丰富的工具和函数库,使用这些工具和函数可以加快编程速度。
例如,当需要进行数据分析和处理时,可以使用LabVIEW中提供的信号处理函数库。
LabVIEW编程中的最佳实践与代码优化技巧

LabVIEW编程中的最佳实践与代码优化技巧在LabVIEW编程中,遵循最佳实践和采用代码优化技巧可以大大提高程序的性能、可读性和可维护性。
本文将介绍一些常用的最佳实践和代码优化技巧,帮助开发者编写高质量的LabVIEW代码。
一、变量初始化和扩展性设计在LabVIEW中,变量的初始化非常重要,可以避免因未初始化变量而引起的错误。
对于有多个入口的程序,可以在开始处初始化变量,保证其值的合理性。
此外,扩展性设计也是LabVIEW编程中需要考虑的因素之一。
通过建立适当的结构和架构,可以使程序更加模块化、可扩展和可重用。
二、适当使用索引和循环结构在处理数组和矩阵等数据结构时,适当使用索引和循环结构可以简化代码并提高程序性能。
比如,使用索引来遍历数组元素,而不是使用多个扩展的线性连接器。
三、合理使用数据流和数据类型LabVIEW是一种数据流编程语言,充分利用数据流可以提供更清晰的程序逻辑和更直观的代码结构。
适当使用数据类型也可以提高程序的可读性和可维护性。
LabVIEW提供了很多内置数据类型,如整数、浮点数、字符串等,根据具体需求选择合适的数据类型是很重要的。
四、优化循环和条件结构在LabVIEW编程中,循环结构和条件结构是常用的控制结构。
优化循环可以提高程序的执行效率。
比如,使用“批处理”方式处理循环中的数据,而不是逐个处理。
优化条件结构可以消除冗余的条件判断,以减少程序执行时的开销。
五、适当使用并行编程技术LabVIEW提供了丰富的并行编程技术,如多线程、并行循环等。
适当使用并行编程技术可以有效利用多核处理器的性能,提高程序的吞吐量和响应速度。
但要注意合理控制并行度,避免过多的线程竞争和资源冲突。
六、代码注释和文档编写LabVIEW编程中,适当的代码注释和文档编写可以提高代码的可读性和可维护性。
在代码中添加注释,解释代码逻辑和功能,让其他开发者能够更容易理解和修改代码。
编写详细的文档,包括程序设计、功能特性和使用说明等,可以帮助使用者更好地了解和使用程序。
LabVIEW在工程应用中的编程技巧

LabVIEW在工程应用中的编程技巧LabVIEW是一种基于图形化编程的开发环境,广泛应用于科学、工程和控制系统等领域。
在工程实践中,合理的编程技巧可以提高程序的效率和可维护性。
本文将介绍一些使用LabVIEW进行工程应用时的编程技巧。
一、良好的命名规范良好的命名规范是编程的基础,对于程序的可读性和可维护性至关重要。
在LabVIEW中,命名规范包括VI名称、控件和指示器的命名等。
1. VI名称:VI(Virtual Instrument)是LabVIEW的基本单元,给VI命名时应使用具有描述性的名称,能够准确反映其功能和用途。
2. 控件和指示器的命名:在创建用户界面时,应为控件和指示器选择具有描述性的名称,以便其他人能够快速理解其功能和作用。
二、合理使用子VI子VI是将常用的代码块封装成独立的模块,便于重复使用,提高代码的可维护性和可重用性。
通过合理使用子VI,可以将复杂的程序分解为简单的模块,使程序结构更加清晰明了。
同时,子VI也方便多人协同开发,不同的开发者可以负责不同的模块,并可在不同的项目中复用。
三、利用LabVIEW提供的工具箱LabVIEW提供了丰富的工具箱,包括信号处理、控制系统、图像处理等功能。
合理利用这些工具箱,可以节省开发时间,提高编程效率。
1. 信号处理工具箱:在信号处理方面,LabVIEW提供了多种滤波器、傅里叶变换等函数和工具。
通过使用这些工具,可以方便地进行信号处理和分析。
2. 控制系统工具箱:LabVIEW提供了各种控制算法和工具,包括PID控制、系统辨识等。
在控制系统设计中,合理利用这些工具可以简化程序的实现和调试过程。
3. 图像处理工具箱:LabVIEW对于图像处理领域也提供了强大的支持,例如图像滤波、边缘检测等功能。
这些工具可以应用于计算机视觉、图像识别等项目中。
四、使用合适的数据结构和数据流程在LabVIEW中,数据流图是程序设计的重要组成部分。
合理设计数据结构和数据流程可以提高程序的可读性和可维护性。
LabVIEW编程技巧与最佳实践

LabVIEW编程技巧与最佳实践LabVIEW是一种广泛应用于工程领域的可视化编程语言,它的特点是通过图形化的编程界面进行程序设计。
在使用LabVIEW进行编程时,我们需要掌握一些技巧和遵循最佳实践,以提高程序的效率、可读性和可维护性。
本文将介绍一些LabVIEW编程的技巧和最佳实践,帮助读者更好地应用LabVIEW进行工程项目开发。
I. 命名规范在LabVIEW程序中,良好的命名规范是非常重要的,它能够使得程序代码更具可读性和易于理解。
以下是一些建议的命名规范:1. 控件和指示器:使用有意义的名称来标识控件和指示器,例如使用“按钮”作为命名,而不是默认的“Button1”。
2. VI(Virtual Instrument):给VI命名时,应使用能够准确描述功能的名称,避免使用过于简单或含糊不清的命名。
同时,还应注意使用合适的前缀来说明其功能,例如“Read_file”、“Write_data”等。
3. 数据类型:对于数据类型的命名,应使用能够表达其含义或用途的名称。
例如,对于包含温度数据的变量,可以使用“temperature”作为名称。
II. 数据流的管理在LabVIEW中,数据流是程序中的核心,良好的数据流管理可以使程序更清晰明了、易于维护。
以下是一些数据流管理的技巧:1. 数据线的走向:在连接节点时,保持数据线的整洁有序。
可以使用直线、折线等方式来使数据线的走向更加清晰。
2. 控制数据线流向:使用Bundle和Unbundle节点来管理和传递复合数据结构,而不是直接将数据线连接到复合结构的元素。
III. 错误处理良好的错误处理是编程中的重要一环,以下是一些错误处理的最佳实践:1. 错误码的使用:使用良好的错误码来标识不同类型的错误,以便于程序在发生错误时进行合适的响应。
2. 异常处理:使用异常处理来捕获和处理可能发生的异常情况,以保证程序的稳定性和可靠性。
IV. 程序调试与优化1. debug模式:在进行程序开发时,使用debug模式来逐步调试程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW的编程技巧本章介绍局部变量、全局变量、属性节点和其他一些有助于提高编程技巧的问题,恰当地运用这些技巧可以提高程序的质量。
8.1局部变量严格的语法尽管可以保证程序语言的严密性,但有时它也会带来一些使用上的不便。
在LabVIEW这样的数据流式的语言中,将变量严格地分为控制器(Control)和指示器(Indicator),前者只能向外流出数据,后者只能接受流入的数据,反过来不行。
在一般的代码式语言中,情况不是这样的。
例如我们有变量a、b和c,只要需要我们可以将a的值赋给b,将b的值赋给c等等。
前面所介绍的LabVIEW内容中,只有移位积存器即可输入又可输出。
另外,一个变量在程序中可能要在多处用到,在图形语言中势必带来过多连线,这也是一件烦人的事。
还有其他需要,因此LabVIEW引入了局部变量。
8.1.1局部变量的创建我们在框图上设置三个变量,两个控制器分别为Numeric和Numeric 2,现在增加局部变量。
选择Function→Structures→Local Variable 然后将其拖到框图上,就可得到一个代“?”的图标,下一步将其与框图中已有的变量建立关联,有鼠标右键单击图标,进入Select Item 选择“input1” ,最后框图就变成了图7-1右边的样子。
图7-1局部变量的创建局部变量只是原变量的一个数据拷贝,但是它的属性可以修改,并且这种改变不会影响原变量。
例如上图中的这个局部变量可以利用快捷菜单中的Change To Read 变成一个指示器。
这样的一对变量的组合,就使它既可读又可写了。
局部变量有三种基本的用途:控制初始化、协调控制功能、临时保存数据和传递数据。
下面我们通过练习来说明。
8.1.2 应用举例练习8-1 用一个开关控制两个循环]该练习中有两个While 循环,现在我们用一个开关同时控制它们的运行。
面板与框图如上所示。
在左边的一个循环中设定了一个开关。
右边的循环中做了这个开关的局部变量。
并且在快捷菜单中选Chang To Read ,最后与循环的条件端子连接。
这样就实现了所须的功能。
练习8-1 结束练习8-2 创建一组互锁的开关面板及框图如上所示。
这是一个精巧的程序,它非常简洁地实现了所须的功能,面板上的四个按钮开关,在任何时刻只允许有一个被按下(True 状态)。
当另一按钮被按下时,原先在按下状态的按钮将自动弹起。
下面对程序做几点说明。
1.程序的基本算法:Array在While 循环中通过一对移位寄存器将当前数组内容(开关状态)与前一次循环时的数组内容不断比较。
如果没有变化,则通过“相等判断”将选择器上输入端的数据送到选择器输出端,并送到移位寄存器。
如果有变化,则“相等判断”的输出端将把“F”送到选择器,选择器将选取其下输入端的数据到输出。
那么下输入端的数据是什么呢?现在我们举例说明,假如4个开关原来的状态从左到右是“0100”,即开关2闭合。
现在按下开关1,则当前数组内容立即变为“1100”与前一状态“0100”逐位做异或运算后,在异或门输出端得到的结果是“1000”,这个结果送给了选择器下输入端,在选择器输出端送到移位寄存器的同时还通过一个Array的局部变量,使数组内容更新为“1000”,即使开关2弹起。
2.局部变量的作用:循环内的局部变量使得更新后的数据可以写入数组,没有它数组Array只能读,不能写。
循环外的局部变量用来将数组初始化。
3.这个程序的巧妙之处还在于直接对整个数组操作,而不是对一个个数组元素操作,如果需要增加面板上的开关个数,只需要改变数组初始化中的元素个数,并在面板上拖出需要的开关个数。
练习8-2结束练习8-3仪器面板控制按钮的完善在前面的练习6-7中,我们曾给出了一个非常简洁的连续正弦波发生器的例子。
框图如上所示。
但从使用的角度这个程序不够完善。
例如程序启动后开始发生波形,这时如果你希望调试改变波形的频率和幅值。
则改完后必须再次重新启动运行。
因为这些值是作为程序的初值出现的。
这显然不太方便。
如果我们希望能在任意时刻调整参数波形都能“立即”响应,则可以利用局部变量来完善按钮的控制作用。
一个较完善的程序如下所示。
这是一个正弦波信号发生器,它允许在运行中随时调整参数而不必重新启动。
这个程序增加了内外两层循环,并且对幅值、频率设置了两套局部变量,利用内层循环监视当前时刻和前一时刻的值。
如果没有变化,信号源持续工作,内循环一直执行下去。
如果发现当前时刻和前一时刻的参数发生了变化,则结束内层循环,并使外循环前进一步(执行第二次外循环),相当于程序重新启动,则信号源按新的设置参数运行。
另外注意开关的作用,当开关按下时,先终止内层循环,然后终止内层循环,同时Clear generation。
练习8-3结束8.2全局变量全局变量是LabVIEW中一个与VI地位等同的模块,它以独立文件的形式保存在磁盘中,文件后缀为.gbl。
通过全局变量不同VI之间可以交换数据。
8.2.1全局变量的创建和调用创建步骤如下:1.在Function→Structures下选择Global Variable,将其图标拖到框图中,得到2.双击Global Variable图标,得到其前面板3.在其前面板上放上所需要的变量,例如一个数组、一个布尔量、一个字符串变量如下图所示。
3.保存这个变量,例如文件名称为a.gbl。
至此,全局变量创建完备,下面我们通过例子来说明它的调用。
练习8-4全局变量的调用该例中我们首先在一个VI中产生十个随机数,然后将它传给全局变量a.gbl,然后再创建第二个VI,让它由全局变量a.gbl中读取数据,并用Graph显示出来。
下图分别是VI1的框图和VI2的面板及框图。
在做调用全局变量的VI中有三个问题要注意:●在一个VI中调用全局变量的方法同调用子VI的方法,即在Function下选择Se lect a VI…,然后打开所需的全局变量文件。
●全局变量中所需变量的选定。
本例中a.gbl中含3个变量,如果需要的是字符串变量,可用鼠标指向全局变量图标,然后点右键,在出现的快捷菜单中选择Select Item,即可出现该全局变量中包含的变量列表,选择其中的String。
如下图所示。
有时需要从全局变量中读数,有时需要向全局变量写数。
这时可利用快捷菜单改变其属性,以上图为例,选择Change To Write 就可以向全局变量写数。
练习8-4 结束练习8-5 用全局变量控制程序流程这是一个使用全局变量控制程序流程的例子。
下图的左上边是主程序的前面板,有三个按钮,分别控制调用子程序1和子程序2和终止程序运行。
右边是对应的框图,下方是两个子程序的框图。
所期望的功能是在打开子程序1的同时还在主面板上打开子程序2,同时也可在主面板上直接关闭程序,不管子程序是否在运行。
为了在主程序上关闭子程序的运行,设置了全局变量quit ,当按下EXIT 按钮时,其值(TURE )同时传给全局变量quit ,如果有子程序在运行,则按照设定的逻辑(STOP 按钮为T OR Quit 为T 停止运行)子程序退出运行,同时主程序也退出运行。
如果没有这个全局变量,则在主程序上无法控制子程序的退出。
为了保证程序中开关初态的正确,需要在程序开始运行前置初态,为此主程序增加了分为两步的顺序结构。
程序开始运行时,首先置全局变量为F.在顺序结构的第二步中,外循环中的三个循环是并行的,程序运行中将巡回执行这三个循环,这样保证Exit按钮能起作用。
练习8-5结束8.2.2使用全局变量和局部变量的注意事项全局变量不仅可以在不同VI间传递数据,而且可以通过它传递消息,控制各VI的协调执行。
它在程序设计中很有用.但无论是全局变量,还是局部变量使用过多也会带来一些其它问题,必须引起注意。
首先,从程序的静态结构上看,会使程序结构不直观,造成混乱。
其次在程序运行过程中可能带来数据状态的竞态现象,这主要指因为全局变量作为一种可读可写的中间变量,应当严格控制读写的操作,最好是使它们处于“一写多读”的状态。
否则可能带来问题。
8.3属性节点(Property Node)作为面向对象的软件,其前面板对象自然应当有其属性,不同类型的对象可能的属性种类和个数也不同。
通过属性的控制,可以使程序界面更加丰富多彩,实现更好的人机交互功能。
Labview引入属性节点(Property Node)的概念来设置前面板对象的属性,并且允许在程序运行中动态地改变属性。
8.3.1属性节点的创建我们举例来说明属性节点的创建。
1.在前面板上创建一个对象,例如Tank如下图左。
2.在Tank图标上点右键,在出现的快捷菜单上选Create →Property Node,则在框图上出现属性节点如上图右,注意这是显示了一个属性Visible。
3.用鼠标右键点击Tank的属性节点,在出现的快捷菜单上选Properties项,可以看到大量的属性供选择。
如果需要从中提出3种属性使用,可以先用鼠标在属性节点的右下角向下拖拉,直到出现3个默认的属性描述拦。
然后在快捷菜单下逐个选择所需的属性修改其内容。
这样就完成了一个属性节点的创建一个面板对象所具有的属性可能有数十个,不同面板对象所具有的属性也有差别。
例如对于一个数字控制量对象,它的属性有●Visible数据类型为布尔型。
当Visible值为False时,面板对象被隐藏。
相反则可见。
●Disabled数据类型为整型。
当输入参数为0或1时,用户可以访问该对象,当输入参数为2时,用户不能访问。
Blinking 数据类型为布尔型。
当输入值为True时,面板对象闪烁,相反为正常状态。
但是这里闪烁的速度和颜色是由LabVIEW主菜单下的Tools→Options→FrontPanent(和→Colors)两个对话框完成的。
8.3.2属性节点的使用练习8-6使用属性节点控制屏幕初始化和指示灯闪烁通常Chart图有一个默认的特点,第二次运行程序时,前一次运行时画出的曲线不会抹去,而是接着往后画,有时我们希望先清屏,再从头画起。
该例子中将实现这个功能。
同时还希望制作一个闪烁的指示灯。
程序面板和框图如下。
该程序产生101个随机数,在一个Chart图表上显示,当产生的数据大于0.5时面板上的指示灯闪烁。
为此给指示灯配了一个Blinking属性节点,并将其置为可写状态。
连接框图如上右所示。
为了在程序开始运行时先对Chart清屏,为Chart配了一个History属性节点,在循环开始之前,首先将0.00赋给History。
注意这里在程序执行顺序上的一个技巧。
本来我们可以画分两步执行的一个顺序结构,但那样做不仅程序不直观,也复杂化了。
这里只画了一个单步的顺序框,省去了第二步的框,通过一条(可以认为是虚设的)由初始化50ms的延时连线,规定了执行的顺序,保证初始化在先。