LINUX.ORG.RU

Работа с ModBUS-устройствами из браузера

 , ,

Работа с ModBUS-устройствами из браузера

1

2

В прошлой статье я описал подключение ModBUS-устройств к Linux. Нынешняя статья – об использовании подключения для вывода данных и управления приборами с удобного пользовательского интерфейса.

В качестве такого интерфейса мы будем использовать страницу браузера (сайт). Такое решение получается удобным, быстрым, кроссплатформенным запускающимся на всех устройствах, где есть браузер). А браузер, как известно, обращается к web-серверу и в свою очередь с ним обменивается данными. То есть будет система, в которой будет установлен веб-сервер, который обменивается с нашими ModBUS-устройствами, и выводит данные в удобной для нас форме на страницу браузера.

Установка web-сервера Apache 2 на Linux (на примере Debian)

В терминале вводим команду

sudo apt-get install apache2

Для проверки установки вводим в браузере localhost. Должна появится страница приветствия. Настраивать подключения нет необходимости, потому что будем работать на одном компьютере. Для программирования нам понадобится скриптовый язык PHP. Установка осуществляется командой:

sudo apt-get install php

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

  1. Удобнее, когда apache запускается от основного пользователя (по умолчанию www-data). Для изменения из терминала открываем файл конфигурации sudo nano /etc/apache2/envvars и меняем переменные
export APACHE_RUN_USER=(имя пользователя)
export APACHE_RUN_GROUP=(имя пользователя) 

Сохраняем файл. Добавляем пользователя www-data в группу dialout:

sudo adduser www-data dialout

есть смысл перезагрузить компьютер.

  1. Заходим в папку /var. Папку www открыть как root с контекстного меню. В открытой папке находим папку html. Открываем свойства из контекстного меню. В правах задаем полный доступ к папкам и файлам для пользователя от которого работаем (для начала можно и для всех задать). Закрываем окно папки открытое от администратора. Теперь нужно перезапустить сервисы, легче перезагрузить компьютер. Теперь можно написать первую программу. Открываем папку /var/www/html. В ней создаем папку Primer. Заходим в эту папку, в ней созаем файл index.php. В файле можете написать
<?php  echo 'Привет, МИР!';  ?>  

и сохранить его. Затем в браузере набираем адрес localhost/Primer, и мы должны увидеть на странице браузера

«Привет, МИР!».

Мы убедились, что apache и php работают.

Подключение приборов

В прошлой статье я описывал как подключал и настраивал приборы. Здесь опишу в общих чертах.

Установка утилиты (более подробно на https://github.com/epsilonrt/mbpoll) :

sudo apt install mbpoll

Для обмена по ModBUS RTU RS485 используем преобразователь ОВЕН АС4. Определяется как Silicon Labs CP210x UART Bridge. К нему подключаем модуль аналогового ввода вывода МВ110-8А. Его настройки: Датчик ДТС054-50М на канале 1, Модбас RTU 9600-8-N-1. Адрес 4. Из инструкции находим, что нам подходит регистр 1 (Целочисленное значение показания 1-канала). Вводим в терминале:

mbpoll -1 -q -a 4 -b 9600 -P none -o 1 -r 2 /dev/ttyUSB0 

получаем ответ:

[2]: 285

Обмен есть, мы получили температуру в целочисленном представлении, 1 знак после запятой нас вполне устраивает, для этого в программе будем полученное значение делить на 10.

Программа обмена

В папке html создаем еще один файл opros.php. В него записываем программу опроса, который будет происходить фоново на открытой странице.

<?php
$Temper = shell_exec("mbpoll -1 -q -a 4 -b 9600 -P none -o 1 -r 2 /dev/ttyUSB0");

$KonProbel = strripos($Temper, ' ');     // Находим последний пробел в строке ответа

$Temper = substr($Temper, $KonProbel, 10);

$Temper = $Temper/10;       // Преобразовываем в dec

echo "Температура от МВ 110-8А: $Temper ºС<br><br>";
?>

В файле index.php напишем скрипт для запуска фоновой задачи opros.php

<div class="container" >
<div class="row">
<div class="col-12">
<h2>
<div id="content"></div>
</h2>
</div>
</div>
</div>
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
function timer(){   // функция, которая запрашивает данные с сервера
$.ajax({        // вызываем встроенную функцию, которая поможет нам получить данные с сервера
url: "opros.php",   // какой скрипт серверу нужно выполнить
cache: false,   // предыдущие ответы не сохраняем
success: function(html){   // если всё хорошо, отправляем ответ от сервера на страницу в блок content
$("#content").html(html);
}
});
}
$(document).ready(function(){   // как только страница полностью загрузилась
timer();
setInterval('timer()',1000);   // начинаем каждую секунду запрашивать новые данные
});
</script>

<?php   echo 'Урра! получилось' ?> ;     

Сохраняем и обновляем страницу в браузере localhost/Primer. Должно получиться:

Температура от МВ 110-8А: 28.5 ºС

Урра! получилось

В данном примере мы рассмотрели возможность чтения температуры. Можно легко добавить другие приборы, вывести их значения, записывать данные в файлы в базы данных. Затем строить графики по этим данным. А это уже SCADA-система. В PHP программировать такие вещи очень легко, при этом система будет занята только теми процессами, которые мы зададим, множество фоновых процессов запускаемых в различных SCADA не будут мешать работе. А возможности apache сервера по передаче этих данных в интернет и подключения к этим данным с любых устройств дает такой SCADA-системе очень широкие возможности, без привлечения дополнительных программ.

Здесь используется более оптимизированная утилита mbpoll. Такой же текст с использованием утилиты modbus-cli есть на Дзене



Проверено: hobbit ()
Последнее исправление: victorsemv (всего исправлений: 9)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.