Labview虚拟仪器程序设计笔记_第1页
Labview虚拟仪器程序设计笔记_第2页
Labview虚拟仪器程序设计笔记_第3页
Labview虚拟仪器程序设计笔记_第4页
Labview虚拟仪器程序设计笔记_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 Labview综述注意事项:1. 数据流驱动:从左至右2. 数据连线颜色代表:1. while循环执行后外界数据接不能传入循环内,封闭性的。2. 注意簇的元素的排列顺序。3. 局部变量,全局变量,共享变量,值属性节点会破坏Labview的数据流。4. 枚举常量仅在程序框图可见,在前面板不可见。5. 使用局部变量控制布尔开关时,按钮只能使用机械动作中的转换模式6. Labview多线程:将没有直接数据连接的程序块单独创建一个线程,将各个模块放到循环结构中并行执行而实现多线程。7. 子VI前面板进入内存的原因是:前面板打开、VI修改后尚未保存、前面板数据打印、程序框图中有数性节点。8. W

2、hile+条件结构,while+事件结构9. 自动索引功能在for循环中默认打开,whil循环默认关闭10. While循环里面一定记得要加延时,特别是多任务时,不然会十分占用CPU11. 局部变量和值属性节点那个好?同一vi最好数据流,其次局部变量,绝对不要使用值属性,子vi目前可用引用+属性节点或全局变量。多使用移位寄存器,少使用属性节点值,尽量不使用局部变量功能全局可以完全代替全局变量!一般建议尽量少用局部变量,但就局部变量与“值”属性节点来说,局部变量的写入效率要比“值”属性节点快得多,值属性只建议使用在程序启动的时候对于控件或显示器的初始化上。当且仅当需要产生一个事件,以相应“值改变

3、”事件时,才推荐使用值(信号)属性。用属性结点会触发界面线程,使得程序界面被强制更新。如果一个大型程序的某个子程序中用了属性结点,本来子vi的界面的前面板是不需要用户看见的,但由于使用了属性结点而在后台进行强制更新,这样很显然会影响程序执行的效率。你写一个简单的程序验证一下就看出来了。    局部变量也不是越多越好,它使labview无法重用缓存,不得不开辟新的缓存区,可以尽量用移位寄存器等结构来强制内存重用。同vi间用局部变量,不同vi间用引用+属性节点。12. “局部变量”执行效率高,但占用内存多,“属性节点:值”带错误处理,可以更好的引导数据流,但执行效率较低。局部变

4、量和值属性节点两个都不推荐使用,两种都需要memory allocation, 导致执行效率过低, 尤其是property node - value, 因为它还引入了UI thread.极力推荐功能全局变量或队列13.14. 避免在循环外使用事件结构:下面这样是错误的!15. 因为直接赋值只能改变变量的值,而不能引起次变量的事件触发。如下图为错误编程:解决办法就是:要软件触发事件,必须对变量右键->创建->属性节点->值(信号)进行赋值,这样才能触发事件结构。Labview调试方法:1. 高亮灯泡显示:2. 断点+探针+单步执行(用查看工具选板来设置 )Labview性能分析

5、:工具-性能分析1. 性能和内存分析窗口2. 显示缓存区分配:小黑点代表此处有一个数组的拷贝,尽量消除黑点。Labview程序优化:1. 避免强制类型转换:前后数据类型一致,避免对大块数据如数组进行类型转换。2. 防止内存泄漏:一定要记得关闭文件引用和其他引用(VI server)3.合理分贝数组内存:采用自动索引或预先定义数组大小,然后替换成员,好的办法:4. 合理使用全局变量:大数据如图像,信号避免使用全局变量5. 其他技巧:1. 缓冲区的重复使用:使用一条数据线连接2. 元素同址操作结构:可用于信息的更新:如把数组中的第三个放大10倍6. 优化程序的原则:1. 把VI划分成多个子VI进行

6、调用。2. 可以使用连线就绝不要使用局部变量,更不能过度使用带有数组或字符串的局部变量或全局变量,因为读写局部变量是会产生一个数据的副本。3. 尽可能不在前面板显示大的数组或字符串,因为显示件会为它显示的数据保存一个副本。4. 尽量不在循环中使用创建数组函数来产生数组,字符串也是字符数组。1Labview常用快捷键删除断线Ctrl+B整理程序框图Ctrl+U启用程序网格对其Ctrl+#查找和替换Ctrl+F错误列表Ctrl+L运行 Ctrl+R停止Ctrl+.切换至编辑模式Ctrl+M前后面板切换Ctrl+E左右两栏显示Ctrl+T最大化窗口Ctrl+/显示即时帮助Ctrl+H帮助Ctrl+?

7、显示工具选板Shif+鼠标右键2. 常用控件说明按钮的6种机械动作:(默认按下后为1)1. 单击时转换:点击后0变成1,松开后按钮不会弹起(开关)2. 释放时转换:相反3. 保持转换直到释放:按下期间一直为1,持续性的(门铃开关)4. 单击时触发:单击时0变成1,马上又自动还原0.(断路器)5. 释放时触发:6. 保持触发直到释放:单击时0变成1,在读取一次或者释放之前保持1,转换的能持续输出,触发的只能为单次输出3.数据类型数值:数值常量,枚举常量,下拉列表常量,随机数布尔量:T或F(0或1)字符/字符串函数:搜索拆分字符串:能一分为二,输入两个字符串格式化值;将数字转化为字符串扫描值:能自

