MODBUS RTU-RS485 ISSUE 温度和湿度,不能同时读取

问题描述

我有一个温度和湿度传感器 (R444A01) 通过 MODBUS RTU(RS485 端口)连接到 LogicMachine (LM5LP2)。

Sensor R444A01 Datasheet(请记住,除了一些用户评论和供应商规范之外,我们讨论的是一种不昂贵的设备,记录不完整且没有任何支持

这是我的(非常简单的)代码

{
  "manufacturer": "Embedded Systems","description": "Sensor R444A01","mapping": [
    {
      "name": "Temperature","bus_datatype": "float16","datatype": "int16","type": "register","address": 0,"value_multiplier": 0.1,"units": "C"
    },{
      "name": "Humidity","datatype": "uint16","address": 1,"units": "%"
    }
  ]
} 

我面临的问题是,当将这 2 个地址映射到 knx 地址时,如果我只映射 1 个地址,那么我可以读取它,但是如果我将它们都映射,那么我只能读取“温度”(恰好是我代码中的第一个地址)。这是我所看到的图片KNX address mapping for MODBUS addresses

显然,对于湿度值,LogicMachine 读取 int16 可以给出的最低可能数字 (32768),即使接收到的数据应该是 uint16 数据类型,因为它是湿度(百分比值)我们正在谈论。

最后,这里是 Modbus 轮询日志所说的(建议我应该能够读取温度和湿度值):


[18/05/2021 21:51:32] Modbus 请求 (COM10)

地址:1 功能:3 (0x03) - 读取保持寄存器 起始地址:0 数量:2

校验和:50187(OK)


[18/05/2021 21:51:32] Modbus 响应 (COM10)

地址:1 功能:3 (0x03) - 读取保持寄存器

Byte Count: 4
Values: 00 f3 01 ea 
    Register0: 243
    Register1: 490

校验和:35359(OK)


不知道是否有人知道为什么会发生这种情况,但我感谢您的回复

非常感谢。

解决方法

正如@Marcos G. 在问题评论中指出的那样,事实证明,成功向传感器 R444A01 询问多个寄存器的值的唯一方法是在单个查询中读取这些寄存器,而不是每 1 个查询注册。

因此,我需要使用以下键:“read_count”和“read_offset”。

以下是在单个查询中读取温度和湿度值的正确代码:

{
  "manufacturer": "Embedded Systems",  "description": "Sensor R444A01",  "mapping": [
    {
      "name": "Temperature",      "bus_datatype": "float16",      "type": "register",      "address": 0,      "read_offset": 0,      "read_count": 2,      "value_multiplier": 0.1,      "units": "ºC"
    },    {
      "name": "Humidity",      "read_offset": 1,      "units": "%"
    }
  ]
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...