Просмотр полной версии : ПР200 помогите решить задачку
Есть макрос постановки в очередь, любезно предоставленный мне уважаемыми специалистами общающимися в этом разделе.
И так, есть пять входов 1-2-3-4-5 и соответственно пять выходов, выставляю например очередность входов в таком порядке 3-2-1-5-4,
61229
сначала включается выход 3, остальные выключены, выключаю вход 3, выход 3 выключается и согласно поставленной очереди включается выход 2,
61230
ну и так далее согласно постановки в очередь, далее вывожу на первую строку экрана ПР200 очередность включенного в данный момент выхода.
А вот как сделать так чтобы вывести на вторую строку какой выход будет включен следующим ни как не соображу ( а согласно выше приведенному примеру должен включиться 2ой выход).
Последовательность включения входов может быть любая и естественно видно какой выход работает а вот какой будет следующий и как это реализовать?:confused:
так вы очередь выставляете ручками в программе, потому вы заранее знаете и можете что угодно когда угодно вывести в хамскую
Гыыыы:), нет, не ручками, этот макрос стоит в программе и там может быть любая последовательность и иногда требуется знать какой следующий выход будет открыт.
Последовательность переключения выходов задает последовательность приходящих сигналов на входы. Ткните плиииз мордой лица в правильное направление.
Сергей0308
16.06.2022, 05:25
Гыыыы:), нет, не ручками, этот макрос стоит в программе и там может быть любая последовательность и иногда требуется знать какой следующий выход будет открыт.
Последовательность переключения выходов задает последовательность приходящих сигналов на входы. Ткните плиииз мордой лица в правильное направление.
Можно применить(поставить) второй такой макрос и для определения следующего выхода, "гасить" вход, соответствующий текущему активному выходу, это как бы самое очевидное решение, боюсь, могут быть и другие.
И, зачем у макросов обрезать входы-выходы(тем более, что элементы макроса остаются), у Вас их дефицит в программе? Может проще их не использовать?
Короче, если в следующей программе, Вам понадобится очередь более чем из пяти входов-выходов, будете(придётся) опять макросы переделывать(изменять)? Тогда для Вас логично было бы отказаться от макросов!
Или в самом макросе добавить выход 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
Так "кишки" макроса никто и не думал скрывать!
Это было не претензия к вам, а руководство к действию ТС.
Вы - молодца. Столько полезного кода! Спасибо!
Сергей0308. Спасибо Вам за помощь, вообще то в программе он не урезанный а то что я выложил это были эксперименты.
Сергей спасибо огромное за помощь, проверил, работает как надо, завтра воткну в программу. Век живи век учись:)
Сергей0308 ну если ваш макрос не знает, который выход будет следующим то да, я это себе никак не представляю, а если знает, то почему не добавить просто выход для индикации следующего и например текущего в цифровом виде?
Для показа на экране Текущий Шаг = #2, Следующий Шаг = #5 ????
з.ы. но вам виднее
Сергей0308
17.06.2022, 10:12
Сергей0308 ну если ваш макрос не знает, который выход будет следующим то да, я это себе никак не представляю, а если знает, то почему не добавить просто выход для индикации следующего и например текущего в цифровом виде?
Для показа на экране Текущий Шаг = #2, Следующий Шаг = #5 ????
з.ы. но вам виднее
Вы воспринимаете мой макрос как разумное существо, поверьте на слово, что это далеко не так!
На каждый выход в макросе имеется свой элемент(подмакрос) в котором определяется какой выход должен сработать(включится), тогда придётся добавлять в этот подмакрос дополнительный выход и элементы сравнения для определения следующего выхода, что будет включён при выключении текущего активного выхода, короче подобно как и для основного выхода, конечно, это не трудно и не сложно!
Если бы я изначально макрос создавал с таким Т.З. наверно и сделал бы нечто подобное!
Но, так как мы находимся не на нулевой отметке, то можно поступить ещё проще, ничего не переделывая(уже писал об этом), в смысле, добавить второй макрос, что у нас уже есть, для решения дополнительной задачи, которая изначально не стояла, при создании этого макроса. Вроде, простые истины, чего здесь может быть непонятным?
А вывести в целочисленном виде следующий в очереди выход ничто и сейчас не помешает, достаточно добавить макрос вставки(записи) бит и шифратор!
Примерно так:
61274
61264
Сергей0308 опять вы лепите owl который не все смогут посмотреть... з.ы. я просто предположил что если есть макрос, который и так все рассчитывает, то добавить в него всего один выход будет более экономически целесообразным., особенно учитывая, что в одну переменную можно закинуть сразу весь список шагов и его потом отобразить уже внешними средствами (раздробив эту переменную на несколько цифр)
Сергей0308
17.06.2022, 12:00
Нет, в целочисленном виде сложнее получится, так как изначально из макроса выходят булевы выходы, затем уже булевой выход преобразуется в целочисленное значение соответствующее номеру выхода!
Сергей0308 ага, я уже накатил ОЛ и посмотрел, действительно проще второй макрос...
Сергей0308
18.06.2022, 22:25
Сергей0308 ага, я уже накатил ОЛ и посмотрел, действительно проще второй макрос...
Вот как Вы хотели вывел из макроса в целочисленном виде оба выхода, основной(текущий) и следующий в очереди:
61283
В макросе преобразовал булевы выходы в значения соответствующие номеру выхода, потом, вне макроса очередь разбил на биты(вернул первоначальный облик), короче двойное преобразование.
Как я и предполагал, получилось в несколько раз сложнее, даже определить следующий в очереди выход оказалось намного сложней, чем основной(текущий)!
61284
Алексеев
19.06.2022, 07:01
Вот как Вы хотели вывел из макроса в целочисленном виде оба выхода, основной(текущий) и следующий в очереди:
61283
В макросе преобразовал булевы выходы в значения соответствующие номеру выхода, потом, вне макроса очередь разбил на биты(вернул первоначальный облик), короче двойное преобразование.
Как я и предполагал, получилось в несколько раз сложнее, даже определить следующий в очереди выход оказалось намного сложней, чем основной(текущий)!
61284
Хочу посмотреть и оценить твой талант , но не могу открыть первый раз такое . :confused:
61289
Хочу посмотреть и оценить твой талант , но не могу открыть первый раз такое . :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) можно спокойно определять(просматривать) очерёдность включения выходов.
Для первого варианта решения потребовалось для такого функционала применение дополнительного макроса и элементов обвязки на каждую ступень очереди!
Вот я озадачил, не думал что кому то это тоже будет интересно, теперь и самому интересны стали новые решения, Сергей спасибо, сижу разбираюсь, мозги напрягаю:)
Сергей0308
19.06.2022, 18:13
Вот я озадачил, не думал что кому то это тоже будет интересно, теперь и самому интересны стали новые решения, Сергей спасибо, сижу разбираюсь, мозги напрягаю:)
И как успехи, разобрались как это всё работает, по какому алгоритму?
Вот последняя модификация с возможностью просмотра очереди на всю глубину:
61305
61306
Чтобы работало нужны такие настройки:
61307
Настройки почему-то не хотят сохраняться, наверно это вопросы к представителям Овена!
В преведущей версии всё сохранялось, наверно не надо макросы переделывать, а лучше создавать заново, это я так думаю о причинах, почему макрос нормально не работает!
И, любопытно, после оперативного восстановления нужных настроек(после открытия проекта), при залитии проекта в ПР всё нормально зальётся? Или в ПР не будет работать?
И как успехи, разобрались как это всё работает, по какому алгоритму?
Вот последняя модификация с возможностью просмотра очереди на всю глубину:
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
Когда я макросу дополнительный вход присобачил, тогда эти настройки перестали сохраняться, я, пытаясь поправить безнадёжное положение, выводил их всё выше и выше, но сохранение не работало, сразу при закрытии макроса настройки сбивались(не сохранялись) пока на самый верх не вывел, просто засада какая-то!
Этими настройками задаётся с каким битом(входом) макрос работает(там отдельный макрос на каждый выход), при включении какого входа становится в очередь(проще говоря).
Спасибо за проделанную работу. Попозже сяду буду разбираться.
Сергей0308
30.07.2022, 17:10
Спасибо за проделанную работу. Попозже сяду буду разбираться.
Сейчас попробовал, что делал(пытался сделать) чуть больше месяца назад и всё получилось без проблем, просто чудеса в решете, короче проверяйте, теперь всё сохраняется!
61926
61927
Видать Овен в ОЛ память поправила, что бы набекрень не была!
И при желании или необходимости можно легко расширить очередь до 32 !
ОК! Спасибо за 8 овл! кидаю в копилку.
Сергей0308
19.02.2023, 17:43
ОК! Спасибо за 8 овл! кидаю в копилку.
Вот, устранил некоторые ограничения, нельзя было одновременно(в течении одного цикла программы) включать и отключать входа, теперь, вроде, без ограничений, приоритет у входов-выходов с менышим числовым значением(если одновременно их включать или отключать):
66022
Ещё немного усовершенствовал:
67205
спасибо, думаю пригодится.
Сергей0308
23.06.2024, 17:00
спасибо, думаю пригодится.
Случайно попался старый проект, в смысле, добавил в макросе инверсию дискретных выходов, специально для вашего случая(проекта):
76815
А вот тоже самое, без инверсии:
76823
Вот убрал ненужные(лишние) преобразования(упаковки-распаковки) туда-сюда:
76967
76976
Спасибо. Скачаю посмотрю, поизучаю:)
Сергей0308
02.07.2024, 14:36
Спасибо. Скачаю посмотрю, поизучаю:)
Макрос достаточно сложный для понимания, короче, если что не понятно - спросите!
Боюсь после объяснения принципа его работы станет очень простым и понятным, короче, каждый элемент или подмакрос(субмакрос) для чего-то предназначен, выполняет какую-то функцию!
Например входной макрос PUTBIT8 создаёт битовую маску входов, макрос RAMP_BIT разруливает одновременное включение-выключение более одного входа в течении одного цикла программы, приоритет у входов с большим числовым значением(можно, настройками субмакросов изменить приоритет на противоположный). Это может потребоваться например при включении ПР, когда включено более одного входа(подан сигнал логической "1") и т.д. и т.п.
76996
76997
76998
Для изменения приоритета на обратный(приоритет у входов с меньшим числовым значением) надо расположить значения настроек субмакросов в обратном порядке!
77011
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot