125 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Моделирование систем в программной среде Scilab & Xcos 5.5.1

Моделирование систем в программной среде Scilab & Xcos 5.5.1

Xcos – это приложение, которое входит в состав системы математического моделирования Scilab, и предоставляет разработчикам возможности проектирования систем в области механики, гидравлики и электроники, а также систем массового обслуживания. Xcos представляет из себя графическую интерактивную среду, в основе которой лежит блочное моделирование. Приложение предназначено для решения задач динамического и ситуационного моделирования систем, процессов, устройств, а также тестирования и анализа этих систем. При этом моделируемый объект (система, устройство, процесс) представляется графически своей функциональной параметрической блок-схемой, включающей блоки элементов системы и связи между ними.

Мы расскажем об общих аспектах имитационного моделирования, а также познакомим с пакетом Xcos.

Концепция имитационного моделирования.

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

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

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

Общие сведения о пакете Xcos

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

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

программная среда Xcos: пример Xcos-модели:

результаты ее работы:

При помощи Xcos можно создавать системы управления, системы обработки сигналов, системы связи, модели любых динамических систем. Xcos создан разработчиками Scilab (хорошо известной и популярной программной среды) и является, как отдельным пакетом, так и платформой для модельно ориентированного проектирования.

Xcos отличается от Scilab тем, что Scilab это высокоуровневый язык программирования, а Xcos – это система графического моделирования на основе блок-схем, которая состоит из предварительно скомпилированных библиотек. Для визуального представления сигналов в Xcos можно использовать различные блоки визуализации. Модели Xcos хранятся в файлах с расширением .zcos или .xcos. Модель можно открыть двойным щелчком мыши на файле модели в текущем каталоге или при помощи команды «Файл/Открыть» в Xcos.

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

Она включает источники сигналов с практически любыми временными зависимостями, масштабирующие, линейные и нелинейные преобразователи с разнообразными формами передаточных характеристик, квантующее устройство, интегрирующие и дифференцирующие блоки и т. д. Как программное средство Xcos – типичный представитель визуально-ориентированного языка программирования.

На всех этапах работы, особенно при подготовке моделей систем, пользователь практически не имеет дела с обычным программированием. Программа автоматически генерируется в процессе ввода выбранных блоков, их соединений и задания параметров. Для описания процессов, протекающих в технологических системах, могут использоваться различные типы объектов по характеру изменения во времени:

– дискретные (например, размер поверхности, качество в ходе технологического процесса);

– непрерывные, среди которых: апериодические (например, размерный износ инструмента), циклические (например, тепловые изменения оборудования за смену).

Практически для всех блоков существует возможность индивидуальной настройки: можно изменять как внутренние параметры блоков (количество входов) так и их внешний вид (размер).

Блоки, включаемые в создаваемую модель, могут быть связаны друг с другом, как по информации, так и по управлению. По информационным соединениям передаются данные, а по управляющим – сигналы активации. Блоки также могут иметь информационные и управляющие входы и выходы. Как правило, информационные входы и выходы блоков располагаются слева и справа от изображения блока, а управляющие сверху и снизу. Тип связи зависит от блока и логики работы модели. Данные, которыми обмениваются блоки, могут быть скалярными величинами, векторами или матрицами произвольной размерности.

Модельно-ориентированное проектирование обеспечивает раннее выявление ошибок. Xcos является основой для модельно-ориентированного проектирования, автоматической генерации кода, тестирования и верификации моделей, имеет открытую архитектуру для интеграции моделей из других инструментов. Необходимость разрабатывать модели устройств возникает по причине дороговизны и большого времени на изготовление прототипов. Е

Читать еще:  Регулятор оборотов кулера программа

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

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

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

10 февраля 2014 года вышел новый релиз среды Scilab & Xcos (версия 5.5.1). Для установки Scilab & Xcos 5.5.1 рекомендуется следующая конфигурация компьютера:

– операционная система: Windows XP/Vista/7/8, Linux CentOS/Debian/Redhat/Fedora/Suse/Ubuntu – 32 и 64 bits;

– процессор c поддержкой SSE2;

