版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、智能仪器技术智能仪器技术应用程序框架和设计模式应用程序框架和设计模式什么是设计模式? 一种LabVIEW程序模板与架构 软件实践中通用的程序架构,其本质是对很多十分类似的问题进行总结归纳的基础上提炼出的一些具有代表性的软件开发规范 具有灵活的配置功能 被广泛使用使用设计模式的益处简化整个开发过程 更容易理解程序代码 代码可重用可靠性 被使用多年,被证明其“可用并可靠” 大量技术资源与例程使用设计模式注意事项1、不是一成不变的定律,既要知道有哪些设计模式,还要知道每种模式解决实际应用中的哪些问题,是如何解决的,效果如何?2、文本式编程语言中广泛使用的设计模式在图形化数据流编程中的应用问题。注意!
2、有些时候你没有必要选用最复杂的设计模式不要忘记最常见的设计模式数据流!数据流!通用型通用型:状态机模式、消息队列模式、用户界面事件模式专用型:专用型:主从线程模式、生产/消费模式、后台服务模式、应用程序启动模式、代理模式LabVIEW设计模式设计模式本讲内容本讲内容应用程序框架和设计模式应用程序框架和设计模式1. 1.2. 2.3. 3.4. 4.基于基于循环和分支结构循环和分支结构的程序框架的程序框架基于基于事件结构事件结构的程序框架的程序框架标准状态机标准状态机生产者生产者/ /消费者消费者设计模式设计模式本讲内容本讲讨论的问题本讲讨论的问题如何建立一个如何建立一个具有一定规模的完整应用程
3、序具有一定规模的完整应用程序 应用程序框架和设计模式应用程序框架和设计模式应用程序框架应用程序框架(Application FrameworkApplication Framework)?)?供软件开发者使用供软件开发者使用的用以实现特定编程环境下的用以实现特定编程环境下应用程序标准结构应用程序标准结构的软件框架;例如微软的软件框架;例如微软VisualVisualC+C+中包含的中包含的MFCMFC框架(框架(不仅仅是函数库,还包含程序不仅仅是函数库,还包含程序框架框架););应用程序框架是根据大量的研发经验总结出的应用程序框架是根据大量的研发经验总结出的一套切实可行的应用程序建立模型。降低
4、开发难一套切实可行的应用程序建立模型。降低开发难度,提高程序的健壮性;需要投入一定的时间学习度,提高程序的健壮性;需要投入一定的时间学习其使用方法;其使用方法;编写编写小程序小程序时不需要对程序框架有很清楚的概时不需要对程序框架有很清楚的概念;编写念;编写具有一定规模的程序具有一定规模的程序时,使用一个好的程时,使用一个好的程序框架显得序框架显得非常重要非常重要。应用程序框架和设计模式应用程序框架和设计模式设计模式(设计模式(Design PatternDesign Pattern)?)?设计模式是针对软件设计中经常发生的问题的设计模式是针对软件设计中经常发生的问题的通用的和可重用的解决方案通
5、用的和可重用的解决方案。它是对如何解决一个。它是对如何解决一个问题的描述或模板,可以在多种不同场合下使用。问题的描述或模板,可以在多种不同场合下使用。在在LabVIEWLabVIEW中,设计模式是中,设计模式是解决常见软件设计解决常见软件设计问题的问题的VIVI结构结构。设计模式一般以模板的形式出现,。设计模式一般以模板的形式出现,其目的为提高重用性、编程效率和质量。其目的为提高重用性、编程效率和质量。(LabVIEW Style BookLabVIEW Style Book) 应用程序框架和设计模式应用程序框架和设计模式设计模式?设计模式?设计模式促进了好的编程样式设计模式促进了好的编程样式
6、。如果一个应用。如果一个应用程序中的所有程序中的所有VIVI都应用了常用的设计模式,那么开都应用了常用的设计模式,那么开发者们就可以很容易地发者们就可以很容易地识别、理解、维护和重用识别、理解、维护和重用彼彼此的程序代码。设计模式容易制作成模板,构建程此的程序代码。设计模式容易制作成模板,构建程序时经常可以从模板开始,按照自己的需求修改模序时经常可以从模板开始,按照自己的需求修改模板,而不是总是从头建立程序。这样将节约很多开板,而不是总是从头建立程序。这样将节约很多开发时间,并且确保所开发的所有发时间,并且确保所开发的所有VIVI结构一致。在一结构一致。在一个多个开发者协作的组织中,设计模式和
7、模板有助个多个开发者协作的组织中,设计模式和模板有助于建立统一的标准,以确保整个组织的所有成员所于建立统一的标准,以确保整个组织的所有成员所研发软件具有一致的高质量。研发软件具有一致的高质量。 应用程序框架和设计模式应用程序框架和设计模式应用程序框架应用程序框架 vs. vs. 设计模式设计模式设计模式包括解决各种软件问题的通用方案,设计模式包括解决各种软件问题的通用方案,其范围广阔;应用程序框架仅针对其范围广阔;应用程序框架仅针对“应用程序如何应用程序如何架构架构”这一具体问题。这一具体问题。设计模式设计模式程序框架程序框架设计模式设计模式解决其他问题解决其他问题的设计模式的设计模式1. 1
8、. 基于循环和分支结构的程序框架基于循环和分支结构的程序框架轮询(轮询(PollingPolling)在在循环结构循环结构中中不断查询控件的状态不断查询控件的状态,一旦判定,一旦判定发生用户事件(例如按下一个按钮)则执行相应发生用户事件(例如按下一个按钮)则执行相应的代码。轮询常用于按钮按下操作的响应。的代码。轮询常用于按钮按下操作的响应。例例1 1:响应:响应按下按钮按下按钮操作(轮询)操作(轮询)用户界面事件模式“我需要轮询用户的操作,但是这样会降低我程我需要轮询用户的操作,但是这样会降低我程序的运行速度,并且有时我还检测不到序的运行速度,并且有时我还检测不到”1. 1. 基于循环和分支结
9、构的程序框架基于循环和分支结构的程序框架按钮的按钮的“机械动作机械动作”“释放时触发释放时触发”:用户按下按:用户按下按钮后控件的值为真,在程序框图上读取该控件的真值之后,钮后控件的值为真,在程序框图上读取该控件的真值之后,按钮控件会按钮控件会自动弹起,恢复值为假自动弹起,恢复值为假,即,即一次按钮按下操作只一次按钮按下操作只会引起程序读取到一次真值会引起程序读取到一次真值;等待函数等待函数的作用:决定循环执行频率的作用:决定循环执行频率/ /轮询频率(轮询频率(100100毫毫秒为典型值);使用秒为典型值);使用WindowsWindows的的任务管理器任务管理器,观察,观察有有等待函等待函
10、数和数和没有没有等待函数两种情况下等待函数两种情况下CPUCPU的占用情况的占用情况。例2:统计循环次数和按下按钮次数(轮询)如果去掉等待函数则“循环执行次数”控件值很大,占用较多CPU资源1. 基于循环和分支结构的程序框架移位寄存器初始化为0,用于存储”确定“按钮按下次数移位寄存器的值每次循环都送入“确定按钮按下次数”控件“确定按钮”按下时移位寄存器值加1存储循环执行次数1. 1. 基于循环和分支结构的程序框架基于循环和分支结构的程序框架例例3 3:生成波形和分析波形(轮询):生成波形和分析波形(轮询)自由游标自由游标按下按下“生成波形生成波形”按钮生成指定波形,之后按下按钮生成指定波形,之
11、后按下“分析分析波形波形”按钮求取波形的最大值和对应按钮求取波形的最大值和对应x x索引,将游标移动到最索引,将游标移动到最大值点大值点1. 1. 基于循环和分支结构的程序框架基于循环和分支结构的程序框架2. 2. 基于事件结构的程序框架基于事件结构的程序框架事件结构事件结构+While+While循环循环图形化操作系统和应用程序采用图形化操作系统和应用程序采用事件驱动事件驱动的编的编程机制。程序开始后进入等待状态,等待某个事件程机制。程序开始后进入等待状态,等待某个事件发生后进入相应处理代码,处理结束后回到等待状发生后进入相应处理代码,处理结束后回到等待状态。态。以下代码中,用户要求结束程序
12、运行(按下以下代码中,用户要求结束程序运行(按下“停止停止”按钮)时,退出事件结构,结束按钮)时,退出事件结构,结束WhileWhile循循环,停止程序运行。环,停止程序运行。2. 2. 基于事件结构的程序框架基于事件结构的程序框架例例4 4:响应按下按钮操作(事件结构):响应按下按钮操作(事件结构)2. 2. 基于事件结构的程序框架基于事件结构的程序框架例例5 5:统计循环次数和按下按钮次数(事件结构):统计循环次数和按下按钮次数(事件结构)2. 2. 基于事件结构的程序框架基于事件结构的程序框架例例6 6:生成波形和分析波形(事件结构):生成波形和分析波形(事件结构)两个按钮输入控件两个按
13、钮输入控件置于事件结构内置于事件结构内“停止停止”: :值改变值改变事件分支未给出事件分支未给出初始化代码,初始化代码,最先执行最先执行状态机模式“我需要执行一系列的事件步骤,但是步骤顺序我需要执行一系列的事件步骤,但是步骤顺序可通过编程决定的。可通过编程决定的。”3. 3. 标准状态机标准状态机标准状态机(标准状态机(Standard State MachineStandard State Machine)自动贩卖机模型InitializeWaitChangeQuarterDimeNickelExitVendNo inputQuarter DepositedTotal = 50Change
14、RequestedDime DepositedNickel DepositedTotal 50Total = 50Total = 50Total 50Total = 50基本三要素:状态、事件、动作状态、事件、动作背景动态结构:允许不同的状态,按通过编程决定的顺序进动态结构:允许不同的状态,按通过编程决定的顺序进行执行行执行静态顺序结构静态顺序结构状态机结构对于一个最简单的状态机结构而言,它是可以用顺序结构代替的;而对于相对复杂的状态机结构而言,却可以作为测试流程的组织者和管理者。在LabVIEW下实现状态机结构 While循环+Case结构 每一Case即为一个状态 当前状态中需有决定下一状
15、态的判定代码 使用枚举常量枚举常量通过移位寄存器传递至下一状态 切换代码切换代码工作流程初始状态初始状态FIRST STATE下一状态下一状态 执行步骤执行步骤移位寄存器用于传递状态Case结构对每一状态都配备一个分支切换代码根据执行步骤中的结果来决定下一状态枚举常量枚举常量 一个自定义的枚举类型对应一个一个自定义的枚举类型对应一个状态机中的状态集合状态机中的状态集合枚举常量枚举常量 枚举类型是一种允许程序员自定义元素的枚举类型是一种允许程序员自定义元素的数据类型,它可以显示数值对应的具体含数据类型,它可以显示数值对应的具体含义,帮助程序员理解程序中使用的变量值。义,帮助程序员理解程序中使用的
16、变量值。枚举常量举例枚举常量举例 控件选板控件选板“Modern”1、枚举控件、指示、常量、枚举控件、指示、常量2、默认、默认U163、修改、修改 Edit Items4、隐式与显式类型转换、隐式与显式类型转换3. 3. 标准态机标准态机新建对话框,新建对话框,VI-VI-基于模板基于模板-框架框架-设计模式设计模式-标准状态机标准状态机3. 3. 标准状态机标准状态机使用什么数据类型表示状态机的状态?使用什么数据类型表示状态机的状态?分支分支/ /条件结构条件结构选择器端子选择器端子可接受数据类可接受数据类型:布尔(型:布尔(此处不适用此处不适用),整数,字符串,枚),整数,字符串,枚举举1
17、. 1. 整数整数:不够直观,分支选择器接入的变量意义不:不够直观,分支选择器接入的变量意义不清楚;清楚;2. 2. 字符串字符串:意义明确,但容易出现拼写错误,引起:意义明确,但容易出现拼写错误,引起程序执行错误;解决办法:程序执行错误;解决办法:建立可容纳所有拼写错建立可容纳所有拼写错误字符串的默认分支误字符串的默认分支,弹出对话框警告自己;,弹出对话框警告自己;3. 3. 枚举枚举:意义明确,不易出现错误。:意义明确,不易出现错误。 在前面板添加枚举控件,在前面板添加枚举控件,在快在快 “自定义类型自定义类型”,保,保存自定义类存自定义类捷菜单选择捷菜单选择高级高级-自定义自定义3. 3
18、. 标准状态机标准状态机建立和使用建立和使用自定义自定义枚举类型枚举类型 编辑自定义枚举类型所包含的编辑自定义枚举类型所包含的枚举值,枚举值,“控件类型控件类型”列表选择列表选择型控件(型控件(.ctl.ctl)在状态机中使用在状态机中使用自定义枚举类型自定义枚举类型,类型定义改变时,所有实例自动更新类型定义改变时,所有实例自动更新 在框图窗口函数选板,在框图窗口函数选板,“Select a VISelect a VI”,选择已保存,选择已保存自定义控件自定义控件 在框图窗口添加自在框图窗口添加自定义枚举类型的常量定义枚举类型的常量3. 3. 标准状态机标准状态机3. 标准状态机3. 3. 标
19、准状态机标准状态机等待状态中,检查三个按钮控件的值,如果找到真值则进入对应状态,否则回到等待状态初始化后立刻进入等待状态检查三个按钮控件值的方法:建立布尔类型1维数组,查找真值,从输出索引值判断有(索引0)无(索引=-1)真值和有真值时真值的位置。有真值时,索引值+2,之后类型转化为枚举值等待函数,降低查询按钮值时的CPU负荷3. 3. 标准状态机标准状态机例例7 7:生成波形和分析波形(标准状态机):生成波形和分析波形(标准状态机)3. 3. 标准状态机标准状态机生成波形后,回到等待状态分析波形后,回到等待状态Stop状态下退出循环,结束程序运行3. 3. 标准状态机标准状态机例例8 8:生
20、成波形和分析波形(带事件结构的状态机):生成波形和分析波形(带事件结构的状态机)其他模式“我希望同一时刻能够处理多个消息事件,而不我希望同一时刻能够处理多个消息事件,而不是下一个消息代码必须等待上一次响应完成后才是下一个消息代码必须等待上一次响应完成后才能执行能执行”“我不希望消息排队,等待很烦的,有时采集数据和我不希望消息排队,等待很烦的,有时采集数据和记录数据应该同时进行的记录数据应该同时进行的”。主从线程模式通常应用于具有多个通常应用于具有多个同时发生的并且拥有同时发生的并且拥有不同运行速率的线程不同运行速率的线程的程序中。比如采集的程序中。比如采集电压同时写入磁盘,电压同时写入磁盘,采
21、集速率采集速率1KHz,记录,记录则每则每5秒一次。秒一次。1、数据通信采用全局变量、局域变量或共享变量;、数据通信采用全局变量、局域变量或共享变量;2、Stop为为Switch模式模式3、有时会用到事件发生模块、有时会用到事件发生模块Occurrence生产者/消费者“我需要可以同时间执行的两个过程,并且需保我需要可以同时间执行的两个过程,并且需保证它们不会互相影响执行速度。证它们不会互相影响执行速度。”生产者/消费者全局变量、局域变量或共享变量的每次复制都是原始数全局变量、局域变量或共享变量的每次复制都是原始数据的一个副本,占据了大量的空间。实际上只需要使用据的一个副本,占据了大量的空间。
22、实际上只需要使用一部分缓冲区作为数据存储的中间部分,这需要借助队一部分缓冲区作为数据存储的中间部分,这需要借助队列技术。列技术。存储单元存储单元数据流入数据流入数据流出数据流出生产者/消费者具体做法最简单模式最简单模式在LabVIEW下实现生产者/消费者 无数据相关的多个循环 主 / 从关系 在循环间实现通讯与同步工作流程 主循环负责通知各个从循环是否执行 允许循环间异步执行 数据的非相关性实现多线程 程序过程分解 从循环1从循环2主循环实现循环间的数据通讯 变量 通知器 队列 信号量 集合队列在队列中添加元素在队列中添加元素从队列中释放元素从队列中释放元素Reference to exist
23、ing queue in memory选择队列中元素的数据类型出列操作需要等待数据进入或者超时情况生产者 / 消费者循环后台服务模式问:问:“我需要程序在后台运行,不要前面板,不要交互我需要程序在后台运行,不要前面板,不要交互”答:答:“采用采用VI属性和方法接口,足以使你控制后台运行的属性和方法接口,足以使你控制后台运行的VI” 例子:一个网络服务监听程序,程序只需要接收与客户端例子:一个网络服务监听程序,程序只需要接收与客户端Sockets的连接,实现三次握手,连接完成后将引用交给前端应用程序处理,的连接,实现三次握手,连接完成后将引用交给前端应用程序处理,同时继续监听。同时继续监听。后台
24、服务模式后台服务模式4. 4. 生产者生产者/ /消费者设计模式消费者设计模式队列(队列(QueueQueue)一种特殊的一种特殊的数据结构数据结构;是;是按顺序存储按顺序存储的数据的的数据的集合,对于集合的主要操作是集合,对于集合的主要操作是在集合尾部加入数据在集合尾部加入数据和和从集合头部移除数据;从集合头部移除数据;FIFOFIFO(First-In-First-OutFirst-In-First-Out)。)。4. 4. 生产者生产者/ /消费者设计模式消费者设计模式4. 4. 生产者生产者/ /消费者设计模式消费者设计模式队列典型函数,队列典型函数,函数选板,编程函数选板,编程-同步
25、同步-队列操作队列操作1. 1. 获取队列引用获取队列引用(Obtain QueueObtain Queue)功能:获得队列的引用。默认情况下,如果指定队列已功能:获得队列的引用。默认情况下,如果指定队列已存在,获得该队列的引用;存在,获得该队列的引用;如果队列未存在,则创建队列如果队列未存在,则创建队列。可以在程序的不同部分引用同一个队列,即在两端代码之间可以在程序的不同部分引用同一个队列,即在两端代码之间共享和传递数据。共享和传递数据。4. 4. 生产者生产者/ /消费者设计模式消费者设计模式2. 2. 元素入队列元素入队列(Enqueue ElementEnqueue Element)3
26、. 3. 元素出队列元素出队列(Dequeue ElementDequeue Element)4. 4. 预览队列元素预览队列元素(Preview Queue ElementPreview Queue Element)功能:返回队列头元素,但功能:返回队列头元素,但不删除不删除元素。元素。5. 5. 获取队列状态获取队列状态(Get Queue StatusGet Queue Status)功能:返回队列状态信息,功能:返回队列状态信息,如元素个数。如元素个数。-1-1(默认)时永远等待(默认)时永远等待4. 4. 生产者生产者/ /消费者设计模式消费者设计模式6. 6. 队列最前端插入元素队
27、列最前端插入元素(Enqueue Element At Opposite EndEnqueue Element At Opposite End)功能:在队列头插入元素(功能:在队列头插入元素(非标准非标准操作,用于插入操作,用于插入高优高优先级先级元素)。元素)。7. 7. 清空队列清空队列(Flush QueueFlush Queue)功能:清空队列所有元素(并返回这些元素)。功能:清空队列所有元素(并返回这些元素)。8. 8. 释放队列引用释放队列引用(Release QueueRelease Queue)功能:释放队列的一个引用。功能:释放队列的一个引用。4. 4. 生产者生产者/ /消
28、费者设计模式消费者设计模式例例9 9:队列操作示例:队列操作示例入队列两入队列两个元素个元素预览预览/ /观察观察队列头元素队列头元素预览操作预览操作不会不会删除队列元素删除队列元素在队列头插在队列头插入元素入元素队列头元素队列头元素出队列出队列生产者,生产数据生产者,生产数据消费者,消费消费者,消费/ /使用数据使用数据数据数据4. 4. 生产者生产者/ /消费者设计模式消费者设计模式什么是什么是生产者生产者/ /消费者设计模式消费者设计模式(Producer/Consumer design patternProducer/Consumer design pattern)?)?两个线程,一个
29、生产数据,另一个消费两个线程,一个生产数据,另一个消费/ /使用数使用数据;在线程之间据;在线程之间建立缓冲建立缓冲(采用(采用队列队列实现),确保实现),确保消费者以自己的步调使用数据,同时允许生产者将消费者以自己的步调使用数据,同时允许生产者将更多的数据添加到队列中。更多的数据添加到队列中。缓冲区(基于缓冲区(基于队列队列,已填充一部分),已填充一部分)4. 4. 生产者生产者/ /消费者设计模式消费者设计模式消费者循环,从缓冲取出数据消费者循环,从缓冲取出数据使用队列建立生产者和消费者之间的数据缓冲4. 生产者/消费者设计模式新建对话框,VI-基于模板-框架-设计模式-生产者/消费者设计
30、模式(数据)生产者循环,向缓冲加入数据,入队列通过轮询决定何时入队列消费者循环,从缓冲取出数据使用队列建立生产者和消费者之间的数据缓冲4. 生产者/消费者设计模式新建对话框,VI-基于模板-框架-设计模式-生产者/消费者设计模式(事件)生产者循环,向缓冲加入数据,入队列通过事件结构入队列消费者循环,从缓冲取出数据初始化代码4. 4. 生产者生产者/ /消费者设计模式消费者设计模式例例1010:生成波形和分析波形(生产者:生成波形和分析波形(生产者/ /消费者)消费者)用事件结构将动作用事件结构将动作/ /操作入队列操作入队列“Initialize”Initialize”首先入队列首先入队列4. 4. 生产者生产者/ /消费者设计模式消费者设计模式用事件结构将动作用事件结构将动作/ /操作入队列操作入队列在消费者循环内,执行相应动作4. 4. 生产者生产者/ /消费者设计模式消费者设计模式自定义枚举类型,包含7个状态采用属性节点,指示灯位置初始化到(0,0)首先进入初始化状态4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版人工智能技术研发与应用合同15篇
- 常州2025版二手房过户税费处理与过户手续办理合同2篇
- 二零二五版智慧城市建设合作合同范本2篇
- 二零二五版在线教育管理系统定制开发合同3篇
- 二零二五版ISO9001质量管理体系认证与质量管理体系审核与监督合同3篇
- 水电工程2025年度施工安全评估合同2篇
- 二零二五版LED显示屏户外广告位租赁合同协议3篇
- 二零二五年海鲜餐饮业特色菜品开发与销售合同3篇
- 二零二五年度虚拟现实游戏开发电子合同承诺3篇
- 二零二五版智能零售企业兼职销售员劳动合同3篇
- DLT 5285-2018 输变电工程架空导线(800mm以下)及地线液压压接工艺规程
- 新员工入职培训测试题附有答案
- 劳动合同续签意见单
- 大学生国家安全教育意义
- 2024年保育员(初级)培训计划和教学大纲-(目录版)
- 河北省石家庄市2023-2024学年高二上学期期末考试 语文 Word版含答案
- 企业正确认识和运用矩阵式管理
- 分布式光伏高处作业专项施工方案
- 陈阅增普通生物学全部课件
- 检验科主任就职演讲稿范文
- 人防工程主体监理质量评估报告
评论
0/150
提交评论