PDA

Просмотр полной версии : Прошу помощи решить задачку



sertol64
14.10.2019, 22:41
Здравствуйте Уважаемые Волшебники! Давно у вас не был в гостях. Нужда заставляет обратиться к Богам! Уже второй день кроплю над решением, казалось бы простой задачи (наверное). Сказывается неопытность и подход к OL (типа когда надо) Условие следующее: Программа (объект) работает при условии, что на входы (условно) А, В, С, Д, Е,Ж - подаются сигналы. Сигналы этих входов зависят друг от друга - т.е. Если отключиться (предположим) -С, то объект(программа) остановиться и, поочерёдно начнут отключаться А,В,Д,Е,Ж. Так вот на экране ПР сигнализируется о том что произошёл аварийный останов, но по какой причине УМА НЕ ПРИЛАЖУ КАК ЗАФИКСИРОВАТЬ. Т.Е. как мне зафиксировать то, что первым отключился именно С, и из-за него пошёл процесс отключения всех систем? Как это нарисовать в программе?

rovki
14.10.2019, 23:03
Так это игра "Кто первый" ;)

petera
14.10.2019, 23:13
Триггеры не кто не отменял
45115

Сергей0308
14.10.2019, 23:31
Здравствуйте Уважаемые Волшебники! Давно у вас не был в гостях. Нужда заставляет обратиться к Богам! Уже второй день кроплю над решением, казалось бы простой задачи (наверное). Сказывается неопытность и подход к OL (типа когда надо) Условие следующее: Программа (объект) работает при условии, что на входы (условно) А, В, С, Д, Е,Ж - подаются сигналы. Сигналы этих входов зависят друг от друга - т.е. Если отключиться (предположим) -С, то объект(программа) остановиться и, поочерёдно начнут отключаться А,В,Д,Е,Ж. Так вот на экране ПР сигнализируется о том что произошёл аварийный останов, но по какой причине УМА НЕ ПРИЛАЖУ КАК ЗАФИКСИРОВАТЬ. Т.Е. как мне зафиксировать то, что первым отключился именно С, и из-за него пошёл процесс отключения всех систем? Как это нарисовать в программе?

Вот эту тему посмотрите, мне кажется Вам должно подойти, там у меня до 32 аварий фиксируется на экране в порядке их поступления и первопричина присутствует, если вам не надо полный порядок поступления сигналов аварий:

https://owen.ru/forum/showthread.php?t=31113&page=7

И может Вас и такое устроит:

45117

45118

Если надо, можно сделать сброс аварии отдельной кнопкой(сигналом), по вашему описанию, насколько смог понять, этого не требуется!

rovki
14.10.2019, 23:33
Вот для понимаия вариант
Немного напутал с селами на входе - нужно что бы был номер входа который первый ушел ..

dan75
15.10.2019, 01:58
Посмотрел программы petera и rovki. На выходе получил какую-то такую гадость:
45120
Первопричина аварии выводится на экран в виде динамического текста, для чего служит одноимённая переменная. Вход I7 -- сброс. Однако, ежели две и более аварии придут одновременно (в пределах времени одного цикла), будет ошибка.

sertol64
15.10.2019, 06:45
Спасибо огромное за поступившую информацию. Надо её перекурить. Если что спрошу, доложу. Да, кстати, думаю, что в моём случае две ошибки одновременно - невозможно (вода, масло, ПЧ и т.д.)думаю на одну тысячную секунд, разница да будет...

rovki
15.10.2019, 07:17
Если придут одновременно ,то не важно кто первый их них .Главное что первый заблокирует другие входа.

Сергей0308
15.10.2019, 08:03
Так у него, насколько понимаю, и выбор делать(задавать приоритеты) не обязательно, сработали две аварии одновременно, две и показать, этим задача даже несколько упростится!
Короче, тогда можно и так:

45121

45122

С инверсией входных сигналов как-то так:

45123

45124

Вот с динамическим текстом:

45125

45126

Приоритет, в случае одновременности, у входов с большим числовым номером!

sertol64
15.10.2019, 12:46
Более менее начал понимать. Сергей, с помощью Вашего макроса (Кто первый встал,...) итоговые переменные преобразовал в сетевую с помощью макроса bool_int. Перенёс её в ИПП120, и там же преобразовал в булевские переменные. И тут начались непонятки.
1. Аварийный экран у меня №10. Больше не получается (было бы проще)
2. Посмотрел видео, почитал Ваш пост по авариям, решил поместить Ваш макрос "№_очередь" в программе ИПП120, но он такой объёмный - у меня комп. висит сразу. Даже в редакторе макрос открыть не могу, его уменьшить - компьютер "крутит у виска", мол захотел чего...
3. Если я всё делаю правильно - нет ли у Вас подобного макроса ...ну хотяб на 8 переменных а не на 32?
Вот пока споткнулся на этом....

