Справка по DEMO_SMITEST
DEMO_SMITEST = DEMO SMI TEST = Demo State Manager Interface Test
ДЕМО система:
DEMO_SMITEST,
Документация:
SMI,
SmiServer/,
FsmManager,
SmiProxy,
SmiuiSrv,
&SmiSrv.
DEMO_SMITEST - это иллюстрация реализации Конечного Автомата FSM (finite state machine).
Этот пример иллюстрирует
работу прокси-сервера SMI
SmiProxy + сервер &SmiSrv
и показывает как работает
конечный автомат SMI FSM.
Пример моделирует простой
эксперимент, с журналом и
сборщиком событий. Прокси
объекты реализованы в DAQ
Pascal, имеется справка.
GUI реализовано в Tcl/Tk.
|
Диаграмма состояний сборщика событий EVT_BUILDER.
|
Диаграмма состояний журнала событий LOGGER.
|
Демо-конфигурация сделана с двумя доменами (DEMO и AUTO), для иллюстрации взаимодействия доменов.
Соответсвенно есть два SML файла в каталоге Config:
run_con_demo.sml и
run_con_auto.sml.
Домены запускаются с помощью сервера &SmiSrv:
[ConfigFileList] ; General Purpose Servers ; включить стандартную
ConfigFile = ~~\Resource\DaqSite\Default\SmiSrv.cfg ; конфигурацию &SmiSrv
[]
...
[&SmiSrv.StartupScript] ; В начале работы &SmiSrv:
@dimdnslaunch ; запустить локальный DIM DNS
@dim_dns_node localhost ; задать DIM_DNS_NODE
@smitranslate run_con_demo.sml ; компилировать run_con_demo.sml
@smismstart DEMO run_con_demo.sobj -dns localhost ; и запустить с ним домен DEMO
@smitranslate run_con_auto.sml ; компилировать run_con_auto.sml
@smismstart AUTO run_con_auto.sobj -dns localhost ; и запустить с ним домен AUTO
@smismguard 60000 ; сторожевой таймер перезапуска
[]
[&SmiSrv.FinallyScript] ; В конце работы &SmiSrv:
@smismstop * ; завершить серверы SMI
[]
Домен AUTO содержит объекты { PILOT, DEMO::RUN }.
При этом объект AUTO::DEMO::RUN а домене AUTO объявлен как /ASSOCIATED,
т.к. он является прокси объектом, который представляет логический объект DEMO::RUN из домена DEMO.
Прокси-объект AUTO::DEMO::RUN имеет тот же набор состояний (state) и действий (action),
но не имеет кода реализации, т.к. его реализует логический объект DEMO::RUN из домена DEMO.
Кроме того, в прокси-объекте дополнительно присутствует состояние DEAD /dead_state на случай потери связи.
Объект AUTO::DEMO::RUN а домене AUTO используется в коде логического объекта PILOT
для реализации "АВТОПИЛОТА", т.е. внешнего управления объектом DEMO::RUN.
С точки зрения "АВТОПИЛОТА", весь домен DEMO представляется одним логическим объектом DEMO::RUN,
представленным своим "аватаром" AUTO::DEMO::RUN, т.е. замещающим прокси-объектом, описывающим его состояния.
Вся сложность реализации объектов домена DEMO скрыта за этим прокси-объектом.
Домен DEMO содержит объекты { AUTO::PILOT, RUN, RUN_TYPE, LOGGER, EVT_BUILDER }.
При этом объект DEMO::AUTO::PILOT а домене DEMO объявлен как /ASSOCIATED,
т.к. он является прокси объектом, который представляет логический объект AUTO::PILOT из домена AUTO.
Прокси-объект DEMO::AUTO::PILOT имеет тот же набор состояний (state) и действий (action),
но не имеет кода реализации, т.к. его реализует логический объект AUTO::PILOT из домена AUTO.
Кроме того, в прокси-объекте дополнительно присутствует состояние DEAD /dead_state на случай потери связи.
Замещающий объект DEMO::AUTO::PILOT в домене DEMO используется для создания графического интерфейса,
т.е. отображения состояний и обработки действий объекта AUTO::PILOT из домена AUTO.
Это позволяет делать графические интерфейсы единообразно, по принципу "одно окно - один домен - один SML файл",
но при этом использовать любые нужные в работе объекты SMI из любых доменов.
Таким образом, в данном примере два домена активно взаимодействуют друг с другом через прокси-объекты.
Именно таким образом можно строить многоуровневые иерархические системы управления, в которых
различные уровни управления взаимодействуют друг с другом через механизмы SMI.
CRW-DAQ © 2001..2020 Alexey Kuryakin kouriakine@mail.ru.