Глава 4. Конфигурирование HMI-проекта

Содержание

4.1. Процесс отображения HMI (Display)
4.1.1. Создание мнемосхем
4.1.2. Редактор мнемосхем. Свойства мнемосхемы
4.1.3. Редактирование мнемосхемы
4.1.3.1. Добавление компонентов
4.1.3.2. Выделение и перемещение компонентов
4.1.4. Элементы мнемосхем палитры Photon. События и действия
4.1.4.1. Контейнер (PtPane)
4.1.4.2. Растровое изображение (PtImage)
4.1.4.3. Индикатор прогресса (PtProgress)
4.1.4.4. Текст (PtLabel).
4.1.4.5. Поле ввода (PtText)
4.1.4.6. Кнопка (PtButton)
4.1.5. Скрипты процесса отображения
4.1.5.1. Подпрограммы
4.1.5.2. Другие элементы ветки Cкрипты
4.1.6. Процессы отображения в QNX-проекте
4.2. Графики
4.3. Протокол
4.4. Пользователи

Главное предназначение HMI-проекта - организация графического интерфейса для доступа к данным контроллера. Также, используя учетные записи HMI-проекта, можно разделить доступ к данным между различными пользователями.

Главная особенность HMI-проекта S3-IDE - его кроссплатформенность. То есть доступ к данным QNX-машины может быть организован как под Windows, так и под Linux, и вообще говоря, под любой операционной системой, для которой существует полноценная реализация виртуальной машины Java (Java Runtime Environment). Нет нужды создавать отдельный проект для каждой платформы, однажды созданный проект запустится везде. Разработчик системы автоматизации не привязан к какой-то одной операционной системе, он может выбрать ее сам. Такой подход позволяет снизить не только затраты на разработку, но и общую стоимость системы. Систему можно удешевить использованием свободно распространяемых дистрибутивов операционных систем, тогда сама собой отпадет проблема лицензирования операционной системы для каждого рабочего места оператора. Сильно уменьшается также проблема антивирусной защиты машин операторов, что повышает надежность системы (например, на сегодняшний день сколько-нибудь опасных вирусов для UNIX-подобных систем нет).

4.1. Процесс отображения HMI (Display)

4.1.1. Создание мнемосхем

Для организации интерфейса оператора необходимо создать хотя бы один экран-мнемосхему в ветке Display, что мы сейчас и сделаем:

Рисунок 4.1. Добавление мнемосхемы в HMI-проект

Добавление мнемосхемы в HMI-проект


В появившемся диалоге нужно дать новой мнемосхеме Имя, под которым она будет известна в проекте, Заголовок, который будет отображаться как заголовок окна (если мнемосхема будет временной, у постоянной мнемосхемы нет заголовка окна), задать положение мнемосхемы относительно верхнего левого угла (поля X и Y) и размеры в пикселах.

Рисунок 4.2. Диалог Новая мнемосхема

Диалог Новая мнемосхема


4.1.2. Редактор мнемосхем. Свойства мнемосхемы

Если дважды щелкнуть по элементу "MainScreen" в Дереве проекта, мнемосхема откроется в основном окне для редактирования. Окно S3-IDE c открытой мнемосхемой выглядит следующим образом:

Рисунок 4.3. S3-IDE c открытой мнемосхемой

S3-IDE c открытой мнемосхемой


Подробно редактор мнемосхем описан в разделе «Разработка мнемосхем» справки, мы остановимся на некоторых моментах. Редактор мнемосхем позволяет добавлять/удалять компоненты, изменять их свойства, а также добавлять/удалять события и действия. Сама мнемосхема имеет набор свойств, таких как:

  • Имя. Об этом уже было сказано выше. Это свойство изменить нельзя.

  • Цвет фона. Любой. Для задания можно ввести его в виде трех чисел в формате RGB, разделенных запятыми, а можно нажать на кнопку рядом со значением и выбрать цвет из палитры.

  • Заголовок. Это свойство, в отличие от имени, менять можно.

  • Тип мнемосхемы. Значения могут быть следующими:

    • Постоянная. Такую мнемосхему нельзя закрыть, она открывается автоматически при запуске проекта. В секции Display должна хотя бы одна мнемосхема должна быть постоянной.

    • Временная мнемосхема имеет кнопку Закрыть, как и обычное окно. Открывается она с помощью действия Открыть мнемосхему.

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

В нашем проекте будет присутствовать одна постоянная мнемосхема - для отображения установки, и одна временная - для редактирования системных настроек.

