Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

«Домашняя» SCADA для Arduino

«Домашняя» SCADA для Arduino

Arduino больше предназначено для использования бытовых и рутинных задач. В основном эти контроллеры рассматривают для создания различных игрушечных прототипов. Всё таки можно найти действительно стоящее применение данных девайсов. SCADA для arduino — это одно из решений, позволяющее вести полный контроль за каким-либо процессом в любой точке мира. Это решение ещё называют «Интернет вещей». Существует великое множество сложных и неподъёмных SCADA — систем для различных проектов. Давайте рассмотрим некоторые из них.

Из этой статьи вы узнаете:

Подключение MasterSCADA и Arduino
Подключение Arduino и Remote XY

Всем привет друзья, с вами Гридин Семён. В этой статье я хотел поделиться с вами своими мыслями по поводу применения SCADA систем вкупе с Arduino.

Кстати, недавно мы с моей невестой выезжали на природу. Было очень тепло и светло, почти как летом. Правда, к сожалению до шашлыков дело не дошло :- (. А как вы отдыхаете, дорогие читатели, выезжали вы на природу??

Мы на природе

Мы на природе

Теперь давайте вернёмся к нашему диалогу. Теоретически можно подключить любую SCADA — систему к любому оборудованию, лишь бы был OPC — сервер и нужный протокол для передачи тех или иных данных…

Мы с вами рассмотрим два варианта подключений. Вариант с нашей любимой Master SCADA и с готовой системой RemoteXY для Arduino. Рассмотрим их различия, достоинства и недостатки.

Подключение MasterSCADA и Arduino

Что нам для этого нужно:

  1. Установить Master SCADA 3.7 на 32 точки — бесплатная версия;
  2. Установить Master OPC universal Modbus на 32 тега — тоже бесплатная версия;
  3. Конечно Arduino UNO;
  4. Написать скетч и настроить обе программы;

Дистрибутивы программ вы можете скачать с официального сайта ИНСАТ. Устанавливаете на компьютер и идём дальше.

SCADA Master

Для того, чтобы вся эта штука заработала, нам нужно скачать библиотеки для Ардуино, чтобы он опрашивался по протоколу Modbus в режиме Slave. Для этого нужно скачать библиотеку SimpleModbusSlaveV9. Скачать можно отсюда. Как установить библиотеку, я писал статью.

Пример будет с измерением длины. Реализован он будет с помощью Ардуино и датчика дальномера HC-SR04.

Пишем скетч:

Далее настраиваем OPC-сервер. Создаём устройство в дереве объектов. Добавляем подключение через COM-порт. В моём случае 3 порт. Обязательно указывайте в настройках.

Настройки ОРС

Далее добавляем устройство:

Добавляем устройство

После этого вносим теги, которые вы хотите опрашивать:

Настройки тега

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

Результат опроса

Это всё конечно здорово! Но нам надо увидеть эти данные на мнемосхеме, правильно. Тогда поступаем следующим образом — открываем MasterSCADA, создаём проект и делаем следующие настройки.

SCADA_1

Ищем ОРС-сервер и добавляем его:

SCADA_2

Добавляем ОРС-переменную нашего любимого датчика-дальномера:

SCADA_3

Далее добавляем Связываем теги и выводим это всё на мнемосхему. После этого запускаем всё хозяйство.

SCADA_4

А теперь давайте рассмотрим другую не менее интересную SCADA-систему для плат Ардуино.

Подключение Arduino и Remote XY

Remote XY — это специально разработанная программа для небольших контроллеров. Есть три типа подключений — это через bluetooth, WI-FI и Ethernet. Мнемосхему можно создавать прям в браузере. Главная фишка ПО — это управление с телефона или планшета. Для более подробного изучения заходите на официальный сайт разработчиков.

А мы с вами попробуем написать программу. Соединиться с помощью Ethernet-шильда W5100 по LAN-кабелю. Запустим процесс измерения влажности и температуры с помощью датчика DHT11. Ну что, поехали…

Что нам нужно:

  1. контроллер Arduino UNO;
  2. Ethernet W5100 шильд;
  3. датчик DTH11;
  4. Доступ к программе Remote XY;
  5. Хорошее настроение;

Ethernet W5100 шильд соединяется с Arduino, разместив их одну над другой. Необходимо обеспечить подключение Ethernet-шильда к локальной сети.

Шильдик

Скачайте библиотеку RemoteXY. И загрузите такой скетч в контроллер:

Потом скачайте приложение Remote XY на PlayMarket или AppStore. В открывшемся окне необходимо указать IP адрес, который был выдан Ethernet шильду роутером. В WEB-интерфейсе роутера можно посмотреть список подключенных устройств. Девайс можно идентифицировать по MAC-адресу в скетче.

В итоге должна получиться вот такая картинка:

Интерфейс DHT11

На сегодня у меня всё. Спасибо вам за то, что вы со мной, дорогие читатели. Подписывайтесь на новости блога. Пишите в комментах, пишите письма, я всегда отвечу по возможности. С вами был Гридин Семён. Пока — пока!!!

С уважением, Гридин Семён

 

Вам так же может быть интересно

Комментариев к статье: 15
  • Семен! Мне нужна Ваша помощь. Я — бывший полковник, доцент, 66 лет. Преподаю в Академии Можайского. Заинтересовался системами SCADA. Как программист, практик я 0. Но хочу, чтобы дипломник соединил Master SCADA с ARDUINO, а еще с каким либо ARM, апример,STM 32. дипломника пока не получается по Вашим инструкциям. Готов заплатить за помощь.

    • Добрый день, давайте начнём с того, что пытается соединить ваш дипломник. Arduino или STM 32? Arduino как он соединяет с MasterSCADA? По Modbus? У ребят от Simple-SCADA есть замечательные видеоуроки. Посмотреть можете здесь «Как мне помогла SCADA в автоматизации производства?». Я думаю, должно помочь.

  • Ищите проект FLProg. Там и скада своя есть.

    • Вообще не знал, что у FLProga есть SCADA. И как она? Как интерфейс? Есть графики? Архивы? Тренды? ;-)

  • Здравствуйте! Занимаюсь подключением Ардуино MEGA 2560 к SCADA-системе и у меня возникло несколько камней преткновения:

    1) С начала не мог разобраться как мне со SCADA отправить некое число на Ардуино, потом разобрался: надо вместо «holdingRegs[2] = cm» написать "cm = holdingRegs[2]« — теперь переменной cm будет присваиваться значение, которое мы кинем в OPC-переменную holdingRegs[2]. (Этот лирический пункт)

    2) В моем проекте управление Ардуино осуществляется также с сенсорного экрана(TFT3.2» с алиэкспрес за 600 руб) и я столкнулся с тем, что когда я добавил программный код для работы с OPC-сервером, я потерял возможность ввода температура с сенс. дисплея. Как я понял, это связано с ходом программного кода, т.е. когда я присваиваю переменной gradus значение температуры с сенс.экрана, то возникает конфликт логики и внизу кода значению graus заново переприсваивается значение OPC-переменной gradus = holdingRegs[2]. Я сумел обойти этот конфликт логики, кинув строку holdingRegs[2] = gradus в блок программы отвеч. за ввод температуры (в этот момент мы наоборот присваиваем ОРС-переменной значение температуры). Но такой «маневр» выручает не везде, т.к. программа у меня многоопциональная, так скажем, и конфликт порой никак нельзя разрешить! Скажите можно ли вот эти варианты строк gradus = holdingRegs[2] и holdingRegs[2] = gradus написать в программе так, чтобы они работали в обе стороны без описанных выше ухищрений. Или подобное подключение к SCADA, описанное в данной статье, не предполагает одновременного задания параметров и со SCADA-системы и с сенсорного экрана?

    3) OPC-переменная для Ардуино holdingRegs[], как я понял, работает только с целыми числами, т.е. если мы переменную типа float или double равную 23,8 кинем в holdingRegs[], то она сразу отсечет десятичную часть и оставит только число 23. Можно ли как-то записывать в эти ОРС-переменные дробные числа? Как я пришел к такому выводу — долгая история (ели интересует, могу написать), если я не прав — поправьте меня!

  • Скетч не работает. Постоянно вываливает ошибку «expected unqualified-id before numeric constant»

  • Очень полезный пример, на основе него разобрался, подключил DS18b20, а также релейный модуль.

    Да с переменной Floot вышла проблема, пришлось умножать на 100 и отправлять как integer, потом соответственно умножать на 0,01

    Аналогично с переменной Byte также пришлось переводить в integer. (для управления реле)

  • Спасибо большое за статью, помогла с дипломной работой) Но, мне кажется, в настройке ОПС сервера на компуктере ошибка… (первый пример с мастер скадой) В ардуино вы заливаете скетч, где настраиваете модбас с двумя стоп-битами (SERIAL_8N2), а в Мастере ОРС выставляете только один стоп-бит… :???:

    • Есть такой Грешок, спасибо за замечание…

  • Необходима ваша помощь, подскажите как в Ардуино устройству задать адрес для опроса.

    Т. е. в ОРС сервере к СОМ порту все подключается и дальше возникает ошибка в опросе устройства.

    • В коде последние строчки, попробуйте пощёлкать.

      • Здравствуйте, хотел бы задать вопрос. Я приступил к реализации управления шаговым двигателем с MasterScada, шаговый двигатель подключён к ардуино через драйвер а4988. При работе двигателя(задано направление и скорость вращения) наблюдается не плавное вращение, двигатель работает рывками, и происходит это в момент обмена данными между OPC-сервером и ардуино. При отключении OPC работа двигателя становится плавной, существует ли способ решения данной проблемы? OPC сервер настраивал как написано в примере.

      • существует, нужно «разделять» управление двигателем и передачу данных.

  • Семён не могли бы вы помочь.

    что может являться причиной?

    COM5.arduino:Ошибка опроса устройства

    COM5.arduino:Включен таймаут ошибки запроса 1

    arduino:Ошибка выполнения команды 3 <> в устройстве 1 from arduino:HOLDING_REGISTERS

    • Это скорее всего ошиблись с адресами регистров. функция не прочитала ваш регистр.