PDA

Просмотр полной версии : Опрос, Используете ли Вы в своих проектах контроль аварий с выводом их на экран ПР?



bayk
05.05.2019, 22:06
Уважаемые друзья! в одной из веток у меня возник спор с одним из форумчанинов о том, нужно или нет просить сделать разработчиков ОЛ отдельный инструмент контроля аварий.

По результатам опроса хочу предложить разработчикам создать отдельный элемент для экрана, в который будут выводиться активные аварии. вывод реализовать следующим образом:
1. для булевых переменных добавить в списке переменных чекбокс с параметром "аварийная" (можно ограничить количество аварий в разумных пределах)
2. в редакторе экранов при добавлении нового сделать специальный экран, переход на который будет осуществляться:
2.1 автоматически, если хотя бы одна из аварийных переменных активна, а при отсутствии хотя бы одной активной аварии осуществлять переход на заданный в перечне
переходов экран.
2.2 стандартное управление через переменную с номером экрана, если тот, кто пишет ПО реализовывает переходы сам.
4. Все активные в данный момент аварийные переменные пусть выводятся в список в порядке их появления, да или в принципе пофиг как.
3. Выводимый на экран текст сообщения брать из комментария к этой переменной, чтобы не городить отдельное замороченное меню. (никаких прокруток не делать. просто размещать доступное количество символов в строку) тут если уже кому-то надо будет что-то сложнее напишет вывод аварий сам, а в большинстве случаев как раз хватит символов одной строки.

Уважаемые форумчане! ниже в ветке есть прекрасные примеры по созданию экрана аварий! читайте дальше, не стесняйтесь!

Алексеев
05.05.2019, 23:08
Кстати Я использую аварийные ситуации . Для этого у меня создан специальный экран .
Где в зависимости от аварийной ситуации выводится сообщение и фиксируется.
Оператор читает его . Устраняет неисправность . Переводит тумблер в положение "СТОП".
Сбрасывается Экран Аварий . Затем "ПУСК" . Это требования ГОСТов в котлах.
Я не вижу сложностей этой реализации в ПР200.

Создаются две булевых переменные одна на вход в Аварийный экран другая выход из Аварийного
экрана . Алгоритм изменения их разрабатывает пользователь как ему хочется .
У меня все работает автоматически Я даже не заморачиваюсь с входом и выходом из Аварийного экрана .

bayk
06.05.2019, 09:13
Вход и выход с экрана это не проблема. Проблема создать вывод 20-30 аварий. Просто очень много мороки.

Ревака Юрий
06.05.2019, 09:54
Вход и выход с экрана это не проблема. Проблема создать вывод 20-30 аварий. Просто очень много мороки.

В чем морока? Выделить один экран, добавить туда 30 строк и вывести названия, это более сложный вариант, но информативный, если проще можно и в 2 строки вместить 0/1 и расшифровка на двери шкафа, переход по изменению переменной на этот экран, можно еще F2 моргать. Все!

bayk
06.05.2019, 10:20
как раз в том, что надо еще целый кусок кода писать для обработки аварий. а потом, когда накопировал 30 текстов с перечнем аварий окажется, что в каком-нибудь месте ошибочка и начинается корректировка, перекопирование и прочее. в этом и морока. а хотелось бы, как я выше писал просто отметить аварийные флаги и забыть про них, как во взрослых панелях. да и такой функционал добавит привлекательности для ИПП120. я конечно понимаю, что адепты секты Овенистов сейчас будут топить за то, что это и так все делается, но признайтесь, положа руку на сердце, что это все костыли.

melky
06.05.2019, 11:30
Да, идея сделать как в ИП320 вполне годна. Просто в настройках указываешь количество требуемых бит и начальный регистр для аварий, ну и готовый экран для Аварий в секции Экраны. Но тут надо подумать как в него входить, выходить и как его отображать, с фиксаций, без (возможностью перехода на основные экраны без сброса аварий и возврата к аварийному экрану и так далее)

bayk
06.05.2019, 11:52
Я думаю, что тут не получится адрес и длину. Нужно или переменные булевы указывать или спец. Регистр аварий. Но с битами проще. Переходы. При наличии аварий-переход. При отсутствии переход по заданному пользователем пути. Или просто указанием номера экрана в случае ручного управления переходами. Переход на него как в ип320.

игорь68
06.05.2019, 14:28
[QUOTE=bayk;304962]как раз в том, что надо еще целый кусок кода писать для обработки аварий.
У меня есть контроль сработал магнито пускатель или нет. Как в ВАШЕМ варианте реализовать это. И будет ли это АВАРИЯ если двигатель не ВКЛЮЧЕН.

Ревака Юрий
06.05.2019, 14:49
Уважаемые друзья! в одной из веток у меня возник спор с одним из форумчанинов о том, нужно или нет просить сделать разработчиков ОЛ отдельный инструмент контроля аварий.

По результатам опроса хочу предложить разработчикам создать отдельный элемент для экрана, в который будут выводиться активные аварии. вывод реализовать следующим образом:
1. для булевых переменных добавить в списке переменных чекбокс с параметром "аварийная" (можно ограничить количество аварий в разумных пределах)
2. в редакторе экранов при добавлении нового сделать специальный экран, переход на который будет осуществляться:
2.1 автоматически, если хотя бы одна из аварийных переменных активна, а при отсутствии хотя бы одной активной аварии осуществлять переход на заданный в перечне
переходов экран.
2.2 стандартное управление через переменную с номером экрана, если тот, кто пишет ПО реализовывает переходы сам.
4. Все активные в данный момент аварийные переменные пусть выводятся в список в порядке их появления, да или в принципе пофиг как.
3. Выводимый на экран текст сообщения брать из комментария к этой переменной, чтобы не городить отдельное замороченное меню. (никаких прокруток не делать. просто размещать доступное количество символов в строку) тут если уже кому-то надо будет что-то сложнее напишет вывод аварий сам, а в большинстве случаев как раз хватит символов одной строки.

В общем, потратил минут 30 времени, 80% Ваших "хотелок" закрыл штатными средствами OWENLogic, не на 30 аварий, на 8, но дальше можно размножить по желанию, все масштабируется, для частого использования, можно в макрос вставить. Оформлю, выложу.

bayk
06.05.2019, 20:21
[QUOTE=bayk;304962]как раз в том, что надо еще целый кусок кода писать для обработки аварий.
У меня есть контроль сработал магнито пускатель или нет. Как в ВАШЕМ варианте реализовать это. И будет ли это АВАРИЯ если двигатель не ВКЛЮЧЕН.
А как вы в обычном случае эту аварию контролируете? Так же и тут надо. Например через И+SR и вот отдельная аварийная переменная получилась.

bayk
06.05.2019, 20:24
Ревака Юрий я так подозреваю вы используете сортировщик переменных и несколько мультитекстов на экране. Я тоже так делаю, но просто как раз с кучей мультитекстов и возьня. Что нужно создавать кучу выходных переменных и по очереди их привязывать их к мультитекстов.

Уважаемые форумчане! ниже в ветке есть прекрасные примеры по созданию экрана аварий! читайте дальше, не стесняйтесь!

Ревака Юрий
07.05.2019, 09:03
Создание простого, расширяемого меню для экранов ПР200 или ИПП120, регистрация и отображение аварийных сигналов на отдельном экране.

https://youtu.be/NDxnh2Nxs8A
Проект для OWENLogic 1.13.184 прикреплен в описании в видео.

bayk
07.05.2019, 09:11
Спасибо! Доберусь до компа и посмотрю внимательно

Алексеев
07.05.2019, 10:01
Создание простого, расширяемого меню для экранов ПР200 или ИПП120, регистрация и отображение аварийных сигналов на отдельном экране.

Юрий звуковое сопровождение у Вас мягко сказать не совсем нормальное .:confused:




Проект для OWENLogic 1.13.184 прикреплен в описании в видео.
Может просто выложить его в посте . Не могу разобраться как его скачать .42577

i.go
07.05.2019, 10:26
Отличная программа, отдам нашим программистам.
Юрий, а текстового описания нет? Возвращаться/перечитывать к некоторым моментам удобнее в тексте, а не видео...

i.go
07.05.2019, 10:33
Юрий звуковое сопровождение у Вас мягко сказать не совсем нормальное .:confused:


Может просто выложить его в посте . Не могу разобраться как его скачать .42577
Кликаете по "посмотреть на ютуб". В ютубе под видео ссылка на гугль-драйв, крикаете на нее. Далее кликаете - скачать.

Алексеев
07.05.2019, 11:00
Кликаете по "посмотреть на ютуб". В ютубе под видео ссылка на гугль-драйв, крикаете на нее. Далее кликаете - скачать.

Извините оказывается на работе запрещено скачивать ( пользоваться ютубом) . Дома скачаю .

Сергей0308
07.05.2019, 19:27
Создание простого, расширяемого меню для экранов ПР200 или ИПП120, регистрация и отображение аварийных сигналов на отдельном экране.

https://youtu.be/NDxnh2Nxs8A
Проект для OWENLogic 1.13.184 прикреплен в описании в видео.

А конструктивная критика допустима?
Если, да, смотрите картинку ниже, наверно проще в несколько раз, это я ещё не смотрел и не разбирался что к чему просто с наскока:

42592

И, если кому важен порядок поступления аварий(для определения первопричины или ещё чего), то я ранее выкладывал макрос очередь, он позволяет восстановить порядок(очерёдность) поступления аварий!
https://www.owen.ru/forum/showthread.php?t=25068&page=34
Пост #333.

Вот модернизировал: 42635

42634

Теперь обработка изменений быстрей, до 32 раз!

Ревака Юрий
07.05.2019, 20:42
А конструктивная критика допустима?
Если, да, смотрите картинку ниже, наверно проще в несколько раз, это я ещё не смотрел и не разбирался что к чему просто с наскока:
42592

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



И, если кому важен порядок поступления аварий(для определения первопричины или ещё чего), то я ранее выкладывал макрос очередь, он позволяет восстановить порядок(очерёдность) поступления аварий!
https://www.owen.ru/forum/showthread.php?t=25068&page=34
Пост #333.

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

Ревака Юрий
07.05.2019, 20:44
Юрий звуковое сопровождение у Вас мягко сказать не совсем нормальное .:confused:


Что именно не нормально?

bayk
07.05.2019, 20:54
Сергей0308 а можно ваш вариант тоже в виде программы а не фотографий

Сергей0308
07.05.2019, 21:15
Сергей0308 а можно ваш вариант тоже в виде программы а не фотографий

Если Вы имеете ввиду оптимизированный, то пожалуйста:

42597

bayk
07.05.2019, 21:23
Естественно оптимизированный, спасибо!

Сергей0308
07.05.2019, 23:45
Вот ещё возможный вариант, сигнал(ы) аварии можно всегда сбросить, несмотря на присутствие на входах и отслеживать только вновь поступающие аварии, пока сигнал на входе не передёрнется(выключится-включится):

42599

42600

Вот ещё, модернизированный вариант:

42630

42631

Теперь обработка изменения может быть быстрей до 8 раз!
Можно очень-очень легко расширить до 32 аварий!

bayk
11.05.2019, 11:46
Сергей0308! спасибо за большое количество вариантов, но вот "магию" отображения только активных аварий подряд на экране я так и не понял. можете на пальцах объяснить, зачем нужно последовательно прибавлять все аварии ALx в Yx. я не нашел, куда эти Yx задействованы в проекте. нашел... они координатах Y аварий задействованы? О! теперь понятно, как происходит сортировка аварий на экранах! для каждого текущего набора аварий вычисляется текущая координата по Y!!! Это же прям огонь!
с переходами тоже понятно. я просто не думал, что можно одновременно организовывать переходы с экранов и по переменной и по сочетанию кнопок.
блин.. да у меня вообще одни сплошные вопросы... тааак... начинает картина проясняться! но пока ничего не понимаю по поводу использования ramp_bit блока.... не вкуриваю в его суть...
Еще не понял прикола с переменной сброса как вообще работает инструкция R-TP-R? я понял, что она сбрасывает переменную. но не понимаю логического механизма!
ну и последняя непонятка, как масштабировать ваш вариант контроля аварий и можно ли из него как-то создать универсальный макрос на большее количество аварий?

Сергей0308
11.05.2019, 14:22
Сергей0308! спасибо за большое количество вариантов, но вот "магию" отображения только активных аварий подряд на экране я так и не понял. можете на пальцах объяснить, зачем нужно последовательно прибавлять все аварии ALx в Yx. я не нашел, куда эти Yx задействованы в проекте. нашел... они координатах Y аварий задействованы? О! теперь понятно, как происходит сортировка аварий на экранах! для каждого текущего набора аварий вычисляется текущая координата по Y!!! Это же прям огонь!
с переходами тоже понятно. я просто не думал, что можно одновременно организовывать переходы с экранов и по переменной и по сочетанию кнопок.
блин.. да у меня вообще одни сплошные вопросы... тааак... начинает картина проясняться! но пока ничего не понимаю по поводу использования ramp_bit блока.... не вкуриваю в его суть...
Еще не понял прикола с переменной сброса как вообще работает инструкция R-TP-R? я понял, что она сбрасывает переменную. но не понимаю логического механизма!
ну и последняя непонятка, как масштабировать ваш вариант контроля аварий и можно ли из него как-то создать универсальный макрос на большее количество аварий?

По поводу макроса RAMP_BIT и RAMP_BIT_M - это я свой вариант предложил с возможностью всегда сбросить аварии и отслеживать только вновь поступающие, когда сигнал аварии передёрнется(выключится и вновь включится), можно конечно сделать и на детекторах переднего фронта и RS-триггерах, подобно, как Юрий Ревака делал, но мне кажется мой вариант проще(может и ошибаюсь, исследования не проводил по этому вопросу) и количество аварии можно легко расширить до 32, включительно, заменив макросы записи-чтения бита с 8 входами-выходами на 32, есть в этом проекте: 42642, ну и соответственно сортировку аварий дополнить придётся до нужного количества аварий, всё!
Я ещё где-то предлагал вариант, сделать отображение аварий в виде бегущей строки, по очереди, последовательно все активные аварии будут проплывать, а то со строками не очень удобно в том плане, что для просмотра всех аварий их надо листать! С бегущей строкой там не сложней выйдет, чем со строками, только желательно уложится в 128 знаков(говорят столько максимально для строки), чтобы 2 строки не склеивать.

bayk
11.05.2019, 15:19
Сергей0308 я понял, какую цель преследует ваш вариант, я просто просил в двух словах объяснить смысл макроса рамп_бит в данном применении, а то я что-то туплю, если это конечно возможно.

Сергей0308
11.05.2019, 15:42
Сергей0308 я понял, какую цель преследует ваш вариант, я просто просил в двух словах объяснить смысл макроса рамп_бит в данном применении, а то я что-то туплю, если это конечно возможно.

В данном случае я написал для каких целей они используется(там 2 разных макроса)! А вообще макрос RAMP_BIT ограничивает количество изменяемых бит во времени, например если во входной переменной изменилось допустим 5 бит, то в выходной будет меняться по 1 биту за цикл, начиная со старшего и дальше по уменьшению старшинства(номера бита, весового коэффициента). В макросе RAMP_BIT_M при каждом изменении входной переменной в выходной меняется только один старший бит и имеются в обеих макросах отдельные входы разрешения работы на увеличение и уменьшение, что добавляет дополнительных функций, например в данном случае, в макросе RAMP_BIT_M, я задал только работу на увеличение и макрос запоминает кратковременные поступившие сигналы аварий, подобно RS(SR)-триггеру, всё!

И коль пошла такая пьянка, режь последний огурец, вот сортировку строк сделал в порядке поступления аварий: 42659

42660

Ну и первая сработавшая авария показывается, точнее её номер(0-31), если несколько аварий сработало и первая сработавшая пропадает, то индицируется вторая сработавшая и т. д. кроме того в строках аварии пишутся в порядке поступления, короче посмотрите, если кому такое надо, ну и если что не так, скажите, не таите в себе!
И макрос рассчитан на 32 аварии, в проекте есть всё необходимое для этого! И правильно на вход макроса Очередь подать переменную Q2, я в проекте специально Q1 подал для демонстрации в симуляторе возможностей(работы) макроса.

Ещё вариант: 42682

42683

stesel
15.05.2019, 21:57
Всё это костыли. А как вернуться на тот экран, где были до перехода на экран аварий? Да никак. Нужен экран аварий реализованный производителем.

melky
15.05.2019, 22:44
stesel на каком были никак но на любой выбранный так же программно.

Сергей0308
15.05.2019, 23:08
Всё это костыли. А как вернуться на тот экран, где были до перехода на экран аварий? Да никак. Нужен экран аварий реализованный производителем.

Если Вы так хотите, я уже писал об этом, не делайте переход экранов кнопками на ПР(около экрана), а только из программы, можно также и кнопками сделать подключенными к входам ПР, тогда всегда будем знать на каком экране находимся, вся проблема в том, что нет переменной с номером экрана на котором находимся, об этом много раз говорилось! Или переход редактированием переменой с экрана(переменная с номером экрана), возможно немного сложней получается, но получается сделать как Вы хотите!

Ревака Юрий
16.05.2019, 07:58
Всё это костыли. А как вернуться на тот экран, где были до перехода на экран аварий? Да никак. Нужен экран аварий реализованный производителем.

Смотря сколько экранов, если не делать их 20, а использовать 1 основной(рабочий) то легко, можно и автоматом, если авария снята, либо по ESC, например, после просмотра и квитирования. Проблема в том, что многие делают на каждую вставку свой экран с запутанным переходом из которого нет простого выхода, хотя достаточно 2-3 по кругу, 1 рабочий, 1 для оперативных настроек, и ещё один с редко изменяемыми параметрами, можно сделать вход с отдельного экрана, все, всегда можно вернуться на рабочий, как программно так и аппаратно.

Алексеев
16.05.2019, 08:39
Во всех проектах Я согласен должен быть всегда 1 экран основной .
А все остальные для просмотра и редактирования . Это как правило .:cool:

stesel
17.05.2019, 09:29
stesel на каком были никак но на любой выбранный так же программно.



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

stesel
17.05.2019, 09:35
Ещё раз- нафига делать кучу переходов на экран аварий. Этот нужно с каждого экрана натыкать. Черт возьми такой огород получается. Хотя если вы рассуждаете про три экрана, то да. А если их десять?

