Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Установка бита/переменной при квитировании/сбросе аларма

  1. #1

    По умолчанию Установка бита/переменной при квитировании/сбросе аларма

    Здравствуйте, коллеги.
    Есть ли механизм в CodeSys, который позволяет устанавливать биты или записывать переменные при подтверждении или сбросе тревог штатными методами? Сработал аларм, оператор квитирует его в визуализации, через какое-то время аларм уходит, и в этот момент система пишет бит в какой-нибудь in_out ПЛК или хотя бы BOOL. Или такую роскошь придется делать руками?

  2. #2

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.

    Это можно сделать на уровне класса тревог.
    Спасибо за наводку, посмотрел, работает! Но я так понял, что с помощью этого механизма осуществляется действие при исчезновении любой тревоги? А я хотел (ох уж эта недосказанность вечная), чтобы при сбросе конкретного аларма выставлялся конкретный бит: аларм генерится триггером var1, после снятия var1 и квитирования записывается переменная, ну например, var1rst, аларм генерится триггером var2, после снятия var2 и квитирования записывается переменная var2rst, и т.д.

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    6,458

    По умолчанию

    Цитата Сообщение от borgivan Посмотреть сообщение
    Спасибо за наводку, посмотрел, работает! Но я так понял, что с помощью этого механизма осуществляется действие при исчезновении любой тревоги? А я хотел (ох уж эта недосказанность вечная), чтобы при сбросе конкретного аларма выставлялся конкретный бит: аларм генерится триггером var1, после снятия var1 и квитирования записывается переменная, ну например, var1rst, аларм генерится триггером var2, после снятия var2 и квитирования записывается переменная var2rst, и т.д.
    Да, этот функционал влияет сразу на все тревоги данного класса.
    В принципе, если в проекте их условные несколько десятков (а не сотни) - то можно для каждой создать свой класс.
    Если тревог много - то проще будет делать руками, но возникнут сложности с квитированием (мы не знаем, какая строка в таблице выделена при нажатии кнопки квитирования - если только не оставлена лишь кнопка Квитировать все).
    В теории, описанную задачу можно решить через библиотеку AlarmManager, но это тоже будет не слишком просто - хорошего описания нет, пример поясняет далеко не все, и все равно придется писать много дополнительного кода:
    https://ftp.owen.ru/CoDeSys3/21_Exam...anager.package

  5. #5

    По умолчанию

    Про библиотечку AlarmManager уже читал. Идея понятна. Даже в принципе понятно, как через неё решить. Просто это всё равно будет в коде разнесено, а значит время/возможность человеческого фактора: там аларм добавил, тут пропустил, ищи-свищи потом

  6. #6

    По умолчанию

    А про какую библиотеку говорят? Про штатную или какую-то другую?
    Евгений Кислов Я тебе слал свой проект с этим кодом и очередью СМСок =)

    borgivan
    Там надо в таблицу действия класса воткнуть вызов своего FB, наследованного от IAlarmNotifier.
    И когда класс сработает, то в наш FB передаётся инфа о том, какая тревога, какой ID, какой класс что сделала (активировалась, деактивировалась) и так далее. И нам останется только поставить IFы на нужную. Я так себе SMS-уведомления делаю в проекте: когда срабатывает любая тревога, я знаю про это, и отсылаю СМСку.
    А ID тревог берутся из их таблицы. Ща, делаю кучу скриншотов. Это можно прям в FAQ =))

    Итак, вот инфа более детально.
    1. Создаём свой FB с наследованием: Alarms-Coding-1.gif
    Сам блок должен иметь пустой код (он ничего не делает), но должен иметь метод "Execute" с определёнными типами и количеством параметров, вот такой: Alarms-Coding-2.gif
    у меня там красивые комментарии, по которым всё-всё понятно. Однако, нам передают:
    а) Текущее состояние тревоги (eCurrTranslition). Это то, в какое состояние тревога перешла.
    б) Объект самой тревоги (itfAlarm). Это ВЕСЬ объект тревоги со всеми классами, группами, текстами, переменными и их значениями.
    В коде я из них вытаскиваю состояние, в которое приходит тревога, сообщение тревоги, класс тревоги. А потом собираю это в текстовую строку и кидаю СМСку в очередь на отправку.
    2. Узнать о том, что как зовётся и что нам доступно можно в менеджере библиотек. Смотрим там, и видим:
    а) Описалово состояний тревоги: Alarms-Coding-3.gif
    б) Описалово объекта тревоги со всеми методами и свойствами: Alarms-Coding-4.gif
    Вот как раз тебе нужны будут фильтры по ID конкретной тревгои, класса или группы
    3. Чтобы наш FB вызывался, где-нибудь в проекте делаем переменную его типа, вот так: Alarms-Coding-5.gif
    И дальше в класс тревоги вписываем вызов нашего FB: Alarms-Coding-6.gif

    Вуаля! Теперь при сработке любой тревоги из класса, в котором вставлен вызов, будет вызываться наш FB, в который будет поступать ВСЯ инфа о текущей тревоге и её статусе. А дальше с этим можно делать что хочется (отфильтроав нужное) - биты ставить, СМСки/Мыла слать.

  7. #7

    По умолчанию

    Cs-Cs, дорогой, ДАЙ Я ТЕБЯ РАСЦЕЛУЮ! Когда увидел, что кроме переменной увидел возможность фб прицепить, сразу мысль пришла о том, как это было бы реализовано в С#, а потом вспомнил, что в сисе тоже интерфейсы есть, но инфы не надыбал про это )))))

  8. #8

    По умолчанию

    Целуй! Для меня это было такое же адское открытие! Я сначала думал - юзать ли тревоги или нет. Думал, что это какая-то закрытая фигня, из которой ничего не достать. А когда попробовал с этим интерфейсом и FB - то меня адски втащило!
    Сам CodeSys меня тоже тащит вовсю, потому что тут есть и массивы, и указатели, и массивы указателей - и вообще всё на мой любимый СИшник похоже =))

    А ID нужных тебе тревог ты можешь в проекте в какой-нить массив констант воткнуть, чтобы он лежал где-то не посередине кода, а в удобном месте и тоже легко конфигурился. Жжом!

  9. #9

    По умолчанию

    Вот только в упор не понял, как соотносятся Id из AlarGroup и я IAlarm.GetId(). Я экспортнул алармы в .csv и там их порядок совпадает с айдишниками, которые возвращает метод, но никак не совпадает с айди из настроек группы алармов.
    Последний раз редактировалось borgivan; 16.12.2020 в 01:13.

  10. #10

    По умолчанию

    Я это не тестил, но там же есть GetID, а есть GetInternalID - может быть как раз это InternalID и будет.
    Ща... тестану =)) У меня CodeSys на втором компе, и я сегодня для этой темы его то включаю, то выключаю постоянно =))

    Так, что накопал (почитай прям в библиотеке описание GetID/GetInternalID):
    1. GeID даёт некий порядковый номер из списка. Хер какой =)
    2. GetInternalID даёт вроде то, что мы ищем - ID из списка тревог, который мы задаём.
    Проверил, вроде так. В брейкпоинте посмотрел на одну из тревог, и потом сравнил с тем, что в списке: Alarms-Coding-7.gif Alarms-Coding-8.gif
    3. ВООБЩЕ, КСТАТИ, мы оба идиоты! Можно же ВООБЩЕ КРУТО СДЕЛАТЬ! Потому что ещё же у каждый тревоги есть два поля для LATCH-переменных. И их тоже можно получать через GetLatchVar1Value()/GetLatchVar2Value() - то есть можно попробовать обмануть систему так чтобы вписать в эти поля нужные числа и в Execute ловить по схеме "если GetLatchVar2Value() > 0" - то ставим бит с номером, который в LATCH2 записан.

    В общем, поизучай этот itfAlarm как следует!

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Чтение бита (EXTRACT)
    от Newcomer в разделе Среда программирования OWEN Logic
    Ответов: 3
    Последнее сообщение: 24.02.2020, 15:26
  2. Ответов: 16
    Последнее сообщение: 27.02.2018, 14:01
  3. Адрес бита в панели
    от Stas в разделе Панели оператора (HMI)
    Ответов: 8
    Последнее сообщение: 19.02.2013, 14:21
  4. Слайдер и 32 бита
    от Columbariy в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 26.10.2012, 15:45
  5. изменение бита с панели и орс
    от николай72 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 28.05.2010, 21:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •