Деятельность состояния

Top  Previous  Next

Деятельность, приписанная состоянию (внутренняя или локальная деятельность), начинает выполняться при переходе в данное

состояние после завершения всех мгновенных действий, включая входные действия в состоянии и продолжает выполняется до тех пор, пока

состояние остается текущим.

 

Во входном языке AnyDynamics в качестве деятельности в состоянии используется активный динамический объект — экземпляр некоторого

активного динамического класса. Этот экземпляр создается при входе в состояние после завершения входных действий в состоянии и уничто-

жается при выходе из состояния после завершения выходных действий в состоянии и действий сработавшего внешнего исходящего перехода.

 

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

начальные значения переменных объекта, отличные от их значений в определении класса, например

 

do Flight (V0=100, Teta=rad(30))

 

Класс объекта-деятельности может быть внутренним или внешним (глобальным).

В первом случае в нем видимы все переменные и локальные объекты класса, которому принадлежит состояние.

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

параметры деятельности и выходные действия состояния (см. Внешний переход) или создавать специальный внутренний класс-"обертку".

 

Рассмотрим модель переключаемого генератора сигнала: в зависимости от значения режима генерации (переменная «mode»)

генератор должен выдавать на выходе «y» значение ноль, либо синусоидальный сигнал, либо пилообразный сигнал.

 

type Mode is (yNone, ySin, ySaw);

...

mode: Mode := yNone;

 

Каждому из этих режимов соответствует свое состояние в карте поведения, смена состояний происходит в соответствии со значением переменной «mode».

 

Рассмотрим первый вариант, когда все деятельности являются экземплярами внутрених классов (рис.1).

 

Gen_BC_inner

                 Рис.1

 

Состоянию S_None не приписано никакой деятельности.

 

Состоянию S_Sin приписана непрерывная деятельность — экземпляр внутреннего непрерывного класса «SinGen» с уравнением "y = A*sin((2*pi())/T*time())".

Состояние, которому приписан непрерывный объект-деятельность, изображается жирной линией (рис.1).

 

Состоянию S_Saw приписана гибридная деятельность — экземпляр гибридного локального класса «SawtoothGen» (рис.2).

Состояние, которому приписан гибридный объект-деятельность, изображается двойной тонкой линией (рис.1).

saw_gen_inner

         Рис.2

 

Состоянию S1 приписана непрерывная деятельность с уравнением "y = (A/T)* time()". В течение интервала T значение "y" растет линейно, затем срабатывает

внешний переход в то же самое состояние. При повторном входе в состояние S1 объект-деятельность создается заново (см. Внешний переход) и локальное время

time() снова начинает отсчитываться от нуля. Поэтому процесс повторяется. Получается "пила" с амплитудой A и периодом T.

 

Рассмотрим второй вариант, когда для генерации "пилы" используется уже готовый стандартный класс "SysLib.CSawtoothGenerator".

Создадим "обертку" - внутренний непрерывный составной класс "SawtoothGen", в структурную хему которого поместим объект "saw_gen" - экземпляр класса  "SysLib.CSawtoothGenerator"

с нужными значениями параметров (рис.3).

saw_gen_str

         Рис.3

 

Уравнения класса "SawtoothGen" включают одну формулу  "y = saw_gen.Y", с помощью которой значение внешней переменной экземпляра внешнего класса

"ретранслируется" в переменную "y" класса-контейнера.

Для этого варианта основная карта поведения имеетследующий вид (рис.4).

Gen_BC

                 Рис.4
 

В том случае, если деятельность состояния является дискретным или гибридным объектом с конечным состоянием, она может выполняться в ортогональном времени (см. Ортогональное время). Для этого необходимо пометить пункт «Ортогональное время» всплывающего меню. При выполнении деятельности в ортогональном времени время основной модели не будет меняться.