Переход через нулевой уровень
Пересекающие нулевой уровень события (и соответствующие блоки палитры Treshold) введены, чтобы преодолеть трудность в моделировании непрерывных систем, когда есть некоторые «прерывания», т.е. резкие изменения (скачки) сигналов. Эти явления могут вызвать ошибки при использовании используемых методов интеграции. Численный решатель Scicos, благодаря механизму обнаружения моментов перехода через ноль, может обнаружить такие события. Для обычных случаев в Scicos используется блок пересечения нуля. Цель этого блока состоит в том, чтобы при обнаружении «разрывов» (скачков) сигналов производить переключения уравнений системы.
Применение блоков пересечения нуля чаще всего необходимо в гибридных моделях для непредсказуемых событий. Например, при моделировании системы контроля уровня жидкости в резервуаре в случае прекращения притока, как только уровень превысит определенную величину.
В некоторых приложениях, в дополнение к установлению факта пересечения, мы должны знать направление пересечения.
В этих целях в Scicos имеются два других блока: блок «+ to –» и блок «– to +», которые фиксируют не только факт пересечения, но и учитывают направление этого пересечения.
Покажем простой сеанс Scicos, чтобы проиллюстрировать использование блоков нулевого пересечения.
Мы уже столкнулись с часами активации Event Clock, которые генерировали последовательность равномерно расположенных во времени событий. Они были использованы, чтобы активизировать Scope. Откроем пустое окно Scicos. Создадим следующую модель, копируя блоки из палитр.
Блок «+to-» находим в палитре Treshold, S/H-блок (sample and hold, образец и сохранение) – в палитре линейных блоков и cos-блок – в нелинейной палитре. Отметим, что блок MScope имеет 3 входа. Количество входов MScope является параметром блока; его нужно установить прежде, чем входы будут подсоединены.
Блок «+to-» генерирует событие каждый раз, когда входной сигнал пересекает нулевой уровень, изменяясь от плюса к минусу. Входной сигнал должен быть непрерывной функцией времени. Эти события активизируют блок S/H, который копирует входной сигнал (образец) на свой выход. Сигнал на выходе не изменяется до следующей активации блока.
Результат счета показан на рисунке.
Параметр амплитуды блока генератора sinusoid установлен 8.7. События, с выхода блока пересечения нулевого уровня, были использованы для генерации дискретных сигналов. Эти дискретные сигналы могут быть использованы в свою очередь для управления непрерывными компонентами. Это часто делается в управляющей системе, где дискретные контроллеры управляют непрерывными системами. Простой пример:
Дискретный сигнал возвращается в непрерывную часть схемы. Отметим, что у генератора прямоугольных волн выходной порт слева (в линейной палитре, выход у этого блока справа). Это сделано посредством использования команды Flip в меню Editor. Этот блок выдает на выход 0 или 1, переключение производится сигналом активации. Результат моделирования показан ниже.
Блоки с условием
Основные функциональные блоки выполняют заданные вычислительные функции, тогда как блоки с условием управляют порядком вычислений в модели. Эти блоки могут активизировать другие блоки в модели Scicos при выполнении некоторых условий.
Всякий раз, когда эти блоки получают сигнал активации, они в этот же момент формируют синхронный сигнал активации на выходном порту как функцию величины сигнала на их основном входе.
Сигналы на выходах этих блоков взаимоисключающи.
Чтобы показать применение блока "Then-If-Else" рассмотрим следующую схему.
У селектора есть два входных порта активации. Блок может быть активизирован в данный момент только одним из них. Всякий раз, когда селектор активизирован по первому или второму входу входной сигнал принимается на вход также с первого или второго входа основного сигнала соответственно. Таким образом, на выходе селектора присутствует пилообразный сигнал, если сигнал random generator положительный и прямоугольный волновой сигнал, если сигнал random generator отрицательный.
Если блок, "Then-If-Else" не имеет входного порта активации, он управляет блоками непрерывного сигнала, которые получают активацию по другим цепям. В этом случае, численный решатель видит только те блоки, которые находятся в активной ветви блока "If-then-Else".
Блоки «Event seleсt» также считаются синхронными блоками. У него есть встроенный индикатор пересечения нуля. Блок имеет один вход и в любой момент активизирован только один выход.
Векторный вход-выход
Мы уже видели, что блоки могут иметь более чем один вход. Они могут также иметь более чем один выход и, кроме того, каждый вход и выход может быть распараллелен (векторизован). Таким образом, каждый порт ассоциируется с размерностью. При соединении выходного порта с входным, размерности портов должны быть равными.
Создадим следующую схему, копируя блоки из палитр.
Mux (мультиплексор) находится в палитре Branching (расширение). Этот блок может иметь любое количество входов, в том числе и векторных; выход является вектором, полученным как конкатенация входов.
Единственный параметр этого блока – количество входов; нет необходимости определять размерность каждого входа. Scicos определяет эту размерность по блоку, с которым связан входной порт.
В вышерассмотренном примере, входы размерностью единица и, следовательно, выход является двумерным вектором. Аналогично для Scope (здесь - нет необходимости определять размер входного вектора, это делается автоматически.
Изменим схему следующим образом.
Блок Demux производит действие, противоположное блоку Mux, то есть разделяет входной вектор на векторы меньшего размера. Demux отменяет то, что сделал Mux.
Чтобы избежать наложения сигналов, убедитесь, что были устанавлены параметры MScope – два входа. При этом он будет использовать два графических окна.
Изменим схему.
Новый блок является линейной динамической системой.
dx/dt = Ax + Bu; u входной вектор, x текущее состояние |
y = Cx + Du; y выход |
Изменим параметры нового блока следующим образом:
Заметим, что блочные параметры: A, B, C и D матрицы. Они определяют размерности входных и выходных векторов.
Параметры задаются, используя синтаксис Scilab. Завершим схему следующим образом:
Размерности входных выходных векторов совместимы.