Границы, ноль, пусковой ток

Стартовая страница Форумы Понять, как работает ПО Формулы Границы, ноль, пусковой ток

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

    1. нет возможности задать границы в % от значения. Или есть и я не нашел?
    2. Есть нижняя и верхние границы, при этом 0 = Норма, а пусковой ток надо игнорировать. Канал при этом делится на 10 (Cnl/10)

    Как тут формулу делать. чтобы при 0 не учитывалась граница, то есть статус оставлять норма. И как-то проглотить пусковой ток, так как тоже нормальное явление при включении и не должно влиять на статус по границе

    #37435
    a80808
    Участник

    Может расчетный канал на сглаживание? Или птичка «Усреднение»?

    #37438
    manjey73
    Участник

    Что даст усреднение?
    Ток линии скажем 5А +/- 25% это норма
    0 тоже норма, так как может выключаться.
    А пусковой выше 5+25%

    #37439
    Romiros
    Участник

    Генерировать статус через МАУ с задержкой, наверное. А какие границы стоят?

    #37440
    manjey73
    Участник

    Только хардкор — бесплатная версия 🙂
    границы разные, в зависимости от номинального тока при работе нужно -25% +25%
    (почему и удивился, что нет такой возможности, задать границу в процентах и номинал)

    #37441
    manjey73
    Участник

    Если ячейку границы изменить на текстовую, то
    1. дробное значение можно вводить и как 5.3 и как 5,3
    2. а так же можно вводить 5.3: 10% (то есть номинал минус 10% в случае ячейки Нижняя граница. в общем символ % тут необязателен, просто наличие второго числа
    3. и можно добавить цвет 5.3: 10: orange — например так.

    например если ввод в нижней такой 5.3: #0f0 значит это просто нижняя граница и ее статус цвета зеленый, а если такой в верхней 5.3: 20: red — то 5.3 тут номинал, граница выше на 20% и поменять статус на красный.

    #37456
    manjey73
    Участник

    Пришлось отказаться от штатных границ для такой процедуры и написать скрипт

    // контроль статуса датчиков обогрева - min, max диапазон контроля тока
    // val - значение канала, PT - время реации в тиках 1s = 1000 тиков
    public CnlData CtlStatus(double val, double min, double max, double PT)
    {
    double Q = 0;
    CnlData cdata;
    if (CnlStat > 0)
    {
    if (val == 0)
    {
    cdata = NewData(val, 1);
    TonQ(0, PT, Q);
    }
    else
    {
      if (val < min) { cdata = NewData(val, 12); TonQ(0, PT, Q); }
      else if (val > max)
      {
        if (TonQ(1, PT, Q) > 0) { cdata = NewData(val, 14); }
    // Можно применить 1 или Stat() или 14 но как информацию = 101 статус (созданный)
        else { cdata = NewData(val, 101); }
      }
    else { cdata = NewData(val, 13); TonQ(0, PT, Q); }
    }}
    else {return CnlData; }
    return cdata;
    }

    Формула Таймера для применения внутри других формул. Пришлось кое-что подправить

    // Таймер с задержкой включения TON для внутренних скриптов
    public double TonQ(double IN, double PT, double Q)
    {
    var ut = new UtilTimer() {et = 0L, flag = false, q = false};
    
    long ET = 0L;
    long _pt = Convert.ToInt64(PT);
    bool q = Q > 0;
    bool _in = IN > 0;
    
    if (!TonTimer.ContainsKey(CnlNum))
    {
    TonTimer.Add(CnlNum, ut);
    }
    
    if (!_in)
    {
    TonTimer[CnlNum].q = false;
    TonTimer[CnlNum].flag = false;
    TonTimer[CnlNum].et = 0L;
    }
    else
    {
    if (!TonTimer[CnlNum].flag)
    {
    TonTimer[CnlNum].flag = true;
    TonTimer[CnlNum].et = Ticks();
    }
     else
     {
       if (!q) ET = Ticks() - TonTimer[CnlNum].et;
     }
     if (ET >= _pt) q = true;
     TonTimer[CnlNum].q = q;
    }
    q = TonTimer[CnlNum].q;
    return Convert.ToDouble(q);
    }

    для работы таймера все так же требуются допы для всех таймеров

    // Таймеры МЭК и другие
    public static long Ticks()
    {
    DateTime now = DateTime.Now;
    long time = now.Ticks/10000;
    return time;
    }
    
    protected class UtilTimer
    {
    public long et;
    public bool flag;
    public bool q;
    }
    
    protected Dictionary<int, UtilTimer> TonTimer = new Dictionary<int, UtilTimer>();

    Ну и тут создан номер статуса 101 для показа пускового тока
    Задержка задается в тиках. 1с = 1000 тиков, соответственно 30с это 30000 тиков

    CtlStatus(Cnl, 5.2, 8.62, 30000) пример входной формулы на контроль тока.

    з.ы. не хватает возможности формул в самих границах конечно. типа как реагировать при том или ином статусе с указанием задержек.

    #37457
    manjey73
    Участник

    Извиняюсь, тут 1000 это не тики а миллисекунды.

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

    1. нет возможности задать границы в % от значения. Или есть и я не нашел?

    Штатные границы задаются в виде абсолютного значения.

    2. Есть нижняя и верхние границы, при этом 0 = Норма, а пусковой ток надо игнорировать. Канал при этом делится на 10 (Cnl/10)

    Если нужно игнорировать пусковой ток, то понадобится своя формула, которая будет определять статус канала.

    #37469
    manjey73
    Участник

    ну вот я там и использовал таймер, отображаю значение канала как есть, просто меняю статусы на те, которые требуются.

    Потом на 14-й статус (Превышение) будет формула с таймером, если держится какое-то время то алярм-алярм.
    Задача проигнорировать пусковые токи и временные превышения. Чисто мое предположение, кабель саморегулирующийся, и сперва идет более высокий ток, больше номинала ккое-то время после пуска.

    #37471
    a80808
    Участник

    А вам это нужно для оповещения или и для отображения тоже? А то в МАУ задаете задержку и все…

    #37485
    manjey73
    Участник

    Для отображения. И выше писал — «Только хардкор — бесплатная версия» 🙂

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