Отваливаются DS18B20

К WB4 по 1ware подключено 4 датчика DS18d20, подключены по 3-м проводам (0,5 сечение), расстояние 3 метра, все датчики подключены к концу провода в одном месте. После выключения/включения WB4 их видно какое то время, час или два, а потом они отваливаются до следующего выключения/включения WB4, перезагрузка ничего не дает. В консоли следующее:

[ 6527.842230] w1_slave_driver 28-031297940bd3: Read failed CRC check
[ 6536.272247] w1_slave_driver 28-031297946c48: Read failed CRC check
[ 6554.882247] w1_slave_driver 28-03109794172b: Read failed CRC check
[ 6563.412218] w1_slave_driver 28-031297940bd3: Read failed CRC check
[ 6571.912145] w1_slave_driver 28-031297946c48: Read failed CRC check
[ 6590.252049] w1_slave_driver 28-03109794172b: Read failed CRC check
[ 6597.862002] w1_slave_driver 28-031297940bd3: Read failed CRC check
[ 6606.322519] w1_slave_driver 28-031297946c48: Read failed CRC check

В чем проблема?

Такое, к сожалению, бывает с 1-wire датчиками. Вы покупали их у нас?
Попробуйте по отдельности подключать их – возможно, что один из датчиков надо заменить.

В лог сыпляться вот такие ошибки. Что это может быть?

Aug 19 14:55:46 wirenboard-AGO3DAT user.notice serial: TModbusDevice::ReadRegist
erRange(): failed to read 6 holding(s) @ 18 of slave modbus:1
Aug 19 14:55:49 wirenboard-AGO3DAT user.notice serial: TModbusDevice::ReadRegist
erRange(): failed to read 6 holding(s) @ 18 of slave modbus:1
Aug 19 14:55:52 wirenboard-AGO3DAT user.notice serial: TModbusDevice::ReadRegist
erRange(): failed to read 6 holding(s) @ 18 of slave modbus:1

zhukovia, это не про 1-wire, это ошибки, связанные с Modbus. Возможно, какое-то устройство не подключено или настроено неправильно.

Есть вообще тогда смысл пользоваться 1-ware? Или он только для “галочки”? Вопрос не риторический, я пытаюсь понять есть ли смысл делать на 1-wire или добавлять 485 устройство с этими же датчиками. Мне нужно недалеко (4 метра) от WB4 поставить 8 датчиков температуры для контроля отопления по разным веткам, но если это так будет работать то может правильней тогда поставить например (WP3066ADAM) и через него подключить эти датчики. А то по постам на форуме постоянные проблемы возникают. Как будет стабильнее?

По моему, пора уже сделать FAQ по данной теме. Сколько можно есть этот кактус!
Я бы включил в этот faq следующие тезисы (исходя из личного опыта и опыта форумчан):

  1. Протокол 1-wire, похоже, разрабатывался как протокол для датчиков расположенных на одной монтажной плате и не рассчитан для подключения датчиков на длинной линии.
  2. У протокола 1-wire очень слабая помехозащищенность от импульсных помех. Датчики и их линия отвратительно работают вблизи импульсных блоков питания, и приборов коммутации (автоматы, выключатели, реле).
  3. При использовании нескольких датчиков 1-wire на одной шине следует учитывать, что если на шине будет присутствовать бракованный датчик, вносящий шумы и помехи, или неадекватно реагирующий на запросы, то остальные датчики на этой шине могут стать недоступными из-за помех или особенностей алгоритма драйвера 1-wire.
  4. сейчас производство датчиков ds18b20 вышло из-под контроля исходного производителя. Их делает много производителей и качество и совместимость страдают. Например, у форумчан были случаи, когда купленные датчики не работали по двухпроводной схеме с фантомным питанием.
  • Некоторые форумчане замечали, что эти датчики хуже работают на экранированной линии по витой паре FTP из-за возможного увеличения емкости между проводниками.
  • Неплохие рекомендации и разбор причин можно найти здесь:
    https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=114865#p784452

Исходя из этого опыта, на длинных линиях и/или вблизи источников импульсных помех я использую преобразователи WB-M1W2

Прошу коллег на данном форуме подключаться и дополнить эти тезисы.

1 лайк

