PDA

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



corado
15.06.2022, 21:07
Есть макрос постановки в очередь, любезно предоставленный мне уважаемыми специалистами общающимися в этом разделе.
И так, есть пять входов 1-2-3-4-5 и соответственно пять выходов, выставляю например очередность входов в таком порядке 3-2-1-5-4,
61229
сначала включается выход 3, остальные выключены, выключаю вход 3, выход 3 выключается и согласно поставленной очереди включается выход 2,
61230
ну и так далее согласно постановки в очередь, далее вывожу на первую строку экрана ПР200 очередность включенного в данный момент выхода.
А вот как сделать так чтобы вывести на вторую строку какой выход будет включен следующим ни как не соображу ( а согласно выше приведенному примеру должен включиться 2ой выход).
Последовательность включения входов может быть любая и естественно видно какой выход работает а вот какой будет следующий и как это реализовать?:confused:

bayk
15.06.2022, 22:23
так вы очередь выставляете ручками в программе, потому вы заранее знаете и можете что угодно когда угодно вывести в хамскую

corado
15.06.2022, 23:28
Гыыыы:), нет, не ручками, этот макрос стоит в программе и там может быть любая последовательность и иногда требуется знать какой следующий выход будет открыт.
Последовательность переключения выходов задает последовательность приходящих сигналов на входы. Ткните плиииз мордой лица в правильное направление.

Сергей0308
16.06.2022, 05:25
Гыыыы:), нет, не ручками, этот макрос стоит в программе и там может быть любая последовательность и иногда требуется знать какой следующий выход будет открыт.
Последовательность переключения выходов задает последовательность приходящих сигналов на входы. Ткните плиииз мордой лица в правильное направление.

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

melky
16.06.2022, 08:49
Или в самом макросе добавить выход Nx (Next) и в самом макросе добавить отсечку текущего выхода и выдавать его в цифровом виде...

Сергей0308
16.06.2022, 19:11
Или в самом макросе добавить выход Nx (Next) и в самом макросе добавить отсечку текущего выхода и выдавать его в цифровом виде...

И, как Вы себе это представляете, в смысле, если "выключать" какой-то вход в основном макросе - нарушится его нормальная работа!

Я как-то примерно так это представляю:

61257

61259

Короче, проверяйте!

И, ещё хотел уточнить, что это не последний вариант моего макроса "Очередь", что я выкладывал на форуме, в дальнейшем я его усовершенствовал, в плане быстродействия и универсальности!

keysansa
16.06.2022, 20:14
Есть макрос постановки в очередь, любезно предоставленный мне уважаемыми специалистами общающимися в этом разделе.



А вот как сделать так чтобы вывести на вторую строку какой выход будет включен следующим ни как не соображу

Для этого, надо знать внутренности макроса. Если там статическое распределение памяти - это одно, динамическое - другое.
ЗЫ. Я опять ошибся темой, прошу прощения. Надо слушать Сергей0308.

Сергей0308
16.06.2022, 20:42
Для этого, надо знать внутренности макроса. Если там статическое распределение памяти - это одно, динамическое - другое.
ЗЫ. Я опять ошибся темой, прошу прощения. Надо слушать Сергей0308.

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

Вот опять часть логики в макрос поместил(взял в виде макроса), мне без макросов кажется что некрасиво получается!

61260

61261

keysansa
16.06.2022, 21:02
Так "кишки" макроса никто и не думал скрывать!

Это было не претензия к вам, а руководство к действию ТС.
Вы - молодца. Столько полезного кода! Спасибо!

corado
17.06.2022, 00:16
Сергей0308. Спасибо Вам за помощь, вообще то в программе он не урезанный а то что я выложил это были эксперименты.

corado
17.06.2022, 00:24
Сергей спасибо огромное за помощь, проверил, работает как надо, завтра воткну в программу. Век живи век учись:)

melky
17.06.2022, 08:48
Сергей0308 ну если ваш макрос не знает, который выход будет следующим то да, я это себе никак не представляю, а если знает, то почему не добавить просто выход для индикации следующего и например текущего в цифровом виде?

Для показа на экране Текущий Шаг = #2, Следующий Шаг = #5 ????

з.ы. но вам виднее

Сергей0308
17.06.2022, 10:12
Сергей0308 ну если ваш макрос не знает, который выход будет следующим то да, я это себе никак не представляю, а если знает, то почему не добавить просто выход для индикации следующего и например текущего в цифровом виде?

Для показа на экране Текущий Шаг = #2, Следующий Шаг = #5 ????

з.ы. но вам виднее

