Последний раз редактировалось Newcomer; 25.09.2016 в 22:15.
Нет, понятнее не будет. Уверяю вас.
Объясню на примере: нужно сделать 300 импульсов, предельная скорость 60 импульсов/сек.
Внимание, вопрос: какое время разгона/торможения ставить?
Потом оказывается, что нужно сделать 400 импульсов.
Какое время разгона/торможения ставить?
Уже здесь будет огромная проблема, т.к. даже если есть "время разгона/торможения для 300 импульсов, то совершенно неясно какие времена должны быть для 400"
Более того. Вот реальная проблема, которая не позволяет сделать ФБ "по вашему ТЗ".
Допустим, вы указали: "разгон за 5 секунд, торможение за 5 секунд, макс скорость 60 импульсов/сек, всего нужно 300 импульсов".
Внимание, вопрос: как должен действовать ФБ?
Должен ли он за первые 5 секунд пытаться выйти на макс скорость?
Так вот: для каждой конкретной установки, ускорение и замедление -- константы. Т.е. их вообще изменять не нужно. Достаточно либо подобрать (опытным путём), либо методом тыка (поделить 10'000 Гц на желаемую длительность разгона до этой скорости) вычислить и всё.
В итоге, на вход блоку нужно только "количество импульсов".
Надо 300 импульсов -- блок сделает 300, вычислив сколько нужно разгоняться и сколько тормозить. Блок поймёт успеваем ли выйти на макс скорость или нет.
Поэтому, ещё раз повторюсь: если сделать "указание времён", то будут проблемы "200 импульсов отрабатывает нормально, а на 250 пропуски". Будут вечные игры с подбором времени и т.п.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:22.
Последний раз редактировалось Newcomer; 25.09.2016 в 22:28.
Появится реальный проект на моём алгоритме -- узнаем кто из нас не понимает.
Давайте конкретику.
Если при разгоне за 10 секунд до 10кГц нет проблем, то проблем не будет разогнаться до 3кГц за 3 секунды, до 20кГц за 20 секунд и т.п. (ну, если скорость в пределах допустимого для движка/установки)
Поэтому я и говорю, что первично ускорение (X кГц/сек), а конкретная "длительность разгона" уже вторична.
Я же говорю: допустимое ускорение подаётся на вход блоку.
Ему передаётся:
enable
количество импульсов
ускорение при разгоне
ускорение при замедлении
Если вопрос только "в пропусках импульсов", то указываем "допустимое ускорение" и радуемся.
Блок будет правильно отрабатывать все движения, понимая пределы для данной установки.
Друг мой (или не друг). Вы хотите странного. Я уже сказал, что само по себе "время разгона" не несёт в себе достаточной информации.
Нужна ещё информация о том "какая скорость будет достигнута при этом разгоне".
Если очень уж хочется играться со временами, то можете потом сделать обёртку, которая вычисляет времена и всё такое.
Но, с точки зрения физики процесса, ускорение является основополагающей величиной, поэтому сам блок будет работать именно с ускорением.
Тащить лишнее преобразование "времени в ускорение" внутрь блока я не буду -- это лишь осложнит сам блок, и не принесёт абсолютно никакой пользы.
Тут не только "в физике" дело, а ещё и в том, что в фактических формулах время не фигурирует. Либо скорость, либо ускорение. Время -- нет.
Более того, если говорить об S кривых, то вы никогда не сможете вычислить "время разгона" для случая S кривой. Ну, даже если вы и сможете (вдруг?), то среднестатистический пользователь -- точно нет.
Поэтому вынесение параметра "время разгона" будет мешать дальнейшим улучшениям блока. S-кривую уже просто так не получится добавить, т.к. у S-кривой понятие "время разгона" весьма относительно.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:42.
По вашему предельную частоту и время разгона надо держать в голове чтобы вычислить предельное ускорение. По моему ничего в голове держать и вычислять не надо, а надо тупо на входе блока задать предельную частоту и время разгона.
Последний раз редактировалось Newcomer; 25.09.2016 в 22:43.