Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Передать значение канала другому каналу
- В этой теме 17 ответов, 4 участника, последнее обновление 3 года назад сделано evg.
-
АвторСообщения
-
21.04.2021 в 10:42 #19166evgУчастник
Всем привет. Помогите пожалуйста с формулой. Есть такая задачка, сделать так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0.
21.04.2021 в 10:47 #19167manjey73Участникниче не понятно 🙂
401 это номер канала ?ааа, вам два условия надо? если 110-й = 0 и при этом 101 > 0 только тогда передать значение 101-го в 401 ?
Надо формулу в 401-м писать и проверять эти два канала
Или модулем Автоуправления будет наверное проще
- Этот ответ был изменен 3 года назад от manjey73.
21.04.2021 в 11:11 #19169evgУчастникааа, вам два условия надо? если 110-й = 0 и при этом 101 > 0 только тогда передать значение 101-го в 401 ?
Да именно так.
Надо формулу в 401-м писать и проверять эти два канала
Да во входной канал я так понимаю. Есть и модуль автоуправления, но как через него выполнить данное условие незнаю. У меня есть кое-какие заготовки на формулы, но они не срабатывают должным образом. Пробую разобраться.
21.04.2021 в 11:23 #19170RomirosУчастникОткуда 401 взялся, если был 101?
Примерно так
В формуле 101 канала:
(Val()>0 && Val(110)==0)?Val(201):Val()- Этот ответ был изменен 3 года назад от Romiros.
21.04.2021 в 11:50 #19174manjey73УчастникRomiros, 401 это новый канал, который по состоянию двух других каналов должен брать значение из 101-ого иначе оставаться как есть.
Скорее в 401-м надо типа того
(Val(110) == 0 && Val(101) > 0) ? Val(101) : Val()
21.04.2021 в 13:30 #19175RomirosУчастникНу новый так новый. Видимо у вас телепатические способности 🙂
Всем привет. Помогите пожалуйста с формулой. Есть такая задачка, сделать так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0.
21.04.2021 в 14:37 #19179manjey73УчастникА блин, это я его 401-м обозвал вместо 201-го 🙂
Смысл в том, что если мы делаем формулу в канале 101 (начальном канале), мы то можем записать в нем в другой какой-то канал, но ведь формула еще должна вернуть в канал самое себя же? А это не логично.
По этому формула должна быть в том канале, в котором и требуется получение значения, не зависимо, сколько мы там каналов будем проверять и на какие значения.
- Этот ответ был изменен 3 года назад от manjey73.
21.04.2021 в 15:34 #19181RomirosУчастникА это не логично.
Зависит от задачи. Может тут даже нужно использовать Cnl, а не Val.
21.04.2021 в 16:34 #19182evgУчастникRomiros, там был 401 канал в сообщении, я через минуту сменил на 201. Изивините не правильно расписал, впредь постараюсь правильно рассписывать, я ценю вашу помощь и время которое вы уделяете. Имелось ввиду как раз то что описал «manjey73» =) Manjey73 cпасибо это сработало.
(Val(110) == 0 && Val(101) > 0) ? Val(101) : Val()
А вот как сделать прописную формулу? У меня предполагается, что значений с условием будет не 2, а 6 и возможно даже больше. Т.е.
(Val(110) == 0 && Val(101) > 0) ? Val(101) : Val() ИЛИ (Val(120) == 0 && Val(131) > 0) ? Val(131) : Val() ИЛИ (Val(140) == 0 && Val(151) > 0) ? Val(131) : Val()
— объемную стркоу не могу записать во входной канал. Изначально пробывал такой вот формулой сделать:
public double _ValChance(int ValZ1, int ValS1, int ValZ2, int ValS2, int ValZ3, int ValS3)
{
double valueCh = 0;
if(ValS1 == 0 && ValZ1 > 0)
{
valueCh = ValZ1;
}
if(ValS2 == 0 && ValZ2 > 0)
{
valueCh = ValZ2;
}
if(ValS3 == 0 && ValZ3 > 0)
{
valueCh = ValZ3;
}
return valueCh;
}Но не работает. Чую что как-то по другому нужно её записать, но нехватает знания и понимания.
21.04.2021 в 17:20 #19183manjey73УчастникRomiros любая формула в канале возвращает значение в этот канал.
Что вернется в канал X, если в формуле прописать SetVal(Канал Y, значение) ? надо потестить…
а что будет при условии тогда (проверка)? SetVal(Y, значение) : а тут что, чтобы другой канал не менялся ????
21.04.2021 в 17:23 #19184manjey73Участникevg мы уже это проходили на картах, не?
Только там надо изменить формулу, чтобы все было например дабловское только сделать пару — канал, значение
Объемные скорее всего не примутся компилятором формул, он ведь выдавал ошибку ?
21.04.2021 в 17:24 #19187RomirosУчастникЧто вернется в канал X, если в формуле прописать SetVal(Канал Y) ? надо потестить…
Я думаю будет ошибка. Если вы объявляете формулу как функцию double, а не void , то должен быть return — это стандартный c#
21.04.2021 в 17:26 #19188manjey73УчастникНадо смотреть, можно ли объемную строку свести к минимуму и создать универсальную формулу, если можно, то лучше пойти по данному пути.
21.04.2021 в 17:28 #19189RomirosУчастникНо не работает. Чую что как-то по другому нужно её записать, но нехватает знания и понимания.
Не работает — это слишком растяжимо. Выдает ошибку или не то, что Вы ожидаете? Может у Вас условия совпадают и переписывают друг друга. Важен порядок каналов от меньшего к большему. Напишите подробнее, думаю совместно решим. А лучше опишите прикладную задачу, что нужно сделать.
21.04.2021 в 17:35 #19192MikhailМодераторДобрый день!
так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0
Формула для канала 101:
Val() > 0 && Val(110) == 0 ? Val(201) : Val()
Как-то так. Канал 101 должен иметь дорасчётный тип.
По причине того, что канал 101 ссылается сам на себя, могут быть побочные эффекты.
Желательно усложнить формулу, чтобы проверять ещё статус каналов. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.