TypeError: __init__() got multiple values for argument 'framer'
时间: 2023-07-30 08:09:10 浏览: 50
这个错误通常是因为在创建 ModbusSerialClient 对象时,同时指定了 `method` 和 `framer` 参数,导致参数重复。要解决这个问题,你可以将 `method` 参数去掉,或者将 `framer` 参数去掉,只保留其中一个即可。以下是修改后的示例代码:
```python
from pymodbus.client.sync import ModbusSerialClient
from pymodbus.transaction import ModbusRtuFramer
client = ModbusSerialClient(
port='/dev/ttyUSB0', # 串口号
baudrate=9600, # 波特率
timeout=2, # 超时时间
framer=ModbusRtuFramer(),
)
client.connect() # 连接 Modbus Slave 设备
# 读取保持寄存器
result = client.read_holding_registers(
address=0, # 寄存器地址
count=1, # 寄存器数量
unit=1, # Slave 设备地址
)
# 获取完整的 Modbus RTU 报文
request = client.last_request
response = client.last_response
print('Request: ', request)
print('Response: ', response)
client.close() # 断开与 Modbus Slave 设备的连接
```
在这个示例代码中,我们只保留了 `framer` 参数,而将 `method` 参数去掉了。同时,我们在创建 ModbusRtuFramer 对象时,使用了括号 `()`,表示创建一个新的对象。这样就可以避免出现 `TypeError: __init__() got multiple values for argument 'framer'` 错误了。