Python ошибка TypeError: __init__() got multiple values for argument 'unit'

Код работал и работает в данный момент на другой машине.

import struct
import sys
import time
import datetime
import pymysql.cursors
from pymodbus.client.sync import ModbusSerialClient
from pymodbus.exceptions import ModbusIOException
from datetime import datetime

#connection = pymysql.connect(host='127.0.0.1', user='user', password='password', db='db', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)

unit = 2
client = ModbusSerialClient(method='rtu', port='/dev/ttyUSB1', parity='N', baudrate=9600, bytesize=8, stopbits=1, timeout=1, strict=False)

while True:
    reply = client.write_registers(52, 1, unit=unit) 
    reply = client.write_registers(53, 1, unit=unit) 
    reply = client.write_registers(5, 2020, unit=unit) 
    request = client.read_holding_registers(51, 1, unit=unit)
    result1 = request.registers
    print(result1)

Сейчас запускаю этот же файл на другой машине и получаю:

TypeError: __init__() got multiple values for argument 'unit'

вот по этой строке:

reply = client.write_registers(52, 1, unit=unit)

Помогите пожалуйста разобраться, что не так?


Ответы (2 шт):

Автор решения: Aleksandr Fetisov

Ошибка TypeError: init() got multiple values for argument 'unit' возникает, когда один и тот же аргумент передается в функцию несколько раз.

Попробуйте удалить параметр unit из вызова client.write_registers(52, 1, unit=unit) и передать его непосредственно при создании объекта ModbusSerialClient

client = ModbusSerialClient(method='rtu', port='/dev/ttyUSB1', parity='N', baudrate=9600, bytesize=8, stopbits=1, timeout=1, strict=False, unit=2)

Аналогично, замените reply = client.write_registers(53, 1, unit=unit) на reply = client.write_registers(53, 1) и reply = client.write_registers(5, 2020, unit=unit) на reply = client.write_registers(5, 2020)

→ Ссылка
Автор решения: Сергей Каштанов

проблема была в последней версии модуля pymodbus, установил 3.1 и все заработало.

→ Ссылка