精讲LabVIEW设计模式(2009)_第1页
精讲LabVIEW设计模式(2009)_第2页
精讲LabVIEW设计模式(2009)_第3页
精讲LabVIEW设计模式(2009)_第4页
精讲LabVIEW设计模式(2009)_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

1、1天津大学精仪学院精讲LabVIEW设计模式天津大学精仪学院陈世利2天津大学精仪学院 LabVIEW 设计模式 LabVIEW 定时结构优化LabVIEW程序内存管理调用动态链接库LabVIEW与多线程3天津大学精仪学院什么是设计模式?什么是设计模式? 一种LabVIEW程序模板与架构 软件实践中通用的程序架构,其本质是对很多十分类似的问题进行总结归纳的基础上提炼出的一些具有代表性的软件开发规范 具有灵活的配置功能 被广泛使用4天津大学精仪学院使用设计模式的益处使用设计模式的益处简化整个开发过程 更容易理解程序代码 代码可重用可靠性 被使用多年,被证明其“可用并可靠” 大量技术资源与例程5天津

2、大学精仪学院使用设计模式注意事项使用设计模式注意事项1、不是一成不变的定律,既要知道有哪些设计模式,还要知道每种模式解决实际应用中的哪些问题,是如何解决的,效果如何?2、文本式编程语言中广泛使用的设计模式在图形化数据流编程中的应用问题。6天津大学精仪学院注意!注意!有些时候你没有必要选用最复杂的设计模式不要忘记最常见的设计模式数据流!数据流!7天津大学精仪学院通用型通用型:状态机模式、消息队列模式、用户界面事件模式专用型:专用型:主从线程模式、生产/消费模式、后台服务模式、应用程序启动模式、代理模式LabVIEW设计模式设计模式8天津大学精仪学院基本工具基本工具 循环结构 移位寄存器 分支结构

3、 枚举型常量 事件结构9天津大学精仪学院状态机模式状态机模式“我需要执行一系列的事件步骤,但是步骤顺序我需要执行一系列的事件步骤,但是步骤顺序可通过编程决定的。可通过编程决定的。”10天津大学精仪学院自动贩卖机模型自动贩卖机模型InitializeWaitChangeQuarterDimeNickelExitVendNo inputQuarter DepositedTotal = 50Change RequestedDime DepositedNickel DepositedTotal 50Total = 50Total = 50Total 50Total = 5011天津大学精仪学院基本三要

4、素:基本三要素:状态、事件、动作状态、事件、动作12天津大学精仪学院背景背景动态结构:允许不同的状态,按通过编程决定的顺序进动态结构:允许不同的状态,按通过编程决定的顺序进行执行行执行静态顺序结构静态顺序结构13天津大学精仪学院状态机结构状态机结构对于一个最简单的状态机结构而言,它是可以用顺序结构代替的;而对于相对复杂的状态机结构而言,却可以作为测试流程的组织者和管理者。14天津大学精仪学院在在LabVIEW下实现状态机结构下实现状态机结构 While循环+Case结构 每一Case即为一个状态 当前状态中需有决定下一状态的判定代码 使用枚举常量枚举常量通过移位寄存器传递至下一状态15天津大学

5、精仪学院 切换代码切换代码工作流程工作流程初始状态初始状态FIRST STATE下一状态下一状态 执行步骤执行步骤移位寄存器用于传递状态Case结构对每一状态都配备一个分支切换代码根据执行步骤中的结果来决定下一状态枚举常量枚举常量16天津大学精仪学院 一个自定义的枚举类型对应一个状一个自定义的枚举类型对应一个状态机中的状态集合态机中的状态集合枚举常量枚举常量 枚举类型是一种允许程序员自定义枚举类型是一种允许程序员自定义元素的数据类型,它可以显示数值对应元素的数据类型,它可以显示数值对应的具体含义,帮助程序员理解程序中使的具体含义,帮助程序员理解程序中使用的变量值。用的变量值。17天津大学精仪学

