&SmiSrv для CRW-DAQ
В начале ознакомьтесь с обзором технологии SMI,
без которой назначение &SmiSrv будет непонятным.
&SmiSrv - это сервер в составе пакета CRW-DAQ для
управления запуском, остановкой и работой доменов (серверных процессов)
SMI.
Общая схема работы с сервером &SmiSrv выглядит примерно так:
- Программист создает файл(ы) *.SML с описанием логики конечных автоматов на языке
SML.
Каждый *.SML-файл описывает свой отдельный домен, т.е. группу логических
объектов SMI, которые будут выполняться
совместно в рамках одного серверного процесса smiSM.exe.
Созданные *.SML файлы помещаются в каталог DAQ-конфигурации.
- Сервер &SmiSrv включается в DAQ-конфигурацию.
- Сервер &SmiSrv управляет подготовкой, запуском и остановкой серверов доменов SMI
с помощью консольных команд (сообщений).
- В секцию [&SmiSrv.StartupScript] помещаются команды, автоматически конфигурирующие и запускающие серверы доменов SMI.
Командой @dim_dns_node задается имя сервера имен DNS по умолчанию.
Командой @dimdnslaunch обеспечивается запуск локального сервера имен DNS.EXE, если он нужен.
Командой @smitranslate каждый файл *.SML транслируется в объектный файл *.SOBJ, нужный для запуска домена SMI.
Командой @smismstart выполняется запуск домена SMI для каждого объектного файла *.SOBJ.
- Вспомогательные команды позволяют наблюдать и контролировать работу серверов доменов SMI в процессе работы.
Командой @smismreport осуществляется наблюдение над работой серверов доменов SMI.
Командой @smismguard запускается сторожевой таймер (guard) для автоматического перезапуска "упавших" серверов доменов SMI.
Командой @smismstop можно останавливать работу серверов доменов SMI.
- В секцию [&SmiSrv.FinallyScript] помещаются команды, останавливающие все серверы доменов.
В результате сервер &SmiSrv управляет подготовкой/запуском/остановкой/обслуживанием серверных процессов smiSM.exe,
каждый из которых обслуживает домен, описанный в своем *.SML файле.
Ссылки:
Состав
Конфигурация
Сообщения
Состав сервера &SmiSrv
&SmiSrv включает в себя (помимо самой библиотеки SMI):
Конфигурация сервера &SmiSrv
Для использования сервера &SmiSrv надо включить в конфигурацию DAQ стандартный заголовочный файл
Default/SmiSrv.cfg,
который ссылается на стандартный конфигурационный файл
SmiSrv.cfg:
[ConfigFileList]
ConfigFile = ~~\Resource\DaqSite\Default\SmiSrv.cfg
[]
При необходимости в секции [&SmiSrv] можно переопределить некоторые параметры, заданные по умолчанию.
Например:
[&SmiSrv]
StdInFifo = 128
StdOutFifo = 128
StdInPipe = 128
StdOutPipe = 128
[]
Для подготовки, запуска, остановки и управления доменами SMI (серверами конечных автоматов)
используются консольные команды (cообщения).
Эти сообщения можно задавать в секциях
инициализации [&SmiSrv.StartupScript]
и завершения [&SmiSrv.FinallyScript].
Тогда они будут выполняться автоматически при запуске/завершении DAQ-системы.
Например:
[&SmiSrv.StartupScript] ; стартовый сценарий
@dimdnslaunch ; проверить/запуcтить сервер имен DNS.EXE
@dim_dns_node localhost ; задать имя сервера имен DIM DNS по умолчанию
@smitranslate run_con.sml ; транслировать файл *.SML в объектный файл *.SOBJ
@smismstart DEMO run_con.sobj -dns localhost ; запустить домен SMI (сервер конечных автоматов)
@smismguard 60000 ; сторожевой таймер: проверка/запуск раз в минуту
[]
[&SmiSrv.FinallyScript] ; завершающий сценарий
@smismstop * ; остановить все серверы
[]
Сообщения &SmiSrv
Для своей работы &SmiSrv использует консольные cообщения,
которые можно посылать функциями devPost или devSend,
а также задавать в секциях
инициализации [&SmiSrv.StartupScript]
и завершения [&SmiSrv.FinallyScript]
для автоматического исполнения при запуске/завершении DAQ-системы.
@dim_dns_node n - задать имя по умолчанию для сервера имен DIM_DNS_NODE=n.
Имя DNS по умолчанию используется в случае, если при старте сервера домена в команде @smismstart
явно не указано имя сервера имен в опции -dns n.
Например:
@dim_dns_node localhost ; задать локальный DNS по умолчанию
@dimdnslaunch - проверка и запуск локального сервера имен dns.exe.
Команда проверяет, запущен ли процесс локального сервера имен dns.exe. Если он не запущен, запускает его.
Например:
@dimdnslaunch ; проверка и запуск сервера имен dns.exe
@dim_send_command c - посылка DIM команды с.
Посылает DIM команду. Используется, например, для завершения работы серверов.
Так, для SMI домена DEMO командный сервис DEMO_SMI/EXIT служит для завершения работы.
Например:
@dim_send_command DEMO_SMI/EXIT 0 -dns localhost -i
где
DEMO_SMI/EXIT 0 - имя командного сервиса (DEMO_SMI/EXIT) и передаваемые данные (0)
-dns localhost - задание имени сервера имен DNS, в данном случае локального (localhost)
-i - указывает на то, что посылаемые данные имеют целочисленный тип (integer)
@smitranslate f - транслировать исходный *.SML файл f с описанием конечного автомата
в объектный файл *.SOBJ для исполнения сервером smiSM.exe.
При трансляции неполные имена файлов указываются относительно каталога основной конфигурации DAQ-системы
(обычно это каталог Config), поэтому рекомендуется размещать *.SML файлы в этом каталоге,
чтобы можно было использовать короткие имена файлов без путей.
Объектный файл *.SOBJ при трансляции помещается в том же каталоге, что и исходный файл *.SML.
Например:
@smitranslate run_con.sml ; транслировать файл run_con.sml в файл run_con.sobj
@smismstart d s -dns n - запустить сервер домена d c объектным файлом s
и сервером имен n с помощью сервера конечных автоматов smiSM.exe.
Команда запускает сервер конечных автоматов smiSM.exe и передает ему для исполнения следующие аргументы:
- d - Имя домена SMI. Объекты (конечные автоматы) SMI имеют имена DOMAIN::OBJECT.
- s - Имя объектного файла *.SOBJ, который заранее генерируется командой трансляции @smitranslate.
- -dns n - Задает имя n для сервера имен DIM DNS. Если имя не указано, используется значение по умолчанию, заданное командой @dim_dns_node.
После запуска домена он помещается в список запущенных доменов, чтобы контролировать его дальнейшую работу.
Неполные имена объектных файлов указываются относительно каталога основной конфигурации DAQ-системы
(обычно это каталог Config), поэтому рекомендуется размещать *.SOBJ файлы в этом каталоге,
чтобы можно было использовать короткие имена файлов без путей.
Например:
@smismstart DEMO run_con.sobj -dns localhost
где
DEMO - имя домена SMI
run_con.sobj - имя объектного файла, заданого относительно каталога DAQ-конфигурации
-dns localhost - задает сервер имен DIM DNS, в даном случае локальный сервер (localhost)
@smismstop d - остановить (завершить) SMI сервер домена d и удалить его из списка доменов.
Команда завершает работу сервера домена SMI с именем d, завершая сответствующий сервер конечных автоматов smiSM.exe.
Если задано имя домена *, то завершаются все домены, имеющиеся в текущем списке доменов.
После завершения заданного сервера домена этот домен удаляется из списка доменов.
Например:
@smismstop DEMO ; остановить и удалить домен DEMO
@smismstop * ; остановить и удалить все домены
@smismreport m - вывести текущий список запущенных серверов доменов SMI с уровнем детализации m.
Команда выводит в консоль текущий список запущенных командой @smismstart серверов доменов SMI.
Необязательный параметр m задает уровень детализации - 0:кратко, 1:подробно.
Например:
@smismreport ; показать текущий список доменов
@smismreport 1 ; показать более подробный список
@smismguard t - устанавливает/отменяет/запускает сторожевой таймер с параметром t.
Сторож или защитник (guard) - автомат, который служит для проверки и (при необходимости) перезапуска
серверов доменов SMI, запущенных ранее командой @smismstart.
При запуске сторожа он просматривает список запущенных доменов и проверяет каждый домен.
Если серверный процесс домена не работает (т.е. "упал" или был завершен), то он перезапускается.
Параметр t задает период вызова сторожевого таймера в миллисекундах.
Нулевое значение периода t отключает сторожевой таймер.
Значение now используется для однократного запуска сторожа.
Например:
@smismguard 60000 - запуск сторожевого таймера раз в минуту
@smismguard now - немедленный, однократный запуск сторожа
@smismguard 0 - отмена сторожевого таймера
© 2020 Курякин Алексей Валерьевич, kouriakine@mail.ru.