Вот один из последних вариантов.
Вид для печати
А вот это просто. Работайте через Старт/Стоп.
1. Заведите булевую переменную (например, СтартСтоп);
2. Отключайте ей через И управляющий сигнал, подаваемый на выход;
3. Синхронизируйте ей через И все сигналы включения макросов режима;
4. На экране с выбором программы сделайте в другой строчке выбор режима Старт/Стоп;
5. Переключите управление координатой Х поля выбора программы работы с константы на переменную (например, координата). Через SEL управляйте значением этой переменной. Пусть, например, при СтартСтоп=0 координата=0, а при СтартСтоп=1 координата =20.
Тогда последовательность действий оператора будет следующей:
Выбор программы в режиме Стоп. Все выходы отключены.
Включение режима Старт. Выходы работают в соответствии с программой. Поле выбора программы исчезает и оператор не может ничего изменить.
Включение режима Стоп после выполнения программы или в процессе её выполнения. Поле выбора программы появляется. Все выходы отключены.
Выбор новой программы.
Aviator_VZh еще раз, о каких 3-х макросах вы толкуете ? в них будет все та же сотня FBD внутри или до сих пор не поняли задачу ?
Чем мой вариант не устроил, что я ссылку давал, там в ПЗУ можно и время задавать и количество циклов повторения, много раз писал в нескольких темах и примеры(проекты) приводил, больше писать не хочу, уже надоело повторять одно и тоже и там нет элементов "И", хотя можно как угодно сделать!
Вложение 39903
Сергей0308 умножьте на 100, влезет в ПР ?
И еще добавлю, у вас каждый выход имеет собственную диаграмму работы, не зависимую от других выходов ?
Наверно это плюс, если можно отдельно каждый выход настроить на нужный алгоритм работы, у Вас другое мнение?
Мне кажется по такому макросу на каждый выход(5 штук) будет достаточно! Для совместной работы ничто не мешает например один счётчик(единое управление) на весь колхоз поставить!
Вы лучше на своем примере, который устали выкладывать повторите этот алгоритм работа от автора темы http://www.owen.ru/forum/attachment....4&d=1542619586
Чтобы все временные диаграммы совпали :). Автор не знает как сделать проще, а настроить ваше ПЗУ под один только алгоритм, придется застрелиться.
Вот ещё проект, описание в нескольких темах делал! Одна из тем: http://www.owen.ru/forum/showthread.php?t=27739&page=3 и эту посмотрите: http://www.owen.ru/forum/showthread.php?t=23201&page=13
Вложение 39909
Василий, а не могли бы Вы еще раз БУСП свой скинуть......найти не могу на форуме.....или ссылку где его искать....
Заранее благодарен!
Aviator_VZh вы чудо, у автора 100 алгоритмов на 5 выходов каждый, каждый выход потребует в макросе 100 FBD только для выбора от какого алгоритма управляется и как минимум по 2 FBD на каждый алгоритм для его выбора и блокировки, еще 200 FBD на выход.
Хоть вы их в макрос запакуйте, хоть не пакуйте разницы нет, FBD будет овердофига даже без условий количества FBD самих алгоритмов...
ЗАЧЕМ ?????
Ведь вариант самого алгоритма, который показал автор, решается при помощи ОДНОГО макроса на выходе и правильно настроенных ПЗУ с временными уставками для алгоритма и собственно выбора варианта.
Сергей0308 в 44 кстати предложил вариант, который БУДЕТ работать, только тому, кто настраивать сами алгоритмы придется ой как не весело.
Например если сделать дискретность времени равной 0,1 сек, то на показанный алгоритм автора потребуется 12 ячеек памяти на один алгоритм. Возьмем с запасом 16 ячеек. ПЗУ там на 256 ячеек / 16 = 16 алгоритмов. так что 7 таких ПЗУ и всего один макрос на выходе решают проблему автора.
з.ы. еще раз скажу, настраивать временные диаграммы придется очень туго, но можно. Например воспользовавшись экселем...
А вот интересно, ОЛ делает из макроса подпрограмму(функцию) или нет?Цитата:
Хоть вы их в макрос запакуйте, хоть не пакуйте разницы нет
В зависимости от ответа должна быть разница если на холст поместить десять одинаковых макросов по десять элементов в каждом или просто 100 этих элементов.
petera ну разработчики уверяли, что FBD внутри макроса для программы полностью прозрачны. Это всего лишь удобство.
К стати задавали вопрос - сколько влезет ФБ
16384
Вложение 39921
Ого, раньше было намного меньше... тогда и в лоб можно 100 алгоритмов наверное загнать :)
Я и говорю с первого поста, что задачу можно решить в лоб. И в этом случае встает вопрос как уменьшить количество ФБ на холсте для упрощения работы.
А для этого нужно:
1. Ввести внутрь макроса программы первый SEL выбора. пост №4
2. Ввести внутрь макроса программы И для управления выходом. пост №27
3. Ввести внутрь макроса программы вход Старт/Стоп. пост №42
4. Просуммировать выходы Х, Y, ...макросов программы с помощью макросов BOOL_INT. пост №35
5. Результат подать на выход ПР
При этом получаем на холсте только 100 макросов программы управления, 15 макросов BOOL_INT и 9 ADD. Если программ больше 96, то недостающие входы макросов BOOL_INT можно добить ИЛИ.
Кроме того, все временные настройки и номера программ можно вытащить в свойства макроса и настраивать с холста основной программы.
PS Прикинул расход ПЗУ. Должно хватить с запасом.
Можно 100 программ впихнуть в гораздо меньшее количество макросов, и тем более FBD, если делать не в лоб.
Не сомневаюсь. пост №2
Я вот нашёл здесь логику и попробовал сделать на регистре сдвига:
Вложение 39950
Как минимум в 3 раза сократилось количество временных уставок!
И если коммутировать целочисленный выход, можно свести 6 выходов макросов в одну целочисленную переменную(через сдвиг), каждый макрос занимает 5 бит, всего в переменной 32 бита, останется мультиплексор целочисленный придумать на 17 входов, типа такого:
Вложение 39951
Всё!
Как один из вариантов коммутации для моего преведущего таймера на регистре сдвига:
Вложение 39954
Наверно проще, 6 мультиплексоров поставить?!
И, если все макросы похожие, отличаются только значением уставки, может проще уставку изменить?
Сергей0308 интересно, как вы нашли логику ста алгоритмов по одному примеру ? :)
Это ваши предположения или фантазии? Вообще то логика везде присутствует, ради этой логики и ПР применяют, раньше тему обсуждали про генератор случайных чисел, наверно Вам не помешало бы туда заглянуть, так сказать, освежить свою память! Я о том, что не просто создать что-то непредсказуемое(случайное), но даже случайное, это совсем не значит нелогичное(без логики), как-то так!
Не знаю, что там у автора за примеры других программ, но временные уставки могут быть очень разными для каждой программы в отдельности без всякой логики, если не знать конечного результата. При чем настолько разными, что логики может не быть.
В примере дискретность 0,2 сек для каждого отдельного элемента, но ведь дискретность может быть и 0,3 и 0,1 как для всех выходов, так и отличаться для каждого выхода быть своя.
з.ы. вообще нужен автор, чтобы привел хотя бы 10-ок примеров программ, которые он хотел применять.
Ваш алгоритм легко перенастроить на такой вариант программы например ? Логика, найденная по первому примеру потянет второй ?
Нужно нарисовать, а не объяснять, ну или ссылкой на пример. Вот https://kipservis.ru/finder/tajmery_80.01.htm к примеру - смотреть Функции и диаграммы работы
Конечно нужно нарисовать, а не объяснять словами, я об этом и сказал, нечто такое:
Вложение 39984
И я об этом же в 37 посту писал. http://www.owen.ru/forum/showthread....l=1#post293053
ага.не видел просто!ну программа у меня иная.она для соотношения.а вот макрос БУСП нужен с меняющейся скважностью и частотой импульсов.буду пробовать коэфф. баловаться там.спасибо
Может можно датчик положения поставить(использовать), тогда и эти все примочки станут не нужны! Примерно как-то так:
Вложение 39996
Ранее я писал, что Вам проще уйти от хитрых схем и менять только задержки, тем более, что Вы написали что только их требуется задавать.
В приложении мой пример чего я хотел сказать.
Если подать 0 на вход макроса, то он обнулит таймаут, т.е. если сделать 0 программу, она будет сбросом. Помогает не ждать завершения программы, 0 программу можно принудительно запускать перед запуском выбранной оператором программы. (к блинк можно точно так же прикрутить макрос и для задания времени задержек и для сброса) Все задержки задаются в мс. Соответственно в макрос можно добавит нужное Вам количество выходов, и прикрепить задержки соответствующие каждой программе.
Я нарисовал вторую часть, т.е. реализацию задания задержек в зависимости от выбранной программы. За кадром остается выбор программы на экране и что будет являться триггером на запуск самой программы. Т.е. к этой части прикрутить экран, добавить нужное кол-во задержек и будет счастье.
Меня больше интересует минимальный шаг(ступенька) в каждом из макросов, а коэффициент умножения после макроса можно любой поставить, тогда в одной переменной можно было хранить не одну уставку, а несколько(например 4 уставки диапазона 0-255) и возможно удастся обойтись энергонезависимой памятью для 100 макросов, тогда программа станет более универсальная, уставки можно будет менять с экрана, мало ли что, я нечто подобное делал в проекте "Термостат":http://www.owen.ru/forum/showthread.php?t=29803&page=5 и других проектах!