Сергей0308
15.10.2019, 13:35
Более менее начал понимать. Сергей, с помощью Вашего макроса (Кто первый встал,...) итоговые переменные преобразовал в сетевую с помощью макроса bool_int. Перенёс её в ИПП120, и там же преобразовал в булевские переменные. И тут начались непонятки.
1. Аварийный экран у меня №10. Больше не получается (было бы проще)
2. Посмотрел видео, почитал Ваш пост по авариям, решил поместить Ваш макрос "№_очередь" в программе ИПП120, но он такой объёмный - у меня комп. висит сразу. Даже в редакторе макрос открыть не могу, его уменьшить - компьютер "крутит у виска", мол захотел чего...
3. Если я всё делаю правильно - нет ли у Вас подобного макроса ...ну хотяб на 8 переменных а не на 32?
Вот пока споткнулся на этом....

Насколько понял, Вы битовой маской передали аварии(дискретных сигналы) в ИПП120, так зачем их снова преобразовывать в дискретные сигналы, может лучше отобразить динамическим текстом название аварии, как в моём последнем варианте?!
Посмотрю попозже(дома) макрос очереди на 8 входов-выходов, насколько помню, там меняется только макрос вставки-чтения бит(количество входов-выходов(бит)), остальное всё одинаковое.

sertol64
15.10.2019, 14:01
Да, Сергей, я тоже подумал о нестыковках. Надо ещё "покурить" подумать, посмотреть все варианты. А макрос очереди я так и не смог открыть, не знаю из чего он состоит - комп. слабоват, или хрень какая то непонятная с ним.... Беру паузу!

Сергей0308
15.10.2019, 14:07
Да, Сергей, я тоже подумал о нестыковках. Надо ещё "покурить" подумать, посмотреть все варианты. А макрос очереди я так и не смог открыть, не знаю из чего он состоит - комп. слабоват, или хрень какая то непонятная с ним.... Беру паузу!

Если по последнему варианту(№ 7), что я предложил, чем он Вам не подходит, что Вы там ещё что-то пытаетесь придумать?

sertol64
15.10.2019, 17:01
Сергей, очень даже подходит. Надо только попробовать. Отпишусь когда попробую. С динам.текстом ещё ни разу не работал. Пишу с телефона. Доберусь до программы - отпишусь!

Сергей0308
15.10.2019, 18:57
Более менее начал понимать. Сергей, с помощью Вашего макроса (Кто первый встал,...) итоговые переменные преобразовал в сетевую с помощью макроса bool_int. Перенёс её в ИПП120, и там же преобразовал в булевские переменные. И тут начались непонятки.
1. Аварийный экран у меня №10. Больше не получается (было бы проще)
2. Посмотрел видео, почитал Ваш пост по авариям, решил поместить Ваш макрос "№_очередь" в программе ИПП120, но он такой объёмный - у меня комп. висит сразу. Даже в редакторе макрос открыть не могу, его уменьшить - компьютер "крутит у виска", мол захотел чего...
3. Если я всё делаю правильно - нет ли у Вас подобного макроса ...ну хотяб на 8 переменных а не на 32?
Вот пока споткнулся на этом....


Да, Сергей, я тоже подумал о нестыковках. Надо ещё "покурить" подумать, посмотреть все варианты. А макрос очереди я так и не смог открыть, не знаю из чего он состоит - комп. слабоват, или хрень какая то непонятная с ним.... Беру паузу!

Вот Вам проект с макросом очередь 8х8 более ранней версии, то есть менее совершенная(более медленная), но вполне рабочая! Не понимаю, как это может помочь, но Вам виднее и насчёт компа не понятно что там у вас твориться, у меня даже на планшете всё прекрасно открывается!

45134

Вот заодно и более совершенная(быстрая) очередь на 32 входа-выхода:

45135

Хотите уменьшить количество входов-выходов - пожалуйста, вообще ни каких проблем здесь не вижу!

stanislau
15.10.2019, 21:40
у меня даже на планшете всё прекрасно открывается!
Я что-то пропустил? OL запускается на андроид?

