0
Answered
IR.EVENT_TAG_CHANGE срабатывает независимо от изменения токена
Алексей Цыганков 10 years ago
in Tips and Tricks
•
updated by Aleksandr Romanov (CTO) 7 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
Но название события вводит в заблуждение. Очень хотелось бы и для этих драйверов событие отрабатывало бы именно на изменение, это избавило бы от лишних переменных и лишнего кода, ну или хотя бы разделить параметр value на два: old_value и new_value.
Название события останется неизменным для сохранения совместимости. Мы рассмотрим возможность введения нового события с автоматическим сравнением предыдущего и нового значения.