MODBUS Client模型

MODBUS Client

名称:modbus_client

功能:通过 modbus 协议访问远程 slave 设备上的数据。

1. 参数

  • name 用于加载配置文件。路径为:design/default/data/<name>.json
  • share 是否共享。如果为 TRUE 多个窗口可以共享同一个同名实例。
    示例:
<window v-model="modbus_client(name=modbus_demo2)" name="home_page">

这里配置文件路径为:design/default/data/modbus_demo2.json

2. 配置文件格式

使用 JSON 文件描述配置。

2.1 基本配置

  • URL slave 设备的 URL。
  • unit_id slave 设备 ID(TCP 协议无需设置)
  • auto_reconnect 是否自动重连(默认 true)。

示例:

  "url":"tcp://localhost:502",

2.2 通道描述

通道可以有多个,放在 channels 数组中。

  • name 用于访问通道中的数据,必须保证唯一性。

  • update_interval 更新数据的时间间隔。

  • unit_id slave 设备 ID(TCP 协议无需设置。如果需要通过同一个串口设备,从多个从站读取数据,则需指定具体从站的 ID)

  • access_type 功能号

    • 1 : read_bits
    • 2 : read_input_bits
    • 3 : read_registers
    • 4 : read_input_registers
    • 5 : write_bit
    • 6 : write_register
    • 16 : write_registers
    • 15 : write_bits
  • write/offset 写地址偏移。

  • write/length 写数据个数。

  • read/offset 读地址偏移。

  • read/length 读数据个数。

  • read/error_handling 出错后的处理方式。取值为:

    • clear 清除原来的值。
    • keep_last_value 保留原来的值。
  • init_by_read 对于写操作的 channel,如果本参数为 true,在初始化时,从远程读取数据来初始化缓存区中的数据。

示例:

  "channels" : [
    {
      "update_interval" : 2000,
      "name" : "read_input_registers",
      "access_type" : 4,
      "read" : {
        "offset" : 0,
        "length" : 4,
        "error_handling": "clear"
      }
    }
  ],

2.3 变量定义

UI 可以直接绑定通道中的数据。为了提高可读性和灵活性,可以定义一些变量,将变量映射到通道地址。

  • 定义变量
  "variables": {
    "温度": "read_input_registers.word[0]",
    "湿度": "read_input_registers.word[1]"
  }
  • 使用变量
  <progress_circle name="progress_circle" x="c" y="100" w="100" h="100" max="10000" v-data:value="{温度}" />
  <progress_circle name="progress_circle" x="c" y="220" w="100" h="100" max="10000" v-data:value="{湿度}" />

2.4 历史数据

如果需要保存历史数据,可以配置 history_data。history_data 是一个数组,数组中的每个元素是一个表达式,表达式中可以引用当前文件中定义的变量,可以调用 fscript 的函数进行计算。

  "history_data": [
    "一氧化碳/10",
    "二氧化氮/10+10",
    "悬浮颗粒物/10+20",
    "二氧化硫/10+20"
  ]

注意:

  • 必须和历史数据模型的配置保持一致。
  • 如何启用历史数据,请参考 演示:数据采样
  • 完整示例请参考:demo_history_data_modbus
  • 只支持从同一个 URL 的 modbus 设备采集数据。

2.5 初始化请求

初始化请求可以有多个,放在 inits 数组中。

  • access_type 功能号。取值有:

    • 5 : write_bit
    • 15 : write_bits
    • 6 : write_register
    • 16 : write_registers
  • offset 写地址偏移。

  • length 写数据个数。

  • value 写入的值。

  • comment 注释。

  "inits": [
    {
      "access_type": 6,
      "offset" : 0,
      "length" : 1,
      "value"  : 10,
      "comment" : ""
    }
  ]

3. 访问通道中的数据。

格式:<通道名>.<通道数据类型>[offset].(bit_offset|<变量数据类型>)

  • 通道名:配置文件中的通道名。
  • 通道数据类型:str/bin/byte/word/dword/int8/uint8/int16/uint16/int32/uint32/int64/uint64/float/double
  • offset : 读取数据的偏移量。
  • bit_offset : 读取数据的位偏移量(可选)。
  • 变量数据类型:可选。默认和通道数据类型一致。

说明:

  • <通道名>.<通道数据类型>[offset] 用于定位在通道中数据的偏移地址。比如:
    • read_input_bits.byte[1] 为第二个字节。
    • read_input_bits.uint16[1] 为第三个字节。
    • read_input_bits.uint32[1] 为第五个字节。
  • str/bin 在计算偏移时与 int8/uint8 相同。
  • str/bin 做为变量类型时,可以指定长度限制。比如:
    • read_input_registers.int8[10].str[8] 长度不超过 8 字节
    • read_input_registers.int8[10].bin[12] 长度不超过 12 字节
  • str 类型的数据必须以空字符’\0’结尾。

