Разработка

индекс
203,40

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

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 — никак не подверждается, поэтому приходится принудительно читать, если требуется контроль записи.
+32
17 января 2010, 08:36
13

комментарии (24)

–2
jack7277 #
Спасибо, Кэп :)
Плюсанул.
+1
jack7277 #
Кстати, в каком месте программирование HMI — это ненормальное программирование? )))))
Из своего опыта можно попробовать написать про Simatic WinCC HMI, сенсорную панель от Дельты, и Питерскую Scada систему WinMAIS.
MAIS мне нравится тем, что ей для работы подойтет комп, начиная от Р166ММХ с 32ОЗУ.
0
demoded #
ненормально подразумевает, что не C/Delphi/Java и прочие более менее известные
0
jack7277 #
На производстве и в НИИ соответствующей направленности — это норма вообще-то )))
«Не всем повезло, мы не работаем в офисе» (с) почти ленинград
+1
Thunder #
>> HMI (Human-Machine-Interface) — широкое понятие, охватывающее инженерные решения,
>> обеспечивающие взаимодействие оператора с управляемыми им машинами. За термином
>> Человеко-Машинные интерфейсы подразумевается весь спектр панелей управления от
>> магнитол до пилотских кабин.

По-русски это называется АРМ(автоматизированное рабочее место) оператора. Пример русской программы для разработки АРМ — TraceMode. Подобного рода пакеты весьма занимательны, но имеют некоторую ограниченность. Например, трэйсмод хорошо симулирует АРМ оператора завода/цеха. А вообще программирование такого рода — вполне нормальное явление в промышленных масштабах )
0
Fortums #
По русски, то что описывает автор, называется ЧМИ.

АРМ слишком широкое понятие, профессионалы, если и используют эту аббревиатуру, то только чтобы некоторым Заказчикам было понятно о чем речь. Говорят например «АРМ диспетчера», но не говорят «АРМ компрессорной установки».

TraceMode, не среда разработки АРМ. В России эти пакеты называются SCADA (система диспетчерского контроля и управления), и предназначены для разработки SCADA.

Хотя для инженера получившего образование на западе — так называть софт не верно.
0
mt_ #
Писк-по-умолчанию при нажатии кнопки на панели уже через пару суток сведёт с ума любого рабочего/инженера, за этой панелью работающего.
0
demoded #
не сведет, работают они порой в таких условиях, что писка даже и не слышно!

пищалку можно отключить, можно оставить писк только на сообщения об ошибках
0
Fortums #
Навернув cкриптов на виртуальную кнопку — получаешь задержку при нажатии. Оператору нужно знать — отработала система нажатие, или нет. Зуммер в этом смысле и нужен.

