Перейти к содержанию

Чтение и запись значений в теги

Необходимо вычислить среднее значение тегов supplyWaterTemp и tankTemp, которые представляют собой температуру воды в подающем трубопроводе и температуру воды в баке-аккумуляторе соответственно, и присвоить значение тегу averageTemp.

averageTemp.lua
local async = require("async")                      -- загрузка модуля для выполнения асинхронных функций
local tagApi = require("simplight.api.channels")    -- загрузка модуля чтения/записи тегов через функции readMany и writeMany

setInterval(function()                              -- функция циклического выполнения
 async(function()                                   -- async принимает анонимную функцию

    -- await приостанавливает выполнение async до получения функцией readMany значений тегов
    local tags = await(tagApi.readMany({ "supplyWaterTemp", "tankTemp"})) 

    local supply = tags[1].value        -- извлечение значения тега "supplyWaterTemp" 
    local tank = tags[2].value          -- извлечение значения тега "tankTemp" 
    local average = (supply + tank)/2   -- вычисление среднего значения 

    -- запись в тег averageTemp значения переменной average и признака качества сигнала (0xC0 — хорошее качество)
    await(tagApi.writeMany({values = {{ name="averageTemp", value=average, quality=0xC0 }} 
    }))
  end):catch(function(err)              -- обработка возможных ошибок
    print("error", err)
  end)
end, 1000) -- интервал выполнения функции setInterval (1000 мс)