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

Стартовая страница Форумы Понять, как работает ПО Формулы Функции (формулы) для Rapid SCADA

Просмотр 15 сообщений - с 46 по 60 (из 150 всего)
  • Автор
    Сообщения
  • #31051
    Algomus
    Участник

    Однако, люто дорого..

    #31054
    manjey73
    Участник

    @Algomus опыта пока нет, руки не доходят. Использовать планирую openPLC для Linux.

    бесплатно 🙂

    • Ответ изменён 2 года, 4 месяца назад пользователем manjey73.
    #31056
    manjey73
    Участник

    https://autonomylogic.com

    Вот это вот. А так то находил и другие softPLC решения, но за большие деньги.
    Итальянцы — 800 евро
    CodeSys лицензия на Raspberry 50 евро + налог.
    Дальше как-то не искал.

    #31060
    Algomus
    Участник
    #31069
    Algomus
    Участник

    А что по поводу формулы генератора?

    #31070
    manjey73
    Участник

    @Algomus ну делать генератор импульса каждый цикл глупо. Ибо все формулы и так выполняются каждый цикл по умолчанию.

    Генератор импульса в каждом цикле будет выглядеть примерно так.
    в канале №1 импульс
    в канале END — обнуление канала №1

    Все что между можно привязать к импульсу канала №1 — но это то же самое, как просто выполнение формул в цикле самой Scada.

    А если с задержкой по таймеру TON то на выход таймера привязывать триггер переднего фронта.

    з.ы. надо бы переписать таймеры на словари а не через массивы, руки не доходят…
    Вы бы более точно задачу описали с примерами, чтобы понятно стало.

    #31071
    Algomus
    Участник

    __—————-_____ Вх
    _____-___-___-______ Вых

    Так понятно?) Периодический опрос.
    Кстати, под словарем что подразумевается?

    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    #31079
    manjey73
    Участник

    Словарь — Dictionary в C#
    Вместо массивов для сохранения промежуточных состояний, которые я использовал для формул TON, TOFF и так далее.

    Не совсем понятно 🙂 или оберните в CODE если положение знаков важно, ну или картинкой нарисуйте и на обменник общедоступный киньте а тут ссылку.

    Чтобы формула выполнялась с нужной периодичностью один раз, надо на выходе TON использовать R-Trig и по нему выполнять формулу.

    Таймер с автоперезапуском

    #31080
    manjey73
    Участник

    Ну вот что-то типа этого, если запуск таймера и последующий перезапуск пока контролируемый сигнал в лог 1.

    Тут вроде даже детектор переднего фронта не нужен.

    Больше проблема реализовать автосброс таймера будет. С одной стороны используется обычный TON, с другой стороны формулами надо еще дополнительный вход реализовать.

    #31081
    manjey73
    Участник

    Вообще в рамках Scada можно написать и сложнее формулы, но к сожалению теряется универсальность применения.
    Сейчас в версии 6-ть появились массивы каналов. Возможно применяя их получится сделать более универсальные формулы для таймеров, если описывать определенные правила при их использовании.
    Но я еще не пробовал, если честно.

    #31082
    manjey73
    Участник

    Вопрос Михаилу. Как можно получить доступ к элементу массива одного канала из другого канала?

    Например есть канал Х, состоящий из 3-х элементов массива (0-1-2). Как из другого канала Y обратиться к элементу 2 канала Х.
    Например этот элемент должен быть доступен для записи?

    #31083
    Algomus
    Участник

    manjey73, то что Вы нарисовали в FBD, но на входе не XOR, а & с инвертированным нижним входом и без Rtrig. Он уже будет не нужен, т.к. Ton перезапуститься после отсчёта выдержки.

    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    • Ответ изменён 2 года, 4 месяца назад пользователем Algomus.
    #31087
    manjey73
    Участник

    Вариант 2

    Вот так имеете ввиду?
    надо подумать над реализацией. Возможно это можно сделать текущими формулами из 5-ки, которые выкладывал

    • Ответ изменён 2 года, 4 месяца назад пользователем manjey73.
    #31089
    manjey73
    Участник

    Ну собственно вот.

    TON Добавил в Скрипты под именем Timers и включил туда сразу Ticks

    public static long Ticks()
    {
    DateTime now = DateTime.Now;
    long time = now.Ticks/10000;
    return time;
    }
    
    int[] TonNum = new int[1];
    long[] TonST = new long[1];
    bool[] TonFlag = new bool[1];
    public double Ton(double TonIn, double TonPT)
    {
    long ET = 0L;
    long ton_pt = Convert.ToInt64(TonPT);
    bool q = Val(CnlNum) > 0;
    bool ton_in = TonIn > 0;
    
    int res = Array.IndexOf(TonNum, CnlNum);
    if (res == -1)
    {
    res = TonNum.Length;
    Array.Resize(ref TonNum,  res+1);
    Array.Resize(ref TonST,   res+1);
    Array.Resize(ref TonFlag, res+1);
    TonNum[res] = CnlNum;
    }
    
    if (!ton_in)
    {
    q = false;
    TonFlag[res] = false;
    TonST[res] = 0L;
    }
    else
    {
    if (!TonFlag[res])
    {
    TonFlag[res] = true;
    TonST[res] = Ticks();
    }
     else
     {
       if (!q) ET = Ticks() - TonST[res];
     }
     if (ET >= ton_pt) q = true;
    }
    return Convert.ToDouble(q);
    }

    NOT скрипт NOT для инвертирования, добавил в Скрипты под общим именем Logic

    public double NOT(double val)
    {
        bool boolVal = val > 0;
        return Convert.ToDouble(!boolVal);
    }
    
    public double AND(double in1, double in2)
    {
    bool q = false;
    bool i1 = in1 > 0;
    bool i2 = in2 > 0;
    q = i1&&i2;
    return Convert.ToDouble(q);
    }

    Test Ton Timer
    Делаем Расчетный/Выходной канал (110 на скрине) для задания времени в миллисекундах
    Входная/Выходная формулы Val()/SetVal(CnlNum, Cmd)
    Расчетный канал таймера с авто сбросом через NOT
    Входная формула Ton(NOT(Val()), Val(110))

    • Ответ изменён 2 года, 4 месяца назад пользователем manjey73.
    #31090
    manjey73
    Участник

    Все скрипты старые из 5-ки. Не переделывал на Словари или иное. Остались на массивах.

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