6、院枚举常量举例枚举常量举例 控件选板控件选板“Modern”1、枚举控件、指示、常量、枚举控件、指示、常量2、默认、默认U163、修改、修改 Edit Items4、隐式与显式类型转换、隐式与显式类型转换18天津大学精仪学院DEMO1顺序型状态机模式顺序型状态机模式数据传数据传递方式递方式19天津大学精仪学院DEMO2改进的顺序型状态机模式改进的顺序型状态机模式1、去掉、去掉i 2、添加一个移位寄存器、添加一个移位寄存器20天津大学精仪学院DEMO3测试流程型状态机测试流程型状态机1、解决顺序型状态机不便阅读和修、解决顺序型状态机不便阅读和修改的问题,采用枚举型常量。改的问题,采用枚举型常量。

7、2、采用自定义型控件,方便修改。、采用自定义型控件,方便修改。over21天津大学精仪学院消息队列模式消息队列模式“我需要执行一系列的事件步骤,但是步骤顺序可通过我需要执行一系列的事件步骤,但是步骤顺序可通过编程决定的。编程决定的。”步骤是由用户界面事件决定的,如某个应用程序共要处步骤是由用户界面事件决定的,如某个应用程序共要处理理4个状态,分别是个状态,分别是A,B,C和和D,前面板有,前面板有3个按钮分别个按钮分别控制控制3种运行时的状态序列种运行时的状态序列ABCD、DCAB和和BDCA。引入消息队列模式,通过建立队列缓冲区来解决这个问引入消息队列模式,通过建立队列缓冲区来解决这个问题,

8、这种模式也称为题,这种模式也称为“队列型状态机模式队列型状态机模式”。22天津大学精仪学院消息处理过程消息处理过程建立消息队列加入消息探测消息EXIT?删除消息接收消息执行代码销毁消息队列消息源YesNo23天津大学精仪学院队列建立方式队列建立方式队列函数和数组队列函数和数组24天津大学精仪学院队列函数队列函数最常用的最常用的4个函数个函数25天津大学精仪学院数组数组1、数组函数、数组函数2、配合移位寄存器、配合移位寄存器3、无需手动销毁队列空间、无需手动销毁队列空间26天津大学精仪学院数组方式数组方式DEMO27天津大学精仪学院队列函数方式队列函数方式DEMO28天津大学精仪学院队列函数与数

9、组的不同队列函数与数组的不同1、消息传递方式不同、消息传递方式不同 移位寄存器移位寄存器 & FIFO2、释放消息队列的方式不同、释放消息队列的方式不同29天津大学精仪学院用户界面事件模式用户界面事件模式“我需要轮询用户的操作,但是这样会降低我程我需要轮询用户的操作,但是这样会降低我程序的运行速度,并且有时我还检测不到序的运行速度,并且有时我还检测不到”30天津大学精仪学院LabVIEW中基于事件驱动的编程中基于事件驱动的编程LabVIEW事件示例事件示例 按下鼠标 键盘按键 前面板的用户交互31天津大学精仪学院LabVIEW 事件结构事件结构 什么是事件结构? 带有多个子框图的结构节

10、点,就像条件结构条件结构 事件结构是如何工作的? 当面板上事件发生时才被唤醒 自动执行相应事件框图内的事件代码 当处理完成相应事件后便结束,并不一直循环等待32天津大学精仪学院为什么要使用事件为什么要使用事件结构结构 ? 用更简单的事件处理替代原来的查询循环 最小化 CPU 的使用 不会遗漏用户界面交互事件 可检测更多的交互事件 编程生成您自己的事件编程生成您自己的事件33天津大学精仪学院用户界面事件的两种类型用户界面事件的两种类型通知事件通知事件和和过滤事件过滤事件34天津大学精仪学院事件源:用户界面事件事件源:用户界面事件用户自定义事件用户自定义事件5个函数个函数35天津大学精仪学院用户自

11、定义事件用户自定义事件DEMO36天津大学精仪学院事件注册事件注册静态事件注册:只有用户界面事件静态事件注册:只有用户界面事件 选择事件源(程序、选择事件源(程序、VI或控件)、特定事件、编辑或控件)、特定事件、编辑 分支处理事件数据。分支处理事件数据。Vi运行时自动注册。运行时自动注册。动态事件注册:何时产生何种事件动态事件注册:何时产生何种事件37天津大学精仪学院静态事件注册静态事件注册demo38天津大学精仪学院动态事件注册动态事件注册4个步骤个步骤1、获取要处理事件对象的、获取要处理事件对象的VI服务器引用;服务器引用;2、将、将VI服务器引用连接至服务器引用连接至“注册事件注册事件”

12、函数;函数;3、将事件结构放在、将事件结构放在While循环中,等待处理循环中,等待处理对象事件直到终止条件出现;对象事件直到终止条件出现;4、通过取消注册时间函数停止事件发生。、通过取消注册时间函数停止事件发生。39天津大学精仪学院动态事件注册动态事件注册demo最值器最值器40天津大学精仪学院用户界面事件用户界面事件demo一个动态一个动态+5个静态个静态41天津大学精仪学院状态机状态机用户界面事件混合用户界面事件混合demo初始化时不初始化时不再需要用户再需要用户自定义事件自定义事件42天津大学精仪学院其他模式其他模式“我希望同一时刻能够处理多个消息事件,而不我希望同一时刻能够处理多个消

13、息事件,而不是下一个消息代码必须等待上一次响应完成后才是下一个消息代码必须等待上一次响应完成后才能执行能执行”“我不希望消息排队,等待很烦的,有时采集数据和我不希望消息排队,等待很烦的,有时采集数据和记录数据应该同时进行的记录数据应该同时进行的”。43天津大学精仪学院主从线程模式主从线程模式通常应用于具有多个通常应用于具有多个同时发生的并且拥有同时发生的并且拥有不同运行速率的线程不同运行速率的线程的程序中。比如采集的程序中。比如采集电压同时写入磁盘,电压同时写入磁盘,采集速率采集速率1KHz,记录,记录则每则每5秒一次。秒一次。1、数据通信采用全局变量、局域变量或共享变量;、数据通信采用全局变

14、量、局域变量或共享变量;2、Stop为为Switch模式模式3、有时会用到事件发生模块、有时会用到事件发生模块Occurrence44天津大学精仪学院生产者生产者/消费者消费者“我需要可以同时间执行的两个过程,并且需保我需要可以同时间执行的两个过程,并且需保证它们不会互相影响执行速度。证它们不会互相影响执行速度。”45天津大学精仪学院生产者生产者/消费者消费者全局变量、局域变量或共享变量的每次复制都是原始数全局变量、局域变量或共享变量的每次复制都是原始数据的一个副本,占据了大量的空间。实际上只需要使用据的一个副本,占据了大量的空间。实际上只需要使用一部分缓冲区作为数据存储的中间部分,这需要借助

15、队一部分缓冲区作为数据存储的中间部分,这需要借助队列技术。列技术。存储单元存储单元数据流入数据流入数据流出数据流出46天津大学精仪学院生产者生产者/消费者具体做法消费者具体做法最简单模式最简单模式47天津大学精仪学院在在LabVIEW下实现生产者下实现生产者/消费者消费者 无数据相关的多个循环 主 / 从关系 在循环间实现通讯与同步48天津大学精仪学院工作流程工作流程 主循环负责通知各个从循环是否执行 允许循环间异步执行 数据的非相关性实现多线程 程序过程分解 从循环1从循环2主循环49天津大学精仪学院实现循环间的数据通讯实现循环间的数据通讯 变量 通知器 队列 信号量 集合50天津大学精仪学

16、院队列队列在队列中添加元素在队列中添加元素从队列中释放元素从队列中释放元素Reference to existing queue in memory选择队列中元素的数据类型出列操作需要等待数据进入或者超时情况51天津大学精仪学院生产者生产者 / 消费者循环消费者循环52天津大学精仪学院后台服务模式后台服务模式问:问:“我需要程序在后台运行,不要前面板,不要交互我需要程序在后台运行,不要前面板,不要交互”答:答:“采用采用VI属性和方法接口,足以使你控制后台运行的属性和方法接口,足以使你控制后台运行的VI” 例子:一个网络服务监听程序,程序只需要接收与客户端例子:一个网络服务监听程序,程序只需要

17、接收与客户端Sockets的连接,实现三次握手,连接完成后将引用交给前端应用程序处理,的连接,实现三次握手,连接完成后将引用交给前端应用程序处理,同时继续监听。同时继续监听。53天津大学精仪学院后台服务模式后台服务模式54天津大学精仪学院后台服务模式后台服务模式55天津大学精仪学院应用程序启动模式应用程序启动模式 “我想设计一个启动画面,同时显示应用程序加载的进度,加载我想设计一个启动画面,同时显示应用程序加载的进度,加载完毕后退出启动画面,运行主程序完毕后退出启动画面,运行主程序”56天津大学精仪学院应用程序启动模式应用程序启动模式1、SubVI目录目录2、启动应用程序、启动应用程序.vi3

18、、主程序、主程序“网络实验系统网络实验系统.vi”57天津大学精仪学院代理模式代理模式 “我希望顶层我希望顶层VI(主(主VI)需要某个子)需要某个子VI时,才将其载入内存时,才将其载入内存” “可以在应用程序中引入迟载入技术可以在应用程序中引入迟载入技术”58天津大学精仪学院代理模式代理模式59天津大学精仪学院总结总结 设计模式 简化LabVIEW开发过程 被广泛使用及证明其可用 常用的LabVIEW设计模式 数据流 事件驱动 状态机结构 生产者/消费者60天津大学精仪学院 而功能型全局变量(functional global variable)是为了避免竞争机制而实现的一种非重入型子vi6

19、1天津大学精仪学院定时结构定时结构 精确的定时 while 循环 精确的定时顺序结构 多个时钟频率的定时 反馈, 动态定时特性 多优先级设置 examplesgeneraltimedloop.llb62天津大学精仪学院定时顺序结构定时顺序结构类似添加内置定时功能的顺序结构63天津大学精仪学院定时循环定时循环1、优先级:相对同一个程序框图中的多个定时循环而言,优先级数大的循环优先执行。每一个定时循环都有自己的线程,这里的优先级即线程优先级。2、循环名称,对于可重入子VI中包含定时循环,且该子VI的多个实例出现在同一个程序框图中,可以将循环名称作为子VI的输入端子。3、Deadline:用于指定完

20、成一个循环的时间限定,如未在指定的时间内完成,则左端数据节点Finished Late?i-1返回真。默认值-1表示Deadline由Period决定。4、如何处理某次循环使用的时间大于设定的周期?是否丢弃丢失的了的循环?是否保持原始相位?64天津大学精仪学院定时循环定时循环65天津大学精仪学院定时循环定时循环66天津大学精仪学院演示:定时循环演示:定时循环67天津大学精仪学院演示:定时循环演示:定时循环68天津大学精仪学院可具体手动设置定时循环运行的核可具体手动设置定时循环运行的核设置定时循环运设置定时循环运行的指定核行的指定核NEW!69天津大学精仪学院可具体手动设置定时循环运行的核可具体

21、手动设置定时循环运行的核NEW!70天津大学精仪学院定时顺序结构定时顺序结构Timed Sequence含帧的定式循环含帧的定式循环Timed Loop with Frames71天津大学精仪学院为什么要优化为什么要优化LabVIEW程序内存管理程序内存管理 LabVIEW的自动管理内存特性 方便用户开发,满足一般应用需求 LabVIEW应用程序趋向大型化,复杂化 项目规模大,需求复杂 数据处理量大,性能要求高 好的编程风格帮助LabVIEW优化内存管理 可以显著提高程序运行效率 需要了解LabVIEW的内存分配机制72天津大学精仪学院监测监测VI内存占用和运行时间的工具内存占用和运行时间的工

