УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Шаблон контроллера LogicLev


Автор Сообщение
Сообщение создано: 06. 11. 2011 [16:34]
fido_max
Maxim Kochetkov
Contributor
Создатель темы
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129
Создал шаблон. Создал контроллер с параметром на основе шаблона (LogicLev).
Вопрос: как из программы написанной в шаблоне узнать имя контроллера и параметра? Через this?

пробовал так:
messPut(this,1,this);
возвращает:
1|<TCntrNodeObj path="/AGLKS/sub_DAQ/mod_LogicLev/cntr_kp80/prm_ppp/"/> | <TCntrNodeObj path="/AGLKS/sub_DAQ/mod_LogicLev/cntr_kp80/prm_ppp/"/>

пробовал так:
messPut(this.name(),1,this.name());
ругается:
0|/AGLKS/sub_DAQ/mod_JavaLikeCalc/lib_sys_compile/fnc_sub_DAQ_tmplb_NTK_Templates_tmpl_digitAlarm/ | Ошибка функции 'name' или не достаточно параметров для неё.

хотя если вызывать messPut(this.name(),1,this.name()); непосредственно из вычислительного контроллера JavaLikeCalc, то не ругается и выводит имя параметра.
В чем причина? Что я делаю не так?

Сообщение создано: 06. 11. 2011 [18:10]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
http://oscada.org/ru/forum/posts//pomogite_razobratsja//6/

Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 11. 2011 [21:12]
fido_max
Maxim Kochetkov
Contributor
Создатель темы
Зарегистрирован(а) с: 28.10.2010
Сообщения: 129

большое спасибо

Поиск по форуму по слову this ничего не дал, по этому и написал.

И не совсем понятно, почему одинаковый код в JavaLikeCalc и LogicLev работает по-разному?

упс. не работает. :-(
вот такой код в шаблоне:
using Special.FLibSYS;
if (currVal!=lastVal){
lastVal=currVal;
if (mode) {
if (currVal){
f_err="Норма";
actVal = true;
messPut(this.nodePrev().name,level,DESCR+" : "+messNorm);
} else {
f_err="Авария";
actVal = false;
messPut(this.nodePrev().name,level,DESCR+" : "+messAlarm);
}
} else {
if (currVal){
f_err="Авария";
actVal = false;
messPut(this.nodePrev().name,level,DESCR+" : "+messAlarm);
} else {
f_err="Норма";
actVal = true;
messPut(this.nodePrev().name,level,DESCR+" : "+messNorm);
}
}
}
а выводит он следующее:
0|<EVAL> | : Авария
либо
0|<EVAL> | : Норма
т.е. конструкция this.nodePrev().name не работает :-(

[Сообщение редактировалось 1 раз(а), в последний раз 06.11.2011 в 21:26.]
Сообщение создано: 06. 11. 2011 [22:10]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"fido_max" wrote:

Поиск по форуму по слову this ничего не дал, по этому и написал.

Плохо ищем.

"fido_max" wrote:

И не совсем понятно, почему одинаковый код в JavaLikeCalc и LogicLev работает по-разному?

Потому что в JavaLikeCalc код, а значит и this, работают в объекте контроллера, а в LogicLev в объекте параметра.

"fido_max" wrote:

упс. не работает. :-(
вот такой код в шаблоне:
messPut(this.nodePrev().name,level,DESCR+" : "+messNorm);

Читаем ссылку и документацию внимательно! http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-10
name это не свойство объекта, а его функция.

Learn, learn and learn better than work, work and work.



7941