О разделе Безопасность свойств компонентов вообще и мнемосхемы в частности мы поговорим при рассмотрении учетных записей пользователей.

4.1.3. Редактирование мнемосхемы

4.1.3.1. Добавление компонентов

Есть несколько способов поместить компонент на мнемосхему:

  • Выбрать компонент в Палитре, нажимая на его изображение и, не отпуская кнопки мыши, перетащить его в нужное место на мнемосхеме.

  • Вызвать правой кнопкой контекстное меню, выбрать нужный компонент из палитры. Затем поместить курсор в требуемую точку и нажать левую кнопку.

Рисунок 4.4. Палитра с компонентами

Палитра с компонентами


Рисунок 4.5. Меню редактора мнемосхем

Меню редактора мнемосхем


4.1.3.2. Выделение и перемещение компонентов

Компоненты мнемосхемы отображаются также в виде дерева в окне Дерево компонентов. Компонент, выделенный в этом окне, автоматически выделяется в редакторе мнемосхем, и наоборот.

Рисунок 4.6. Окно Дерево компонентов

Окно Дерево компонентов


Чтобы выделить компонент, нужно нажать на нем левой кнопкой мыши.

Чтобы выделить несколько компонентов:

  • Нажмите и удерживайте Ctrl, нажимая при этом на компоненты, которые нужно выделить.

  • Удерживая левую кнопку мыши, "нарисуйте" в поле редактора прямоугольник - все компоненты, попавшие в него целиком, будут выделены.

  • Выделите в Дереве компонентов первый компонент из тех, которые должны попасть в выделение, затем нажмите Shift и выделите последний.

Компоненты могут быть вложены в контейнер (позже остановимся на этом подробнее). Компонент, вложенный в контейнер, выделяется так же, как и невложенный компонент. Контейнер, содержащий компонент, можно выделить, если сначала просто выделить компонент, а затем удерживая Shift нажать левой кнопкой на нем же еще раз.

Несколько компонентов можно выровнять по краю. Для этого на панели инструментов редактора предусмотрены четыре кнопки - для выравнивания по верхнему, нижнему, левому и правому краю. Для выравнивания выделите несколько компонентов и нажмите нужную кнопку. Выравнивание будет выполнено по первому выделенному компоненту (он выделяется рамкой белого цвета, остальные - желтого).

Группы компонентов можно выровнять по высоте, ширине, можно выстроить их в таблицу. Выравнивание размеров работает так же, как выравнивание положения. Для всех этих операций имеются соответствующие кнопки на панели инструментов редактора. При выравнивании компонентов в таблицу вы увидите диалог, задающий параметры выравнивания:

Рисунок 4.7. Выравнивание компонентов в таблицу

Выравнивание компонентов в таблицу


Здесь Vertical gap и Horizontal gap - расстояния соответственно между строками и столбцами в пикселах.

Также для выравнивания можно воспользоваться контекстным меню:

Рисунок 4.8. Выравнивание компонентов с помощью меню

Выравнивание компонентов с помощью меню


Перемещать компоненты на мнемосхеме можно двумя способами:

  • Выделить и перетащить мышью

  • Выделить и перемещать с помощью клавиш Ctrl+Left(Right,Up,Down)

4.1.4. Элементы мнемосхем палитры Photon. События и действия

Это основная палитра редактора мнемосхем в S3-IDE. Название ее происходит от имени графической среды операционной системы QNX. Компонентов, которые содержатся в палитре, достаточно для реализации сложных пользовательских интерфейсов.

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

  • генерируемые действиями оператора (нажатие кнопок мыши, нажатие клавиш, открытие/закрытие мнемосхем и т.д.)

  • генерируемые системой (изменение переменной или тревоги)

Создание/удаление и редактирование событий и действий выполняется в окне События и Действия. События и действия можно копировать между компонентами, как поодиночке, так и группами.

4.1.4.1. Контейнер (PtPane)

Контейнер может содержать в себе любые компоненты. Он предназначен для группировки компонентов на мнемосхеме. Это удобно как при редактировании, так и при управлении отображением содержимого мнемосхемы. Добавим на мнемосхему контейнер, назовем его HeaterPane(имя изменим в окне Свойства). Сделаем его фон прозрачным (для этого нужно стереть содержимое поля Цвет фона и нажать Enter).

Рисунок 4.9. Контейнер

Контейнер


