Реализация моделей данных
На основе абстрактной модели, разработанной в ходе анализа элементов системы выработки электроэнергии, будет создана серия моделей. Абсолютная модель будет использоваться для моделирования данных, не связанных с конкретным устройством, таких как освещенность, длина дня и ожидаемая выходная мощность. Для каждого типа устройств, включая трансформатор, инвертор и солнечную батарею, будут использоваться экземплярные модели, поскольку к системе будет подключено несколько экземпляров каждого типа.
После создания моделей будут созданы конкретные экземпляры для каждого устройства в системе, и будут рассмотрены варианты наполнения экземпляров моделей данными.
Создание абсолютных моделей
Начните с перехода в системное дерево, откройте контекстное меню Моделей и выберите Создать.
В окне свойств модели вы можете ввести идентифицирующую информацию о модели. Установите для имени значение AdditionalData
, а для описания - Дополнительные данные
. При программном извлечении данных из этой модели с помощью языка выражений будет использоваться имя additionalData
, а описание Дополнительные данные
будет отображаться в пользовательском интерфейсе.
Нажатие кнопки OK создает модель и открывает окно конфигурации, в котором можно задать ряд параметров. Чтобы создать несколько переменных, выберите вкладку Переменные модели (1) и выберите Добавить строку (2).
Добавьте соответствующее имя и описание (3) и сделайте переменную записываемой (4).
В примере переменная названа weatherData
- это имя вкладки в модели, которая в итоге будет представлять собой набор из нескольких переменных, связанных с погодой.
Наконец, откройте поле Формат (5), которое открывает меню Формат.
Меню Формат содержит множество опций, но на данном этапе вам нужно определить только Поля. Откройте меню Поля, нажав на значок, указанный ниже.
Меню Поля позволяет создать любое количество переменных, нажав кнопку Добавить строку. Пример содержит две переменные cloudCover
и illuminance
, которые имеют целочисленный тип.
Сохраните изменения и закройте окно, нажав кнопку OK. В дереве системы под узлом Модели должна появиться новая модель Дополнительные данные. Выберите пункт Дополнительные свойства из контекстного меню, чтобы отобразить переменные, связанные с этой моделью.
В контекстном меню модели Дополнительные данные найдите переменную модели Weather Data. В последующих разделах будут рассмотрены методы автоматического наполнения переменных данными. Чтобы вручную отредактировать значения модели, сначала нажмите на значок замка (1), а затем откройте переменную Weather Data (2).
Панель Weather Data открывает редактор таблицы данных, который позволяет вручную вводить значения переменных, нажав кнопку Добавить строку и указав значения в каждом поле.
Вы можете обнаружить, что по мере роста сложности модели системы вам понадобятся дополнительные переменные. Абсолютные модели полезны для хранения переменных, которые находятся на высоком уровне абстракции в вашей системе или синтезированы из нескольких источников.
Экземплярные модели
Рассмотрим случай с электростанцией, где есть несколько похожих устройств, каждое из которых имеет одинаковые типы связанных переменных. Вместо того чтобы создавать абсолютную модель для каждого устройства, мы будем создавать экземплярные модели. Экземплярная модель служит шаблоном, определяющим переменные, функции и события, которые будут связаны с каждым экземпляром модели. Затем мы создаем уникальный экземпляр модели для каждого устройства.
Как и при создании абстрактной модели, откройте контекстное меню для узла Модели в дереве системы и выберите Создать.
В окне свойств добавьте соответствующее имя и описание и установите тип как Экземплярная
.
Обратите внимание, что появляется несколько свойств, характерных для экземплярных моделей. Контейнеры экземпляров моделей могут быть присоединены практически к любому контексту. Выражение пригодности модели оценивается для каждого контекста в дереве контекстов сервера, и если его результат равен True
, к контексту присоединяется контейнер для экземпляров модели.
Чтобы сделать устройства-трансформеры доступными в корневом контексте, задайте для выражения пригодности значение {.:#type}=="root"
. Позже мы рассмотрим, как выражение пригодности можно использовать для создания вложенных иерархий устройств с вложенными контейнерами.
Параметры в разделе Настройки экземплярной модели управляют именами и описаниями контейнеров и экземпляров модели. В статье Настройка экземпляров моделей и их контейнеров подробно описаны различные параметры.
Как показано в примере ниже, задайте соответствующие имена для контейнеров и объектов на основе слова "transformer".
После заполнения имен и описаний нажмите кнопку OK, чтобы сохранить модель и открыть окно ее конфигурации.
Переменные объектов
Как и в абсолютной модели, создайте переменные на вкладке Переменные модели (1), добавив строку (2), задав имя и описание (3), сделав переменную доступной для записи, установив соответствующий флажок (4), а затем открыв меню Формат (5).
Под заголовком status создайте как минимум две переменные: Device Status
и Current Power Output
. Поскольку в любой момент времени устройство может иметь только одно значение для Device Status
и одно значение для Current Power Output
, ограничьте количество строк, которые могут быть в переменной status, установив максимальное количество записей (1) на 1
, а затем открыв меню Поля (2).
Добавьте в список два поля deviceStatus
и currentOutputPower
. Обратите внимание, что в примере deviceStatus
имеет тип Boolean и по умолчанию равно True
.
Нажмите OK , чтобы закрыть и сохранить переменные. В нижней части дерева системы вы должны увидеть, что появился контейнер Transformers.
Создание экземпляров модели
Теперь, когда модель создана, можно создать экземпляры модели. Перейдите в нижнюю часть дерева системы, откройте контекстное меню для узла Transformers и выберите Создать.
При создании экземпляра модели открывается окно свойств объекта, в котором можно дать имя новому экземпляру трансформатора. В приведенном ниже примере трансформатор назван a
, поскольку физический объект, представленный этим экземпляром, - "Трансформатор A". Контейнер модели называется transformers
, поэтому данный экземпляр будет иметь контекстный путь transformers.a
.
При присвоении имени и сохранении нового объекта открывается окно конфигурации объекта. Вспомнив о переменной status
в модели, перейдите на вкладку Status (1) и убедитесь, что поля переменных deviceStatus
и currentOutputPower
существуют в экземпляре модели.
Пользовательский интерфейс автоматически отображает их в виде отдельных переменных, перечисленных горизонтально, а не в виде таблицы, поскольку минимальное и максимальное количество строк таблицы данных было установлено на 1
, когда переменная status
была определена в модели.
При необходимости вручную добавьте некоторые данные, а затем закройте и сохраните экземпляр. В примере для более точного моделирования электростанции был добавлен еще один трансформатор, в результате чего был создан экземпляр с именем Transformer B
.
Создание иерархической модели устройства
Создав экземплярную модель и несколько ее экземпляров, перейдем к созданию иерархии устройств. Вспоминая топологию устройств электростанции, можно сказать, что каждый трансформатор получает энергию от нескольких инверторов, а каждый инвертор - от нескольких фотоэлектрических панелей.
Чтобы смоделировать эту иерархию, ниже будет показано, как создать экземпляр модели Inverter, который будет присоединен к экземплярам модели Transformer, и модель Panel, которая присоединяется к экземплярам модели Inverter.
Для начала создайте еще одну экземплярную модель, выбрав команду Create из контекстного меню Models. Это будет модель Inverter. Чтобы присоединить эти экземпляры к модели Transformer, выражение Validity Expression должно быть определено как {.:#type} == "transformer"
. Это выражение гарантирует, что контейнер для экземпляров Inverter будет подключен только к экземплярам Transformer.
Обратите внимание, что свойства раздела Настройки экземплярной модели заполнены значениями, соответствующими инверторному устройству.
Определив параметры для контейнеров и объекта модели, перейдите на вкладку Переменные модели и добавьте переменную состояния
с возможностью записи.
Как и в случае с переменной состояния
трансформатора, установите минимальное и максимальное количество записей на единицу, а затем откройте таблицу Поля.
Создайте несколько переменных для модели преобразователя частоты. В примере приведены следующие переменные:
Температура в шкафу, тип целочисленный
Эффективность инвертора, тип целочисленный
Выходная мощность, тип с плавающей запятой
Активный статус, тип булевский
Сохранив и закрыв страницу конфигурации модели преобразователя частоты, щелкните узел Transformers в дереве системы, чтобы открыть экземпляры модели преобразователя. Если щелкнуть экземпляр трансформатора , откроется контейнер Inverters.
Откройте контекстное меню для контейнера Inverters и нажмите Создать новый экземпляр.
Аналогично модели Transformer, добавьте имя и описание для нового экземпляра и нажмите OK.
После создания нового экземпляра должно открыться окно конфигурации. Перейдите на вкладку Status, чтобы убедиться в наличии переменных, которые были добавлены в модель на предыдущих шагах.
Приведенный выше пример содержит некоторые данные, которые были введены вручную. Мы рассмотрим заполнение данных модели в другой главе.
Добавление модели для представления панелей
В примере с электростанцией была добавлена еще одна экземплярная модель типа panel
, вложенная в модели типа inverter
. Вспоминая предыдущий шаг, можно сказать, что выражение валидности для экземплярной модели, вложенной в модели типа inverter
, равно {.:#type} == "inverter"
.
Инсталлируемая модель Panel также имеет переменную состояния
с двумя полями, activeStatus
и outputPower
, соответственно типа Boolean и Float.
В дереве системы под каждым экземпляром инвертора вы видите контейнер Panel, позволяющий добавлять экземпляры Panel к каждому инвертору.
В завершение этого упражнения вы можете подумать о том, какие дополнительные экземпляры модели необходимы для завершения цифрового представления вашей системы.
Использование системы версионирования
Теперь, когда у вас есть понимание базового использования моделей, следующим шагом будет рассмотрение того, как упаковать серию моделей в приложение, управлять разработкой приложения с помощью системы контроля версий и делиться приложениями с пользователями.