Датчики климата (температуры, влажности), Часть 2: WirenBoard WB-MSW, Sentera ODTHM

Проекту исполнилось 15 лет! Поддержать проект материально, проспонсировать проекты Автора или сделать ему подарок можно на этой странице: "Донаты и Спонсорство, Список Желаний".

Число просмотров: 11 403 

Датчики климата (температуры, влажности) с Modbus для помещений и улицы (WirenBoard, ОВЕН, SENTERA)

Датчики климата (температуры, влажности) с Modbus для помещений и улицы (WirenBoard, ОВЕН, SENTERA)

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

В этом посте я расскажу про длинную эпопею с датчиками климата WirenBoard WB-MSW v3 и v4, а также про уличный датчик температуры, влажности и освещённости от SENTERA. Эти датчики использовались в сложном проекте Mail.Ru-1, про который я наконец-то рассказал. В процессе разделения поста на две части пост дополнен новыми фотками.

За сами фотки приношу извинения: некоторые будут тёмные, а некоторые — не в фокусе. К сожалению, я не смогу переснять некоторые из них, так как некоторые датчики уже уехали на объекты, а демо-стенд стены ушёл на мусорку!

На обзоре у меня сегодня два датчика, которые чаще всего удобнее применять в наших бытовых проектах (квартирах, коттеджах):

  • SENTERA ODTHM: Латвийский уличный датчик (так же как и ОВЕН ПВТ-110 может ставиться на улицу под непогоду и ливни со снегами), который меряет температуру, влажность и освещённость. Датчик имеет небольшой корпус, который удобен в монтаже и герметичен. Измерение освещённости на улице — это очень большой плюс, так как одним датчиком можно получить сразу три параметра, а уровень освещённости применять в работе проектов на ПЛК для определения дня или ночи и изменения логики работы освещения или других систем, которыми ПЛК управляет.
    Из минусов — навороченная таблица регистров (регистры идут не по порядку), подключение RS-485 и питания через разъём RJ-45 и полное отсутствие каких-нибудь светодиодов для индикации работы датчика.
  • WirenBoard WB-MSW v3/v4: Разрекламированная всеми, кем попало, навороченная версия датчика, который меряет: температуру, влажность, концентрацию углекислого газа CO2, уровень вредных частиц VOC (на вино хорошо реагирует, аж зашкаливает, ахахаха), уровень шума, уровень движения (относительная величина в виде «много движения», «мало движения»), уровень освещённости и может управлять встроенной пищалкой, двумя встроенными светодиодами (красным и зелёным) и до кучи записывать и воспроизводить команды от инфракрасных пультов.
    Всё это выглядит круто, но на практике оказывается не таким гладко работающим. Собственно, этот датчик и тормозил появление поста, так как я теплой и светлой нелюбовью обожаю WirenBoard и их решения вида «Шо смогла, то и сделала».
    До 2022 года датчик не имел никаких поверок и документов, где сказаны погрешности измерений, а Modbus-регистры в карте шли НЕ ПО ПОРЯДКУ, а с пропусками (например 0, 1, …, 3, 4, 5, 6…8, 9, 10, 11). Из-за этого прочитать их одним групповым запросом не получается (датчик возвращает ILLEGAL_DATA_ADDRESS, что означает попытку чтения несуществующего адреса регистра), и при большом количестве датчиков (мы в проекте Mail.Ru-1 взяли 8 штук) вся сеть RS-485 тормозит так, что задержка при определении движения от датчика равняется 5,5 секунд!!
    В 2022 году WirenBoard ОБЕЩАЕТ поправить карту регистров так, чтобы можно было читать регистры с пропусками, а так же сделать функцию ремаппинга карты так, чтобы мы могли сами составить последовательность нужных нам регистров в нужном формате. Так же датчик WB-MSW v3 проходит сертификацию и будет внесён в РосРеестр средств измерений.
    Подключение этого датчика тоже оставляет желать лучшего. Если вы не используете обычную витую пару или верёвкообразные кабели типа КСПВ, а как грамотный проектировщик закладываете правильные, специально предзназначенные, кабели для RS-485 (напоминаю пост про них), то при разделке и подключении этих кабелей к этому датчику вы будете выть белугой и плакать кровавыми слезами, так как места для разделки и подключения кабелей шлейфом в датчике НЕТ. Если не ставить за ним обычный подрозетник. Всё это я покажу на фотках в посте.
    Wiren постепенно оттаивают после отмораживания и постепенно переписывают прошивку. Удалось добиться того, что они переделали карту регистров для работы с ИК-командами, так как до переделки было 80 регистров на подачу команды «Записать команду номер такую-то», 80 регистров на подачу команды «Воспроизвести команду номер такую-то» и 80 регистров на подачу команды «Удалить команду номер такую-то» О_о. Сейчас они сделали (специально для тех, кто пишет на CodeSys, где опрос регистров идёт циклично) всего два регистра: «Номер банка ИК-команды» и «Команда» (что сделать: ничего, записать, воспроизвести, удалить). Теперь я ругаюсь на тему того, чтобы можно было читать несуществующие регистры (исправление будет)…

Эти датчики, как и датчики из первой части поста, имеют интерфейс RS-485 с протоколом Modbus и малую потребляемую мощность (1-4 Вт), поэтому идея прокладки общей магистрали Modbus по квартире или дому специальным кабелем (пост про такие кабели), в котором одна пара жил используется для питания, а вторая для RS-485, конечно же, справедлива и здесь.

1. Датчик температуры, влажности и освещённости SENTERA ODTHM (для улицы).

Уличный датчик температуры, влажности и освещённости SENTERA ODTHM

Уличный датчик температуры, влажности и освещённости SENTERA ODTHM

