Стартовая страница › Форумы › Понять, как работает ПО › Значения при обрыве датчика
- В этой теме 6 ответов, 3 участника, последнее обновление 9 лет, 6 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
11.11.2016 в 17:15 #3520
Danila_Razlivanov
УчастникДоброго времени суток. Может подскажите, как избавиться от 18-ти значных непонятных значений температуры при обрыве датчике? Тоесть хотелось бы, что бы на мнемосхеме при обрыве отображалась или какая то надпись, по типу «Обрыв», или «Ошибка», или просто «-=-«, а не эти немонятные миллиардные значения. Заранее спасибо
11.11.2016 в 20:20 #3521
MikhailМодераторДобрый день!
О каком протоколе связи идёт речь? Нужно больше подробностей.14.11.2016 в 09:30 #3532
EvgenУчастникЗдравствуйте!
У меня была похожая проблема.
У нас за сутки несколько раз в разное время отваливается датчик тока на некоторых агрегатах, что приводит в бесконечно большому отрицательному значению. Соответственно при токе в 30 ампер на графике прямая линия с провалом и нет четких показаний
Решение следующее
Создал 2 канала связи
1- Телеизмерения получает данные с канала связи( с обрывами и соответственно минусом)
2- Дорасчетный где использую следующую формулу
public double withoutMinus(int dependOnCnl)
{
double z = 0;
if (Val(dependOnCnl) < 0)
{
z = z;}
else
{
z = Val(dependOnCnl);
}
return z;
}В вашем случае я бы Z сделал Bool, условие
if (Val(dependOnCnl) < 0)
{
z = z;
}
return z;
на мнемосхеме сделать следующее условие
Динамическое изображение и добавить условие при каком значении данного канала выдавать ту или иную картинку.14.11.2016 в 10:15 #3533Danila_Razlivanov
УчастникПротокол связи modbus, 4-х байтный тип, float
14.11.2016 в 12:43 #3535
MikhailМодераторМожно либо как написал Evgen, либо отсечь некорректные значения сразу в существующем входном канале с помощью формулы.
Во 2-м случае:
1. В таблице Формулы добавьте записьconst double MinVal = -100000; const double MaxVax = 100000; double CorrVal() { return MinVal <= Cnl && Cnl <= MaxVal ? Cnl : 0; } int CorrStat() { return MinVal <= Cnl && Cnl <= MaxVal ? CnlStat : 0; }2. В таблице Входные каналы для соответствующих каналов используйте формулу
CorrVal();CorrStat()P.S. Формулы в форуме я не тестирую. Если что-то не заработает, постарайтесь найти ошибку сами, если не получится, тогда спрашивайте.
-
Ответ изменён 9 лет, 6 месяцев назад пользователем
Mikhail.
14.11.2016 в 18:08 #3548Danila_Razlivanov
УчастникМужики, огромное спасибо! Сработало оба варианта, остановились на варианте Михаила, т.к. показался более простым. И подскажите, пожалуйста, еще, почему значения именно -100000 и 100000?
Опять же, спасибо!!!15.11.2016 в 14:22 #3553
MikhailМодераторРад что всё получилось. 10000 взято как некое больше число. Можете заменить 10000 на верхний и нижний предел, которые возможны в Вашей системе.
-
Ответ изменён 9 лет, 6 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.