首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决Pylibmodbus中的TypeError异常?

如何解决Pylibmodbus中的TypeError异常?
EN

Stack Overflow用户
提问于 2019-06-01 12:56:13
回答 1查看 199关注 0票数 1

我试图创建这个ModbusRtu对象,但是当我尝试插入一些参数时,它似乎会引发一个错误。即使我只是尝试使用作者指定的原始参数运行它,也会出现相同的错误。我现在已经安装了所有所需的软件包。

libffi-dev - 3.2.1-4 libmodbus - 3.1.4-2 libmodbus- 3.1.4-2 python-dev - 2.7.15~rc1-1 CFfI-2.19

我真的不明白为什么它不应该工作,因为即使是作者定义的参数似乎也会产生同样的错误。

我已经尝试跟随它的消息,将参数转换为字节、列表或元组,但它只会引发另一个异常。

代码语言:javascript
运行
复制
``` Python Code 1 (before my solution)

self.master =ModbusRtu(设备=‘/dev/ttyACM0’),

代码语言:javascript
运行
复制
                    baud=9600, data_bit=8, 
代码语言:javascript
运行
复制
                    parity='N', stop_bit=1)
代码语言:javascript
运行
复制
self.master = ModbusRtu(device=bytes('/dev/ttyACM0', 'ascii), 
                        baud=9600, data_bit=8, 
                        parity=bytes('N', 'ascii), stop_bit=1)


``` Simpler Python Code 1

从pylibmodbus进口ModbusRtu

def main():

代码语言:javascript
运行
复制
client = ModbusRtu()
代码语言:javascript
运行
复制
# i can't instantiate the ModbusRtu class
代码语言:javascript
运行
复制
print(client)
代码语言:javascript
运行
复制
# i should have at least the id of the instantiated class

如果 ==命名为“main”:

代码语言:javascript
运行
复制
main()
代码语言:javascript
运行
复制

它应该是创建对象,但是我只收到了以下消息:

文件"/usr/local/lib/python3.6/dist-packages/pylibmodbus/modbus_rtu.py",第11行,在init self.ctx =C.modbus_new_rtu(设备、波特、奇偶校验、data_bit、stop_bit)中: ctype 'char *‘的初始化器必须是一个字节或列表或元组,而不是str

当我尝试将字符串参数转换为字节时,我得到了以下消息:

文件"/usr/local/lib/python3.6/dist-packages/pylibmodbus/modbus_core.py",第60行,在_run中引发Exception(ffi.string(C.modbus_strerror(ffi.errno)))异常:B‘没有这样的文件或目录’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-01 16:16:49

这就是Python2.x对我有用的地方:

代码语言:javascript
运行
复制
from pylibmodbus import ModbusRtu

client=ModbusRtu(device="/dev/ttyACM0", baud=19200, parity="N", data_bit=8, stop_bit=1)

client.connect()
SERVER_ID=0

client.set_slave(SERVER_ID)

client.write_registers(0, [0]*10)

result=(client.read_registers(0, 10))
print result

client.close()

对于Python3.x,您必须使用编码文本,我认为这是您的问题所在:

从pylibmodbus进口ModbusRtu

代码语言:javascript
运行
复制
client=ModbusRtu(device="/dev/ttyACM0".encode("ascii"), baud=19200, parity="N".encode("ascii"), data_bit=8, stop_bit=1)

client.connect()
SERVER_ID=0

client.set_slave(SERVER_ID)

client.write_registers(0, [0]*10)

result=(client.read_registers(0, 10))
print(result)

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

https://stackoverflow.com/questions/56406959

复制
相关文章

相似问题

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