влияние исчезновения связи на значение дорасчетного канала

Стартовая страница Форумы Разработка и интеграция влияние исчезновения связи на значение дорасчетного канала

Просмотр 15 сообщений - с 1 по 15 (из 30 всего)
  • Автор
    Записи
  • #8786
    a93911
    Участник

    Здравствуйте. У меня дорасчетный канал используется для получения значения отдельного бита из слова другого канала функцией GetBit(). Так вот, если бит установлен, даже при кратковременном исчезновении связи генерируется событие дорасчетного канала, то есть вычисляемое значение меняется с 1 на 0. Наверное, нужно доработать функцию GetBit()

    public double GetBit(double val, int n)
    {
    UInt64 uintVal = (UInt64)val;
    return (uintVal >> n) & 1;
    }

    Подскажите решение

    #8787
    manjey73
    Участник

    Вопрос для чего это необходимо ? Можно использовать дополнительный канал с таймером TOF от дребезга.
    GetBit тут как бы и ни при чем, он свою функцию выполняет правильно.

    • Ответ изменён 8 лет, 4 месяца назад пользователем manjey73.
    #8789
    a93911
    Участник

    Приведите пожалуйста пример использования таймера TOF (в функции)

    #8791
    manjey73
    Участник

    Если вы ловите 0 для сообщения об ошибке то просто примените таймер на отключение.
    Например в 5 канале у вас GetBit на нужный бит переменной
    в 6 канале используете в формуле Tof(Val(5), 5000) — 5 секунд и отслеживаете для контроля ошибки уже 6-ой канал.
    для работы Tof еще нужна формула Ticks.

    Простая защита от дребезга. Время задается в миллисекундах.
    Формула Ticks

    public static long Ticks()
    {
    DateTime now = DateTime.Now;
    long time = now.Ticks/10000;
    return time;
    }

    Формула Tof

    int[] TofNum = new int[1];
    long[] TofST = new long[1];
    bool[] TofFlag = new bool[1];
    public double Tof(double TofIn, double TofPT)
    {
    long ET = 0L;
    long tof_pt = Convert.ToInt64(TofPT);
    bool q = Val(CnlNum) > 0;
    bool tof_in = TofIn > 0;
    
    int res = Array.IndexOf(TofNum, CnlNum);
    if (res == -1)
    {
    res = TofNum.Length;
    Array.Resize(ref TofNum,  res+1);
    Array.Resize(ref TofST,   res+1);
    Array.Resize(ref TofFlag, res+1);
    TofNum[res] = CnlNum;
    }
    
    if (tof_in)
    {
    q = true;
    TofFlag[res] = true;
    TofST[res] = 0L;
    ET = 0L;
    }
    else
    {
    if (TofFlag[res])
    {
    TofFlag[res] = false;
    TofST[res] = Ticks();
    ET = 0L;
    }
     else
     {
       if (q) ET = Ticks() - TofST[res];
     }
     if (ET >= tof_pt) q = false;
    }
    return Convert.ToDouble(q);
    }

    Надеюсь при выкладывании в виде кода web не добавит ошибок в формулы.

    #8792
    manjey73
    Участник

    Кстати можно попробовать записать так в одном канале.
    Tof(GetBit(Val(xxx),3),10000) если не ошибся со скобками…

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

    Попробуйте такую формулу: GetBit(Val(1), 0); Stat(1)
    То есть статус канала будет не определён при пропадании исходного канала

    #9054
    a93911
    Участник

    Доработал Getbit. Сейчас после исчезновения связи сохраняется старое значение пока связь не будет восстановлена

    public double Getbit_2(int nCnl, int n)
    {
    UInt64 uintVal = (UInt64)Val(nCnl);
    UInt64 temp = (UInt64)Cnl;
    if (Stat(nCnl)!=0) temp = ((uintVal >> n) & 1);
    return temp;
    }

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

    Спасибо.
    Не введет ли такой подход оператора в заблуждение?

    #9067
    a93911
    Участник

    Сделал по аналогии с панелями оператора Samkoon. При исчезновении связи последние параметры фиксируются, при этом выдается сообщение об отсутствии связи. Себе на представление хочу добавить мигающую пиктограмму «Нет связи». Плюс отображаемые каналы телеизмерения будут принимать неопределенное состояние (прочерки).
    Думаю, всё таки такой подход повышает надежность реагирования персонала на возникновение аварийной ситуации. Ведь даже в случае обрыва связи в системе будет сохраняться аварийный сигнал, привязанный к звуковой сигнализации. Можно в принципе позволить вручную квитировать данный сигнал в скаде

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

    При условии, когда будет явно видно, что связь оборвалась, последние доступные значения действительно могут быть полезны. Зависит от той сферы, которая автоматизируется.

    #9865
    ValeraMar
    Участник

    У меня обратная проблема, при обрыве датчика, коммуникатор продолжает писать последнее значение. Хотя на приборе (ТРМ, прочерки) обрыв показывает. С чем связано не пойму.

    #9866
    manjey73
    Участник

    ValeraMar Возможно сам ТРМ передает из регистра последнее значение, а ошибку он может передавать в другом регистре. Посмотрите документацию на прибор.

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

    Надо проверить, что при обрыве связи в журнале линии связи и на странице Данные КП.

    #9895
    ValeraMar
    Участник

    При обрыве нет никаких изменений в логе, пробовал статус вывести не выходит, настройки прибора разбирал, вроде все норм.

    • Ответ изменён 8 лет, 1 месяц назад пользователем Mikhail.
    #9896
    ValeraMar
    Участник

    Во время обрыва датчика

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