Я вот нашёл здесь логику и попробовал сделать на регистре сдвига:
На регистре сдвига.PNG
Как минимум в 3 раза сократилось количество временных уставок!
И если коммутировать целочисленный выход, можно свести 6 выходов макросов в одну целочисленную переменную(через сдвиг), каждый макрос занимает 5 бит, всего в переменной 32 бита, останется мультиплексор целочисленный придумать на 17 входов, типа такого:
MUL8IR.PNG
Всё!
Как один из вариантов коммутации для моего преведущего таймера на регистре сдвига:
Мой вариант_4.PNG
Наверно проще, 6 мультиплексоров поставить?!
И, если все макросы похожие, отличаются только значением уставки, может проще уставку изменить?
Последний раз редактировалось Сергей0308; 21.11.2018 в 02:19.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Ранее я писал, что Вам проще уйти от хитрых схем и менять только задержки, тем более, что Вы написали что только их требуется задавать.
В приложении мой пример чего я хотел сказать.
Если подать 0 на вход макроса, то он обнулит таймаут, т.е. если сделать 0 программу, она будет сбросом. Помогает не ждать завершения программы, 0 программу можно принудительно запускать перед запуском выбранной оператором программы. (к блинк можно точно так же прикрутить макрос и для задания времени задержек и для сброса) Все задержки задаются в мс. Соответственно в макрос можно добавит нужное Вам количество выходов, и прикрепить задержки соответствующие каждой программе.
Я нарисовал вторую часть, т.е. реализацию задания задержек в зависимости от выбранной программы. За кадром остается выбор программы на экране и что будет являться триггером на запуск самой программы. Т.е. к этой части прикрутить экран, добавить нужное кол-во задержек и будет счастье.
Последний раз редактировалось Sel; 25.11.2018 в 02:41.
Конечно не такНО переменные выделенные красным цветом не хотят назначаться!
Может быть я что то не так делаю?
Нужно выходы макросов по ИЛИ объединять
в простейшем случае
Захват-1.png
Последний раз редактировалось petera; 19.11.2018 в 12:49.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
В более расширенном варианте
Захват-2.png
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
NikitaR
1. выбираете по номеру свой алгоритм, как вам предложили выше, но с блокировкой, дабы другой макрос, кроме выбранного не работал, то есть blink с 0 на входе.
2. Как предложил petera объединяете одноименные выходы через OR
Другой подход - Возьмите за основу макрос ПЗУ и сделайте на выходе ОДИН макрос. А все временные задержки пропишите в ПЗУ, и выбирая номер программы у вас все будет меняться и работать через ОДИН макрос. Сильно сэкономите по количеству FBD. при чем ОЧЕНЬ сильно.
Если есть некоторые отличия в программах, можно сделать 2,3 или нужное количество требуемых макросов + ПЗУ и уже только их менять как в первом варианте.
NikitaR я вам сразу сказал, что при таком решении будет космическое количество блоков.
a petera вам уже нарисовал расширенный вариант, только он там выходы блокировал.
И еще один момент, посмотрите по документации ОЛ как начинает работать его blink, кажется с паузы, в принципе если так устраивает то и ладно.
Макрос ПЗУ посмотрите в темах о макросах или даже в онлайн базе
EPROM или EEPROM еще может называться.
Да видимо с паузы.
В идеале в программу нужно ввести такое значение как базовое состояние(исходное положение) каждого исполнительного механизма (к примеру 0).
Т.К. Если менять программы с одной на другую, то получается, что одна программа не успевает завершиться, и сразу перескакивает на другую, и получается некий конфликт.
Т.Е. нужно что бы либо каждая программа завершалась до конца, и лишь потом перескакивала, либо перед переходом на другую программу, значение(номер программы) переключать на 0.
К примеру: работает программа №55, а мне нужна №66, перед переходом на №66, я сперва перехожу на программу №0, в программе №0 все исп. механизмы приходят в исходное положение 0, и лишь потом я уже перехожу на программу №66,
№55 => №0 => №66 => №0 => №35 => №0 => №99 => №0..... и т.д.