Written on: 06. 11. 2011 [16:34]
|
fido_max
Maxim Kochetkov
Contributor
Topic creator
registered since: 28.10.2010
Posts: 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, то не ругается и выводит имя параметра.
В чем причина? Что я делаю не так?
|
Written on: 06. 11. 2011 [18:10]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
http://oscada.org/ru/forum/posts//pomogite_razobratsja//6/
Learn, learn and learn better than work, work and work.
|
Written on: 06. 11. 2011 [21:12]
|
fido_max
Maxim Kochetkov
Contributor
Topic creator
registered since: 28.10.2010
Posts: 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 не работает :-(
[This article was edited 1 times, at last 06.11.2011 at 21:26.]
|
Written on: 06. 11. 2011 [22:10]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 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.
|