Вы воспринимаете мой макрос как разумное существо, поверьте на слово, что это далеко не так!
На каждый выход в макросе имеется свой элемент(подмакрос) в котором определяется какой выход должен сработать(включится), тогда придётся добавлять в этот подмакрос дополнительный выход и элементы сравнения для определения следующего выхода, что будет включён при выключении текущего активного выхода, короче подобно как и для основного выхода, конечно, это не трудно и не сложно!
Если бы я изначально макрос создавал с таким Т.З. наверно и сделал бы нечто подобное!
Но, так как мы находимся не на нулевой отметке, то можно поступить ещё проще, ничего не переделывая(уже писал об этом), в смысле, добавить второй макрос, что у нас уже есть, для решения дополнительной задачи, которая изначально не стояла, при создании этого макроса. Вроде, простые истины, чего здесь может быть непонятным?
А вывести в целочисленном виде следующий в очереди выход ничто и сейчас не помешает, достаточно добавить макрос вставки(записи) бит и шифратор!
Примерно так:

61274

61264

melky
17.06.2022, 11:24
Сергей0308 опять вы лепите owl который не все смогут посмотреть... з.ы. я просто предположил что если есть макрос, который и так все рассчитывает, то добавить в него всего один выход будет более экономически целесообразным., особенно учитывая, что в одну переменную можно закинуть сразу весь список шагов и его потом отобразить уже внешними средствами (раздробив эту переменную на несколько цифр)

Сергей0308
17.06.2022, 12:00
Нет, в целочисленном виде сложнее получится, так как изначально из макроса выходят булевы выходы, затем уже булевой выход преобразуется в целочисленное значение соответствующее номеру выхода!

melky
17.06.2022, 12:55
Сергей0308 ага, я уже накатил ОЛ и посмотрел, действительно проще второй макрос...

Сергей0308
18.06.2022, 22:25
Сергей0308 ага, я уже накатил ОЛ и посмотрел, действительно проще второй макрос...

Вот как Вы хотели вывел из макроса в целочисленном виде оба выхода, основной(текущий) и следующий в очереди:

61283

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

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

61284

Алексеев
19.06.2022, 07:01
Вот как Вы хотели вывел из макроса в целочисленном виде оба выхода, основной(текущий) и следующий в очереди:

61283

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

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

61284

Хочу посмотреть и оценить твой талант , но не могу открыть первый раз такое . :confused:
61289

Dimensy
19.06.2022, 08:26
Хочу посмотреть и оценить твой талант , но не могу открыть первый раз такое . :confused:

Версия лоджика нужна 1.23

Сергей0308
19.06.2022, 08:39
Нужна последняя актуальная версия ОЛ 1.23.296.0

61290

И, боюсь, Вы не поймёте, как это работает!

Винда такая:

61291

Это старый ноут, на него даже 11-ая Винда не налазит!

Алексеев
19.06.2022, 08:44
Версия лоджика нужна 1.23

Пока не использую 1.23. В ней нету существенных улучшений для ПР200 . Но это в первые. Обычно ОЛ писал что проект создан в версии выше .
Спасибо. Установил и посмотрел. Молодец Сергей0308. Мне бы его талант. Если есть свободные ресурсы в ПР и всё работает , оптимальность проекта не важна .

Сергей0308
19.06.2022, 11:44
Пока не использую 1.23. В ней нету существенных улучшений для ПР200 . Но это в первые. Обычно ОЛ писал что проект создан в версии выше .
Спасибо. Установил и посмотрел. Молодец Сергей0308. Мне бы его талант. Если есть свободные ресурсы в ПР и всё работает , оптимальность проекта не важна .

Вы не совсем правильно меня поняли(наверно я неточно выразился), сложней в плане того, что в преведущем варианте решения нам требовалось поставить на холст программы второй экземпляр имеющегося(применяемого) макроса и всё, ничего нового придумывать не надо!
А так второй вариант более продвинутый, если так можно выразится!
Я добавил второй выход и элементы сравнения, для определения следующего в очереди выхода, значение должно быть "1", текущего активного выхода значение для сравнения должно быть "0" и т.д., короче, для определения всей цепочки очерёдности достаточно одного целочисленного выхода, можно добавить вход макросу для задания этого значения и последовательно определять очерёдность, меняя из вне это значение:

61293

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

corado
19.06.2022, 15:41
Вот я озадачил, не думал что кому то это тоже будет интересно, теперь и самому интересны стали новые решения, Сергей спасибо, сижу разбираюсь, мозги напрягаю:)

Сергей0308
19.06.2022, 18:13
Вот я озадачил, не думал что кому то это тоже будет интересно, теперь и самому интересны стали новые решения, Сергей спасибо, сижу разбираюсь, мозги напрягаю:)

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

61305

61306

Чтобы работало нужны такие настройки:

61307

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

corado
19.06.2022, 22:08
И как успехи, разобрались как это всё работает, по какому алгоритму?
Вот последняя модификация с возможностью просмотра очереди на всю глубину:

61305

61306

Чтобы работало нужны такие настройки:

61307

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

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


