Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Функции (формулы) для Rapid SCADA
- В этой теме 149 ответов, 17 участников, последнее обновление 1 год, 3 месяца назад сделано
Oleg.
-
АвторСообщения
-
14.02.2024 в 19:07 #31092
Algomus
Участник14.02.2024 в 19:19 #31093Algomus
УчастникЯ инверсию по другому делал abs(Val-1) прямо в администраторе. Это естественно, если гарантированно double только 1 и 0 принимает.
Я почему и привел за основу Ton. Там просто надо И на входе поставить.-
Ответ изменён 2 года, 4 месяца назад пользователем
Algomus.
15.02.2024 в 09:19 #31099
manjey73УчастникА вам надо еще и запускать его отдельно?
В моем примере Вариант 2 это просто таймер который запускается при старте всегда и работает в цикле перезапускаясь каждый отсчет.
15.02.2024 в 09:22 #31100
manjey73УчастникЕсли надо с И, то вероятно потребуются еще расчетные каналы.
в Scada применение подобных скриптов похоже на LAD язык, только «катушка» (выход) расположена слева — значение самого канала, а в LAD когда на ПЛК программируешь она справа. Но суть похожа.15.02.2024 в 09:37 #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)15.02.2024 в 09:39 #31102
manjey73УчастникА если нужен BLINK, то надо найти и посмотреть код на ST и переписать по аналогии с таймерами. Вот там как раз будет генератор с заданием времени включенного и выключенного состояния.
Ну следует помнить, что это все софтовое, так что на время срабатывания таймера и т.д. будет влиять время цикла прохода всех каналов, как в ПЛК.
-
Ответ изменён 2 года, 4 месяца назад пользователем
manjey73.
15.02.2024 в 11:59 #31106
MikhailМодераторКак можно получить доступ к элементу массива одного канала из другого канала?
Например есть канал Х, состоящий из 3-х элементов массива (0-1-2). Как из другого канала Y обратиться к элементу 2 канала Х.
Например этот элемент должен быть доступен для записи?Пусть канал X имеет номер 101. С точки зрения Сервера будут созданы каналы 101, 102 и 103. Поэтому получить доступ ко 2-му элементу можно просто Val(102) или Data(102).
15.02.2024 в 12:14 #31107
manjey73УчастникТут больше наверное вопрос взаимоотношений формул.
Например создавая массив хочу реализовать такую штуку. Элементы массива
0 — выходной канал основной формулы на примере Таймера это его выход .Q
1 — выходной канал таймера ET — время, которое прошло с момента запуска таймера
2 — ну например вход задания времени таймера — и тут непонятно как задать это самое время, так как в Администраторе не будет в таблице данного канала, он только подразумевается что он есть, так как мы создаем массив.
3 — ну например это вход сброса таймера без ожидания времени окончания его работы.Получается формула таймера должна предусматривать как мы организуем элементы массива.
А вот чтобы изменить канал мы должны создать дополнительный канал и напрямую писать в какой-то определенный канал некое значение.Тут возникает вопрос 1. Если сам по себе канал с таймеров не будет являться выходным, запись в него из канала Y возможна?
И вопрос 2. Формулу мы может указать только в родительском канале и самостоятельно предусматривать за что и как отвечают элементы массива.Может в будущем сделать либо раскрывающийся список на элементах массива и возможность каждому элементу создавать свои формулы?
Или можно сделать всплывающее окно элементов массива и так же иметь возможность прописывать свои формулы и назначения каналов, имена тегов с привязкой к имени родителя?
Было бы полезно и не требовалось бы создавать промежуточные каналы для изменения.Например мы дали имя родительскому Ton1, раскрываем массив и назначаем имя для 0 — Q
для следующего ET, дальше R
И как вариант в следующих расчетных каналах обращаться не по номеру канала а по тегу. В том числе и для мнемосхем уже по именам, типа Ton1.Q или Ton1.RКак-то научить обработчик скриптов это понимать, а не только по номерам каналов обращаться.
15.02.2024 в 14:26 #31108Algomus
Участник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 цикл через заданное время.
15.02.2024 в 15:16 #31109
manjey73Участникя немного не сторонник не унифицированных скриптов.
Все таки Ton, Toff, Tp и так далее это все из МЭК языков.15.02.2024 в 15:29 #31110Algomus
Участникmanjey73, спасибо за внимание к моей проблеме. Это для пробы. Будет работать можно и причесать как надо. Но не работает.
15.02.2024 в 16:22 #31111Algomus
Участник15.02.2024 в 16:37 #31114
manjey73УчастникТак называйте как хотите. Если такое имя будет, у вас произойдет ошибка запуска сервера и в журнале можно будет посмотреть.
Ну и потом посмотреть в строке, на которую ругается непосредственно в файле скриптов.15.02.2024 в 16:41 #31115Algomus
УчастникПонял свою ошибку.
16.02.2024 в 09:39 #31118Michael
УчастникПодскажите, можно ли открыть ссылку скриптом?
Хочу не использовать компонент «ссылка», а динамическому рисунку присвоить канал управления, «отправить команду сразу», а там уже через скрипт открыть указанный url. -
Ответ изменён 2 года, 4 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.