Часто, на промышленных предприятиях, возникает необходимость удобного представления технологических процессов с возможностью вмешиваться в их ход. Данную функциональность реализуют SCADA системы или АРМ (автоматизированное рабочее место). В посте речь пойдет о том, как с минимальными трудозатратами создать полноценное место оператора.
Графический редактор
Будем пользоваться редактором векторной графики Inkscape[1]. Этот редактор является свободно распространяемым под лицензией GNU GENERAL PUBLIC LICENSE. Данный инструмент позволяет сохранять графику в виде svg[2] Scalable Vector Graphics. Что по сути представляет из себя xml-файл.
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
</head>
<body>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="drawing.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.64"
inkscape:cx="-11.810742"
inkscape:cy="648.32115"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:window-width="1301"
inkscape:window-height="744"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1">
<inkscape:grid
id="grid4044"
type="xygrid" />
</sodipodi:namedview>
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
...
</svg>
<script>
$(document).ready(function(){
$('.main').click( function(){
r = 'rgb(255, 0, 0)';
g = 'rgb(0, 255, 0)';
b = 'rgb(0, 0, 255)';
fill = $(this).css( 'fill' );
newfill = r;
if( fill == newfill )
newfill = b;
$(this).css( 'fill', newfill );
});
});
</script>
</body>
</html>
Программирование
Программирование на клиенте производится на javascript(jquery[3]). Из кода видно, что к каждому объекту управления/сигнализации присвоен сласс main. Это дает возможность с помощью javascript поменять его свойства. Можно придумать любые комбинации — ограничено только фантазией. Данный способ намного проще реализации на QT например или Delphi. Здесь не нужно отслеживать координаты объектов, очень просто реагировать на события мыши. На сервере программирование может вестись на любом языке в зависимости от аппаратуры с которой предполагается сопрягать АРМ. Это может быть например ethernet modbus, с записью данных в SQLite, данная схема достаточно просто реализуется на C — есть все необходимые библиотеки, хотя — возможна любая другая конфигурация. Обмен данными между клиетном и сервером производится при помощи AJAX [4].
Заключение
Цель поста — дать конкретные рекомендации для создания и разворачивания автоматизированного рабочего места. Наиболее сложным и важным для пользователя звеном современных АРМов является возможность создавать/изменять схемы отображения технологических процессов. Свободно распространяемая программное обеспечение Inkscape — является очень удобным инструментом и бесплатным, что немаловажно. Вторым сложным звеном является непосредственно программа отображения. И тут процесс очень напоминает создание сайта. Первый этап — верстка окна АРМ, второй — непосредственно программирование — в основном на javascript. Взаимодействие клиент-сервис также достаточно просто — при помощи AJAX. В данной реализации АРМ не привязан к рабочему месту, место оператора должно включать в себя лишь компьютер, интернет и браузер. Данная система достаточно гибка: контроль/управление могут вестись из любой точки земного шара с использованием планшетов, телефонов — любых устройств, на которых возможно функционирование интернет браузеров.
- 1. http://www.inkscape.org
- 2. http://en.wikipedia.org/wiki/Scalable_Vector_Graphics
- 3. http://jquery.com/
- 4. http://en.wikipedia.org/wiki/Ajax_%28programming%29
Автор: vidoff