1 июня 2016 в 13:48

FLProg – Новая реализация обмена по Modbus RTU tutorial



Ранее ещё на хабре я рассказывал о реализации поддержки протокола Modbus в программе FLProg. К сожалению как показала практика его использования, реализация получилась не очень удачная. Если Slave работал ещё более менее уверенно, то мастер работал очень неустойчиво. Кроме того задание адресов регистров было возможно только в виде непрерывного массива, и не было разделения на области памяти. Мастер в той реализации мог обращаться только к Holding Registers слейвов, что очень ограничивало возможности его применения. Достаточно долго я искал нормально реализованную библиотеку Modbus RTU для Arduino, но поиски не привели к успеху. Поэтому было принято решение написать реализацию обмена по Modbus RTU самостоятельно. И вот в недавно вышедшей версии программы FLProg с номером 1.12 это сделано. Что изменилось:
  1. Реализация Modbus RTU полностью совместима с промышленным стандартом.
  2. Реализованы четыре таблицы переменных – Coils, Discrete Inputs, Input Registers, Holding Registers. Для каждой переменной, можно задавать любой адрес (не обязательно последовательно).
  3. Реализована возможность задания адреса слейва, скорости порта и отключения/включения опроса конкретного слейва мастером программным путём с запоминанием этих данных в EEProm.
  4. Реализована возможность одновременной работы мастера и слейва на одном контроллере (на разных портах).
  5. Реализована возможность применять в качестве порта SoftwareSerial
  6. Благодаря динамически генерируемому коду одновременная работа мастера и слейва возможна даже на плате Pro-Mini.
  7. Реализована прямая совместимость со старыми версиями – ранее созданные проекты будут работать на новой версии без переделки.


В данном уроке я решил сделать, что ни будь реально полезное. Пробежавшись по онлайн – магазинам, я нашёл жертву – будем дублировать датчики и исполнительные устройства на шину RS-485 продающиеся в магазине Wiren Board. Почему они? Да меня просто убили их цены. Особенно возмутила цена на датчики DS18B20. На сайте они честно говорят о китайском их происхождении, и при этом запрашивают 400 рублей. Хотя в Китае даже при розничной продаже их цена 102 рубля. А при оптовой наверняка намного дешевле. Интересно – наценка более 300% — это за поход на почту?

Для начала попробуем повторить «Модуль реле Modbus-RTU Relay Module (WB-MRM2-mini)» – цена 2000 рублей.



Описание модуля.



Комплектующие для создания модуля:
  1. Arduino Nano – 145 рублей
  2. Двухканальный модуль реле – 114 рублей
  3. Модуль RS-485 – 48 рублей

Итого – 307 рублей. Как то дешевле двух тысяч рублей. Я думаю из рассыпухи по оптовым ценам на своей плате себестоимость ещё меньше будет.
Принципиальная схема:



Архив с проектом FLProg и скетчем

Работаем дальше:

Датчик WB-MS-THLS — Измеряет влажность, температуру, освещенность, звуковое давление. – 4900 рублей.



Описание не нашёл. Будем изобретать сами.



Комплектующие для создания модуля:
  1. Arduino Nano – 145 рублей.
  2. Модуль RS-485 – 48 рублей
  3. Датчик DHT-22 -202 рубля
  4. Датчик освещённости — 66 рублей
  5. Датчик звука — 66 рублей


Итого: 527 рублей. Чувствуете разницу? Дорогой корпус уж очень получается, зато красивый.
Принципиальная схема:



Архив с проектом FLProg и скетчем

Ну и теперь напоследок соберём устройство, которое будет собирать данные и управлять этими блоками. Для отображения информации и управления будем использовать смартфон на Андроиде. Соединение будет производиться с помощью Bluetooth, а в качестве программного обеспечения будет программа HMI-KaScada. На плате Arduino будет организованна работа Modbus Master (для сбора информации с блоков) и Modbus Slave (для работы с программой HMI-KaScada) одновременно.



Комплектующие для создания модуля:
  1. Arduino Nano – 145 рублей.
  2. Модуль RS-485 – 48 рублей
  3. Модуль HC-05 -234 рубля.


Итого:427 рублей.
Принципиальная схема:



Архив с проектом FLProg и скетчем

Ну что сказать напоследок? Если у Вас есть прямые руки, то многое что продается за большие деньги, можно сделать самому и намного дешевле.
Автор: @totuin
FLProg
рейтинг 31,93
Простое программирование микроконтроллеров

