&SmiSrv для CRW-DAQ


В начале ознакомьтесь с обзором технологии SMI, без которой назначение &SmiSrv будет непонятным.

&SmiSrv - это сервер в составе пакета CRW-DAQ для управления запуском, остановкой и работой доменов (серверных процессов) SMI.

Общая схема работы с сервером &SmiSrv выглядит примерно так:
  1. Программист создает файл(ы) *.SML с описанием логики конечных автоматов на языке SML. Каждый *.SML-файл описывает свой отдельный домен, т.е. группу логических объектов SMI, которые будут выполняться совместно в рамках одного серверного процесса smiSM.exe. Созданные *.SML файлы помещаются в каталог DAQ-конфигурации.
  2. Сервер &SmiSrv включается в DAQ-конфигурацию.
  3. Сервер &SmiSrv управляет подготовкой, запуском и остановкой серверов доменов SMI с помощью консольных команд (сообщений).
  4. В секцию [&SmiSrv.StartupScript] помещаются команды, автоматически конфигурирующие и запускающие серверы доменов SMI.
    Командой @dim_dns_node задается имя сервера имен DNS по умолчанию.
    Командой @dimdnslaunch обеспечивается запуск локального сервера имен DNS.EXE, если он нужен.
    Командой @smitranslate каждый файл *.SML транслируется в объектный файл *.SOBJ, нужный для запуска домена SMI.
    Командой @smismstart выполняется запуск домена SMI для каждого объектного файла *.SOBJ.
  5. Вспомогательные команды позволяют наблюдать и контролировать работу серверов доменов SMI в процессе работы.
    Командой @smismreport осуществляется наблюдение над работой серверов доменов SMI.
    Командой @smismguard запускается сторожевой таймер (guard) для автоматического перезапуска "упавших" серверов доменов SMI.
    Командой @smismstop можно останавливать работу серверов доменов SMI.
  6. В секцию [&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 и передает ему для исполнения следующие аргументы:
  1. d - Имя домена SMI. Объекты (конечные автоматы) SMI имеют имена DOMAIN::OBJECT.
  2. s - Имя объектного файла *.SOBJ, который заранее генерируется командой трансляции @smitranslate.
  3. -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.