示例:

  • read_input_bits.byte[0].0 表示读取通道中的第一个字节的第一个位。
  • read_input_bits.byte[1].3 表示读取通道中的第二个字节的第四个位。
  • read_input_registers.word[1] 表示读取通道中的第二个字。
  • read_input_registers.byte[0].str 表示读取字符串。
  • read_input_registers.byte[0].bin[16] 表示读取 16 字节的二进制数据。

示例:

      <check_button tr_text="DI00" v-data:value="{read_input_bits.byte[0].0}" sensitive="false"/>
      <check_button tr_text="DI01" v-data:value="{read_input_bits.byte[0].1}" sensitive="false"/>
      <check_button tr_text="DI02" v-data:value="{read_input_bits.byte[0].2}" sensitive="false"/>
      <check_button tr_text="DI03" v-data:value="{read_input_bits.byte[0].3}" sensitive="false"/>
      <check_button tr_text="DI04" v-data:value="{read_input_bits.byte[0].4}" sensitive="false"/>
      <check_button tr_text="DI05" v-data:value="{read_input_bits.byte[0].5}" sensitive="false"/>
      <check_button tr_text="DI06" v-data:value="{read_input_bits.byte[0].6}" sensitive="false"/>
      <check_button tr_text="DI07" v-data:value="{read_input_bits.byte[0].7}" sensitive="false"/>
      <check_button tr_text="DI08" v-data:value="{read_input_bits.byte[1].0}" sensitive="false"/>
      <check_button tr_text="DI09" v-data:value="{read_input_bits.byte[1].1}" sensitive="false"/>
      <check_button tr_text="DI10" v-data:value="{read_input_bits.byte[1].2}" sensitive="false"/>
      <check_button tr_text="DI11" v-data:value="{read_input_bits.byte[1].3}" sensitive="false"/>
      <check_button tr_text="DI12" v-data:value="{read_input_bits.byte[1].4}" sensitive="false"/>
      <check_button tr_text="DI13" v-data:value="{read_input_bits.byte[1].5}" sensitive="false"/>
      <check_button tr_text="DI14" v-data:value="{read_input_bits.byte[1].6}" sensitive="false"/>
      <check_button tr_text="DI15" v-data:value="{read_input_bits.byte[1].7}" sensitive="false"/>
    <view name="ai" children_layout="default(h=32,c=2,s=10,m=5)">
      <label />
      <label tr_text="analog in0"/>
      <edit input_type="uint" v-data:value="{read_input_registers.word[0]}" max="0xfffff" readonly="true"/>
      <label tr_text="analog in1"/>
      <edit input_type="uint" v-data:value="{read_input_registers.word[1]}" max="0xfffff" readonly="true"/>
      <label tr_text="analog in2"/>
      <edit input_type="uint" v-data:value="{read_input_registers.word[2]}" max="0xfffff" readonly="true"/>
      <label tr_text="analog in3"/>
      <edit input_type="uint" v-data:value="{read_input_registers.word[3]}" max="0xfffff" readonly="true"/>
    </view>

内置属性

属性类型说明
url字符串URL
connected布尔当前是否连接。

示例

  <label x="c" y="10" w="50%" h="40" v-data:tr_text="{url}" />
  <label x="c" y="60" w="50%" h="40" v-data:tr_text="{connected ? 'connected' : 'no connection'}" />

内置命令

命令参数说明
update通道名称(不指定则为全部)更新通道数据 (read/write)

示例

<button x="c:-100" y="b:10" w="168" h="36" text="Update" v-on:click="{update, args=read_input_registers}" />

完整示例

请参考:demo_modbus_client

注意

如果数据需要进行字节序转换,可以调用 fscript 函数,具体请参考:https://gitee.com/zlgopen/awtk/blob/master/docs/fscript_endian.md

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】:坐标

坐标 一.常用快捷键二.使用帮助文档三.Qt坐标体系1.理论2.代码 一.常用快捷键 注释&#xff1a;ctrl / • 运⾏&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl ⿏标滑轮 • 查找&#xff1a;ctrl F 比特就业课 • 整⾏移动&#xff1a;ctrl …

【Linux】体验一款开源的Linux服务器运维管理工具

今天为大家介绍一款开源的 Linux 服务器运维管理工具 - 1panel。 一、安装 根据官方那个提供的在线文档&#xff0c;这款工具的安装需要执行在线安装&#xff0c; # Redhat / CentOScurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start…

.NET CORE使用Redis分布式锁续命(续期)问题

结合上一期 .NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案(.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案-CSDN博客)。有的小伙伴私信说如果锁内锁定的程序或者资源未在上锁时间内执行完&#xff0c;造成的使用资源冲突&#xff0c;需要如何解决。本…

原创度检测工具分享,文章质量检测方便又简单

文章检测有利于我们了解文章内容的质量高低&#xff0c;而在以往我们检测文章只能依靠手动去检测&#xff0c;这是相当消耗工作时间的&#xff0c;但是在原创度检测工具出来之后&#xff0c;很多人开始检测文章质量就改用原创度检测工具了&#xff0c;因为使用原创度检测工具是…

ES学习日记(三)-------第三方插件选择

