Ad Widget

Collapse

Не могу составить выражение для триггера

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mschedrin
    Senior Member
    • Jun 2009
    • 179

    #1

    Не могу составить выражение для триггера

    Нужно сравнивать три значения. n - было снято последним, n-1 - предпоследнее, n-2 - соответственно. Сравнить нужно (n-1) с (n-2) и (n) с (n-1)
    Предполагаю что это должно выполняться с помощью выражения item.change(#2). Правда, не очень понятно какие значения будет сравнивать такой триггер?
  • noname
    Senior Member
    • Jan 2008
    • 120

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

    Есть такая функция, как я выяснил из чтения документации, как sum(#num) - сумма последних num значений. Легко сообразить, что:
    n = sum(#1);
    n - 1 = sum(#2) - sum(#1);
    n - 2 = sum(#3) - sum(#2);

    Соответственно, объекты для сравнения есть и задача решена.

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

    Comment

    • mschedrin
      Senior Member
      • Jun 2009
      • 179

      #3
      Спасибо за подсказку, такой вариант мне подойдет. В результате нарисовал такой expression:
      {T_Zyxel:ifInErrors.1. sum( #3 ) }-{T_Zyxel:ifInErrors.1. sum( #2 ) }>300 & {T_Zyxel:ifInErrors.1. change( ) }>300

      Суть в том что триггер должен срабатывать, тогда, когда ошибки на порту свитча изменялись больше чем на 300 минимум два раза подряд. По идее должно работать теперь.

      Comment

      • noname
        Senior Member
        • Jan 2008
        • 120

        #4
        Эмм.. у тебя первая часть выражения означает, что предпредпоследнее значение больше, чем 300. Правильней тогда так:

        предпредпоследнее - последнее > 300
        (sum(#3) - sum(#2)) - (sum(#2) - sum(#1)) > 300

        Comment

        • mschedrin
          Senior Member
          • Jun 2009
          • 179

          #5
          мне как раз нужно (предпоследнее - последнее)>300 и (предпредпоследнее - предпоследнее)>300.

          Со скобочками немного ошибся, должно быть так:
          ({T_Dlink3028:ifInErrors.26.sum( #3 ) }-{T_Dlink3028:ifInErrors.26.sum( #2 ) })>300 & {T_Dlink3028:ifInErrors.26.change( ) }>300

          Comment

          • noname
            Senior Member
            • Jan 2008
            • 120

            #6
            По-моему, ты сейчас ошибаешься =))) То что тебе надо описано в моей схеме. Твоя сейчас соответствует:

            предпредпоследнее > 300

            К примеру, пусть последние 3 значения такие: 300 700 900, тогда:
            sum(#3) = 1900
            sum(#2) = 1600
            sum(#1) = 900

            Предпредпоследнее (которое 300) = sum(#3) - sum(#2)
            Предпоследнее (которое 700) = sum(#2) - sum(#1)

            Выражаясь, твоими триггерами, первое условие будет:
            ({T_Dlink3028:ifInErrors.26.sum( #3 ) }-{T_Dlink3028:ifInErrors.26.sum( #2 ) }) - ({T_Dlink3028:ifInErrors.26.sum( #2 ) }-{T_Dlink3028:ifInErrors.26.sum( #1 ) }) > 300
            Last edited by noname; 09-07-2009, 07:52.

            Comment

            Working...