Последний раз редактировалось 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.
Я же говорю: допустимое ускорение подаётся на вход блоку.
Ему передаётся:
enable
количество импульсов
ускорение при разгоне
ускорение при замедлении
Если вопрос только "в пропусках импульсов", то указываем "допустимое ускорение" и радуемся.
Блок будет правильно отрабатывать все движения, понимая пределы для данной установки.
Друг мой (или не друг). Вы хотите странного. Я уже сказал, что само по себе "время разгона" не несёт в себе достаточной информации.
Нужна ещё информация о том "какая скорость будет достигнута при этом разгоне".
Если очень уж хочется играться со временами, то можете потом сделать обёртку, которая вычисляет времена и всё такое.
Но, с точки зрения физики процесса, ускорение является основополагающей величиной, поэтому сам блок будет работать именно с ускорением.
Тащить лишнее преобразование "времени в ускорение" внутрь блока я не буду -- это лишь осложнит сам блок, и не принесёт абсолютно никакой пользы.
Тут не только "в физике" дело, а ещё и в том, что в фактических формулах время не фигурирует. Либо скорость, либо ускорение. Время -- нет.
Более того, если говорить об S кривых, то вы никогда не сможете вычислить "время разгона" для случая S кривой. Ну, даже если вы и сможете (вдруг?), то среднестатистический пользователь -- точно нет.
Поэтому вынесение параметра "время разгона" будет мешать дальнейшим улучшениям блока. S-кривую уже просто так не получится добавить, т.к. у S-кривой понятие "время разгона" весьма относительно.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:42.
По вашему предельную частоту и время разгона надо держать в голове чтобы вычислить предельное ускорение. По моему ничего в голове держать и вычислять не надо, а надо тупо на входе блока задать предельную частоту и время разгона.
Последний раз редактировалось Newcomer; 25.09.2016 в 22:43.
А?
Кто запрещает в коде указать:
stepper(quantity := 300, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо 400 импульсов? Вот 400:
stepper(quantity := 400, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо 10? Вот 10:
stepper(quantity := 10, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо просто раскрутить до 60 имп/сек и пусть фигачит?
stepper(quantity := -1, max_speed := 60, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо раскрутить до 5000имп/сек?
stepper(quantity := -1, max_speed := 5000, accel_ramp := 10000/10, decel_ramp := 10000/20, enable:=...) ?
Надо просто сделать 100 импульсов на частоте 60Гц?
stepper(quantity := 100, max_speed := 60, accel_ramp := 0, decel_ramp := 0, enable:=...) ?
В таком коде можно без проблем менять max_speed, можно без проблем менять quantity.
И никаких вычислений "времени разгона" делать не нужно.
Числа 10000/10, как я говорил, берутся "из пальца, что установка без проблем разгоняется до 10000 за 10 секунд". Хотите того или нет, но подобные числа в любом случае придётся откуда-то брать.
Вы ШД как выбираете? Не по цвету же?
А теперь покажите, как будет выглядеть предлагаемый вами вариант. Хотя бы для случая 300/400 импульсов.
Последний раз редактировалось Владимир Ситников; 25.09.2016 в 22:53.
Так бы сразу и написали, что у вас проблемы с делением в коде. Я вас про это сразу спросил.