Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SPbGLTU_SimInTech_2020

.pdf
Скачиваний:
36
Добавлен:
03.12.2024
Размер:
10.45 Mб
Скачать

щить в графу «Приемник», установив тем самым связь между двумя сигналами (рис. 4.8).

Рис. 4.8. Задание связи сигнала state_ c выходным портом модели.

В заключение осталось назначить свойство анимированности всей субмодели цистерны (рис. 4.9) и назначить ей имя Tank.

Рис. 4.9. Назначение свойства "Анимированный" в свойствах субмодели цистерны.

Закончив описание связей между созданным окружением и свойствами графических примитивов, следует сохранить проект в файле only_tank.prt и можно приступать к работе с анимированным блоком модели цистерны (рис. 4.10).

51

Рис. 4.10. Схема с анимированным блоком модели цистерны.

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

CONNECT <Источник>, <Приемник>

по этой команде создается связь с уже существующим сигналом, а новые сигналы создаются командой:

SIGNAL <Имя>, <Режим — вход или выход>, <Тип данных>, <Название>, <Значение по умолчанию>

Если параметр «режим» не указан (пробел), то по умолчанию сигнал будет входом, для того чтобы сигнал был выходом — надо указать Out. Если не указан тип данных, то по умолчанию — это вещественное число. Идентификаторы типов данных:

INTEGER — целое

DOUBLE— вещественное

ARRAY — массив вещественных чисел

COLOR — цвет

Если не указано название, то оно совпадает с именем. В простейшем случае достаточно написать: SIGNAL <Имя сигнала>

Вне зависимости от выбранного подхода для построения связей между объектами и сигналами, функционирование анимированных при-

52

митивов должно быть одинаковым. После тестирования блока на корректность визуализации, он может быть занесен в библиотеку SimInTech.

4.2.Подготовка блока для его включения в библиотеку

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

SimInTech.

Первое, что необходимо сделать для того, чтобы случайно не поломать то, что уже работает в SimInTech, — это сменить название типа элемента (класса блока). Для этого надо войти в свойства блока цистерны, и заменить имя типа элемента «Субмодель» на какое-либо другое. Например, дадим ему имя «SerpTank» (рис. 4.11). Это будет гарантией того, что при сохранении этого блока в библиотеку не будет изменен уже существующий в SimInTech блок «Субмодель».

После того, как тип элемента переименован, надо проверить, что SimInTech находится в режиме разработчика. Выбрав в главном меню «Файл» → «Параметры», надо убедиться, что в открывшемся окне стоит галочка в опции «Режим разработчика». Теперь вспомним, что для задания параметров математической модели использовался скрипт (рис. 3.3) внутри основного блока субмодели, строки которого пока закомментируем

(рис. 4.12).

Рис. 4.11. Изменение имени типа элемента.

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

53

но достичь, дополнив модель рядом внешних свойств, аналогичных тем, что приведены на рис. 4.12.

Рис. 4.12. Исходные данные и параметры математической модели.

Для этого надо выделить на схеме блок «Tank» теперь класса «SerpTank», и в главном меню выбрать опцию «Правка» → «Изменить блок ...». Откроется окно «Редактирование блока». Используя вкладку «Свойства», надо добавить и описать все нужные для работы модели свойства (рис. 4.13).

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

Рис. 4.13. Определение основных свойств для блока класса «Serp_Tank».

В окне свойств блока «Tank» измените значение параметра

Locked (рис. 4.14)

54

Рис. 4.14. Изменение значение параметра для блока «Tank».

Сохраните изменения, а потом дважды кликните по блоку «Tank» (рис. 4.15). Откроется окно, где перечислены все входные параметры модели, которые можно изменять по желанию пользователя.

Измените, например, начальный уровень, потом сечение выходной трубы или ее высоту от базы. Модель работает без корректировки скриптов. Однако, если увеличить проектный объем цистерны, то анимационная шкала больше не будет соответствовать исследуемой модели.

Временно верните значение параметра Locked в исходное состояние.

Рис. 4.15. Открытие окна свойств модели по двойному клику на блоке «Tank».

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

55

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

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

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

Следует изменить скрипт графического контейнера блока, который на текущий момент имеет только одну строку (рис. 4.6), добавив в него секцию начальной инициализации, в которой надо определить переменную, которая будет хранить в себе проектный объем цистерны. Пусть она имеет имя, например, total_.

initialization total_ = 0; for (i = 1, n-1) begin

total_ = total_ + (h[i+1]-h[i])*(s[i]+s[i+1])/2; end;

end;

Далее надо связать вычисленное значение конструктивного объема с графическим примитивом. Выделим в графическом редакторе объект шкалу bar_Volume, откроем окно его свойств и изменим некоторые из них (рис. 4.16).

Рис. 4.16. Связь параметра «Верхний предел» с переменной total_.

56

Следует отметить, что такой же эффект можно получить, если в скрипт начальной инициализации добавить следующий код:

bar_Volume.MaxValue = total_ ; bar_Volume.Step = total_/ 4 ;

Использование того или иного подхода — это дело личного вкуса и удобства для разработчика библиотечного блока цистерны.

В качестве дополнительного сервиса в графическом контейнере блока можно предусмотреть изменение цвета анимированного столбика в зависимости от объема жидкости в цистерне. Для этого надо войти в графический редактор и выбрать «Сервис» → «Скрипт ...». Откроется окно, в котором уже есть введенный код. Вне секции начальной инициализации надо добавить несколько строк:

if state_ > 0.99 * total_ then bar_Volume.BarColor = 255 // красный

else

if state_ > 0.8 * total_ then bar_Volume.BarColor = 65535 // желтый

else

bar_Volume.BarColor = 16711680; // синий

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

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

С этой целью изменим, например, высоту последней секции цистерны с 6 метров до 9 метров и запустим модель в работу (рис. 4.18).

На рис. 4.18 видно, анимированная шкала автоматически изменила свои пределы за счет того, что был определен новый проектный объем цистерны. Кроме этого, в процессе работы модели по заполнению цистерны изменяется и цветовая окраска столбика.

57

Рис. 4.17. Скрипт графического контейнера блока цистерны.

Рис. 4.18. Результаты тестирования модели цистерны.

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

58

4.3. Создание собственной библиотеки блоков

Перед сохранением блока в библиотеки желательно выполнить еще два действия. Это, во-первых, выполнить закрытие субмодели (рис. 4.14), и, во-вторых, сохранить результат работы по созданию этого блока, выбрав в главном меню «Файл» → «Сохранить в файл».

Для занесения блока в библиотеку, надо выделить его на схеме, а затем и в главном меню SimInTech выбрать опцию «Файл» → «Сохранить в библиотеку». При этом появится запрос о вводе имени, под которым блок будет сохранен в библиотеке SimInTech (рис. 4.19).

Рис. 4.19. Запрос библиотечного имени блока.

Рис. 4.20. Поиск нового блока в списке записей библиотеки.

После ввода имени блока и нажатия Ок, выполняется запись блока в библиотеку, но пока никаких видимых изменений не наблюдается, и блок не отображается в линейке закладок. Чтобы это произошло, надо еще раз выбрать меню «Файл», потом «Редактировать библиотеку», − откроется окно, где, пролистав столбец «Все записи», находим блок «Serp Tank» (рис. 4.20).

59

Рис. 4.21. Добавление в библиотеку новой страницы и нового блока на ней.

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

Далее надо добавить новую страницу палитры с именем, например, Serp_Lib и перенести в нее выбранный блок (рис. 4.21), а затем перейти на закладку «Свойства записей».

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

60