0
    
    
    
        
        
        Answered
        
        
    
    
    
    
    
    IR.EVENT_TAG_CHANGE срабатывает независимо от изменения токена
        Алексей Цыганков 10 years ago
        
            
                in Tips and Tricks
            
        
        •
        
             updated by Aleksandr Romanov (CTO) 8 years ago • 
        
        
             3
        
        
        
        
    
    
    
    
	Добрый день, помогите, пожалуйста, разобраться с событием EVENT_TAG_CHANGE. В моем проекте данное событие срабатывает при обновлении данных драйвера, а не при изменении токена :(
Для чистоты эксперимента создал пустой проект, добавил драйвер Modbus TCP to RTU, добавил 1 фидбэк, в скрипте прописал:
[05-06-2015 12:14:54.054] INFO Channel 1=0
[05-06-2015 12:14:54.626] INFO Channel 1=0
[05-06-2015 12:14:55.105] INFO Channel 1=0
[05-06-2015 12:14:55.667] INFO Channel 1=0
....
Как видно, токен не меняется, а событие всё равно вызывается каждые 500мс (Update Time в настройках драйвера).
Для чистоты эксперимента создал пустой проект, добавил драйвер Modbus TCP to RTU, добавил 1 фидбэк, в скрипте прописал:
IR.AddListener (IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP to RTU"), function(name,value) { 
 IR.Log(name + "=" + value);
})В итоге в логе вижу:[05-06-2015 12:14:54.054] INFO Channel 1=0
[05-06-2015 12:14:54.626] INFO Channel 1=0
[05-06-2015 12:14:55.105] INFO Channel 1=0
[05-06-2015 12:14:55.667] INFO Channel 1=0
....
Как видно, токен не меняется, а событие всё равно вызывается каждые 500мс (Update Time в настройках драйвера).
Customer support service by UserEcho
	
                
var reject = 0; IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP to RTU"), function(name,value) { if (name == "Command 2" && value == 0) reject = 0; if (name == "Command 2" && value == 1 && reject == 0) { IR.Log('event 1'); reject = 1; } });Но название события вводит в заблуждение. Очень хотелось бы и для этих драйверов событие отрабатывало бы именно на изменение, это избавило бы от лишних переменных и лишнего кода, ну или хотя бы разделить параметр value на два: old_value и new_value.
Название события останется неизменным для сохранения совместимости. Мы рассмотрим возможность введения нового события с автоматическим сравнением предыдущего и нового значения.