Пример: Реализация «горячей» замены LogicMachine
Задача:
Реализовать автоматическую «горячую» замену LogicMachine (MASTER — ведущий) на LogicMachine (SLAVE — подчинённый) при потере связи с MASTER устройством.
Backup файл
На MASTER устройстве создаем backup файл с рабочей конфигурацией в меню Утилиты -> Резервное копирование (Utilities -> Backup) и импортируем этот файл на SLAVE устройство через Утилиты -> Восстановление (Utilities -> Restore).
Тестовый групповой адрес
Добавляем тестовый групповой адрес например 1/1/1 на оба устройства с типом данных 12. 4 байта, целое без знака (12. 4 byte unsigned integer)
MASTER резидентный скрипт
На MASTER добавляем резидентный скрипт с задержкой 5 секунд и код:
grp.write('1/1/1', os.time(), dt.uint32)
SLAVE резидентный скрипт
На SLAVE добавляем резидентный скрипт с задержкой 10 секунд и код:
-- current object value (получаем значение объекта)
curr = grp.getvalue('1/1/1')
-- previous object value or current if not set (предыдущее значение, или текущее,
-- если предыдущее не было установлено)
prev = prev or curr
-- master timeout
if curr == prev then
-- first error (первая ошибка)
if not timeout then
alert('master offline')
-- enable scripts here (включаем скрипты в этом месте)
script.enable('test1')
script.enable('test2')
timeout = true
end
-- master ok, recovered from error (мастер восстановился)
elseif timeout then
alert('master online')
-- disable scripts here (отключаем скрипты в этом месте)
script.disable('test1')
script.disable('test2')
timeout = false
end
-- save previous object value (сохраняем в предыдущем значении текущее)
prev = curr