Simulink и Scicos:
1. Наличие сигналов активации блоков: модель Scicos должна быть конфигурирована по другому, чтобы получить те же результаты.
2. Размерность входов и выходов: Scicos требует установки этих параметров для блоков, в то время как в Simulink’е они устанавливаются в соответствии с вычислительным кодом.
Иллюстрация 1 показывает пример PID моделей в исполнении Simulink и Scicos.
Из графиков видно, что оба имитатора приводят к одинаковым результатам.
Примеры
Изучать программирование на наглядных примерах намного легче, чем читать учебники, как бы хорошо они ни были написаны. Хороший пример заставляет быстро поверить в свои силы и подвигает на создание своих собственных моделей.
Пример 1. Рассмотрим структуру системы оценивания в пространстве состояний, получающую выборку данных от линейной системы. Система смоделирована как линейная непрерывная:
= Ах + Вu,
у = Cx,
где A, B, C - постоянные матрицы.
Наблюдению доступен вектор y, поступающий на вход без шумов. Кроме того, на вход поступает управление u и начальное значение вектора х: х0. На выходе формируется оценка . Переходный процесс в такой системе должен быть по возможности коротким, но при этом флуктуационная составляющая ошибки не должна быть велика.
Уравнение оценивания в таком случае имеет вид:
= A + Bu + K(y−C ).
Матрица K должна быть выбрана так, чтобы у собственных значений − KC были отрицательные вещественные части.
Текст программы Scilab для выполнения этой процедуры с неопределенными заранее матрицами, помещенными в контекст модели, является следующим:
Функция ppol используется, чтобы получить матрицу усиления K. На вход u подается sin (t).
Использование символических параметров полезно, потому что оно позволяет нам создавать универсальную модель. Чтобы изменить матрицы A, B, и C и размерность системы или время дискретизации, мы должны изменить только определение m, n и матрицы. Никаких изменений в схеме не требуется.
На верхней панели показаны параметры до их изменения. На нижней после изменения.
Фактически, перезаписывая контекст, мы можем сделать диаграмму полностью универсальной.
Сделаем загрузку:
Мы только должны удостовериться, что файл данных datafile содержит переменные A, B, C, D, x0, и dt прежде, чем начать сеанс Scicos. Этот файл может быть создан в Scilab следующим образом:
→save('datafile'',A,B,C,x0,dt)
Комментарий.
Если контекст содержит много строк кода Scilab, удобно поместить код в отдельный файл скрипта и выполнить его единственной командой exec в контексте. Однако, если файл, выполняемый командой exec, изменен, когда модель уже открыта и пользователь хочет, чтобы изменения были приняты во внимание, он должен сделать оценку, потому что у Scicos нет никакого способа узнать, были ли сделаны изменения.
Нужно также отметить, что использование отдельного файла скрипта подразумевает, что диаграмма Scicos не является модульной, и этот файл скрипта должен всегда сопровождать модель.
Пример 2. Решить дифференциальное уравнение
y'"' + y'"+ y" + 0.5y' + 0.1y = 0.1,
при нулевых начальных условиях.
Для самой высокой производной запишем
y'"' = - y'"- y" - 0.5y´- 0.1y + 0.1.
Предположим, что y'"' известна. Тогда, после четырехкратного интегрирования получим у. Самая высокая производная, y'"' существует между блоками 8 и 1.
Постоянное слагаемое 0.1 формируется блоком 7 как шаг в момент t=0. Производные y'", y", y' и y отoбражаются в MScope 12.
Результаты решения через мультиплексор 9 записаны в файл в ASCII-коде блоком 10.
Начальные условия у всех интеграторов нулевые, в соответствии с условиями задачи.
У интеграторов есть верхние и нижние пределы. Необходимо не забывать задать их перед пуском.
Блок 7 по умолчанию имеет начальное время ступени равное 1. Его необходимо заменить на 0.
Блоки 5 и 6 не обязательны, так как можно установить входной множитель в блоке 8. Здесь они включены для наглядности.
Часы активации имеют начальное время равное нулю, а период 0.1. Это не имеет никакого отношения к точности решения, а только задает шаг выхода.
MScope имеет размерность входных портов портов {1 1 1 1}. Величины Ymin и Ymax были установлены после первого прогона. Период обновления (refresh-period) такой же как окончательное время интегрирования.
Запись в файл (блок 10) удобна тем, что данные могут быть импортированы в другие программы. Необходимо задать имя файла и задать строку формата в стиле Fortran. Это значит:
формат пишется в круглых скобках и включает:
/ – новая линия;
iw – область целого числа с шириной w знаков;
fw.d – область числа с плавающей запятой шириной w знаков, включая d цифры после десятичной запятой. Здесь w> = d+3, чтобы включить по крайней мере одну цифру целого числа, знак и точку;
ew.d – область числа с плавающей запятой, степень десяти шириной w знаков, включая d цифры после десятичной запятой. Здесь w> = d+7, чтобы включить по крайней мере одну цифру целого числа, знак для мантиссы, трех знаков для экспоненты, знака экспоненты и одного для точки;
nx n – пробелы;
tn – перемещает курсор принтера в положение n.
В этом примере выбрано (7 (e16.8,1x)) для строки формата (8 десятичных чисел), так как величины переменных малы.
Пример 3. Рассмотрим решение еще одного ДУ.
Продемонстрируем простым примером, как моделирование некоторых уравнений может стать сложным (можно показать как эту задачу можно облегчить с помощью компонентов Modelica). Рассмотрим систему ДУ:
Теперь покажем реализацию этих уравнений в модели.
В блочном подходе есть несколько недостатков. Для моделирования часто необходимо слишком много блоков. Это делает модель неудобочитаемой. Также в такой сложной блок-схеме трудно отразить наглядно структуру физической или технической задачи.
Пример 4.
Блок с массой М перемещается по грубой поверхности с коэффициентом трения f. Постоянная сила сопротивления – f·M·g, где g – сила тяготения, и K – коэффициент упругости пружины.
Покажем движение блока на графике, если его перемещают на 1 метр направо и отпускают.
Такое движение можно описать уравнением:
y" = -y - 0.15*sign (y').
Начальное условие для положения установлено в 1 метр (в блоке интегратора 2), время окончания интеграции 9.4, время обновления MScope 10. Период часов активации 0.01, а начальное время равно нулю.
Комментарии.
Фазовый портрет отражает начальные величины y = 1 и y' = 0. Скорость в начале равна нулю, а ускорение отрицательно, таким образом, блок начинает перемещаться влево. Это означает, что постоянная сила трения, задаваемая блоком 6, должна быть положительна и это так и есть, так как она отрицательна на входе (знак минус на входе блока 6).
Если установить время интеграции больше, чем физически возможное время (здесь 3·π секунды) то Scicos входит в бесконечный цикл и после этого придется остановить модель вручную.
Литература
1. Ramine Nikoukhah. Scicos: a dynamic systems modeler and simulator. INRIA-Rocquencourt. Domaine de Voluceau, France.
2. Masoud Najafi. The numerical solver for the simulation of the hybrid dynamical systems. Universite Paris, 2005, 237 c.
3. Jean-Marie Zogg. Arbeiten mit Scilab und Scicos. Fachhochschule Ostschweitz, 2007, 125 c.
4. Finn Haugen. Master Scicos. 8. July 2008.
5. Grudlagen digitale Regelung und Mechatronik Simulation mit Scilab und Scicos. www.ebokaktiv.de
6. Ramine Nikoukhah. Scicos: a dynamic systems modeler and simulator. INRIA, Franse.
7. Материалы сайта www.scilab.org