melky
17.05.2019, 09:38
stesel зачем кучу переходов ?
При возникновении аварии переход на экран аварий по переменной.
Возврат на главный экран. Выход на экран аварий или журнал аварий только с главного экрана.
Возврат на главный экран с любого экрана по ESC например.

Не городите огород там, где он не нужен. Но если вам важно с любого экрана попасть в экран аварий, тогда ой....

И не важно, сколько экранов в принципе...

stesel
22.05.2019, 16:28
stesel зачем кучу переходов ?
При возникновении аварии переход на экран аварий по переменной.
Возврат на главный экран. Выход на экран аварий или журнал аварий только с главного экрана.
Возврат на главный экран с любого экрана по ESC например.

Не городите огород там, где он не нужен. Но если вам важно с любого экрана попасть в экран аварий, тогда ой....

И не важно, сколько экранов в принципе...

Блин, вообще не в тему. Экран аварий выскакивает с любого экрана при возникновении аварии - переход по переменной. Аварию устраняем и снимаем (сбрасываем), и должны вернуться к экрану на котором были. И если сделать экран аварий на уровне прошивки, то не нужно городить кучу переходов, достаточно просто настроить экран аварий.

игорь68
22.05.2019, 21:12
Блин, вообще не в тему. Экран аварий выскакивает с любого экрана при возникновении аварии - переход по переменной. Аварию устраняем и снимаем (сбрасываем), и должны вернуться к экрану на котором были. И если сделать экран аварий на уровне прошивки, то не нужно городить кучу переходов, достаточно просто настроить экран аварий.

И как это прописывать? У нас нет доступа из лоджика к прошивке. И как это будет выглядеть в железе. И с точки зрения пользователя это как будет. Оптимально будет группы экранов и возможность перемещения между группами. Но после консультации на закрытом форуме могу ответить: Переход между группами экранов очень "тяжёлый процесс". А с учетов выхода ПР с графическим дисплеем нас ожидает новые алгоритмы работы с экранами. И новые инструменты. Но это не скоро.

Алексей Геннадьевич
23.05.2019, 08:21
Ещё раз- нафига делать кучу переходов на экран аварий. Этот нужно с каждого экрана натыкать. Черт возьми такой огород получается. Хотя если вы рассуждаете про три экрана, то да. А если их десять?
Опять возвращаемся к идее нумерации экранов реализованной в ИП320.
Выставили в регистр номер экрана - он и виден на экране.

Обычно использую 3-5 экранов.
Основной.
экран пароля настроек технолога.
настройки технолога.
...
Ещё 2-3 экрана по ситуации.

На 20+ экранов не у всякого оператора ресурсов МНУ (http://lurkmore.to/%D0%9C%D0%B5%D0%B6%D1%83%D1%88%D0%BD%D1%8B%D0%B9_% D0%BD%D0%B5%D1%80%D0%B2%D0%BD%D1%8B%D0%B9_%D1%83%D 0%B7%D0%B5%D0%BB) хватит

bayk
06.06.2019, 23:08
Друзья! подскажите пожалуйста! я мучаю индикатор на 16 аварий для ИПП120. хочу выводить общее количество аварий, но по причине того. что я хочу выводить аварии не со второй строки а с первой, то я из первой координаты первой аварии вычел 1 и в итоге все стало нормально, но теперь в последней координате у меня в отсутствие аварий "4 миллиарда трампампам" в итоге я уже не могу из этого числа достать сумарное количество активных аварий. как бы теперь его высчитать (получить сумму "1") в переменной аварий (битовая маска, передаваемая по сети из контроллера), может кто делал такой макрос?
А еще вопрос, как можно из двух сетевых переменных (16-ти битных) собрать одну локальную (32-битную, коей она по умолчанию и является?)
дело в том, что я ПО для этой панели делаю шиворот на выворот, то есть мастером является контроллер, а я из него пихаю данные в соответствующие переменные панели.

Сергей0308
06.06.2019, 23:44
Друзья! подскажите пожалуйста! я мучаю индикатор на 16 аварий для ИПП120. хочу выводить общее количество аварий, но по причине того. что я хочу выводить аварии не со второй строки а с первой, то я из первой координаты первой аварии вычел 1 и в итоге все стало нормально, но теперь в последней координате у меня в отсутствие аварий "4 миллиарда трампампам" в итоге я уже не могу из этого числа достать сумарное количество активных аварий. как бы теперь его высчитать (получить сумму "1") в переменной аварий (битовая маска, передаваемая по сети из контроллера), может кто делал такой макрос?

Ну а чем мой вариант не понравился, вроде недавно выкладывал:

43079

За один цикл всё высчитывается!

Можно сделать как мелкий предлагал, каждый цикл по одному биту считать, начиная со старшего, может так и проще получится, я правда в этом сомневаюсь:
https://www.owen.ru/forum/showthread.php?t=31127

У меня ещё есть идеи как биты посчитать в переменной(для упрощения конструкции, обычным реверсивным счётчиком), тоже не за один цикл, но то, что выложил, это самое простое с точки зрения понимания, чем может не устраивать, мне наверно не понять?!

bayk
07.06.2019, 00:06
Сергей0308 я опирался на этот вариант, но мне потребовалось выводить аварии с 1 строки экрана (а для этого координаты должны с 0 высчитываться), а не со второй, потому начал огород городить. прикладываю программу в ОЛ 1.14. может покритикуете. я хотел пойти по вашему пути и использовать предложенную конструкцию, но залип с тем, что не могу упаковать в 32 битную переменную два сетевых регистра. а макроса такого с набегу не нашел (потому задал вопрос в соседней теме) я уже через ананизм избавился от переполнения первой координаты при вычитании из нее 1. а в текущей программе решил, что просто распакую по отдельности два сетевых регистра в кучу бит и сделаю конструкцию, как изначально предлагал Ревака Юрий

Сергей0308
07.06.2019, 00:29
Сергей0308 я опирался на этот вариант, но мне потребовалось выводить аварии с 1 строки экрана (а для этого координаты должны с 0 высчитываться), а не со второй, потому начал огород городить. прикладываю программу в ОЛ 1.14. может покритикуете. я хотел пойти по вашему пути и использовать предложенную конструкцию, но залип с тем, что не могу упаковать в 32 битную переменную два сетевых регистра. а макроса такого с набегу не нашел (потому задал вопрос в соседней теме) я уже через ананизм избавился от переполнения первой координаты при вычитании из нее 1. а в текущей программе решил, что просто распакую по отдельности два сетевых регистра в кучу бит и сделаю конструкцию, как изначально предлагал Ревака Юрий

Разбить-собрать, наверно так:

43081

Посмотреть пока не могу, честно не могу понять при чём здесь координаты и количество единиц в переменной, мне кажется, что это никак не связано!

bayk
07.06.2019, 00:44
Сергей0308 с количеством единиц в переменной - это способ получить текущее количество аварий (хотел использовать их в случае, если аварий более 2 и непонятно надо ли листать экран (сейчас так и сделал, только в виде отображения "полосы прокрутки" )) в итоге выплыл глюк с 4 миллиардами в первой координате и появлением пустого экрана над первой аварией. и когда я его победил, то снова получил количество аварий из значения в последней координате +1.

Сергей0308
15.06.2019, 12:45
Сергей0308 я опирался на этот вариант, но мне потребовалось выводить аварии с 1 строки экрана (а для этого координаты должны с 0 высчитываться), а не со второй, потому начал огород городить. прикладываю программу в ОЛ 1.14. может покритикуете. я хотел пойти по вашему пути и использовать предложенную конструкцию, но залип с тем, что не могу упаковать в 32 битную переменную два сетевых регистра. а макроса такого с набегу не нашел (потому задал вопрос в соседней теме) я уже через ананизм избавился от переполнения первой координаты при вычитании из нее 1. а в текущей программе решил, что просто распакую по отдельности два сетевых регистра в кучу бит и сделаю конструкцию, как изначально предлагал Ревака Юрий

Вот посмотрел программу и вопрос к Вам даже не пришлось менять: чем мой вариант не устроил?
Мой позволяет определить:
1. Наличие аварии(верхняя строчка);
2. Первопричину, номер бита аварии(вторая строчка, сверху);
3. Координаты аварий, начиная с "0", как Вы хотели, для расположения аварий построчно, в порядке поступления(3-34 строчка);
4. Отдельным макросом, ранее уже писал об этом, суммарное количество аварий.
Кроме того, можно сбрасывать по одной аварии, начиная с самой первой, то есть просмотреть все аварии не прокручивая строки экрана.
Короче, я бы предпочёл летать на чужих самолётах, пока не придумаю своего, летающего!

43181

43182

Или так:

43185

43186

bayk
17.06.2019, 02:44
я просто до конца не разобрался с работой рамп-бита. еще не совсем понимаю, как можно сбросить в варианте №8 все аварии не по очереди через отдельный вход и как увеличить количество аварий до 64? это в принципе возможно?

Сергей0308
17.06.2019, 11:32
я просто до конца не разобрался с работой рамп-бита. еще не совсем понимаю, как можно сбросить в варианте №8 все аварии не по очереди через отдельный вход и как увеличить количество аварий до 64? это в принципе возможно?

Макрос "RAMP_BIT" изменяет на выходе в переменной не более одного бита за цикл программы, если на входе сразу изменилось в переменной более одного бита, начиная с самого старшего, далее по мере уменьшения старшинства(номера или весового коэффициента). Макрос "RAMP_BIT_M" в данном случае запоминает аварии, аналогично RS-триггерам в проекте Юрия Реваки. Если у вас аварии одновременно не срабатывают и запоминать их не надо, всё это можно убрать!
В 8 версии всё аналогично как в 7 версии, также можно сбросить все аварии сразу!
Можно сделать всё, но проще ограничится 32 авариями на одном экране! Можно как-то аварии сгруппировать по 32 и на разные экраны вывести, если Вы их по сети передаёте, они уже и так сгруппированными приходят по 16 аварий! Короче на двух экранах поместятся ваши 64 аварии практически без переделок!

bayk
17.06.2019, 15:48
понял! спасибо большое за разъяснения!

Сергей0308
18.06.2019, 00:13
понял! спасибо большое за разъяснения!

Я их(эти макросы) уже описывал чуть ранее в посте #28: https://www.owen.ru/forum/showthread.php?t=31113&page=3

bayk
18.06.2019, 02:11
я просто не сразу вкурил и отложил в долгий ящик. сейчас, когда приперло уже более внимательно в них всмотрелся. и вроде стало более понятно.

max0480
25.06.2019, 20:35
Вывод аварий делаю всегда. Если аварий мало то, вывожу их в одной строчке, бегущей строкой, аварии если их несколько отображаются в порядке их появления.
Самое большое, что делал это вывод 256 аварий, текущая авария отображалась в одной бегущей строке плюс возможность пролистывать список n-го количества предидущих аварий. Самое сложное было вносить текст для этих 256 аварий :D

Сергей0308
25.06.2019, 20:44
Вывод аварий делаю всегда. Если аварий мало то, вывожу их в одной строчке, бегущей строкой, аварии если их несколько отображаются в порядке их появления.
Самое большое, что делал это вывод 256 аварий, текущая авария отображалась в одной бегущей строке плюс возможность пролистывать список n-го количества предидущих аварий. Самое сложное было вносить текст для этих 256 аварий :D

Как же Вы всё в одной строчке помещали? Говорят,(я не проверял) максимально можно 128 знаков в строке. Или у вас текста на каждую аварию в среднем ползнака?

max0480
26.06.2019, 16:59
Каждая аврия в одной строке, через динамический текст бегущей строкой. Длину делал в 30 символов, аварии писал сокращениями, поначалу было больше символов, но текст воспринимается хуже. Хотя 30 символов не так уж и мало, вот например авария от туда-"Фильтр высокой подачи насос 2" , вполне нормально.
Листаем стрелками экраны и видим предидущие аварии.
Время возникновения аварий выводил уже на скаду по modbus, к сожелению у пр экран очень маленький и если туда выводить еще время для каждой аварий получается ужас какой то.

melky
26.06.2019, 17:23
да нормально время выводить, можно ведь тоже сокращать :)