Для добавления нового компонента в контейнер нужно:

  • Выделить контейнер, затем вызвать меню и выбрать компонент

  • Выбрав компонент в Палитре, перетащить его в контейнер.

4.1.4.2. Растровое изображение (PtImage)

Вы можете помещать на мнемосхему растровые изображения в формате JPEG, PNG, GIF. Пусть контейнер HeaterPane, созданный ранее, содержит компненты, относящиеся к нагревателю. Поместим в него изображение самого нагревателя. Для этого сначала поместим в контейнер одним из описанных выше способов компонент Изображение. Затем вызовем окно свойств изображения и выберем файл, который будем использовать в качестве картинки.

Рисунок 4.10. Выбор изображения

Выбор изображения


Рисунок 4.11. Контейнер с изображением

Контейнер с изображением


Изображение можно менять в зависимости от значения переменной. Допустим, с помощью пиктограммы лампочки нужно индицировать включенное состояние клапана подачи воды. Добавим на мнемосхему изображение лампочки в выключенном состоянии, затем добавим к изображению событие Изменение переменной:

Рисунок 4.12. Добавление события к изображению

Добавление события к изображению


Рисунок 4.13. Свойства события Изменение переменной

Свойства события Изменение переменной


Теперь добавим к событию действие Сменить изображение.

Рисунок 4.14. Добавление действия Сменить изображение

Добавление действия Сменить изображение


В появившемся диалоге для добавления изображения нажмите кнопку Добавить, выберите изображение для значения 0, затем снова нажмите Добавить, выберите изображение для значения 1. Изображения можно перемещать по списку значений переменной, просто перетаскивая их мышью.

Рисунок 4.15. Свойства действия Сменить изображение

Свойства действия Сменить изображение


Вы можете заметить, что имя переменной, значение которой используется, состоит из двух частей. К имени переменной, которое было дано ей при объявлении, добавился префикс в виде QNXServer@, что означает, что переменная принадлежит узлу QNXServer.

Подсказка

Помните, что для того, чтобы обратиться к переменной, находящейся на другом узле, имя переменной должно иметь формат имя_узла@имя_переменной. При выборе переменных через соответствующий диалог редактор событий и действий автоматически дополняет имена префиксом, но там, где имена переменных вводятся вручную, префикс также нужно дописывать вручную.

4.1.4.3. Индикатор прогресса (PtProgress)

Компонент Прогресс может использоваться для вывода на экран значения аналоговой переменной в виде столбика (в случае, если известны пределы изменения переменной). Добавим индикатор уровня к нашему изображению нагревателя.

Рисунок 4.16. Компонент Прогресс

Компонент Прогресс


Чтобы отобразить значение переменной, нужно добавить к событиям компонента событие Изменение переменной и привязать к нему действие Вывести значение.

Рисунок 4.17. Добавление события

Добавление события


Рисунок 4.18. Добавление действия

Добавление действия


Появится диалог, запрашивающий параметры отображения значения. В нем можно выбрать из определенных ранее границ или ввести верхний и нижний пределы вручную.

Рисунок 4.19. Диалог Свойства действия

Диалог Свойства действия


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

Рисунок 4.20. Окно редактирования события

Окно редактирования события


4.1.4.4. Текст (PtLabel).

Компонент Текст предназначен для отображения текстовой информации. Текст может быть статическим, а может содержать значение переменной. Добавим в контейнер поле, в котором будем выводить температуру нагревателя.

Рисунок 4.21. Текст

Текст


Добавим к компоненту событие Изменение переменной, затем действие - Вывести значение.

Рисунок 4.22. Добавление действия к компоненту Текст

Добавление действия к компоненту Текст


Появится диалог, запрашивающий формат выводимого значения. Введем строку, как показано на рисунке.

Рисунок 4.23. Параметры вывода значения для компонента Текст

Параметры вывода значения для компонента Текст


Запись %.1v означает «значение переменной с точностью 1 знак после запятой». Остальной текст выведется без изменений (символ "%" нужно экранировать, т.е. чтобы вывести его, нужно вписать в поле "%%").

4.1.4.5. Поле ввода (PtText)

Компонент Поле ввода предназначен для отображения и редактирования значения переменной. Добавим в контейнер поле, в котором будем задавать требуемое значение температуры. Чтобы не форматировать новый компонент (допустим, нужно, чтобы поле выглядело как то, в котором отображается температура - цвет фона был тот же, границы и пр.), скопируем текстовое поле, а затем превратим его в поле ввода. Все свойства, а также события и действия, наследуются измененным компонентом, если его новый тип имеет такие свойства и способен содержать такие события и действия. Можно убедиться в этом - новый компонент унаследовал не только свойства, но и событие Изменение переменной (правда, в данном случае оно нас не интересует).

Рисунок 4.24. Изменение типа компонента

Изменение типа компонента


Чтобы привязать переменную к полю ввода, нужно добавить к нему событие Редактирование. Потребуется выбрать переменную для редактирования, формат вывода переменной в поле (как для компонента Текст), также опционально можно ввести сообщение, которое будет выводиться в протокол при редактировании поля. Если отметить опцию Подтверждать ввод, система при нажатии клавиши Enter будет запрашивать подтверждение.

Рисунок 4.25. Свойства события Редактирование

Свойства события Редактирование


Добавим к полю заголовок. Проделаем те же операции для сигнала уровня в нагревателе (добавим текстовое поле для отображения значения и поле ввода для задания значения). Получим следующее:

Рисунок 4.26. Готовое изображение нагревателя

Готовое изображение нагревателя


4.1.4.6. Кнопка (PtButton)

Компонент Кнопка предназначен для реализации ввода пользователя посредством нажатия кнопки мыши. Компонент также может содержать текст или изображение.

Добавим на мнемосхему изображение клапана подачи воды и кнопку включения его.

Рисунок 4.27. Кнопка

Кнопка


Пусть первое нажатие кнопки посылает команду клапану включиться, а второе нажатие - выключиться (переключает значение логической переменной). Пусть также, когда команда включения подана, кнопка окрашивается в зеленый, а когда команды нет, будет серой. Для первого нам потребуется событие Клик левой кнопкой и действие Toggle value.

Рисунок 4.28. Добавление события к компоненту Кнопка

Добавление события к компоненту Кнопка


Рисунок 4.29. Добавление действия к компоненту Кнопка

Добавление действия к компоненту Кнопка


Будет запрошена переменная, которую нужно переключать:

Рисунок 4.30. Свойства для действия Toggle value

Свойства для действия Toggle value


Обратите внимание, для события Клик левой кнопкой можно задать свойство Подтверждать ввод/не подтверждать ввод, как для события Редактирование поля ввода. Для того, чтобы изменять цвет кнопки, нам потребуется событие Изменение переменной и действие Изменить фон.

Рисунок 4.31. Добавление действия Изменить фон

Добавление действия Изменить фон


В появившемся диалоге для добавления цвета нажмите кнопку Добавить, выберите цвет для значения 0, затем снова нажмите Добавить, выберите цвет для значения 1. Цвета можно перемещать по списку значений переменной, просто перетаскивая их мышью.

Рисунок 4.32. Свойства действия Изменить фон

Свойства действия Изменить фон


Осталось логическую переменную задействовать в процессе управления.

4.1.5. Скрипты процесса отображения

Как и разнообразные действия (см. предыдущий раздел), скрипты процесса отображения предназначены для управления содержимым мнемосхем. Они могут помочь разработчику сделать интерфейс оператора более гибким и интерактивным, к тому же использование скриптов способно сильно облегчить разработку системы, а в некоторых случаях является просто необходимостью. Скрипты можно писать на языке ST, имеющем схожий с языком Pascal синтаксис. В реализации языка ST для S3-IDE существует набор библиотечных функций для работы с компонентами мнемосхем.

4.1.5.1. Подпрограммы

В дополнение к библиотечным функциям разработчик может объявить собственные функции на языке ST, и вызывать их затем так же, как и библиотечные функции. Создадим функцию, которая будет включать/отключать компонент на экране в зависимости от того, находится система в автоматическом режиме, или нет. Для определения такой функции нужно создать ее в ветке Подпрограммы.

Рисунок 4.33. Добавление скрипта в подпрограммы

Добавление скрипта в подпрограммы


Рисунок 4.34. Диалог создания скрипта

Диалог создания скрипта


Редактирование скрипта производится так же, как и для ST-подпрограммы процесса управления, в разделе Подпрограммы процесса управления. Создадим входной строковый параметр, и наполним скрипт несложным кодом. То, что делает эта подпрограмма, можно реализовать и с помощью действия Включить/отключить компонент, но так получается гибче, так как впоследствии мы можем организовать проверку каких-нибудь дополнительных условий, или изменить поведение скрипта, отредактировав его только там, где он определен.

