Простейшие программы на Rapid Scada

Просмотр 15 сообщений - с 1 по 15 (из 69 всего)
  • Автор
    Сообщения
  • #2000
    djbond07
    Участник

    Создаю новую тему по Вашей просьбе. В общем, у меня есть алгоритм, выполненный в виде блок-схемы. Вообще предполагается работа скады в 3-х режимах. Автоматическим, ручном и сервисном. Сейчас остановимся на автоматическом режиме. В этом алгоритме есть несколько логических условий и конструкций. Для начала хочу реализовать следующие:

    1. Если (состояние входа 2 = 0) и (состояние входа 1 = 1) и (состояние входа (3 или 4) = 0, то (активировать выход 2) -> задержка по времени -> (активировать выход 1).

    2. Если активны выходы 1 и 2 провести сравнение входного канала 7 с константой. Если значение меньше константы, то вывести сообщение на экран оператора, иначе ничего не делать.

    3. Если (состояние входа 6 = 1), то (вывести сообщение на экран оператора) И (активировать выход 4)

    Вход — это входной канал, выход — это канал управления. Экран оператора — это схема.

    Это типовые конструкции, если бы я смог их реализовать, далее по образу и подобию реализовал бы остальное. Надеюсь на Вашу помощь.

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

    Способов решения может несколько. Я бы сделал так:
    Вопрос 1
    Добавить 4 дорасчётных канала:
    101 Активация выхода 1
    102 Деактивация выхода 1
    103 Активация выхода 2
    104 Деактивация выхода 2

    Каналы будут равны 0, если отправлять команду не нужно, и 1, если нужно.
    В формуле для канала 101 помимо вычисления значения канала нужно будет ещё запомнить время изменения в переменную. Переменная — это отдельная формула, которую можно объявить так: DateTime dt = DateTime.MinValue;

    Пример формулы для канала в таблице формул:
    double MyFormula()
    {
    return Val(2) == 0 && Val(1) > 0 ? 1 : 0;
    }

    Разработка готовых формул выходит за рамки бесплатной поддержки (и даже платной). Здесь нужно или сделать самостоятельно или заказать. Для отладки кода формул я использую консольные приложения в Visual Studio.

    С помощью Модуля авт. управления настроить триггеры на значение канала > 0 для отправки команд.

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

    Вопрос 2
    Добавить дорасчётный канал с формулой Val(1)>0&&Val(2)>0&&Val(7)>MyConst? 1:0
    В таблицу формул добавить double MyConst = 100;

    В редакторе схем есть 2 варианта переключения видимости:
    1. Для динамического рисунка настроить условия, какой рисунок отображать.

    2. Для динамической надписи менять цвет текста. Это сложнее: есть специальный цвет Status, который берется из цвета статуса канала. Значит в таблице типов событий нужно создать свои статусы, назначить им цвет и сделать формулу, устанавливающую статус канала, например, формула канала: 1; Val(1)>0?101:102
    Где 101 и 102 — ваши новые статусы.

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

    Вопрос 3
    Вывод сообщения на схему рассмотрен выше.
    Чтобы отправить команду, нужно настроить триггер в Модуле авт. управления.

    Ещё сообщение оператору может быть в виде события. Событие генерируется автоматически для входного канала. Посмотрите галочки в таблице входных каналов, они как раз отвечают за генерацию событий.

    Полагаю, что после моих объяснений останутся вопросы. Пишите их, будет уточнять итеративно, что осталось непонятным.

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

    Также может быть полезно сделать значения канала в виде текста типа Вкл-Откл и т.п. Текстовых значений может быть больше 2. Для этого нужно добавить запись в таблицу Размерности. Для канала установить один из типов ТС и задать формат Текст.

    #2006
    djbond07
    Участник

    Спасибо большое за ответ, стало более менее понятно. Насчёт платной услуги по созданию формул, от чего зависит цена, и каков обычно порядок цен? Вдруг сложится так, что нужно будет воспользоваться этой услугой. Мой e-mail: —, можете ответить туда.

    Хотел бы уточнить, что Вы имеете ввиду под Модулем автоматического управления? Не совсем понял.

    И ещё один момент. Он немножко в разрез идёт с темой, но всё же. Каким образом можно реализовать разные режимы работы? Допустим мне нужно, чтобы в автоматическом режиме выполнялись одни скрипты, а в ручном другие. И соответственно 2 разных экрана оператора для разных режимов.

    • Этот ответ был изменен 5 лет, 6 месяцев назад от Mikhail.
    #2007
    Mikhail
    Модератор

    Модуль автоматического управления: http://rapidscada.ru/download-all-files/download-automatic-control-module

    Режимы работы:
    Нарисуете 2 экрана, переключаться между ними нужно будет вручную.
    Можно завести входной канал, который будет «помнить» включенный режим. И канал управления для его переключения. В формулах учитывать, какой режим включен.

    #2009
    djbond07
    Участник

    Добрый день! Тогда попутный вопрос, как с помощью канала управления переключаться между экранами? это было бы очень здорово реализовать!

    И ещё вопрос, как всё-таки без модуля автоматического управления активизировать каналы управления?Допустим я создам 4 дорасчётных канала, которые будут принимать значения в зависимости от формул. Потом можно создать какой-то массив состояний в формулах, в котором будут храниться значения этих дорасчётных каналов. И дальше можно призвоить значение флагов командам управления. Так будет правильно? Если нет, как можно это реализовать? Или без модуля автоматического управления никак в данной ситуации?

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

    Добрый день!

    Чтобы переключаться между экранами автоматически, нужно разработать дополнительный нестандартный модуль для SCADA-Web на JavaScript. Это возможно, но довольно нетривиально. Был похожий запрос — в случае возникновении тревожного события переходить на нужную схему по клику на событии. Но в стандартную реализацию это вряд ли в ближайшее время войдет, только если кто-то оплатит разработку.

    Канал управления не является командой, он только описывает, как подаётся команда. Модуль автоматического управления поэтому и был специально разработан. Вроде бы цена весьма демократичная на него?

    #2011
    djbond07
    Участник

    Пытаюсь реализовать дорасчётный ТИ (мой вопрос 1 самый первый пункт). В таблицу формул вставил:

    double Cnl102()
    {
    return Val(292) == 1 && Val(291) == 1 ? 1 : 0;
    }

    В строку формулы в канале: Cnl102(Cnl)

    В скада сервере ошибка: Строка 430, колонка 57: error CS1501: Ни одна из перегрузок метода «Cnl102» не принимает «1» аргументов.

    Помогите, пожалуйста, разобраться в чём ошибка, и как её исправить.

    #2012
    Evgen
    Участник

    public double Cnl102(int CnlNum1021, int CnlNum1022)
    {
    return Val(CnlNum1021) == 1 && Val(CnlNum1022) == 1 ? 1 : 0;
    }

    в строку в канале:
    Cnl102(292, 291)
    попробуйте так, если не ошибаюсь и логика правильная должно работать

    #2013
    djbond07
    Участник

    Спасибо большое! работает!

    Я правильно понимаю? Мы объявляем функцию Cnl102 от двух аргументов, далее идёт тело программы, в котором мы возвращаем значение 1 или 0 нашей функции в зависимости от условий. А в строке в канале мы просто вызываем эту функцию, явно указав, информацию с каналов каких номеров подставить вместо аргументов в эту функцию. Просто хочу детально разбирать каждый момент, чтобы потом понятнее было самому писать формулы.

    #2014
    Evgen
    Участник

    да все верно!

    #2015
    djbond07
    Участник

    Михаил, согласен с Вами, цена небольшая. Такой вопрос. Поясните, пожалуйста, 4-й пункт файла лицензии «При изменении аппаратной конфигурации или сетевой идентификации сервера, лицензия прекращает своё действие.». Что тут подразумевается под аппаратной конфигурацией и сетевой идентификацией?

    #2021
    djbond07
    Участник

    Скажите, пожалуйста, в записи «DateTime dt = DateTime.MinValue;» MinValue что означает? Что за минимальное значение?

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