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

news2024/11/18 23:43:42

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

1. 背景

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 中 低代码开发方法 引入到嵌入式软件,从而提高嵌入式软件的开发效率和可靠性。

2. 简介

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

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

  • 确定系统存在的状态,并选取我们关注的状态。比如,在本系统中,我们选取红灯、黄灯、绿灯三个状态。

  • 确定在各个状态下系统的行为。比如,在本系统中,在红灯状态下,点亮红色 LED 灯;在黄灯状态下,点亮黄色 LED 灯;在绿灯状态下,点亮绿色 LED 灯。

  • 确定各个状态之间转换的条件。比如,在本系统中,在红灯状态下,超时进入黄灯状态下;在黄灯状态下,超时进入绿灯状态下;在绿灯状态下,超时进入红灯状态下。

状态转换如下图所示:

state.png

2.1 系统组成

该系统包括:

  • 3 个 LED。

2.2 软件模拟

  • LED 都用软件模拟。

3. PLC 程序

3.1 变量定义

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

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

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

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

  • STATE 表示系统当前的状态。

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

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

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

具体配置如下图所示:

plc_vars.png

3.2 功能块图

基本工作原理:

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

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

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

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

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

具体实现如下图所示:

plc_fbd.png

4. 用户界面

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

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

示例:

<window v-model="io+plc" tr_text="AWPLC demo">

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

示例:

 <view name="out" x="r:10" y="m" w="100" h="330" 
    children_layout="default(r=3,c=1,s=10)">
    <check_button v-data:value="{_QX0.0}" style="led_red" sensitive="false"/>
    <check_button v-data:value="{_QX0.1}" style="led_yellow" sensitive="false"/>
    <check_button v-data:value="{_QX0.2}" style="led_green" sensitive="false"/>
  </view>

程序界面如下所示(为了方便理解,我们把功能块图也放到了界面上):

plc_app.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kaggle实战:基于超市消费数据的用户个性化分析案例

大家好&#xff0c;今天给大家分享一篇 kaggle 数据集的新文章&#xff1a;基于一份超市消费数据集的用户个性化分析以及用户分群的实现。 更多详细内容参考原数据集地址&#xff1a; https://www.kaggle.com/code/sonalisingh1411/customer-personality-analysis-segmentati…

实验八 网络优化与正则化(3)不同优化算法比较

目录7.3 不同优化算法的比较分析7.3.1 优化算法的实验设定7.3.1.1 2D可视化实验7.3.1.2 简单拟合实验7.3.1.3 与Torch API对比&#xff0c;验证正确性7.3.2 学习率调整7.3.2.1 AdaGrad算法7.3.2.2 RMSprop算法7.3.3 梯度估计修正7.3.3.1 动量法7.3.3.2 Adam算法7.3.4 不同优化器…

java基于Springboot的简历系统-计算机毕业设计

项目介绍 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;…

SAP ABAP CDS view Association 引入的缘由

ABAP CDS view 支持三种 join 方式&#xff1a; Inner JoinLeft Outer joinRight outer join 我们使用 ABAP Development Tool 的 CDS view 向导创建一个 CDS view&#xff1a; 向导里包含的 $ 和大括号就是占位符&#xff0c;需要开发人员自己指定&#xff1a; 我们把占位符…

奇舞周刊475期:2022年 CSS 生态圈技术趋势!

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■2022年 CSS 生态圈技术趋势&#xff01;一年一度的 State of CSS 调查结果正式公布&#xff01;通过本文看看2022年 CSS 生态圈的技术趋势&#xff01;React Streaming SSR 原理解析Re…

BI技巧丨RANKX浮点运算

RANKX这个函数&#xff0c;白茶之前已经写过很多期了&#xff0c;本期是对RANKX函数一个细节问题的补充。 我们常见的数据类型有很多&#xff0c;用来聚合的主要有三种数据类型&#xff1a;文本、整数、小数。 在大部分场合&#xff0c;小数是实际FACT数据中最为常见的数据类…

[1180]clickhouse查看数据库和表的容量大小

文章目录1.查看数据库容量、行数、压缩率2.查看数据表容量、行数、压缩率3.查看数据表分区信息4.查看数据表字段的信息5. 查看表的各个指标6.跟踪分区7.检查数据大小在mysql中information_schema这个数据库中保存了mysql服务器所有数据库的信息&#xff0c; 而在clickhouse&…

