labview设计模式

一、有限状态机

        有限状态机:用确定数量的状态来描述系统的运行。

        状态机包括三个基本条件:状态、事件和动作。

        状态:状态是一个抽象的概念,在一定条件下或一定时间内保持不变,等待一个或多个事件的触发。一个程序可以有多种状态,状态之间可以通过事件相互转换。

        事件:触发事件时使程序由一个状态向另一个状态转换。一旦有关的事件发生,就要采取某种动作。

        动作:触发事件所需要产生或执行的动作。

        一个状态机的好坏,关键看如何定义状态。状态少,意味着在一个状态里处理的事务变多了;而状态多,则整个状态机变得复杂了。

标准状态机

        一般的标准状态机都是采用循环加条件结构的方式,利用移位寄存器存储当前状态,利用自定义枚举类型定义所有状态。在条件结构分支执行相应的代码。根据执行结果决定进入下一个状态。标准状态机可以理解为能够自动进行状态转换的动作机。在状态机中用枚举常量定义状态时,建议用严格自定义枚举控件,便于快速增加或更改状态。

        有限状态机中的各种状态是通过枚举常量进行切换的,条件结构中每一分支都代表一种状态。预先定义的状态在程序设计过程中可能会不断变化。如果没有使用严格自定义枚举数据类型,则状态的增减、改变会影响所有的常量、分支和子vi。使用严格自定义枚举控件就可以避免这个问题。只要修改严格自定义控件,所有常量、分支和子vi都会自动快速更新。

二、队列消息状态机

        有限状态机的各个状态及状态之间的转换都是可以预期的,适于有限状态的情况。如果有非常多的不同的状态,需要由客户选择组合多个不同的转换条件(消息),从而自动进入不同的状态,因为有限状态机移位寄存器只能保留下一次需要运行的状态,用有限状态机不可能实现,需要选择更好的解决方法。       

1)通用队列消息状态机自定义模板

        建立保存多个转移条件的数据缓冲区就可以连续运行多个状态,保存多个转移条件即使用字符串、数组和队列,由此引申出队列消息状态机。

        队列可以存储任意多的消息,可以任意在队列前后插入新的消息。队列是典型的先进先出的数据结构,一般在队列的后面插入消息。对于优先级比较高的消息,如紧急停止或错误处理,可以选择把他们添加到队列的最前端,这样可以立即执行,这是状态机的不同优先级处理。

下面是典型的队列消息状态机,可以把它作为自定义VI模板使用。

        队列消息状态机至少包括初始化、空闲、退出、空白四个状态,其他状态为自由定义的用户状态。

        初始化状态是状态机的开始状态,其负责软硬件的初始化工作,比如初始化移位寄存器、打开文件、读取配置信息、打开硬件设备。通常最先执行且只执行一次。

        执行完初始化状态后自动执行空闲状态。空闲状态是默认状态,所有状态运行完毕后。都要返回空闲状态,并等待队列消息中出现新的消息。

        退出状态用来结束队列消息状态机。

        空白状态仅仅作为一个分支模板使用。当状态太多时,复制模板,这样就不用再次连线了。

三、生产/消费者设计模式

        生产消费者设计模式是多线程编程中最基本的设计模式。从软件的角度看,生产者是数据的提供方,消费者是数据的消费方。生产者和消费者之间存在一个数据缓冲区,大小一般是固定的。当生产过剩而消费不足的情况下,缓冲区和剩余空间不断减少直至耗尽。当缓冲区无剩余空间时,生产者必须停止生产。当消费者能力大于生产者时,缓冲区内数据不断减少直至清空,之后消费者处于等待状态。

        生产者/消费者设计模式,是队列最基本的应用。所谓设计模式并不是什么新鲜的东西,就是我们所学知识的综合应用,是一种抽象的设计思想,与编程语言无关。不同的编程语言实现方式不同,但设计思想是相同的。

        如下图所示,在生产/消费者设计模式中,常常是多个生产者提供数据,一个消费者使用或处理数据。

        消费者就是用户界面事件处理器,是一个包含元素出队列的循环,叫做消费者循环。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白小白—

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值