Вход:  Пароль:  
FreeSource: RomanSavochenko/test ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Реализация

Реализацию будем производить поэтапно, в направлении от функций в концепции к её представлению на библиотеке QT, и так до последнего компонента. Такой подход позволит получать результат между этапами, анализировать его и учитывать особенности на следующих этапах. Для пошаговой реализации разобьем всю задачу на логические части и выстроим их в зависимости одна от другой, в реализации.

Виджеты и их библиотеки — Выполнено


Целями данного этапа является:


В результате проделанной работы созданы модули модели данных (UI.VCAEngine) и представления (UI.Vision). На данном этапе, модулями реализуются механизмы формирования элементов пользовательского интерфейса. На следующий этапе данные элементы будут использованы для формирования цельных интерфейсов визуализации и управления.


Рассмотрим по пунктам результаты реализации данного этапа:

Реализация основы архитектуры «Модель данных»-»Представление»

В соответствии со статической диаграммой классов (рис.6) и общими требованиями, были реализованы модули “UI.VCAEngine” и “UI.Vision”, для системы OpenSCADA. Модуль “UI.VCAEngine” реализует модель данных СВУ и является источником для последующего представления этих данных различными механизмами визуализации. Модуль “UI.Vision” реализует способ представления данных, основанный на библиотеке QT версии 4, фирмы Trolltech.


Связь между модулем модели данных и представления организована посредством прямых вызовов (сильные связи). Такой способ связи выбран для предварительного абстрагирования от особенностей взаимодействия и концентрации на основных задачах реализации. В последствии планируется унификация и построение этих связей посредством интерфейса управления системой OpenSCADA (слабые связи). В результате будет достигнута возможность разнесения модели данных и представления, с возможностью одновременного обслуживания различных механизмов представления одной моделью данных СВУ. Кроме того, можно будет оценить степень влияния типа связи на производительность СВУ.

Реализация базовых функций модели данных СВУ, в модуле UI.VCAEngine

Модуль модели данных(движка) СВУ содержит контейнер библиотек виджетов/кадров. Модулем предоставляется предопределённая библиотека базовых виджетов(примитивов) с первичной реализацией собственных свойств и логики обработки этих свойств.


Хранение данных виджетов и библиотек виджетов реализовано в БД доступных системе OpenSCADA. БД организована по принадлежности данных к библиотеке. Т.е. отдельная библиотека хранится в отдельной группе таблиц одной или разных БД. Перечень библиотек виджетов хранится в индексной таблице библиотек с именем «VCALibs" и структурой “Libs”, раздела БД?. Экземпляр этой таблицы создаётся в каждой БД, где хранятся данные этого модуля, с перечнем библиотек содержащихся в конкретно взятой БД. В состав таблиц, принадлежащий библиотеке виджетов входят следующие:


Для управления библиотеками виджетов и отдельными виджетами были написаны сценарии конфигурации на языке интерфейса управления ~OpenSCADA?. На данный момент эти сценарии призваны выполнять только функции централизованной конфигурации элементов движка СВУ, однако в последствии их планируется расширить и наделить функциями обработки запросов к модели данных от модулей представления, с целью организации «слабых связей» между «Моделью данных» и «Представлением».


Основой практически всех элементов движка стал объект абстрактного элемента визуализации (VCA::Widget). На своём, абстрактном, уровне объект наделён следующими свойствами:


Для представления библиотеки виджетов реализован класс (VCA::WdgLib). Основными его функциями является содержание библиотечных виджетов, хранение и загрузка их с БД, предоставление доступа к ресурсам (Mime-данные), а также разделение доступа.


Специально для включения в библиотеку виджетов был создан класс библиотечного виджета (VCA::LWidget), который основан на классе абстрактного виджета (VCA::Widget) и предоставляет дополнительные функции: хранения данных виджета в таблицах библиотеки, переопределения доступа к ресурсам на таблицу с mime-данными библиотеки и хранение вложенного контейнерного виджета (VCA::CWidget).


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


На основе класса библиотечного виджета (VCA::LWidget) был сформирован абстрактный класс терминального виджета (VCA::PrWidget). А уже на его основе сформированы реализации примитивов базовых виджетов, которые и сформировали библиотеку базовых виджетов, создаваемую модулем при инициализации. Значения свойств базовых виджетов, также, могут сохраняться в БД (таблицы библиотеки виджетов), формируя нужные шаблоны. Кроме того, базовая библиотека примитивов может доопределяться расширенными примитивами из модулей интерфейсов представления, которым базовых недостаточно. Но в этом случае нужно учитывать, что подобные действие – путь к несовместимости между модулями интерфейсов представления!

Реализация базовых функций среды разработки пользовательского интерфейса в модуле представления UI.Vision

