0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LPC2134和UCOSII的自动售货机状态机模型

电子设计 2018-10-08 08:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

由于售货机的功能不断增多,售货机控制系统也相应得不断变得庞大,这就使原来的面向过程的开发方法变得越来难以扩展和维护,根据自动状态机的理论,提出一种在售货机上的状态机模型,该模型对系统状态进行抽象和分离,建立了系统状态表和状态转换表,是一种网状的状态机模型。根据系统事件和当前状态来查找系统状态转换表,如果有匹配项,则进行状态转换。经过实验表明,该模型能解决系统的代码庞大问题,并且使系统开发变得易于维护。

1 概述

自动售货机是一种全新的商业零售形式,20世纪70 年代自日本和欧美发展起来。现在,自动售货机产业正在走向信息化并进一步实现合理化。例如实行联机方式,通过GPRS 将自动售货机内的库存信息及时地传送各营业点的电脑中,从而确保 了商品的发送、补充以及商品选定的顺利进行。并且,为防止地球暖化,自动售货机的开发致力于能源的节省,节能型清凉饮料自动售货机成为该行业的主流。在夏季电力消费高峰时,这种机型的自动售货机即使在关掉冷却器的状况下也能保持低温,与以往的自动售货机相比,它能够节约10-15%的电力。进入21 世纪 时,自动售货机也将进一步向节省资源和能源以及高功能化的方向发展。这就导致了售货机的控制系统(VenclingMachine Controller,VMC)的复杂度大大增加。先前的基于汇编程序的VMC控制系统虽然效率高,但是存在着可扩展性差,程序结构性差,不易维护等缺点。因此本文提出了一种基于ARM7的新型VMC主板的有限状态机的结构,对VMC 进行改进。本文所用的硬件环境为使能LPC2134 的ARM7 主板,有一个RS232 串口接GPRS 模块,一个MDB 总线模块,一个电机驱动模块,外接一个显示和按键模块。

软件方面采用的操作系统ucosII操作系统,这是一种开源的实时多任务操作系统,在数据同步和互斥上提供了信号量,消息队列,消息邮箱等功能,本文主要采用的是信号量和消息队列。

总的来说,有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。 一个有限状态机(FSM)是一个五元组,M=(S,G,E,A,T)。

State(状态),就是一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入。

Guard(条件),状态机对外部消息进行响应的时候,除了需要判断当前的状态,还要判断跟这个状态相关的一些条件是否成立。这种判断称为guard("条件")。guard 通过允许或者禁止某些操作来影响状态机的行为。

Event(事件),就是在一定的时间和空间上发生的对系统有意义的事情。

Action(动作), 当一个Event 被状态机系统分发的时候,状态机用Action("动作")来进行响应,比如修改一下变量的值、进行输入输出、产生另外一个Event或者迁移到另外一个状态等等。

Transition(迁移), 从一个状态切换到另一个状态被称为Transition("迁移")。引起状态迁移的事件被称为triggering event ("触发事件"),或者被简称为trigger(触发)。

有限状态机一般有2 种表示方式:状态转移表和状态转移图。通常用有向图来表示有限状态机,其节点代表状态。如图1 所示,售货机售货流程一共分5 个状态,每个状态都是根据消息的不同来进行转换。

图1 自动售货机中的状态转换图:

2 实现方式

2.1 嵌套Switch方式

即先定义一个状态和消息的枚举,再通过嵌套的2层switch-case结构实现,外层switch-case结构判断状态,虽然这种方法结构简单,便于理解,但是代码冗长,不便维护,因此不建议在复杂杂的状态机下运行。

2.2 状态表方式

这种实现方法对第一种方法进行了改良,根据State,Event 做成二维表格,表格中的项表示Action和Transmission,状态采用枚举量。这种方法结构简单,便于理解,代码比较简练,效率最高,但是代码结构不是太好。

2.3 用函数指针作为状态

这种方法用函数地址代替state 值,比较直观,可以方便地增加entry/exit 操作,并且效率较高。

3 具体实现

综合以上几种方式,本文提出一种结合第二种和第三种方式的状态机实现方式,即创立一个状态表和一个状态转换表,其中状态表中有exit,entry,default处理方法,当进入该状态时,先执行entry方法,然后在状态运行时执行default方法,退出状态时执行exit方法,状态之间的切换是通过状态转换表实现的,即首先状态等待一个系统消息,如果在状态转换表中对应当前状态和当前消息的项,则进行消息转换,具体实现如下3.1 数据结构。

首先定义一个大小为10 的系统消息队列用来接收外设和系统消息:

3.2 状态转换算法

先建立一个状态转换表, 建立一个FSM_STATE_TRAN 指针数组。即FSM_STATE_TRAN*fsm_tran[7];将每个状态下的转换项都存在该状态下的链表中。

在有限状态机中,状态是通过系统消息和当前状态来查找状态转换表,如果有对应的项则进行转换,没有则继续当前状态:算法如下:

4 模型分析

4.1 扩展性

为状态机添加新状态,只需在状态表中添加新状态及其处理方法,以及在状态转换表中添加该状态的转换方式。

4.2 查找算法分析

设总共有n个状态,m个事件,每个状态平均响应的事件为k.

由于在这里每个状态都是互斥的,因此状态转换时的时间开销主要是花费在查找状态表上面,这里采用了基数排序查找的思想。因此主要查找开销是每个状态的状态转换个数。由于在售货机中,每个状态大概都只有3-4 个状态转换表。因此查找的时间复杂度比O(m)小。

5 结语