Подошел, ткнут, звякнуло — ок.
0
seriyPS #
Охх… Вспоминаю как в супермаркетах штрихкод-сканеры пищат…
0
SegaZero #
Эх, вот сколько лет уже существуют продукты для упрощения жизни АСУшникам. Столько замечательных, умных, действительно мощных и продуманных систем.
Но даже в 21 веке, до сих пор весь гуи как будто в паинте набросали за 5 минут.
До сих пор без слез на скады не взглянешь, хоть и давно уже не работаю в области автоматизации. Но все еще помню, как мне бил по глазам интерфейс и как болели глаза от ужасных шрифтов и paint графики
0
Nesp #
+1 Мои глаза истекают кровью
0
side2k #
Году этак в 2007 был в командировке в Коми-Энерго, был свидетелем процесса разработки интерфейса для местной скады на флэше 8) А в диспетчерской у них была адская стена из видеокубов, после гигантских фанерок с лампочками (как можно увидеть, например, в фильме «Ночной дозор») показалось прорывом 8)
Софт в этой отрасли, как показывает практика, пишется почти всегда на скорую руку и пишется конторами, не знающими о существовании каких-либо нормальных методик разработки ПО. Сам несколько лет проработал в этой сфере.
0
SegaZero #
не совсем так. Большинство софта сделаны очень качественно. В основу бралось не удобство операторов, а надежность и устойчивость, и это правильно.
Интерфейсу скорее всего просто не уделили достаточно времени. Я тоже поработал по обе стороны баррикад и в принципе понимаю, почему настолько ужасен интерфейс. В условиях жесткой конкуренции выигрывает тот, кто дает больше функционала и работает устойчивее и быстрее.
Плохо, что ситуация меняется не так быстро, как того хотелось бы
0
demoded #
надо не забывать, что рассматриваемая панель рождена 5 лет назад имеет 320х200 экран и 64 цвета, весьма, неравномерной палитры. чтобы нарисовать красивый интерфейс надо к дизайнеру приставить пиксель-арт художника
0
SegaZero #
панель — да. а софт разработчика работает отнюдь не на этой панели, а речь о нем.
аппаратные ограничения устройств вполне понятны, но ведь можно проектировать интерфейс с их учетом
+1
side2k #
В том и беда, что часть софта(подозреваю, немалая) пишется вообще без понятия «проектирование». Например, видел диспетческую софтину(успешно продающуюся и работающую не на одном энергообъекте), где все сообщения выводятся шрифтом «Monotype Corsiva»(или чем-то подобным, названия не помню, наскоро глянул во Writer'е). Если подобное пролезает в промышленный софт, о каком проектировании вообще речь? 8)
0
SegaZero #
да даже тут на скринах есть шрифт system )
думаю тут банально все в сроки упирается. сколотят наспех тулзу, лишь бы работало.
0
side2k #
Да, да, сроки во главе угла.
К этому еще прикладывается нежелание тратить время и деньги на внедрение современных методик разработки программного обеспечения. Помню круглые глаза начальства, когда я излагал необходимость создания хотя бы ТЗ, не говоря уже о дизайн-доках.
«Это же мы в бумажках утонем!».
Удалось добиться мало чего — я кое-как внедрил пользование SVN, на своем компе развернул трекер(Mantis), когда хоть немного начали пользоваться, разрешили развернуть это дело на сервере. Когда я ушел оттуда, все довольно быстро заглохло само собой.
0
side2k #
Да какая там жесткая конкуренция — деньги крутятся весьма приличные, все на откатах, везде свои. Конкуренция больше в том, кто первее влезет со своим предложением и красивше подарки подарит принимающей стороне. Ездили как-то на сертификацию производимого нашей конторой оборудования и софта — в командировочные сразу были заложены деньги на эти «подарки».
Сроки, да, поджимают. Обычно всякие утрясания и согласования занимают столько времени, что когда начинает писаться софт, дедлайн уже «вчера».
Хотя я, конечно, не могу писать за всех, т.к. видел ситуацию лишь в рамках работы одной конторы(правда работающей во многих местах нашей страны).
0
SegaZero #
обычно скады приобретаются вместе с оборудованием, так что вначале битва идет там:)
большие деньги и откаты — это у нас везде так, не только в автоматизации. к сожалению.
тут на самом деле большая закулисная борьба за бабло. Хорошо хоть инженеры думают о безопасности и отказоустойчивости…
Работал в химической промышленности, до сих пор удивляюсь, как все не взлетело на воздух
0
side2k #
А я поработал(как уже, наверное, понятно из предыдущих постов) в энергетике, и тоже имею сходные ощущения 8)
А инженеры тоже разные бывают. Не гнушаются местами и студентов посадить: «Срочно-срочно надо сделать, через месяц уже должно работать у диспетчеров!!».
Но есть и толковые, да, и их, кстати, немало. Только развернуться им толком не дают, многие в итоге плюют и идут в другие места работать. Отрасль автоматизации из-за косности высших эшелонов, ставящих во главу угла попил денег, теряет много квалифицированных кадров.
0
jack7277 #
Как бы есть такое понятие как гарантированное время отклика интерфейса и реакция на событие. И как бы красоты тут неуместны.
0
SegaZero #
гарантированное время отклика можно прекрасно сделать и с приятным интерфейсом.
я не говорю о том что должны быть рюшечки и всякие свистоперделки типа подсветки синтаксиса скриптов

но банально сделать нормальные читаемые шрифты (не system) и понятное расположение элементов UI

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.