Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Функции (формулы) для Rapid SCADA
- В этой теме 149 ответов, 17 участников, последнее обновление 1 год, 3 месяца назад сделано
Oleg.
-
АвторСообщения
-
27.06.2024 в 15:35 #33240
Z_h_e
Участникfunc( val(101))
Так не работает?27.06.2024 в 15:39 #33241Z_h_e
УчастникUpd: Val с заглавной
27.06.2024 в 15:55 #33242RX9COZ
УчастникНе работает. Да даже если бы работало, это мне для каждого устройства пришлось бы новую функцию писать. Сейчас 101 канал, в другой раз другой будет и опять новую функцию что-ли создавать.
27.06.2024 в 16:09 #33243Z_h_e
УчастникУ меня рапид v6.2.
Есть мной написанная функция у которой три параметра. Используется в расчетном канале. И как раз использую в параметрах возвращаемое значение функцией Val(n) и тоже три разных канала. Все работает.27.06.2024 в 16:09 #33244
manjey73Участникpublic bool myFunc (double par1, double par2, double par3) { bool xbool = false; ваши расчеты и назначение xbool true или false return xbool; }В данном случае вызывая функцию в расчетном канале вы должны передать значения нужных каналов
myFunc(Val(101), Val(102), Val(103))Другой вариант
public double myFunc (int cnlN1, int cnlN2, int cnlN3) { bool q = false; Приводим к булям значения каналов bool cnl1 = Val(cnlN1) > 0; bool cnl2 = Val(cnlN2) > 0; bool cnl3 = Val(cnlN3) > 0; ваши расчеты и назначение q true или false return Convert.ToDouble(q); }Вызов
myFunc(101, 102, 103)Передавать номера каналов симпатичнее 🙂
Вариантов много и разных…
-
Ответ изменён 1 год, 12 месяцев назад пользователем
manjey73.
27.06.2024 в 16:13 #33246
manjey73УчастникСобственно внутри сами выбираете с чем работать, с булями, целыми, float или double
Главное их привести к тому типу, на чем вы будете строить логику.Ну и вернуть либо нужный тип, либо выбрать какой тип будет возвращать функция, а движок формул Scada сам конвертнет в double для записи в канал.
27.06.2024 в 16:17 #33247
manjey73УчастникПросто поймите концепцию.
Данные канала хранятся в double
Чтобы вы не возвращали функцией будет преобразовано в double для записи значения в канал при этом только 8 байт. Если работаете со строками, думайте о создании массива каналов.
При это вы сами решаете что будет возвращать функция, даже если делаете обработку bool вы можете вернуть далеко не bool, указав что функция должна возвращать double-
Ответ изменён 1 год, 12 месяцев назад пользователем
manjey73.
27.06.2024 в 16:49 #33249RX9COZ
УчастникДругой вариант
Вот это мне нравится. Этого я и пытался добиться. Заработало ! Мне просто было непонятна структура функции. Где функция объявляется в скобках указываются номера каналов, а значения этих каналов можно присвоить в объявленную переменную выражением например var1 = Val(cnlN1), где cnlN1 тоже переменная типа int содержащая в себе номер канала, значение которого присвоится в var1.
27.06.2024 в 17:52 #33250
manjey73УчастникВ документацю загляните по формулам.
Некоторые вопросы отпадут.27.07.2024 в 03:55 #33623malen
УчастникЗдравствуйте.Подскажите, как масштабировать число?
Получаю с ОРС сервера 35890,0 нужно вывести 3589,0 скада 5 версия.
С написанием формул тяжело.27.07.2024 в 05:54 #33624
JurasskParkУчастникВ формуле канала пропишите формулу Cnl*0.1.
27.07.2024 в 05:55 #33625
JurasskParkУчастникИли вам именно нужно линейное масштабирование?
27.07.2024 в 09:30 #33627
manjey73Участниктут простое деление на 10, это не масштабирование.
или Cnl/10 что то же самое, что Cnl*0.127.07.2024 в 18:39 #33635malen
УчастникСпасибо.Мне деление нужно.Не грамотно выразился.
25.08.2024 в 15:16 #34253mr_smit
УчастникКак при этом оставить это масштабирование для графика?
Например, по modbus во входной канал читается температура в виде целого числа «2536». Что означает «25,36» °С. Я пишу в формуле Cnl/100. Но когда нажимаю в Web на это число, чтобы построить график, то на графике значения «2536». Т.е. те что непосредственно считываются с устройства. А как на графике реальную температуру увидеть?
-
Ответ изменён 1 год, 12 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.