В прошлой статье описал подключение ModBUS-устройств к Linux
Эта статья об использовании подключения для вывода данных и управления приборами с удобного пользовательского интерфейса. В качестве такого интерфейса будем использовать страницу браузера (сайт). Такое решение получается удобным, быстрым, кроссплатформенным (запускающимся на всех устройствах, где есть браузер). А браузер, как известно, обращается к web-серверу и в свою очередь с ним обменивается данными. То есть будет система, в которой будет установлен вэб-сервер, который обменивается с нашими ModBUS-устройствами, и выводит данные в удобной для нас форме на страницу браузера.
Установка web-сервера Apache 2 на Linux
В терминале вводим команду
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
есть смысл перезагрузить компьютер.
2. Заходим в папку /var. Папку www открыть как root с контекстного меню. В открытой папке находим папку html. Открываем свойства из контекстного меню. В правах задаем полный доступ к папкам и файлам для пользователя от которого работаем (для начала можно и для всех задать). Закрываем окно папки открытое от администратора. Теперь нужно перезапустить сервисы, легче перезагрузить компьютер.
Теперь можно написать первую программу. Открываем папку /var/www/html. В ней создаем папку Primer. Заходим в эту папку, в ней созаем файл index.php. В файле можете написать
<?php echo 'Привет, МИР!'; ?>
и сохранить его. Затем в браузере набираем адрес localhost/Primer, и мы должны увидеть на странице браузера "Привет, МИР!".
Мы убедились, что apache и php работают.
Подключение приборов
В прошлой статье https://dzen.ru/a/aCLZIGBtABZip2Gz описывал как подключал и настраивал приборы. Здесь опишу в общих чертах.
Для работы с устройствами по протоколу Modbus используем консольную python-утилиту modbus-cli
Установка:
sudo apt install python3-pip
sudo pip3 install modbus_cli
Для обмена по ModBUS RTU RS485 используем преобразователь ОВЕН АС4. Определяется как Silicon Labs CP210x UART Bridge. К нему подключаем модуль аналогового ввода вывода МВ110-8А. Его настройки:
Датчик ДТС054-50М на канале 1, Модбас RTU 9600-8-N-1. Адрес 4.
Из инструкции находим, что нам подходит регистр 1 (Целочисленное значение показания 1-канала). Вводим в терминале:
modbus -b 9600 -s 4 -v /dev/ttyUSB0 1
получаем ответ:
Parsed 0 registers definitions from 1 files
Serial port /dev/ttyUSB0. Parameters: 9600 baud, 1 stop bit(s), parity: N, timeout 5.0s.
→ < 04 03 00 01 00 01 d5 9f >
← < 04 03 02 00 e7 34 0e > 7 bytes
← [231]
1: 231 0xe7
Обмен есть, мы получили температуру в целочисленном представлении, 1 знак после запятой нас вполне устраивает, для этого в программе будем полученное значение делить на 10.
Программа обмена
В папке html создаем еще один файл opros.php. В него записываем программу опроса, который будет происходить фоново на открытой странице.
<?php
$Temper = shell_exec("modbus -b 9600 -s 4 -v /dev/ttyUSB0 1");
$KonProbel = strripos($Temper, ' '); // Находим последний пробел в строке ответа
$Temper = substr($Temper, $KonProbel, 10);
$Temper = hexdec($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А: 23 ºС
Урра! получилось
В данном примере рассмотрели возможность чтения температуры. Можно легко добавить другие приборы, вывести их значения, записывать данные в файлы в базы данных. Затем строить графики по этим данным. А это уже SCADA-система. В PHP программировать такие вещи очень легко, при этом система будет занята только теми процессами, которые мы зададим, множество фоновых процессов запускаемых в различных SCADA не будут мешать работе. А возможности apache сервера по передаче этих данных в интернет и подключения к этим данным с любых устройств дает такой SCADA-системе очень широкие возможности, без привлечения дополнительных программ.