Этот датчик интересен и не однозначен. Мы купили его с Mail.Ru-1 для его проекта, чтобы определять погоду на улице и заодно (так вышло) ещё и получать данные об освещённости. Эти датчики производит латвийская компания SENTERA (https://senteracontrols.ru/product/odthm/) и я сейчас не знаю, доступны ли они после санкций или нет (вроде как возят через Беларусь).

Вот какие особенности имеет датчик ODTHM:

  • Уличное исполнение, как у ПВТ-110 (ПВТ-100): степень пылевлагозащиты IP65, сенсор защищён так, чтобы на него не попадала вода. Можно ставить на улице;
  • Измеряет температуру, влажность, уровень освещённости. Рассчитывает температуру точки росы. По параметрам — идеальный уличный датчик;
  • На выходе — интерфейс RS-485 с протоколом Modbus RTU (регистры идут не по порядку). Правда подкачало подключение: через разъём RJ-45, очень неудобное;
  • Нет никакой индикации работы датчика (светодиода). Подключать и налаживать очень неудобно!

Вот… вот в плане измерения освещённости и расчёта точки росы этот датчик рвёт ПВТ-110 как грелку! Чёрт, вот если бы в ПВТ-110 такое добавили — ему бы цены не было!

Поставляется датчик в неприметной коробочке с названием и кривой наклеечкой с серийным номером:

Коробка с датчиком SENTERA ODTHM

Коробка с датчиком SENTERA ODTHM

А вот упакован датчик внутри очень круто: есть паспорт, инструкция, перемычка для сброса настроек.

А сам сенсор (зонд) проложен мягкими пенопластовыми кругляшами, чтобы не сломался.

Упаковка датчика SENTERA ODTHM (видны поролоновые штучки, защищающие от повреждения датчика)

Упаковка датчика SENTERA ODTHM (видны поролоновые штучки, защищающие от повреждения датчика)

На задней стенке корпуса датчика имеется ещё одна наклейка с моделью датчика и всего два отверстия для крепления (они так же, как и у ПВТ-110, не влияют на пылевлагозащиту датчика):

Задняя часть корпуса датчика ODTHM (видна наклейка с параметрами датчика и точки крепления на стену)

Задняя часть корпуса датчика ODTHM (видна наклейка с параметрами датчика и точки крепления на стену)

В плане крепления датчик ПВТ-110 из первой части поста рвёт всех: его-то можно на четыре отверстия прикрепить!

Зонд датчика несъёмный и расположен тоже в нижней его части. Мембрана зонда напоминает распылитель воздуха для аквариумов: она, видимо, имеет мелкие поры, но при этом твёрдая как камень. Ввод кабеля также находится снизу датчика, что является явным плюсом: вода с кабеля будет стекать вниз и не попадать на сальник PG.

Нижняя часть датчика ODTHM с сальником для ввода кабеля и защитной пористой частью для зонда

Нижняя часть датчика ODTHM с сальником для ввода кабеля и защитной пористой частью для зонда

На передней части датчика находится окошко для сенсора освещённости:

Сенсор датчика ODTHM для измерения освещённости

Сенсор датчика ODTHM для измерения освещённости

Крышка датчика крепится на четырёх винтах так же под шлиц PZ2, но в них отлично входит и PH2 (самый распространённый, что облегчает монтаж датчика):

Открываем корпус датчика ODTHM (выкручиваем 4 винта)

Открываем корпус датчика ODTHM (выкручиваем 4 винта)

Винты на крышке тоже невыпадающие, и это тоже плюс к удобству монтажа.

Винты на крышке датчика ODTHM невыпадающие (это отлично)

Винты на крышке датчика ODTHM невыпадающие (это отлично)

А вот технически конструкция датчика сделана хрен как. Посмотрите на его внутренний мир, а потом я выкачу свои придирки:

Внутренняя плата датчика SENTERA ODTHM (подключение к датчику по RJ-45)

Внутренняя плата датчика SENTERA ODTHM (подключение к датчику по RJ-45)

  • Не понятно, есть ли развязка по RS-485 (ОВЕН говорит что это редкость для датчиков такого типа). Вроде как слева ребром стоит плата с какими-то большими по размерам компонентами, которые могут напоминать DC-DC преобразователь, который нужен для таких развязок, а могут быть просто блоком питания датчика;
  • Защита (мембрана) зонда вкручена в корпус датчика просто так, без защитных прокладок (видна чёрная резьба в центре фотки). Это даёт влагозащиту в IP65 или нет? Может быть, производитель считает то, что раз мембрана расположена снизу датчика, то вода по ней не будет затекать в верх корпуса?
  • Сама плата сенсора температуры и влажности держится на штырьках, которые впаяны в плату и являются электрическими контактами. Это выглядит хлипенько. Не потеряет ли плата контакт от времени и окисления этих штырей? То же относится к датчику освещённости: при монтаже датчика его легко сдёрнуть с штырьков и потерять или сломать;
  • У датчика нет НИКАКОЙ обратной связи: ни единого светодиода, хотя разъём для RJ-45 имеет два встроенных светодиода, но они не мигают и ничего не показывают;
  • Да! Все подключения к датчику надо делать через разъём RJ-45. Даже если вы хотите быстренько тестануть его на столе. Никакой схемы и назначения контактов на крышке или печатной плате датчика нет (это вам не ОВЕН), обратной связи через светодиод тоже нет — поэтому узнать о том, что вы подключили всё верно и ничего не спалили, можно только при правильном опросе по Modbus. Ха-ха! А про то, чтобы соединить несколько датчиков шлейфом, вообще можно забыть.

Какой чёрт выдумал такое подключение — я не знаю. Иногда у китайцев я видел, как они в некоторых шлюзах ArtNet<>DMX (я чуть-чуть работал с ними и рассказал про это в своём посте) выводили по две-три линии DMX на один разъём RJ-45… но вот чтобы выводить RS-485 и питание — это нафига?!

Ведь это не удобно: если обжать разъём на кабель, то его уже не получится снять (такие разъёмы одноразовые): а значит не получится заменить датчик (или снять его в ремонт), так как разъём надо будет срезать.

Вот какая распиновка разъёма указана в инструкции:

Назначение контактов разъёма RJ-45 для подключения датчика ODTHM (Питание, RS-485)

Назначение контактов разъёма RJ-45 для подключения датчика ODTHM (Питание, RS-485)

И она меня запутала, так как разъём показан со стороны, непривычной для тех, кто его обжимает: обычно стандартная разводка TIA-568B, которая используется в России, запоминается с вида на сторону контактов разъёма: Бело-Оранжевый, Оранжевый, Бело-Зелёный, Синий и так далее…

Я тупил, тупил (датчик спалить страшно), и нашёл картинку с обозначением нумерации контактов разъёма RJ-45, которая (о, удивительное совпадение, хаха) как раз и начинается с того места, куда мы подключаем Бело-Оранжевый провод (контакт 1):

Стандартная нумерация контактов разъёма RJ-45 (Ethernet)

Стандартная нумерация контактов разъёма RJ-45 (Ethernet)

Короче, если забить на инструкцию, то получается вот что: контакты разъёма используются попарно (можно выпендриться и обжать два кабеля шлейфом в один разъём О_о) и имеют такое назначение:

  • 1-2: Плюс питания
  • 3-4: RS-485, A
  • 5-6: RS-485, B
  • 7-8: Минус питания

Идиотизм!!

В нашем проекте датчик будет подключаться нормальным кабелем RS-485, который имеет жёсткие жилы (моножилы). Чтобы не возиться с обжимом этого кабеля в разъём RJ-45, я заранее заготовил такой вот шлейфик, обжав в разъём витуху:

Хвост из разъёма RJ-45 и витой пары Patch для подключения датчика ODTHM

Хвост из разъёма RJ-45 и витой пары Patch для подключения датчика ODTHM

Дальше я планирую соединить этот шлейфик с кабелем RS-485 через клеммы WAGO или ScotchLock (напоминаю древний пост про них).

Пока же я обжал свою «любимую» временную телефонную лапшу. Тут, кстати, как раз видны два светодиода на разъёме RJ-45, которые НИКАК не задействованы. Пока датчик не начёшь опрашивать через ПЛК или Modbus Poll, ты даже не узнаешь о том, что на него питание подано! УЖАСНО!

Пробное подключение датчика ODTHM при помощи телефонной лапши

Пробное подключение датчика ODTHM при помощи телефонной лапши

Так как никакой обратной связи нет, то приведу ещё один скриншот из инструкции на датчик, где цифрой «1» показан блок штырьков, на которую можно установить комплектную перемычку:

Назначение перемычки для сброса настроек датчика ODTHM

Назначение перемычки для сброса настроек датчика ODTHM

Если установить перемычку на контакты «1» и «2» (и как их считать, если на датчике конаткты расположены вертикально, а в инструкции горизонтально, а на плате еле-еле видна цифра «1»), то происходит сброс параметров связи на заводские.

А дальше берём Modbus Poll и меняем настройки датчика на нужные мне (адрес и скорость), заодно проверяя то, что датчик отдаёт свои параметры:

Опрос регистров датчика ODTHM по Modbus

Опрос регистров датчика ODTHM по Modbus

Если заглянуть в карту регистров этого датчика (тут уж пожалуйста сами найдите и прочитайте полную документацию на датчик), то можно увидеть что она имеет навороты: в датчик можно внести пороговые значения для температуры, влажности, точки росы и освещённости, и при помощи некоторых регистров он может отдавать не абсолютные значения, а флаги, которые можно интерпретировать как «Мало», «Нормально», «Много». Задумка интересная, но я не знаю, куда её применить: ту же логику (только с быстро настраиваемыми через интерфейс или панель оператора) порогами можно на ПЛК/ПР сделать.

А теперь я покажу то, как я устанавливал этот датчик на стене дома заказчика (моего горячо «любимого» Mail.Ru-1).

Оказалось, что штатный сальник этого датчика еле-еле принимает кабель для RS-485 Сегмент КОПСЭнг(А) (напоминаю пост про такие кабели разных производителей). А что будет, если в датчик понадобится завести кабель другого производителя, который имеет ещё бОльший диаметр? Скорее всего придётся рассверливать и менять сальник на корпусе датчика!

Пример монтажа датчика SENTERA ODTHM на улице: корпус закреплён, кабель выведен в датчик

Пример монтажа датчика SENTERA ODTHM на улице: корпус закреплён, кабель выведен в датчик

Кстати, для того, чтобы провести кабель по улице до датчика, я использовал индустриальную гофру от ДКС (артикул PA601013F2, которая имеет малый диаметр в 13 мм и высокую прочность).

Потом оказалось, что кабель, заведённый в корпус датчика, не даёт вставить разъём RJ-45 в его гнездо! Изоляцию кабеля пришлось срезать под корень (а я хотел оставить её внутри корпуса), загибать жилы кабеля, а потом уже вставлять разъём.

Пример монтажа датчика SENTERA ODTHM на улице: неудобное соединение кабеля и шлейфа RJ-45

Пример монтажа датчика SENTERA ODTHM на улице: неудобное соединение кабеля и шлейфа RJ-45

Соединение жил моего шлейфа и кабеля я сделал на разъёмных клеммах DegSon моделей 2EDGKR-5.08-04P/2EDGK-5.08-04P, про которые рассказывал в этом посте. Они очень удобны, и мне понравились.

После всех мытарств датчик сразу заработал. Но, как я уже говорил, я узнал это только на диагностической странице ПЛК, так как на самом датчике нет никакой индикации.

Пример монтажа датчика SENTERA ODTHM на улице: корпус закрыт, датчик в работе

Пример монтажа датчика SENTERA ODTHM на улице: корпус закрыт, датчик в работе

2. Датчик температуры, влажности, освещённости, CO2, VOC с расширенным управлением WirenBoard WB-MSW v3 (для помещений).

Датчик измерения параметров климата WirenBoard WB-MSW v3

Датчик измерения параметров климата WirenBoard WB-MSW v3

После выхода этого поста ребята из WirenBoard связались со мной и дали комментарии по информации, которую я тут изложил. Она в некоторых случаях оказалась не совсем верной, так как WirenBoard учли опыт наших разговоров в 2020 году, и за эти два года сделали много изменений и заделов на будуще. Исправления и поправки будут выделены жирным.

А теперь — самый распиаренный и самый неоднозначный датчик: WirenBoard WB-MSW v3, который нафарширован кучей сенсоров и возможностей, но имеет адски кривую карту регистров и дофига заморочек, но при этом годится для использования в квартирных проектах, если вам не нужна точность измерений (как на ПВТ-10), но нужна куча данных! Часть истории о том, как ребята из WirenBoard приезжали ко мне, и мы разбирались с тем, как этот датчик опрашивается ПЛК со средой CodeSys, рассказана в посте новостей, так как я тогда не мог ждать новой прошивки и решил хоть немного, но погрузить вас в тему. Часть фоток я буду использовать оттуда, а вот ссылка на тему на форуме WirenBoard, где я ругался про их датчик.

Я пылаю горячей скептической нелюбовью к WirenBoard, но хрен вам: попкорном запасаться не надо, так как я не ругаю производителей просто так, а придираюсь за дело и по делу. Хайпа и криков «всё гавно» не будет! Будет праведная пылающая ненависть на тему «Ну почему?! Почему задумка так хороша, а над реализацией вы сразу наперёд не подумали?!».

Датчик WirenBoard WB-MSW v3 — видимо, третье поколение таких датчиков (раз в его названии фигурирует «v3»). Задумка датчика — очень крутая, так как его возможности огромны (они зависят от конфигурации датчика):

  • Измерение температуры и влажности с разными точностями (одни регистры отдают с точностью 0,1, а другие — с 0,01);
  • Измерение уровня освещённости;
  • Измерение уровня шума в dB;
  • Измерение концентрации углекислого газа CO2 и вредных частиц VOC;
  • Измерение уровня (и наличия) движения;
  • Возможность мигать встроенными красным и зелёным светодиодами, пищать пищалкой;
  • Возможность записывать команды с инфракрасных (ИК) пультов и воспроизводить их (в новой версии прошивки до 30 команд, в предыдущей — до 80 команд): это позволяет имитировать нажатие кнопок на пультах кондиционеров, бытовой техники и других устройств.

Вы можете заказать датчик в полной версии или в обрезанной (без контроля CO2/VOC, например), что будет дешевле. В теории потом нужные сенсоры можно доустановить в датчик, но установка некоторых сенсоров потребует его калибровки.

Мой заказчик купил парочку датчиков с полным набором сенсоров на Avito. Они почему-то завышали показания температуры. Ребята из WirenBoard проверили их по серийному номеру и выяснили, что продавались эти датчики без сенсора CO2. Те, кто добавил этот сенсор и продал датчик на Avito, не включили в датчике режим коррекции по температуре (сенсор CO2 нагревается, искажая показания сенсора температуры), поэтому показания и плавали. Будьте осторожны, покупая датчики с рук!

Когда ко мне приезжали ребята из WirenBoard, они привезли с собой специальный поверенный термометр и образцы влажности. Вот тогда-то и выяснилось, что в моих датчиках не включены коэффициенты калибровки, и поэтому датчики завышали показания температуры.

Сравнение датчиков ОВЕН ПВТ-10 и WirenBoard WB-MSW v3 на тестовом стенде

Сравнение датчиков ОВЕН ПВТ-10 и WirenBoard WB-MSW v3 на тестовом стенде

Вообще с самой поездкой была хрень (некрасиво получилось). Позвонили они в пятницу, и получился такой диалог:

— Это WirenBoard. Ну, как? Наше предложение на форуме про приехать в силе!
— О, ура! Так я же раза три писал, что приезжайте. Я вам чаю сделаю! Когда вам удобно? Хоть щас!
— Давай в понедельник к 13ти часам? Мы в 10 утра позвоним и скажем, что едем и всё в силе.
— Принято! Как вам мой адрес переслать? У меня есть PDF для заказчиков с картой.
— Да нет, диктуй так, мы запишем.

Понедельник. 10 утра — тишина. 11 утра — тишина. 12 утра — тишина. Я плюнул нахер и занялся сборкой щита. И вот в районе 13ти звонок: «Это WirenBoard, мы задерживаемся на часа полтора». Угу, ну пусть. Дальше опять звонок:

— Это WirenBoard. Мы минут через 20 будем. А какой у тебя там адрес?
— Эээ… што? Так я же вам в пятницу диктовал, вы же сказали что не надо вам PDF слать, и записали его…
— Ну… в общем, мы бумажку потеряли.

Блин! Ну вот как так? Мне сразу вспомнилось «Не люблю я таких людей. Не пунктуальных» из фильма «Афоня», хоть и не совсем в тему.

Минусы этих датчиков — в таблице регистров и физическом подключении:

  • Никаких сертификатов и поверок на 2020 год НЕ БЫЛО.. Это вам не ОВЕН, а просто бытовой датчик. Его главное достоинство — стоимость (для своих возможностей он очень недорогой). Однако сейчас, в 2022 году, датчики WirenBoard прошли метрологические испытания. Скоро документы по датчикам попадут в РосРеестр, и датчик будет иметь все необходимые документы и считаться средством измерений. Это ОЧЕНЬ большой шаг! Молодцы!
  • Самый главный минус WirenBoard — это документация к датчику. Так как проект WirenBoard начинался как проект гиков для гиков (по другому я стиль программирования «напишите linux-командную строку вида modbus -poll -adr -9600 -r01 -12» обозвать не могу, я избалован и привык к сервису, который дают нормальные среды разработки, включая установку точек останова и отладку онлайн).
  • Чтобы было веселее, каждый датчик имеет разный адрес, установленный на заводе. ДА! Почему-то угарный WirenBoard решил что пользователи слишком тупые, и не смогут сами настроить адрес датчика, а заводские случайно выбранные адреса в одной партии датчиков не совпадут.
    Я не знаю, как на это реагировать: я привык к тому, что у любого устройства RS-485 есть СТАНДАРТНЫЙ адрес (и параметры связи) по умолчанию, которые указаны в инструкции, а также есть режим сброса к заводским настройкам. А тут — хрень какая-то: вместо сброса к заводским настройкам надо выполнять поиск датчика в виде перебора всех скоростей обмена и всех возможных адресов и ждать, когда он ответит. Короче, если хочется устроить кому-то западло, то можно поменять местами платы от нескольких датчиков друг с другом и посмотреть на то, как долго и упорно пользователь будет пытаться обратиться к этим датчикам по их адресам, нанесённым на корпусе. Вместо сброса настроек на заводские и установки своего адреса =)
  • Документации в печатном виде — нет. Документации в PDF, содержащем информацию про подключение, настройку, использование и карту регистров датчика — нет. Вся документация разбросана онлайн на сайте WirenBoard в формате WIKI и не собрана в едином месте: одна страница — про описание датчика, другая — про настройку параметров связи Modbus (так как они общие для всех устройств), третья — про карту регистров, четвёртая — про ИК-команды. И вот ты в первый раз, привыкший к инструкциям от ОВЕНа, RazumDom и других производителей (той же SENTERA, про которую мы только что говорили), открываешь «ЭТО» и охуеваешь от кучи разбросанной докумы. А если инета нет? А если мне хочется внести докуму к датчику во вложения CS CRM (пост про номенклатуру), чтобы она была под рукой? Фиг!
  • Второй УЖАСНЫЙ минус датчика — это ОЧЕНЬ малое место для подключения кабелей питания и RS-485. На фотках в посте вы это увидите подробно с примером-имитацией стены. Отверстие для ввода кабелей в датчик находится рядом с клеммником для подключения. Места для разделки кабеля, спайки экрана и соединения кабелей шлейфом — нет! При этом датчик можно установить на стандартный подрозетник, вмурованный в стену. Но про это в инструкции НИГДЕ не говорится, да и не поможет это: запас кабеля может остаться в подрозетнике, но заводить-то его всё равно надо через то же небольшое отверстие!!!
  • Ну а третье — самое вкусное! Это уёбищная карта регистров!! Да, для сохранения интересности и классной кульминации поста мне хотелось бы, чтобы вы узнали про это позже, но я уж сразу проматерю и поясню, так как пост про Modbus я буду писать ещё долго (и уж там-то всё подробно расскажу).
    Обновление (подробнее будет рассказано дальше в посте): сейчас WirenBoard работает над тем, что я давно хочу — чтением несуществующих регистров и ремаппингом регистров так, чтобы можно было самому составить карту регистров как хочешь и читать её одним запросом. Молодцы!
    Суть придирки и ликбеза по Modbus в том, что каждый запрос на получение данных с устройства (датчика в нашем случае) требует накладные расходы, так как имеет примерно такую структуру: «Адрес», «Команда», «Начало», «Сколько» и CRC (контроль целостности посылки). Запрос может выглядеть, на словах, так: «Адрес 40, Прочитать регистры, начиная с 0 в количестве 20 штук [CRC]». Всё это превращается в байты и отправляется по линии связи. Но наша линия связи в RS-485 тормозная (так как мы снижаем скорость, когда растёт её длина), а ПЛК может в один момент времени общаться только с одним устройством, ожидая от него ответа в течение определённого времени (таймаута). Чем больше запросов идёт к устройству, тем больше тормозит линия.
    Давайте уж рассчитаем длину запроса в байтах: (Адрес = 1 байт) + (Команда = 1 байт) + (Начало = 2 байта) + (Сколько = 2 байта) + (CRC = 2 байта) = 8 байт. Если регистры в карте датчика идут подряд (или датчик позволяет читать несуществующие регистры), то для того чтобы получить все его данные, датчику надо послать ОДИН такой запрос (8 байт). А если у датчика в карте регистров пропуски, и он не позволяет читать эти пропуски как пустые значения — то запросов может быть больше — в первых примерах у меня было их 6 штук. 6 x 8 = СОРОК_СУКА_ВОСЕМЬ байт вместо ВОСЬМИ!
    Всё это приводит к тормозам сети RS-485 и увеличивает время отклика датчиков. А ведь нам обещают определение движения в помещении. И вот что? Я в помещение уже зашёл (и у меня должен отключиться кварц или вентиляция), а информация о движении от пятого по счёту датчика до ПЛК ещё не дошла, потому что ПЛК опрашивает ещё только 4ый регистр третьего по счёту датчика. И есть риск того, что когда ПЛК доберётся до опроса нашего пятого датчика, тот уже скажет что движенеие кончилось. Вот такие скрытые косяки несёт карта регистров с пропусками. Далее по посту мы всё подсчитаем в байтах и секундах, и сделаем выводы. Плохие.
  • (Актуально на 2020-2021 год) А самое НЕПРИЯТНОЕ в том, что WirenBoard не совсем понимает, ПОЧЕМУ это является косяком и не торопится исправлять эти кривые моменты. Нет, даже не так. Самое неприятное — это то, что они заранее не подумали о косяках, а теперь наступили на грабли: да, они могут сделать чтение несуществующих регистров, но они не знают, какое число туда отдавать, так как 0x0000 и 0xFFFF у них уже зарезервированы под ошибки «Сенсор не подключен». Ну не глупость, а?! Я из-за этого и называю их самобытными: что-то сделали, как-то работает — и ладно.
    Обновление: Разобрались, всё будет читаться с одним специальным значением 0xFFFE!

