Конфигурация сервера
Файл конфигурации сервер имеет формат фала .config и состоит из списка нескольких erlang-термов, отвечающих за настройки конкретного функционального блока. Параметры конфигурации описываются в терминах языка Erlang.
Пример:
[
erlang_term,
erlang_term,
].
Конфигурация ядра сервера
Секция конфигурации ядра сервера имеет имя NET Server TM и выглядит следующим образом:
% Кофигурация tmsServer
{tmsServer, [
{tms_port, 9006},
{port_web_admin, 9008},
{connections, 8},
{devproxy_check_period, 1800000},
{archive_restore_period, 3600000},
{archive_restore_depth, 15811200},
{http_session_check_period, 60000},
{http_session_timeout, 3600000},
{archive_write_processes, 2},
{config_reload_period, 30000},
% Plugin для подключения к MySQL
{tmsDbPoolWorker,[
{pool_size, 5},
{host, "127.0.0.1"},
{port, 3306},
{database, "stm_1"},
{user, "stm"},
{password, "stmserver"}
]},
{plugins, [
[
{name, testPlugin},
{type, worker},
{folder, "test"}
]
]}
]}
Описание параметров секции:
Параметры конфигурации имеют вид {Параметр, Значение}.
- tms_port – TCP порт для взаимодействия с драйверами опроса. Значение по умолчанию 9006; port_web_admin – TCP порт подсистемы WEB-отображения. Значение по умолчанию 9008;
- connections – количество обслуживаемых подключений. Значение по умолчанию 8;
- devproxy_check_period – период проверки файлов DevProxy. Значение задается в миллисекундах. Значение по умолчанию 1800000 (30 минут).
- archive_restore_period – период проверки «дырок» в архивах. Значение задается в миллисекундах. Значение по умолчанию 3600000, (1 час);
- archive_restore_depth - глубина восстановления архивов. Значение задается в секундах. Значение по умолчанию 15811200 (6 месяцев);
- http_session_check_period - период проверки активности HTTP сесии. Значение задается в миллисекундах. Значение по умолчанию 60000 (1 минута);
- http_session_timeout - время жизни HTTP сесии в милисекундах. Значение задается в миллисекундах. Значение по умолчанию 3600000 (1 час)
- archive_write_processes - количество процессов для записи архивов. Значение по умолчанию 2;
- config_reload_period - период перезагрузки файла tmsServer.config. Значение задается в миллисекундах. Значение по умолчанию 30000 (по умолчанию 30 сек)
- tmsDbPoolWorker – параметры настройки подсистемы базы данных. Описание дано в пп.5.2
- plugins – параметры настройки модулей расширения. Описание дано в пп.5.4
Конфигурация подсистемы базы данных
Секция конфигурации базы данных входит в состав секции настройки ядра сервера как параметр tmsDbPoolWorker (см. пп.5.1) и содержит список параметров, указанный в квадратных скобках.
Выглядит секция следующим образом:
{tmsDbPoolWorker, [
{pool_size, 5},
{host, "127.0.0.1"},
{port, 3306},
{database, "stm_1"},
{user, "stm"},
{password, "stmserver"}
]},
Описание параметров секции:
- pool_size – количество подключений к базе данных MySQL. Значение по умолчанию 5;
- host – ip адрес хоста на котором установлен MySQL. По умолчанию MySQL сервер устанавливается на ту же аппаратную платформу. Значение по умолчанию ”127.0.0.1“;
- port – номер tcp порта на которм слушает MySQL. Значение по умолчанию 3306;
- database – имя базы данных. Значение по умолчанию отсутствует. В данном примере значение равно "stm_1". Имя базы данных выбирается администратором на свое усмотрение при установке сервера;
- user – имя пользователя базы данных. Значение по умолчанию отсутствует. В данном примере значение равно "tms". Имя пользователя выбирается на усмотрение администратора системы во время установки сервера;
- password – пароль пользователя базы данных. Значение по умолчанию отсутсвует. В данном примере значение равно "tmsserver".
Конфигурация подсистемы логирования
Система логирования сервера построена на библиотеке Lager. Секция настройки логирования включена в файл настройки сервера tmsServedr.config и выглядит следующим образом:
%% Конфигурация подсистемы логирования Lager
{lager, [
{colored, true},
{handlers, [
{lager_console_backend, [
debug,
{lager_default_formatter, [
color,
time,
" [",severity,"]",
"[",module,":",line,"] ",
message, "\n"
]}
]},
{lager_file_backend, [
{file, "log/error.log"},
{level, error},
{date, "$D0"}
]},
{lager_file_backend, [
{file, "log/console.log"},
{level, info},
{date, "$D0"}]}
]},
{error_logger_hwm, 500}
]}
]},
Изменять секцию подсистемы логирования не требуется. Все необходимые настройки выполнены по умолчанию.
Подробное описание параметров настройки подсистемы логирования Lager можно найти на сайте производителя: https://github.com/basho/lager
Конфигурация подсистемы расширения
Секция подсистемы расширения выгляди следующим образом:
{plugins, [
[
{name, testPlugin},
{type, worker},
{folder, "test"}
]
]}
В состав сервера входит шаблон модуля расширения. Модуль называется test.
Описание параметров секции:
- name – имя стартового модуля;
- type – тип модуля;
- folder – имя папки в которой расположены файлы расширения;
Изменять параметры этой секции не требуется. Она включена в состав сервера как пример использования расширений. Подробное описание формата и правил создания модулей расширения можно найти в документе «Руководство разработчика».
Конфигурация устройств
Для описания устройств с которых сервер может получать данные и которыми он может управлять (посредством драйверов) используются файлы определений с расширением def. Файлы определений устройств располагаются в подкаталоге devproxy основного каталога сервера.
Файл __main__.def является корневым файлом. В нем задаются ссылки на файлы описаний устройств. В обычной практике управлять файлами определений можно из web-интерфейса администратора, но если есть необходимость файлы можно изменять в ручном режиме. Файлы по сути являются текстовыми.
Формат файла main.def
Ссылки на файлы определений устройст задаются в следующем формате:
{ “Имя_Устройства”, “Серийный_Номер”, “Файл_описания” }.
Каждая ссылка задается в отдельной строке. Все параметры задаются в ковычках. В конце строки после фигурной скобки обязательно ставить точку.
Параметры:
- “Имя_Устройства” – имя устройства, например “i7041”, имя должно соответсвовать имени которое задано устройству в драйвере;
- “Серийный_Номер” – серийный номер устройства. Если устройство не имеет серийного номера, то номер задается произвольно. Номер должен быть уникальным в пределах системы которую обслуживает сервер.
- “Файл_Описания” – имя файла описания устройства задается без расширения.
Формат файла описания устройства.
Параметры устройства задаются строками в формате:
[ Тип, Имя, Описание, Формат ].
Описание полей:
- Тип - всегда имеет формат
{type, special}; тип может иметь значенияts,tu,tit,special; - Имя – задается в формате
{name, «Имя параметра»}; - Описание – задается в формате
{comment, “Описание”}; - Формат – это поле может принимать разные значения. Подробное описание см. ниже.
Первые две строки обязательно описывают поле серийного номера устройства и его поле состояния устройства.
Пример:
[{type,special},{name,"SN"},{comment,"Серийный номер"}].
[{type,special},{name,"state"},{comment,"Состояние устройства"},{event_id, 1100}].
Формат поля «Формат»
Пример описания параметра устройства. Поля type, name и comment описаны выше. В данном разделе описан формат поля «Формат». Данное поле может отсутствовать, если не требуется дополнительных операций на данными получаемыми от прибора.
Поле «Значение» имеет формат { тип_поля, значние_поля },
где:
- тип поля – может иметь значение
tu,calc,store. - значение_поля – в зависимости от значения тип_поля будет меняться и значение поля. Для типа
tuзначение задается как строка описывающая условие при котором будет производиться телеуправление. Условие задается в терминах языка erlang. Для поляcalcзначение задается как строка содержащая функцию для обработки значения. Функция пишется на языке erlang. Для поля store задается список параметров с и периодом.
Пример описания поля с форматом tu:
[
{type,tu},
{name,"FC_100_9-Out"},
{comment,"Выход № 1"},
{tu,"('FC_100_1-Is'<5000) or ('FC_100_1-Is'>7500)"}
].
В данном примере описан алгоритм телеуправления. Если выполнится условие ('FC_100_1-Is' < 5000) or ('FC_100_1-Is' > 7500), то на выход FC_100_9-Out будет направлен сигнал ВКЛЮЧИТЬ иначе этот выход будет в состоянии ВЫКЛЮЧЕНО.
Пример описания поля с форматом calc и tit:
[
{type,tit},
{name,"FC_100_1-Is"},
{comment,"Вход № 1"},
{calc,"fun (X) -> ((X/1000)-4)*500/(20-4)+0 end."},
{tit,"'FC_101_01-Is' == 1."}
].
В данном примере Значение получаемое на входе FC_100_1-Is будет обработано функцией fun (X) -> ((X/1000)-4)*500/(20-4)+0 end., при условии что значение на входе FC_101_01-Is будет равно 1. Иными словами здесь описано измерение значение по условию. В условиях можно использовать скобки и логические операции and, or, not, xor.
Пример описания поля c форматом store:
[
{type,tit},
{name,"A0+"},
{comment,"Расход кВт*ч, тариф 0"},
{store,{[{"Wp+",1800},{"dp0+",86400},{"mp0+",month}],"Общ.расход.актив"}}
].
В данном примере описано правило хранения данных в архиве. Расход электроэнергии по тарифу 0 будет храниться в трех вариантах:
- 1800 – получасовые значения с именем Wp+
- 86400 – суточные значения с именем dp0+
- month – месячные значения с именем mp0+
Функции и условия описываются в терминах языка erlang.
Имена переменных всегда начинаются с большой буквы и пишутся латинскими буквами. Например: Myvar.
Функции используемые в описании параметров не имеют имен (безымянные или анонимные функции). Функция начинается с выражения fun(X) ->, в скобках идет переменная в которую сервер запишет полученное от драйвера значение, заканчивается заголовок функции двумя символами ->. В теле функции описывается математическое выражение, в котором можно использовать арифметические и логические операции. Заканчивается функция обязательным выражением end., точка после слова end обязательна.
Пример функции: fun (X) -> ((X/1000)-4)*500/(20-4)+0 end.
Подробно с синтаксисом описания функции можно ознакомиться по адресу: http://erlang.org/doc/reference_manual/functions.html#id78194.
Подробно с математическими и логическими операциями можно ознакомиться по адресу: http://erlang.org/doc/reference_manual/expressions.html#id85024.