0
Beantwoord
Помогите со скриптом
dmitrymalov 8 jaar geleden
in Tips and Tricks
•
bijgewerkt door Aleksandr Romanov (CTO) 8 jaar geleden •
16
При значении 9 feedback "mode reception" нужно чтобы исчезал " item 7" на странице "кабинет 104" , но так не происходит, ПОМОГИТЕ )
Customer support service by UserEcho
вот такой скрипт должен быть
IR.AddListener(IR.EVENT_TAG_CHANGE,IR.GetDevice("KNX IP Router"), function(name,value)//Надо писать просто имя драйвера
{
if (name == "K104 MODE RECEPTION" && value == 9)
IR.GetItem("Кабинет 104").IR.GetItem("Item 7").Visible = false;
});
копировал вставил ничего не изменилось(
IR.AddListener(IR.EVENT_TAG_CHANGE,IR.GetDevice("KNX IP Router"), function(name,value)имя драйвера
{
IR.Log("name = " + name)
IR.Log("value = " + value )
if (name == "K104 MODE RECEPTION" && value == 9)
IR.GetItem("Кабинет 104").IR.GetItem("Item 7").Visible = false;
});
вот так вставьте, запустите проект и посмотрите в консоль. Должно приходить имя тега и его новое значение
[24-07-2017 16:14:33.925] INFO CORE *** The client started to work ***
[24-07-2017 16:14:34.252] INFO SCRIPT name = L101_1_FB0
[24-07-2017 16:14:34.268] INFO SCRIPT value = false
[24-07-2017 16:14:34.798] INFO SCRIPT name = L101_2_FB0
[24-07-2017 16:14:34.814] INFO SCRIPT value = false
[24-07-2017 16:14:35.344] INFO SCRIPT name = L101_3_FB0
[24-07-2017 16:14:35.360] INFO SCRIPT value = false
[24-07-2017 16:14:35.890] INFO SCRIPT name = L102_1_FB0
[24-07-2017 16:14:35.906] INFO SCRIPT value = false
[24-07-2017 16:14:36.436] INFO SCRIPT name = L102_2_FB0
[24-07-2017 16:14:36.452] INFO SCRIPT value = false
[24-07-2017 16:14:36.982] INFO SCRIPT name = L104_1_FB0
[24-07-2017 16:14:36.998] INFO SCRIPT value = false
[24-07-2017 16:14:37.528] INFO SCRIPT name = L104_2_FB0
[24-07-2017 16:14:37.544] INFO SCRIPT value = true
[24-07-2017 16:14:38.074] INFO SCRIPT name = L104_3_FB0
[24-07-2017 16:14:38.090] INFO SCRIPT value = false
[24-07-2017 16:14:38.620] INFO SCRIPT name = L104_4_FB0
[24-07-2017 16:14:38.636] INFO SCRIPT value = false
[24-07-2017 16:14:39.166] INFO SCRIPT name = L106_1_FB0
[24-07-2017 16:14:39.182] INFO SCRIPT value = false
[24-07-2017 16:14:39.712] INFO SCRIPT name = L106_2_FB0
[24-07-2017 16:14:39.728] INFO SCRIPT value = false
[24-07-2017 16:14:40.258] INFO SCRIPT name = K104 ON/OFF RECEPTION FB
[24-07-2017 16:14:40.274] INFO SCRIPT value = true
[24-07-2017 16:14:40.804] INFO SCRIPT name = K104 VALUE TEMPERATURE RECEPTION
[24-07-2017 16:14:40.820] INFO SCRIPT value = 23
[24-07-2017 16:14:41.350] INFO SCRIPT name = K104 MODE RECEPTION
[24-07-2017 16:14:41.366] INFO SCRIPT value = 9
[24-07-2017 16:14:41.381] WARNING SCRIPT Script exception: TypeError: \\Mac\Home\Documents\iRidium pro documents\Client\Office+FULL\scripts\Hideitems.js:6: Tried to use undefined as an object
[24-07-2017 16:14:41.912] INFO SCRIPT name = K104 FAN RECEPTION
[24-07-2017 16:14:41.927] INFO SCRIPT value = 60
[24-07-2017 16:14:42.458] INFO SCRIPT name = K104 SWING RECEPTION
[24-07-2017 16:14:42.473] INFO SCRIPT value = false
ага. там опечатка
IR.AddListener(IR.EVENT_TAG_CHANGE,IR.GetDevice("KNX IP Router"), function(name,value)имя драйвера
{
IR.Log("name = " + name)
IR.Log("value = " + value )
if (name == "K104 MODE RECEPTION" && value == 9)
IR.GetItem("Кабинет 104").GetItem("Item 7").Visible = false;
});
вот так попробуйте
Илья, здравствуйте!
А что это за конструкция такая?
что еще за имя драйвера? Это ведь опечатка, не закомментировали?
ps я не докапываюсь, вроде опечатка, но вдруг что-то есть интересное и это какой-то способ новый..
добрый день. Вы правы. Это должен быть комментарий
Илья не работает
Большое спасибо !!! все получилось!!
Всем привет. Сильно не ругайте, но я в скриптах как свинья в апельсинах. Суть такова, как и с чего начать в написании скрипта по округлению к примеру 21,23456 до 21,23. И нужно ли этот скрипт привязывать к ползунку?
Вам уже писали, читайте больше документации
Первый вариант "По индивидуальным событиям": рисуем элемент Level (ползунок, имя тут - "Level Landscape 0 - 1")
В редакторе скриптов:
IR.AddListener(IR.EVENT_START,0,function() { var litem = IR.GetPage("Page 1").GetItem("Level Landscape 0 - 1"); IR.AddListener(IR.EVENT_ITEM_PRESS,litem,lvl,litem); IR.AddListener(IR.EVENT_MOUSE_MOVE,litem,lvl,litem); IR.AddListener(IR.EVENT_ITEM_RELEASE,litem,lvl,litem); }); function lvl() { var calc = Math.round(this.Value*100)/100; IR.Log(calc); //IR.SetVariable("Tokens.test", calc); }Второй вариант "Черех глобальный слушатель":
IR.AddListener(IR.EVENT_START,0,function() { IR.SubscribeTagChange("UI.Page 1.Level Landscape 0 - 1.Value"); }); IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value) { if (name == "UI.Page 1.Level Landscape 0 - 1.Value") { var calc = Math.round(value*100)/100; IR.Log(calc); //IR.SetVariable("Tokens.test", calc); } });Да, вы писали о изучении скриптов. Но если я впервые столкнулся с ними, читаю, пытаюсь вникнуть. Язык ST, там хоть понятно куда что прикрутить,CFC,FBD я понимаю, но javascript увы. Мне не понятно где в скриптах прикрутить входную переменную float (Tem1) для округления, которая после формулы округления в скриптах должна показать значение 23,12 в место 23,123765.
Также мне не понятно как передать переменную float (ust_GVS) в прибор посредством ползунка или клавиш плюс-минус. Дело в том, что ПЛК 160 (Овен) передает в формате float слишком большое значение после запятой.
С дискретными проблем нет. В Scade проект работает, но здесь я затупил. Поэтому вас и прошу в помощи с переменными float
С уважением, Руслан.
Руслан, тут скорее сложность в формулировке задачи: Вы спросили как округлить число - Вам ответили.
СКАЧАЙТЕ пример для Level, поменяйте свойство Range Type на Float
IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Mobdus OVEN"), function(name, value)
{
IR.Log(name+": "+value); //
if (name=="Tem1")
{
var calc = Math.round(value*100)/100;
IR.Log("From OVEN " + calc);
IR.SetVariable("Global.level", calc);
}
}); IR.AddListener(IR.EVENT_START,0,function()
{
//IR.SetVariable("Global.level", 23.123765);
IR.SubscribeTagChange("Global.level");
});
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
if (name == "Global.level")
{
var calc = Math.round(value*100)/100;
IR.Log("To OVEN" + calc);
IR.GetDevice("Mobdus OVEN").Set("ust_GVS", calc)
}
});
С чтением переменных float разобрался. Остается разобраться с передачей
Разобрался и с передачей. Спасибо за понимание