– рекомендуемый объем оперативной памяти: 1 – 2 Gb;

– для полной инсталляции программы необходимый размер дискового пространства – 550 Mb.

Цифровые фильтры. Моделирование в Xcos

Цифровой фильтр – это программа обработки оцифрованного сигнала. Цифровой фильтр из входной последовательности значений <e[k]> строит на выходе новую последовательность <v[k]>:

Например, линейный фильтр второго порядка вычисляет очередное значение сигнала выхода v[k] по формуле

Здесь a2, a1, a, b1 и b – коэффициенты фильтра; e[k] – текущее (только что полученное) значение входного сигнала; e[k–1] и e[k–2] – два предыдущих значения входного сигнала полученные соответственно в моменты k–1 и k–2; v[k–1] и v[k–2] – два предыдущих значения выходного сигнала.

Вычислим реакцию такого фильтра на единичный ступенчатый входной сигнал e[k], который равен 0 при всех k

Отсюда сразу следует, что

.

Вернёмся снова к уравнению фильтра:

и запишем его в операторной форме, используя оператор запаздывания z –1 , такой что

Перенесем все значения выходного сигнала в левую часть:

и вынесем общие множители в обеих частях:

Разделим обе части равенства на скобку в левой части:

.

Умножим числитель и знаменатель на z 2 :

называется передаточной функцией цифрового фильтра. Для КИХ-фильтра знаменатель передаточной функции имеет вид z N , например,

.

Заметим, что установившееся значение на выходе фильтра при единичном ступенчатом входе можно найти, подставив в передаточную функцию C(z) вместо z единицу:

.

Для моделирования цифрового фильтра в Xcos используется блок DLR (группа Системы с дискретным временем). Период квантования задается таймером, который подключен к красному входу. В свойствах блока нужно ввести числитель (Numerator) и знаменатель (Denominator) передаточной функции фильтра.

При вводе числителя и знаменателя можно использовать переменные, например, так:

При сохранении этих данных в модели Xcos программа проверяет, есть ли такие переменные. Поэтому их нужно заранее определить в рабочем пространстве Scilab (присвоив им любые подходящие значения, в данном случае – числовые).

Можно также взять числитель и знаменатель из существующей модели Scilab:

Для этого модель цифрового фильтра должна быть заранее создана в рабочей области Scilab в формате передаточной функции:

–> a0 = 1.2;

–> a1 = 2.3;

–> b0 = -0.8;

–> C = syslin(“d”, a0*%z^2+a1*%z+1, %z^2+b1*%z+b0)

Существует особый блок с передаточной функцией , который выполняет запаздывание на один такт. Действительно, операторное уравнение такого фильтра

может быть записано в виде разностного уравнения

Это значит, что текущее значение выхода равно предыдущему значению входа.

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

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Часть 1.Основы программирования в Scilab

Серия контента:

Этот контент является частью # из серии # статей: SCILAB

Этот контент является частью серии: SCILAB

Следите за выходом новых статей этой серии.

Обозначения

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

  • код из консоли Scilab или для редактора скриптов Scipad записывается
  • жирным шрифтом указываются ключевые слова;
  • в угловых скобках указываются , которые вводятся или определяются пользователем. При этом в настоящем коде угловые скобки не вводятся.

Что такое Scilab

Scilab – это кроссплатформенная система компьютерной алгебры (СКА), обладающая сходным с Matlab синтаксисом встроенного языка. Разработка системы Scilab ведется сотрудниками французского Национального института информатики и автоматизации (INRIA – Institut National de Recherche en Informatique et Automatique) с 80-х годов прошлого века.

Читать еще:  Работа с почтовым клиентом Mozilla Thunderbird

Изначально это был коммерческий проект под названием Blaise, а затем Basile. С 2003 года продукт получил новое имя Scilab и стал бесплатным. В настоящее время он распространяется по свободной лицензии CeCILL.

Сама система Scilab, как и Matlab, предназначена прежде всего для численных расчетов и работы с матрицами. Кроме того, она обладает развитыми средствами программирования (включая отладчик скриптов), так что ее в какой-то мере можно рассматривать как систему разработки высокотехнологичных приложений.