WirenBoard плотно работает со СберБанком, так что их датчики вы можете увидеть в отделениях и около банкоматов:

Датчик WirenBoard WB-MSW v3 в одном из отделений сбербанка

Датчик WirenBoard WB-MSW v3 в одном из отделений сбербанка

Так как пост готовился долго (я ждал обновления прошивки датчиков, в которых можно будет читать регистры при помощи группового запроса), то за это время случился ковид и мировой кризис нехватки полупроводников. Не путайте нехватку полупроводников с санкциями 2022 года. Нехватка полупроводников буквально означает то, что если раньше какая-нибудь простейшая микросхема стоила 0,5$, то теперь она стоит 40$, заказать её можно партией в 10 000 штук с ожиданием в полгода.

Многие производители электроники вынуждены искать аналоги самого распространённого микропроцессора STM32: год назад все (включая WirenBoard и ОВЕН) начали переходить с него на его аналог GigaDevice, но сейчас и с поставками GigaDevice начались проблемы, и некоторые производители вынуждены переходить на другие китайские аналоги. А это влечёт за собой переразводку печатных плат, переписывание и отладку прошивки и новое тестирование (и сертификацию) устройства в сборе. При этом эти аналоги не дают полной совместимости, а чаще всего дают неизвестные глюки. В общем, полная задница (и не только у WirenBoard).

Конкретно у WirenBoard сейчас на 2022 год создан запас GigaDevice на 2 года вперёд, что очень хорошо. За это время ситуация с микросхемами может быть хоть как-то стабилизируется, и проблема может уйти (кому интересно — поищите про производителя ASML и заводы TSMC; сейчас по всему миру строятся новые заводы для производства микросхем, и в это вкладываются очень большие деньги).

На фотографии ниже показаны два корпуса датчиков: левый — 2020 года выпуска, правый — 2021 года (он стал более бежевым). Хорошо, что там с Майлихой-1 повезло и два датчика в старом корпусе пойдут в коридор-прихожую, а другие — в комнаты: так будет соблюдаться хоть какая-то симметрия в цветах.

Сравнение корпусов датчиков WirenBoard WB-MSW v3 раных годов выпуска (слева 2019, справа 2021)

Сравнение корпусов датчиков WirenBoard WB-MSW v3 раных годов выпуска (слева 2019, справа 2021)

Корпус у этих датчиков тоже можно красить, как и у ПВТ-10. Для покраски надо открутить линзу инфракрасного сенсора (она крепится с обратной стороны датчика на двух винтах) — её красить нельзя — и снять плату с электроникой (она крепится на двух защёлках).

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

Чертёж разметки отверстий крепления в комплекте с датчиком WB-MSW v3

Чертёж разметки отверстий крепления в комплекте с датчиком WB-MSW v3

Я хотел сравнить датчики WB-MSW v3 с датчиком ОВЕН ПВТ-10. По габаритным размерам датчик от WirenBoard больше, чем ПВТшка:

Сравнение размеров датчика WB-MSW v3 с датчиком ОВЕН ПВТ-10

Сравнение размеров датчика WB-MSW v3 с датчиком ОВЕН ПВТ-10

А по глубине (толщине) они примерно соизмеримы (если не забыть подсчитать толщину линзы инфракрасного сенсора и выпуклость корпуса датчика).

Сравнение размеров датчика WB-MSW v3 с датчиком ОВЕН ПВТ-10 (сбоку)

Сравнение размеров датчика WB-MSW v3 с датчиком ОВЕН ПВТ-10 (сбоку)