Интерфейс разработки пользовательских интерфейсов, модуля, основан на MDI(Multi Document Interface) интерфейсе. Данный подход позволяет одновременно редактировать несколько кадров различных размеров. Использованы следующие механизмы управления разработкой: панели инструментов, пункты меню и контекстное меню. Большинство действий дублируются в разных механизмах, что позволяет быстро найти инструмент предпочитаемым способом. Навигационные интерфейсы реализованы присоединяемыми окнами. Конфигурация панелей инструментов и присоединяемых окон сохраняется при выходе и восстанавливается при старте, что позволяет настраивать интерфейс под себя.


Одним из элементом пользовательского интерфейса, реализованным как присоединяемое окно, является навигатор библиотек виджетов. С помощью навигатора можно быстро найти нужный виджет или библиотеку и проделать над ними необходимые операции. Реализованы операции: добавления, удаления, настройки виджетов и библиотек, а также визуального редактирования виджетов.


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


Для визуального редактирования кадров реализована первичная поддержка редактирования виджетов и кадров. Уже сейчас редактор позволяет редактировать кадры, основанные на примитиве “Box” и полноценно отображать примитив текстового поля “Text”. В редакторе кадров реализованы функции:


Вид окна разработки приведён на рис. 8. На рисунке можно видеть: панели инструментов, навигатор виджетов, инспектор атрибутов, окно редактирования кадра и строка статуса.


file:vision_win.png
Рис.8 Окно разработки модуля UI.Vision

Для настройки объектов виджетов и их библиотек разработаны два диалога, диалог настройки виджета (рис.9) и диалог настройки библиотеки виджетов (рис.10). Диалог настройки библиотеки позволяет установить основные свойства и поместить mime-данные в БД, для последующего использования в виджетах библиотеки. Диалог настройки виджета позволяет установить: основные свойства виджета, индивидуально установить значения атрибутов и сконфигурировать внутреннюю процедуру вычислений виджета с дополнительными (пользовательскими) свойствами.


file:vision_lwdg_dlg.png
Рис.9 Диалог настройки библиотеки виджетов.

file:vision_wdg_dlg.png
Рис.10 Диалог настройки виджета.

Проекты интерфейсов визуализации — Выполнено


Целями данного этапа является:


На данном этапе был добавлен механизм формирования проектов СВУ посредством построения страниц визуализации в иерархическом виде, который соответствует логическим связям в конечном интерфейсе СВУ. В процессе реализации данного этапа были начаты работы по адаптации модуля визуализации Vision к использованию интерфейса управления OpenSCADA, вместо прямых-сильных связей. Эти работы позволили достичь значительной унификации различных диалогов, структур управления и пользовательского интерфейса в целом.


На данном этапе реализовано:

Сессии исполнения проектов — Выполнено


Целями данного этапа является:


На данном этапе был добавлен механизм исполнения проекта в сеансах модели данных модуля VCAEngine, а также визуализация сеанса проекта, режим «RunTime", в модуле визуализации на библиотеке QT Vision, с элементами обновления данных и интерактивного взаимодействия с пользователем.

Формирование иерархического дерева виджетов конечной визуализации на основе проекта для которого открывается сеанс.

В соответствии с рис.6 и рис.7 объекты сессии проекта наследуются от абстрактного объекта Widget и используют соответствующие объекты проекта. Так, сессия (Session) использует проект (Project) и формирует развёрнутое дерево на основе него. Страница проекта Page прямо используется страницей сессии SessPage. Остальные объекты (SessWdg) разворачиваются в соответствии с иерархией элементов страницы (рис.7).


В дополнении к стандартным свойствам абстрактного виджета (Widget) элементы страницы, и сами страницы, сессии получают свойства: хранения кадра значений вычислительной процедуры, обсчёта процедур и механизм обработки событий. Страницы сессии, в дополнение ко всему, содержат контейнер следующих по иерархии страниц. Сессия в целом обсчитывается с указанной периодичностью и в последовательности:

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


В сессии реализована поддержка специальных свойств страниц:

Container – страница является контейнером для нижележащих страниц;
Template – страница является шаблоном для нижележащих страниц;
Empty – пустая, не активная страница, это свойство используется совместно со свойством Container для организации логических контейнеров.

На основе этих свойств реализованы следующие типы страниц:

Standard — Стандартная страница (не установлено ни одно из свойств). Является полноценной конечной страницей.
Container — Полноценная страница со свойством контейнера (Container).
Logical container — Логический контейнер, фактически не являющийся страницей (Container|Empty). Выполняет свойство промежуточного и группирующего элемента в дереве страниц.
Template — Страница шаблон (Template). Чистая шаблонная страница используется для описания общих свойств и доопределения их в частном порядке во вложенных страницах.
Container and template — Страница шаблон и контейнер (Template|Container). Совмещает функции шаблона и контейнера.

Формирование кадров значений для процедур обсчёта виджетов конечной визуализации.

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


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


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]