Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк»




НазваниеЛабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк»
страница11/15
Дата30.11.2012
Размер0.88 Mb.
ТипЛабораторная работа
1   ...   7   8   9   10   11   12   13   14   15

Лабораторная работа 5.4.Организация логики при помощи VBA


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

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

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

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

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

Предварительные сведения


В данном пункте приведены основные классы, предоставляемые 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. Модифицируете мнемосхему следующим образом: вместо блока логики управления поставим некоторый черный ящик, как показано на Рис. 109. Настройте источники сигналы (при помощи поиска и замены) так, чтобы они брали сигналы не из сервера ввода-вывода, а из DualSource.



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

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



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

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

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

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

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

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



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




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




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






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




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

Упражнение 2: экспорт данных в Excel


Теперь сохраним график изменения уровня с интервалом в 1 секунду в таблице Excel. На самом деле, использовать Excel для записи исторических значений сигнала, да ещеи на стороне клиентской программы нелогично, но мы выполним здесь эту задачу, как пример взаимодействия InfinityHMI со сторонним приложением, поддерживающим технологию OLE Automation, исключительно потому, что данное приложение есть на большинстве компьютеров.

  1. Сохраните файл под именем Фамилия11.xml.

  2. Создайте кнопку «Экспорт значения в Excel». Это у нас будет отладочный вариант. В окончательном варианте данной кнопки не будет. Настройте для этой кнопки выполнение сценария VBA и откройте этот сценарий на редактирование.

  3. Теперь необходимо установить связь с данными, предоставляемыми Excel. Для этого в редакторе VBA в меню Сервис -> Ссылки (Tools -> References) выберите Microsoft Excel 10.0 Object Library, как показано на рис. 4 (версия Excel, установленная на Вашем компьютере может быть другая).



Рис. 112. Выбор компонента MS Excel для ссылки на него из скрипта

  1. Выберите в дереве проекта объект Infinity HMI Objects  ThisDisplay.

  2. В окне редактирования исходного текста в левом верхнем выпадающем списке выберите элемент Общая область (General), а в правом верхнем углу Описания (Declarations) (обычно эта область открыта по умолчанию). Внесите здесь строку Option Explicit. В данной секции окна программы могут быть сделаны объявления глобальных переменных и введены прототипы функций, используемых во всех процедурах:

Option Explicit

Public g_Excel_App As Excel.Application

Public g_Excel_Book As Excel.Workbook

Public g_Excel_Sheet As Excel.Worksheet

  1. В окне программы объекта ThisDisplay в левом верхнем выпадающем списке выберите элемент GwxDisplay, а в правом верхнем углу PreRunTimeStart. При этом будет сгенерирована процедура - обработчик данного события. Данная процедура будет вызываться всякий при переходе в режим исполнения. Запишете в нее следующий код:

Private Sub GwxDisplay_PreRuntimeStart()

' Открыть Excel и сделать его видимым

Set g_Excel_App = CreateObject("Excel.application")

g_Excel_App.Visible = True

' Открыть лист Excel

Set g_Excel_Book = g_Excel_App.Workbooks.Add

Set g_Excel_Sheet = g_Excel_Book.Worksheets(1)

End Sub

  1. Лишние процедуры, сгенерированные VBA можно удалить. В конечном итоге окно ThisDisplay должно выглядеть так, как на Рис. 113.



Рис. 113. Исходный текст (не законченный) процедуры старта экранной формы

  1. Выберите в дереве проекта ветку GwxExcelExport_Main и в процедуру ExcelExport запишите код для сохранения значения сигнала Level в очередную строку первого столбца текущего листа Excel.






Как получать значение OPC сигнала было рассмотрено выше.

Вам могут потребоваться дополнительная глобальная переменная (для подсчета номера строки), инициализировать данную переменную необходимо при обработке события GwxDisplay_PreRuntimeStart().

Для значений в Excel можно воспользоваться, например, следующей конструкцией:

ThisDisplay.g_Excel_Sheet.Range(sCellName) = …

где sCellName это строка, идентифицирующая ячейку Excel, например, "A1".

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

Dim sLineName As String

sLineName = Str(g_LineNumber)

