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

2024-04-27 17:20

本文主要是介绍AWTK 开源串口屏开发(17) - 通过 MODBUS 访问数组数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 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

这篇关于AWTK 开源串口屏开发(17) - 通过 MODBUS 访问数组数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941087

相关文章

数字孪生GIS数据获取与处理(未完回头再整理)

高德矢量 http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8 高德影像 https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z} 腾讯矢量 http://rt0.map.gtimg.c

AquaCrop模型运行及结果分析、代码解析;气象、土壤、作物和管理措施等数据的准备和输入;农业水资源管理

目录 专题一 模型原理与数据要求 专题二 模型数据准备 专题三 模型运行及结果分析 专题四 参数分析 专题五 源代码分析 更多应用 AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理,特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不仅包含一个全面

geoserver发布tif数据

环境: Jdk:1.8、 Tomcat:8.0.44、Geoserver:2.11.2、Tif: Cross Blended Hypso with Shaded Relief and Water 准备tif数据:下载地址: http://www.naturalearthdata.com/downloads/50m-raster-data/50m-cross-blend-hypso

高质量新闻数据集OpenNewsArchive:880万篇主流新闻报道,国产大模型开源数据又添猛料

在构建国产大语言模型的道路上,高质量新闻是不可或缺的重要语料之一。这类语料集准确性、逻辑性、时效性于一体,同时包含丰富的事实知识,可以大幅提升模型的文本生成质量、词汇表达能力、事件理解分析能力以及时序内容的适应性和预测能力,使其在现实世界的应用中更加准确和可靠。 近日 ,为了更好地满足大模型研发的数据需求,大模型语料数据联盟开源了大规模、高质量新闻数据集——开放新闻库数据集(OpenNewsAr

会议邀请函:Prometheus开源无人机平台-无人机追踪无人车代码实战|第四届中国智能汽车创新大会

扫描上方海报二维码,参与报名 阿木实验室:为机器人研发提供开源软硬件工具和课程服务,让研发更高效! 技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

python数据清洗-找到重复的txt并输出字数最少的

import osimport jsonfrom collections import Counterdef find_and_write_duplicate_txt_files(root_folder, output_file):# 存储所有找到的 txt 文件名和路径的字典列表txt_files_dict_list = []# 统计每个文件名出现的次数filename_counts =

超级数据查看器 教程合集 整理版本 pdf格式 1-31集

点击下载    超级数据查看器 教程合集整理版本 pdf格式https://download.csdn.net/download/qq63889657/89311725?spm=1001.2014.3001.5501

sqlserver:禁止远程访问

环境: window10 x64 专业版sqlsever2014 x64 前言: 一般我们安装mysql或postgresql的后,它们都是默认禁止远程访问的,而sqlserver安装后是默认可以远程访问的,为了能更好的保护我们的数据库远离黑客攻击,我们需要将我们的数据库设置禁止远程访问。。。 一、首先来看一下数据库服务器的ip地址 二、观察当允许远程访问时的情况 2.1 使

【js】两个数组内的元素依次相加得到一个新数组。

在JavaScript中,如果你想要把两个数组的元素依次相加,你可以使用数组的map()方法配合索引来实现这个功能。假设这两个数组的长度相同,你可以这样做: javascriptfunction addArrays(array1, array2) {// 创建一个新数组,长度与输入数组相同const result = [];// 使用数组的map方法遍历数组array1.map((va

短视频矩阵系统/源码----可视化剪辑技术独家开发

现阶段市面上大多矩阵软件都非常程序化且需要使用者具有较强的逻辑思维能力或剪辑经验,这使得一些个人、团队、企业在使用时无形中增加了学习成本,剪辑出来的效果大多不尽如人意,发出来的视频没有流量,根本达不到预期效果。 如何提高矩阵做出的效果呢? 抖去推最新推出AI可视化批量剪辑兼具智能易用性等特点,适合同城流量,本地生活,企业产品推广、电商视频带货、自媒体等领域,主打简洁可视化操作,傻瓜式轻