Аналитические и имитационные модели. Финаев В.И - 294 стр.

UptoLike

294
С другой стороны, не существует никакой
принципиальной разницы между локальным поведением и
элементарным блоком. Непрерывное локальное поведение -
это классическая динамическая система. Дискретное
локальное поведение - это классическая карта состояний.
Гибридная карта состояний и задает элементарный
гибридный блок как «склейку» из классических блоков.
Пусть, например, нам нужно создать комбинированный
генератор сигнала, который
выдавал бы на выходе в
зависимости от положения переключателя (перечислимая
переменная Mode) либо синусоиду, либо пилообразный
сигнал, либо ничего.
Можно написать формулу генерации синусоиды и
нарисовать карту состояний для генерации «пилы» (см.
рис. 10.3), но готовые отлаженные генераторы синусоиды и
«пилы» (пусть эти классы называются CSinGen и CSanGen)
имеются в библиотеке стандартных блоков любого
пакета
моделирования. Можно использовать главные поведения
этих блоков как локальные для соответствующих
состояний. Необходимо ассоциировать их внешние
переменные с переменными используюшегося блока при
создании экземпляра поведения. В данном примере выход
комбинированного генератора используется вместо
выходов
Y в стандартных блоках:
block class CGenerator {
input enum {mNull,mSin,mSaw} Mode = mNull;
atatechart class main {
initial state NullGen entry actions (Y = 0);
state SinGen do CSawGen (Period=2, V as Y);
transition from NullGen to SinGen when Mode= =mSin;
transition from SinGen to NullGen when Mode!=mSin;
transition from NullGen to SawGen when Mode= =mSin;
transition from SawGen to NullGen when Mode!=mSin;
}/*main;