Рисунок 4.35. Подпрограмма процесса отображения

Подпрограмма процесса отображения


Теперь привяжем скрипт к компоненту. Пусть это будет кнопка управления клапаном подачи воды - в автоматическом режиме она не должна быть видна. Добавим к кнопке событие Изменение переменной, в качестве переменной выберем mdGlobalAuto, к этому событию привяжем действие Скрипт.

Рисунок 4.36. Добавление действия Скрипт

Добавление действия Скрипт


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

Рисунок 4.37. Вызов подпрограммы

Вызов подпрограммы


4.1.5.2. Другие элементы ветки Cкрипты

4.1.5.2.1. Инициализация мнемосхем

В ветке Запуск можно разместить скрипты, инициализирующие мнемосхемы. Допустим, нужно вывести диалог ввода логина и пароля для пользователя, или запросить опции, с которыми будет стартовать процесс отображения, а затем применить эти опции. В принципе, по назначению стартовые скрипты аналогичны стартовой секции процесса управления. Для написания этих скриптов также применяется язык ST.

4.1.5.2.2. Периодически вызываемые скрипты

В ветке Периодические могут быть размещены скрипты, выполняемые с заданным интервалом (интервал задается отдельно для каждого из скриптов). Это применимо в случаях, когда вызова скрипта по событию типа Изменение переменной недостаточно, и его нужно выполнять периодически. Использование периодически вызываемых скриптов избавляет от необходимости самостоятельно организовывать счет времени, для чего пришлось бы прибегнуть к помощи процессов управления на QNX-узле.

4.1.5.2.3. Горячие клавиши

В ветке Горячие клавиши могут быть размещены скрипты, вызываемые при нажатии клавиш, задаваемых для каждого скрипта отдельно.

4.1.6. Процессы отображения в QNX-проекте

В QNX-проекте один контроллер может содержать несколько процессов отображения, полностью аналогичных процессам отображения HMI-проекта. Все сказанное по поводу Display HMI, можно с равным успехом отнести к Display QNX. То есть контроллер, имеющий стандартный набор устройств ввода/вывода, может содержать в таком случае весь проект - как управляющую его часть, так и операторский интерфейс. Разница между процессами отображения контроллера и HMI-проекта в том, что "отрисовка" мнемосхем в первом случае производится средствами графической среды QNX - Photon, а во втором - средствами виртуальной машины Java. Для разработчика проекты полностью совместимы.

Исходя из вышесказанного, логично будет предположить наличие в среде возможности копировать мнемосхемы (компоненты, события, действия) из QNX-проекта в HMI-проект и наоборот. Такая возможность есть. Копировать компоненты из проекта в проект можно так же, как и в пределах одной мнемосхемы.

Копирование мнемосхем осуществляется следущим образом. Для начала создадим в QNX-проекте процесс отображения.

Рисунок 4.38. Добавление процесса отображения в QNX-проект

Добавление процесса отображения в QNX-проект


Рисунок 4.39. Диалог создания нового процесса отображения

Диалог создания нового процесса отображения


Процесс отображения в QNX-проекте имеет следующие свойства:

  • Приоритет - задает приоритет процесса отображения. Он должен быть меньше приоритета драйверов и процессов управления.

  • Номер консоли - номер виртуальной консоли (1..9) на которой будут отображаться мнемосхемы.

  • Минимальное обновление - минимальный период считывания переменных, все переменные период обновления которых меньше минимального, будут обновляется с этим периодом.

  • Авт. отрег. - автоматическая отрегистрация пользователя. Если пользователь не двигал мышью и не нажимал клавиш, то по истечению указанного времени он будет отрегистрирован.

  • Сохранять положение мнемосхем - включает/отключает сохранение положения и состояния временных мнемосхем между запусками проекта.

Рисунок 4.40. Процессы отображения в QNX- и HMI-проектах

Процессы отображения в QNX- и HMI-проектах


Теперь мышью перетащим мнемосхему из секции Display HMI-проекта в секцию Display QNX-проекта, предварительно нажав и удерживая клавишу Ctrl. На этом копирование мнемосхемы практически закончено. Остается только создать в ветке Подпрограммы те подпрограммы, которые вы вызываете в скопированной мнемосхеме, иначе при попытке скомпилировать проект компилятор укажет вам на ошибку компиляции - на попытку вызвать не определенную функцию. Точно таким же образом можно копировать мнемосхемы в обратном направлении - из QNX-проекта в HMI-проект.