sCellName = "A" + Mid(sLineName, 2, Len(sLineName) - 1)

где g_LineNumber это номер строки.





  1. Убедитесь, что созданный Вами сценарий корректно работает. В текущем варианте при переходе в режим исполнения у Вас должен открываться Excel и в нем создаваться несколько листов (так как это настроено по умолчанию в Excel). В активном листе при нажатии на кнопку «Экспорт значения в Excel» должно появляться значение уровня жидкости в резервуаре. Каждое очередное значение должно появляться в новой строке. Закрывать Excel до закрытия мнемосхемы (перехода в режим редактирования) делать не стоит, так как это приведет к ошибке при нажатии на кнопку «Экспорт значения в Excel». При каждом запуске мнемосхемы должна открываться новая книга Excel. Если все работает правильно, то можно переходить к следующему пункту.






Некоторые сложности могут возникнуть при наличии антивирусных программ. Если на Вашем компьютере установлены антивирусные программы, то они могут не позволять приложению InfinityHMI запускать Excel, как OLE сервер. В этом случае, необходимо настроить Ваши антивирусные программы.

Например, программа OfficeGuard из пакета «Антивирус Касперского» по умолчанию не допускает запуска таких приложений, а спрашивает пользователя разрешения, при этом в области нотификации Windows появляется иконка OfiiceGuard, щелкнув на которую можно указать действия антивирусной программы в этом случае.




  1. Теперь можно сделать окончательный вариант экспорта: вместо кнопки сделайте какому-нибудь объекту вызов сценария VBA при помощи динамики «Динамическое действие». В качестве имени сценария укажите имя сценария из созданной ранее кнопки. Настройте запуск сценария один раз в 1000 мс.

  2. По желанию можно сделать автоматическое формирование графика средствами Excel, можно не показывать файл на экране и сохранять его автоматически при переходе в режим редактирования или выходе.
1   ...   7   8   9   10   11   12   13   14   15

Похожие:

Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа. Получение и свойства оксидов, гидроксидов и солей
Лабораторная работа. Ряд напряжений металлов. Гальванические элементы. Электролиз юююююю
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconТематическое планирование биология, 6 класс
Морфология листа (лабораторная работа) 12. Строение растительного организма. Клетки и ткани 13. Типы растительных тканей (Лабораторная...
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа Правила работы с вычислительной установки Лабораторная работа Работа с клавиатурой
Лабораторный практикум по информатике представляет собой учебно-практическое издание для студентов педагогического вуза непрофильных...
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа №1 (одномерные массивы) 27
Лабораторная работа №6 (статические массивы, знакомство с графическим режимом. Возможно будет изменена) 49
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа №5. Эксперимент лабораторная работа №6 Раздел II. Эмпирические исследования познавательных процессов. Ощущения и восприятие лабораторные работы №7-9: Методика «Специфика восприятия»
Цель: Выявление типов поведения студентов (коллег) в дискуссии (наблюдение по схеме Р. Бейлза)
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа №1 Изучение автоматической телеграфной станции ат-пс-пд лабораторная работа №2 Изучение телеграфного коммутационного сервера «Вектор-2000»
Рецензент – зам начальника Гомельской дистанции сигнализации и связи Белорусской железной дороги В. И. Прокопюк
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа по курсу «Физические основы микроэлектроники» Нижний Новгород, 2005
Операционный усилитель: Лабораторная работа по курсу «Микроэлектроника» / Сост. Н. В. Федосеева, С. М. Планкина. – Н. Новгород, ннгу,...
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconТематическое планирование 11 класс 1 час в неделю 34 часа за год. Информатика 11 класс
Практическая работа Сведения о логических разделах дисков Практическая работа Значки и ярлыки на Рабочем столе Практическая работа...
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconЛабораторная работа №1 Лабораторная работа №1 1
В качестве примера рассматривается деятельность вымышленной компании «Computer Word». Компания занимается в основном сборкой и продажей...
Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» iconГ. Кунгур Уральская, 18 комн. 310
Обязанности: Настройка компьютеров, компьютерной техники, установка оборудования и программного обеспечения. Техническое обслуживание...
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница