Помощь в написании формулы

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #20705
    OlegSol
    Участник

    Просьба ГУРУ толкнуть в правильном направлении.
    В дорасчетном канале 119 хочется видеть 0 по условию.
    Написал Val(103)-Val(105)>0.4 & Val(109)=1 & Val(104)<Val(105) ? SetVal(119, 0):SetVal(119, 1)
    Не пашет.
    Что не так?

    #20706
    manjey73
    Участник

    (Val(103)-Val(105)>0.4 & Val(109)=1 & Val(104)<Val(105)) ? SetVal(119, 0):SetVal(119, 1)

    Может дополнительных скобок не хватает ?

    #20707
    OlegSol
    Участник

    Не помогло

    Строка 573, колонка 58: error CS0019: Оператор «&» не может применяться к операндам типа «bool» и «double»
    Строка 573, колонка 91: error CS0019: Оператор «&» не может применяться к операндам типа «int» и «bool»

    #20708
    manjey73
    Участник

    Значит в одной строке формулой нельзя так сделать…
    Подозреваю из-за этого. а так? && вместо одной ?

    Одна & это оператор то есть логическая «И»
    А вам нужно проверка нескольких условий на совпадение

    И возможно вместо знака = надо так же ставить == не помню уже.

    • Этот ответ был изменен 3 недели, 2 дня назад от manjey73.
    • Этот ответ был изменен 3 недели, 2 дня назад от manjey73.
    • Этот ответ был изменен 3 недели, 2 дня назад от manjey73.
    #20712
    OlegSol
    Участник

    Да все варианты попробовал и & && и = ==
    Видимо да, в одной строке эта простая вещь не катит.
    Кто-нить подскажите код для формулы многострочной. плиз

    #20713
    manjey73
    Участник

    Так в справочник формулу добавьте. Не лучшее решение для сравнения всего и вся, тут универсальности не добиться.
    Либо разбивать формулы по каналам.

    #20714
    manjey73
    Участник

    Как вариант сделать перед скобками Convert.ToBool(тут все сравнения) ? выполнения по уссловиям

    #20715
    OlegSol
    Участник

    Решение найдено

    public double MyFunc4()
    {
    if(Val(103)-Val(105)>0.4)
    {
    if (Val(109)==1)
    {
    if (Val(104)<Val(105))
    {
    return 1; //Нет
    }
    }
    }
    return 0; // Есть
    }

    #20720
    a80808a80808
    Участник

    Вот здесь в условии IF можно как раз все объединить, проще будет формула:
    public double MyFunc4()
    {
    if(Val(103)-Val(105)>0.4) && (Val(109)==1) && (Val(104)<Val(105))
    {
    return 1; //Нет
    else
    }
    return 0; // Есть
    }

    #20721
    OlegSol
    Участник

    Спасибо.
    Подскажите, кто может: как сравнить текущее значение канала с предыдущим?

    #20722
    Romiros
    Участник

    По разному можно. Если канал ТИ, то можно использовать Cnl — это значение канала до расчета по формуле, и Val() — значение канала после расчета по формуле.
    Например в формуле канала:
    Cnl>Val()?Cnl:Val()

    Другой способ создать доп канал минутный ТИ туда будут заноситься значения раз в минуту и сравнивать его со значениями канала ТИ.

    #20723
    OlegSol
    Участник

    Мне нужно в виртуальном канале вычислить старое значение другого ТИ канала с данными
    Cnl>Val()?Cnl:Val() не проканает ))
    Минутный — ДА, но минуты много

    #20724
    Romiros
    Участник

    Попробуйте использовать Val() и Val(номер ТИ)

    #20725
    manjey73
    Участник

    Блин, вроде когда-то делал формулу со скользящим средним.
    Можно посмотреть в ней как делал.

    То есть вам надо каждый цикл? или просто за определенное время ?

    #20726
    OlegSol
    Участник

    при каждом получении сигнала от датчиков на канал, получить последнее значение этого канала в другом дорасчетном канале
    Val(101) покажет текущее -уже записанное значение и разницы нет

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