Сзади датчик, как и все изделия WirenBoard, пестреет красочными наклейками и рисунками. Иногда я шучу о том, что WirenBoard умеет красиво делать наклейки, и это их главный приоритет. Тут всё обклеено «QC», «FC» — прям как электроника на бывшем Черкизоне! =)

Задние части датчиков WirenBord WB-MSW v3, где указаны адреса Modbus и то, что измеряет датчик

Задние части датчиков WirenBord WB-MSW v3, где указаны адреса Modbus и то, что измеряет датчик

Основная задача наклейки сзади датчика — показать то, какие компоненты (сенсоры) установлены внутри: упаковочная коробка задумана так, что датчик лежит этой наклейкой наружу, и отмеченные компоненты видны. Это Wiren хорошо сделали: молодцы!

Сзади датчика находится зелёный светодиод, который светится при подаче питания на датчик и мигает при получении каждого Modbus-запроса. В старых моделях датчика светодиод имел большую яркость, а потом её уменьшили. Моё мнение тут двоякое: светодиода особо не видно, если датчик закреплён на стене (на Майлихе мы это ещё проверим), но для обратной связи он нужен и важен. Снова напоминаю идею с регистром, который может управлять светодиодом (включать его работу или отключать его; эта идея в планах реализации). Обновлено: WirenBoard взяли такую идею на вооружение и будут доделывать прошивку с возможностью отключения светодиода на датчике.

Так же на задней стороне датчика указаны версия прошивки и заводской адрес Modbus по умолчанию. Кстати, заводские параметры связи здесь отличаются от стандартных. Обычно многие производители настраивают свои устройства на 9 600, 8, N, 1 (один стоп-бит), а WirenBoard решили настроить всё на 9 600, 8, N, 2 (два стоп-бита). В щите в Адлер, который засветился в обзоре серии шкафов ABB ComfortLine CA, я пропустил этот момент, и заказчик не смог сам перенастроить датчик на 1 стоп-бит, и поэтому мне надо будет туда поехать. Ну не скотство?!

В 2022 году, с новой прошивкой датчиков, этот неприятный косяк исправлен. Оказывается, он делался для совместимости датчиков с датчиками от RazumDom О_о (напоминаю пост про них). Новая прошивка умеет понимать запросы как с одним, так и с двумя стоп-битами и корректно отвечать на них. Чёрт, вот мне повезло попасть на сырой продукт и намучиться с ним!

Касательно того, что каждый датчик имеет свой уникальный заводской адрес (указанный на наклеечке сзади рядом с версией прошивки) и не имеет механизма сброса настроек на заводские я уже ругался. Я считаю это косяком и недоработкой. Вот какого же чёрта: у ОВЕНа даже совсем «закрытые» (без дисплея, без USB-конфигуратора) устройства типа нормирующих преобразователей (НПТ, круглые «таблетки», которые устанавливаются в головку измерительного датчика, чтобы привести его выход к 0..10V/4..20 мА или RS-485 — позже я расскажу про датчик температуры с НПТ) — и те имеют отдельный вывод для сброса на заводские настройки! А тут, в сложном датчике, НЕТ!

При этом, как я уже говорил, WirenBoard предлагает воспользоваться их контроллером и сценарием (в виде последовательности Linux-команд), который будет последовательно перебирать все возможные параметры скорости и адреса, если наклеечка будет повреждена или вы забыли то, на какой адрес был настроен датчик. Ну нельзя так! НЕЛЬЗЯ!!

WirenBoard услышали эти крики безысходности и поставили себе в планы сделать программу-конфигуратор их устройств. Это хорошо! Ура!

Моя злость и ненависть к WirenBoard касается таких моментов: они считают их не значимыми и не важными, и при разговоре с ними упираешься в непробиваемую стену вида «Ну так датчики часто используют с нашим контроллером, а там для поиска датчика есть сценарий» или «Так это редкая операция, зачем под неё что-то мутить». Тьфу.

В посте про выставку «Электро-2022» я упоминал то, они хотят вообще отключить светодиоды на некоторых модулях IO (дескать, они мешают и светят в глаза; это оказалось ложью: сотрудник сообщил ошибочную информаию, а мне теперь надо посты поправлять) вместо того, чтобы дать пользователю возможность настройки: работают всегда, зажигаются на N секунд после изменения статуса, не работают. Даже ОВЕН начал хвататься за эту идею, а они хотят всё зарубить на корню.

Чтобы открыть корпус датчика, надо надавить на пластиковый упор в нижней части:

Как открыть корпус датчика WB-MSW v3: нажимаем на штырёк снизу корпуса

Как открыть корпус датчика WB-MSW v3: нажимаем на штырёк снизу корпуса

Надавливать надо посильнее. После этого можно откинуть крышку датчика:

Как открыть корпус датчика WB-MSW v3: открываем крышку датчика

Как открыть корпус датчика WB-MSW v3: открываем крышку датчика

Внутри у датчиков WB-MSW v3 находится одна общая плата, на которой на съёмных разъёмах типа PIN установлены сенсоры разных величин. Наличие этих сенсоров и определяет возможности и стоимость датчика.

На фото ниже показаны плата выпуска 2020 года (слева) и плата выпуска 2021 года (справа). Правая плата переработана на процессор GigaDevice и содержит чуть больше поясняющих надписей (появились назначения контактов разъёма питания и RS-485).

Сравнение плат датчиков WirenBoard WB-MSW v3 раных годов выпуска (слева 2019, справа 2021)

Сравнение плат датчиков WirenBoard WB-MSW v3 раных годов выпуска (слева 2019, справа 2021)

На плате датчика установлены такие сенсоры и элементы:

  • В центре на плате: PIR-детектор движения и приёмник ИК-команд;
  • В центре, левее: микрофон для определения уровня шума;
  • В центре на съёмной U-образной плате: красные и зелёные светодиоды, цепочка ИК-светодиодов для передачи записанной ИК-команды;
  • В левом верхнем углу: сенсор температуры и влажности;
  • В левом нижнем углу: сенсор вредных частиц VOC;
  • В правом нижнем углу: сенсор концентрации углекислого газа CO2;
  • В правом верхнем углу: пищалка для того, чтобы датчик мог пищать.

Вот как выглядит весь фарш сенсоров этого датчика в полной конфигурации:

Модульная конструкция датчиков WirenBoard WB-MSW v3: сенсоры устанавливаются по запросу

Модульная конструкция датчиков WirenBoard WB-MSW v3: сенсоры устанавливаются по запросу

Как я и говорю: ребята из Wiren — молодцы, так как сумели реализовать охрененную задумку, которая отлично подходит для квартир, коттеджей и офисов: ведь очень круто наблюдать не только за температурой и влажностью, а ещё и за освещённостью, шумом и концентрациями CO2/VOC. И светодиоды (красный и зелёный) и пищалка тут в тему.

Я сразу навскидку могу выдумать несколько сценариев для этого датчика (и реализовать их на ПЛК, конечно):

  • Мониторинг состояния офисных помещений днём по климату и концентрации CO2, чтобы у людей голова не болела: поддерживаем заданную влажность через регулирование климатической установки (фанкойлов, например), следим за уровнем CO2 и, если он превышает норму, мигаем красным светодиодом датчика, а если становится критическим — ещё и пищалкой пищим.
  • Более подробный мониторинг помещений с функцией простой охранной системы: отслеживаем освещённость и движение тогда, когда в помещении не должно быть людей.
  • Датчик VOC хорошо реагирует на спиртосодержащие продукты: можно отслеживать, когда офис решил ЗАБУХАТЬ! А датчик CO2 — на пожар или зажигание свечей.
  • Мой заказчик в Майлихе-1 попросил сделать ему напоминалку о ситуации, когда входая дверь в квартиру закрыта физически, но не заперта на замки (мы обвесили её кучей датчиков типа «сухой контакт» для определения этого — напоминаю пост про СК): если такая ситуация возникла и длится более заданного времени, то датчик WB-MSW v3 в прихожей будет мигать красным светодиодом и пищать. Удобно!

Мне показалось странным расположение датчика СО2 на плате:

Странное расположение сенсора CO2 на плате: выходное отверстие сенсора закрыто платой

Странное расположение сенсора CO2 на плате: выходное отверстие сенсора закрыто платой

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

Ну а теперь мы начинаем рвач датчика. И первым делом я начну с вопроса МОНТАЖА.

Все подключения датчика делаются через мелкий разъём с шагом выводов около 3 мм, для закручивания винтов которого нужна чуть ли не часовая отвёртка со шлицом шириной в 1 мм.

Разъём для подключения питания и RS-485: ОЧЕНЬ маленький!

Разъём для подключения питания и RS-485: ОЧЕНЬ маленький!

Из хорошего — это то, что сейчас производитель подписал назначения контактов разъёма на плате датчика, так как как только датчик будет прикручен к стене, надписи с задней стороны корпуса датчика уже не прочитаешь, а цветовая маркировка сделана не на всех разъёмах. И ещё хорошо то, что сами контакты расположены подряд: Плюс, Минус, A, B — без перепутывания как у SENTERA ODTHM, например.

Когда WirenBoard приезжали ко мне в 2020, чтобы посмотреть на то, как я опрашиваю их датчик при помощи ПЛК ОВЕН, то я проматерил ребят на тему их разъёма и подключения туда нормального (сертифицированного) кабеля RS-485. Ребята пообещали мне привезти образцы их кабеля, с которым (по их словам) у них нет проблем.

Знаете, что они мне привезли? Ужасную резиновую липкую ВИТУЮ ПАРУ завода «Паритет»!!!

Кабель, который WirenBoard предлагает использовать для RS-485: обычная витая пара, тьфу!

Кабель, который WirenBoard предлагает использовать для RS-485: обычная витая пара, тьфу!

Я рассмеялся и охуел. Спрашиваю: «А вот как так? Это ж витуха, какого чёрта! Там же должен быть экранированный кабель большего сечения, чтобы потерь сигнала и просадок напряжения питания не было». Они отвечают: «Ну… мы витуху закладываем по коробам в офисах, а там, где не заработает — уже используем специальный кабель, так как витуха дешевле».

Я ещё больше охуел и задал вопрос, который относится к моей сфере: «А как быть, если я заложу витуху (по вашему совету на сайте и по вашей практике, про которую вы рассказали) в стену под крутую и дорогую отделку (декоративную штукатурку, керамогранит, мозаику), а потом окажется что она не заработает и надо будет всё перекладывать?». Вот тут они почесали голову и сказали: «Да, ну, конечно, в таком случае надо сразу нормальный кабель закладывать».

Вот, сука!! ХОЧЕШЬ, хочешь их любить! Но не получается!

А это пример разделки кабеля RS-485 от того же «Паритет»‘а, который они мне показали:

Пример соединения шлейфа RS-485 от WirenBoard (привезли образец)

Пример соединения шлейфа RS-485 от WirenBoard (привезли образец)

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

Вот мой (экран, точнее его Drain-провод, спаян):

