Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Простейшие программы на Rapid Scada
Помечено: Логика, программирование
- В этой теме 68 ответов, 4 участника, последнее обновление 7 лет, 10 месяцев назад сделано djbond07.
-
АвторСообщения
-
15.04.2016 в 12:34 #2000djbond07Участник
Создаю новую тему по Вашей просьбе. В общем, у меня есть алгоритм, выполненный в виде блок-схемы. Вообще предполагается работа скады в 3-х режимах. Автоматическим, ручном и сервисном. Сейчас остановимся на автоматическом режиме. В этом алгоритме есть несколько логических условий и конструкций. Для начала хочу реализовать следующие:
1. Если (состояние входа 2 = 0) и (состояние входа 1 = 1) и (состояние входа (3 или 4) = 0, то (активировать выход 2) -> задержка по времени -> (активировать выход 1).
2. Если активны выходы 1 и 2 провести сравнение входного канала 7 с константой. Если значение меньше константы, то вывести сообщение на экран оператора, иначе ничего не делать.
3. Если (состояние входа 6 = 1), то (вывести сообщение на экран оператора) И (активировать выход 4)
Вход — это входной канал, выход — это канал управления. Экран оператора — это схема.
Это типовые конструкции, если бы я смог их реализовать, далее по образу и подобию реализовал бы остальное. Надеюсь на Вашу помощь.
15.04.2016 в 17:38 #2002MikhailМодераторСпособов решения может несколько. Я бы сделал так:
Вопрос 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 для отправки команд.
15.04.2016 в 17:48 #2003MikhailМодераторВопрос 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 — ваши новые статусы.15.04.2016 в 17:51 #2004MikhailМодераторВопрос 3
Вывод сообщения на схему рассмотрен выше.
Чтобы отправить команду, нужно настроить триггер в Модуле авт. управления.Ещё сообщение оператору может быть в виде события. Событие генерируется автоматически для входного канала. Посмотрите галочки в таблице входных каналов, они как раз отвечают за генерацию событий.
Полагаю, что после моих объяснений останутся вопросы. Пишите их, будет уточнять итеративно, что осталось непонятным.
15.04.2016 в 17:53 #2005MikhailМодераторТакже может быть полезно сделать значения канала в виде текста типа Вкл-Откл и т.п. Текстовых значений может быть больше 2. Для этого нужно добавить запись в таблицу Размерности. Для канала установить один из типов ТС и задать формат Текст.
15.04.2016 в 18:16 #2006djbond07УчастникСпасибо большое за ответ, стало более менее понятно. Насчёт платной услуги по созданию формул, от чего зависит цена, и каков обычно порядок цен? Вдруг сложится так, что нужно будет воспользоваться этой услугой. Мой e-mail: —, можете ответить туда.
Хотел бы уточнить, что Вы имеете ввиду под Модулем автоматического управления? Не совсем понял.
И ещё один момент. Он немножко в разрез идёт с темой, но всё же. Каким образом можно реализовать разные режимы работы? Допустим мне нужно, чтобы в автоматическом режиме выполнялись одни скрипты, а в ручном другие. И соответственно 2 разных экрана оператора для разных режимов.
- Этот ответ был изменен 8 лет назад от Mikhail.
15.04.2016 в 20:49 #2007MikhailМодераторМодуль автоматического управления: http://rapidscada.ru/download-all-files/download-automatic-control-module
Режимы работы:
Нарисуете 2 экрана, переключаться между ними нужно будет вручную.
Можно завести входной канал, который будет «помнить» включенный режим. И канал управления для его переключения. В формулах учитывать, какой режим включен.20.04.2016 в 12:53 #2009djbond07УчастникДобрый день! Тогда попутный вопрос, как с помощью канала управления переключаться между экранами? это было бы очень здорово реализовать!
И ещё вопрос, как всё-таки без модуля автоматического управления активизировать каналы управления?Допустим я создам 4 дорасчётных канала, которые будут принимать значения в зависимости от формул. Потом можно создать какой-то массив состояний в формулах, в котором будут храниться значения этих дорасчётных каналов. И дальше можно призвоить значение флагов командам управления. Так будет правильно? Если нет, как можно это реализовать? Или без модуля автоматического управления никак в данной ситуации?
20.04.2016 в 13:42 #2010MikhailМодераторДобрый день!
Чтобы переключаться между экранами автоматически, нужно разработать дополнительный нестандартный модуль для SCADA-Web на JavaScript. Это возможно, но довольно нетривиально. Был похожий запрос — в случае возникновении тревожного события переходить на нужную схему по клику на событии. Но в стандартную реализацию это вряд ли в ближайшее время войдет, только если кто-то оплатит разработку.
Канал управления не является командой, он только описывает, как подаётся команда. Модуль автоматического управления поэтому и был специально разработан. Вроде бы цена весьма демократичная на него?
20.04.2016 в 14:14 #2011djbond07УчастникПытаюсь реализовать дорасчётный ТИ (мой вопрос 1 самый первый пункт). В таблицу формул вставил:
double Cnl102()
{
return Val(292) == 1 && Val(291) == 1 ? 1 : 0;
}В строку формулы в канале: Cnl102(Cnl)
В скада сервере ошибка: Строка 430, колонка 57: error CS1501: Ни одна из перегрузок метода «Cnl102» не принимает «1» аргументов.
Помогите, пожалуйста, разобраться в чём ошибка, и как её исправить.
20.04.2016 в 14:37 #2012EvgenУчастникpublic double Cnl102(int CnlNum1021, int CnlNum1022)
{
return Val(CnlNum1021) == 1 && Val(CnlNum1022) == 1 ? 1 : 0;
}в строку в канале:
Cnl102(292, 291)
попробуйте так, если не ошибаюсь и логика правильная должно работать20.04.2016 в 15:03 #2013djbond07УчастникСпасибо большое! работает!
Я правильно понимаю? Мы объявляем функцию Cnl102 от двух аргументов, далее идёт тело программы, в котором мы возвращаем значение 1 или 0 нашей функции в зависимости от условий. А в строке в канале мы просто вызываем эту функцию, явно указав, информацию с каналов каких номеров подставить вместо аргументов в эту функцию. Просто хочу детально разбирать каждый момент, чтобы потом понятнее было самому писать формулы.
20.04.2016 в 15:11 #2014EvgenУчастникда все верно!
21.04.2016 в 11:17 #2015djbond07УчастникМихаил, согласен с Вами, цена небольшая. Такой вопрос. Поясните, пожалуйста, 4-й пункт файла лицензии «При изменении аппаратной конфигурации или сетевой идентификации сервера, лицензия прекращает своё действие.». Что тут подразумевается под аппаратной конфигурацией и сетевой идентификацией?
21.04.2016 в 17:51 #2021djbond07УчастникСкажите, пожалуйста, в записи «DateTime dt = DateTime.MinValue;» MinValue что означает? Что за минимальное значение?
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.