Показано с 1 по 10 из 688

Тема: Программирование ПЛК110 [М02] для задач реального времени

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    По умолчанию

    Сделал вычисление разгона-торможения.

    Всё основывается на четырёх параметрах:
    Код:
    input quantity : DWORD;  (* Общее количество импульсов *)
    input accel_ramp : DWORD; (* Ускорение имп/сек^2 *)
    input decel_ramp : DWORD; (* Замедление имп/сек^2 *)
    input max_speed : DWORD; (* Максимально допустимая скорость имп/сек *)
    Иными словами, на вход подаём "сколько нужно проехать и какие ограничения скорости", и в результате оно само планирует как именно ехать.

    Текущее ограничение -- разгон до макс скорости должен укладываться в 232-1.
    По-моему, этого должно хватать на все разумные случаи.
    Например:
    1) если макс скорость составляет 100кГц, то разгон нужно выполнить не дольше, чем за 11 часов (==((1<<32)-1)/100000/3600).
    2) если макс скорость составляет 10кГц, то разгон нужно выполнить не дольше, чем за 119 часов (==((1<<32)-1)/10000/3600).

    Примеры графиков.
    На каждом из графиков после расчётного количества импульсов блок начинает выдавать статус "приехали, больше не надо"

    3500 импульсов, разгон 500 имп/сек2, торможение 1000 имп/сек2
    move_3500steps_1kHz_500_1000_output.png

    CPU %:
    На этом графике видно, что "подготовка" действительно занимает какое-то время.
    Тут это было 768 тактов, т.е. целых 5.1 мкс. Не исключено, что можно соптимизировать, но деления-умножения там делать приходится.
    Первый генерируемый импульс составляет 42.7 мс, и все вычисления просто немного сокращают длительность "ожидания".
    move_3500steps_1kHz_500_1000_cpu_use.png

    2250000 импульсов, разгон 5000 имп/сек2, торможение 6666 имп/сек2
    move_2250000steps_100kHz_5000_6666_output.png

    CPU %:
    Тут подготовка была 867, т.е. 5.8 мкс.
    move_2250000steps_100kHz_5000_6666_cpu_utilization.png

    А теперь сделаем короткое передвижение (так, что максимальная скорость не достигается).
    1000 импульсов, разгон 500 имп/сек2, торможение 1000 имп/сек2

    move_1000_100khz_500_1000.png


    Теперь осталось:
    1) добавить "общий цикл", который будет моргать выходом и передавать параметры
    2) добавить "экстренное торможение" (если enable переходит в false раньше времени, то вычислить торможение и начать это самое торможение)
    Последний раз редактировалось Владимир Ситников; 24.09.2016 в 23:38.

Похожие темы

  1. Ответов: 38
    Последнее сообщение: 24.01.2022, 11:56
  2. Ответов: 10
    Последнее сообщение: 11.06.2021, 14:55
  3. часы реального времени
    от vetaly в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 28.08.2015, 16:21
  4. Таймер реального времени УТ1-РiС
    от ser10 в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 16.09.2010, 12:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •