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

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

3天内不再提示

【产品应用】用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (7)- 用状态机实现红绿灯

ZLG致远电子 2022-11-24 16:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

状态机是一个常用的设计模式,其逻辑清晰实现简单。本文以一个简化版的红绿灯为例,演示在 AWPLC 中实现状态机的方法。

8a05fd6e-6b77-11ed-b116-dac502259ad0.jpg 背景

AWTK全称 Toolkit AnyWhere,是 ZLG 开发的开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

AWPLC是 ZLG 自主研发的 PLC 系统(兼容 IEC61131-3),其中 AWPLC 的运行时库(Runtime)基于 ZLG TKC 开发,可以移植到到任何主流 RTOS嵌入式系统。AWPLC 的集成开发环境(IDE)基于 AWTK 开发,可以运行在 Windows、MacOS 和 Linux 系统之上。AWPLC 的主要目标之一是把 PLC 中低代码开发方法引入到嵌入式软件,从而提高嵌入式软件的开发效率和可靠性。

8a05fd6e-6b77-11ed-b116-dac502259ad0.jpg  简介

状态机是一个常用的设计模式,在有的情况下采用状态机,逻辑清晰,实现简单。在 AWPLC 中,也是可以采用状态机模式的,本文以一个简化版的红绿灯为例,演示在 AWPLC 中实现状态机的方法。

在采用状态机模式设计时,一般按照下列步骤进行:

  • 确定系统存在的状态,并选取我们关注的状态。比如,在本系统中,我们选取红灯、黄灯、绿灯三个状态;
  • 确定在各个状态下系统的行为。比如,在本系统中,在红灯状态下,点亮红色 LED 灯;在黄灯状态下,点亮黄色 LED 灯;在绿灯状态下,点亮绿色 LED 灯;
  • 确定各个状态之间转换的条件。比如,在本系统中,在红灯状态下,超时进入黄灯状态下;在黄灯状态下,超时进入绿灯状态下;在绿灯状态下,超时进入红灯状态下。

状态转换如下图所示:

8a1b0344-6b77-11ed-b116-dac502259ad0.png

1. 系统组成

该系统包括:

  • 3 个 LED。

2. 软件模拟

  • LED 都用软件模拟。


8a05fd6e-6b77-11ed-b116-dac502259ad0.jpg  PLC程序

1. 变量定义

在本系统中,需要定义几个变量:

STATE_RED 表示红色状态,是一个常量,取值为 1;

STATE_YELLOW 表示黄色状态,是一个常量,取值为 2;

STATE_GREEN 表示绿色状态,是一个常量,取值为 3;

STATE 表示系统当前的状态;

LED_RED 表示红色 LED 灯,映射到第 1 个数字输出;

LED_YELLOW 表示黄色 LED 灯,映射到第 2 个数字输出;

LED_GREEN 表示绿色 LED 灯,映射到第 3 个数字输出。

具体配置如下图所示:8a34d454-6b77-11ed-b116-dac502259ad0.png2. 功能块图基本工作原理

如果系统当前状态 STATE 等于 STATE_RED 时,表明当前处于红灯状态:点亮红色 LED 灯,定时器保持工作,当定时器超时,设置系统当前状态为黄灯状态;

如果系统当前状态 STATE 等于 STATE_YELLOW 时,表明当前处于黄灯状态:点亮黄色 LED 灯,定时器保持工作,当定时器超时,设置系统当前状态为绿灯状态;

如果系统当前状态 STATE 等于 STATE_GREEN 时,表明当前处于绿灯状态:点亮绿色 LED 灯,定时器保持工作,当定时器超时,设置系统当前状态为绿灯状态。

* 值得注意的是,这里使用了功能块 MOVE 对变量进行赋值。按道理来说,对变量进行赋值,直接拉根线连接起来就可以了,为什么还要加个 MOVE 呢?原因在于,这里是条件赋值,即在定时器超时的时候,才对 STATE 进行赋值。

*这就需要利用功能的执行控制(Execution Control),当功能块启用执行控制(Execution Control)时,只有其输入引脚 EN 为 TRUE 时,其后续赋值才生效。

具体实现如下图所示:

8a4b4b3a-6b77-11ed-b116-dac502259ad0.png


8a05fd6e-6b77-11ed-b116-dac502259ad0.jpg 用户界面

应用程序不需要编程,用 AWTK Designer 设计好界面,将控件与模型进行绑定即可。下面介绍一下控件与模型的绑定方法。这里用的是 AWTK-MVVM,数据绑定规则与 AWTK-MVVM 是完全一样的。

模型可以用 io、plc 或者 io+plc。io 可以用来绑定 IO 变量,plc 可以用来绑定程序 PLC 内部变量。

示例:

由于符号%在程序里具有特殊功能,所以在绑定 IO 变量时,把%换成_。比如:将%QX0.0写作_QX0.0。示例:

children_layout="default(r=3,c=1,s=10)">

程序界面如下所示(为了方便理解,我们把功能块图也放到了界面上):8a7ee918-6b77-11ed-b116-dac502259ad0.png