sertol64
15.10.2019, 22:17
Если по последнему варианту(№ 7), что я предложил, чем он Вам не подходит, что Вы там ещё что-то пытаетесь придумать?

Сергей, вот это - вариант 7, меня ЗАдУмАлО. Что я сделал:
1. С помощью макроса "Кто первый" 45139, вывел все свои аварии в сетевую переменную для передачи в ИПП120 45140
2. в программе в ипп столкнулся с банальным незнанием ввода динамического текста, а именно: значение сетевой переменной 1,2,4,8 и 16. А там стоят номера по порядку, начал делать так..45141, засомневался, а если б было больше....? И как же сделать так чтоб надпись соответствовало значению переменной?

sertol64
15.10.2019, 22:48
...Логично по-порядку, видимо программа автоматически присваивает тексту номера переменных - 0,1,2,4,8, и..т.д. других то нет...Теперь надо будет попробовать на железе..... Честно скажу - эту задачку хрен бы я когда сам бы сделал.... Огромное спасибо!

Сергей0308
15.10.2019, 23:44
Я что-то пропустил? OL запускается на андроид?

У меня на планшете(трансформере, можно и ноутбук и планшет сделать, нажав на кнопку) виндовс 10 установлена! Даже на маленьком 7-и дюймовом ноутбуке(не знаю как правильно обозвать) тоже виндовс 10, андроид, это баловство, я так думаю!
Если Вы сторонник андроида, можно приобрести устройство под управлением обоих из перечисленных ОС, вроде и такие бывают!

Сергей0308
15.10.2019, 23:53
Сергей, вот это - вариант 7, меня ЗАдУмАлО. Что я сделал:
1. С помощью макроса "Кто первый" 45139, вывел все свои аварии в сетевую переменную для передачи в ИПП120 45140
2. в программе в ипп столкнулся с банальным незнанием ввода динамического текста, а именно: значение сетевой переменной 1,2,4,8 и 16. А там стоят номера по порядку, начал делать так..45141, засомневался, а если б было больше....? И как же сделать так чтоб надпись соответствовало значению переменной?


...Логично по-порядку, видимо программа автоматически присваивает тексту номера переменных - 0,1,2,4,8, и..т.д. других то нет...Теперь надо будет попробовать на железе..... Честно скажу - эту задачку хрен бы я когда сам бы сделал.... Огромное спасибо!

Ну так версии 3-5 я и не делал для отображения с помощью динамического текста, Вам бы взять готовую версию 7 и применить(даже экран вам намалевал), а не изобретать велосипед. И я показал как инвертировать одним элементом сразу все входные сигналы, нет и здесь у Вас всё по-своему, хорошо, что у вас сигналов мало, а то бы вместо одного, все 32 пришлось лепить, да уж!

sertol64
16.10.2019, 11:10
Сергей, а я так и сделал - взял за основу Вашу 7-ю версию и начал делать из него макрос. В итоге началась какая то хрень45144, для меня эти преобразования непонятны, дальше - хуже, вместо восьми входов переделал на свои пять, вообще всё "поцОкал". Я и понял, что главное в моей задаче передать по сети целочисленное число, которое не меняется с помощью "кто первый..." внедрить его на динам.текст. Вообщем всё равно ОГРОМНОЕ спасибо. Я бы сам не справился!

Сергей0308
16.10.2019, 11:34
Сергей, а я так и сделал - взял за основу Вашу 7-ю версию и начал делать из него макрос. В итоге началась какая то хрень45144, для меня эти преобразования непонятны, дальше - хуже, вместо восьми входов переделал на свои пять, вообще всё "поцОкал". Я и понял, что главное в моей задаче передать по сети целочисленное число, которое не меняется с помощью "кто первый..." внедрить его на динам.текст. Вообщем всё равно ОГРОМНОЕ спасибо. Я бы сам не справился!

Если что-то не понятно, то можно спросить, только конкретно!
И ничего Вам там думать не надо, я же Вам практически готовый вариант дал, только у Вас 5 входов, а я 8 намалевал, немного перестарался, так подайте на три неиспользуемых входа(старших(I6-I8)) константу, логическую единицу, ну чего там можно думать?!

Или проще: после макроса вставки бит и инвертора стоит элемент 2И, к нему константа подходит, ко второму входу "510", измените её на "62" и всё! Никакие логические единицы на входах I6-I8 уже будут не нужны!

45170

45169

Или лучше так:

45183

45184

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

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