版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元8状态机8.1LabVIEW程序设计模式8.2状态机8.3综合案例8:状态机的应用返回8.1LabVIEW程序设计模式LabVIEW在新建对话框中提供了几种常见的程序设计模式,它们都是比较基本的设计模式。主要有主/从结构(Master/Slave)、生产者/消费者(Producer/Consumer)、队列消息结构(QueuedMessageHandler)、标准状态机(StandardState/Machine)、基于事件结构的人机界面(UserInterfaceEventHandler)这5种模式。执行File→New命令后所弹出对话框中的VI/FromTemplate/DesignPatterns目录下可找到它们,如图8-1所示。下面简单介绍这几种程序设计模式。下一页返回8.1LabVIEW程序设计模式8.1.1主/从结构设计模式主/从结构设计模式(Master/SlaveDesignPattern)特别适合于一对多的情况,如图8-2所示,只有主方有权利发布数据,从方只能被动响应。主方没有发布新的数据时,所有从方都在等待数据。一旦主方发布新的数据,所有从方立即被唤醒并响应,处理数据后再次转入休眠状态。主从设计模式要求主方必须具有销毁所有从方的能力,LabVIEW通过错误处理机制满足这一要求。当主方强制销毁通知器时,所有从方错误端子立即返回错误,结束从方线程。上一页下一页返回8.1LabVIEW程序设计模式8.1.2生产者/消费者1.生产者/消费者(事件)设计模式生产者、消费者(事件)设计模式(Producer/ConsumerDesignPattern)是多线程编程中最基本的设计模式,是事件处理器和队列消息处理器相结合而构成的复合设计模式,其使用非常普遍。上一页下一页返回8.1LabVIEW程序设计模式从软件的角度看,生产者是数据的提供方,消费者是数据的消费方。生产者和消费者之间存在一个数据缓冲区,大小一般是固定的。当生产过剩而消费不足的情况下,缓冲区的剩余空间不断减小直至耗尽。当缓冲区无剩余空间时,生产者必须停止生产,一直等到缓冲区出现剩余空间时再继续生产;反之,当消费能力大于生产的时候,缓冲区内的数据会逐渐减少,直至缓冲区中再无数据可用。此时,消费者处于等待状态。如图8-3所示,生产者、消费者设计模式常常是多个生产者提供数据,一个消费者使用或者处理数据。因为消费者使用数据的时候,队列中的数据已经被取出,所以在存在多个消费者的情况下,消费者所消费的将会是不同的数据。上一页下一页返回8.1LabVIEW程序设计模式2.生产者/消费者(数据)设计模式生产者、消费者(事件)设计模式因为在生产者循环中采用了事件结构,因此主要用于处理人机交互的程序。生产者、消费者(数据)设计模式在生产者循环中采用了轮询结构,因此主要用于数据交换。生产者、消费者(数据)设计模式如图8-4所示。生产者、消费者(数据)设计模式更多用于数据处理过程。例如,进行数据采集时,生产者负责采集和发布数据,而消费者负责分析和处理数据。基于事件的生产者、消费者模式与基于数据的生产者、消费者模式没有本质上的区别,只是数据的来源不同。上一页下一页返回8.1LabVIEW程序设计模式8.1.3队列消息结构队列消息结构(QueuedMessageHandlerDesignPattern)设计模式如图8-5所示。标准状态机用枚举描述状态,每个分支能自由转向另外的分支。队列消息处理器具有标准状态机的能力,每个分支执行消息代码,用字符串方式描述消息。因此,消息的数量是不受限制的,非常易于扩充。消息不仅可以包括命令,也可以包含数据,只要修改消息数组类即可实现。上一页下一页返回8.1LabVIEW程序设计模式队列消息处理器的最大优点是一次可以发送多条消息,形成消息队列。每次循环,删除最先进入数组的元素即下消息,同时取出被删除的元素,并执行相应的消息处理分支。队列消息处理器至少需要两个分支,即“无事件发生”和“退出分支”。其中,“无事件发生”必须是默认状态。当队列中无消息时,取出的字符串为空,执行默认分支。8.1.4基于事件结构的人机界面基于事件结构的人机界面(UserInterfaceEventHandler)处理器与“使用事件的顶层应用程序”基本相同,区别在于VI“外观”属性的设置。如果“外观”属性设置为“顶层应用程序”,则为使用事件的顶层应用程序。如果“外观”属性选择为“默认”,则VI为用户界面事件处理器,如图8-6所示。上一页返回8.2状态机状态机是LabVIEW中常用且用途广泛的一个设计模型。用状态机设计模型可以实现任何用状态图或流程图明确描述的算法。状态机通常用于实现较为复杂的判断算法,如诊断程序或过程监控。状态机(更确切地说是有限状态机)包含一组状态和映射下一状态的转移函数。有限状态机有多个变量。最常用的两种有限状态机是米勒型状态机和摩尔型状态机。米勒型状态机对于每一个状态变化产生一个响应;而摩尔型状态机是对状态转移图中的每一个状态产生一个响应。LabVIEW中状态机设计模型模板可以实现任何由摩尔型状态机描述的算法。下一页返回8.2状态机8.2.1标准状态机模式状态机(statemachine)不是LabVIEW特有的概念。早在LabVIEW诞生之前就有了。之所以在LabVIEW编程中经常强调状态机,是因为LabVIEW特有的图形编程方式,特别适于采用状态机模式编程。例如,在PLC中流程图的编程方式,就是一种特殊的状态机。状态机包括状态(state)、事件(event)和动作(action)3个基本要件。它们的作用介绍如下。(1)状态是一个抽象的概念,状态在一定条件下或者一定时间内保持不变,等待一个或几个事件的发生。以交通信号灯为例,红、绿、黄灯都有亮和灭两种状态。命名状态时,往往可以用“等待×××”来定义。上一页下一页返回8.2状态机(2)事件是一个瞬时的概念,表示某件事情发生了。一旦有关的事件发生了,就要采取某种动作。在信号灯自动控制状态下,红灯亮的时间是由定时器控制的,一旦“定时时间到”事件发生,就需要采取动作改变信号灯的状态,时间在有些软件中也称为转换条件,“定时时间到”就是转移条件。(3)动作表示一旦事件发生,应该采取何种处理方式。处理的结果通常是转入另一个稳定的状态。图8-7所示,LabVIEW模板提供的标准状态机属于有限状态机。它通过自定义枚举方式定义所有的状态。上一页下一页返回8.2状态机8.2.2应用状态机在状态区分明显的应用程序中可采用状态机。每一个状态都会导致另一个或多个状态,或者结束处理流程。状态机通过计算用户输入和内部状态来决定下一状态。许多应用程序都需要一个初始状态,后面接着一个默认状态,以执行各种不同的操作。具体执行什么操作要依据以前和当前的输入及状态。停止状态通常用来执行清除操作。使用状态机的好处是一旦创建了状态转移图,就可以简单地创建出LabVIEWVI。1.状态机基本结构将状态转移图转化为LabVIEW程序框图需要以下基本结构。上一页下一页返回8.2状态机①While循环,不断地执行各个状态。②条件结构,包括对应于每一个状态的条件分支和执行代码。③移位寄存器,包括状态转移信息。④状态功能代码,实现状态的功能。⑤状态转换代码,判定下一个状态。图8-8显示了LabVIEW中实现温度数据采集系统的状态机的基本结构。上一页下一页返回8.2状态机2.控制状态机控制状态机的初始化和状态转换的最佳方法是使用枚举型输入控件。枚举型输入控件在状态机中被广泛用作条件选择器。但是,如果用户从枚举型输入控件添加或删除状态时,原本与这个枚举型输入控件的副本相连接的连线就断开了。这是使用枚举型输入控件实现状态机的最主要的缺点之一。该问题的解决办法之一是可以自定义枚举型输入控件。创建一个自定义类型的枚举型输入控件,使得添加或删除状态时所有的枚举型输入控件副本自动更新。3.状态转换状态机有多种方法可以控制状态机执行条件结构的哪一个条件分支。选择一种与状态机功能性和复杂度最匹配的方法。上一页下一页返回8.2状态机4.默认转换使用默认转换时无须用代码判定下一状态,因为下一状态只有一种可能性,如图8-9所示。5.两个状态之间的转换下面的方法用于判定两个状态之间的转换。有许多模型可用于判定两个状态之间的转换。图8-10显示了一个用选择函数完成两个状态之间转换的范例。6.两个或更多个状态之间的转换使用以下方法可创建一个状态转换的更易于扩展的结构,即条件结构,用条件结构代替选择函数完成转换代码。图8-11显示了一个用条件结构完成转换的温度数据采集系统。上一页下一页返回8.2状态机使用条件结构的一个优点是代码的可读性强,易于理解。因为条件结构中的每一个条件分支都对应于枚举型输入控件中的某一项,这就使得代码易于阅读和理解。条件结构也易于扩展。当应用要求增加时,可通过为条件结构添加更多的条件分支来为某一特定的状态添加更多的转换。使用条件结构的一个缺点是所有的代码不是同时可见的。条件结构的自身特性决定了转换代码的全部功能不可能一目了然。转换数组,在需要同时可见比条件结构时,能显示更多的代码,可为转换代码中可能发生的所有转换创建一个转换数组。图8-12显示了一个用转换数组完成转换的温度数据采集系统。上一页下一页返回8.2状态机状态图工具包是另一个用于实现转换代码的设计模型,同时也用于NILabVIEW状态图工具包。该模型使用一个较大条件结构对应每一个状态,较小的While循环结构不断地循环以转换状态直到发生合适的状态转换。图8-13显示了一个用LabVIEW状态图工具包完成转换的温度数据采集系统。LabVIEW状态图工具包为LabVIEW添加了一个状态图编辑器函数,直观地描绘应用程序的逻辑。创建这种直观的逻辑表达之后,状态图编辑器依此生成应用程序最基本的LabVIEW代码。上一页返回8.3综合案例8:状态机的应用8.3.1任务描述设计一个用户界面状态机的模板。使用自定义枚举型输入控件来完成双行程状态机控制,状态机必须允许用户以任意顺序激活进程1和进程2,并具有可扩展性。8.3.2任务实施1.输入和输出设计输入和输出控件的类型、名称及其属性如表8-1所列。状态转换如表8-2所列。2.任务实施按以下步骤创建图8-14所示的前面板窗口。下一页返回8.3综合案例8:状态机的应用(1)创建一个新的项目,其中包括一个空VI。①从启动窗口中选择新建项目并保存。②新建VI并保存。(2)创建一个菜单簇,其中包括运行进程1、运行进程2和停止VI的按钮。(3)创建自定义类型的枚举型控件来控制状态机。①在前面板窗口上添加一个枚举控件。②右击该枚举型控件,并选择快捷菜单中的EditItems命令,按表8-3修改该列表。上一页下一页返回8.3综合案例8:状态机的应用③单击“确定”按钮,退出枚举属性对话框。④将枚举型控件的标签改为状态枚举。⑤右击状态枚举控件,并在弹出的快捷菜单中,选择Representation→U32命令。⑥将该控件命名为StateEnum.ctl,保存在C:\Exercises\LabVIEWBasicsI\StateMachine目录下。⑦关闭控件编辑器窗口。⑧当提示“是否要替换控件”时,单击“是”按钮。⑨切换到程序框图。上一页下一页返回8.3综合案例8:状态机的应用⑩右击“状态枚举”并选择快捷菜单中的“转换为常量”命令。这样,枚举型控件不再出现在前面板窗口上。(4)按照图8-15所示创建程序框图。程序框图中有以下4个状态:等待、进程1、进程2和停止。(5)按照图8-16所示完成进程1状态。(6)按照图8-17所示完成进程2状态。(7)按照图8-18所示完成停止状态。(8)完成后关闭VI。上一页返回图8-1LabVIEW程序设计模式返回图8-2主/从结构设计模式程序框图返回图8-3生产者/消费者(事件)设计模式返回图8-4生产者/消费者(数据)设计模式返回图8-5队列消息结构设计模式返回图8-6基于事件结构的人机界面设计模式返回图8-7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校一问责工作制度
- 学校信息报告工作制度
- 学校创建文明工作制度
- 学校团委会工作制度
- 学校宣传科工作制度
- 学校帮扶干部工作制度
- 学校德育上墙工作制度
- 学校挂牌督导工作制度
- 学校教育服务工作制度
- 学校查证验证工作制度
- 2025年湖北长江出版传媒集团长江出版传媒公司招聘笔试参考题库附带答案详解
- ESG培训课件教学课件
- 本科生毕业论文写作指导-课件
- 现场检查(勘验)笔录
- 电力电子技术-新能源变换技术教学课件:4.2.3 单相半桥逆变电路
- 《高速公路机电系统集成与维护》课件-07.ETC门架系统
- 进料检验作业控制程序(最全面-不下你会后悔的)
- 《文字录入》课程标准
- 隔油池化粪池清理方案
- 婴幼儿学习环境的评价量表
- 阀门基础知识培训课件
评论
0/150
提交评论