AWTK 开源串口屏开发(17) - 通过 MODBUS 访问数组数据

server/2024/9/17 22:34:24/ 标签: 开源, AWTK, 串口屏

AWTK 串口屏中,内置了 MODBUS Client Channel 的模型,不用编写代码即可实现在 ListView 中显示数组数据。

MODBUS 协议一次只能读取 125 个 WORD,AWTK-MODBUS Client Channel 支持长数据,自动分成多个请求访问。

1. 功能

不用编写代码,实现对远程设备上数组数据的显示。

2. 创建项目

从模板创建项目,将 hmi/template_app 拷贝 hmi/modbus_client_channel_input_registers 即可。

第一个项目最好不要放到其它目录,因为放到其它目录需要修改配置文件中的路径,等熟悉之后再考虑放到其它目录。路径中也不要中文和空格,避免不必要的麻烦。

3. 制作界面

用 AWStudio 打开上面 modbus_client_channel_input_registers 目录下的 project.json 文件。里面有一个空的窗口,做出类似下面的界面。

在这里插入图片描述

4. 添加绑定规则

第一次用到列表视图,有几点需要特别说明一下:

列表视图中的滚动视图需要指定 v-for-items 属性:

属性说明
v-for-itemstrue它保证其下的列表项,会根据数据自动生成|

4.0 几个特殊的变量

  • index 特指序数。
  • item 特指当前的数据。比如在这里 ‘item.level’ 表示告警级别,‘item.time’ 表示时间,‘item.device’ 表示设备,‘item.message’ 表示告警信息。
  • selected_index 表示当前选中的序数(可在列表视图之外绑定)。
  • items 表示当前列表视图中的数据个数(可在列表视图之外绑定)。

4.1 序数

绑定属性绑定规则说明
v-data:value{index}index 特指序数。

4.2 告警级别

前面提到告警级别是正数,可以通过 item.level 来获取它。它的意义对应为:调试 (0); 信息 (1); 警告 (2); 错误 (3),我们需要用 one_of 函数将它转换为对应的字符串。

绑定属性绑定规则说明
v-data:value{one_of(‘调试;信息;警告;错误’, item.level)}这里的 one_of 的功能是从指定的字符串数组中取出对应的子串。

4.3 时间

时间是整数(秒数),可以通过 item.time 来获取。

绑定属性绑定规则说明
v-data:value{date_time_format(item.time, ‘Y-M-D hⓂ️s’)}需要用 date_time_format 将 epoch 时间转换成人类可读的时间。

4.4 告警信息

告警信息是一个字符串,可以通过 item.message 来获取。

绑定属性绑定规则说明
v-data:value{item.message}

4.5 URL

绑定属性绑定规则说明
v-data:value{url}url 表示远程设备的 URL

4.6 连接状态

绑定属性绑定规则说明
v-data:value{connected ? ‘connected’ : ‘no connection’}connected 表示当前是否连接

4.7 窗口模型

  • 指定窗口的模型为
绑定属性绑定规则说明
v-modelmodbus_client(name=modbus_demo)配置文件名对应于 modbus_demo.json

modbus_client 是内置的模型,name 是配置文件的名称,不需要加后缀。

4.8 视图模型

  • 为了使用 channel 的模型,还需要在窗口的下一级控件指定 modbus_client_channel 模型。
绑定属性绑定规则说明
v-modelmodbus_client_channel(name=modbus_demo_input_register)配置文件名对应于 modbus_demo_input_register.json

modbus_client_channel 是内置的模型,name 是配置文件的名称,不需要加后缀。

5. 配置文件

配置文件路径 design/default/data/modbus_demo.json

{"url":"tcp://localhost:502","channels" : [{"update_interval" : 5000,"name" : "read_input_registers","access_type" : 4,"read" : {"offset" : 0,"length" : 3200}}]
}

在上面的配置中,定义了通道 read_input_registers,长度为 3200 个 registers,共 6400 字节。

配置文件路径 design/default/data/modbus_demo_input_register.json

{"channel":"read_input_registers","items": 100,"variables": {"level": "byte[0].uint32","time": "byte[4].uint32","message": "byte[8].str[56]"}
}

在上面的配置中,将通道 read_input_registers 中的数据,分成 100 等份,也就是看作 100 元素的数组,每个元素 64 字节。这 64 字节的数据为三个成员:

  • level: 4 字节,无符号整数
  • time: 4 字节,无符号整数
  • message: 56 字节,字符串

6. 描述需要持久化的数据

7. 编译运行

运行 bin 目录下的 demo 程序:

在这里插入图片描述

点击 Update 按钮,可以手工刷新数据

8. 注意

  • 本项目并没有编写界面相关的代码,AWStudio 在 src/pages 目录下生成了一些代码框架,这些代码并没有用到,可以删除也可以不用管它,但是不能加入编译。

  • 完整示例请参考:demo_modbus_client_channel_input_registers

  • 使用 TCP 协议时,如果使用 modbus slave 工具 配套测试,需要将 unit id 设置为 255


http://www.ppmy.cn/server/19409.html

相关文章

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下: 报错第一时间想到可能是代码配置原因报错,查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错,后面查阅发现ico在各系统平台会不兼容,也就是ico是给win下使用的,此处改下图标格式就ok&am…

Redis系列3:高可用之主从架构

1 主从复制介绍 上一篇《Redis系列2:数据持久化提高可用性》中,我们介绍了Redis中的数据持久化技术,包括 RDB快照 和 AOF日志 。有了这两个利器,我们再也不用担心机器宕机,数据丢失了。 但是持久化技术只是解决了Redi…

如何写好代码?

文章目录 前言内容代码应当易于理解命名注释格式循环和逻辑设计函数设计类其它(编程规范、静态检查工具)重构 前言 在软件开发领域,写好代码是至关重要的一环。不论是在学校学习的学生,刚刚毕业的应届生,还是刚步入企…

OpenHarmony实战开发-使用SmartPerf-Host分析应用性能

简介 SmartPerf-Host是一款深入挖掘数据、细粒度展示数据的性能功耗调优工具,可采集CPU调度、频点、进程线程时间片、堆内存、帧率等数据,采集的数据通过泳道图清晰地呈现给开发者,同时通过GUI以可视化的方式进行分析。该工具当前为开发者提…

JVM--Java对象到底存在哪?

Java对象存放在堆中,但堆又分为新生代和老年代,新生代又细分为 Eden、From Survivor、To Survivor。那我们创建的对象到底在哪里? 堆分为新生代和老年代,新生代用于存放使用后就要被回收的对象(朝生夕死)&a…

数字旅游引领智慧化浪潮:科技创新重塑旅游体验,智慧服务打造旅游新高度

在科技飞速发展的今天,数字旅游正以其独特的魅力引领着智慧化浪潮,深刻改变着旅游行业的面貌。数字技术的广泛应用,不仅为旅游行业注入了新的活力,也极大地提升了旅游体验的品质。科技创新与智慧服务的融合,正推动着旅…

​「Python大数据」LDA主题分析模型

前言 本文主要介绍通过python实现数据聚类、脚本开发、办公自动化。读取voc数据,聚类voc数据。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词LDA模型计算词汇和每个词的频率将可视化结果保存到HTML文件中二、具体产出 三、执行脚本 python ld…

05_Scala运算符

文章目录 **1.Scala运算符****2.scala中没有 --等语法****3.逻辑运算符和Java完全相同****4.scala认为万物皆对象** 1.Scala运算符 Scala底层 使用的是equals() 程序员比较两个量的时候,谁来没事比较内存地址? Java中引用数据类型比较地址&#xff0…

11 c++版本的贪吃蛇

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 然后 将它更新为 c 版本, 还是 用了一些时间 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用…

深度学习基础——卷积神经网络的基础模块

深度学习基础——卷积神经网络的基础模块 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中一种非常重要的神经网络结构,它在图像识别、图像分类、目标检测等领域取得了巨大成功。本文将介绍卷积神经网络的几个基础…

前端HTML5学习1(新增布局,状态,列表,文本,表单控件标签)

前端HTML5学习1(新增布局,状态,列表,文本,表单控件标签) 新增布局标签新增状态标签新增列表标签新增文本标签新增表单控件属性input新增属性值 新增布局标签 HTML5 引入了许多新的语义化标签,用…

【ARMv9 DSU-120 系列 4 -- Utility bus 详细介绍 1】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 Utility bus事务类型访问大小事务长度安全状态总结缓存控制(ARCACHEU 或 AWCACHEU)突发类型(ARBURSTU 或 AWBURSTU)锁定信号(ARLOCKU 或 AWLOCKU)Utility bus acceptance capabilities

Public Key Retrieval is not allowed

文章目录 Intro原因和解决DBeaver 指定连接参数 Intro 我在使用 DBeaver 连接本地 mysql server 的时候,连接失败,报错:Public Key Retrieval is not allowed。 原因和解决 据 https://blog.csdn.net/white0718/article/details/131790493 …

鸿蒙官网学习3

鸿蒙官网学习3 每日小提示项目的模块类型跨设备预览调试阶段应用的替换方式有两种 打开老的demo工程报错UIAbility 每日小提示 项目的模块类型 moduleType分为三种,只有1,2的模块支持直接调试和运行 entryfeaturehar 跨设备预览 需要手动在config.j…

qt实现方框调整

效果 在四周调整 代码 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QWidget>class MainWindow : public QWidget {Q_OBJECT public:explicit MainWindow(QWidget *parent 0);~MainWindow();void paintEvent(QPaintEvent *event);void updateRect();void re…

从npm到yarn,再到pnpm

一、npm 和 yarn&#xff1a; 1、npm早期版本的问题&#xff0c;yarn的出现 1-1、npm早期版本 npm是node默认的包管理器&#xff0c;跟随node安装&#xff0c;但是早期的npm版本主要存在问题&#xff1a; 依赖嵌套&#xff0c;当嵌套层级比较深时&#xff0c;部分操作系统和…

Spring Boot后端与Vue前端融合:构建高效旅游管理系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题&#xff0c;对于单机多卡的训练脚本&#xff0c;不知道如何使用VSCode进行Debug。 解决方案&#xff1a; 1、找到控制分布式训练的启动脚本&#xff0c;在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

AWS ECS Fargate 实现批量启用部署断路器

背景介绍 在 AWS Elastic Container Service (ECS) 中,部署断路器是服务滚动更新过程中的一项重要功能。它可以持续监控新版本任务的运行状况,判断它们是否已达到稳定状态。如果新版本任务无法正常运行,部署断路器将自动停止部署并回滚到先前的稳定版本,从而确保服务的高可用性…

13 c++版本的五子棋

前言 呵呵 这大概是 大学里面的 c 五子棋了吧 有一些 面向对象的理解, 但是不多 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 然后 貌似 放在 win10 上面执行 还有一些问题, 渲染的, 应该很好调整 五子棋 #include<Windows.h> #include<io…