Передать значение канала другому каналу

Стартовая страница Форумы Понять, как работает ПО Использование формул Передать значение канала другому каналу

  • В этой теме 17 ответов, 4 участника, последнее обновление 3 года назад сделано evg.
Просмотр 15 сообщений - с 1 по 15 (из 18 всего)
  • Автор
    Сообщения
  • #19166
    evg
    Участник

    Всем привет. Помогите пожалуйста с формулой. Есть такая задачка, сделать так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0.

    #19167
    manjey73
    Участник

    ниче не понятно 🙂
    401 это номер канала ?

    ааа, вам два условия надо? если 110-й = 0 и при этом 101 > 0 только тогда передать значение 101-го в 401 ?

    Надо формулу в 401-м писать и проверять эти два канала

    Или модулем Автоуправления будет наверное проще

    • Этот ответ был изменен 3 года назад от manjey73.
    #19169
    evg
    Участник

    ааа, вам два условия надо? если 110-й = 0 и при этом 101 > 0 только тогда передать значение 101-го в 401 ?

    Да именно так.

    Надо формулу в 401-м писать и проверять эти два канала

    Да во входной канал я так понимаю. Есть и модуль автоуправления, но как через него выполнить данное условие незнаю. У меня есть кое-какие заготовки на формулы, но они не срабатывают должным образом. Пробую разобраться.

    #19170
    Romiros
    Участник

    Откуда 401 взялся, если был 101?
    Примерно так
    В формуле 101 канала:
    (Val()>0 && Val(110)==0)?Val(201):Val()

    • Этот ответ был изменен 3 года назад от Romiros.
    #19174
    manjey73
    Участник

    Romiros, 401 это новый канал, который по состоянию двух других каналов должен брать значение из 101-ого иначе оставаться как есть.

    Скорее в 401-м надо типа того

    (Val(110) == 0 && Val(101) > 0) ? Val(101) : Val()

    #19175
    Romiros
    Участник

    Ну новый так новый. Видимо у вас телепатические способности 🙂

    Всем привет. Помогите пожалуйста с формулой. Есть такая задачка, сделать так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0.

    #19179
    manjey73
    Участник

    А блин, это я его 401-м обозвал вместо 201-го 🙂

    Смысл в том, что если мы делаем формулу в канале 101 (начальном канале), мы то можем записать в нем в другой какой-то канал, но ведь формула еще должна вернуть в канал самое себя же? А это не логично.

    По этому формула должна быть в том канале, в котором и требуется получение значения, не зависимо, сколько мы там каналов будем проверять и на какие значения.

    • Этот ответ был изменен 3 года назад от manjey73.
    #19181
    Romiros
    Участник

    А это не логично.

    Зависит от задачи. Может тут даже нужно использовать Cnl, а не Val.

    #19182
    evg
    Участник

    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;
    }

    Но не работает. Чую что как-то по другому нужно её записать, но нехватает знания и понимания.

    #19183
    manjey73
    Участник

    Romiros любая формула в канале возвращает значение в этот канал.

    Что вернется в канал X, если в формуле прописать SetVal(Канал Y, значение) ? надо потестить…

    а что будет при условии тогда (проверка)? SetVal(Y, значение) : а тут что, чтобы другой канал не менялся ????

    • Этот ответ был изменен 3 года назад от manjey73.
    • Этот ответ был изменен 3 года назад от manjey73.
    #19184
    manjey73
    Участник

    evg мы уже это проходили на картах, не?

    Только там надо изменить формулу, чтобы все было например дабловское только сделать пару — канал, значение

    Объемные скорее всего не примутся компилятором формул, он ведь выдавал ошибку ?

    #19187
    Romiros
    Участник

    Что вернется в канал X, если в формуле прописать SetVal(Канал Y) ? надо потестить…

    Я думаю будет ошибка. Если вы объявляете формулу как функцию double, а не void , то должен быть return — это стандартный c#

    #19188
    manjey73
    Участник

    Надо смотреть, можно ли объемную строку свести к минимуму и создать универсальную формулу, если можно, то лучше пойти по данному пути.

    #19189
    Romiros
    Участник

    Но не работает. Чую что как-то по другому нужно её записать, но нехватает знания и понимания.

    Не работает — это слишком растяжимо. Выдает ошибку или не то, что Вы ожидаете? Может у Вас условия совпадают и переписывают друг друга. Важен порядок каналов от меньшего к большему. Напишите подробнее, думаю совместно решим. А лучше опишите прикладную задачу, что нужно сделать.

    #19192
    Mikhail
    Модератор

    Добрый день!

    так чтобы 101 канал был = 201 каналу; при условии если значение 101 канала будет больше 0, а 110 канал = 0

    Формула для канала 101:
    Val() > 0 && Val(110) == 0 ? Val(201) : Val()

    Как-то так. Канал 101 должен иметь дорасчётный тип.
    По причине того, что канал 101 ссылается сам на себя, могут быть побочные эффекты.
    Желательно усложнить формулу, чтобы проверять ещё статус каналов.

Просмотр 15 сообщений - с 1 по 15 (из 18 всего)
  • Вы должны авторизироваться для ответа в этой теме.