Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Требования по содержанию отчета




Контрольные вопросы

1. Для чего используются инструменты СЛОИ?

2. Могут ли локальные переменные действовать в пределе нескольких экранных форм? Объясните ответ

3. Как отображаются локальные переменные?

Требования по содержанию отчета

    В отчете студент должен перечислить цели лабораторной работы, описать ход работы, ответить на контрольные вопросы, сделать вывод о проделанной работе.

 


Лабораторная работа №5. Организация логики изменения содержания экранной формы при помощи VBA

 

Цели работы:

1) изучение возможностей по созданию скрипта логики изменения содержания экранной формы на языке VBA;

2) организация доступа к значению сигналов из VBA и взаимодействия мнемосхемы (скриншота) с другими программами при помощи VBA.

В процессе достижения данной цели необходимо решить две задачи:

1. Обеспечить логику обработку сигналов на VBA;

2. Осуществить экспорт данных в программу Excel.

Теоретическая часть

    Одной из важных и замечательных особенностей программы I nfinityHMI является возможность предоставлять свои объекты для использования посредством технологии OLE Automation. Данная возможность позволяет с одной стороны, создавать внешние приложения, способные работать с объектами InfinityHMI, а с другой стороны создавать логику обработки данных внутри мнемосхем при помощи технологии Microsoft Visual Basic for Application (VBA).

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

    КлассGwxDisplayпредставляет объекты экранных форм InfinityHMI. Экранные формы InfinityHMI содержат множество объектов классов, производных от GwxVisible, GwxDynamic и GwxPoint. Объект GwxDisplay предоставляет методы для создания новых и получения существующих экземпляров объектов трех перечисленных классов.

GwxVisible является базовым типом объекта (классом) для всех объектов экранных форм InfinityHMI, которые могут быть отображены в ее рабочей области (могут быть визуально восприняты пользователем). Все видимые объекты InfinityHMI (например, GwxRectangle, GwxEllipse, GwxText и т. д. ) наследуются от GwxVisible, а значит, приобретают все его свойства и методы. Часто используемый класс GwxButton является наследованным от класса GwxText. Также в этой иерархии находятся классы для отображения растровых (bmp) и векторных ( Metafile ) рисунков и OLE компонентов и т. д. Особого внимания из данной серии классов заслуживает класс GwxSymbol, инкапсулирующий последовательность других визуальных объектов. Объекты данного типа используются для обеспечения группировки визуальных объектов.

GwxDynamic является базовым классом объектов экранной формы GraphWorX32, которые выполняют динамическое изменение визуальных атрибутов связанных с ними видимых объектов. Такие, например, как GwxSize, GwxLocation, GwxRotation, GwxPick и т. д. Например, объект класса GwxSize, связанный с объектом класса GwxRectangle, может изменять размеры последнего в зависимости от значения переменной в OPC -сервере. Динамические объекты не могут восприниматься визуально. Они служат для выполнения динамических действий над свойствами связанных с ними видимых объектов. Объект класса GwxVisible может иметь множество связанных с ним объектов класса GwxDynamic, тогда как один объект класса GwxDynamic может быть связан с одним и только одним объектом класса GwxVisible. То есть, когда при разработке мнемосхемы Вы выбираете пункт меню «Добавить динамику», то создается новый объект, наследованный от GwxDynamic и он связывается с визуальным объектом, к которому данная динамика применяется.

GwxPoint является базовым классом объектов в экранных формах GraphWorX32, которые связаны с элементами данных в серверах OPC, значениями выражений, локальными переменными или константами. С каждым динамическим объектом класса GwxVisible могут быть связаны один или более объектов класса GwxPoint. Объекты класса GwxPoint создаются и уничтожаются объектами класса GwxDynamic.

    Объекты типа GwxDisplay генерируют ряд событий, интересных для нас. Это, например, такие события, как DisplayLoad, которое возникает после загрузки экранной формы; PickPostDown, которое возникает после совершения щелчка, на объект, обладающий динамикой типа «Динамическое действие» и т. д. Список всех событий можно посмотреть в редакторе VBA, для данного дисплея (ThisDisplay). Однако, вместо обработки этих событий, можно просто указать имя процедуры в VBA скрипте, которая должна быть вызвана, если наступит определенная ситуация (нажатие кнопки и т. д. ).

 

