Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Подскажите как составить формулу!
- В этой теме 50 ответов, 7 участников, последнее обновление 2 года, 6 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
12.11.2023 в 10:31 #30328
MikhailМодераторА управление хотелось бы сделать от 0 до 100.
В каком смысле?
12.11.2023 в 10:31 #30329
MikhailМодераторА управление хотелось бы сделать от 0 до 100.
В каком смысле?
13.11.2023 в 10:32 #30331Colossal
УчастникМихаил, здравствуйте! Нет, указанная формула применяется в других каналах — где нужно при нажатии уменьшить мощность или увеличить её.
https://ru.paste.pics/42cb8aa0e679b80e4dd85945667c0676При нуле, если снова нажать на клавишу уменьшение, то выходит 255.
А мощность максимальная может быть только 100%
И нужно как-то прописать эти границы, чтобы только от 0 до 100 могли вбивать.
Свойства каналов:
https://ru.paste.pics/ba2d42b18c8cb1a8ef0efec66ccdcce4
https://ru.paste.pics/f087f5958fe3e13abba92826b324693a13.11.2023 в 10:52 #30332Romiros
УчастникМожете, например, добавить в скрипты следующую формулу:
stepCnlNum — номер канала из которого берется размер шага
cnlNum — номер канала, значение которого нужно увеличить или уменьшить
increase — true — увеличить false — уменьшитьpublic double SetStep(int stepCnlNum, int cnlNum, bool increase)
{
double s = (Val(stepCnlNum));
if(increase)
{
double val = Val(cnlNum)<100?Val(cnlNum)+s:100;
return val>100?100:val;
}
else
{
double val = Val(cnlNum)>0?Val(cnlNum)-s:0;
return val<0?0:val;
}
}Использование в канале:
SetStep(156,131, true)Вместо использования номеров каналов можете сразу вписать значения
SetStep(1,CnlNum, true)14.11.2023 в 14:33 #30349Colossal
УчастникЗдравствуйте.
Спасибо большое за ответ.Вместо использования номеров каналов можете сразу вписать значения SetStep(1,CnlNum, true)На самом деле здесь 1 ведь не просто значение будет, а номер канала.
14.11.2023 в 14:38 #30350Romiros
УчастникНу да, так и есть. Можно взять формулу за основу и переделать под себя уже со значениями. Просто хотел идею показать. Это делали для управления диммированием освещения в одном проекте.
14.11.2023 в 16:42 #30351
manjey73УчастникДелал формулу Scaler, там ограничение по мин и макс для выхода. Если подойдет конечно.
Можно ли ее применить к каналу управления не пробовал…
Поищите в теме про формулы, делал еще для 5-й версии правда.14.11.2023 в 16:43 #30352
manjey73УчастникНу и вспомнить опять как показывать ошибку оператору, чтобы другое не вводили 🙂
14.11.2023 в 17:07 #30353Romiros
УчастникНасколько помню, просто:
throw new Exception(«Вводите данные нормально»);14.11.2023 в 17:34 #30354
manjey73УчастникАга, вот рабочий пример по ошибке. Больше для дальнейшего вспоминания 🙂
public double SetEngCommXYE(double cmd) { if (cmd < 16 || cmd > 32) throw new Exception("Значение должно быть в пределах 16 - 32"); byte[] m = new byte[] {0x88, 0x01, (byte)DecToBCD((int)cmd) , 0x00, 0x00, 0x00, 0x00, 0x00 }; double ml = BitConverter.ToDouble(m, 0); SetVal(CnlNum, ml); return ml; }10.12.2023 в 00:47 #30540mr_smit
Участникpublic double GetAlarm(int channel) { double alarm = Val(channel); return alarm; }RS6. Создаю новый канал №139. Делаю его расчетным. Входную формулу пишу GetAlarm(107). Где 107 номер канала откуда взять данные. Назначаю динамическому тексту входной канал 139. Получаю значение 1.000. Хотя в коммуникаторе совершенно другое число в 107 канале. Никак не могу с формулами разобраться. Что откуда.
10.12.2023 в 15:34 #30541mr_smit
УчастникНа 107 канал у меня назначен свой формат перечисления. Потому что если назначить динамическому тексту входной канал 107, то вместо значения я вижу перечисление. А как получить цифру в 139 канал из 107 до перечисления?
10.12.2023 в 15:41 #30542mr_smit
УчастникВ 107-м у меня ещё входная формула Cnl > 0 ? 1 : 0. Вот откуда 1 берется. А как до этой формулы значение из 107-го канала получить?
10.12.2023 в 15:51 #30543mr_smit
Участникdel
11.12.2023 в 09:55 #30546
manjey73УчастникЕще один канал с формулой расчетной.
107 — чистый канал
108 — Val(107) > 0 ? 1 : 0 — его для перечисления
и далее уже 139 ваш с GetAlarm хотя у вас GetAlarm это равен изначальному значению 107 канала из Коммуникатора. -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.