Объявление

Свернуть
Пока нет объявлений.

Вызов списка активных тревог в программу из менеджера тревог

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Вызов списка активных тревог в программу из менеджера тревог

    Здравствуйте!
    Извините, могли бы вы помочь? я сейчас осваиваю Codesys 3.5, используя АГАВА ПЛК-40.
    Нужно передать из «менеджера тревог» в программу список и количество активных тревог.

    Знаю, что в библиотеке «AlarmManager» (связанной с «Менеджером тревог») есть метод GetActiveAlarm, позволяющий сделать это, однако ему нужно передать переменную типа IAlarmManagerClient на вход itfAlarmManagerClient.

    В примере от 3S (package примера взял у вас на сайте) в PLC_PRG (прикрепленная картинка «PLC_PRG из примера_1») используется экземпляр instAlarmManagerClient функционального блока AlarmManagerClient (прикрепленная картинка «Функциональный блок AlarmManagerClient») внутри которого объявлена переменная m_itfAlarmManagerClient типа IAlarmManagerClient с начальным значением THIS^(в руководстве не нашел что это такое).
    Переменная m_itfAlarmManagerClient аналогично используется внутри метода ActiveAlarmsChanged этого же функционального блока (прикрепленная картинка «метод AlarmManagerClient.ActiveAlarmsChanged»).

    В моей программе объявил внутри одного из функциональных блоков аналогичную переменную m_itfAlarmManagerClient типа IAlarmManagerClient с начальным значением THIS^ (прикрепленная картинка «Проблема в моей программе»), которую я использую в качестве входной для метода GetActiveAlarms, аналогично примеру от 3S. Однако при компиляции в моей программе появляется сообщение от ошибке «Невозможно конвертировать тип ‘ERRORS’ в тип ‘IAlarmManagerClient’.

    Можете подсказать как исправить данную ошибку или к какой подобной переменной в менеджере (или конфигураторе) тревог обращаться для правильной работы с методом GetActiveAlarms?

  • #2
    В примере от 3S показано как это сделать, на форме выводится количество активных тревог. Посмотрите внимательней

    Комментарий


    • #3
      Посмотрел. Там так же используется метод с переменной itfAlarmManagerClient, которой присвоено начальное значение переменной instAlarmManagerClient функционального блока AlarmManagerClient, внутри которого объявлена переменная m_itfAlarmManagerClient типа IAlarmManagerClient с начальным значением THIS^.

      Извините, я просто понять не могу, почему у меня не получается использовать напрямую запись :
      определение переменной:"m_itfAlarmManagerClient: IAlarmManagerClient:=THIS^;
      iCountActiveAlarms: INT;"
      программа: "AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAl armManagerClient:=m_itfAlarmManagerClient, iCountActiveAlarms=>iCountActiveAlarms);"
      Последний раз редактировалось Никадим; 03-12-2020, 02:59 PM.

      Комментарий


      • #4
        Сообщение от Никадим Посмотреть сообщение
        Посмотрел. Там так же используется метод с переменной itfAlarmManagerClient, которой присвоено начальное значение переменной instAlarmManagerClient функционального блока AlarmManagerClient, внутри которого объявлена переменная m_itfAlarmManagerClient типа IAlarmManagerClient с начальным значением THIS^.

        Извините, я просто понять не могу, почему у меня не получается использовать напрямую запись :
        определение переменной:"m_itfAlarmManagerClient: IAlarmManagerClient:=THIS^;
        iCountActiveAlarms: INT;"
        программа: "AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAl armManagerClient:=m_itfAlarmManagerClient, iCountActiveAlarms=>iCountActiveAlarms);"
        THIS - это специальная переменная, которая используется в объектно-ориентированном программировании.

        THIS - это указатель функционального блока на свой собственный экземпляр.

        Реализация FB должна быть такой:


        function_block TAlarmCount
        var
        instAlarmManagerClientAll : AlarmManagerClient;
        instAlarmFilterCriteriaAll : AlarmFilterCriteria;
        iCountActiveAlarmsAll : int;
        udiResult : udint;
        end_var
        var_input
        itfAlarmManagerClientAll : IAlarmManagerClient := instAlarmManagerClientAll;
        arritfAlarmsFromHistoryAll : array [0 .. iMaxCountAlarmsFromHistoryAll - 1] of IAlarm2;
        end_var
        var constant
        iMaxCountAlarmsFromHistoryAll : int := 9;
        end_var

        instAlarmManagerClientAll.m_itfAlarmFilterCriteria := instAlarmFilterCriteriaAll;
        udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlar mManagerClientAll, ADR(arritfAlarmsFromHistoryAll), iMaxCountAlarmsFromHistoryAll);

        // Polling the number of active alarms
        AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAla rmManagerClientAll, iCountActiveAlarms => iCountActiveAlarmsAll);

        Комментарий


        • #5
          Здравствуйте!
          Спасибо большое за помощь!

          Единственное остается не понятно: почему нужно вводить столько дополнительных переменных и ,в частности, функции

          Сообщение от Пушкарев Андрей Посмотреть сообщение
          instAlarmManagerClientAll : AlarmManagerClient;
          instAlarmFilterCriteriaAll : AlarmFilterCriteria;


          если в программу вставляется "Конфигуратор тревог" с библиотекой "AlarmManager"?

          Мне казалось если в программу вставлен "Конфигуратор тревог", который использует библиотеку "AlarmManager", то все переменные, функции и методы, которые мы объявляем в своих функциональных блоках уже существуют (объявлены и используются) в программе, и нам надо знать только их название. Или я ошибаюсь в логике рассуждений?

          P.S. Где можно узнать список визуальных компонентов и их функций, которые не работают с программах Codesys 3.5 на ПЛК-40? Просто выяснять опытным путем слишком долго.
          Из не работающих элементов пока обнаружены 2 шт:
          1. Скругленный прямоугольник (группа "Базовый"). При работе в ПЛК преобразуется в обычный прямоугольник.
          2. При использовании функции "Параметры переменной" в элементе "Тренд" (группа "Специальные элементы управления") при работе ПЛК выдает ошибку "место на диске не определено"

          Комментарий


          • Пушкарев Андрей
            Пушкарев Андрей комментирует:
            Редактировать комментарий
            Прямоугольник не однократно использовался работал правильно и отображался правильно.
            По трендам, нужно настраивать правильно сам функционал, от тоже не вызывает ни каких проблем, пользуемся им часто, заявленный функционал работает.

            Все визуальные элементы работают штатно согласно поддерживаемому функционалу Codesys runtime 3.5.10.0
        Обработка...
        X