Справка по 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
Диаграмма состояний сборщика событий EVT_BUILDER.
Диаграмма состояний LOGGER
Диаграмма состояний журнала событий 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.