Статья:

Применение веб-технологий при автоматизации систем управления

Конференция: XL Студенческая международная заочная научно-практическая конференция «Молодежный научный форум: технические и математические науки»

Секция: Технические науки

Выходные данные
Койдо В.В. Применение веб-технологий при автоматизации систем управления // Молодежный научный форум: Технические и математические науки: электр. сб. ст. по мат. XL междунар. студ. науч.-практ. конф. № 11(40). URL: https://nauchforum.ru/archive/MNF_tech/11(40).pdf (дата обращения: 20.08.2018)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

Применение веб-технологий при автоматизации систем управления

Койдо Владислав Вадимович
студент, Армавирский механико-технологический институт (филиал) ФГБОУ ВО «Кубанский государственный технологический университет», РФ, г. Армавир
Моногаров Сергей Иванович
научный руководитель, канд. техн. наук, доц., Армавирский механико-технологический институт (филиал) ФГБОУ ВО «Кубанский государственный технологический университет», РФ, г. Армавир

 

С каждым днём автоматизированные системы управления (далее АСУ) находят всё большее распространение в современном мире. Количество устройств, которые в совокупности друг с другом позволяют их собирать очень велико. Сегодня мы рассмотрим организацию базового элемента такой системы с применением современных компьютерных устройств и веб-технологий. Под базовым элементом подразумевается устройство, находящиеся на верхнем уровне иерархии АСУ технологических процессов (рис. 1) [1].

 

Рисунок 1. Пример иерархии АСУ

 

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

Устройства, способные организовать сформированную выше задачу достаточно широко представлены на рынке. По сути это может быть и обычный ПК. Однако, для данных задач он всё-таки не предназначен, хотя бы потому что в системных платах мы не найдем подходящих для работы интерфейсов. Да, их можно разработать или найти и интегрировать, однако это не рациональный подход, учитывая, что их нужно будет «подружить» с компьютером на софтверном уровне. Другое дело – программируемые контроллеры и микрокомпьютерные устройства. Вторые совсем недавно начали набирать обороты, с развитием технологических процессов и микропроцессорных архитектур. В рамках данной статьи мы рассмотрим реализацию на примере одноплатного микрокомпьютера Raspberry Pi.

Raspberry Pi (далее RPi) представляет собой микрокомпьютер, расположенный всего на одной плате размером с банковскую карту. В распоряжении последней модели находится четырёхъядерный процессор на архитектуре ARM Cortex-A53 с тактовой частотой 1.2 ГГц и 1 Гб оперативной памяти. Отличительной особенностью данного устройства является наличие интерфейса GPIO (40 пинов в последней версии, 26 ранее), позволяющего управлять внешними устройствами. Помимо этого, на плате располагаются 4 USB-порта, LAN-порт, WiFi адаптер, Bluetooth 4.1 и пр. В сравнении с программируемыми контроллерами, позволяющими выполнять тот же спектр задач, RPi обладает достаточно низкой ценой, а в сравнении с другими микрокомпьютерами имеет высокую популярность у пользователей, что означает хорошую техническую поддержку со стороны [2].

Официально поддерживаются десятки различных операционных систем, в том числе на Windows. Мы будем рассматривать реализацию на OS Raspbian. Писать программный код и тестировать под нее можно даже не имея самого Raspberry Pi. Развёртывание среды на компьютере осуществляется с помощью эмулятора QEMU. Писать программы можно с помощью разных языков программирования, всё что нам нужно – это подружить их с операционной системой. Это могли быть и C, и Python и даже Pascal, однако в нашем случае лучше всего будет воспользоваться PHP, как наиболее распространённым и подходящим для веб-приложений.

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

Приведем несколько примеров применения RPi на практике:

·     Компьютерное оборудование. Довольно часто «малинку» (так RPi могут называть в народе) используют для создания переносных ПК. Кроме того, приложив немного усилий можно добавить встроенную батарею и сделать его полностью портативным.

·     Сетевое оборудование. Как правило, это обычные точки доступа Wi-Fi. Однако, можно организовать и закрытую, локальную сеть. Также для передачи данных можно использовать силовую линию

·     Мультимедийное оборудование. То же самое портативное компьютерное, только более узконаправленное. Различные видео/фото камеры, приборные панели, «умное» зеркало, ламповые часы и ещё целое множество экзотических изобретений.

·     Робототехника. Учитывая компактные размеры, RPi можно уместить в небольших роботов, например, летательных дронов.

·     Вычислительные сети. Как показала практика, иногда одной только платой RPi дело может не закончиться, ведь их можно объединить в единую сеть для повышения вычислительной мощности.

Перейдём ближе к сути. На рисунке 2 приведена распиновка уже неоднократно упоминаемого интерфейса GPIO (40 пинов). Каждый порт способен работать в режиме ввода либо вывода. Этот режим управляется полностью программным способом.

 

Рисунок 2. Распиновка Raspberry Pi B+/B2

 

Стоит учитывать, что все выводы работают на напряжении 3,3 В, поэтому не стоит забывать об известных мерах предосторожности при подключении устройств. Большее напряжение может полностью вывести из строя RPi. Чтобы узнать все подробности работы с интерфейсом, следует поискать информацию по процессору BCM2835 (именно на нём функционирует RPi) [7].

Итак, нам необходимо построить мост. Мост, который будет связывать два «берега» – приложение, запущенное на веб-сервере и GPIO интерфейс. Но прежде нам бы не помешало подготовить эти самые берега. Чтобы максимально упростить управление интерфейсом входов/выходов, можно использовать библиотеки. Одна из наиболее популярных – wiringPi.