Комментарии (9)

  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Приблизительно схемотехнику можно посмотреть (такой же их же модуль в другом корпусе)

  • 0
    Ого!
    Во-первых, классный проект у вас, только что узнал что вы — есть (как-то пропустил ваш блог)!
    Во-вторых — классная реализация!

    ЗЫ. Вопрос: у wiren board сделан «счетчик нажатий 1 кнопки» — хорошая вещь, подумал я, если нужно иметь возможность отслеживать нажатие, которое «проскочило» мимо поллинга, или можно было бы отслеживать «двойной клик».
    Но, думаю, было бы неплохо эту область сделать R/W а не R, чтобы можно было сбрасывать счетчик.

    ЗЫЫ. Можете показать железячку, что получилось на выходе?
    Все-таки WB-MRM2-mini довольно миниатюрый и мог бы вместиться в подрозетник.
    • 0
      ЗЫЫ. Можете показать железячку, что получилось на выходе?
      Все-таки WB-MRM2-mini довольно миниатюрый и мог бы вместиться в подрозетник.


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



      В коробку в такой ткаой комплект наверное не влезет (ходя если сложить бутербродом даже может), но в колпак люстры думаю без проблем.
      Ну или всзять рассыпуху, и собрать свою плату — если прямые руки — не проблема. Кстати многие пользователи программы так и поступают. На форуме программы есть рекомендации по сборке и прошивке самодельных ардуин.
      • 0
        Спасибо.
        Я все-таки про сравнение с WB в разрезе «за что такие деньги».
        Все-таки если «в колпак люстры думаю без проблем» — не совсем выход, т.к. я понимаю, модуль должен находиться за выключателем ввиду оптимальности прокладки кабелей\перекоммутации.
        «Ну или всзять рассыпуху, и собрать свою плату» — то получится Wiren Board, не?))

        Хотелось бы послушать представителей Wiren Board по поводу предложенного вами решения. У них если не ошибаюсь, open source, так что какие конкретно компоненты у них установлены и чем они лучше\хуже было бы интересно знать.
        В конце концов, если у WB маржа 300% — почему нет?)

        ЗЫ. В целом ваш проект и его наглядная реализация — очень даже имеет место быть. Будьте конкурентом WB!)) У них еще LAD нету, а у вас уже есть)
        • 0
          «Ну или всзять рассыпуху, и собрать свою плату» — то получится Wiren Board, не?))

          По размерам скорей всего да. по стоимости… я думаю раз в 30 меньше. Плату разработать двухслойную — делов на день максимум. Изготовить даже ЛУТ — ом сразу десяток (на все точки в доме) ещё пару часов. Распаять — тут да время нужно. Но посмотрите — 10 штук купить у Wiren Board — 20 000. Десяток самому собрать — думаю тысячи в три уложится можно. А то и меньше надо считать.

          Будьте конкурентом WB!))


          Я пишу программу — коммерция это не моё. Не позволяет у меня душа отнять у паренька Васи из деревни Куево который рвётся к знаниям его месячную зарплату. А вдруг он станет вторым Ломоносовым. А его так на корню — «нету бабок — нефик в электронику лезть. Занимайся своим навозом». Сейчас если смотреть на возможности для развития молодёжи — либо родители с большим кошельком, либо в подвал к наркоманам. Всё очень дорого. Самый дешевенький набор для развития от десяти тысяч.
          Так что пускай Wiren Board обдирает глупых буржуев с большими кошельками, а я буду писать бесплатную программу расчитанную на самые дешёвые контроллеры. У нас разная целевая аудитория, так что мы не конкуренты друг другу.

          У них еще LAD нету, а у вас уже есть)

          У них и FBD нет. Меня очень интересуют их клиенты. Они что совсем тупые? Кто будет обслуживать собранные на этих контроллерах системы. Пару человек которые освоили этот язык ролей который они изобрели? Вообще то ценность применения стандартых языков FBD и LAD в том что любой специалист АСУ сможет обслуживать практически любую систему написанную на этих языках. А вот такой экслюзив как у них — еденицы. Зачем заказчику такая зависимость от одной конкретной фирмы?
  • 0
    Не планируете ли продолжить подобные статьи? Очень интересно.
    Как насчет корпусов, которые можно было бы использовать для этого дела?
  • 0
    Планирую. По мере развития проекта, буду и дальше предлагать более дешёвые варианты реализации для существующих изделий. Насчёт корпусов, ничего сказать не могу, не моя епархия.
    • 0
      Спасибо Вам за интересную и полезную работу!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое