Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Формула таймера 1 сек
- В этой теме 77 ответов, 10 участников, последнее обновление 6 месяцев, 2 недели назад сделано
alexandr1803.
-
АвторСообщения
-
24.07.2024 в 11:06 #33558
manjey73УчастникWeb показывает по текущему времени, Сервер хранит по времени UTC и все формулы работают от UTC.
Порядок формул еще может быть важен.
Например канал 600 — DayStarted() ? Val(601) : PrevVal()
А вы берете предыдущее значение из 601-го, который запишется ПОСЛЕ вашей формулы.То есть поведение от варианта 602 — DayStarted() ? Val(601) : PrevVal()
будет отличаться.24.07.2024 в 12:02 #33562
MikhailМодераторКто может объяснить как работает эта формула?
На мой взгляд, нужно начать с выяснения того, как должна работать формула. А уже затем сравнивать с тем, как она фактически работает.
24.07.2024 в 13:13 #33566dequick
УчастникНа мой взгляд, нужно начать с выяснения того, как должна работать формула. А уже затем сравнивать с тем, как она фактически работает.
На 00:00 запоминать значение и хранить в текущем канале до начала следующих суток.
24.07.2024 в 14:26 #33570dequick
УчастникПохоже PrevVal перемаргивает на 0. Также заметил, что при записи ежечасно в канал 618 по формуле
EveryHour(() => Val(601) - PrevVal(618))
PrevVal также принимает значение 0 при передаче конфигурации. И записывается соответственно просто значение канала 601(т.к. PrevVal(618)=0).25.07.2024 в 15:15 #33599
MikhailМодераторPrevVal здесь вообще не нужно. Используйте Val
Сделайте скриншоты задействованных в расчёте каналов.25.07.2024 в 17:46 #33600dequick
УчастникСмысл в том, что хотел отобразить расход с разницей в час по накопительному счетчику. В одном канале(618) хранятся часовые показания по формуле:
EveryHour(() =>Val(601))
В следующем канале 619 хранится разница между часовыми показаниями:
EveryHour(() => Val(601) - PrevVal(618))Предварительно перемаргивать на ноль все прекратило, когда в соседних каналах вычисления суточного расхода по аналогичному алгоритму в формулах обернул в EveryMin(() => …) было
DayStarted() ? Val(601) : PrevVal()
стало:
EveryMin(() => DayStarted() ? Val(601) : PrevVal(624))26.07.2024 в 12:07 #33606
MikhailМодераторЕсть специальный модуль ModDiffCalculator. Для Вашей задачи он будет удобнее, чем формулы. Посмотрите эту тему.
15.04.2025 в 13:07 #38104alexandr1803
УчастникМихаил, посмотрел эту тему, но так и не понял как работает этот калькулятор. Есть канал 101 из него беру данные в калькулятор (Что есть период и смещение?), отсылаю в канал 102 в итоге там пусто. Нужно ли в канале 102 писать какую-то формулу и какой тип канала указывать?
15.04.2025 в 15:44 #38107
MikhailМодераторТип канала 102 — расчётный, формула не нужна. В канал 102 должно быть записано изменение канала 101 за указанный период.
Присылайте скриншоты настроек модуля (в соответствующую тему), если не работает.-
Ответ изменён 6 месяцев, 3 недели назад пользователем
Mikhail.
16.04.2025 в 15:27 #38119alexandr1803
УчастникСпасибо, заработало.
17.04.2025 в 12:05 #38153alexandr1803
УчастникРебят добрый день, как применить вот это например в канале 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’17.04.2025 в 12:22 #38154
manjey73УчастникПредположу, что где-то не хватает дополнительных скобок. По этому он начинает внутренние части рассматривать как операнды.
Ну и +1 иногда это не double. И например надо записать как 1.017.04.2025 в 12:23 #38155
manjey73УчастникНу и он как бы намекает, что инт это не буль 😀
17.04.2025 в 12:26 #38156
a80808УчастникПосле Val стоит фигурная скобка { а не простая (
17.04.2025 в 14:48 #38158alexandr1803
УчастникОказалось СИ30 значение дискретного входа передает как 1.000 и 0.000
Исправил, ошибок нет, но таймер простоя не считает. Показывает единицу и все.
EverySec(() => DayStarted() ? 0 : Val(103) < 1.000 ? Cnl + 1 : Cnl) -
Ответ изменён 6 месяцев, 3 недели назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.