22、具 帮助定位和分析程序中的瓶颈部分工具工具性能分析性能分析性能和内存性能和内存73天津大学精仪学院显示显示VI内存分配情况的工具内存分配情况的工具 帮助分析程序中各个数据变量的内存拷贝情况 目标:消除黑点工具工具性能分析性能分析显示缓存区分配显示缓存区分配74天津大学精仪学院了解程序内存的使用了解程序内存的使用75天津大学精仪学院演示:监测内存使用演示:监测内存使用76天津大学精仪学院优化优化 LabVIEW程序内存管理程序内存管理 适时选择动态调用子VI 避免强制类型转换 把复杂VI分解成多个子VI 采用多面板程序 没必要时不要设置VI的重入特性 合理分配数组内存 灵活使用LabVIEW自带

23、的VI 使用元素同址操作结构In Place Element Structure77天津大学精仪学院在程序中动态调用子在程序中动态调用子VI321 减少程序占用内存以及载入时间打开VI引用通过引用节点调用关闭引用78天津大学精仪学院2配置配置 VI加载加载179天津大学精仪学院数据类型转换数据类型转换 强制点表明连接了两种不同的数据类型 LabVIEW中类型强制转换需要数据备份 涉及大数组的类型强制转换会占用大量内存80天津大学精仪学院推荐的类型转换方式推荐的类型转换方式 更好的解决方式是在随机数创建时进行转换 避免转换大块数据缓存(14.3 KB)(22.7 KB)81天津大学精仪学院把复杂

24、把复杂VI分解成多个子分解成多个子VI 子vi会增加额外的前面板和框图的空间,但并不增添额外的代码和数据空间。由于程序运行时只有代码和数据被调入内存,子vi不会占用额外的内存。 好处是子vi运行结束后,LabVIEW可以及时收回子VI的数据空间,从而改善内存的使用效率。82天津大学精仪学院采用多面板程序采用多面板程序 通过多面板程序实现只有在必要时才显示某些窗口,因为界面显示是最费内存的,因此这样可以极大降低内存的消耗。没必要时不要设置VI的重入特性 重入型vi每次运行时都会对自己使用的数据生成一个副本,这增加了内存开销83天津大学精仪学院合理分配数组内存合理分配数组内存 过多进行内存重新分配

25、占用很大开销 慎用可能导致内存重新分配的相关函数 创建数组 连接字符串84天津大学精仪学院演示:编程方法影响程序性能演示:编程方法影响程序性能总在开辟新内存,必定时间长总在开辟新内存,必定时间长85天津大学精仪学院演示:编程方法影响程序性能演示:编程方法影响程序性能循环次数并非事先指定,因此每次循环也会开循环次数并非事先指定,因此每次循环也会开辟新的内存,但节省了辟新的内存,但节省了Build Array函数的时间。函数的时间。86天津大学精仪学院演示:编程方法影响程序性能演示:编程方法影响程序性能循环无需开辟新的内存,时间会明显减少。循环无需开辟新的内存,时间会明显减少。87天津大学精仪学院

26、演示:编程方法影响程序性能演示:编程方法影响程序性能88天津大学精仪学院灵活使用灵活使用LabVIEW自带的自带的VI 基本线性代数子程序VI (Basic Linear Algebra Subroutines) 合理归并基本线性代数操作 减少不必要的内存复制开销 使程序更加简洁数学数学线性代数线性代数BLASNEW!89天津大学精仪学院元素同址操作结构元素同址操作结构 更新数组或簇中的元素时,避免元素数据备份应用控制应用控制内存控制内存控制NEW!90天津大学精仪学院元素同址操作结构的优点元素同址操作结构的优点 方便实现多种情况的缓存重用,消除元素复制开销 数组索引和替换 簇的绑定和解除绑定

27、 波形的绑定和解除绑定 变体的缓存重用 任意元素的缓存重用91天津大学精仪学院举例:数组索引和替换举例:数组索引和替换 将数组第2个元素增大10倍方法一:方法一:方法二:方法二:元素数据备份元素数据备份92天津大学精仪学院举例:簇的绑定和解除绑定举例:簇的绑定和解除绑定 个人纳税信息的更新93天津大学精仪学院演示:嵌套的元素同址操作结构演示:嵌套的元素同址操作结构94天津大学精仪学院LabVIEW 与多线程与多线程程序、进程与线程程序、进程与线程程序是计算机指令的静态集合、进程就是正在运行的程序,程序是计算机指令的静态集合、进程就是正在运行的程序,是一些所有权的集合,包括内存、是一些所有权的集

