HMI (Human-Machine-Interface) — широкое понятие, охватывающее инженерные решения, обеспечивающие взаимодействие оператора с управляемыми им машинами. За термином Человеко-Машинные интерфейсы подразумевается весь спектр панелей управления от магнитол до пилотских кабин. HMI панели выпускают практически все гиганты электронной промышленности (Siemens, Motorolla, Mitsubishi). Я вам покажу как выглядит процесс разработки для панели GP2301 фирмы Pro-Face.
Создадим один экран с кнопочками и лампочками, усложненный требованиями ТЗ. Разработка будет вестись в родной среде Pro-Face GP Pro, программа имеет уже номер версии 7 и внутри все очень продумано и отшлифовано, что можно начинать разработку основываясь на опыте визуального программирования под Windows.
Вот так выглядит окно менеджера пректов, сейчас нам нужна только одна кнопка – редактор экранов [Screen].
В редакторе экранов создаем новый экран типа Base Screen.
На вновь созданный экран добавим 5 кнопочек, которые при нажатии инвертируют бит по заданному адресу (0100). При указании адреса биты задаются простым дописыванием порядкового номера бита к адресу:
Вся адресация 16-ти битная, байты приходится разгребать руками.
На этот же адрес и биты привяжем лампочки, которые будут загораться при установке определенного бита по адресу 0100.
Теперь с помощью утилиты Transfer и COM кабеля зальем проект в панель. Все нами нарисованное перед заливкой растеризуется ( да да именно так, потому что все примитивы в среде разработки векторные и прекрасно тянутся до любого размера ) и приводится в внутреннему 64-х цветному представлению.
Процесс заливки и тестовый запуск можно посмотреть на видео
Как всегда стандартные компоненты, при использовании на практических задачах, не подходят по каким-нибудь причинам. Так получилось и на этот раз. По ТЗ кнопочки должны изменять не бит, а записывать в нужный адрес свой номер 0, 1, 2, 3, или 4. В библиотеках компонентов такие кнопки есть, но вот лампочки есть только загорающиеся от битов.
Задачу решим следующим образом – кнопки будут записывать свой номер по адресу 0101, специальный скрипт будет устанавливать нужный бит по адресу 0100 в соответствии с тем что лежит в 0101. Существующие уже кнопки убирать с экрана не будем ( пусть останутся для обозначения места куда нажимать ), а поверх них положим прозрачную область чувствительную к нажатиям, называется она Touch Panel Input. Как видно на картинке над кнопками появилась прозрачная область, обозначенная сеткой из точек. В свойствах мы можем выбрать много всего интересного, но нам надо только устанавливать 16 битное слово по адресу 0101. В память записывается число заданное в поле Constant.
Функционал среды разработки позволяет писать небольшие скрипты, наша панель самая простая, она даже не умеет делить на дробные числа и ограничивается только целочисленной математикой, но есть модели со встроенным мат процессором и тогда в скрипте можно решать и тригонометрию и статистику. Скрипты называются D-Script и могут быть или глобальными, или выполнятся когда активен определенный экран. В окне добавления/редактирования скрита есть очень удобная панель инструментов слева, и даже небольшой помощник в написании кода, который возникает, когда мы начитаем писать адрес в памяти и помогает грамотно оформить обращение к ячейке памяти.
В нашем примере скрипт запускается от таймера каждую секунду и устанавливает биты в ячейке 0100 в зависимости от значения в 0101. Кроме таймера скрипт можно повесить на:
наш скрипт совсем простой:
В принципе все что от нас требуется мы реализовали. C контроллером панель общается через COM порт по стандарту RS232 или RS422. Сам протокол общения зависит от контроллера, фирменные Siemens и другие позволяют панели посылать прерывания в контроллер и вообще панель не работает пока не найдет контроллер. В нашем случае используется протокол Memory Link, по которому активным является только контроллер. Протокол позволяет контроллеру читать и писать в память панели. например:
[ESC]R 0100 — прочитает содержимое по адресу 0100, на что получит от панели в ответ
[ESC]A FFFF — если там записано FFFF
команда записи:
[ESC]W 0100, 000F — никак не подверждается, поэтому приходится принудительно читать, если требуется контроль записи.
Создадим один экран с кнопочками и лампочками, усложненный требованиями ТЗ. Разработка будет вестись в родной среде 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 — никак не подверждается, поэтому приходится принудительно читать, если требуется контроль записи.