8、动识别和转化为数值格式化写入字符串:将不同类型的字符或数字合并成一个字符串=sprintf函数扫描字符串函数:与格式化相反。格式化日期函数:数组簇:1. 将多个不同类型的数据打包成一个,减少连线2. 必须同时都是输入或显示3. 簇里面的控件有逻辑顺序,与位置无关,由放入时间决定4.变量:局部变量:1.用于程序中连线较麻烦时2. 用于一个变量同时控制并行的多个循环时3. 用于一个空间既做显示,又做输入。全局变量:用于多个独立VI共享变量:和全局变量类似,但它可以在多个本地VI和网络应用程序中传递数值,还有数据缓冲功能。功能性全局变量:仅运行一次的WHILE循环+未初始化的移位寄存器,使用移位寄存

9、器保存变量的值,避免竞争冒险,用来替代全局变量由于每次读和写变量时,都是取自于while循环中的移位寄存器,因此能够避免了数据拷贝的问题(当然,全局性功能变量VI不能够设置为Reentrant可重载的)。由于功能性全局变量VI中加入了“错误簇”端子,因此使用ErrorIn和ErrorOut能够很好地避免“竞争冒险”问题。从理论上说,功能性全局变量能够完全取代传统的全局变量。由于加入了“错误簇”和移位寄存器,避免了数据的重复拷贝。同时,使用枚举型控件(可以设置为Type Def.控件)能够使得整个程序结构更加清晰、明了,实现模块化程序设计的目的。更多参见:引用:相当于指针程序结构1. 循环结构:

10、1、可以同时运行多个WHILE循环结构。同时运行多个WHILE循环结构在C语言中是比较麻烦的,必须开辟多个线程,而LABVIEW是自动多线程的。LABVIEW不仅可以同时并行运行多个WHILE结构,甚至在每个while循环中可以同时运行多个数据流程。多了同时运行的WHILE循环可以分成两类:一类是一个VI中多个同时运行的WHILE循环。多个WHILE循环在同一程序框图中。另一类是每个子VI拥有各自的WHILE循环,此时多个WHILE循环同时工作相当于WINDOWS的多窗口运行。2、每个循环中必须增加延时函数,释放系统控制权。如果在循环中没有延时类函数,将导致WHILE循环独占CPU,CPU占用

11、率很快达到100%。3、仅运行一次的WHILE循环+未初始化的移位寄存器。这就是著名的LV2(功能)全局变量。移位寄存器:左边的为初值,运行一次后值赋给右边,下一次循环是,右值赋给左边,当循环结束后,右边输出最后结果值。可以不赋初值,可以输出每次结果值。反馈节点:与移位寄存器相同可以直接互换。当移位寄存器连线太长太乱时,可以替换成反馈节点。2. 条件结构:连接端:布尔 = if else数值/字符/枚举 = Switch case连接为数值时只能为整数,非整可以放大后在判断,如0.1放大10倍变成1.【While+条件结构】:多任务并行,查询模式,程序效率低下!,条件结构里面的经常为子VI!多

12、按钮编程技巧:按钮必须是触发类型提高while效率的办法:【等待前面板活动函数】可以明显降低while循环次数。标准状态机:可以选择从那一个状态开始进行执行,条件内容都指向了下一下,所以是连贯性的运行。3. 顺序结构:破坏并行运行机制和从左到右的数据流,不提倡使用!1. 平铺式2. 层叠式:借助局部变量进行帧之间的数据传递通过人为控制数据依从来替代之:中间那根线是用来触发第二个循环的,并不传递值,只有当循环1停止时,信号才能传出去,触发循环2.4. 事件结构:代替while+条件结构的查询模式,【while+事件结构】高效率执行程序。支持两种事件:GUI事件+用户注册事件GUI事件:触发前面板

13、控件控件值改变按下一个键光标进入VI窗口超时事件:在等待时间内没有触发事件则执行超时事件。建议:1.避免在循环外使用事件结构。2. 在值改变事件中读取布尔控件接线端。3. 条件结构用于处理触发布尔空间的撤销操作?4. 不要使用不同的事件数据将一个分支配置为处理多个过滤事件5. 如果含有事件结构的while循环基于布尔控件的值而停止,则记得在事件结构中处理该布尔控件。6. 避免在同一个事件分支中同时使用对话框和“鼠标按下?”过滤事件7. 避免在一个循环中放两个事件结构8. 使用动态注册时,每个事件结构都有一个“注册事件”函数9. 如需在处理当前事件的同时生成或处理其他事件,应考虑使用时间回调注册

14、函数10. 不要将前面板关闭通知事件用于重要的关闭代码中,除非事先确保前面板关闭是VI不终止。几种事件通知事件:常见的过滤事件:要设置过滤节点动态事件:用户事件:5. 定时结构:降低CPU使用文件操作:创建一个文件:打开一个文件:波形图表和波形图:波形图表:数据源为单个数值,随时间变化,能及时显示,如显示随机数波形图:数据源为数组,运行完后的数据回放功能XY图:数据源为XY坐标强度图:数据源为通知器,队列,信号量,集合点通知器:主要用于消息更新,前面的信号会被后来的覆盖:队列:可以缓冲数据,可以传递一组数据,在数据传递方面具有强大作用!通知器和队列的区别:1. 通知器内容会被新的消息覆盖,而队列不会。2. 通知是1对多(像广播),队列是多对一,只能有一个接收者,可以将所有队列数据压出堆栈。信号量:独占性集合点:在执行的某个特定点同步两个或多个独立并行的任务。先到达的任务会等待后面的任务,到齐后才继续运行。事件发生:建议用“通知器”替代“事件发生”,只有在为了内存和性能优化的情况下使用并发事件。并发事件没有销毁函数!首次调用函数:,这函数很有用!总结:1. 高效率模式:多while并行+事件结构+多线

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论