28、合,包括内存、CPU运行时间等一系列运行时间等一系列资源,为线程的运行提供一个环境。线程才是程序的最小资源,为线程的运行提供一个环境。线程才是程序的最小执行单位,是程序的一条执行路径,是操作系统分配执行单位,是程序的一条执行路径,是操作系统分配CPU时间的基本实体。一个程序的进程以一个主线程开始,如时间的基本实体。一个程序的进程以一个主线程开始,如果进程的执行可以划分为多个执行路径,则可以创建多个果进程的执行可以划分为多个执行路径,则可以创建多个线程。线程。例:三线程程序,用户界面线程、数据采集线程、仪器控例:三线程程序,用户界面线程、数据采集线程、仪器控制线程。这些线程共享进程内的公共资源。

29、制线程。这些线程共享进程内的公共资源。95天津大学精仪学院LabVIEW 与多线程与多线程多处理器环境下的并行编程多处理器环境下的并行编程1、线程调度、线程调度2、线程优先级、线程优先级3、线程通信与同步、线程通信与同步进程间:环境变量、命名管道、共享内存等进程间:环境变量、命名管道、共享内存等线程间:全局变量、全局数据、文件句柄或通信参数等进程内线程间:全局变量、全局数据、文件句柄或通信参数等进程内数据结构来完成。数据结构来完成。同步:数据同步、设备同步、任务同步。同步:数据同步、设备同步、任务同步。96天津大学精仪学院LabVIEW对多线程程序设计的支持不支持线程的直接创建,从不支持线程的

30、直接创建,从执行系统执行系统和和数据流控制数据流控制两个层两个层次提供对多线程程序设计的支持次提供对多线程程序设计的支持发布时需要运行引擎。发布时需要运行引擎。97天津大学精仪学院执行子系统线程数量配置执行子系统线程数量配置 vi.lib utilities sysinfo.llb 中的中的threadconfig.vi一共有一共有25个具有优先级的执行子系统。个具有优先级的执行子系统。98天津大学精仪学院执行子执行子系统线系统线程数量程数量配置配置99天津大学精仪学院线程是一把双刃剑!线程是一把双刃剑!100天津大学精仪学院线程优先级的设置线程优先级的设置1、有时你只要一个不同时间的等待。、

31、有时你只要一个不同时间的等待。2、避免优先级倒置或饥饿的发生。、避免优先级倒置或饥饿的发生。101天津大学精仪学院LabVIEW多线程程序设计多线程程序设计LabVIEW执行系统会自动管理线程,但这并不意味着不需执行系统会自动管理线程,但这并不意味着不需要用户的参与。在要用户的参与。在LabVIEW程序中,从数据流的起始点到程序中,从数据流的起始点到结束点的整个流程称为结束点的整个流程称为执行路径执行路径。并行的执行路径是划分。并行的执行路径是划分线程任务的依据。如要充分利用线程的优势,应尽量提高线程任务的依据。如要充分利用线程的优势,应尽量提高程序的并行度,程序的并行度,避免使用顺序结构避免

32、使用顺序结构来实现程序架构。来实现程序架构。102天津大学精仪学院超线程求质数超线程求质数demo103天津大学精仪学院可重入技术可重入技术demo104天津大学精仪学院线程通信与同步线程通信与同步 “多个循环要访问同一个设备,但该设备任何时候只能同时响多个循环要访问同一个设备,但该设备任何时候只能同时响应一个命令应一个命令”105天津大学精仪学院线程通信与同步线程通信与同步1、局部变量、局部变量 创建方法、写竞争、布尔端子注意机创建方法、写竞争、布尔端子注意机械动作设置,破坏数据流编程模式械动作设置,破坏数据流编程模式2、全局变量、全局变量 创建方法、减少创建方法、减少vi之间数据传递的连线

33、之间数据传递的连线3、共享变量、共享变量 必须有项目,单进程或网络发布必须有项目,单进程或网络发布4、功能全局变量、功能全局变量 106天津大学精仪学院共享变量共享变量1、要有项目、要有项目2、使用的文件要位于项目中、使用的文件要位于项目中3、必须部署才能使用、必须部署才能使用4、对于客户端,需要指定绑定数据源、对于客户端,需要指定绑定数据源5、可以拖到前面板,小箭头变成绿色表示连接成功(红、可以拖到前面板,小箭头变成绿色表示连接成功(红色失败)色失败)6、右键面板控件,属性、右键面板控件,属性/数据绑定可以将控件于某个共享数据绑定可以将控件于某个共享变量绑定。变量绑定。7、共享变量引擎、共享

34、变量引擎Shared Variabled Engine(NI-PSP)SVE107天津大学精仪学院功能全局变量功能全局变量 Functional Global Variables 将一个只执行一次的将一个只执行一次的For循环或循环或While循环放循环放在一个子在一个子vi中,并使用中,并使用未初始化的未初始化的移位寄存移位寄存器保存可读写的数据。与全局变量相比,该器保存可读写的数据。与全局变量相比,该方法的优势在于可以控制对移位寄存器的访方法的优势在于可以控制对移位寄存器的访问。问。108天津大学精仪学院功能全局变量功能全局变量 demo109天津大学精仪学院1、Notification通

35、知技术通知技术1一段程序框图在收到来自于一段程序框图在收到来自于其它程序框图或其它程序框图或vi的通知的通知消息前消息前保持等待状态保持等待状态。而通知消息可以是任何类型。而通知消息可以是任何类型的数据,因此可以实现不同框图不同的数据,因此可以实现不同框图不同vi之间的数据之间的数据传递。传递。2不同于局部变量和全局变量,不需轮询。不同于局部变量和全局变量,不需轮询。3通知器任何时候只能存放一个消息,新消息发出时,通知器任何时候只能存放一个消息,新消息发出时,旧消息会被丢弃。消息接收者的数目没有限制,新旧消息会被丢弃。消息接收者的数目没有限制,新消息发出之前,该消息一直存在于通知器中,在任消息

36、发出之前,该消息一直存在于通知器中,在任何时候都可以被任何接收者接收,接收者接收到该何时候都可以被任何接收者接收,接收者接收到该消息后并不删除通知器中的消息。消息后并不删除通知器中的消息。110天津大学精仪学院Notification DEMO in LabVIEW注意观察注意观察User1-3的延时设置与是否忽略以前的消息的设的延时设置与是否忽略以前的消息的设置对波形的影响置对波形的影响111天津大学精仪学院Queue in LabVIEW Queue结构是一种结构是一种FIFO结构,采用结构,采用Obtain Queue函数创函数创建队列时需要指定建队列时需要指定size大小。大小。 数据

37、进去后如果没有程序将这些数据读出,将一直保数据进去后如果没有程序将这些数据读出,将一直保存在队列中,直到有程序将其读出并删除。如果有两个应存在队列中,直到有程序将其读出并删除。如果有两个应用程序都在等待同一个队列中的同一条数据,只有那个动用程序都在等待同一个队列中的同一条数据,只有那个动作快的程序会收到数据。作快的程序会收到数据。112天津大学精仪学院Queue DEMO in LabVIEW3个子函数的周期不同个子函数的周期不同113天津大学精仪学院Semaphore in LabVIEW信号量技术用于限制同时访问一个被保护的共享资源的任务数目,信号量就像一把key。比如两个独立运行的vi需

38、要控制同一个机器人,而该机器人任何时候只能被一个vi控制,此时就可以使用信号量技术。当某个vi正在控制机器人时,通过锁定该信号量,其他vi只能处于信号量等待状态,只有该vi释放信号量后,增等待的vi才能获得信号量,实现对机器人的控制。114天津大学精仪学院Semaphore demo in LabVIEW115天津大学精仪学院Rendezvous in LabVIEW集合点技术可以让若干并行的任务同步执行,只有所有的任务到达后,才开始同步执行。这就好比一个会议,只有等到参会人员到齐后才开始。1、修改主函数的集合点数目为2、3、42、添加集合名称,并在4的时候运行一个同名集合用户,解救!116天