Кабель для RS-485 от завода СегментЭнерго, заведённый в разъём для подключения WB-MSW v3

Кабель для RS-485 от завода СегментЭнерго, заведённый в разъём для подключения WB-MSW v3

2.1. Неудобный монтаж датчиков WirenBoard WB-MSW на ровную стену.

А теперь начинается магия (а точнее, какие-то нездоровые угары под группу Dvar, которую разрабы этого датчика точно слушали: мы к этому ещё вернёмся, когда до таблицы регистров дойдём)!

Берём датчик, втыкаем туда разъём и видим, что места внутри датчика НЕТ! Провода улеглись впритирку, еле-еле и, самое главное, я им помогал за кадром, пропихивая их с задней стороны датчика, которая в реальности будет закреплена на стене и недоступна!

Разъём с кабелями RS-485 подключен в датчик WB-MSW v3: ОЧЕНЬ МАЛО МЕСТА!

Разъём с кабелями RS-485 подключен в датчик WB-MSW v3: ОЧЕНЬ МАЛО МЕСТА!

По удобству монтажа их датчик получает полное «FUUUU» и скатывается в самый низ моего рейтинга.

И не надо говорить мне, что если этот датчик установить на подрозетник в стене, то тогда запас жил кабелей останется в подрозетнике, и монтировать датчик будет удобно. Фигушки! А как жилы в разъём заводить и закручивать их туда?

У датчика WB-MSW v3 внутри оставлено очень мало места для подключения кабелей RS-485

У датчика WB-MSW v3 внутри оставлено очень мало места для подключения кабелей RS-485

В начале моего поста я показывал стенд-имитатор стены на датчике ПВТ-10. Но на самом деле он готовился как раз для WB-MSW v3!

Проверка установки датчика WB-MSW v3 на стену (макет): приготовили датчик и кабели

Проверка установки датчика WB-MSW v3 на стену (макет): приготовили датчик и кабели

Итак, чтобы не повредить плату ножичком, пока мы будем снимать внешнюю изоляцию с кабелей RS-485, вынимаем её из датчика, отгибая два пластиковых усика по краям корпуса:

Проверка установки датчика WB-MSW v3 на стену (макет): снимаем плату, чтобы она не мешала разделке кабелей

Проверка установки датчика WB-MSW v3 на стену (макет): снимаем плату, чтобы она не мешала разделке кабелей

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

Проверка установки датчика WB-MSW v3 на стену (макет): всё готово для монтажа

Проверка установки датчика WB-MSW v3 на стену (макет): всё готово для монтажа

Прикручиваем корпус датчика на воображаемую стену, выпуская через отверстие в корпусе кабели RS-485 (здесь идёт имитация шлейфа по квартире, так как такие датчики чаще всего и подключаются шлейфом):

Проверка установки датчика WB-MSW v3 на стену (макет): корпус датчика прикручен к макету стены

Проверка установки датчика WB-MSW v3 на стену (макет): корпус датчика прикручен к макету стены

Так как при настенном монтаже датчика в нём совсем не остаётся места для укладки кабелей, то срезаем их внешнюю изоляцию под корень (была бы тут плата — она давно бы вся поломалась нахер от ножа):

Проверка установки датчика WB-MSW v3 на стену (макет): разделываем кабели RS-485 (надо не забывать спаивать экран)

Проверка установки датчика WB-MSW v3 на стену (макет): разделываем кабели RS-485 (надо не забывать спаивать экран)

Распушаем жилы наших кабелей и где-то там в глубине спаиваем экран (интересно, много ли монтажников будет его спаивать в таких условиях; при этом целостность экрана важна для стабильной работы RS-485):

Проверка установки датчика WB-MSW v3 на стену (макет): устанавливаем плату датчика на место

Проверка установки датчика WB-MSW v3 на стену (макет): устанавливаем плату датчика на место

И наконец-то, матерясь и используя пинцет, заводим все жилы в разъём датчика.

Проверка установки датчика WB-MSW v3 на стену (макет): с большим трудом завели кабели в разъём

Проверка установки датчика WB-MSW v3 на стену (макет): с большим трудом завели кабели в разъём

Вспоминаем о том, что в датчиках со старой платой маркировка контактов разъёма находилась только на задней стенке корпуса, которая у нас уже прикручена к стене. И если мы забыли посмотреть на неё, то надо будет лезть в инет, чтобы почитать документацию по датчику.

О! WirenBoard же любит наклейки! Надо им подать мысль о том, чтобы печатали на шаблоне отверстий для датчика ещё и назначение контактов разъёма! Это было бы правда удобно, без сарказма и двоемыслия! А ещё можно печатать QR-код со ссылкой на документацию по датчику.

Наконец-то ценой матов и ювелирной точности датчик подключен.

Проверка установки датчика WB-MSW v3 на стену (макет): с большим трудом подключили датчик

Проверка установки датчика WB-MSW v3 на стену (макет): с большим трудом подключили датчик

…безвозвратно: если его понадобится отключить, открутив жилы кабелей от разъёма, то заново завести их в разъём будет трудно.

Короткие и непригодные к перемонтажу жилы кабелей RS-485, оставшиеся после снятия датчика WB-MSW v3 с макета стены

Короткие и непригодные к перемонтажу жилы кабелей RS-485, оставшиеся после снятия датчика WB-MSW v3 с макета стены

Короче, я НЕДОВОЛЕН удобством подключения! Показываю пример того, как мы монтировали эти датчики на квартире объекта Mail.Ru-1 на стены.

Кабель для датчика мы вывели ровно по его центру. Из-за этого еле-еле получилось разделать его жилы и засунуть их в разъём. Монтаж вышел успешным благодаря тому, что под верхней крышкой датчика есть свободное место для загиба проводов.

Пример настенной установки датчика WB-MSW v3 (виден подключенный шлейф Modbus)

Пример настенной установки датчика WB-MSW v3 (виден подключенный шлейф Modbus)

Вот так выглядит установленный датчик с закрытой крышкой.

Пример настенной установки датчика WB-MSW v3 (корпус закрыт)

Пример настенной установки датчика WB-MSW v3 (корпус закрыт)

А в его корпусе имеется отверстие для ввода кабелей. В версии WB-MSW v4 его уже убрали.

Пример настенной установки датчика WB-MSW v3 (видно отверстие сверху)

Пример настенной установки датчика WB-MSW v3 (видно отверстие сверху)

Претензий по смене настроек связи и адресу датчика у меня, кстати нет (фиг вам, а не срач с попкорном): WirenBoard стандартизировал эти регистры и их значения в своих продуктах. Правда, сделал и единую страницу в своих Вики для этого, поэтому до попадания на неё надо ещё кучу всего пролистать…

Таблица регистров для настройки параметров связи датчика WB-MSW v3

Таблица регистров для настройки параметров связи датчика WB-MSW v3

Такие способы настройки применяются многими производителями: подключил устройство по заводским настройкам (или сбросил его на них, чего нет у Wiren), задал нужные значения регистров, передёрнул питание — и всё работает. Хотя мне нравится концепт конфигураторов, который использует ОВЕН: подключил устройство, конфигуратор сам определил его тип и версию, выдал тебе все настройки списком, опросил нужные регистры для того, чтобы ты убедился что всё заработало, а ещё позволил тебе сохранить все настройки в файл, чтобы потом загрузить их и тиражировать эти настройки на однотипные устройства. Вот что стоит Wiren такое написать? Они же позиционируют себя как крупную компанию!..

Дополнение: конфигуратор появился в планах. Будет под Linux и Windows, и будет поддерживать настройку датчиков.

Вся информация, описанная ниже, скоро будет НЕ актуальна, так как WirenBoard активно работает над новой прошивкой (когда прошивка выйдет, я обновлю этот пост), которая позволит читать пропуски регистров и даже делать ремаппинг карты регистров под свои нужды. Данная информация будет являться примером того, как НЕ НАДО (НЕЛЬЗЯ) проектировать карты регистров для Modbus-устройств.

2.2. То, как не надо делать карту регистров Modbus (плохой пример).

А теперь начинается полный Dvar (ссыль на группу из Википедии)! Почему Dvar? Да потому что такие заковыристые карты регистров и заумные объяснения того, почему сделано именно так, можно составить только обслушавшись этой группы!!! Сами, бля, послушайте всякие Hor Hor, Nahaliroh, Ko Ki Ki, а потом что-нибудь из ранних альбомов типа Taai Liira, Iih Rah…

Что нам говорит стандарт Modbus о том, какие способы доступа к данным можно использовать?

  • Регистры (Registers) стоит использовать тогда, когда надо прочитать большой объём данных (битовую маску: 16 бит в одном регистре) или же эти данные могут иметь значения отличные от 0 и 1: температура, влажность, давление, скорость и так далее.
  • Флаги (Coils) стоит использовать тогда, когда надо управлять или считывать булевые переменные (Вкл-Выкл): включить-выключить выход, светодиод, пищалку и так далее.

Но наша больная жизнь (в том числе и испороченная китайскими товарами) плевать хотела на этот стандарт, и на практике большинство операций сводится только к регистрам и двум командам:

  • 0x03: Read Holding Registers — прочитать один или несколько регистров;
  • 0x10: Write Multiple Registers — записать несколько регистров. Там где «Multiple» — много, может быть и один регистр.

Некоторые версии ПЛК (например, основанные на CodeSys v 2.3 — ОВЕН ПЛК 110/ПЛК 160) даже вообще не поддерживают никакие команды, связанные с чтением и записью Coils.

Наши любимые WirenBoard решили полностью следовать стандарту Modbus (они это любят, пропуская ответы на вопрос о том, что будет если по GND всех устройств, соединённых без развязки RS-485 от частотника прилетит какая-нибудь ёбань, которая всё спалит к херам и что в промке делают развязку RS-485 и иногда без GND), поэтому они завели отдельно Флаги Coils для управления пищалкой и светодиодами датчика (а ещё служебными функциями типа перекалибровки датчика CO2):

Таблица регистров (Coils) для управления датчиком WB-MSW v3 (светодиоды, пищалка)

Таблица регистров (Coils) для управления датчиком WB-MSW v3 (светодиоды, пищалка)

Обратите внимание на то, что пищалка включается по Coil 0, а светодиоды — по Coil 10 и 11 (это ТРИ запроса, если ваш ПЛК не умеет посылать Write Muliple Coils и ДВА запроса, если он это умеет).

Вы уже начинаете чувствовать то, что у вас начало подгорать и под жопу надо срочно подкладывать асбестовое одеяло? Нет?! Тогда идём к регистрам!

Я не поленился и склеил скриншот самых распространённых регистров этого датчика. Вот она, Страшная Карта!

Таблица регистров для управления датчиком WB-MSW v3 (сбор данных, управление)

Таблица регистров для управления датчиком WB-MSW v3 (сбор данных, управление)

Я хочу, чтобы ребята из ОВЕН, WirenBoard и другие разработчики это всё прочитали и поняли, что регистры надо делать ПОДРЯД, даже если их всего два или три.

