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

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

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

    Вариант 2
    А что отсчёт запускает. Я имел ввиду И. Один прямой вход для запуска, второй инверсный. & -Ton
    Так.

    #31093
    Algomus
    Участник

    Я инверсию по другому делал abs(Val-1) прямо в администраторе. Это естественно, если гарантированно double только 1 и 0 принимает.
    Я почему и привел за основу Ton. Там просто надо И на входе поставить.

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

    А вам надо еще и запускать его отдельно?

    В моем примере Вариант 2 это просто таймер который запускается при старте всегда и работает в цикле перезапускаясь каждый отсчет.

    #31100
    manjey73
    Участник

    Если надо с И, то вероятно потребуются еще расчетные каналы.
    в Scada применение подобных скриптов похоже на LAD язык, только «катушка» (выход) расположена слева — значение самого канала, а в LAD когда на ПЛК программируешь она справа. Но суть похожа.

    #31101
    manjey73
    Участник

    Там вместе с NOT еще скрипт AND на два канала.
    Тогда добавляете еще один расчетный канал или он может быть входным, который будет запускать таймер. Например у меня это номер 113 (расчетный)
    Добавлены формулы в канале Val() и SetVal(CnlNum, Cmd) формат Off-On
    Имитация запуска.

    В таймере же формула будет такой Ton(AND(Val(113),NOT(Val())), Val(110))
    Канал 110 для задания в миллисекундах времени. Можно сразу указать время, например 20 секунд Ton(AND(Val(113),NOT(Val())), 20000)

    #31102
    manjey73
    Участник

    А если нужен BLINK, то надо найти и посмотреть код на ST и переписать по аналогии с таймерами. Вот там как раз будет генератор с заданием времени включенного и выключенного состояния.

    Ну следует помнить, что это все софтовое, так что на время срабатывания таймера и т.д. будет влиять время цикла прохода всех каналов, как в ПЛК.

    • Ответ изменён 2 года, 4 месяца назад пользователем manjey73.
    #31106
    Mikhail
    Модератор

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

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

    Пусть канал X имеет номер 101. С точки зрения Сервера будут созданы каналы 101, 102 и 103. Поэтому получить доступ ко 2-му элементу можно просто Val(102) или Data(102).

    #31107
    manjey73
    Участник

    Тут больше наверное вопрос взаимоотношений формул.

    Например создавая массив хочу реализовать такую штуку. Элементы массива
    0 — выходной канал основной формулы на примере Таймера это его выход .Q
    1 — выходной канал таймера ET — время, которое прошло с момента запуска таймера
    2 — ну например вход задания времени таймера — и тут непонятно как задать это самое время, так как в Администраторе не будет в таблице данного канала, он только подразумевается что он есть, так как мы создаем массив.
    3 — ну например это вход сброса таймера без ожидания времени окончания его работы.

    Получается формула таймера должна предусматривать как мы организуем элементы массива.
    А вот чтобы изменить канал мы должны создать дополнительный канал и напрямую писать в какой-то определенный канал некое значение.

    Тут возникает вопрос 1. Если сам по себе канал с таймеров не будет являться выходным, запись в него из канала Y возможна?
    И вопрос 2. Формулу мы может указать только в родительском канале и самостоятельно предусматривать за что и как отвечают элементы массива.

    Может в будущем сделать либо раскрывающийся список на элементах массива и возможность каждому элементу создавать свои формулы?
    Или можно сделать всплывающее окно элементов массива и так же иметь возможность прописывать свои формулы и назначения каналов, имена тегов с привязкой к имени родителя?
    Было бы полезно и не требовалось бы создавать промежуточные каналы для изменения.

    Например мы дали имя родительскому Ton1, раскрываем массив и назначаем имя для 0 — Q
    для следующего ET, дальше R
    И как вариант в следующих расчетных каналах обращаться не по номеру канала а по тегу. В том числе и для мнемосхем уже по именам, типа Ton1.Q или Ton1.R

    Как-то научить обработчик скриптов это понимать, а не только по номерам каналов обращаться.

    #31108
    Algomus
    Участник

    int[] GenNum = new int[1];
    long[] GenST = new long[1];
    bool[] GenFlag = new bool[1];
    public bool Gen(double GenIn, long GenPT)
    {
    long ET = 0L;
    bool q = Val(CnlNum) > 0;
    bool gen_in = GenIn > 0;

    int res = Array.IndexOf(GenNum, CnlNum);
    if (res == -1)
    {
    res = GenNum.Length;
    Array.Resize(ref GenNum, res+1);
    Array.Resize(ref GenST, res+1);
    Array.Resize(ref GenFlag, res+1);
    GenNum[res] = CnlNum;
    }

    if (!gen_in && q == false)

    {
    q = false;
    GenFlag[res] = false;
    GenST[res] = 0L;
    }
    else
    {
    if (!GenFlag[res])
    {
    GenFlag[res] = true;
    GenST[res] = Ticks();
    }
    else
    {
    if (!q) ET = Ticks() — GenST[res];
    }
    if (ET >= GenPT) q = true;
    }
    return q;
    }

    Нечто подобное в качестве генератора импульсов в 1 цикл через заданное время.

    #31109
    manjey73
    Участник

    я немного не сторонник не унифицированных скриптов.
    Все таки Ton, Toff, Tp и так далее это все из МЭК языков.

    #31110
    Algomus
    Участник

    manjey73, спасибо за внимание к моей проблеме. Это для пробы. Будет работать можно и причесать как надо. Но не работает.

    #31111
    Algomus
    Участник

    if (!gen_in && q == true)
    А так работает. Только не понял почему)
    Как назвать формулу?

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

    Так называйте как хотите. Если такое имя будет, у вас произойдет ошибка запуска сервера и в журнале можно будет посмотреть.
    Ну и потом посмотреть в строке, на которую ругается непосредственно в файле скриптов.

    #31115
    Algomus
    Участник

    Понял свою ошибку.

    #31118
    Michael
    Участник

    Подскажите, можно ли открыть ссылку скриптом?
    Хочу не использовать компонент «ссылка», а динамическому рисунку присвоить канал управления, «отправить команду сразу», а там уже через скрипт открыть указанный url.

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