D18B20, Arduino, MODBUS, Master SCADA

  • В этой теме 259 ответов, 23 участника, последнее обновление 5 лет сделано Роман.
Просмотр 15 сообщений - с 121 по 135 (из 260 всего)
  • Автор
    Сообщения
  • #16449
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Роман, поздравляю! Приятно когда получается то, что задумываешь))))

    Я посмотрел код. Там 4 DS18B20 минуя далласовскую библиотеку, как мы ранее обсуждали, и кусочек кода к модбас. Правильно я понял? У меня вопрос, а почему именно Модбас, есть же москито и куча других протоколов в облако? Просто модбас это большая экзотика для домашнего пользователя. Или это личные предпочтения?

    Мастер Скада – отдельный космос.

    Хорошо живет на свете Винни-Пух...

    #16459
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Роман, еще вопрос с Вашего позволения. Разбираюсь с Вашим предыдущим кодом и никак не могу понять смысл переменной аuto. Объясните пожалуйста. Вот фрагмент script’a.

    var auto = false;
    function setDel1(){
    var delta1 = document.getElementById(‘DELTA1’).value;
    var delay1 = document.getElementById(‘DELAY1’).value;
    if(delta1 != 0 && auto == false) {
    document.getElementById(‘APRESS1’).value=document.getElementById(‘APRESS2’).value;
    document.getElementById(‘SETTEMP1’).value=(+document.getElementById(‘STEAMTEMP’).value + +delta1).toFixed(2);
    auto = true;
    }
    else if(delta1 != 0 && auto == true) {
    document.getElementById(‘SETTEMP1’).value=(+document.getElementById(‘STEAMTEMP’).value + +delta1).toFixed(2);
    }
    else if(delta1 == 0 && auto == true) {
    document.getElementById(‘SETTEMP1’).value=200;
    document.getElementById(‘APRESS1’).value=”??”;
    auto = false; // отключаем режим auto
    }
    server = “/Del1?delta1=”+delta1+”&delay1=”+delay1;
    request = new XMLHttpRequest();
    request.open(“GET”, server, false);
    request.send();
    if(request.status != 200) {
    alert( request.status + ‘: ‘ + request.statusText );
    }
    }

    Хорошо живет на свете Винни-Пух...

    #16480
    Роман
    Участник
    • Ответов: 291
    @papazol

    По порядку. Сначала про MODBUS. Уже несколько раз я пытался создать что-нибудь такое, чтобы рисовались графики реального времени. К сожалению, разработчики умных домов не уделяют той доли внимания, которой хотелось бы, графическому отображению параметров. Если и есть такая функция, то она сильно упрощённая. В то же время приходилось работать (на работе :)) с Master SCADA. И там графики реального времени очень продвинутые. Просто завидовал. Потом нашёл-таки библиотеку MODBUS, попробовал – понравилось. Самое главное – удалось вывести показания температур на столь желанные графики. А дальше захотелось беспроводной передачи. В общем, исторически всё сложилось.

    На самом деле Master SCADA не так сложна, как может показаться. Особенно если предоставляется готовый проект :). На мой взгляд, разработчики этой программы зря усложняют доступ к бесплатной версии. Наверняка её выкладывают на торренты.

    Теперь про auto. Как я помню, это указатель режима работы клапана отбора. Если он равен нулю, то режим ручной, единице – автоматический. Там была идея, что оператор, следя за работой колонны, определяет момент наступления стабилизации и включает автоматический режим. При этом фиксируется (становится уставкой) текущая температура (точнее, две: перед дефлегматором и в царге), задаётся дельта (опять же две), задаётся задержка (две) включения клапана. И дальше автоматика в зависимости от температур открывает и закрывает клапан отбора. Поскольку система не была опробована в реальных условиях, не удалось однозначно определить, по какой же всё-таки температуре (или сразу по двум) лучше управлять клапаном. Поэтому оставлено независимое управление по обеим температурам.  А в ручном режиме клапан управляется кнопками на web-странице.

    #16487
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Роман, спасибо!

    Я не связал эту переменную с клапаном. Всю голову сломал зачем она нужна)) Теперь понятно.

    Ваш код очень помог, спасибо!Единственное, что у Вас при обновлении страницы все значения дельты и уставок сбрасываются на экране. А при перегоне в несколько часов сложно на телефоне не закрыть или случайно не обновить страницу. Буду такие переменные в json засовывать.

    Процесс идет, правда несколько медленнее, чем планировал. Вчера часов на шесть занырнул в код, продвинулся далеко. Но сколько еще раз часов по шесть надо…

    Хорошо живет на свете Винни-Пух...

    #16494
    Mangust
    Участник
    • Ответов: 946
    @mangust

    Гигрометр работает на электро проводности спирта? Могут быть проблемы. Может лучше поплавок с магнитом + геркон?

    Работает. Сам проверял

    боюсь не прокатит – пары спирта конденсируются постоянно. Датчик будет срабатывать.

    "Век живи - век учись, а дураком помрёшь" © Люди

    #16713
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Скада нужна только графики в реальном времени рисовать?

    Сегодня прикрутил к ардуино SD карту и все параметры пишу на карту с интервалом 10 секунд (можно и 0.1 секунда), потом в экселе строятся графики. В реальном времени оно хорошо, а оно надо это?

    Со своим проектом сижу второй месяц, осталось весы прикрутить и индукционку (с индукционной еще месяц возни – нужно переделывать железо и программу управления отладить), потом все железо (ардуинку, блок питания, модуля…) нужно собрать в корпус. Сложно, зато гибкая настройка и полная автоматика.

    #16714
    Юрий
    Участник
    • Ответов: 26
    @hleva

    Гигрометр работает на электро проводности спирта? Могут быть проблемы. Может лучше поплавок с магнитом + геркон?

    Работает. Сам проверял

    боюсь не прокатит – пары спирта конденсируются постоянно. Датчик будет срабатывать.

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

     

    JUST DO IT !!!!!

    #16720
    Роман
    Участник
    • Ответов: 291
    @papazol

    Сегодня прикрутил к ардуино SD карту и все параметры пишу на карту с интервалом 10 секунд (можно и 0.1 секунда), потом в экселе строятся графики. В реальном времени оно хорошо, а оно надо это?

    Как оно надо, каждый решает для себя сам. Можно вообще без измерения температуры, если рука набита. Но для меня, как новичка, видеть, что происходит в оборудовании прямо сейчас и, главное, по отношению к тому, что было чуть раньше (т. е. какова тенденция) очень нужно и важно. А вот смысла воспроизводить графики, когда всё уже закончилось, я особо не вижу. Разве что показать кому-то, но скада предусматривает и такую возможность.

    #16735
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    Но для меня, как новичка, видеть, что происходит в оборудовании прямо сейчас и, главное, по отношению к тому, что было чуть раньше (т. е. какова тенденция) очень нужно и важно. А вот смысла воспроизводить графики, когда всё уже закончилось, я особо не вижу.

    За всем должен следить контроллер и за температурой тоже. Графики нужны для того, что бы проверить потом правильность работы автоматики. У меня нет ни какого желания следить за этим самому.

    #16743
    Роман
    Участник
    • Ответов: 291
    @papazol

    За всем должен следить контроллер

    Не могу с этим согласиться. Если бы речь шла о промышленном производстве – то да, чем автоматизированней оно, тем лучше, то есть продукт стабильный и дешёвый. Но для дома, для семьи…   с теми деньгами, которые средний винокур может себе позволить потратить на своё хобби, надёжной и безотказной автоматики не создать. И что толку будет потом, задним числом, изучать графики, когда время и продукт потрачены?

    И второй важный момент: автоматизируя всё подряд, мы убиваем элемент творчества в создании напитков, даже если творим программы и датчики.

    Но, впрочем, сколько людей, столько и мнений.

    #16748
    Mangust
    Участник
    • Ответов: 946
    @mangust

    Юрий, возможно я не понял до конца вашу идею.

    "Век живи - век учись, а дураком помрёшь" © Люди

    #17533
    Роман
    Участник
    • Ответов: 291
    @papazol

    Пока то да сё, ко мне приехала забавная вещица из самого Гонконга. Это всё тот же ESP8266 в оболочке NodeMCU, но вдобавок ещё с дисплеем. Дисплей, правда, весьма малогабаритный, да и разрешение у него всего лишь 128х32 пикселя, но, однако, можно выводить две строки текста, видимые практически невооружённым глазом. Из особенностей устройства – его можно питать от аккумулятора 3,7 В 1000 мАч, есть встроенный контроллер заряда.

    “Драйвер”, предлагаемый китайцами, убог и сыр, поэтому пришлось погуглить и найти адекватную библиотеку для подобных дисплеев. Это библиотека u8g2. Она весьма обширна, ибо охватывает практически все существующие на сегодняшний день контроллеры OLED дисплеев, различные разрешения, интерфейсы управления и т. д. Библиотека содержит кучу экранных шрифтов различных размеров.

    Слегка поковырявшись, я довольно быстро научился выводить на дисплей нужные мне сообщения. Самая большая проблема возникла с выводом символов, у которых коды больше 127 по ASCII. Оказалось, что приходящий первым на ум способ Alt+код в данном случае работает неправильно, а именно, вместо символа градусов появляются целых два символа, первый из которых в разных шрифтах разный, а второй – нужный символ градусов. Оказалось, что в данной библиотеке для вывода символов от 127 следует использовать esc-последовательность вида \xab (где ab – двоичный код символа) или \xyz (где xyz – восьмеричный код символа). Таким образом, для символа градусов код 176 (это десятичное представление) должен записываться как \xb0 либо как \230. Поскольку непосредственно за символом градусов должен следовать символ “C”, то есть Цельсия, причём без пробела, в данной ситуации работает только вариант с восьмеричным представлением кода символа градусов. Если использовать двоичное представление, компилятор принимает букву C за часть двоичного числа, и код получается неверный.

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

    Доработав свою программу, я получил возможность просматривать все температуры на дисплее и бонусом определять IP адрес модуля, чтобы не нужно было подключаться к Монитору.

    Поскольку подключение дисплея занимает три GPIO контроллера ESP8266, да ещё и печатная плата почти вдвое меньше, чем NodeMCU, незадействованных GPIO очень мало. С учётом того, что датчики температуры подключаются каждый к своему GPIO, остаётся всего 1 свободный вход-выход. Это недостаток, но не слишком критичный.

    Теперь можно ещё уменьшить размеры коробочки, но появляется дополнительная задача сделать окно для просмотра дисплея, и, желательно, закрытое прозрачным стёклышком. Где его взять?

    Вложения:
    Вы должны войти для просмотра вложений.
    #17547
    Счастливчик
    Хранитель
    • Ответов: 2655
    @wpadm

    Вместо стеклышка прекрасно можно использовать кусочек пластика из ПЭТ бутылки. На таких размерах он будет идеально ровным.

    Самое ценное, на мой взгляд, это батарейка с контроллером заряда. Вещь интересная для кратковременных (до суток) автономных применений. Я правда для себя пришел к выводу, что можно и power-bank через microUSB подключать. Но батарейка с инженерной точки зрения правильнее.

    Дисплей действительно идеален для вспомогательных функций, типа IP адрес посмотреть. А основные данные после 45 лет не углядишь на таком экранчике, увы (я про себя).

    Пинов может много и не надо. Семи при разумном подходе может хватить.

    Кстати, в свою разработку прикрутил графики на библиотеке DYGraphs. Шикарно работает. Масштабирование графиков по оси Х и Y и прочие плюшки. Никакая сторонняя SCADA не нужна. Осталось проковыряться через дебри записи файла с данными во флеш-память. Пока тестово ловлю в режиме реального времени, что не дело для конечного продукта.

    Но очень и очень много всплывает моментов для реализации. Проект получается сложнее, чем я представлял))) Но движется. Надеюсь в марте выпустить наконец)))

    Хорошо живет на свете Винни-Пух...

    #17558
    Роман
    Участник
    • Ответов: 291
    @papazol

     

    Есть один способ изготовления лицевых панелей, дающий вполне презентабельный результат. Некогда мы применяли его для макетирования одного изделия. Способ заключается в том, что рисунок лицевой панели в масштабе 1:1 распечатывается на самоклеющейся бумаге. Затем вырезаются все отверстия, которые должны быть на лицевой. И затем с лицевой стороны приклеивается прозрачная плёнка. Это не скотч, а специальная самоклеющаяся плёнка, использующаяся в рекламных целях. Ей покрывают рекламные плакаты, располагающиеся на полу. Поэтому эта плёнка весьма прочная, а также не совсем гладкая, она имеет растровую поверхность. Но при близком расположении источника информации плёнка кажется прозрачной.

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

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

    Я бы для записи данных использовал всё-таки SD-карточку.

    #17561
    skalinas
    Участник
    • Ответов: 441
    @skalinas

    У себя реализовал запись данных каждые 10 секунд на SD карту через отдельный SD модуль.

Просмотр 15 сообщений - с 121 по 135 (из 260 всего)
  • Для ответа в этой теме необходимо авторизоваться.