Сергей0308
26.06.2019, 18:42
Каждая аврия в одной строке, через динамический текст бегущей строкой. Длину делал в 30 символов, аварии писал сокращениями, поначалу было больше символов, но текст воспринимается хуже. Хотя 30 символов не так уж и мало, вот например авария от туда-"Фильтр высокой подачи насос 2" , вполне нормально.
Листаем стрелками экраны и видим предидущие аварии.
Время возникновения аварий выводил уже на скаду по modbus, к сожелению у пр экран очень маленький и если туда выводить еще время для каждой аварий получается ужас какой то.

Если Вас правильно понял, Вы бегущую строку делали через динамический текст? Если так, то это очень трудоёмко, намного проще координаты менять по оси Х!

max0480
26.06.2019, 22:17
Бегущую строку делал через макрос ticker, что в библиотеке лежит. Правда переписать его под себя пришлось, в том виде как он есть у меня ничего не заработало :(, а через динамический текст выводил 1 из 256 аварий возникшая в данный момент времени.

Aviator_VZh
27.06.2019, 11:43
А если несколько аварий одновременно?

Сергей0308
27.06.2019, 12:39
А если несколько аварий одновременно?

У меня это разруливается макросом RAMP_BIT, каждый цикл программы в битовой маске аварий будет меняться по одному биту начиная с самого старшего и дальше по мере уменьшения старшинства(номера бита или весового коэффициента), я уже об этом писал!

max0480
27.06.2019, 16:38
А если несколько аварий одновременно?

Такого не бывает. Для этого пишется специальный макрос обработки ошибок. Здесь на форуме кстати кто то выкладывал такой и не один.

bayk
01.07.2019, 04:21
Сергей0308 я попробовал твой вариант вывода аварий №8 и наткнулся на то, что если после сброса несколько аварий возникают снова (они не пропадали, просто я их перевзвожу через кнопку сброса через RS-триггер), то почему-то на входе в PUTBIT они есть, а на экране только одна из них отображается. а вот если сбросить их через полный сброс, то все норм.
и еще можно ли как-то отключить возможность сброса активных аварий, а то без их передергивания не понятно, что с системой происходит. вроде все сбросил, а все не работает.

Сергей0308
01.07.2019, 09:43
Сергей0308 я попробовал твой вариант вывода аварий №8 и наткнулся на то, что если после сброса несколько аварий возникают снова (они не пропадали, просто я их перевзвожу через кнопку сброса через RS-триггер), то почему-то на входе в PUTBIT они есть, а на экране только одна из них отображается. а вот если сбросить их через полный сброс, то все норм.
и еще можно ли как-то отключить возможность сброса активных аварий, а то без их передергивания не понятно, что с системой происходит. вроде все сбросил, а все не работает.

Попробуйте так: 43404

43405

После сброса всех аварий активные восстановятся!

bayk
01.07.2019, 15:39
Спасибо! Завтра засяду снова за ПО и попробую

Сергей0308
02.07.2019, 20:21
Создание простого, расширяемого меню для экранов ПР200 или ИПП120, регистрация и отображение аварийных сигналов на отдельном экране.

https://youtu.be/NDxnh2Nxs8A
Проект для OWENLogic 1.13.184 прикреплен в описании в видео.

Вот ещё к Вам вопрос возник, а не проще переход на экран аварий как-то так сделать?
Зачем у Вас так заморочено? Чтобы с экрана аварии нельзя было никуда перейти?

43416

43417

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

43418

Ревака Юрий
03.07.2019, 00:00
Вот ещё к Вам вопрос возник, а не проще переход на экран аварий как-то так сделать?
Зачем у Вас так заморочено? Чтобы с экрана аварии нельзя было никуда перейти?

43416

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




43417
И уже не в первый раз замечаю, при смене целевой платформы клеммы проваливаются вовнутрь и назад их достать не получается:
43418


Это на какой версии? Повторяемость 100% или в случайном порядке?

Сергей0308
03.07.2019, 00:08
Пока не вникал в Ваш вариант, там особенность в том, что сброс происходит по факту перехода, при других вариантах возможны пропуски при значительных временах цикла, например, если переход организован по входу. Возможно Ваш вариант тоже будет работать.





Это на какой версии? Повторяемость 100% или в случайном порядке?

У меня последняя актуальная версия ОЛ, несколько раз на разных проектах менял целевую платформу и всегда с косяками, раньше, на более ранних версиях ОЛ, подобное было намного реже, но тоже у меня встречалось на макросах!
Проверил на железе свой переход на экран аварии, нормально всё фунциклирует, проблем не заметил!

bayk
03.07.2019, 00:46
Сергей0308 Огромное Вам спасибо! вы меня снова выручили! теперь у меня обработка аварий работает идеально! я добавил только обработку короткого и долгого нажатия кнопки сброса аварий, чтобы ей или по одной аварии удалять, или удержав - все. и сделал блок обработки звука аварии, чтобы при сбросе хотя бы одной аварии звук снимался, а лампочка F2 осталась горящей. было бы конечно хорошо первым нажатием на сброс снимать "звук" а только со второго нажатия сбрасывать аварии, но что-то неохота мудрить.нет, эта штука все равно меня загрызла и я все-таки сделал полный функционал. теперь у меня первое нажатие физической кнопки сброса снимает звук, все последующие сбрасывают аварии по одной, а долгое удержание - все аварии. а если появляется новая активная авария. то звук включается снова.

bayk
03.07.2019, 01:37
Это на какой версии? Повторяемость 100% или в случайном порядке?

Повторяемость 100% если комментарии находятся за рабочим полем "чертежа". и справедливо это абсолютно для всех версий ОЛ, поскольку, эта проблема, я так думаю, аналогична проблеме с "влезанием" входов на рабочую зону при добавлении входа/выхода в макрос, при учете, естественно, что существует комментарий за пределами рабочего поля.
Я так понимаю, что проблема в попытке ОЛ обработать "сомнительные" по ее мнению координаты комментариев, которые ОЛ приравнивает к координатам рабочих элементов и соответственно при запросе изнутри себя об изменении рабочего поля пытается расширить рабочее поле, чтобы оно включало все объекты, включая комментарии. в итоге такой глюк.

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

Сергей0308
03.07.2019, 02:55
Сергей0308 Огромное Вам спасибо! вы меня снова выручили! теперь у меня обработка аварий работает идеально! я добавил только обработку короткого и долгого нажатия кнопки сброса аварий, чтобы ей или по одной аварии удалять, или удержав - все. и сделал блок обработки звука аварии, чтобы при сбросе хотя бы одной аварии звук снимался, а лампочка F2 осталась горящей. было бы конечно хорошо первым нажатием на сброс снимать "звук" а только со второго нажатия сбрасывать аварии, но что-то неохота мудрить.нет, эта штука все равно меня загрызла и я все-таки сделал полный функционал. теперь у меня первое нажатие физической кнопки сброса снимает звук, все последующие сбрасывают аварии по одной, а долгое удержание - все аварии. а если появляется новая активная авария. то звук включается снова.

Вот так звук не будет снова звенеть когда сбрасываются все аварии при наличии активных, остальное, вроде всё как хотели:

43428

43429

bayk
03.07.2019, 11:10
Сергей0308 я посимулировал ваш последний вариант. все хорошо, но если есть несколько неквитированных или активных аварий, то при появлении новой звук не включается повторно, пока не будут все аварии сборшены.
я осмелился немного доработать этот красивы код (у меня значительно все вышло замудренее).
43453

Итого я добавил: звук повторно включается если появляется новая активная авария и после сброса всех аварий, если остались активные.

Сергей0308
03.07.2019, 12:41
Сергей0308 я посимулировал ваш последний вариант. все хорошо, но если есть несколько неквитированных или активных аварий, то при появлении новой звук не включается повторно, пока не будут все аварии сборшены.
я осмелился немного доработать этот красивы код (у меня значительно все вышло замудренее).
43453

Итого я добавил: звук повторно включается если появляется новая активная авария и после сброса всех аварий, если остались активные.

Да, действительно, я не так хотел, маленько поспешил, не подумал, вот поправил, теперь вроде так, как хотел:
43455

43458

И насколько понял у Вас аварии приходят по сети битовой маской, вот два регистра свёл в одну переменную и добавил включение(задействование) каждой из 32 аварий(AL 0-31), настройка на 1-ом экране:

43460

43461

43462

Можно и так сделать:

43480

Только обозначать номера аварий(бит) для каждого регистра лучше в 16-ричной системе счисления, чтобы меньше места занимало(строк)!

Вот практически готовая программа на 32 аварии, аварии приходят по сети(как у Вас) двумя регистрами, битовой маской аварий! Можно любую аварию включить или выключить(задействовать - не задействовать), настройка на первом экране, сделал по второму варианту:

43516

По умолчанию все аварии включены(задействованы)! Заодно на практике применил свой метод, что ранее публиковал, для уменьшения количества используемой энергонезависимой памяти в 8 раз когда требуются булевы энергонезависимые переменные, а то Юрий Ревака меня всего за этот метод заругал: https://www.owen.ru/forum/showthread.php?t=26681&page=4
Короче, этот метод имеет смысл если количество булевых энергонезависимых переменных более четырёх, надеюсь понятно объяснил!

43513

43517

43569

И пожалуй Вы правы, спрятал блок комментариев на холсте программы, точнее, чтобы он не выступал из него и о чудо, при смене целевой платформы клеммы не провалились во внутрь, теперь хоть знаю как бороться с провалами!

bayk
10.07.2019, 13:27
Сергей0308 как всегда все потрясающе доходчиво!

Сергей0308
10.07.2019, 22:47
Сергей0308 как всегда все потрясающе доходчиво!

Вы наверно "72 метра" смотрели?!

bayk
11.07.2019, 00:29
честно говоря, не помню ;) но точно смотрел "убрать перископ" (исключительно в переводе Санаева)