Программа работы

    Лабораторная работа содержит задания в виде упражнений. Все упражнения обязательны для выполнения

Упражнение 1. Организация логики на VBA

1. Возьмите за основу файл Фамилия9. xml и сохраните его под именем Фамилия10. xml. Модифицируете мнемосхему следующим образом: вместо блока логики управления поставим некоторый черный ящик, как показано на рис. 5. 1. Настройте источники сигналы (при помощи поиска и замены) так, чтобы они брали сигналы не из сервера ввода-вывода, а из DualSource.

Рис. 5. 1. Внешний вид мнемосхемы с черным ящиком скрипта

 

 

Рис. 5. 2. Настройка вызова скрипта по щелчку на черный ящик

 

2. Для упрощения отладки VBA скрипта сделайте следующее: Все кнопки сделайте «С фиксацией», а на черном ящике добавьте динамику «Динамическое действие», как показано на рис. 5. 2. Здесь a1 – это название VBA скрипта (можно использовать любое имя, соответствующее спецификации символьных имен: процедур, переменных и т. д. ). Теперь VBA скрипт будет вызываться только по щелчку на черный ящик. Причем, начальное состояние входных сигналов можно будет задать при помощи кнопок до вызова скрипта. InfinityHMI может добавить код для разбора специальных параметров и/или форму, но в нашей работе этого не требуется.

3. По кнопке «Редактировать» в инспекторе свойств черного ящика будет открыта среда для разработки VBA скриптов. В модуль Gwxa1_Main (он у Вас должен открыться по умолчанию) запишем программу – как на рис. 3. Некоторые комментарии к этому исходному тексту приведены ниже.

4. Для получения значения из OPC и записи значения в OPC мы описали две функции: GetOPCValue и SetOPCValue. Эти две функции сводятся к обращению к соответствующим функциям из динамической библиотеки DualSource. Есть и другие способы получения доступа к OPC, но в нашем случае проще всего обращаться через DualSource. Переданный в качестве параметра объект GwxPick здесь не используется вообще.

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

6. При реализации алгоритма для простоты мы вводим 2 глобальные булевы переменные для хранения предыдущего состояния насоса и помпы. Существует некоторая сложность, связанная с записью OPC сигнал. Значение в этом сигнале меняется не мгновенно, а с некоторой задержкой, и, при повторном считывании значения сигнала оно не всегда успевает обновиться. Именно по этой причине мы воспользовались глобальными переменными для хранения предыдущих значений выходных сигналов.

7. Убедитесь, что на насосе и задвижке есть перекладка значения из сигнала control в соответствующий сигнал status, реализовано мигание для сигнальных лампочек.

Стоит сохранять проект перед входом в режим исполнения!

 

8. Теперь можно пробовать запускать эту мнемосхему и тестировать полученную VBA программу. Для этого переведите проект в режим исполнения, наберите на кнопках управления нужный режим, например, «Набор: управление» и щелкните по черному ящику. Если все реализовано нормально, то при этом линия, идущая на задвижку должна загореться зеленым, через некоторое время задвижка должна стать зеленой и уровень начать прибывать. Теперь можно выключить кнопку «Набор: управление» и снова щелкнуть по черному ящику, но набор при этом должен продолжиться. Отладьте подобным образом все возможные комбинации управляющих команд.

 

Рис. 5. 3. Исходный текст VBA для организации логики управления

Еще раз напоминаем: перед выходом из режима исполнения приводите все сигналы в исходное (нулевое) состояние.

9. После того, как закончите отладку VBA скрипта, можно сделать, чтобы он работал непрерывно. Для этого верните назад настройки кнопок (тип нажатия - обычное, передача значения, если нажато – 1, если отпущено - 0) и установите динамику щелчка черного ящика, так, чтобы скрипт вызывался постоянно с интервалом 50мс (Тип нажатия – с фиксацией, выполнить сценарий VBA, пока нажато с интервалом 50мс, принято начальное состояние – нажато).

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...