Функции (формулы) для Rapid SCADA

Просмотр 14 сообщений - с 136 по 149 (из 149 всего)
  • Автор
    Сообщения
  • #34806
    manjey73
    Участник

    Входная формула
    Val(); Stat()
    Выходная формула
    Val() > 0? SetData(CnlNum, 0, 0) : SetData(CnlNum, 1, 1)

    Проверил на Расчетном канале.
    Посылать можно любое значение, то есть повесить на кнопку с настройкой Отправить команду сразу

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

    Входную формулу можно оставить пустой, скорее всего.

    #35874
    ilcha
    Участник

    Здравствуйте , нужна помощь. Подключил счётчик воды через дискретный модуль, от счётчика воды сигналы получаю в RS(6.2). Из готовых скриптов взял:
    Счётчик импульсов указанного канала.
    Входная формула CountPulse(101) на канале 112
    Входная формула SetVal(113,Val(112)) результат с канала 112 записываю на канал 113
    Выходная формула SetData() на канале 114 для внесения актуальных показаний счётчика воды.
    Пытался складывать на отдельном канале результаты SetData() + CountPulse(101) , но не получал актуальные данные счётчика т.к. на канале импульсов уже накрутилось N-ое кол-во срабатываний.
    Какие есть задумки : 1. либо обнулять счётчик импульсов при достижение на нем кол-ва 100 (100 срабатываний это 1 куб воды). 2 либо обнулять количество счётчика импульсов по кнопке перед внесением актуальных данных.
    Подскажите как еще это можно реализовать ? С формулами и примерами , спасибо.

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

    Добрый день!
    Сделайте, пожалуйста, скриншоты свойств каналов, чтобы были видны номера каналов и формулы этих каналов.

    #35881
    manjey73
    Участник

    Вообще никак. Скорость обмена у вас не позволит считать кубометры в принципе.
    Тем более при использовании обычного дискретного входа. Или у вас он в режиме счетчика именно?

    #35884
    a80808
    Участник

    Ставить счетчик с внутренней памятью импульсов и считывать каждую минуту (например) количество импульсов с привязкой ко времени. Дальше уже просто.

    Либо по другому — считать время включения насоса. Но надо четко знать его производительность.
    Делал такое для насосов фильтрата для ГРЭС

    #35887
    ilcha
    Участник

    каналы

    У меня уже смонтирован счётчик на котором уже накручено какое-то количество кубов. Недавно подключил его в модулю который считывает дискретные входы. Каждое включение дискретного входа значит , что 100 литров пролилось. Это бывает не так часто. На канале 101 я вижу вкл когда пролилось 100 литров, после висит откл. На 112 канал повесил готовый скрипт из RS CountPulse(101), который считывает количество включений.
    Мне нужно , чтобы я внес актуальные данные счётчика который смонтирован физически и мне не прибавлялось то , что уже накрутилось на 112 канале. Можно ли при достижении на канале 100 включений сбрасывать его в 0 и зациклить этот процесс ? Или сбрасывать уже накрученное количество включений по кнопке в 0 и чтобы заново начинался отсчёт?

    • Этот ответ был изменен 1 месяц, 3 недели назад от ilcha. Причина: пытаюсь залить фото
    #35895
    Mikhail
    Модератор

    Ссылка не открывается.

    #35902
    ilcha
    Участник

    https://cloud.mail.ru/public/NRph/Gz1twSoNL
    А вот так ?

    • Этот ответ был изменен 1 месяц, 3 недели назад от Mikhail.
    #35903
    manjey73
    Участник

    Сама формула есть?

    Вообще, формула может выполнятся раз 10 в секунду, по этому с подобными расчетами все сложно.

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

    Использовать SetVal(113,…) в канале 113 — некорректно. Просто напишите Val(112)

    #36183
    sakhalin_Cat
    Участник

    Здравствуйте.
    Господа, помогите модифицировать формулу в канале. Суть в чём: Формула рабочая полностью, но вылез небольшой косяк: В стандартном режиме работы когда вся система запустилась и статична у реле может быть два состояния это 401=true и 402=False, формула их нормально отрабатывает и меняет состояние при подаче команды в канал управления 1 или 0, 401 или 402. В статичной работающей системе всё прекрасно…
    Проблемы начинаются если оборудование (железо\реле) обнаруживает ошибку или при перезапуске системы инициализируется, в этом случае вместо кода состояния 401 или 402 реле может иметь любой другой код, например 251 = иниц успешна, 41 = ошибка оборудования, 139 = обрыв связи итд итп.
    Соответственно команда поданная в канал не работает если код там не 401 и не 402.
    Необходимо чтобы при любом состоянии канала кроме поданная команда работала нормально.
    Формула которая используется сейчас: Val(30602) == 401 ? (int)2 : (int)1

    #36184
    manjey73
    Участник

    Если входной формулы нет и в канал приходит число. То входная формула может быть для варианта перечисления

    public double GetValueSvet()
    {
     switch ((int)CnlVal)
      {
       case 401: return 1; // Включено
       case 402: return 0; // Выключено
       case 251: return 2; // Инициализация Ок
       case 41: return 3; // Ошибка оборуд.
       case 139: return 4; // Обрыв связи
       default: return 0;
      }
    }

    В Вспомогательных таблицах — Форматы добавить перечисление по аналогии
    Выключено; Включено; Инициализация Ок; Ошибка оборуд.; Обрыв связи

    В выходной формуле ничего, А вот в Формате Команды выбрать Off-On

    #36188
    manjey73
    Участник
    public double GetValueSvet(double val)
    {
     switch ((int)val)
      {
       case 401: return 1; // Включено
       case 402: return 0; // Выключено
       case 251: return 2; // Инициализация Ок
       case 41: return 3; // Ошибка оборуд.
       case 139: return 4; // Обрыв связи
       default: return 0;
      }
    }

    и вызов для входного канала GetValueSvet(Cnl)
    Для какого-то расчетного канала например GetValueSvet(Val(105)) — канал в симуляторе для теста.

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