[附源码]Python计算机毕业设计SSM基于健身房管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java 变量作用域、构造方法官方教程

一、变量作用域 Java 中的变量有3种: &#x1f4d6; ① 全局变量&#xff1a;被定义在类中&#xff08;成员变量&#xff09; &#x1f4d6; ② 局部变量&#xff1a;被定义在成员方法、代码块、静态代码块中定义的变量 &#x1f4d6; ③ 参数&#xff1a;方法声明中的变量 T…

1.Spring简介

1.概念 Spring是一个免费开源框架&#xff0c;为了简化企业级项目开发&#xff0c;提供全面的开发部署解决方案。 2.体系结构 Data Access/Integeration是Spring对数据持久层的支持&#xff0c;SpringDataJpa就是其中的一种。Web是Spring对表现层处理的支持&#xff0c;Spir…

Springboot多环境开发

文章目录一. 前言二. 单文件版多环境配置三. 多文件版多环境配置四. 多环境开发配置技巧五. 多环境配置分组管理一. 前言 在日常开发中我们使用的环境可能会不一样&#xff0c;比如开发环境&#xff0c;测试环境&#xff0c;生产环境&#xff0c;那么这些环境对应的配置也会不…

【计算机视觉】数据获取、数据标注、数据增强的概念简介

觉得有帮助麻烦点赞关注收藏~~~ 基于深度学习的视频分析算法是依赖于数据训练的&#xff0c;数据是深度学习的主要原料&#xff0c;对于算法性能的提升是非常重要的。本章将重点介绍数据的获取、标注、增强及处理方法。 一、数据获取 训练数据的来源主要包括网上公开数据库和…

Redis实现短信登录

文章目录一、基于Session实现登录二、基于Redis实现共享Session实现登录一、基于Session实现登录 ---------------------------------------------------Controller PostMapping("code") public Result sendCode(RequestParam("phone") String phone, Http…

JavaScript进阶教程——面向对象、原型对象、this关键字、bind appl call方法

文章目录面向对象ES2015的面向对象语法&#xff1a;ES5的面向对象语法&#xff1a;原型对象原型链Object对象的原型this关键字**指向调用方法的对象&#xff1a;****构造函数&#xff1a;**触发事件指向全局对象&#xff1a;箭头函数总结bind appl call方法call的用法参数apply…

【计算机图形学入门】笔记4:变换(模型、视图、投影)

目录04变换&#xff08;模型、视图、投影&#xff09;1.使用齐次坐标表示的三维变换2.view/Camera 视图变换3.Projection 投影变换1.Orthographic projection 正交投影2.Perspective projection 透视投影 ——更适合人眼成像&#xff08;近大远小&#xff0c;鸽子为什么这么大&…

AlphaControls 读取存贮数据VCL OnChange事件的处理

AlphaControls 读取存贮数据VCL OnChange事件的处理 AlphaControls控件&#xff0c;窗口时显示&#xff0c;对于VCL控件的处理&#xff0c;需要通过调用皮肤模板重新画出来。因此&#xff0c;在窗口的显示过程中&#xff0c;对VCL控件的数据装载&#xff08;变更&#x…

从获评毕马威中国领先地产科技50强 看贝壳的长期主义

11月9日&#xff0c;在上海进博会现场&#xff0c;毕马威发布了2022年度&#xff08;第二届&#xff09;“毕马威中国领先地产科技企业50”报告&#xff0c;并正式发布了年度毕马威中国领先地产科技企业50榜及地产科技新锐企业榜。作为国内居住产业数字服务平台的贝壳上榜。 众…

前辈给的 Spring Cloud 与 Docker 微服务实战,挽救了要被辞退的我

前言 还记得那天天气阴冷&#xff0c;整个人心都是拔凉拔凉的&#xff1b;原因是因为领导找我聊了一下&#xff0c;委婉地说觉得我的技术不太行&#xff0c;能力不突出&#xff1b;要么自己做出改变&#xff0c;要么选择离开。 说实话&#xff0c;我是有点难过的&#xff0c;…

Lambda完整学习指南

什么是Lambda表达式 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。 Java La…

大学生HTML作业篮球网页 HTML作业篮球网页期末作业 HTML+CSS篮球网页 HTML学生作业体育篮球网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…