Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Функции (формулы) для Rapid SCADA
- В этой теме 148 ответов, 16 участников, последнее обновление 1 месяц, 1 неделя назад сделано manjey73.
-
АвторСообщения
-
19.09.2024 в 14:14 #34806manjey73Участник
Входная формула
Val(); Stat()
Выходная формула
Val() > 0? SetData(CnlNum, 0, 0) : SetData(CnlNum, 1, 1)Проверил на Расчетном канале.
Посылать можно любое значение, то есть повесить на кнопку с настройкой Отправить команду сразу20.09.2024 в 13:05 #34816MikhailМодераторВходную формулу можно оставить пустой, скорее всего.
27.11.2024 в 11:35 #35874ilchaУчастникЗдравствуйте , нужна помощь. Подключил счётчик воды через дискретный модуль, от счётчика воды сигналы получаю в RS(6.2). Из готовых скриптов взял:
Счётчик импульсов указанного канала.
Входная формула CountPulse(101) на канале 112
Входная формула SetVal(113,Val(112)) результат с канала 112 записываю на канал 113
Выходная формула SetData() на канале 114 для внесения актуальных показаний счётчика воды.
Пытался складывать на отдельном канале результаты SetData() + CountPulse(101) , но не получал актуальные данные счётчика т.к. на канале импульсов уже накрутилось N-ое кол-во срабатываний.
Какие есть задумки : 1. либо обнулять счётчик импульсов при достижение на нем кол-ва 100 (100 срабатываний это 1 куб воды). 2 либо обнулять количество счётчика импульсов по кнопке перед внесением актуальных данных.
Подскажите как еще это можно реализовать ? С формулами и примерами , спасибо.27.11.2024 в 11:51 #35875MikhailМодераторДобрый день!
Сделайте, пожалуйста, скриншоты свойств каналов, чтобы были видны номера каналов и формулы этих каналов.27.11.2024 в 12:00 #35881manjey73УчастникВообще никак. Скорость обмена у вас не позволит считать кубометры в принципе.
Тем более при использовании обычного дискретного входа. Или у вас он в режиме счетчика именно?27.11.2024 в 13:14 #35884a80808УчастникСтавить счетчик с внутренней памятью импульсов и считывать каждую минуту (например) количество импульсов с привязкой ко времени. Дальше уже просто.
—
Либо по другому — считать время включения насоса. Но надо четко знать его производительность.
Делал такое для насосов фильтрата для ГРЭС27.11.2024 в 16:17 #35887ilchaУчастникУ меня уже смонтирован счётчик на котором уже накручено какое-то количество кубов. Недавно подключил его в модулю который считывает дискретные входы. Каждое включение дискретного входа значит , что 100 литров пролилось. Это бывает не так часто. На канале 101 я вижу вкл когда пролилось 100 литров, после висит откл. На 112 канал повесил готовый скрипт из RS CountPulse(101), который считывает количество включений.
Мне нужно , чтобы я внес актуальные данные счётчика который смонтирован физически и мне не прибавлялось то , что уже накрутилось на 112 канале. Можно ли при достижении на канале 100 включений сбрасывать его в 0 и зациклить этот процесс ? Или сбрасывать уже накрученное количество включений по кнопке в 0 и чтобы заново начинался отсчёт?- Этот ответ был изменен 1 месяц, 3 недели назад от ilcha. Причина: пытаюсь залить фото
28.11.2024 в 12:33 #35895MikhailМодераторСсылка не открывается.
28.11.2024 в 19:11 #35902ilchaУчастникhttps://cloud.mail.ru/public/NRph/Gz1twSoNL
А вот так ?- Этот ответ был изменен 1 месяц, 3 недели назад от Mikhail.
28.11.2024 в 23:03 #35903manjey73УчастникСама формула есть?
Вообще, формула может выполнятся раз 10 в секунду, по этому с подобными расчетами все сложно.
29.11.2024 в 13:37 #35905MikhailМодераторИспользовать SetVal(113,…) в канале 113 — некорректно. Просто напишите Val(112)
15.12.2024 в 11:34 #36183sakhalin_CatУчастникЗдравствуйте.
Господа, помогите модифицировать формулу в канале. Суть в чём: Формула рабочая полностью, но вылез небольшой косяк: В стандартном режиме работы когда вся система запустилась и статична у реле может быть два состояния это 401=true и 402=False, формула их нормально отрабатывает и меняет состояние при подаче команды в канал управления 1 или 0, 401 или 402. В статичной работающей системе всё прекрасно…
Проблемы начинаются если оборудование (железо\реле) обнаруживает ошибку или при перезапуске системы инициализируется, в этом случае вместо кода состояния 401 или 402 реле может иметь любой другой код, например 251 = иниц успешна, 41 = ошибка оборудования, 139 = обрыв связи итд итп.
Соответственно команда поданная в канал не работает если код там не 401 и не 402.
Необходимо чтобы при любом состоянии канала кроме поданная команда работала нормально.
Формула которая используется сейчас: Val(30602) == 401 ? (int)2 : (int)115.12.2024 в 17:42 #36184manjey73УчастникЕсли входной формулы нет и в канал приходит число. То входная формула может быть для варианта перечисления
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
16.12.2024 в 12:40 #36188manjey73Участник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)) — канал в симуляторе для теста. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.