Формула таймера 1 сек

Просмотр 15 сообщений - с 31 по 45 (из 78 всего)
  • Автор
    Сообщения
  • #33558
    manjey73
    Участник

    Web показывает по текущему времени, Сервер хранит по времени UTC и все формулы работают от UTC.

    Порядок формул еще может быть важен.
    Например канал 600 — DayStarted() ? Val(601) : PrevVal()
    А вы берете предыдущее значение из 601-го, который запишется ПОСЛЕ вашей формулы.

    То есть поведение от варианта 602 — DayStarted() ? Val(601) : PrevVal()
    будет отличаться.

    #33562
    Mikhail
    Модератор

    Кто может объяснить как работает эта формула?

    На мой взгляд, нужно начать с выяснения того, как должна работать формула. А уже затем сравнивать с тем, как она фактически работает.

    #33566
    dequick
    Участник

    На мой взгляд, нужно начать с выяснения того, как должна работать формула. А уже затем сравнивать с тем, как она фактически работает.

    На 00:00 запоминать значение и хранить в текущем канале до начала следующих суток.

    #33570
    dequick
    Участник

    Похоже PrevVal перемаргивает на 0. Также заметил, что при записи ежечасно в канал 618 по формуле EveryHour(() => Val(601) - PrevVal(618))
    PrevVal также принимает значение 0 при передаче конфигурации. И записывается соответственно просто значение канала 601(т.к. PrevVal(618)=0).

    #33599
    Mikhail
    Модератор

    PrevVal здесь вообще не нужно. Используйте Val
    Сделайте скриншоты задействованных в расчёте каналов.

    #33600
    dequick
    Участник

    Смысл в том, что хотел отобразить расход с разницей в час по накопительному счетчику. В одном канале(618) хранятся часовые показания по формуле:
    EveryHour(() =>Val(601))
    В следующем канале 619 хранится разница между часовыми показаниями:
    EveryHour(() => Val(601) - PrevVal(618))

    Предварительно перемаргивать на ноль все прекратило, когда в соседних каналах вычисления суточного расхода по аналогичному алгоритму в формулах обернул в EveryMin(() => …) было
    DayStarted() ? Val(601) : PrevVal()
    стало:
    EveryMin(() => DayStarted() ? Val(601) : PrevVal(624))

    #33606
    Mikhail
    Модератор

    Есть специальный модуль ModDiffCalculator. Для Вашей задачи он будет удобнее, чем формулы. Посмотрите эту тему.

    #38104
    alexandr1803
    Участник

    Михаил, посмотрел эту тему, но так и не понял как работает этот калькулятор. Есть канал 101 из него беру данные в калькулятор (Что есть период и смещение?), отсылаю в канал 102 в итоге там пусто. Нужно ли в канале 102 писать какую-то формулу и какой тип канала указывать?

    #38107
    Mikhail
    Модератор

    Тип канала 102 — расчётный, формула не нужна. В канал 102 должно быть записано изменение канала 101 за указанный период.
    Присылайте скриншоты настроек модуля (в соответствующую тему), если не работает.

    • Ответ изменён 6 месяцев, 3 недели назад пользователем Mikhail.
    #38119
    alexandr1803
    Участник

    Спасибо, заработало.

    #38153
    alexandr1803
    Участник

    Ребят добрый день, как применить вот это например в канале 110 EveryMin(() => DayStarted() ? 0 : Val(103-канал с значением 0-1)=1?Cnl + 1:Cnl).

    Сервер ругается на это:
    2025-04-17 11:56:13 [ELECTROOTDEL][ELECTROOTDEL$][ERR] Ошибка при компиляции исходного кода скриптов и формул:
    (409,52): error CS0019: Operator ‘+’ cannot be applied to operands of type ‘method group’ and ‘int’
    (410,52): error CS1501: No overload for method ‘EveryMin’ takes 0 arguments
    (410,65): error CS0131: The left-hand side of an assignment must be a variable, property or indexer
    (410,74): error CS0029: Cannot implicitly convert type ‘int’ to ‘bool’
    (411,52): error CS1501: No overload for method ‘EveryMin’ takes 0 arguments
    (411,65): error CS0131: The left-hand side of an assignment must be a variable, property or indexer
    (411,74): error CS0029: Cannot implicitly convert type ‘int’ to ‘bool’

    #38154
    manjey73
    Участник

    Предположу, что где-то не хватает дополнительных скобок. По этому он начинает внутренние части рассматривать как операнды.
    Ну и +1 иногда это не double. И например надо записать как 1.0

    #38155
    manjey73
    Участник

    Ну и он как бы намекает, что инт это не буль 😀

    #38156
    a80808
    Участник

    После Val стоит фигурная скобка { а не простая (

    #38158
    alexandr1803
    Участник

    Оказалось СИ30 значение дискретного входа передает как 1.000 и 0.000
    Исправил, ошибок нет, но таймер простоя не считает. Показывает единицу и все.
    EverySec(() => DayStarted() ? 0 : Val(103) < 1.000 ? Cnl + 1 : Cnl)

Просмотр 15 сообщений - с 31 по 45 (из 78 всего)
  • Для ответа в этой теме необходимо авторизоваться.