首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pymodbus异常响应(131,3,IllegalAddress)

pymodbus异常响应(131,3,IllegalAddress)
EN

Stack Overflow用户
提问于 2015-10-21 16:21:31
回答 2查看 7.5K关注 0票数 5

我试着运行这段代码:

代码语言:javascript
运行
复制
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging

logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

client = ModbusClient(method='rtu', baudrate=9600, parity='E', port='/dev/ttyUSB0', timeout=1)
client.connect()

rr = client.read_holding_registers(40000, 7, unit=0x01)
print rr
client.close()

但我只知道:

代码语言:javascript
运行
复制
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.factory:Factory Response[131]
DEBUG:pymodbus.transaction:adding transaction 0
DEBUG:pymodbus.transaction:getting transaction 1
Exception Response(131, 3, IllegalAddress)

另一方面,这个C代码(使用libmodbus)正在工作:

代码语言:javascript
运行
复制
modbus_t *mb;
int16_t hregs[9];
mb = modbus_new_rtu('/dev/ttyUSB0', 9600, 'E', 8, 1);
modbus_set_slave(mb, 1);
modbus_read_registers(mb, 0x40000, 7, hregs)

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2017-12-10 08:54:43

异常响应(131,3,IllegalAddress)是指:

查询数据字段中包含的值不是从服务器的允许值。这表示复杂请求的剩余部分的结构存在错误,例如隐含长度不正确。这并不意味着提交存储在寄存器中的数据项具有超出应用程序期望的值,因为MODBUS协议不知道任何特定寄存器的任何特定值的重要性。

http://www.simplymodbus.ca/exceptions.htm

更新

您是否尝试过使用0x400000x400 (在许多情况下是默认的)?0x40000 (十六进制)与40000 (十进制)不同

票数 2
EN

Stack Overflow用户

发布于 2017-10-31 03:49:08

我猜你是想读前七本收款机。在这种情况下,要给read_holding_registers函数的地址是。该函数隐式地为保存寄存器添加40000的偏移量。

因此,尝试将您的读代码更改为

代码语言:javascript
运行
复制
rr = client.read_holding_registers(0, 7, unit=0x01)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33264449

复制
相关文章

相似问题

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