Pull to refresh

Программирование интерфейсов промышленной автоматики

Reading time3 min
Views12K
HMI (Human-Machine-Interface) — широкое понятие, охватывающее инженерные решения, обеспечивающие взаимодействие оператора с управляемыми им машинами. За термином Человеко-Машинные интерфейсы подразумевается весь спектр панелей управления от магнитол до пилотских кабин. HMI панели выпускают практически все гиганты электронной промышленности (Siemens, Motorolla, Mitsubishi). Я вам покажу как выглядит процесс разработки для панели GP2301 фирмы Pro-Face.

Создадим один экран с кнопочками и лампочками, усложненный требованиями ТЗ. Разработка будет вестись в родной среде Pro-Face GP Pro, программа имеет уже номер версии 7 и внутри все очень продумано и отшлифовано, что можно начинать разработку основываясь на опыте визуального программирования под Windows.

Вот так выглядит окно менеджера пректов, сейчас нам нужна только одна кнопка – редактор экранов [Screen].


В редакторе экранов создаем новый экран типа Base Screen.



На вновь созданный экран добавим 5 кнопочек, которые при нажатии инвертируют бит по заданному адресу (0100). При указании адреса биты задаются простым дописыванием порядкового номера бита к адресу:
  • 010000 – нулевой бит по адресу 0100
  • 010015 – пятнадцатый бит по адресу 0100

Вся адресация 16-ти битная, байты приходится разгребать руками.



На этот же адрес и биты привяжем лампочки, которые будут загораться при установке определенного бита по адресу 0100.



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



Процесс заливки и тестовый запуск можно посмотреть на видео



Как всегда стандартные компоненты, при использовании на практических задачах, не подходят по каким-нибудь причинам. Так получилось и на этот раз. По ТЗ кнопочки должны изменять не бит, а записывать в нужный адрес свой номер 0, 1, 2, 3, или 4. В библиотеках компонентов такие кнопки есть, но вот лампочки есть только загорающиеся от битов.

Задачу решим следующим образом – кнопки будут записывать свой номер по адресу 0101, специальный скрипт будет устанавливать нужный бит по адресу 0100 в соответствии с тем что лежит в 0101. Существующие уже кнопки убирать с экрана не будем ( пусть останутся для обозначения места куда нажимать ), а поверх них положим прозрачную область чувствительную к нажатиям, называется она Touch Panel Input. Как видно на картинке над кнопками появилась прозрачная область, обозначенная сеткой из точек. В свойствах мы можем выбрать много всего интересного, но нам надо только устанавливать 16 битное слово по адресу 0101. В память записывается число заданное в поле Constant.



Функционал среды разработки позволяет писать небольшие скрипты, наша панель самая простая, она даже не умеет делить на дробные числа и ограничивается только целочисленной математикой, но есть модели со встроенным мат процессором и тогда в скрипте можно решать и тригонометрию и статистику. Скрипты называются D-Script и могут быть или глобальными, или выполнятся когда активен определенный экран. В окне добавления/редактирования скрита есть очень удобная панель инструментов слева, и даже небольшой помощник в написании кода, который возникает, когда мы начитаем писать адрес в памяти и помогает грамотно оформить обращение к ячейке памяти.



В нашем примере скрипт запускается от таймера каждую секунду и устанавливает биты в ячейке 0100 в зависимости от значения в 0101. Кроме таймера скрипт можно повесить на:
  • установку бита
  • сброс бита
  • установку или сброс бита
  • на ненулевой результат выполнения другого скрипта
  • на нулевой результат другого скрипта


наш скрипт совсем простой:
if ([w:0101]==0) {
[w:0100]=1
}
endif

if ([w:0101]==1) {
[w:0100]=2
}
endif

if ([w:0101]==2) {
[w:0100]=4
}
endif

if ([w:0101]==3) {
[w:0100]=8
}
endif

if ([w:0101]==4) {
[w:0100]=16
}
Endif

В принципе все что от нас требуется мы реализовали. C контроллером панель общается через COM порт по стандарту RS232 или RS422. Сам протокол общения зависит от контроллера, фирменные Siemens и другие позволяют панели посылать прерывания в контроллер и вообще панель не работает пока не найдет контроллер. В нашем случае используется протокол Memory Link, по которому активным является только контроллер. Протокол позволяет контроллеру читать и писать в память панели. например:
[ESC]R 0100 — прочитает содержимое по адресу 0100, на что получит от панели в ответ
[ESC]A FFFF — если там записано FFFF

команда записи:
[ESC]W 0100, 000F — никак не подверждается, поэтому приходится принудительно читать, если требуется контроль записи.
Tags:
Hubs:
Total votes 46: ↑39 and ↓7+32
Comments24

Articles