39、津大学精仪学院LabVIEW 状态图模块状态图模块 LabVIEW Statechart“简单的状态机结构无法实现状态简单的状态机结构无法实现状态并发并发、包含包含与与保存保存功能功能”117天津大学精仪学院LabVIEW状态图模块状态图模块 状态图 用直观的方法来表达基于事件的系统118天津大学精仪学院应用领域应用领域 数字协议 控制类应用 时序逻辑 批处理 事件响应 用户界面的实现 系统建模119天津大学精仪学院设计状态和转移设计动作和警戒代码产生状态图子VI嵌入到 LabVIEW 程序框图中LabVIEW 状态图开发的步骤状态图开发的步骤120天津大学精仪学院动手演示:创建简单状态图动手

40、演示:创建简单状态图121天津大学精仪学院DEMOLabVIEW 状态图122天津大学精仪学院添加自定义模板添加自定义模板123天津大学精仪学院更多资源更多资源http:/ National Instruments 公司简介 LabVIEW 高级编程技巧1.用户定义的调试指示器2.巧用LabVIEW控件3.定时结构4.基于事件触发的编程5.优化LabVIEW程序内存管理6.调用动态链接库调用动态链接库125天津大学精仪学院共享库函数共享库函数What?Windows 中的 .dll, UNIX/Linux 中的 .so, 等等Why?降低磁盘空间和内存占用How? 应用程序只在需要的时候调用库

41、函数 程序开始执行以后,由运行链接编辑器来处理所有调用 126天津大学精仪学院动态链接库动态链接库 (DLL)Microsoft Windows 中的一种软件模块包含可执行代码和可被Windows应用程序或其它 DLL 调用的数据 函数和数据只有在运行状态下,被Windows 应用程序或其它DLL调用时才被加载和链接一个 DLL 包括:- 一个特殊函数 (DllMain) - 几个编程者自定义来完成常用任务的函数127天津大学精仪学院DLL 特性特性 不能单独运行的可执行文件 应用程序要求时,由操作系统加载 应用程序把 DLL 代码作为自己二进制文件的一部分来使用 应用程序不需要知道原始DLL

42、是由什么语言编写的,也不需要清楚这些功能是如何实现的。 DLL就像一个有输出函数的黑盒子128天津大学精仪学院LabVIEW下调用下调用DLL的方法的方法 勿在浮沙筑高台调用库函数节点 剑走中锋导入共享库工具129天津大学精仪学院LabVIEW 中调用中调用 Shared Library/DLLConnectivity Libraries & Executables Call Library Function Node右击 Call Library Function Node,选择 Configure 来调用DLL中的特定函数130天津大学精仪学院Call Library Functi

43、on 的配置的配置指定需调用的 DLL 函数和函数参数 选择 dll 的调用规则; 对于 Win32 dll 来说,可以是缺省 (stdcall) 或 C.131天津大学精仪学院Call Library Function 和和 Win32 DLLs函数参数可以是以下类型:Void数字型 有符号/无符号 8-bit, 16-bit 和 32-bit 整数 4-byte, 单精度数 8-byte, 双精度数数组 数组数据指针 数组句柄字符串 C Pascal G (LabVIEW)Adapt to Type132天津大学精仪学院DLL 实例实例: MessageBoxA 函数函数回传类型回传类型函数名函数名int MessageBoxA (hWnd, lpText, lpCaption, uType)参数参数参数参数:HWNDhWnd 32-bit 无符号整数. 确定 parent window. 此时为 NULL.LPCSTRlpText C-style stringLPCSTRlpCaption C-style stringUINTuType unsigned 32-bit integer value.回传类型回传类型:int 32-bit signed integer133天津大学精仪学院调试调试 Call Library Function如果 VI不执行或者导致死

温馨提示

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

评论

0/150

提交评论