Разбор аварии из 32-бит с занесением в журнал

Стартовая страница Форумы Понять, как работает ПО Использование формул Разбор аварии из 32-бит с занесением в журнал

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

    Который день ломаю голову…

    По modbus читаю регистр ошибок. Он 4-байтный. Соответственно 32 бита = 32 вида ошибок. Когда всё хорошо то = 0.

    Сейчас сделал перечисление: Alarm «; Авария»

    В web поставил динамический текст и назначил ему входной канал аварий. В сам канал аварии добавил формулу Cnl > 0? 1:0 и выбрал перечисление Alarm.

    Т.е. при возникновении любой ошибки в динамическом тексте появляется слово «Авария». В журнал заносится Канал, определен, Авария. Когда авария сбрасывается, то в журнал заносится Канал, определен, … .

    Во-первых, как уйти от пробела в журнале при сбросе аварии?

    И второе. Меня интересуют 4 ошибки в первую очередь из этих 32-х. Т.е. 4,8,9,15 бит аварии отобразить. Если другие, то просто написать Авария.

    Планирую сделать дополнительно 4 канала и 4 динамических текста. И через GetBit получать 0 или 1. И в зависимости от этого зажигать тот или иной динамический текст. Но опять же при этом при сбросе будет пустая строка в журнал заноситься.

    Ещё раз, регистр стал > 0. В журнал заносится «установка, определен, авария» первой строкой. Второй строкой расшифровка если выпал какой то из нужных бит. Если нет, то и второй строчки нет. В web видно и Авария и «расшифровка» (если нужные биты). Когда регистр стал 0, то можно просто занести в журнал что авария «ушла».

    Чувствую как то проще и изящнее можно сделать. Как правильно? Моего логического мышления не хватает 🙁

    #30456
    JurasskPark
    Участник

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

    P.S. Смотрите таблицу Скрипты (папка Вспомогательные таблицы) и как это там сделано. Делайте свою функцию.

    #30457
    a80808
    Участник

    А чем GetBit() не устраивает? Если регистр не 0 то в цикле смотрите какой бит 1 а там уж дальше решение принимаете.

    #30458
    manjey73
    Участник

    У автора другая проблема — ненужное ЕМУ отображение нормализации в событиях.

    То есть поле пусто-пусто-пусто БАЦ «Авария» покажи и зафиксируй.
    Пропала авария или сброшена — ничего не показывай и не фиксируй в событиях.

    #30459
    manjey73
    Участник

    з.ы. не хватает динамического списка для WEB. Как раз для Аварий из битовых масок.
    ИМХО.

    #30460
    JurasskPark
    Участник

    Ну я лично этого не понял 🙂
    Мне всегда нужны картинки, видео и конкретное и четкое описание «как должно» и «как на самом деле происходит».

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

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

    Текст событий генерируется автоматически. Поэтому вместо пустого текста для отображения событий предпочтительно написать «норма». Но тогда этот текст появится на схеме тоже. Может быть, на схеме светодиодом показывать аварию.

    #30465
    a80808
    Участник

    Можно сдублировать каналы. Тот, то в события (если я правильно понял) с птичкой на записи событий текст «Авария»; «Норма», тот что на схеме (без птички) вообще убрать текст перечисления и ориентироваться на статус или коллекцию. Т.е. Авария — картинка с Восклицательным знаком (!), норма — картинки нет.

    #30628
    mr_smit
    Участник

    Итак, пусть данные об аварии читаются в 507 канал. Когда там 0 — ошибок нет. Когда больше 0 — ошибки есть и их надо разобрать.

    Создал расчетный канал 539 в который дублируется значение из 507 канала и по условию Val(507) > 0? 1:0 выдается 0 или 1 (когда есть ошибки). Далее сделал изображение с надписью «Авария». Поместил на мнемосхему динамическое изображение. Указал входной канал 539. При 0 — пустое изображение, при 1 — изображение с надписью Авария. В качестве формата выбрал свой формат Авария:
    «Сброс»:green; «Активна»:red

    На этом этапе я получил, что при возникновении аварии становится активной картинка с надписью авария, а в журнал заносится сообщение с надписью Авария — «Активна». При пропадании аварии Авария — «Сброс».

    Но хотелось расшифровки. Меня интересовало только 4 ошибки из 32-х. Я решил что сделаю расшифровку 4-х, а при возникновении любой другой просто выдать надпись Авария.

    Добавил на каждую ошибку свой расчетный канал. В формуле канала GetBit(Val(507),3) с порядковым номером интересующего меня бита. Получается теперь, что при возникновении ошибки на мнемосхеме появляется надпись авария, а журнал заносится её расшифровка.

    [url=https://ibb.co/FgFbn2G][img]https://i.ibb.co/FgFbn2G/1.jpg[/img][/url] [url=https://ibb.co/D5tz1dK][img]https://i.ibb.co/D5tz1dK/2.jpg[/img][/url] [url=https://ibb.co/vX9gK5c][img]https://i.ibb.co/vX9gK5c/3.jpg[/img][/url]

    P.S. Только заметил интересный момент. Сообщение Авария заносится и в журнал «Все сообщения» и в журнал «По представлению». А уже расшифровка отображается только в журнале «Все сообщения», в журнал «По представлению» не заносится. Интересно почему? Есть предположение что это из за того что выбран везде один формат «Авария». «По представлению» видимо он не дублируется т.к. первым туда заносится сообщение «Авария». Возможно если сделать такой же формат, но назвать его Авария1 и выбрать его для расшифровок то и в журнал «По представлению» будет заноситься всё.

    #30629
    Romiros
    Участник

    Если на вкладке «по представлению» событие отсутствует, значит Вы не добавили данный канал на схему.

    #30634
    mr_smit
    Участник

    Если на вкладке «по представлению» событие отсутствует, значит Вы не добавили данный канал на схему.

    Да, так и есть.

    https://ibb.co/FgFbn2G
    https://ibb.co/D5tz1dK
    https://ibb.co/vX9gK5c

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

    Только заметил интересный момент. Сообщение Авария заносится и в журнал «Все сообщения» и в журнал «По представлению»

    Журнал событий один и тот же, на самом деле. Все или по представлению — это только фильтр событий. Все — показывает все события, доступные пользователю. По представлению — события для тех каналов, которые есть в представлении.

    На мнемосхеме (свойства документа схемы) можно дописать номера каналов, которые не отображаются компонентами, но нужны для работы фильтра.

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