名称:modbus_client_channel
功能:通过 modbus 协议访问远程 slave 设备上的数据,需要配合 modbus_client
模型一起使用。用于将 modbus client 中的 channel 包装成view_model
或者view_model_array
一般来说不需要,直接使用
modbus_client
模型即可。只有在需要将通道中的数据当成多条记录,方便绑定到 ListView 时,才需要使用。
1. 参数
- name 用于加载配置文件。路径为:design/default/data/<name>.json
modbus_client_channel
必须在modbus_client
模型之下创建。
示例:
<window v-model="modbus_client(name=modbus_demo,share=true)" name="home_page">
<view x="0" y="0" w="100%" h="100%" v-model="modbus_client_channel(name=modbus_demo_input_register)">
...
</view>
</window>
这里配置文件路径为:design/default/data/modbus_demo_input_register.json
2. 配置文件格式
使用 JSON 文件描述配置。
2.1 基本配置
-
channel 通道的名字。在
modbus_client
模型的配置中必须存在。 -
items 通道中记录的个数。
items > 1 为数组模型,否则为非数组模型。为数组模型时,可以绑定到 ListView,每一项数据绑定到一个列表项中。
当 items > 1,整个通道的数据被分成 items 等份。每一份的长度为:通道总数据长度/items,数据访问的范围必须在一份数据的长度范围内。
示例:
{
"channel":"read_input_registers",
"items": 100,
"variables": {
"level": "byte[0].uint32",
"time": "byte[4].uint32",
"message": "byte[8].str[54]"
}
}
2.3 变量定义
UI 可以直接绑定通道中的数据。为了提高可读性和灵活性,可以定义一些变量,将变量映射到通道地址。
- 定义变量
"variables": {
"level": "byte[0].uint32",
"time": "byte[4].uint32",
"message": "byte[8].str[54]"
}
- 使用变量
<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="{湿度}" />
3. 访问通道中的数据。
格式:<通道数据类型>[offset].(bit_offset|<变量数据类型>)
详情 modbus client 中的 访问通道中的数据
。不同之处是不需要指定通道名称前缀。
示例:
- byte[0].uint32 从偏移为 0 的地址读取 32 位无符号整数。
- byte[4].uint32 从偏移为 4 的地址读取 32 位无符号整数。
- byte[8].str[54] 从偏移为 8 的地址读取最大长度为 54 字节的字符串。字符串本身必须于以空字符’\0’结束。
内置属性
属性 | 类型 | 说明 |
---|---|---|
url | 字符串 | URL |
connected | 布尔 | 当前是否连接。 |
name | 字符串 | 名称。 |
示例
<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}" />
完整示例
请参考:demo_modbus_client_channel_input_registers
注意
如果数据需要进行字节序转换,可以调用 fscript 函数,具体请参考:https://gitee.com/zlgopen/awtk/blob/master/docs/fscript_endian.md