Значения при обрыве датчика

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

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

    Доброго времени суток. Может подскажите, как избавиться от 18-ти значных непонятных значений температуры при обрыве датчике? Тоесть хотелось бы, что бы на мнемосхеме при обрыве отображалась или какая то надпись, по типу «Обрыв», или «Ошибка», или просто «-=-«, а не эти немонятные миллиардные значения. Заранее спасибо

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

    Добрый день!
    О каком протоколе связи идёт речь? Нужно больше подробностей.

    #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;
    на мнемосхеме сделать следующее условие
    Динамическое изображение и добавить условие при каком значении данного канала выдавать ту или иную картинку.

    #3533
    Danila_Razlivanov
    Участник

    Протокол связи modbus, 4-х байтный тип, float

    #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.
    #3548
    Danila_Razlivanov
    Участник

    Мужики, огромное спасибо! Сработало оба варианта, остановились на варианте Михаила, т.к. показался более простым. И подскажите, пожалуйста, еще, почему значения именно -100000 и 100000?
    Опять же, спасибо!!!

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

    Рад что всё получилось. 10000 взято как некое больше число. Можете заменить 10000 на верхний и нижний предел, которые возможны в Вашей системе.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Для ответа в этой теме необходимо авторизоваться.