AWTK 开源串口屏 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值