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.
Название события останется неизменным для сохранения совместимости. Мы рассмотрим возможность введения нового события с автоматическим сравнением предыдущего и нового значения.