通过建立有限状态机模型,并应用改进的数据结构与状态转换算法,自动售货机控制器的程序结构更为清晰。原来存在于程序中的诸多标志变量,由状态机的各个状态所取代,使系统具有更好的扩展性;并且模型很好地利用了状态的相关性,缩短了查找所花费的时间。应用于别的嵌入式系统也有较高的意义。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LPC2134
    +关注

    关注

    0

    文章

    6

    浏览量

    9877
  • UCOSIII
    +关注

    关注

    2

    文章

    26

    浏览量

    7135
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588/RK3568 AI触控一体 赋能智慧零售|自助售货机智能化解决方案

    随着无人经济与智慧零售行业快速发展,自助售货机凭借灵活部署、无人值守、24小时经营等优势,广泛落地于写字楼、园区、地铁站、医院、商超等场景。当代消费者对购物便捷度、设备流畅度、支付稳定性要求持续提升
    的头像 发表于 05-13 17:38 595次阅读

    基于 LuatOS+Air8101 的智能售货机终端系统设计与实现

    本章节将围绕 LuatOS 引擎与 Air8101 硬件平台,完整介绍智能售货机 APP 项目的前期搭建流程。 从硬件选型、软件环境部署到代码仓库拉取,一步步完成开发前全部准备工作,为后续功能开发、界面调试与功能实验打下基础。
    的头像 发表于 05-10 08:00 2060次阅读
    基于 LuatOS+Air8101 的智能<b class='flag-5'>售货机</b>终端系统设计与实现

    日常生活中什么产品会运用到多网口无风扇工控呢?

    网口用于隔离不同安全级别的网络,无风扇设计适合7x24小时不间断运行。 · 智慧零售与安防:驱动自助售货机/取票和智能储物柜,或作为智能监控的NVR(网络视频录像)。双网口可在断网时保持设备离线
    发表于 04-08 13:58

    如何用威佛RS232-MDB适配器在售货机上实现”REMOTE VEND”

    用威佛RS232-MDB适配器在售货机上实现”REMOTE VEND”
    的头像 发表于 12-19 11:13 501次阅读
    如何用威佛RS232-MDB适配器在<b class='flag-5'>售货机</b>上实现”REMOTE VEND”

    睿远研究院丨IO-Link规范解读(十一):ISDU状态机与EVENT事件

    上篇我们介绍了ISDU的典型编码格式和应用案例,本篇我们就来详细介绍下,ISDU的状态机,并把EVENT事件的逻辑,给大家好好解析下。 1主站ISDU状态机 如上图所示,ISDU的状态机的核心
    的头像 发表于 11-29 18:28 4979次阅读
    睿远研究院丨IO-Link规范解读(十一):ISDU<b class='flag-5'>状态机</b>与EVENT事件

    什么是状态机

    另一个状态的过程称作迁移,迁移不是自动发生的,需要外界对系统施加影响。停转的电动机自己不会转起来,让它转起来必须上电。 事件:某一时刻发生的对系统有意义的事情,状态机之所以发生状态迁移
    发表于 11-27 08:15

    嵌入式开发为何经常用到状态机架构

    一个管脚电平跳变或者一个串口数据,让整个程序都不动的情况也让我非常纠结,如果事件一直不发生电平跳变,你要等到世界末日么? 如果应用状态机编程思想,程序只需要用全局变量记录下工作状态,就可以转头去干别的
    发表于 11-25 07:08

    睿远研究院丨IO-Link规范解读(八):M-Sequence Type 与消息处理状态机

    丢弃,减少后端工作量。 那么今天我们就来深入研究下,消息处理模块中提到的各类M-Sequence,以及主从站的消息处理状态机!   1 M-Sequence Type 上回讲到主站发出来的MC和CKT
    的头像 发表于 11-07 16:18 6982次阅读
    睿远研究院丨IO-Link规范解读(八):M-Sequence Type 与消息处理<b class='flag-5'>状态机</b>

    睿远研究院丨IO-Link规范解读(六):主从站状态机解析

    前言 书接上文,今天我们就来好好聊聊主从站的DL-Mode状态机,还请各位童鞋前排坐好! 1主站状态机解析 主站的DL-Mode状态机有5个大状态,也是我们很熟悉的 建立通信、开始、预
    的头像 发表于 10-28 17:34 6482次阅读
    睿远研究院丨IO-Link规范解读(六):主从站<b class='flag-5'>状态机</b>解析

    东芝TB5128HG步进驱动芯片,在商用售货机上的体验

    对于硬件工程师来说,硬件芯片选型一直是让人最头疼的事之一。最近一位做售货机的工程师,用我们的  TB5128HG  替换了之前的旧方案,分享一下客户在替换过程中的感受。 一、 最初为什么选它? 客户
    的头像 发表于 10-21 14:43 539次阅读

    法拉电容有哪些型号和规格

    法拉电容通过不同结构和参数满足多样化储能需求,适用于便携设备、自动售货机及太阳能系统等场景,具备高能量密度与灵活模组化设计。
    的头像 发表于 08-27 09:21 1373次阅读
    法拉电容有哪些型号和规格

    JTAG标准的状态机实现

    JTAG作为一项国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试和调试。目前的主流芯片均支持JTAG协议,如DSP、FPGA、ARM、部分单片等。标准的JTAG接口是20Pin,但JTAG实际使用的只有4根信号线,再配合电源、地。
    的头像 发表于 08-21 15:12 3143次阅读
    JTAG标准的<b class='flag-5'>状态机</b>实现

    请问如何在FX10上使用GPIF III状态机 *.h 文件?

    LVCMOS 2 位 SlaveFIFO GPIF III 状态机的演示中有一个 cy_gpif_header_lvcmos.h 文件。 我想知道如何使用.h文件,只需放入.h文件放入 FX10 项目? 您有它的用户指南文档吗?
    发表于 07-16 08:17

    NVMe高速传输之摆脱XDMA设计之八:PCIe初始化状态机设计

    PCIe配置初始化状态机实现PCIe设备枚举和配置空间初始化过程,在完成链路训练后,使用DFS(深度优先搜索)算法枚举PCIe总线上的设备,完成PCIe总线域的地址分配和设备的初始化。PCIe配置
    发表于 07-05 22:00

    嵌入式系统安全面临的挑战和解决方案

    正当人们尽情享受智能化带来的种种便利的同时,殊不知那些隐藏在边缘设备中的一些漏洞随时有可能诱发严重的安全隐患。自动取款、支付终端、自动售货机、售票亭、断层扫描等大型医疗设备,甚至
    的头像 发表于 06-06 14:49 2021次阅读
    嵌入式系统安全面临的挑战和解决方案