Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Помощь в написании формулы
- В этой теме 15 ответов, 5 участников, последнее обновление 2 года, 7 месяцев назад сделано Mikhail.
-
АвторСообщения
-
02.09.2021 в 08:03 #20705OlegSolУчастник
Просьба ГУРУ толкнуть в правильном направлении.
В дорасчетном канале 119 хочется видеть 0 по условию.
Написал Val(103)-Val(105)>0.4 & Val(109)=1 & Val(104)<Val(105) ? SetVal(119, 0):SetVal(119, 1)
Не пашет.
Что не так?02.09.2021 в 09:26 #20706manjey73Участник(Val(103)-Val(105)>0.4 & Val(109)=1 & Val(104)<Val(105)) ? SetVal(119, 0):SetVal(119, 1)
Может дополнительных скобок не хватает ?
02.09.2021 в 09:55 #20707OlegSolУчастникНе помогло
Строка 573, колонка 58: error CS0019: Оператор «&» не может применяться к операндам типа «bool» и «double»
Строка 573, колонка 91: error CS0019: Оператор «&» не может применяться к операндам типа «int» и «bool»02.09.2021 в 11:29 #20708manjey73УчастникЗначит в одной строке формулой нельзя так сделать…
Подозреваю из-за этого. а так? && вместо одной ?Одна & это оператор то есть логическая «И»
А вам нужно проверка нескольких условий на совпадениеИ возможно вместо знака = надо так же ставить == не помню уже.
02.09.2021 в 11:37 #20712OlegSolУчастникДа все варианты попробовал и & && и = ==
Видимо да, в одной строке эта простая вещь не катит.
Кто-нить подскажите код для формулы многострочной. плиз02.09.2021 в 13:03 #20713manjey73УчастникТак в справочник формулу добавьте. Не лучшее решение для сравнения всего и вся, тут универсальности не добиться.
Либо разбивать формулы по каналам.02.09.2021 в 13:07 #20714manjey73УчастникКак вариант сделать перед скобками Convert.ToBool(тут все сравнения) ? выполнения по уссловиям
02.09.2021 в 13:24 #20715OlegSolУчастникРешение найдено
public double MyFunc4()
{
if(Val(103)-Val(105)>0.4)
{
if (Val(109)==1)
{
if (Val(104)<Val(105))
{
return 1; //Нет
}
}
}
return 0; // Есть
}02.09.2021 в 21:32 #20720a80808УчастникВот здесь в условии IF можно как раз все объединить, проще будет формула:
public double MyFunc4()
{
if(Val(103)-Val(105)>0.4) && (Val(109)==1) && (Val(104)<Val(105))
{
return 1; //Нет
else
}
return 0; // Есть
}03.09.2021 в 09:46 #20721OlegSolУчастникСпасибо.
Подскажите, кто может: как сравнить текущее значение канала с предыдущим?03.09.2021 в 10:52 #20722RomirosУчастникПо разному можно. Если канал ТИ, то можно использовать Cnl — это значение канала до расчета по формуле, и Val() — значение канала после расчета по формуле.
Например в формуле канала:
Cnl>Val()?Cnl:Val()Другой способ создать доп канал минутный ТИ туда будут заноситься значения раз в минуту и сравнивать его со значениями канала ТИ.
03.09.2021 в 11:44 #20723OlegSolУчастникМне нужно в виртуальном канале вычислить старое значение другого ТИ канала с данными
Cnl>Val()?Cnl:Val() не проканает ))
Минутный — ДА, но минуты много03.09.2021 в 11:53 #20724RomirosУчастникПопробуйте использовать Val() и Val(номер ТИ)
03.09.2021 в 11:55 #20725manjey73УчастникБлин, вроде когда-то делал формулу со скользящим средним.
Можно посмотреть в ней как делал.То есть вам надо каждый цикл? или просто за определенное время ?
03.09.2021 в 12:46 #20726OlegSolУчастникпри каждом получении сигнала от датчиков на канал, получить последнее значение этого канала в другом дорасчетном канале
Val(101) покажет текущее -уже записанное значение и разницы нет -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.