Сразу следует сделать оговорку, что все последующие команды потребуют привилегии суперпользователя. Так как упомянутая выше библиотека не доступна в виде бинарного пакета, сначала мы установим утилиту git.

sudo apt-get install git-core

Теперь копируем исходники библиотеки.

git clone git://git.drogon.net/wiringPi

А затем устанавливаем её

cd wiringPi

./build

Возможно самым легким способом взаимодействия PHP с RPi является функция shell_exec(). Как правило, она всегда доступна в стандартном наборе функций PHP и не требует дополнительных библиотек. Она выполняет команды программной оболочки, и по сути является неким мостом между RPi и PHP. В простейшем случае, shell_exec() используется для запуска скриптов на Python, который исполняет различные задачи и контролирует GPIO. В нашем случае, вместо скрипта на Python команды будет исполнять библиотека wiringPi.

Удостовериться, что wiringPi установлен и работает, можно с помощью команды gpio –v. Она должна вернуть текущую версию библиотеки с другой базовой информацией. Дальше выполним gpio_readall, чтобы просмотреть подробную схему GPIO. Теперь, чтобы отдать команду интерфейсу, в коде PHP пишем

shell_exec("/usr/local/bin/gpio -g команда");

Итак, время практики. Конечно, в рамках статьи невозможно рассмотреть организацию большой системы управления, однако, мы пройдём по нескольким основным элементам. Начнём с простого – управление LED элементом. Подключим последовательно соединённые резистор и светодиод, скажем, к 17 и 6 пину (рис. 3).

 

Рисунок 3. Схема подключения диода

 

<?php

 shell_exec("/usr/local/bin/gpio -g mode 17 out");

  if ($_GET['on']) {

           shell_exec("/usr/local/bin/gpio -g write 17 1");

           $msg = "Светодиод включен";

  } else if ($_GET['off']){

           shell_exec("/usr/local/bin/gpio -g write 17 0");

           $msg = "Светодиод выключен";

  }

?>

<!DOCTYPE html>

<html>

 <head>

 <meta charset="utf-8" />

 <title>Управление LED</title>

 </head>

 <body>

           <form method="get" action="index.php">

                     <input type="submit" name="on" value="ON" >

                     <input type="submit" name="off" value="OFF" >

 </form>

           <?=$msg?>

 </body>

</html>

В данном приложении семнадцатый пин контролируется при помощи упомянутой ранее функции shell_exec(). Сначала мы устанавливаем его в режим вывода, а затем в зависимости от полученной в массиве GET переменной выполняем включение или выключение диода.

 

Рисунок 4. Демонстрация работы скрипта включения/выключения диода

 

Иногда возникает необходимость держать выход включенным в течении некоторого времени, а затем выключить. Например, с целью управления транзисторного переключателя (рис. 5). В таком случае используем функцию sleep(), которая в качестве аргумента принимает вещественную переменную со значением времени задержки в секундах.

 

Рисунок 5. Схема подключения управляющего транзистора

 

if ($_GET['switch']) {

           shell_exec("/usr/local/bin/gpio -g write 17 1");

           sleep (1);

           shell_exec("/usr/local/bin/gpio -g write 17 0");

           $msg = "Выполнено";}

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

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

if ($_GET['info']) {

           $status = shell_exec("/usr/local/bin/gpio -g mode 8 in");

           // обработка полученной информации}

Итак, мы разобрались с двумя основными видами операций – ввода и вывода. Дальше мы можем начинать экспериментировать и создавать собственные веб-приложения и решения. Рассмотрим пару направлений, с которых стоит начать:

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

·     Организация библиотеки GPIO контроля на стороне PHP. В нашем случае, мы используем wiringPi для связи между системой и интерфейсом входов/выходов. Однако, для унификации программного кода не помешает создать такую же библиотеку (группу функций, класс) на стороне PHP. Также можно использовать уже готовые решения, например, php-gpio.

·     Организация базы данных. БД может понадобится при сохранении информации на сервер (например, показания датчика температуры с последующим построением графика). Здесь можно использовать как различные SQL вариации, например, MySQL и SQLite, так и собственные системы.

Дальнейшая работа с PRi и АСУ будут сильно зависеть от ваших инженерских навыков, опыта программирования и работы с компьютерными системами, и, что не мало важно, фантазии.

 

Список литературы:
1. Системы автоматизации, автоматизация технологических процессов, АСУ ТП – [Электронный ресурс] – URL: http://smi.su/product/sistemy_avtomatizatsii/ (Дата обращения: 20.09.2016).
2. Raspberry Pi – Википедия – [Электронный ресурс] // Wikipedia URL: https://ru.wikipedia.org/wiki/Raspberry_Pi (Дата обращения: 18.11.2016).
3. GPIO: Raspberry Pi Models A and B – Raspberry Pi Documentation – [Электронный ресурс] // Raspberry Pi - Teach, Learn, and Make with Raspberry Pi URL: https://www.raspberrypi.org/documentation/usage/gpio/ (Дата обращения: 20.09.2016).
4. PHP on Raspberry Pi >> Raspberry Pi Geek – [Электронный ресурс] – URL: http://www.raspberry-pi-geek.com/Archive/2014/07/PHP-on-Raspberry-Pi#art... (Дата обращения: 12.11.2016).
5. WiringPi – библиотека работы с GPIO. Часть 1 – [Электронный ресурс] – URL: http://raspberrypi.ru/blog/readblog/578.html (Дата обращения: 20.11.2016).
6. BCM2835 ARM Peripherals – [Электронный документ PDF] – URL: https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Perip... (Дата обращения: 20.11.2016).