Сергей0308
11.07.2019, 06:00
https://www.youtube.com/watch?v=ZgJu8X3nGmM

Сергей0308
08.09.2019, 15:22
Да, действительно, я не так хотел, маленько поспешил, не подумал, вот поправил, теперь вроде так, как хотел:
43455

43458

И насколько понял у Вас аварии приходят по сети битовой маской, вот два регистра свёл в одну переменную и добавил включение(задействование) каждой из 32 аварий(AL 0-31), настройка на 1-ом экране:

43460

43461

43462

Можно и так сделать:

43480

Только обозначать номера аварий(бит) для каждого регистра лучше в 16-ричной системе счисления, чтобы меньше места занимало(строк)!

Вот практически готовая программа на 32 аварии, аварии приходят по сети(как у Вас) двумя регистрами, битовой маской аварий! Можно любую аварию включить или выключить(задействовать - не задействовать), настройка на первом экране, сделал по второму варианту:

43516

По умолчанию все аварии включены(задействованы)! Заодно на практике применил свой метод, что ранее публиковал, для уменьшения количества используемой энергонезависимой памяти в 8 раз когда требуются булевы энергонезависимые переменные, а то Юрий Ревака меня всего за этот метод заругал: https://www.owen.ru/forum/showthread.php?t=26681&page=4
Короче, этот метод имеет смысл если количество булевых энергонезависимых переменных более четырёх, надеюсь понятно объяснил!

43513

43517

43569

И пожалуй Вы правы, спрятал блок комментариев на холсте программы, точнее, чтобы он не выступал из него и о чудо, при смене целевой платформы клеммы не провалились во внутрь, теперь хоть знаю как бороться с провалами!

Вот, немного модернизировал:
44518

bayk
09.09.2019, 11:30
А не расскажешь, что тут модернизировалось? а то я открыл. а у меня глаза разбежались, а в симуляторе почему-то ничего не работает. входные аварии выходят в переменную "А" и тишина...

Сергей0308
09.09.2019, 12:11
А не расскажешь, что тут модернизировалось? а то я открыл. а у меня глаза разбежались, а в симуляторе почему-то ничего не работает. входные аварии выходят в переменную "А" и тишина...

