Поведение wb-mqtt-serial при ошибках записи

Починили непрошенное молчаливое долбление в устройство, возвращающее ошибку записи?

Я тогда угробил огромную кучу времени на выяснение, в какой именно версии поломали нормальную работу, и на откат к предыдущей.

Сейчас если устройство возвращает именно ошибку при записи, то запись откладывается на время. А если таймаут - то попытки продолжаются. Но надо, действительно, проверить это поведение, благодарю.

Надо убрать немедленно, повторяю в 94й раз. Эта волчья яма убивает на корню всю логику (ранее - приемлемую) общения с устройствами и является источником тьмы глубоко зарытых глюков.

Так, как сделать правильно?
вот возьмем ситуацию, есть устройство, оно отвечает удачно при опросе регистров.
и развернем в варианты:

  • при записи в регистр устройство возвращает ошибку, продолжает читаться при следующих циклах чтения
  • при записи в регистр устройство просто не отвечает, таймаут. Продолжать попытки записи или …?
  1. Попытали чтение. Прочлось - ок, нет - error r, а лучше код ошибки.
  2. Попытали запись. Записалось - ок, нет - error w, а лучше код ошибки.

Всёооооо. За каким лешим пытаться печь пироги огнеметом?!

Скрипт, который пишет в и читает из устройств, ориентируется на возврат подтопика error: если ошибка не прилетела, он не имеет возможности узнать, что есть проблема, и предпринимает неверные, иногда критически неверные действия. Я мрачно охренел, например, когда он запустил два насоса в одну трубу. Ну вы помните мои вопли.

Я давно не понимаю, чтО тут можно обсуждать: никакой непредсказуемой подковёрной деятельности ВООБЩЕ не должно быть, в принципе. И ору об этом добрых два года, как в пустыне об стенку горох.

Ну так и сейчас - несколько попыток записи (5 по-моему), если не записалось - ставится ошибка. При этом контрол возвращается в прежнее значение и все. Но да, попытки записать - их не 5. Будем менять.

Вы правда не понимаете?

При получении от устройства, если оно отвечает “illegal function”, “illegal data address”, “illegal data value”, то не пытаемся повторить запись. И сразу выставляется ошибка. Иначе пытаемся, да долго. Но тоже с ошибкой.

Нет, не пытаемся. Вываливаем ошибку и все.
Если б я мог предположить хотя бы теоретическую нужду в попытках достучаться, я бы завел параметры retry_count и retry_timeout или нечто вроде, чтоб прогер мог управлять ситуевиной.
Но я не могу вообразить, где и как это может пригодиться вообще.

Но причина возмущения не в этом. А в том, что внезапно появляется недокументированная волчья яма («фича» на местном наречии) и - хоть стой, хоть падай. С таким подходом я не смогу примириться никогда.

Господа, прошу прощения, но это опять какой-то неконструктивный флуд.

Уважаемый @cu6apum, прошу проверить поведение последней версии сервиса из testing с вашим устройством. Если вам не понравится поведение - пожалуйста напишите подробно.

Я понимаю, что мы это возможно обсуждали три месяца назад, но собирать информацию по 100 сообщениям мы сейчас не будем. Поэтому, если эта задача действительно реальная и актуальная, прошу сделать как написал - попробовать на новой версии, подробно описать желаемое поведение.

Обзывательства, оскорбления и обсуждение того, как нам правильно построить процесс разработки, в этой теме буду удалять. Если вы захотите про это высказаться - пожалуйста заведите отдельную, где мы будем обсуждать только это.

Спасибо.

1 лайк