Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Помощь в написании формулы
- В этой теме 15 ответов, 5 участников, последнее обновление 4 года, 10 месяцев назад сделано
Mikhail.
-
АвторЗаписи
-
02.09.2021 в 08:03 #20705
OlegSol
УчастникПросьба ГУРУ толкнуть в правильном направлении.
В дорасчетном канале 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 #20706
manjey73Участник(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 #20708
manjey73УчастникЗначит в одной строке формулой нельзя так сделать…
Подозреваю из-за этого. а так? && вместо одной ?Одна & это оператор то есть логическая «И»
А вам нужно проверка нескольких условий на совпадениеИ возможно вместо знака = надо так же ставить == не помню уже.
02.09.2021 в 11:37 #20712OlegSol
УчастникДа все варианты попробовал и & && и = ==
Видимо да, в одной строке эта простая вещь не катит.
Кто-нить подскажите код для формулы многострочной. плиз02.09.2021 в 13:03 #20713
manjey73УчастникТак в справочник формулу добавьте. Не лучшее решение для сравнения всего и вся, тут универсальности не добиться.
Либо разбивать формулы по каналам.02.09.2021 в 13:07 #20714
manjey73УчастникКак вариант сделать перед скобками 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 #20720
a80808УчастникВот здесь в условии 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 #20725
manjey73УчастникБлин, вроде когда-то делал формулу со скользящим средним.
Можно посмотреть в ней как делал.То есть вам надо каждый цикл? или просто за определенное время ?
03.09.2021 в 12:46 #20726OlegSol
Участникпри каждом получении сигнала от датчиков на канал, получить последнее значение этого канала в другом дорасчетном канале
Val(101) покажет текущее -уже записанное значение и разницы нет -
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.