Не так! Входные аварии поступают в два регистра, по 16 в каждом(Рег_1 и Рег_2) битовой маской, как Вы хотели по сети получать, так и сделал! Переменная "А" используется чтобы отключить-включить контроль той или иной аварии, на первом экране включается("+"(включён), "-"(выключен)), после отключения авария уже не будет срабатывать и по умолчанию все аварии включены! Модернизированную версию пока не используйте, что-то не так работает, как было задумано, попозже поправлю. А пытался упростить макрос сумматор бит(вычисляет количество единиц в переменной), пока неудачно, пользуйтесь 15 версией программы! Зато ещё раз пояснил работу и назначение некоторых элементов программы, с этим ничего не изменилось!

bayk
09.09.2019, 12:23
все, теперь понятно. я и пользуюсь 15 версией, только не использую функционал отключения аварий.

diams
08.05.2023, 20:29
доброго времени суток. решил использовать 13 версию контроля аварий. Возникла проблема с макросом "№_очередь":
в скачанном проекте все коректно работает, формируется сигнал авария на выходе Q_M (битовая маска). Переношу в свой проект и Q_M=0 всегда!
Решил разобраться отчего так происходит. Сократил 13 версию до одного макроса "№_очередь" и уперся в макрос №_Bit
Может я что-то упустил, но, на мой взгляд, имея на входе фунций идентичные сигналы, получаем идентичные выходы. Но в симуляторе
с этой логикой не вяжется (это в проекте 13)
67764

Сергей0308
08.05.2023, 20:53
доброго времени суток. решил использовать 13 версию контроля аварий. Возникла проблема с макросом "№_очередь":
в скачанном проекте все коректно работает, формируется сигнал авария на выходе Q_M (битовая маска). Переношу в свой проект и Q_M=0 всегда!
Решил разобраться отчего так происходит. Сократил 13 версию до одного макроса "№_очередь" и уперся в макрос №_Bit
Может я что-то упустил, но, на мой взгляд, имея на входе фунций идентичные сигналы, получаем идентичные выходы. Но в симуляторе
с этой логикой не вяжется (это в проекте 13)
67764

Это же много раз уже обсуждалось, короче, при переносе(копировании) макроса его настройки(находятся в свойствах макроса), если они есть, не сохраняются и принимают значения по умолчанию!
Надо, перенести не только макрос, но и настройки в свойствах макроса(если они имеются и отличаются от значения по умолчанию)!
Настройки можно посмотреть в моём проекте у соответствующего макроса! В макросе могут быть вложенные макросы, в смысле, надо все проверять на наличие настроек в свойствах макроса!
Короче, если Вы и настройки перенесёте в свой проект, макрос будет так же работать, как в моём проекте, всё!

67765

diams
09.05.2023, 06:20
Это же много раз уже обсуждалось, короче, при переносе(копировании) макроса его настройки(находятся в свойствах макроса), если они есть, не сохраняются и принимают значения по умолчанию!
Надо, перенести не только макрос, но и настройки в свойствах макроса(если они имеются и отличаются от значения по умолчанию)!
Настройки можно посмотреть в моём проекте у соответствующего макроса! В макросе могут быть вложенные макросы, в смысле, надо все проверять на наличие настроек в свойствах макроса!
Короче, если Вы и настройки перенесёте в свой проект, макрос будет так же работать, как в моём проекте, всё!

67765
спасибо! все работает

Pavel R
01.09.2023, 14:53
Я практически всегда создаю вывод аварий на экран в своем проекте

Pavel R
01.09.2023, 18:27
В данной теме как-то все сложновато.
Я пользуюсь для вывода на экран ошибок вложенным файлом. При наличии ошибки на одном или нескольких дискретных входах, основной экран контроля параметров переключается на отображение существующей ошибки - на экране отображаются две строки динамического текста, в которых можно описать существующую ошибку по ее номеру. При наличии нескольких ошибок, они выводятся поочередно с интервалом 10 секунд, который в макросе можно изменить. По мере устранения ошибок, они перестают отображаться на экране. Когда все ошибки устранены, экран вывода ошибок автоматически переключается на отображение основных параметров работы системы. Так же клавишей "Esc" в любой момент с экрана отображения ошибок можно перейти к основному экрану работы системы. Кроме дискретного ввода ошибок, можно ко входу макроса "Код" подать сигнал кода ошибок. При наличии сигнала на данном входе он включается автоматически, при этом дискретные входа отключаются. Так же есть экран ошибок. Для примера все входа на этом экране редактируемые с экрана. В действующей схеме контроля ошибок необходимо отключить редактирование.
Как-то так!

Ruslanadm
01.09.2023, 20:00
Узнаю макрос Сергей0308
По крайней мере, идея та же самая :)

Сергей0308
01.09.2023, 20:29
Бывает и порядок поступления аварий важен, в смысле, я бы его фиксировал, типа отдельную переменную для этого предусмотрел!
Например: код аварии займёт 5 бит(до 32 аварий), ещё пять бит займёт порядок поступления этих аварий, всего 10 бит, в смысле, в одной переменной три аварии можно поместить! У меня есть матрица памяти на 32 ячейки, можно код аварии сразу посылать(писать) в ячейку соответствующую порядку её поступления, короче, здесь много вариантов, спорить бессмысленно, в смысле, кому чего надо(хочется)!

ainuro
26.01.2024, 09:59
Как это реализовать на ПР205?

kondor3000
26.01.2024, 10:29
Как это реализовать на ПР205?

Проект можно перенести копипастом из одного в другой, открытых рядом в одной версии Лоджика, кроме сетевых переменных ( их ручками добавить)

ainuro
26.01.2024, 10:36
Там структура экрана совсем другая. Так не переносится

kondor3000
26.01.2024, 10:53
Там структура экрана совсем другая. Так не переносится

Понятное дело, что экран надо свой рисовать.

ainuro
26.01.2024, 12:49
В ПР205 нет возможности привязать переменные к координатам экрана

Dimensy
26.01.2024, 13:05
Как это реализовать на ПР205?

Можно вот так сделать экран аварий на ПР205 (использован макрос из менеджера компонентов)

ainuro
26.01.2024, 13:11
Тоже годный вариант! Спасибо

Kolunayev
27.01.2024, 10:00
43569

Добрый день. А можно как-то увеличить количество аварий до 64?

kondor3000
27.01.2024, 10:42
43569

Добрый день. А можно как-то увеличить количество аварий до 64?

Можно, поставьте 2 блока

Kolunayev
27.01.2024, 14:52
Спасибо, попробую.