Как использовать формулы ?

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

    Спасибо, Михаил, помогло.
    А есть доступ к данным конкретного канала по дате и часу?

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

    Такой доступ есть, если разрабатывать свой модуль. Из формул сейчас нет.

    #10267
    pistoletov
    Участник

    Мне нужно выдавать команду если значение канала быстро изменяется. Например на 100 в минуту. Модуль автоматического управления есть. Но как правильно сделать триггер и как такое событие сформировать?

    #10269
    Romiros
    Участник

    Можно по разному. Например с модулем автоуправления:
    Ваш входной канал допустим 201
    Создайте канал 202 тип Митутный ТИ. Поставьте использовать формулу и запишите в поле формула следующее: Abs(Cnl-Val(201)). Это будет разница между текущими показаниями и показаниями минуту назад. В модуле автоуправления добавьте триггер на данные канала 202 и условие значение >=100 и назначьте Ваш канал управления.

    #10270
    pistoletov
    Участник

    Спасибо большое. А при инициализации канала начальное значение канала 202 нулевое а 201 к примеру уже 100 и первое значение будет 100 и может сработать триггер. Как такую ситуацию избежать? Например что бы 202 при инициализации имел значение равное 201 канала.

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

    Первоначально статус канала 202 равен 0. Можно использовать статус для определения канала 202.
    Примерно так в формуле канала 202: Stat() > 0 ? Math.Abs(Val() — Val(201)) : Val(201)

    #10275
    pistoletov
    Участник

    Попробовал так сделать. Не совсем корректно работает. Значения изменения могут быть как в + так и в минус а могут и не измениться за минуту вообще. Проблема все равно как правильно проинициализировать значение канала. Формула у меня стоит сейчас такая: канал 777 = Stat() > 0 ? Math.Abs(Val()-Val(603)) : Val(603). Мне получается нужно вычитать значение канала 603 и канала 603 минуту назад и этот канал и будет скоростью изменения. а в данной формуле я вычитаю из значения разницы минуту назад текущее значение канала.

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

    Да, наверное понадобится ещё один минутный канал, который будет хранить значение минуту назад. Просто Val(603)

    #10279
    pistoletov
    Участник

    А как брать из него данные текущее и предыдущие?

    #10280
    Romiros
    Участник

    Имеется ввиду, что Вам нужно всего три канала.
    Канал 603 получает текущее значение.
    Канал 604 — Минутный ТИ с формулой: Val(603)
    Канал 777 = Stat() > 0 ? Math.Abs(Val(603)-Val(604)) : Val(603).

    #10281
    pistoletov
    Участник

    Хорошо. Попробую так. Но тут все равно вопрос инициализации не решён. Значение канала 777 может быть как отрицательным так и нулевым. Abs не подходит. Действие производить надо только при резком отрицательно изменении величины. Например упало за минуту на 200. Но не выросло за минуту на 200

    #10282
    Romiros
    Участник

    Ну тогда уберите Abs. Оставьте Val(604)-Val(603).

    #10283
    manjey73
    Участник

    не проще сделать счетчик и сбрасывать его каждую минуту ?

    #10288
    Romiros
    Участник

    manjey73, поясните пожалуйста.

    #10289
    pistoletov
    Участник

    Может стоит добавить свойство канала. Начальное значение для таких случаев. Или свойство у канала инициализации. Ну типа
    If(канал) == инициализация то канал = 123
    Но лучше наверное поле добавить «начальное значение»

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