Итак, давайте выпишем номера значимых для нас регистров: 3, 4, 5, …, 8, 9, 10, 11, …, 97, 98, …, 283 (Cyka Blat)! А если мы хотим получать ещё и статус самого датчика, то нам нужны регистры 121, …, 124 (хотя бы).

Знаете, ЧТО делает этот датчик на попытку прочитать несуществующие регистры (любому идиоту, сука, видно что удобно было бы прочитать регистры с 3 по 11 одним запросом)? Конечно строго следует стандарту Modbus и выдаёт ошибку ERROR_ILLEGAL_ADDRESS (типа, неверный диапазон адресов регистров для чтения).

Сколько у нас получилось регистров? 12 штук. Сколько запросов надо, чтобы их прочитать или при условии групповых запросов? Считаем:

  • Запрос 1 = Регистры 3, 4, 5
  • Запрос 2 = Регистры 8, 9, 10, 11
  • Запрос 3 = Регистры 97, 98
  • Запрос 4 = Регистр 283
  • Запрос 5 = Регистр 121
  • Запрос 6 = Регистр 124

И вот теперь, так как пост про Modbus я ещё не написал (пока можете почитать эту статью из интернета: https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/), просто подсчитаем (я уже начинал считать это ранее в посте):

  • Команда 0x03 (Read Holding Registers) имеет формат [1 Байт: Адрес, Кому], [1 Байт: Команда], [2 Байта: С какого регистра прочитать], [2 Байта: Сколько штук прочитать], [2 Байта: CRC]. ИТОГО = 8 Байт
  • Ответ от устройства на команду 0x03 (Read Holding Registers) имеет формат [1 Байт: Адрес, Кому], [1 Байт: Команда], [1 Байт: Сколько байт данных идёт в ответе], [По 2 Байта на один регистр], [2 Байта: CRC]. ИТОГО = 5 + 2 x [ЧислоРегистров] Байт
  • Согласно спецификации протокола при передаче данных может использоваться задержка ответа в диапазоне 5-10 мсек.
  • Согласно той же спецификации на малых скоростях (до 19 200 включительно) при передаче каждого байта делается задержка в 3,5 мсек (упрощённо).

Запрос на чтение регистров (одного, двух или хоть сотни) занимает 8 байт. Один байт — это восемь бит. То есть 8 байт займут 8 x 8 = 64 бита. Скорость передачи данных пусть будет 9 600 бит в секунду. Значит 64 бита мы передадим за 64 / 9600 = 0,0066 секунд, что примерно равно 66 миллисекунд (мсек). А теперь прибавляем накладные расходы:

  • +5 мсек задержки ответа = 66 + 5 = 71 мсек;
  • +3,5 мсек на каждый байт = 71 + (8 x 3,5) = 71 + 28 = 99 мсек.

И это — только на ЗАПРОС! Причём запрос что для чтения одного регистра, что для чтения сотни регистров не будет меняться!!

Разбираемся с ответом. Если мы будем запрашивать только один регистр, то такой ответ займёт 7 байт. Чтобы не париться с расчётами, будем считать что его передача на скорости 9600 занимает те же 99 мсек.

Таким, Cyka Blat, образом мы получаем что на опрос ОДНОГО регистра мы тратим 99 + 99 = 198 (200 мсек) при скорости 9 600 бит/сек.

Давайте сравним количество байт и время их передачи для 20 регистров:

  • Ответ с одним регистром = 7 байт, 99 мсек х 20 штук = 1980 мсек (1,98 секунды);
  • Ответ с 20 регистрами (если бы они шли подряд) = 45 байт = 0,0375 сек (37,5 мсек) + 5 + (20 x 3,5) = 112,5 мсек — в СЕМНАДЦАТЬ РАЗ МЕНЬШЕ!!!

Вот вам и РАЗНИЦА!! Вот о чём я говорю, когда топлю за последовательные таблицы регистров!! Протокол Modbus имеет высокие накладные расходы: там выгоднее передавать сразу кучу данных, а не пихать запросы по каждому регистру отдельно.

То есть, если мы берём самую медленную скорость и опрашиваем 20 регистров по отдельности (если карта регистров идёт не подряд), то получается что каждый датчик будет полностью опрошен за те самые 1,98 секунды. А если датчиков 8 штук (как у нас в проекте), то получаем 1,98 x 8 = 9,98 секунд на один датчик, так как протокол Modbus ещё и последовательный: он может общаться в один момент времени только с одним устройством. А если это устройство ещё и не ответит — то ВЕСЬ опрос всех других устройств остановится на таймаут, в течение которого ПЛК будет ждать ответа от дохлого устройства.

В свете такой нарко… ой, Dvar’ской карты регистров у меня встаёт интересный вопрос о том, как Wiren предполагает детектировать движение по такому датчику. Представим такой сценарий: опрос датчика только что закончился, датчик стал фиксировать движение (но его опросят через 9,98 секунд), датчик перестал фиксировать движение (оно было очень коротким), начался опрос датчика. Что увидит ПЛК? Правильно: отсутствие движения!

Я знаю, что вы все скажете: что я взял самую медленную скорость в 9 600 и подкручиваю цифрами, чтобы всех напугать. Но фигушки! Оказалось, что не все устройства имеют настройку скорости. Например, термостаты с AliExpress со старой прошивкой (вот пост про них) — НЕ имеют, и скорость 9 600 в них жёстко зашита.

Конечно, мы нашли другие термостаты и подняли скорость в линии до 19 200, что (с ухищрениями и групповыми запросами групп регистров, про которые я напишу ниже) снизило время опроса датчиков до 3,5-4 секунды. Это хоть как-то приемлемо!

Вот во что выливается непоследовательная карта регистров!! Казалось бы — ну разместили регистры с пропусками, и что тут такого?

Вот так выглядит опрос этого датчика через Modbus Poll: пришлось для отдельных групп регистров заводить отдельные окошки опроса (и не все).

Опрос данных с датчика WB-MSW v3: видно, как много регистров идёт не по порядку (с пропусками)

Опрос данных с датчика WB-MSW v3: видно, как много регистров идёт не по порядку (с пропусками)

Но погодите! Подложите ещё одно асбестовое одеяло под жопу (а лучше два)!! Мы же не дошли до обсуждения ИК-команд, которые датчик может записывать и воспроизводить!!

Знаете, что было в 2020 году на старой прошивке датчика? *торжествующе-громогласно-страшным голосом* А ВО-О-О-Т ЧТО:

Таблица регистров (Coils) для управления датчиком WB-MSW v3 (ИК-команды)

Таблица регистров (Coils) для управления датчиком WB-MSW v3 (ИК-команды)

Короче, в чОтком соответствии со спецификацией Modbus ребята из Wiren заложили:

  • 80 штук Coils для команд «Записать команду номер такой-то»
  • 80 штук Coils для команд «Воспроизвести команду номер такой-то»

То есть к нашим регистрам прибавилось ещё 80 + 80 = 160 штук Coils!!

В новой прошивке WirenBoard это исправили, использовав мою идею: завести один Modbus-регистр для задания номера банка команды и второй для операции, что с этим банком сделать: записать, воспроизвести, стереть.

По словам WirenBoard, они выпускают прошивки для всех датчиков на любом железе (и для моих старых STM32 прошивка тоже есть). Надо будет поизучать этот вопрос, а то мы с Майлихой хотели на их датчики повесить управление кондиционерами, и решение с кучей Coils на старой прошивке нам не подходит.

Когда я первый раз внёс все нужные мне хотя бы для теста регистры датчика в список каналов опроса ПЛК, то у меня получилось 14 штук:

Добавление датчика WB-MSW v3 в ПЛК (CodeSys v3.5) для опроса его данных и управления им (14 каналов опроса, ужас!)

Добавление датчика WB-MSW v3 в ПЛК (CodeSys v3.5) для опроса его данных и управления им (14 каналов опроса, ужас!)

А ведь ПЛК тоже выдерживает паузу между запросами (на CodeSys v3.5 при использовании штатного драйвера — около 80 мсек)… Хех! Это привело к тому, что для исполнения ИК-команды в сети из трёх датчиков WirenBoard (собранной для теста) пришлось подавать эту команду на датчик в течение 10 секунд. Я сначала думал, что у меня датчик не работает — а оказалось, что опрос долго идёт.

И не надо напоминать мне про то, что всякие там температуры и концентрации CO2 можно опрашивать реже: раз в минуту, например. Всё равно в один из моментов времени получится так, что к датчику попадут сразу все запросы, и он будет тормозить. А если именно в этот момент времени мы как раз решили подать ему сигнал воспроизвести ИК-команду? Обратной связи-то нет, и мы не знаем, что делает датчик…

Как объясняет WirenBoard такую кривую карту регистров (по сведениям на 2020 год, когда мы с ними плотно общались по этому вопросу)?

  • «Она сложилась исторически, хочется иметь обратную совместимость»;
  • «С нашими контроллерами всё работает, так как у нас событийная модель: команда на запись регистра передаётся только запросу, когда в нём надо что-то изменить». Хах! А в ПЛК по умолчанию все команды подаются строго циклически, так как устройство обязано быть на связи: это промка, и если устройство на связи не будет, то это может кончиться взрывом котла с паром (лучше зимой в морозы) или химического реактора с кислотой, а не сбоем показаний CO2;
  • «Возможно мы вообще выкинем этот светодиод на датчике и других устройствах: он только мешается». Ну так раз вы так любите регистры, то сделайте регистр, который будет отключать этот светодиод: пусть каждый настраивает его поведение как ему нравится;
  • «Если мы сделаем чтение несуществующих регистров, то нам же надо как-то возвращать код ошибки, а все значения 0x0000 или 0xFFFF (все биты нули или все единицы) у нас уже заняты кодами ошибок отсутствия сенсоров, и мы не знаем что сделать: нам нужна обратная совместимость». Блин!!! Зато накладных расходов на опросы — дохера! Ну так сделайте ещё одну фишку, которую я предлагаю уже с год или полтора: заведите в карте ещё один служебный регистр. Если его значение будет равно нулю — то датчик будет вести себя как сейчас, отдавая ошибку ERROR_ILLEGALL_ADDRESS на несуществующие регистры, а если его значение отличается от нуля — то пусть несуществующие регистры отдают это значение. Тогда можно играть во всякие фразочки, записанные в 16-ричной системе типа 0xDEAD 0xBEEF, 0xC0FE, а кому надо — тем останется строгий стандарт и совместимость. Разве это так сложно?!

Эти ребята непрошибаемые! ОВЕН, берите на вооружение эти идеи с картой регистров и светодиодами! Вы молодцы — у вас эти идеи не пропадут!! А я пока буду ждать новую прошивку!

