Advanced LabVIEW Programming Tips and Techniques.ppt_第1页
Advanced LabVIEW Programming Tips and Techniques.ppt_第2页
Advanced LabVIEW Programming Tips and Techniques.ppt_第3页
Advanced LabVIEW Programming Tips and Techniques.ppt_第4页
Advanced LabVIEW Programming Tips and Techniques.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

LabVIEW高级编程技巧,内容概要,NationalInstruments公司简介LabVIEW高级编程技巧用户定义的调试指示器定时循环基于事件触发的编程改善VI的性能调用动态链接库,NationalInstruments:虚拟仪器倡导者,建立于1976年超过1,000种测试测量产品在40个国家设有直属分支机构,600家系统联盟商,中国:研发,区域咨询,技术支持,市场,NI客户的分布,超过25,000个客户分布在多达80个国家财富500强中95的制造型企业,1.调试指示器,灵活的调试工具,可详细显示数据线上通过的数据指示器的操作可以体现VI的灵活性和强大功能传统的调试指示器存在一些缺点,如只能显示数组中的一个元素,用户定义的调试指示器,能显示各种数据类型可定制指示器外观可定制指示器处理功能设置条件断点,定制你的需求,指示器不仅仅可以显示数据将数据录入文件对两个指示器之间的执行进行定时计算总的调用次数或是每秒的调用次数,内建的定制指示器,在数据连线上点击鼠标右键菜单显示所有相关的指示器指示器存放在目录vi.lib_probesdefault下,Keepgraphicsbelowthetextandtotheright,客户指示器的结构,包含一个控件控件的数据类型就是所指示的数据线包含一个指示器Boolean,类似条件断点True=暂停执行False=继续执行,Keepgraphicsbelowthetextandtotheright,2.定时循环,精确的定时while循环多个时钟频率的定时反馈,动态定时特性多达128个循环优先级examplesgeneraltimedloop.llb,定时循环的配置,定时循环,3.基于事件的编程,管理用户界面,通常采用的方法有中断响应和事件驱动中断响应采用轮询机制处理,非常占用CPU资源,还可能会丢失用户界面的响应事件驱动无需轮询即可捕捉到相关事件,顺序处理捕捉到的所有事件,不会丢失也不会颠倒顺序,事件举例,事件结构不需要轮询就可以捕捉到自定义菜单上的用户选择ItemTag返回菜单条目MenuRef返回菜单的refnum,VirtualInstrument,事件类型,Application,事件举例:退出应用程序超时,Control,事件举例:关闭前面板VI上的鼠标移动,事件举例:改变控件数值特定控件上的鼠标移动,通知事件和可滤除事件,通知事件通知LabVIEW发生了一个用户行为;只能在EventDataNode中使用可滤除事件在用户界面处理之前验证或改变事件数据,避免影响VI;可在EventFilterNode和EventDataNode中使用,LabVIEW7新事件,更多的用户界面事件动态注册的事件用户定义的事件ActiveX事件,事件结构的组成部分,EventSelectorLabel确定观察的事件Timeout等待事件的毫秒数;缺省值1(无限期)DefaultedTunnels新型tunnel,允许未连线的事件案例提供缺省值DynamicEventTerminals用于动态事件的注册,事件结构的组成部分,EventDataNode确定事件发生时LV提供的数据,与UnbundleByName函数类似EventFilterNode确定EventDataNode中可提供的数据子集,可供事件案例修改,事件结构的基本使用,通常在While循环中使用每次循环只处理一次事件,其它时间休眠在事件结构的左侧边框端口上可获得事件数据,事件结构的配置,通过对话框来配置事件,右击事件结构的边框,选择“EditEventsHandledbyThisCase”,事件注册和面板锁定,包含事件结构的VI被预留以后,事件就成为已注册的已注册事件发生后,会进入队列等待直到相应的事件结构开始执行,事件不会丢失也不会出现顺序混乱默认情况下,前面板被锁定直到事件被处理完可以关闭锁定,但只针对过滤事件VI变成空闲后,事件被注销,3.1动态事件,下列情况时,需要动态注册事件:事件注册只能发生在应用程序的某些部分在程序运行过程中需要改变哪些VIs或控件可以发生事件在subVI中处理事件,而不是仅在注册事件的VI中,动态事件,RegisterForEventsEventStructureUnregisterForEventsCreateUserEventGenerateUserEventDestroyUserEvent,编程模型,注册事件,连接到事件结构,选择动态事件,注销事件,3.2程序产生的(用户)事件,RegisterForEventsEventStructureUnregisterForEventsCreateUserEventGenerateUserEventDestroyUserEvent,用户事件编程模型,创建并注册用户事件,产生用户事件,注销用户事件,消灭用户事件,用户事件举例,3.3ActiveX事件,RegisterEventCallback,ActiveX编程模型,注册ActiveX事件,选择事件,创建和编辑CallbackVI,总结:事件处理结构,允许在subvi中处理事件代码提供统一的,简化的事件处理机制用户界面接口控制外部代码硬件触发用户定义事件注册和非注册事件,4.改善VI的性能,改进内存使用使用高效数组函数谨慎处理字符串和数组避免不必要的复杂数据结构减少I/O开销减少I/O调用的次数减少开启和关闭资源的次数减少屏幕更新,4.1改进内存使用,LabVIEW处理了大部分内存管理的细节资源分配,复制,释放,溢出减少程序框图的大小提高可读性和稳定性内存管理自动进行,你不需要过多的干预理解LabVIEW是何时并如何为你“代劳”内存管理的可以大大提高对内存使用的效率,VI在内存中的数据结构,FrontPanelBlockDiagramCode框图编译成机器码DataSpaceControl/indicator数值Blockdiagram常量动态定义的数据,VI何时加载到内存中,始终载入data平台符合时载入Code(MacOS,Windows,Sun,Linux)Panel和Diagram在必要时载入(recompiling),MainVI,SubVI,Alwaysinmemory,Residentsometimes,FrontPanel,BlockDiagram,Code,DataSpace,FrontPanel,BlockDiagram,Code,DataSpace,内存使用情况,ToolsAdvancedProfileVIs勾选“ProfileMemoryUsage”虽然看起来不大,但如果是在一个循环结构中,就会累加出一个很大结果。在高速运行的循环结构中,不要显示subVI的前面板如果可能,将循环结构移到subVI中完成。,全局和局部变量,每一次变量的读操作都会给数据生成一个新的缓冲区在使用大数组、字符串或复杂数据结构时会带来很大影响从内存使用和执行速度来看,使用数据线永远是更有效的方法,属性节点,使用属性节点会引起线程间的交换,从而降低效率如果只是为了更新控件的值,不要使用属性节点如果同时改变其它属性,更新数值不会造成更大损失,因为线程交换已经发生了,更新前面板控件,GoodBetterBest,创建高效的平行框图,LabVIEW周期性地在平行循环间切换使用Wait(ms)function确保不太重要的循环占用较少的处理器时间,5.共享库函数,What?Windows中的.dll,UNIX/Linux中的.so,等等Why?降低磁盘空间和内存占用How?应用程序只在需要的时候调用库函数程序开始执行以后,由运行链接编辑器来处理所有调用,动态链接库(DLL),MicrosoftWindows中的一种软件模块包含可执行代码和可被Windows应用程序或其它DLL调用的数据函数和数据只有在运行状态下,被Windows应用程序或其它DLL调用时才被加载和链接一个DLL包括:一个特殊函数(DllMain)几个编程者自定义来完成常用任务的函数,DLL特性,不能单独运行的可执行文件应用程序要求时,由操作系统加载应用程序把DLL代码作为自己二进制文件的一部分来使用应用程序不需要知道原始DLL是由什么语言编写的,也不需要清楚这些功能是如何实现的。DLL就像一个有输出函数的黑盒子,LabVIEW中调用SharedLibrary/DLL,AdvancedCallLibraryFunctionNode右击CallLibraryFunctionNode,选择Configure来调用DLL中的特定函数,CallLibraryFunction的配置,指定需调用的DLL函数和函数参数选择dll的调用规则;对于Win32dll来说,可以是缺省(stdcall)或C.,CallLibraryFunction和Win32DLLs,函数参数可以是以下类型:,Void数字型有符号/无符号8-bit,16-bit和32-bit整数4-byte,单精度数8-byte,双精度数,数组数组数据指针数组句柄字符串CPascalG(LabVIEW)AdapttoType,DLL实例:MessageBoxA函数,回传类型,函数名,参数:HWNDhWnd32-bit无符号整数.确定parentwindow.此时为NULL.LPCSTRlpTextC-stylestringLPCSTRlpCaptionC-stylestringUINTuTypeunsigned32-bitintegervalue.,回传类型:int32-bitsignedinteger,调试CallLibraryFunction,如果VI不执行或者导致死机,检查下列可能:DLL的路径名是否正确如果错误信息是functionnotfoundinlibrary,检查函数名的拼写、语法和大小写传递给DLL函数的所有参数都有数据线连接到CallLibraryFunction图标的输入端口上.检查数据类型和参数顺序使用了正确的调用规则:C或者缺省(stdcall);TheWin32API使用缺省(stdcall)规则需要更多帮助,请参阅UsingExternalCodeinLabVIEW手册,CreatingDLLsinLabVIEW,编写和测试VI,从VI创建DLL,最终应用程序中调用DLL,LabVIEW中创建DLL,要创建其它编程环境中可轻松调用的DLL,需要注意以下几点:调用规则应用程序的结构输入/输出参数(包括可选项)函数原型声明,参数数组选项,数字量的数组可以是:任意整数类型单(4-byte)精度浮点数双(8-byte)精度浮点数创建DLL时,可以选择如何从DLL中传递数据通过数值或引用,作为数组数据指针或者数组句柄指针等等根据DLL最终如何使用来选择合适的项目,参数字符串选项,Lab

温馨提示

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

评论

0/150

提交评论