前言 在学习和使用Elasticsearch的过程中&#xff0c;必不可少需要通过一些工具查看es的运行状态以及数据。如果都是通过rest请求&#xff0c;未免太过麻烦&#xff0c;而且也不够人性化。 目前我了解的比较主流的插件就三个,head,cerebor和elasticHD 1.head 老牌插件,功能…

vant checkbox 复选框 样式改写

修改前 修改后 基于 vant&#xff1a; 4.8.3 unocss: 0.53.4 <van-checkbox-group v-model"query.zczb" shape"square" class"text-16 w-100% flex flex-wrap"><template v-for"item in registerCapitalOption"><v…

伪原创文章生成软件:自媒体文章写作好神器

自媒体的红利时代&#xff0c;许多人都纷纷参于其中&#xff0c;而文章写作是做自媒体的基本技能&#xff0c;但是随着技术的发展&#xff0c;如今&#xff0c;既使不会写作能力一样可以做起自媒体&#xff0c;方法就是利用伪原创文章生成软件来做内容的输出&#xff0c;其实伪…

PowerBI和Tableau之间该怎么选择?

最近经常看到朋友询问&#xff0c;最近想学习数据分析工具&#xff0c;但是PowerBI和Tableau之间不知道怎么选择? 其实可以从下面几个方面进行参考&#xff0c;Power BI和Tableau哪个更适合你&#xff1f; 共同点&#xff1a; Power BI和Tableau都是强大的数据分析和数据可…

Node爬虫:原理简介

在数字化时代&#xff0c;网络爬虫作为一种自动化收集和分析网络数据的技术&#xff0c;得到了广泛的应用。Node.js&#xff0c;以其异步I/O模型和事件驱动的特性&#xff0c;成为实现高效爬虫的理想选择。然而&#xff0c;爬虫在收集数据时&#xff0c;往往面临着诸如反爬虫机…

QML通过鼠标拖动的位置

当通过鼠标拖动Rectangle 的位置时&#xff0c;可以使用Qt Quick的MouseArea组件来实现 Rectangle {id: rectx:0;y:0width: 200; height: 100color: "lightblue"MouseArea {id: mouseAreaanchors.fill: parentdrag.target: rect//要拖动的项目的IDdrag.axis: Drag.XA…

设计模式 —— 设计原则

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 开闭原则 对扩展开放&#xff0c;对修改关闭。在程序需…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

【SpringBoot从入门到精通】01_SpringBoot概述

一、Spring与SpringBoot 1.1 Spring Spring 是一款目前主流的 Java EE 轻量级开源框架&#xff0c;是 Java 世界最为成功的框架之一。Spring 由“Spring 之父”Rod Johnson(罗宾约翰逊) 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。 广义…

Windows下安装使用Squirrel

引言 SQuirrel SQL Client是一个用Java写的数据库客户端,用JDBC统一数据库访问接口以后,可以通过一个统一的用户界面来操作MySQL PostgreSQL MSSQL Oracle等等任何支持JDBC访问的数据库。使用起来非常方便。而且,SQuirrel SQL Client还是一个典型的Swing程序。 如果您的工作…

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍&#xff0c;基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量&#xff0c;并…

LDL^H分解求逆矩阵与MATLAB仿真(Right-Looking)

通过分解将对称正定厄米特矩阵分解成下三角矩阵L和对角矩阵D来求其逆矩阵 目录 前言 一、LDL^H基本算法 二、LDL^H Right-Looking算法 三、D矩阵求逆 四、L矩阵求逆 五、A矩阵求逆 六、计算量分析 七、MATLAB仿真 八、参考资料 总结 前言 在线性代数中&#xff0c;LDL…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候&#xff0c;自动进入安全模式 在安全模式中&#xff0c;NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后&#xff0c;更新fsimage文件 更新完成之后&#xff0c;NameNode会将fsimage文件中的元数据加…

(免费分享)基于springboot,vue付费自习室系统带论文

在当今数字化时代&#xff0c;高效、便捷的管理系统成为了各行各业不可或缺的工具。特别是在教育服务领域&#xff0c;自习室作为学生和在职人员重要的学习场所&#xff0c;其预约和管理需求日益增长。为了满足这一市场需求&#xff0c;本文开发了这款基于微信小程序的付费自习…

DC-5靶机

一.环境搭建 1.下载地址 靶机下载地址&#xff1a;https://download.vulnhub.com/dc/DC-5.zip 2.虚拟机配置 切换nat模式&#xff0c;有问题全选重试和是&#xff0c;打到这了&#xff0c;我感觉这个配置我都不用写了&#xff0c;启动靶机如下图所示即可 二.开始渗透 1.信…

设计模式 - 简单工厂模式

文章目录 前言 大家好,今天给大家介绍一下23种常见设计模式中的一种 - 工厂模式 1 . 问题引入 请用C、Java、C#或 VB.NET任意一种面向对象语言实现一个计算器控制台程序&#xff0c;要求输入两个数和运算符 号&#xff0c;得到结果。 下面的代码实现默认认为两个操作数为Inte…
最新文章