Commit 50b9549f authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): Исправления в части документации, написан warning

про force для vartype="out"..
parent 6af32977
......@@ -42,6 +42,7 @@
<item name="input1_s" vartype="in" comment="comment for input1" smTestID="1"/>
<item name="input2_s" vartype="in" comment="comment for input2" />
<item name="output1_c" vartype="out" omment="comment for output1" no_check_id="1"/>
<item name="output2_c" vartype="out" omment="comment for output2" force="1"/>
<!-- <item name="loglevel_s" vartype="in" comment="log level control" loglevel="1"/> -->
</smap>
......
......@@ -12,7 +12,7 @@
Name: libuniset2
Version: 2.0
Release: alt20
Release: alt21
Summary: UniSet - library for building distributed industrial control systems
......@@ -409,6 +409,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Thu Mar 12 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt21
- codegen: adjustment documentation
* Fri Mar 06 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt20
- (modbustcpmaster): minor fixes in error messages
......
......@@ -11,6 +11,7 @@
- \ref pg_Codegen_Make
- \ref pg_Codegen_Templ_Ask
- \ref pg_Codegen_Templ_Alone
- \ref pg_Codegen_loglevel
\section pg_Codegen_Common Общее описание утилиты uniset-codegen
......@@ -37,6 +38,14 @@
- обновление датчика "сердцебиения" /см. \ref sec_SM_HeartBeat /
- Обновление выходов
\warning По умолчанию, ВСЕ "выходы"(out_xxx) перезаписывают свои значения в SharedMemory(SM) только по изменению.
Поэтому если в вашем процессе вы не меняли переменную out_xxx, а какой-то другой процесс обновил значение в SM,
то значение в SM так и останется и не будет перезаписано Вашим процессом, пока он не обновит у себя значение out_xxx.
Т.е. ПО УМОЛЧАНИЮ СЧИТАЕТСЯ (в целях оптимизации и уменьшения количества "удалённых вызовов"), что каждый процесс
является ЕДИНОЛИЧНЫМ ВЛАДЕЛЦЕМ своих ВЫХОДОВ и никто кроме него не может их "обновлять" в SM.
Для включения перезаписывания out_xxx на каждом шаге, можно воспользоваться ключём \b forceOut="1" в настроечной
секции процесса. Или указать \b force="1" для конкретного выхода в src.xml (см. \ref pg_Codegen_SMap ).
Помимо этого обрабатывается специальный режим: \ref pg_Codegen_TestMode
Сам сгенерированный код представляет из себя класс ("_SK" - skeleton), который необходимо
......@@ -88,6 +97,7 @@
<item name="input1_s" vartype="in" iotype="DI" comment="comment for input1"/>
<item name="input2_s" vartype="in" iotype="DI" comment="comment for input2" />
<item name="output1_c" vartype="out" iotype="DO" omment="comment for output1" no_check_id="1"/>
<item name="output2_c" vartype="out" iotype="DO" omment="comment for output2" force="1"/>
</smap>
<msgmap>
......@@ -110,6 +120,8 @@
- [\b in |\b out |\b io]\b _name - переменная хранящая текущее состояние датчика (генерируется с префиксом в зависимости от \b vartype)
- \b prev_[\b in |\b out |\b io]\b _name - переменная хранящая состояние датчика на предыдущем шаге (генерируется с префиксом в зависимости от \b vartype)
- \b no_check_id - no_check_id="1" означает игнорировать (не генерировать исключение) при запуске процесса, если идентификатор датчика не найден.
- \b force="1" - принудительно перезаписывать значение в SharedMemory на каждом шаге. Действует только для \b vartype="out"
- \b loglevel="1" - признак того, что данный датчик управляет логами для этого процесса. См. \ref pg_Codegen_loglevel.
Помимо этого необходимо указывать свойство \b iotype.
\warning Поле \b iotype должно \b ОБЯЗАТЕЛЬНО совпадать с типом датчика к которому
......@@ -292,4 +304,26 @@ MyClass_SK.cc: myclass.src.xml
- \b myclass.src.xml - это файл с описанием переменных
- \b --no-main - отключает генерирование "запускающего" файла (функция main)
- \b -n - опредеяет название файлов для сгенерированного класса. В данном случае будут сгенерированы \a MyClass_SK.h и \a MyClass_SK.cc
\section pg_Codegen_loglevel Управление логами объекта (процесса) через специальный датчик
Для динамического управления логами процесса предусмотрен механизм, который позволяет указать аналговый датчик (AI),
значение которого будет использовано как указание уровня вывода логов (см. Debug::type). Чтобы назначить специальный
"вход" (vartype="in") для управления логами, достаточно в секции \b <smap> \a ТОЛЬКО \a ДЛЯ \a ОДНОГО входа указать
loglevel="1". Пример:
\code
<smap>
...
<item name="loglevel_s" vartype="in" comment="log level control" loglevel="1"/>
</smap>
\endcode
Данный механизм позволяет посредством этого датчика управлять уровнем вывода логов (mylog) во время работы процесса.
Для удобства предусмотрена утилита \b uniset2-log2val позволяющая преобразовать текстовые названия уровней в число,
которое необходимо выставить датчику. Пример:
\code
uniset2-log2val info,level1,warn,level9
4117
\endcode
Т.е. для того, чтобы включить указанные логи в датчик нужно записать число \b 4117
*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment