0
Answered
dmitrymalov 3 months ago in Tips and Tricks • updated by Aleksandr Romanov (CTO) 2 weeks ago 16

При значении 9  feedback   "mode reception"  нужно чтобы исчезал " item 7" на странице  "кабинет 104" , но так не происходит, ПОМОГИТЕ )

GOOD, I'M SATISFIED
Satisfaction mark by dmitrymalov 3 months ago
+1
Waiting for user's reply

вот такой скрипт должен быть



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. И нужно ли этот скрипт привязывать к ползунку?

+1

Вам уже писали, читайте больше документации


Первый вариант "По индивидуальным событиям": рисуем элемент 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 разобрался. Остается разобраться с передачей

+1

Разобрался и с передачей. Спасибо за понимание