Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2022 14:41:25

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: 'ExceptionResponse' object is not subscriptable

Помогите разобраться, почему выскакивает ошибка:

 client.connect()
reply = client.write_register(40006, 2002, unit=0x05)
if isinstance(reply, ModbusIOException):
    print(reply)
 
while True:
    values = client.read_input_registers(address=40060, count=1, unit=0x05)
    # or client.read_holding_registers(...)
    if isinstance(values, ModbusIOException):
        print(values)
    else:
        # here if values is not an ModbusIOException
        print("Values:", values)
        if values [0] == 0xFFFF:
            print("Error detected")
        elif values [0] == 2002:
            print("Data ready")
            result = client.read_input_registers(address=40051, count=9, unit=0x05)
            if isinstance(result, ModbusIOException):
                print("Could not read result")
                print("Maybe client.read_holding_registers?")
            else:
                print("Got a result:", result)
В результате имею:
Values: Exception Response(132, 4, IllegalFunction)
Traceback (most recent call last):
File "/home/pokip/winox1.py", line 28, in <module>
if values[0] == 0xFFFF:
TypeError: 'ExceptionResponse' object is not subscriptable

Отредактировано staxbel (Авг. 10, 2022 14:41:46)

Офлайн

#2 Авг. 10, 2022 15:55:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

TypeError: 'ExceptionResponse' object is not subscriptable

staxbel
1) в коде, который вы показываете 23 строки, а ошибка возникает в двадцатьвосьмой
2)

 print("Values:", values)
что пишут?
3) что это вообще за код то? Что за клиент, откуда? Как это воспроизвести по-вашему?



Офлайн

#3 Авг. 12, 2022 13:10:54

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: 'ExceptionResponse' object is not subscriptable

Прошу прощения, не все успел описать, пришлось уехать. Хочу получить данные по modbus. Уже немного переписал код, но ошибка осталась.



 from pymodbus.client.sync import ModbusSerialClient
from pymodbus.exceptions import ModbusIOException
 
unit = 1
client = ModbusSerialClient(method='rtu', port='COM3', parity='N', baudrate=9600, bytesize=8, stopbits=1, timeout=1, strict=False)
reply = client.write_register(5, 2002, unit=unit)
if isinstance(reply, ModbusIOException):
    print(reply)
 
while True:
    values = client.read_holding_registers(address=59, count=1, unit=unit)
    # or client.read_holding_registers(...)
    if isinstance(values, ModbusIOException):
        print(values)
    else:
        # here if values is not an ModbusIOException
        print("Values:", values)
        if values[0] == 0xFFFF:
            print("Error detected")
        elif values[0] == 2002:
            print("Data ready")
            result = client.read_holding_registers(address=50, count=9, unit=unit)
            if isinstance(result, ModbusIOException):
                print("Could not read result")
                print("Maybe client.read_holding_registers?")
            else:
                print("Got a result:", result)
Получаю ошибку:
 Values: ReadHoldingRegistersResponse (1)
Traceback (most recent call last):
  File "winox1.py", line 18, in <module>
    if values[0] == 0xFFFF:
TypeError: 'ReadHoldingRegistersResponse' object is not subscriptable

Отредактировано staxbel (Авг. 12, 2022 13:13:12)

Офлайн

#4 Авг. 12, 2022 13:33:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

TypeError: 'ExceptionResponse' object is not subscriptable

staxbel
вам надо:
1. Выяснить, что именно находится в переменной values - какого типа эта переменная и какое именно значение в ней содержится. Подозреваю что там значение типа ReadHoldingRegistersResponse
2. Зная тип переменной найти документацию к этому типу, она наверняка есть на сайте этой библиотеки, так же будет полезно посмотреть в код, если это написано на питоне.
3. Выяснить, правомочно ли применять квадратные скобки к переменной. Подозреваю, что у этого типа нет __getitem__() и так делать нельзя.
4. Если же операция values позволена (а скорее всего нет), то дальше мы должны понять, какое значение нам возвращается, какого типа и можем ли мы сравнивать его с числом



Офлайн

#5 Авг. 12, 2022 16:16:25

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

TypeError: 'ExceptionResponse' object is not subscriptable

Я пробую сейчас только записать в регистр, но и это не получается. Ошибок нет, но и запись не происходит. Можете что-то подсказать?

 from pymodbus.client.sync import ModbusSerialClient
from pymodbus.exceptions import ModbusIOException
  
unit = 1
client = ModbusSerialClient(method='rtu', port='COM3', parity='N', baudrate=9600, bytesize=8, stopbits=1, timeout=1, strict=False)
client.connect()
reply = client.write_register(5, 2002, unit=unit)
print (reply)
 
request = client.read_holding_registers(59, 1, unit=unit)
result = request.registers
print(result) 
Получаю вот такой ответ:
 Exception Response(134, 6, IllegalFunction)
[2020]
Хотя 2020 должно было замениться на 2002

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version