运行效果:系统启动后,三个 LED 灯循环点亮,和跑马灯不同的是,三个 LED 点亮的时间并不完全相同。

*由此可见,在 AWPLC 功能块图的帮助下,我们不要写 C 代码或脚本,即可完成应用程序的开发。AWPLC 用低代码降低了开发的门槛,提高了开发的效率。AWPLC 等您来玩!

AWPLC 目前还处于开发阶段的早期,写这个系列文章的目的,除了用来验证目前所做的工作外,还希望得到大家的指点和反馈。如果您有任何疑问和建议,请在评论区留言。

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

    关注

    5186

    文章

    20143

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一个面向单片、事件驱动的嵌入式开发平台介绍

    EventOS,是一个面向单片、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。EventOS以及其母项目EventOS,目标是开发一个企业级的嵌入式开发
    发表于 12-05 06:26

    什么是状态机

    的switch—case语句里要有400个case,这样的程序还有法儿写么?! 同样的功能改动,如果g_stFSM这个结构体来实现状态机的话,函数fsm_active()只需要
    发表于 11-27 08:15

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

    状态机,才恍然明白,当时的程序是有逻辑漏洞的。 如果把这个计算器程序当做是一个反应系统,那么一个数字或者运算符就可以看做一个事件,一个算式就是一组事件组合。 对于一个逻辑完备的反应
    发表于 11-25 07:08

    【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯按钮项目

    嵌入式AI系统设计的开发板,搭载高性能处理器,适用于多种嵌入式应用场景。 硬件 EASY EAI Nano-TB(RV1126B)开发板 :一款用于
    发表于 11-03 10:00

    【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目

    (RV1126B)开发板 :一款用于嵌入式ai系统的开发板。 红绿灯板 :一个简单的外部设备,包含红、绿、黄三个LED灯。 wifi路由器 :CMCC-e2dd(密码:jdtsyahg
    发表于 11-02 18:34

    易华录助力厦门交警打造智慧红绿灯

    交通信号灯是城市交通管理的重要基础设施,是服务于产业发展和市民出行的温度计。厦门市公安局交警支队携手易华录持续提升信号调控技术手段,创新道路交通管理模式,着力推进红绿灯“智控”能力建设应用,为城市缓堵保驾护航。
    的头像 发表于 09-28 09:31 424次阅读

    Linux嵌入式和单片嵌入式的区别?

    新的应用程序和驱动程序来扩展功能。 6. 开发难度 : 单片嵌入式开发难度相对较低,适
    发表于 06-20 09:46

    使用PLC实现红绿灯控制示例

    如图为一个红绿灯的控制时序图,启动信号导通后,红绿灯程序开始动作。
    的头像 发表于 05-29 09:45 1147次阅读
    使用PLC<b class='flag-5'>实现</b><b class='flag-5'>红绿灯</b>控制示例

    嵌入式开发:高门槛的系统性工程与 996 的行业困局

    嵌入式开发的门槛,往往被培训机构和表象所掩盖。许多人误以为 “ C 语言写个跑在 ARM 上的程序” 就是嵌入式,实则连皮毛都未触及。真正的嵌入式
    的头像 发表于 04-09 11:06 672次阅读
    <b class='flag-5'>嵌入式开发</b>:高门槛的系统性工程与 996 的行业困局

    AWTK-WEB 快速入门(6) - JS WebSocket 应用程序

    WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用Javacript语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。
    的头像 发表于 02-26 11:42 632次阅读
    <b class='flag-5'>AWTK</b>-WEB <b class='flag-5'>快速</b>入门(6) - JS WebSocket <b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。
    的头像 发表于 02-19 11:49 890次阅读
    <b class='flag-5'>AWTK</b>-WEB <b class='flag-5'>快速</b>入门(5) - C 语言 WebSocket <b class='flag-5'>应用程序</b>

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯按钮项目

    2学习板 一款用于嵌入式系统学习的开发板。 红绿灯板 一个简单的外部设备包含红、绿、黄三个LED灯。 连接1* ELF 2学习板 按钮 红绿灯板 连接2
    发表于 02-06 15:39

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目

    ) 红绿灯项目 硬件 ELF 2学习板 :一款用于嵌入式系统学习的开发板。 红绿灯板 :一个简单的外部设备,包含红、绿、黄三个LED灯。 连接1* ELF 2学习板
    发表于 02-06 11:55

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。
    的头像 发表于 01-22 11:31 722次阅读
    <b class='flag-5'>AWTK</b>-WEB <b class='flag-5'>快速</b>入门(4) - JS Http <b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(2) - JS 应用程序

    导读AWTK可以使用相同的技术栈开发各种平台的应用程序。有时我们需要使用Web界面与设备进行交互,本文介绍一下如何使用JS语言开发AWTK-
    的头像 发表于 12-05 01:04 799次阅读
    <b class='flag-5'>AWTK</b>-WEB <b class='flag-5'>快速</b>入门(2) - JS <b class='flag-5'>应用程序</b>