Для системы имеется достаточно большое число пакетов расширений, которые можно найти на официальном сайте в разделе Toolbox center. Однако чем больше будет хороших пакетов, тем более полезной станет система. Поэтому мы предлагаем вам ознакомиться с программированием в Scilab и способами создания для данной СКА пакетов расширений.

Редактор SciPad

В данном цикле статей мы не будем останавливаться на выполнении вычислений в Scilab, не будем также рассматривать встроенные функции и их параметры. Эту информацию можно найти в Интернете (см. раздел «Ресурсы»), а также в справочных материалах самой системы. Мы займемся изучением непосредственно программирования в Scilab.

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

Открыть редактор можно двумя способами:

  • подать в консоли Scilab команду scipad
  • выбрать в главном окне последовательно пункты меню Инструменты → Редактор.
Рисунок 1. Внешний вид редактора SciPad

В моей системе установлена Scilab 5.1, в которой присутствует редактор Scipad 7.18. Внешний вид редактора показан на рисунке 1. Как видно, интерфейс достаточно прост. Кратко рассмотрим пункты меню:

File – здесь находятся стандартные команды для работы с файлами: открыть (Open), закрыть (Close file), сохранить (Save) и т. д., а также команды импорта файлов функций из формата Matlab и формирования справочных материалов.

Edit – содержит стандартные для пункта меню Правка операции: копировать (Copy), вставить (Paste), вырезать (Cut), выделить все (Select All) и т. д.

Search – здесь находятся функции поиска по тексту.

Execute – содержит пункты, позволяющие передать содержимое редактора в среду Scilab на выполнение или выполнить только выделенную часть.

Debug – содержит команды для организации и выполнения отладки, такие как включение точек останова (breakpoint), добавление переменных в список наблюдения (watch), настройка запуска функции и т. д. К сожалению, в Scilab 5.1 данный режим недоступен вследствие наличия неустраненной ошибки.

Scheme – команды управления подсветкой синтаксиса.

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

Window – команды управления рабочим окном. Позволяют разбить окно на части по вертикали и горизонтали, а также упорядочить размещение частей окна.

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

Сохранение, загрузка и выполнение скриптов пользователя

Сохранить созданный скрипт можно при помощи пунктов меню File:

  • File > Save – сохранить скрипт;
  • File > Save as – сохранить скрипт под другим именем;
  • File > Save all – сохранить все открытые скрипты.

Для открытия файла скрипта необходимо выполнить File > Open, а затем перейти в каталог с необходимым файлом, выбрать его и нажать кнопку Open. Кроме того, в самом меню File имеется список последних открывавшихся файлов.

Чтобы протестировать функцию, ее необходимо передать в основное окно Scilab (консоль). Для этого необходимо воспользоваться меню Execute, в котором присутствуют три пункта:

  • Load into Scilab – загрузить в Scilab текущий скрипт;
  • Load all into Scilab – загрузить в Scilab все открытые скрипты;
  • Evaluate selection – выполнить в консоли Scilab только выделенные строки.

Стандартные конструкции встроенного языка

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

Переменные не описываются, а создаются путем присвоения им начального значения, например так:

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

Вследствие Unix-корней системы, важен регистр букв в имени переменных, например:

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

Из приведенного примера видно, что в общем случае описание функции выглядит следующим образом:

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

Линейный процесс вычислений

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

Вот пример выполнения этой функции:

Теперь укажем в качестве входного параметра не одно значение, а массив значений:

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

Читать еще:  Fotaapp что это за программа?

В пользовательских скриптах можно использовать любые сторонние функции, входящие в состав самой системы Scilab или ее пакетов-расширений. При этом используются следующие знаки действий: + (сложение), – (вычитание), * (умножение), / (деление), ^ (возведение в степень), ‘ (транспонирование). Изначально эти операции служат для выполнения матричных действий по правилам матричной алгебры. Например:

