Регистры Modbus доступны только для чтения и не могут быть записаны.

Я пытаюсь связаться по протоколу Modbus с контроллером uC2 SE для воздушно-водяного чиллера. Последовательный порт RS485-USB COM подключен к контроллеру, и я смог прочитать регистры, но невозможно изменить их значения с помощью функции write_register. Я тоже пробовал тестером. exe и Modscan64, и результат был тот же, они могут только читать, но не писать. Я представил здесь фрагмент кода, который выполняется, и ответы отладки могут быть проверены. Спасибо за вашу помощь заранее!

Изменить уставку температуры

ОХЛАЖДЕНИЕ_SETPOINT_REG = 41

попробуйте: print(instrument.read_register(COOLING_SETPOINT_REG,1)) кроме IOError: print('Не удалось прочитать из прибора')

НОВАЯ_ТЕМПЕРАТУРА = 20,1

return_flag = Instrument.write_register(COOLING_SETPOINT_REG, NEW_TEMPERATURE,1,functioncode = 6, signed = True) # Номер регистра, значение, количество десятичных знаков для хранения output_flag = 'SUCCESS' if return_flag else 'FAILURE' print('запись состояния одного регистра' + output_flag + '\n' )

попробуйте: print(instrument.read_register(COOLING_SETPOINT_REG,1)) кроме IOError: print('Не удалось прочитать из прибора')

Отладка ответа:

Минимальный режим отладки Modbus. Запишет в прибор (ожидая 7 байт назад): '\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) Режим отладки MinimalModbus. Открытие порта COM8 Режим отладки MinimalModbus. Очистка последовательных буферов для порта COM8 в режиме отладки MinimalModbus. Не требуется сон перед записью. Время с момента предыдущего чтения: 334030,00 мс, минимальный период молчания: 4,01 мс. Минимальный режим отладки Modbus. Закрытие порта COM8 в режиме отладки MinimalModbus. Ответ от прибора: '\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2) (7 байт), время приема-передачи: 62,0 мс. Тайм-аут чтения: 1000,0 мс.

20.0 Минимальный режим отладки Modbus. Запишет в прибор (ожидая 8 байт назад): '\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54) Режим отладки MinimalModbus. Открытие порта COM8 Режим отладки MinimalModbus. Очистка последовательных буферов для порта COM8 в режиме отладки MinimalModbus. Не требуется сон перед записью. Время с момента предыдущего чтения: 47,00 мс, минимальный период молчания: 4,01 мс. Минимальный режим отладки Modbus. Закрытие порта COM8 в режиме отладки MinimalModbus. Ответ от прибора: '\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54) (8 байт), время приема-передачи: 47,0 мс. Тайм-аут чтения: 1000,0 мс.

запись состояния единого регистра FAILURE

Минимальный режим отладки Modbus. Запишет в прибор (ожидая 7 байт назад): '\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) Режим отладки MinimalModbus. Открытие порта COM8 Режим отладки MinimalModbus. Очистка последовательных буферов для порта COM8 в режиме отладки MinimalModbus. Не требуется сон перед записью. Время с момента предыдущего чтения: 46,00 мс, минимальный период молчания: 4,01 мс. Минимальный режим отладки Modbus. Закрытие порта COM8 в режиме отладки MinimalModbus. Ответ от прибора: '\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2) (7 байт), время приема-передачи: 47,0 мс. Тайм-аут чтения: 1000,0 мс.


person David Fernandez    schedule 22.03.2021    source источник


Ответы (2)


Писать удается.

write_register из minimalmodbus не имеет возвращаемого значения None.

Таким образом, проверка return_flag приводит к ошибке.

person user3376253    schedule 22.03.2021
comment
Спасибо за ваш ответ, но кажется, что подчиненный может прочитать письменное сообщение и ответить, что оно вне зоны действия. Кажется, что контроллеру Carel потребуется какое-то разрешение, не знаю! - person David Fernandez; 24.03.2021
comment
Ответ от прибора: '\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54) (8 байт). Это означает, что запись прошла успешно. Регистр с адресом 0029 теперь имеет значение 00C9. Возможно, значение изменится обратно до того, как будет выполнено следующее чтение. - person user3376253; 24.03.2021
comment
Еще раз спасибо, я не заметил информации о полезной нагрузке, извините, я совсем новичок в этом деле. Но, это любопытно, так как я пробовал также разные программы, такие как тестер от Schneider или Modscan, и все они читают правильно, но не могут писать, и ни одно сообщение об ошибке не отображается. Должен ли я запускать программы с правами администратора, а не как пользователь?? Разумеется, для изменения параметров вручную требуется пароль, установленный в контроллере. Я также жду помощи от Карела, а пока буду продолжать попытки. - person David Fernandez; 25.03.2021

В контроллеры Carel uC Compact и uC2 SE Process нельзя записывать параметры по протоколу Modbus, так как они для этого не настроены. Для этой цели можно использовать только протокол Carel.

person David Fernandez    schedule 12.05.2021