Но у меня линия очень короткая, вряд ли это все относится к моему случаю, но позицию я понял. А что по поводу WP3066ADAM? Я уже читал на форуме про него немного и знаю что на отрицательных температурах он вроде не работает. Стоит его использовать?

ADAM мы тестировали, он работает, отрицательные температуры, насколько я помню, передаются в каком-то по умолчанию несовместимом с контроллером виде, но это можно исправить в движке правил.

По поводу первоначального вопроса. Я отключил один из датчиков и уже где то день все работает, наверное 3 датчик неисправен. Скажите, а на 1-ware такая проблема постоянно или мне неповезло? Если один датчик сбоит то и вся линия валится.

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

у меня подключено всего три датчика, до дальнего примерно метров 5-7. За пару лет работы глюкнул только один раз, вылечилось сбросом питания. Дописал логику работы контроллера, если информации с датчика нет или неадекватная к среднему значению за период, то сбросить питание. Если не помогло, то смс на телефон.
Датчик кстати покупал в чипдипе, мне нужен был сам датчик без оболочки, требовалась миниатюризация установки.

А где эту логику прописывали, в правилах? У меня почему то не выходит заставить их работать, 2 еще работают, а больше уже отваливаются то через час то через день. Может проблема в том что подключаются они в одной точке, т.е. на конце провода они все вместе “скручены”. У вас не в одном же месте подключение? Все же склоняюсь к блоку на RS485, так надежнее выходит, а то 8 датчиков мне кажется “всю кровь мне выпьют”. :unamused:

Я не пробовал подключать 1-wire именно к WB, но у меня есть опыт нескольких проектов с ds18b20 с разными другими контроллерами (начиная с arduino и т.п.).

То, что плохой датчик может мешать другим – согласен, лучше сначала проверять их по одному. То, что 1-wire не может работать на “средних дистанциях” – совсем не согласен, у меня работает 5 датчиков в квартире (до 10 метров от контроллера), у товарища загородный дом вообще весь опутан 1-wire и все работает (там, наверное, на сотни метров счет идет). В литературе пишут, что 500 метров достижимо при аккуратном использовании. Вот фантомное питание – лучше вообще не использовать, это только для ключей от домофона хорошо.

Важно следовать рекомендациям, ставить pullup резисторы и т.п. Также важна топология сети: считается, что “шина” (когда на длинном проводе висят девайсы короткими ответвлениями) работает лучше, чем “звезда” (хотя у меня именно звезда). Есть много тонкостей, довольно хорошая статья вот: https://www.maximintegrated.com/en/app-notes/index.mvp/id/148

Ну и самое важное: как именно вы общаетесь с девайсами и чего от них требуете. Я не знаю, как устроена работа с 1-wire в WB, но я пробовал несколько готовых библиотек, и все они выполняют кучу “лишних” команд. Например, чтобы банально считать температуру с заданного датчика, библиотека: сканит шину (детектит все устройства), потом общается с каждым устройством и выясняет его разновидность, потом посылает какие-то дополнительные команды… При этом если хоть одна команда завершилась ошибочно – то все пропало. И дальше простая математика: если вероятность ошибки на отдельной команде, допустим, 10% – то когда команд выполняется штук 15, то вероятность ошибки в одной из них уже 80%. Разумеется, оно в таком режиме еле шевелится.

У меня были очень похожие симптомы (сперва работает, потом все умирает) – и я взял и выкинул все библиотеки, зашил в коде адреса датчиков и написал код, который делает только одно: посылает команду “измерь температуру” и через секунду посылает команду “дай ответ” и считывает ответ. Все, у меня теперь процент ошибочных считываний минимален – иногда сутками работает без ошибок (а измеряет каждые 30 секунд).

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

у товарища загородный дом вообще весь опутан 1-wire и все работает (там, наверное, на сотни метров счет идет).

В последнее время я что то перестал доверять данным полученных через вторые руки. Наверное, старый стал :slight_smile: Может у товарища оно и работает. Но в тоже время, товарищ может и умолчать об каких нибудь нюансах и косяках.

У меня были очень похожие симптомы (сперва работает, потом все умирает) – и я взял и выкинул все библиотеки, зашил в коде адреса датчиков и написал код, который делает только одно

Ну то-есть, вы все же признаёте, что “из коробки” оно не работает как надо?

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