Labview虚拟仪器程序设计笔记 - 图文

更新时间:2023-11-27 21:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 Labview综述 注意事项:

1.数据流驱动:从左至右 2.数据连线颜色代表:

1.while循环执行后外界数据接不能传入循环内,封闭性的。 2.注意簇的元素的排列顺序。

3.局部变量,全局变量,共享变量,值属性节点会破坏Labview的数据流。 4.枚举常量仅在程序框图可见,在前面板不可见。

5.使用局部变量控制布尔开关时,按钮只能使用机械动作中的转换模式

6.Labview多线程:将没有直接数据连接的程序块单独创建一个线程,将各个模块放到循环结构中并行执行而实现多线程。

7.子VI前面板进入内存的原因是:前面板打开、VI修改后尚未保存、前面板数据打印、程序框图中有数性节点。

8.While+条件结构,while+事件结构

9.自动索引功能在for循环中默认打开,whil循环默认关闭

10.While循环里面一定记得要加延时,特别是多任务时,不然会十分占用CPU

11.局部变量和值属性节点那个好?

同一vi最好数据流,其次局部变量,绝对不要使用值属性,子vi目前可用引用+属性节点或全局变量。

多使用移位寄存器,少使用属性节点值,尽量不使用局部变量 功能全局可以完全代替全局变量!

一般建议尽量少用局部变量,但就局部变量与“值”属性节点来说,局部变量的写入效率要比“值”属性节点快得多,

值属性只建议使用在程序启动的时候对于控件或显示器的初始化上。

当且仅当需要产生一个事件,以相应“值改变”事件时,才推荐使用值(信号)属性。 用属性结点会触发界面线程,使得程序界面被强制更新。如果一个大型程序的某个子程序中用了属性结点,本来子vi的界面的前面板是不需要用户看见的,但由于使用了属性结点而在后台进行强制更新,这样很显然会影响程序执行的效率。你写一个简单的程序验证一下

局部变量也不是越多越好,它使labview无法重用缓存,不得不开辟新的缓存区,可以尽量用移位寄存器等结构来强制内存重用。

同vi间用局部变量,不同vi间用引用+属性节点。

12.“局部变量”执行效率高,但占用内存多,“属性节点:值”带错误处理,可以更好的引导数据流,但执行效率较低。局部变量和值属性节点两个都不推荐使用, 两种都需要memory allocation, 导致执行效率过低, 尤其是property node - value, 因为它还引入了UI thread. 极力推荐功能全局变量或队列

13.

14.避免在循环外使用事件结构:下面这样是错误的!

15.因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。如下图为错误编程:

解决办法就是:要软件触发事件,必须对变量右键->创建->属性节点->值(信号)进行赋值,

这样才能触发事件结构。

Labview调试方法:

1.高亮灯泡显示:

2.断点+探针+单步执行(用查看—工具选板来设置 )

Labview性能分析:

工具--性能分析

1.性能和内存分析窗口

2.显示缓存区分配:小黑点代表此处有一个数组的拷贝,尽量消除黑点。

Labview程序优化:

1.避免强制类型转换:前后数据类型一致,避免对大块数据如数组进行类型转换。

2.防止内存泄漏:一定要记得关闭文件引用和其他引用(VI server)

共享变量:和全局变量类似,但它可以在多个本地VI和网络应用程序中传递数值,还有数据缓冲功能。

功能性全局变量:仅运行一次的WHILE循环+未初始化的移位寄存器,使用移位寄存器保存变量的值,避免竞争冒险,用来替代全局变量由于每次读和写变量时,都是取自于while循环中的移位寄存器,因此能够避免了数据拷贝的问题(当然,全局性功能变量VI不能够设置为Reentrant可重载的)。由于功能性全局变量VI中加入了“错误簇”端子,因此使用ErrorIn和ErrorOut能够很好地避免“竞争冒险”问题。

从理论上说,功能性全局变量能够完全取代传统的全局变量。由于加入了“错误簇”和移位寄存器,避免了数据的重复拷贝。同时,使用枚举型控件(可以设置为Type Def.控件)能够使得整个程序结构更加清晰、明了,实现模块化程序设计的目的。

更多参见:http://liuhao815.blog.163.com/blog/static/23142978200961654226929/ 引用:相当于指针

程序结构 1.循环结构:

1、可以同时运行多个WHILE循环结构。

同时运行多个WHILE循环结构在C语言中是比较麻烦的,必须开辟多个线程,而LABVIEW是自动多线程的。LABVIEW不仅可以同时并行运行多个WHILE结构,甚至在每个while循环中可以同时运行多个数据流程。 多了同时运行的WHILE循环可以分成两类:

一类是一个VI中多个同时运行的WHILE循环。多个WHILE循环在同一程序框图中。

另一类是每个子VI拥有各自的WHILE循环,此时多个WHILE循环同时工作相当于WINDOWS的多窗口运行。

2、每个循环中必须增加延时函数,释放系统控制权。

如果在循环中没有延时类函数,将导致WHILE循环独占CPU,CPU占用率很快达到100%。

3、仅运行一次的WHILE循环+未初始化的移位寄存器。这就是著名的LV2(功能)全局变量。

移位寄存器:左边的为初值,运行一次后值赋给右边,下一次循环是,右值赋给左边,当循环结束后,右边输出最后结果值。可以不赋初值,可以输出每次结果值。

反馈节点:与移位寄存器相同可以直接互换。当移位寄存器连线太长太乱时,可以替换成反馈节点。

2.条件结构:

连接端:布尔 = if else

数值/字符/枚举 = Switch case

连接为数值时只能为整数,非整可以放大后在判断,如0.1放大10倍变成1.

【While+条件结构】:多任务并行,查询模式,程序效率低下!,条件结构里面的经常为子VI!

多按钮编程技巧:按钮必须是触发类型

提高while效率的办法:【等待前面板活动函数】

可以明显降低while循环次数。

标准状态机:可以选择从那一个状态开始进行执行,条件内容都指向了下一下,所以是连贯性的运行。

3.顺序结构:破坏并行运行机制和从左到右的数据流,不提倡使用!

1.平铺式

2.层叠式:借助局部变量进行帧之间的数据传递

通过人为控制数据依从来替代之:

本文来源:https://www.bwwdw.com/article/v3et.html

Top