Если gau Ваша, то в module_init() или в разделе инициализации, в CallBack-е, какого либо прибора (лучше прибора, в котором крутится логика, если уровень логики выделен и размещен в отдельном приборе), проверяете наличие L:переменной. Если ее нет, то создаете ее:
if((ID_L_VAR_XXX = check_named_variable("VAR_XXX")) == -1)
ID_L_VAR_XXX = register_named_variable("VAR_XXX");
Естественно ID_L_VAR_XXX (числовой идентификатор L:переменной) должна быть определена, где-нибудь, как статическая переменная типа ID, т.е. где нибудь до CallBack функции нудно написать:
ID ID_L_VAR_XXX = -1;
Имя переменной ID может быть любым, но лучше использовать имя L:переменной с префиксом ID_. Что бы потом не запутаться, когда таких переменных будет куча. VAR_XXX - чисто условное имя L:переменной. Лучше конечно, что бы все имена были "говорящими"
А далее уже читаете и пишите в Вашу L:переменную там, где это Вам надо (в тех местах PRE_UPDATE, где по смыслу нужно организовать обмен данными с Вашей L:переменной).
Небольшое отступление.
Вообще конечно, весь уровень логики стоит разбить на классы (если логики много), каждый класс унаследовать от одного родителя, в котором будут обозначены виртуальные методы создания L:переменных и виртуальные методы обмена с ними данными. В самих классах, в указанных виртуальных методах уже реализовать непосредственно само создание L:переменных и обмен данными с ними. Далее, если указатели на все экземпляры классов логики загнать в массив, то можно будет однообразно запускать в циклах, указанные выше методы, в определенных для этого местах. Т.е. так можно унифицировать обмен с L: переменными
Это конечно совет для тех случаев, когда создается gau с большим объемом кода логики и с интенсивным обменом через L:перменные. Ну и естественно, когда классы уровня логики правильно организуются.
Чтение L:переменной производся так:
перменная_с = get_named_variable_value(ID_L_VAR_XXX);
...
// или если нужно привести значение к нужной размерности,
// то где-нибудь в инициализации пишете еще
id_единицы_измерения = get_units_enum("название единицы измерения");
...
// в PRE_UPDATE
перменная_с = get_named_variable_typed_value(ID_L_VAR_XXX, id_единицы_измерения);
Запись так:
set_named_variable_value(ID_L_VAR_XXX, перменная_с)
// или с помошью set_named_variable_typed_value(ID id, FLOAT64 value, ENUM units), когда нужно приводить значение к нужной размерности;
Естественно в примере русские символы в именах переменных - только для наглядности. Все пишем по английски.
Сообщение изменено: serg_p (31 Июль 2010 - 18:00)