首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyModbusTCP acc64 SUnSpec

pyModbusTCP acc64 SUnSpec
EN

Stack Overflow用户
提问于 2021-03-11 19:21:20
回答 2查看 83关注 0票数 0

我正在尝试从反相器读取数值(用于太阳能电池板)。变频器采用带SunSpec协议的Modbus (TCP/IP)协议。

我正在使用pyModbusTCP,我可以连接到逆变器并获得int16和uint16类型的值,但不是string或acc64类型的值。我使用以下代码来获取这些值:

代码语言:javascript
复制
from pyModbusTCP.client import ModbusClient
client = ModbusClient(host="192.168.40.10", port=502)
client.open()
client.read_holding_registers(40084)

是否需要导入其他内容才能读取这些值?我是python的新手,这也是我第一次使用pyModbusTCP。

带有一些SunSpec信息的PDF:https://sunspec.org/wp-content/uploads/2015/06/SunSpec-Information-Models-12041.pdf

EN

回答 2

Stack Overflow用户

发布于 2021-03-11 20:12:01

在pyModbusTCP:https://pymodbustcp.readthedocs.io/en/latest/package/class_ModbusClient.html的官方文档中,我们可以看到下面的描述: read_holding_registers(reg_addr,reg_nb=1)

Modbus function READ_HOLDING_REGISTERS (0x03)

参数:

reg_addr (int) -寄存器地址(0至65535)

reg_nb (int) -要读取的寄存器数(1到125)

返回:

寄存器列表或无(如果失败

返回类型:

int或None的列表

返回类型是list,所以我们可以这样做:

代码语言:javascript
复制
values = client.read_holding_registers(40084)
if values:
    for value in values:
        # you can convert int to string
        converted_value = str(value)
        # implement here you own lgorithm
票数 0
EN

Stack Overflow用户

发布于 2021-08-31 14:31:13

首先,确保寄存器40084包含您要查找的值。我们使用版本4的SunSpec协议,AC终身有效(实际)能量输出存储在40187地址的acc64寄存器中。无论如何,为了读取acc64值,您必须读取4个值,每个值16位:

代码语言:javascript
复制
client.read_holding_registers(40084,4).

您将返回4个值,如下所示:

代码语言:javascript
复制
0
0
869
55690

其中的每一个现在都需要转换回十六进制,连接togheter,然后再转换回int:

代码语言:javascript
复制
0 (dec) --> 00 00 (Hex)
0 (dec) --> 00 00 (Hex)
869 (dec) --> 03 65 (Hex)
55690 (dec) --> D9 8A (Hex)

最终十六进制值为: 00 00 00 03 65 D9 8A,换算为DEC为57.006.474

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66581549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档