Как сейчас я обрабатываю такие датчики (скришоты даны для ПЛК на CodeSys v3.5, где поддерживаются команды работы с Coils)? Сейчас, создавая программу под Майлиху-1, я занялся мощным рефакторингом кода, создав функциональные блоки (FB), которые обрабатывают все данные с датчиков, формируя из них понятные мне значения в виде чисел или готовых строк, которые можно выводить сразу на экран.

Также внутри этих FB идёт вычисление минимума, максимума для каждого значения и защита от кратковременных отвалов связи: если при чтении даных с датчика в течение некоторого времени происходит мало сбоев, то FB считает что связь в порядке и данные верны. Если же число ошибок связи с датчиком увеличивается — то только тогда FB считает что датчик отвалился, а его значения не верны. Все пороги и значения настраиваются в константах проекта, а такой алгоритм позволяет защитить программу от помех или кратковременных сбоев связи: она не считает их ошибками и не останавливает процессы, завязанные на данные с датчиков.

Чтобы читать с датчика почти все данные (до ИК-команд я не дошёл, жду и надеюсь на какую-то смену прошивки для моих датчиков), я сгруппировал их в общие запросы так, как мне позволила карта регистров. Теперь я получил всего 6 каналов опроса против 14ти.

Обработка WB-MSW v3 на ПЛК: Внесены 6 каналов группового опроса (вместо 14ти)

Обработка WB-MSW v3 на ПЛК: Внесены 6 каналов группового опроса (вместо 14ти)

Мой FB-обёртка получает на входе сырые данные с этих групповых каналов опроса в виде массивов WORD (так их отдаёт CodeSys при групповых опросах), а так же переменные для управления светодиодами и статус ошибок связи датчика:

Обработка WB-MSW v3 на ПЛК: Входные переменные FB обработки данных с датчика

Обработка WB-MSW v3 на ПЛК: Входные переменные FB обработки данных с датчика

А на выходе там целый клондайк переменных: массивы данных для записи в датчик (для управления светодиодами и пищалкой), флаг о том, что значения с датчика верны (и их можно использовать для управления процессами) и сами значения с датчика в числовом формате (для программы управления) и в строковом формате (для вывода на экран). Получилось очень круто:

Обработка WB-MSW v3 на ПЛК: Выходные переменные FB с данными от датчика

Обработка WB-MSW v3 на ПЛК: Выходные переменные FB с данными от датчика

Потом мы создаём экземпляры таких FB для каждого датчика, привязываем к нему переменные из каналов опроса — и получаем все данные с проверкой на их достоверность!

Обработка WB-MSW v3 на ПЛК: Привязка переменных FB к каналам ModBus

Обработка WB-MSW v3 на ПЛК: Привязка переменных FB к каналам ModBus

Идея с FB обёрток данных с датчиков мне хорошо зашла, и я сделал такие же блоки для SENTERA и других устройств в проекте! Почитайте дополнительно пост про отладку проектов на ПЛК — там описаны эти обёртки и другие прёмы опроса и проверки данных, получаемых по Modbus.

2.3. Испытания датчиков. Красивые графики.

Ну а нам осталось побаловаться с датчиками. Скриншоты относятся к проекту щита на Шелепихе (как раз он тогда и притащил мне расхайпленный WB-MSW v3 на поиграться).

Вот здесь я проверил то, как работают бризеры Tion (даю ссылку на вторую часть поста про них, скоро выйдет третья):

Тесты датчика WB-MSW v3: Падение концентрации CO2 при включении бризеров TION

Тесты датчика WB-MSW v3: Падение концентрации CO2 при включении бризеров TION

Я специально вырубил на ночь бризер, поспал без него и надышал CO2 под 2000 ppm. Как только бризер заработал, концентрация CO2 начала падать.

Тут я решил ПОБАРАБАНИТЬ. ГРОМКО. Специально. Когда барабанишь, то поднимается не только уровень шума, а ещё и с уровень CO2, так как барабанщик много дышит (и потеет тоже):

Тесты датчика WB-MSW v3: Изменение шума и влажности, когда я побарабанил (жёстко и громко)

Тесты датчика WB-MSW v3: Изменение шума и влажности, когда я побарабанил (жёстко и громко)

Ну а другим вечером я решил поиздеваться над датчиком VOC, который мгновенно реагирует на зажигание свечей, вонилок и СПИРТ! Нафигачил себе сыра катышками и бокал вина…

Тесты датчика WB-MSW v3: Решил ночью выпить немного вина ;)

Тесты датчика WB-MSW v3: Решил ночью выпить немного вина ;)

…и концентрацию VOC на датчике почти зашкалило! Так ему и надо! =)

Тесты датчика WB-MSW v3: Резкий скачок концентрации CO2/VOC от вина и свечей!

Тесты датчика WB-MSW v3: Резкий скачок концентрации CO2/VOC от вина и свечей!

2.4. О будущих планах WirenBoard. Реакция на данный пост и новости от компании.

После выхода этого поста ребята из WirenBoard связались со мной и написали мне комментарии по данному посту, которые я будут приводить в виде тезисов. Актуальность комментариев — Август 2022 года.

  • Запас микроконтроллеров GigaDevice (аналоги STM32) есть на 2 года. Поэтому производство датчиков будет идти на них, чтобы не тратить время на переделку прошивок под другие микроконтроллеры;
  • (Не проверено мной) Прошивки выпускаются и для самых старых датчиков по принципу обратной совместимости. То есть, можно обновить датчик, в котором в качестве процессора стоит STM32, на новую прошивку;
  • В будущих прошивках ожидается регистр для управления индикаторным светодиодом: светодиод можно будет совсем отключить, чтобы он не мешал. Убирать индикацию IO в модулях IO никто не собирался: на выставке Электро-2022 мне сообщили ошибочные сведения;
  • В новой прошивке датчики понимают один или два стоп-бита корректно;
  • Заканчивается оформление документов (и сертификация) на внесение WB-MSW v3 (и других датчиков) в Реестр средств измерений;
  • В ближайших планах (возможно, октябрь 2022) доработать прошивку так, чтобы несуществующие регистры можно было читать. Они будут возвращать значение 0xFFFE, а через специальный регистр настройки эту функцию можно будет включить или отключить;
  • WirenBoard работают над тем, чтобы полностью переписать в прошивках ВСЕХ устройств (40+) ядро работы с Modbus (чтение регистров) так, чтобы там поддерживался ремаппинг: можно было создать свою последовательность регистров и читать их подряд, начиная с какого-то адреса. Это круто, хочу-хочу: тогда буду читать ещё и сведения о напряжении питания датчика;
  • По самим датчикам WB-MSW ведётся дополнительная работа. Думают над версией v4, в которой изменится корпус (внутри будет больше места, а защёлки крышки будут более удобные), а также над версией датчика для установки в подрозетник скрытым монтажом так, чтобы снаружи он выглядел как заглушка, а не торчал коробкой на стене;
  • В качестве первой меры, которая повышает удобство настроек, под некоторые устройства сделаны шаблоны для Modbus Poll (свежей версии, а не той старой, которая у меня), при помощи которых можно быстро почитать регистры и задать некоторые настройки через них;
  • В качестве будущего проекта WirenBoard собираются выпустить свой конфигуратор под свои устройства (как я и писал в посте), в котором будет поиск устройств с неизвестным адресом или параметрами связи, и также обновление прошивок. Короче, как у ОВЕНа сейчас в их конфигураторе;
  • Выпустили свой преобразователь USB<>RS-485 с выходом питания DC 12V, чтобы этот преобразователь сразу же питал устройства WirenBoard во время настройки. Идея клёвая!

Я буду ждать обновлений, обновлять прошивку своих датчиков и, если WirenBoard успеют до пусконаладки Mail.Ru-1, то тестировать новую прошивку с ремаппингом регистров. А если не успеют — то потом перепишу проект на новую прошивку и новую карту регистров!

3. Заключение. Упаковка датчиков для объектов на примере WirenBoard.

Пост в двух частях (напоминаю первую ещё раз) получился хорошим, так как я неожиданно для себя разобрал несколько датчиков, каждый из которых имеет свои фишки и свои недостатки. Если всё это подытожить, то я бы составил такой список требований:

  • Удобное подключение кабелей RS-485 и питания. Надо заранее и сразу понимать, что кабели для RS-485 — это не тонкая витая пара или лапша. Эти кабели имеют большой диаметр и гибкие жилы, и часто разводятся шлейфом. В промке вы можете поставить рядом с датчиком коммутационную коробку (ОВЕН такие выпускает), но в быту датчик должен подключаться эстетично и аккуратно: а значит внутри датчика должно быть предусмотрено место для разделки кабелей и соединения их экрана.
  • Светодиод(ы), которые показывают статус питания, работы и ошибок датчика — ОЧЕНЬ важны и нужны (плохой пример — SENTERA, где без светодиода ничего не понятно). Если вам кажется, что светодиод будет мешать пользователю — сделайте регистр конфигурации, который отвечает за статус светодиода: Выключен, Включается на хх минут после подачи питания на датчик, Всегда включен (если светодиод работает — то он светится при наличии питания и мигает при запросах Modbus).
  • Последовательная карта регистров для опреативных значений (данные, управление датчиком): на примере WirenBoard я хорошо показал то, как это важно. Если карту не получается сделать последовательной из-за совместимости со старыми продуктами, то или продублируйте регистры последовательно под другими номерами или же сделайте чтение несуществующих регистров.
    Напоминаю идею со специальным регистром, который будет отвечать за чтение несуществующих регистров: если этот регистр равен нулю, то несуществующие регистры не читаются и возвращается код ошибки. Если регистр не равен нулю — то несуществующие регистры возвращают значение, заданное в нём.
  • Для уличных или промышленных датчиков важна возможность очистить мембрану сенсора или заменить её, а так же расположение этой мембраны (чтобы в неё не попадал мусор и грязь).
  • Идея с настройкой параметров связи переключателями — очень крутая, особенно для уличных датчиков!
  • Пусть будет побольше расчётных параметров (точка росы, например). Собственные параметры (как у WirenBoard — измерение напряжения питания и температуры процессора, команды перекалибровки сенсоров) тоже полезны.
  • Если делать уличные датчики — то с измерением уровня освещённости как у SENTERA (или с возможность добавить туда этот сенсор как дополнительную опцию — по аналогии с платами RS-485 для реле ПР200 у ОВЕН).

Перед монтажом датчиков нужно заранее их настроить и проверить на работу. В своих проектах я печатаю наклейки, которые клею на коробку с датчиком, внутрь его корпуса (или на печатную плату) и на заднюю стенку корпуса. При монтаже это помогает не ошибиться и не перепутать датчики.

Упаковка заранее настроенных датчиков для проекта Mail.Ru-1

Упаковка заранее настроенных датчиков для проекта Mail.Ru-1

Повторю мысль, которую высказывал в первой части поста: не создать ли систему хранения сведений об оборудовании и его настройках так, чтобы можно было легко «достать» их из базы для нужного объекта и понять, что и как было настроено в старом датчике или модуле ввода-вывода при замене его на новый.

Ну а все датчики WirenBoard WB-MSW v3 и SENTERA ODTHM я собрал в одну большую гирлянду, чтобы подключить их к ПЛК для Майлихи-1, который я заканчиваю программировать (разработка затянулась из-за рефакторинга и отвлечения на другие щиты). Во как получилось:

Гирлянда из датчиков WB-MSW v3 и ODTHM для проверки работы ПЛК

Гирлянда из датчиков WB-MSW v3 и ODTHM для проверки работы ПЛК

Это оказалось хорошей практикой: сразу настраивать датчики и подключать их в тестовом режиме к ПЛК. Она позволила уточнить и общее время опроса датчиков, и проверить всю логику работы ПЛК, не получая сообщения об ошибках.

Датчики WB-MSW v3 и ODTHM в процессе работы ПЛК

Датчики WB-MSW v3 и ODTHM в процессе работы ПЛК

На этом я заканчиваю свой пост! Он будет дополняться новой информацией, когда она будет появляться! =)

Проекту исполнилось 15 лет! Поддержать проект материально, проспонсировать проекты Автора или сделать ему подарок можно на этой странице: "Донаты и Спонсорство, Список Желаний".

2 Отзывов на “Датчики климата (температуры, влажности), Часть 2: WirenBoard WB-MSW, Sentera ODTHM”


  • 1 oddentity

    [CS: Комментарий перемещён из поста «Логические реле и ПЛК : Зачем это нужно и как работает?«]

    Добавлю немного про Wirenboard из собственного практического опыта.
    Контроллер специфический. Вообще, идеи заложены отличные, но из-за слабой документации и недоработок в софте, интеграция в полноценных проектах выливается в огромную головную боль. Особенно, если отступить чуть дальше примитивных сценариев.

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

    Надо отдать должное команде разработчиков — поддержка работает! Я создал 100500 тем на форуме по разным вопросам, как по документации, так и по железу — ни разу я не был послан или проигнорен, отвечают оперативно. Из реальных проблем (не относится к контроллеру) — у меня слетели калибровки многоканального счетчика, обнулились регистры. Написал на форуме поддержки (вечером), в течении буквально пары часов дали обратную связь, попросили SSH-доступ и восстановили все удаленно, в нерабочее время. За это — респект!

    Но есть весьма досадные недоработки. Например, в шаблонах устройств нет распространенных типов данных. Например, ампер, герц, вольт-ампер. Есть вольты, ватты, кВт-часы, а ампер нету… На работоспособность это не влияет, в виджетах напротив силы тока будет просто число без величины, но таких перфекционистов как я это напрягает. Причем, странно — ребята не первый год производят эти железки, пишут WebUI, есть поддержка куча девайсов измеряющих силу тока, но почему-то никто не додумался добавить амперы… Ну как так? Самостоятельно добавить у меня не получилось, надо копаться глубоко в исходниках, пока что забил…

    Ещё по WirenBoard непонятно, на чём его разрабатывать — ну программу писать. У меня один хороший заказчик уже как год его хочет, но ни хуя не ясно как прогать. Искал-искал… CodeSys там и не пахнет. Каким-то своим IDE — тоже не пахнет… вот пока забили.

    У них есть свой движок правил, который по сути является JavaScript с некоторыми собственными функциями. Более-менее документировано. Если есть навыки в прог-нии на JS — вообще не проблема. Движок может запускать любые команды из CLI, которые могут быть скриптами или программами написанными вообще на любых языках. Если даже некая железка официально не поддерживается — можно тупо брать с нее сырые данные по любому интерфейсу, парсить и выдавать движку в нужном виде.

    У меня есть такой скрипт, написанный на linux-shell, который опрашивает показания счетчиков воды через bluetooth, парсит RAW-данные и с помощью движка правил выводит показания в виде наглядных виджетов для отслеживания ресурса фильтров. Еще один скрипт периодически запрашивает баланс на сим-карте, которая вставлена во встроенный модем.

    Про WirenBoard… веб-интерфейс? Это чё?! А там нет что ли ну… этого… где код писать? Всякие функции, процедуры, вызовы, стэк, память, ресурсы, переменные?…
    Если у этой пизды настройки и опрос RS-485 только по веб-интерфейсу — это это не ПЛК, а проебундия сплошная!

    Для тру-кодеров можно все писать просто в текстовых файлах, а управлять в линукс-консоли. Любые настройки можно так же делать правкой текстовых конфигов, как и в любых линукс-девайсах. Веб-интерфейс там в основном для статистики и наглядности — можно посмотреть историю параметров в виде графиков, можно сделать всякие виджеты, чтобы скажем, вся температура со всех датчиков была на одной «панельке», или сгруппировать кнопки какие-либо. 2-я версия webUI существенно продвинулась в плане кастомизации и если нужно всего пару кнопок и пару виджетов, можно даже обойтись без интеграции с Apple HomeKit, а делать все это из родного веб-интерфейса.

    Ну и писать код тоже можно в веб-интерфейсе — это просто текстовый редактор, который правит те же текстовые файлы, но немного упрощающий кодинг (включение реал-тайм отладки, подсвечивание ошибок кода и тд).

    Из вариантов вижу такие:
    https://wirenboard.com/ru/ (всё здорово, кроме modbus на кнопки, что почти 100% приведёт к лагам системы, планируется более 30 кнопок, их опрос может занять более полусекунды — меня за такую херню из дома выгонят);

    Тут вы не совсем правы. До кнопок Modbus не нужен, там просто тянется сигнальный провод как с обычных реле. Если кнопки заводить на отдельные «железные» релейные модули — там все обрабатывается мгновенно и без участия контроллера. Можно даже примитивную логику сделать с помощью встроенной в реле маппинг-матрицы (ну, например, при нажатии кнопки 5 — включать каналы 1 и 2, поменять состояние канала 3, а каналы 4 и 5 не трогать вообще.

    А вот если вы хотите вывести все это в инет и связать с Apple HomeKit, или строить более сложную логику в зависимости от датчиков или состояния других устройств — тогда да, нужно заводить это на контроллер по ModbusRTU/RS-485 и дальше связывать с облаком. Но сам по себе ModbusRTU работает тоже почти мгновенно, лаг тут уже будет скорее из-за облака и интернет-соединения. Т.е. при включении света на телефоне у вас скорее всего будет некоторый лаг, но при этом физическая кнопка-выключатель будет работать мгновенно.

    Почему будет лагать по модбусу — тут зависит от архитектуры, если модули растащить по квартире, и будет их больше двух десятков — боюсь, не получится гонять это на 115200, а будет, например, 57600 и последовательный опрос, и задержки будут. Можно, конечно, все модули связать внутри щитка, а от кнопок/выключателей тащить провода, но то такое.

    Не понял, а зачем вам тащить Modbus по квартире? Это разве что для датчиков, и то можно беспроводные применять. В Wirenboard целая туча беспроводных интерфейсов — начиная от 433 МГц и заканчивая новомодными Z-wave и ZigBee.

    А для кнопок управления светом мое ИМХО, самый верный и надежный способ — сигнальные кабели в щит. Кабелей будет немного, т.к. тянется это все ШЛЕЙФОМ (см. соотв. статью в этом же блоге), даже той же витой парой можно, до 7 кнопок на одну витуху. Кабелей будет столько, сколько комнат. По мне, так гораздо удобнее расположить кнопки везде где они будут нужны, хоть 5 штук на комнату, чем перекрикиваться с ботами или искать смартфон для включения света ))

    Клеммы у него пиздец уебанские и полное дерьмище (кроме фотки с 6й версией).

    Вроде от этих зажимных клемм давно отказались. Сейчас везде винтовые. В силовых реле НШВИ до 2,5кв. лезет, а если обжато правильными клещами в ровный квадрат — то и 4-ка, либо 2х1,5.
    В сам контроллер клеммы максимум до 0,75 (идеально обжатая квадратом НШВИ-шка лезет и 1кв.мм), но там везде слаботочные цепи.

    [CS: Комментарий перемещён из поста «Программируемые реле ОВЕН ПР100, ПР102 и ПР200, часть 3«]

    Значит что касается WirenBoard. Я бы вебал бы их, проклял бы и отправил бы в ёбаный ад, где их будут вечно пытать анальным яблоком (или как его там звали) за их ёбаные пружинные клеммы!

    Ну сколько можно уже? Нет давно пружинных клемм у них, НЕТ!!! Ни на контроллере, ни на релейных модулях, ни на диммерах. Может еще остались на каких-то древних модулях со старых партий, но в целом, везде винтовые. Уже писал в другом комменте, на силовых реле в винтовые влеммы входит 2,5 НШВИ, при правильном обжиме квадратом — входит и 4-ка или двойная полторашка, т.е. нет проблем сделать шлейф из 1,5-шки, а на свет больше и не нужно.

    Также я недоумеваю, нахера там столько протоколов ебанули. Тот же 1-Wire для DS18B20 ПИЗДЕЦ глючная хуйня на длинных линиях.

    Просто смотри шире. WirenBoard — это не ПЛК. Точнее, можеть быть и ПЛК, а может чем угодно и даже wi-fi роутером или метостанцией. Это железка для интеграции вообще всего-всего и в т.ч. не относящегося к электрике. У меня, например, он показания счетчиков воды собирает по BLE и управляет сервоприводом для промывки обратного осмоса. ))

    1wire на длинных линиях и не тянут. Для длинных линий есть адаптеры ModbusRTU-1wire. Например, для теплого пола ставится такой адаптер в подрозетник (он мелкий), от него датчик 1wire вместо стандартного термодатчика, а дальше уже ModbusRTU идет в щит на контроллер и там рулит температурой.
    Зачем сделали 1wire прямо на контроллере — хз, ну сделали и сделали, кушать не просит. Эти выходы во-первых, могут переключаться на режим цифрового входа, во-вторых, если нужно воткнуть парочку 1wire датчиков где-то рядом в щите — вот и пригодится.

    Можно называть таких людей хипстерами или еще как-то, но современные тенденции таковы, что от «умного дома» уже недостаточно делать что-то по заданным сценариям. Нужна ОБРАТНАЯ СВЯЗЬ и как следствие, выход в инет или хотя бы СМС-оповещения. А у всех этих суровых промышленных ПЛК с этим по-прежнему все на зачаточном уровне.

  • 2 sapof

    В датчиках, позиционируемых для уличного применения не видно влагозащиты платы сенсора. В уличных условиях контакты покроются зеленкой, особенно между 3,3В и GND.

    И еще, не видно никакой герметизации от захода уличного воздуха в корпус со стороны датчика. Толку тогда от этого герметичного корпуса.

    Еще непонятно, как два кабеля RS485 (входящий и выходящий) засовывать в один гермоввод, это же порнография получится.

Оставить отзыв

Вы должны войти на блог, чтобы оставить комментарий.