Залил в ПРку очередь версии 7, в свойствах заранее установил биты как Вы указали, запустил, все работает. На экране обозвал переменную [ Q_N ] следующий [ SEL_Q_N ] глубина, присвоил глубине ноль, ну как бы меня устраивает но не то что мне надо, присвоил глубине единицу, работает как мне надо, выставил очередь 123456 [ Q_N ] показывает следующую после единицы цифру т.е. 2, ну и.т.д. это как раз мой вариант, а если присвоить глубине 5 (очередь остается в таком же порядке 123456), то после единицы в переменной [ Q_N ] отразится 6, пропускаются показания 2345 совсем не мой вариант, но может для кого и пригодится. Честно говоря не понял смысла, глубина просмотра и за что отвечают биты в свойствах макроса?
Сохранил проект, открыл заново, да, биты в свойствах не сохранились.

Сергей0308
19.06.2022, 22:52
Пока не разобрался, открыл внутренности , посмотрел, пощелкал и отложил. Вчера прикупил панельку СП270, с панелями еще не сталкивался, засел за изучение, спаял шнурок, пока только научился заливать проги в нее, вопросов куча.


Залил в ПРку очередь версии 7, в свойствах заранее установил биты как Вы указали, запустил, все работает. На экране обозвал переменную [ Q_N ] следующий [ SEL_Q_N ] глубина, присвоил глубине ноль, ну как бы меня устраивает но не то что мне надо, присвоил глубине единицу, работает как мне надо выставил очередь 123456 [ Q_N ] показывает следующую после единицы цифру т.е. 2, ну и.т.д. это как раз мой вариант, а если присвоить глубине 5 (очередь остается в таком же порядке 123456), то после единице в переменной [ Q_N ] отразится 6, пропускаются показания 2345 совсем не мой вариант, но может для кого и пригодится. Честно говоря не понял смысла, глубина просмотра.
Сохранил проект, открыл заново, да биты в свойствах не сохранились.

Всё правильно работает! Ну, если Вам нужно знать только следующий выход, что включится после выключения текущего активного выхода, то и заморачиваться не стоит с глубиной очереди(установите "глубине" значение "1")!
По простому, это те выходы, что будут включаться после следующего в очереди выхода и так далее до конца очереди, если очередь длинная!
И, теперь, как я понимаю, к проекту ОЛ придётся прилагать карты настроек макросов, иначе ничего не заработает, настройки не сохраняются, хорошо хоть не все!
Раньше в преведущем варианте проекта эти настройки хранились гораздо глубже и прекрасно сохранялись:

61313

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

corado
20.06.2022, 01:51
Спасибо за проделанную работу. Попозже сяду буду разбираться.

Сергей0308
30.07.2022, 17:10
Спасибо за проделанную работу. Попозже сяду буду разбираться.

Сейчас попробовал, что делал(пытался сделать) чуть больше месяца назад и всё получилось без проблем, просто чудеса в решете, короче проверяйте, теперь всё сохраняется!

61926

61927

Видать Овен в ОЛ память поправила, что бы набекрень не была!

И при желании или необходимости можно легко расширить очередь до 32 !

corado
12.08.2022, 16:50
ОК! Спасибо за 8 овл! кидаю в копилку.

Сергей0308
19.02.2023, 17:43
ОК! Спасибо за 8 овл! кидаю в копилку.

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

66022

Ещё немного усовершенствовал:

67205

corado
23.03.2023, 02:58
спасибо, думаю пригодится.

Сергей0308
23.06.2024, 17:00
спасибо, думаю пригодится.

Случайно попался старый проект, в смысле, добавил в макросе инверсию дискретных выходов, специально для вашего случая(проекта):

76815

А вот тоже самое, без инверсии:

76823

Вот убрал ненужные(лишние) преобразования(упаковки-распаковки) туда-сюда:

76967

76976

corado
01.07.2024, 23:45
Спасибо. Скачаю посмотрю, поизучаю:)

Сергей0308
02.07.2024, 14:36
Спасибо. Скачаю посмотрю, поизучаю:)

Макрос достаточно сложный для понимания, короче, если что не понятно - спросите!
Боюсь после объяснения принципа его работы станет очень простым и понятным, короче, каждый элемент или подмакрос(субмакрос) для чего-то предназначен, выполняет какую-то функцию!
Например входной макрос PUTBIT8 создаёт битовую маску входов, макрос RAMP_BIT разруливает одновременное включение-выключение более одного входа в течении одного цикла программы, приоритет у входов с большим числовым значением(можно, настройками субмакросов изменить приоритет на противоположный). Это может потребоваться например при включении ПР, когда включено более одного входа(подан сигнал логической "1") и т.д. и т.п.

76996

76997

76998

Для изменения приоритета на обратный(приоритет у входов с меньшим числовым значением) надо расположить значения настроек субмакросов в обратном порядке!

77011