已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
燕山大学课 程 设 计 说 明 书题 目:LABVIEW程序设计模式生产者/消费者学院(系): 电 气 工 程 学 院 年级专业: 生 物 医 学 工 程 1班 学 号: 080103040022 学生姓名: 周 亚 男 指导教师: 赵 勇 燕山大学课程设计(论文)任务书院(系): 电气工程学院 基层教学单位:生物医学工程系 学 号080103040022学生姓名周亚男专业(班级)生物医学工程一班设计题目LABVIEW程序设计模式生产者/消费者设计技术参数生产者/消费者基本概念;生产者/消费者编程技术;设计要求掌握概念基本原理;编写相应实例。工作量学习概念基本知识,编写相应软件,完成课程设计报告一份工作计划1天 方案调研;2-4天 软件设计与编写调试5天 系统总结、答辩、完成报告参考资料1LABVIEW8.2基础教程 雷振山等 中国铁道出版社2网上相关资料指导教师签字基层教学单位主任签字说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份目 录第一章 同步VI和函数11.1队列11.2通知器21.3集合点41.4信号量61.5事件发生8第二章 生产者消费者102.1状态机102.2事件结构112.3生产者消费者122.3.1组成与结构122.3.2分类122.3.3举例说明14第三章 并行编程183.1任务化并行183.2数据并行化183.3流水线21设计小结24参考文献:25燕 山 大 学 课 程 设 计 说 明 书第一章 同步VI和函数1.1队列 概念: 队列操作函数用于创建在同一程序框图的不同部分间或不同VI间进行数据通信的队列。队列操作函数可缓冲数据。应用举例:队列基础VI前面板注释:上面的波形是随机产生的数据波形,“入队列速度”可以调节随机数产生的速度;下面的波形是通过队列读取随机波形的数据而生成的波形,“出队列速度”可以调节其读取队列中数据的速度。“队列中元素”是下面波形未来得及读的数据,“队列大小”可以调节队列的容量。程序框图注释:1) 创建Data队列,设置数据类型和大小。2) 左上方循环生成并传递数据至“元素入队列”函数。通过“等待(ms)”函数控制循环速度,选择等待100ms或500ms。“释放队列引用”执行时停止循环。此时队列已不存在,进行元素出队列操作将产生错误。3) 下方循环返回队列中元素的个数,并通过属性节点将数据传递至波形图表。如按下停止按钮或“获取队列引用”函数发生错误,循环将停止。循环停止时,将调用“释放队列引用”函数,终止其它两个循环,同时报告“获取队列引用”函数可能发生的错误。4) 右上方循环通过“元素出队列”函数移除队列的第一个元素并输出数据。通过“等待(ms)”函数控制循环速度,选择等待100ms或500ms。“释放队列引用”执行时停止循环。此时队列已不存在,进行元素出队列操作将产生错误。1.2通知器概念:通知器操作函数用于挂起一个程序框图的执行,直至从程序框图的另一部分或同一应用程序中运行的另一个VI收到数据后才继续执行。应用举例:通知器VI前面板注释:波形图表1是随机数产生的sin函数波形,“等待毫秒”可以调节随机数产生的速度和波形图表3的读取显示;波形图表2是通过通知器获取波形1的数据并显示;波形图表3是通过局部变量读取波形1 的数据并显示。程序框图注释:1) 通过一个“获取通知器”函数创建通知器,其它函数返回已创建的通知器。可由任意函数完成该任务。2) 顶层循环生成波形图表1中的正弦波和相位数据,并发送至“发送通知”函数。通过“等待(ms)”函数控制循环速度。3) 左侧循环用于接收通知器数据并更新波形图表2。“等待通知”函数的前面板控件用于控制通知器的动作。查看通过通知器使循环与顶层循环同步的方法。4) 右侧的循环用于更新波形图表3。循环通过通知器比较并行循环的同步。5) 销毁通知器,检查错误。6) 在停止循环1和3后,重置停止按钮为默认值。1.3集合点概念:集合点VI用于在执行的某个特定点处同步两个或多个独立并行的任务。每个到达集合点的任务将等待,直到集合点处等待的任务达到指定的数量后,所有任务才继续执行。应用举例:子VI用于产生随机波形,共三个子VI,三个子VI相互独立。子程序框图注释:1) 等待集合点时,设置等待布尔值设置为TRUE(前面板的背景色)。等待集合点后,在图形上绘制随机数量的连续点。总的程序框图1.4信号量概念:信号量VI用于限制可在同一个共享(受保护)资源上同时执行的任务的数量。受保护的资源或关键代码段可能涉及全局变量的写入或与外部仪器通信。应用:使用信号量VI可将两个或多个独立的并行任务同步,以使一次只有一个任务可执行被共有信号量所保护的关键代码段。当需要某些VI或程序框图的某部分等待另一VI或程序框图其它部分完成关键代码段执行后再执行时,可使用此类VI。举例:用户1前面板 总的程序框图1.5事件发生概念:事件发生函数用于控制独立的异步活动。应用:当需要某个VI或程序框图某部分等待另一VI或程序框图其它部分完成任务而不强制LabVIEW轮询时,可使用此类函数。举例:前面板第二章 生产者消费者2.1状态机 当程序需要在不同的状态中实现转换,顺序结构就不能满足要求,这时就可以使用状态机的方式。 在状态图中,每个状态都会导致另一个或者多个状态。状态机通过计算用户输入和内部状态来决定下一状态。 许多应用程序都需要一个初始状态,后面接着一个默认状态,以执行各种不同的操作。 具体执行什么操作要依据以前和当前的输入及状态。 停止状态通常用来执行清除操作。在本例中,默认状态是“输入”。 使用状态机的好处是一旦创建了状态转移图,就可以简单地创建出LabVIEW VI。 使用状态方式编程 将状态转移图转化为LabVIEW 程序框图需要如下基本结构: While 循环不断地执行各个状态。 条件结构包括对应于每一个状态的条件分支和执行代码 移位寄存器包括状态转移信息 状态功能代码实现状态的功能 状态转换代码判定下一个状态状态转移图的流程由While 循环实现。 每一个状态对应于条件结构中的每一个条件分支。 While 循环上的移位寄存器保存当前状态,并将当前状态传递给条件结构的输入。 控制状态机 控制状态机的初始化和状态转换的最佳方法是使用枚丽型输入控件。一般使用自定义类型的枚丽变量。使用子定义类型的枚丽变量可以是控件和实例乊间存在关联,使得添加或删除状态时所有的枚丽型输入控件副本自动更新。2.2事件结构事件结构用来响应用户界面操作,如点击鼠标,按下键盘,退出等程序等操作。事件结构的工作原理和内置的条件结构相似。事件结构可包含多个分支,一个分支对应一个独立的事件处理程序。一个分支配置可处理一个或多个事件,但每次只能发生这些事件中的一个事件。事件结构执行时,将等待一个之前指定事件的发生,待该事件发生后即执行事件相应的条件分支,一个事件分支处理完毕后,事件结构也就执行完毕,事件结构并不通过循环来处理多个事件。事件结构位于函数选板“编辑结构事件结构”。 事件结构由事件选择标签,事件数据节点,时间接线端和程序框构成,如下图所示。位于事件结构框左上角的时间接线端 用于指定事件超前等待事件的时间(以毫秒为单位),默认值为-1,即事件结构以无限长时间等待一个事件的发生。2.3生产者消费者2.3.1组成与结构循环结构:While/Time队列 :创建队列、元素入队列、元素出队列、队列销毁生产者:产生信息并将数据放入队列消费者:依次从队列中取出数据,用条件结构处理。数据流的流向:生产者 消费者2.3.2分类 2种不同的生产者/消费者架构中,一个传送的是数据(Data),一个传送的是事件(Events),从图二和图三中可以明显看到区别所在。生产者循环中往往需要放置事件结构用于处理用户界面事件,在产生事件的同时往往会从事件结构中拿到数据并传递给消费者,所以实际上队列的元素类型定义为字符串和变体的组合,字符串用来传递命令,就是消费者循环的条件分支的命令;在传递命令的同时传递数据,数据的类型为变体,就更加具有通用性。完整的情况下,在接收到退出的命令后推出消费者,然后销毁队列;生产者的超时分支执行后,报错退出程序。2.3.3举例说明例一:利用通知器的生产者消费者结构电梯VI前面板注释:利用各个电梯内部的选择按钮可使相应电梯到达指定楼层;利用“建筑物”右方的各楼层的呼叫按钮可以调动三个电梯中闲置的一部到达指定楼层,例如,当按下4楼的呼叫时,程序通过“电梯空闲”通知器的“等待多个”找到一部空闲的电梯,然后通过子程序将电梯移动到指定楼层。程序框图注释:1) 首先将所有电梯移动到底层2) 为每个电梯创建两个通知器。整型通知器用于指示“开往指定楼层”。布尔通知器用于指示“电梯空闲”。首先设置“电梯空闲”通知3) 对全部电梯执行“等待多个”,以便找到一部空闲的电梯。找到的第一部电梯会被选中。对于选中的电梯,取消其通知,从而设置为“不空闲”。由于在“事件结构”内部,不会有其它的按钮事件同时检查电梯是否空闲,所以此处不会有竞争状态。4) 将选定的电梯发送至选定的楼层5) 发送一条新的消息,将其它空闲的电梯设置为“空闲”。这样做是必须的,因为同一个“等待多个通知”节点可能被要求再次等待同一个节点不会两次返回同一条消息。6) 这三个循环各自控制一部电梯。循环之间是相互独立的。每个循环都在等待通知,指示电梯开往指定的某个楼层。当电梯开到指定楼层时,对“电梯空闲”通知器进行设置,以便再次响应呼叫。当通知器被释放(节点返回错误)时,这些循环就会终止例二:利用队列的生产者消费者结构多个vi并行执行且相互通信VI子1 子2主前面板注释:主程序运行时可以调用显示两个子程序,主程序实时显示当前时间,可以发送数据给两个子VI显示出来,主程序可以接受由子程序2生成的数组C并且生成图形显示;子程序1可以生成数组F并发送给子程序2;子程序2可以处理数组F生成数组C。程序框图注释1) 主队列被创建2) 与两个子VI通讯的队列通过引用的方式连接到主VI中3) 引用的簇包含两个子VI的队列,在状态机中通过队列操作将所要发送的命令发送到两个子VI中4) 队列管理器用于队列的排序、错误和停止等的处理5) 用一个“枚举”和一个“变体”组成的“簇”作为数据类型6) 运行两个子程序,在两个子VI中完成队列的创建第三章 并行编程3.1任务化并行 概念:任务并行化是在软件中实现独立任务的并行处理。实现: 根据执行功能进行分解,独立任务可以同时执行任务间没有数据相关与依赖性;LabVIEW代码结构可直接反映出执行功能的并行性LabVIEW自动识别平行代码并分配多线程执行。应用: 生产者消费者架构。举例:省略3.2数据并行化 概念: 数据并行化是一种将大块数据集分割成小块并行处理的编程技术。完成数据处理后,再将其组合成单个数据集。实现: 通过NI LabVIEW实现并行处理相比于传统基于文本的编程语言来说更直观、简单,创建多线程应用会要求更高的编程知识。应用:图3中的代码为两个矩阵(矩阵1和矩阵2)的乘法运算。这是LabVIEW中两个大矩阵乘法的标准实现斱法。图3 不采用数据并行化在LabVIEW中实现矩阵乘法完成上述的操作需要大量的计算时间,尤其当数据量特别大时。图3中的代码并未体现出多核处理器的优势,除非矩阵乘法VI恰好是多线程,且针对多核处理器优化过。相对的,图4中的代码利用了数据并行化,从而在双核处理器上具有更快的执行速度。 图4 采用数据并行化在LabVIEW中实现矩阵乘法运算在LabVIEW中使用该项技术提高多核处理器上的性能的同时,很重要一个前提是:矩阵乘法VI必须是可重入的。不可重入的矩阵乘法VI将不能独立、并行地执行。应用举例:前面板注释:A Colums和A Rows显示矩阵A的维数,B Colums和BRows显示矩阵B的维数,表格显示两矩阵相乘的结构C矩阵;2.15是数据并行化执行现对于串行执行为程序提升的倍数。程序框图注释:1) 产生两个可以改变维数的随机矩阵。2) 记录矩阵相乘前的时间。3) 两个矩阵直接相乘的串行处理方式,之后读出乘积结果。4) 将A矩阵进行分解,得到两个子矩阵,然后分别和B矩阵相乘,将得到的乘积结果合并,之后读出乘积结果。5) 记录矩阵相乘后的时间。6) 两时间点想减得到相应矩阵相乘的时间。7) For循环结束后,将两次矩阵相乘时间相除,得到并行相乘所用时间相对于串行相乘时间的倍数,并显示3.3流水线概念: 流水线是一项应用广泛的技术,用于顺序软件任务的性能提升。简单说来,流水线是将顺序任务分步处理的方式,就如同产品装配线的模式。实现: 本质上,我们可以通过LabVIEW的移位寄存器和反馈节点在任何程序中创建类似“装配线”流水线结构。流水线技术能够提高原本顺序执行应用的效率,使程序员从多核处理器中获益。为了从流水线中获得最大的性能提升,必须使各级流水线平衡,不允许某级执行时间比其它级长许多。此外,需要最小化各级流水线间的数据传输,避免因处理器核内存见的互相读写而导致性能反而降低。应用举例:前面版注释:选项卡容器显示两种不同的执行方式,很直观;图中的2.75是程序执行的提升倍速。程序框图注释:1) 记录数据处理之前的时间。2) 对数据进行串行处理。3) 对数据进行并行的流水线处理。4) 记录数据处理完成后的时间,并与处理前时间相减,得到数据处理的时间。5) 将两次数据处理的时间相除得到时间上的提升倍数,并显示。设计小结本设计的题目是“生产者消费者构架”,只是一个很泛泛的题目,开始时我感觉无从下手。起初我查阅了大量的毕业论文或者研究生论文,发现那些设计大都是结合硬件做的,于是我便放弃了这一方向。接着我查找范例,发现生产者消费者可以说是LabVIEW 中出镜率最高的构架,他融合了事件结构,状态机,队列等经典结构。可是由于我对事件结构、状态机和队列都不甚了解,由于是决定进行底层概念的学习。在对底层概念的学习过程中,我发现以队列为代表的同步函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年交通b证理论考试试题及答案
- 职业卫生管理制度和操作规程(标准)
- 新能源汽车产业政策解读真题
- 2025 八年级道德与法治下册法治与网络谣言治理案例课件
- 2026年信阳涉外职业技术学院单招职业技能考试题库及答案详解参考
- 2026年南充职业技术学院单招职业倾向性考试题库带答案详解(完整版)
- 2026年厦门兴才职业技术学院单招综合素质考试题库带答案详解(黄金题型)
- 2026年包头铁道职业技术学院单招职业倾向性测试题库及参考答案详解一套
- 2026年南通师范高等专科学校单招职业适应性考试题库附答案详解(模拟题)
- 2026年南京机电职业技术学院单招职业技能测试题库附答案详解(培优)
- 2026年安全生产开工第一课筑牢复工复产安全防线
- 2026年标准版离婚协议书(无财产)
- 山西大学附属中学2025-2026学年高三1月月考生物(含答案)
- 2024年货车驾驶员管理制度
- T/GIEHA 035-2022医院室内空气质量要求
- 2025年上海市长宁区初三二模语文试卷(含答案)
- 五年级上册数学计算题每日一练(共20天带答案)
- CQI-23Molding Process Assessment 模塑系统评估审核表-中英文(空)
- 新生儿消化不良的健康宣教护理课件
- 2025年事业单位考试(自然科学专技类C类)综合应用能力试卷与参考答案
- 2024年北京版小学英语必背单词表
评论
0/150
提交评论