Здесь сделана попытка перемножить две строки, но по правилам матричной алгебры это нельзя сделать. Одну из из строк необходимо транспонировать, чтобы получился столбец. Кроме того, согласно правилам матричной алгебры, важен порядок множителей:

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

То же самое относится и ко всем остальным действиям кроме операции транспонирования.

Операторы ветвления

Создадим теперь функцию для расчета логарифма числа по произвольному основанию:

Однако, как известно, логарифм числа a по основанию b имеет смысл только при выполнении условий: a,b > 0, a ≠ 1. Наложим дополнительное условие: входные параметры должны быть скалярными величинами, т. е. не векторами или матрицами. Для того чтобы функция не приводила к выводу сообщения об ошибке или краху системы, входные данные следует проверять на корректность. Сделать это можно при помощи условного оператора, общий вид которого показан ниже:

Запишем новый вид функции с проверкой входных данных на корректность:

В приведенном фрагменте кода используется функция or([массив условий]), возвращающая результат применения логической операции ИЛИ ко всем, перечисленным в квадратных скобках, условиям. Сходна с ней и функция and([список условий]), возвращающая результат применения логической функции И ко всем элементам списка условий. Однако можно использовать и стандартные операции C++, т. е. & – И, | – ИЛИ.

Также нуждается в пояснении функция error( ). Эта функция останавливает вычисления и сообщает пользователю о том, что произошла ошибка и указывает имя и строку функции, в которой эта ошибка возникла. Более мягким решением может быть использование предупреждений (warning), которые позволяют вывести сообщение о возникших проблемах, но вычисления при этом не останавливаются. Способ использования прост:

Иногда возникает необходимость выполнить те или иные действия в зависимости от значения некоторой переменной. Если тип этой переменной является перечислимым, т. е. переменная может принимать конечное количество значений, то можно воспользоваться оператором множественного выбора. Общий вид этого оператора показан ниже:

Иными словами, в заголовке оператора множественного выбора указывается переменная перечислимого типа, затем указывается один из вариантов (case) значения переменной и выполняется соответствующее данному значению действие. Следует отметить, что служебное слово then должно находиться на одной строке со словом case.

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

Циклы

Для организации повторяющихся вычислений в Scilab присутствует два стандартных типа циклов: счетный (for) и условный (while). Первый используется в тех случаях, когда заранее известно количество повторений тела цикла, второй – в обратном случае.

Общий вид оператора счетного цикла следующий:

В качестве выражения может выступать все что угодно. Если в качестве выражения указывается вектор (матрица), то переменная-счетчик последовательно принимает все значения этого вектора (матрицы). Если вспомнить, как в Scilab создаются массивы значений, то можно привести эту конструкцию к стандартному виду для цикла for во всех языках программирования:

Рассмотрим описанную нами функцию edIzm. Если на вход ей будет подано не одно значение, а несколько, то, вне зависимости от количества элементов, будет выведен единственный и абсолютно неверный результат:

Дело в том, что Scilab пытается перевести в строку весь массив сразу. Поэтому длина строки получается очень большой. Следовательно, необходимо рассмотреть каждый из элементов. В этом может помочь счетный оператор цикла:

Кроме использования оператора цикла for, в коде функции появилась переменная i для нумерации элементов результата и переменная-результат заключена в квадратные скобки, чтобы показать, что в результате получится массив. Возможен и такой вариант начала функции:

Однако и на данном этапе функция еще не совершенна, поскольку в строку число переводится в том же виде, что и отображается, а это максимум девять позиций, и результат ‘Много’ мы никогда не получим. Поэтому лучше будет просто посчитать количество разрядов в числе. В этом нам поможет цикл while. Общий вид этого оператора:

Пока результат вычисления выражения равен True, цикл выполняется. Чтобы отделить выражение-условие от тела цикла, можно использовать ключевые слова then или do, но они должны находиться на той же строке, что и while. Кроме того, перед end можно вставить блок else, инструкции которого будут выполнены после того, как выражение-условие станет ложью (False).

Итак, вместо строк

можно вставить следующее:

Окончательную версию функции вы можете загрузить по ссылке в разделе «Загрузка».

Заключение

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: