Страница 26 из 69 ПерваяПервая ... 16242526272836 ... ПоследняяПоследняя
Показано с 251 по 260 из 688

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

  1. #251
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну не томите, поделитесь
    как себя ведет движок, если с плк ему задать полный не адекват ошибка или все же некая отработка задания
    А что задать?
    Я пытался как мог, все работает. (Описал вроде ранее)
    Либо скорость большая и на выходе ошибка.
    Вариантов то немного))

  2. #252

    По умолчанию

    Разберём то, какие команды выдаёт ФБ дельты.


    В двух словах:
    0) График частоты от импульсов в документации дельты неправильный. А чего вы хотели от документа 2006 года?
    1) При использовании ступенек дельта генерирует рваный ритм движения -- это нехорошо ни для оборудования, ни для пропуска импульсов
    2) Если количество ступенек равно количеству импульсов на разгон, то ритм уже не рваный, но при этом нагрузка на ШД увеличением скорости тоже растёт, а у всех ШД крутящий момент с увеличением скорости лишь падает. Т.е. с точки зрения использования характеристик ШД алгоритм странный

    Но там есть ещё одно но. Я не знаю с какой точностью дельта может выдерживать частоту.
    В вычислениях ниже предполагается, что точность частоты импульсов выдерживается точно.


    На 93-ей странице показано как устроен алгоритм разгона.
    Снимок экрана 2016-09-27 в 0.11.42.png

    Из этого можно вынести, что разгон выполняется по ступенькам. На каждой ступеньке одинаковое количество импульсов, количество ступенек задаётся пользователем.

    Дальше там рассматривается случай: "начальная скорость 1кГц, конечная 10кГц, 100Гц шаг ступеньки, 10000 импульсов на весь разгон".
    Рассчитаем этот случай: должно быть (10'000Гц-1'000Гц)/(100Гц/ступенька) == 90 ступенек. В каждой из них примерно по 111 = 10000/90 импульсов.

    Строить будем в r-system
    Код:
    delta <- data.table(i=seq(1, 10000))
    delta[, freq := ((i-1) %/% 111) * 100 + 1000] # %/% это целочисленное деление
    delta[, dt := 1/freq]
    delta[, t:=cumsum(dt)] # сумма интервалов с накоплением
    
    ggplot(delta, aes(i, freq))+geom_point()+scale_x_continuous("Количество импульсов")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц шагами по 100Гц за 10000 импульсов")
    График "частота от количества проделанных импульсов" выглядит почти линейно. Ну, разумеется, там же все ступеньки одинаковой длины, и ступенек 90 штук. Выглядит как ломанная прямая.
    Уже тут становится очевидно, что в документации delta косяк. По крайней мере, в русской версии.

    Теоретический график
    delta_ramp_puls.png

    А вот что у дельты:
    Снимок экрана 2016-09-27 в 0.23.47.png
    Ясно видно, что у них неправильно изображена форма "разгона". Скорее всего, это ошибка copy-paste. Т.е. они тупо скопировали другой график и не подумали, что реально график так выглядеть не будет.
    Copy-paste или нет, но это 100% ошибка дельты.


    Посмотрим как будет выглядеть график "частота от времени":
    Код:
    ggplot(delta, aes(t, freq))+geom_point()+scale_x_continuous("Время, сек")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц шагами по 100Гц за 10000 импульсов")
    delta_ramp_time.png

    Тут график похож на тот, который показан в документации. В документации говорится, что "макс частота" достигается через 2606мс, а, согласно нашим вычислениям это должно произойти через 2607 мс. Совпало с точностью до миллисекунд -- т.е. норм.
    Код:
    > tail(delta, 15)
            i  freq           dt        t
     1:  9986  9900 0.0001010101 2.606330
     2:  9987  9900 0.0001010101 2.606431
     3:  9988  9900 0.0001010101 2.606532
     4:  9989  9900 0.0001010101 2.606633
     5:  9990  9900 0.0001010101 2.606734
     6:  9991 10000 0.0001000000 2.606834
     7:  9992 10000 0.0001000000 2.606934
     8:  9993 10000 0.0001000000 2.607034
     9:  9994 10000 0.0001000000 2.607134
    10:  9995 10000 0.0001000000 2.607234
    11:  9996 10000 0.0001000000 2.607334
    12:  9997 10000 0.0001000000 2.607434
    13:  9998 10000 0.0001000000 2.607534
    14:  9999 10000 0.0001000000 2.607634
    15: 10000 10000 0.0001000000 2.607734
    Эти миллисекунды не столь важны, как сама форма кривой.


    Попробуем посмотреть как зависит форма кривой от количества ступенек в лестнице.

    Код:
    d <- data.table()
    for(n in c(2, 4, 8, 16, 128)) {
      d2 <- data.table(i=seq(1, 10000))
      pulses_per_step <- 10000 %/% n
      d2[, freq := (i %/% pulses_per_step)*((10000-1000) %/% n) + 1000]
      d2[, dt := 1/freq]
      d2[, t:=cumsum(dt)]
      d2[, nsteps:=n]
      d <- rbind(d, d2)
    }
    ggplot(d, aes(t, freq))+geom_point()+scale_x_continuous("Время, сек")+scale_y_continuous("Частота, Гц")+ggtitle("Delta PLC, разгон от 1кГц до 10кГц")+facet_grid(nsteps~.)
    delta_ramp_vs_nsteps.png

    Особого смысла изучать случай "малого" количества ступенек нет. Понятно, что при ступеньках будут те самые рывки. Например, в случае когда всего 2 ступеньки, движок сначала долго фигачит на 1кГц, а потом бах -- сразу переключается на 5.5кГц.

    Кому интересно, может попробовать доказать, но, практика показывает, что кривая близка к экспоненте при увеличении количества шагов.

    Собственно, случай "на каждой ступеньке ровно по одному импульсу":

    Код:
    delta <- data.table(i=seq(1, 9000))
    delta[, freq := i+1000]
    delta[, dt := 1/freq]
    delta[, t := cumsum(dt)]
    ggplot(delta, aes(t, freq)) +
      geom_point() +
      scale_x_continuous("Время, сек") +
      scale_y_continuous("Частота, Гц") +
      ggtitle("Delta PLC, разгон от 1кГц до 10кГц")+
      geom_smooth(formula = log(freq) ~ t, color="red")
    delta_exp_fit.png

    О чём говорит "экспоненциальный закон изменения частоты от времени"?
    О том, что ускорение тоже экспоненциально возрастает от этого самого времени.

    Узнаем этот самый эксп. закон:
    Код:
    > lm(log(delta$freq) ~ delta$t)
    
    Call:
    lm(formula = log(delta$freq) ~ delta$t)
    
    Coefficients:
    (Intercept)      delta$t  
          6.908        1.000
    Иными словами, freq == exp(6.908)*exp(t) == 1000.245 * exp(t)
    Ускорение это производная от частоты, и она будет тоже равна 1000.245 * exp(t). Единицы измерения другие, но формула та же (просто у константы 1000.245 разная размерность, которая нас не волнует).

    Собственно, строим самый главный график: "нагруженности движка от частоты".
    Нагруженность движка линейно зависит от ускорения, поэтому достаточно построить график "ускорения от частоты".
    Но у нас же частота равна ускорению!

    Т.е. график будет выглядеть так:
    Код:
    ggplot(delta, aes(freq, freq)) +
      geom_point() +
      scale_x_continuous("Частота, Гц") +
      scale_y_continuous("Ускорение (нагрузка на ШД), Гц/сек") +
      ggtitle("Delta PLC, нагрузка на ШД при разгоне от 1кГц до 10кГц")
    delta_load.png

    О чём это говорит? Кто догадался -- молодец.
    Кто не догадался -- расскажу.

    Возьмём график крутящего момента от скорости вращения для какого-нибудь ШД. Не абы какого, а такого, который у прибориста.
    На самом деле, у всех ШД этот график примерно одинаково выглядит, но проще оперировать реальными цифрами, а не мифическими.

    Собственно, ШД ES-MH33480
    График:

    Снимок экрана 2016-09-27 в 1.01.34.png

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

    Т.е. для эффективного использования мощности этого движка, нужно начинать с большого ускорения (задействовать мощный крутящий момент в начале), а потом сбавлять это самое ускорение, чтобы нагрузка на вал не превышала максимальный крутящий момент движка.

    Собственно на картинке:
    ideal_load.png

    Какие отсюда можно сделать выводы:
    1) В самом экспоненциальном разгоне смысла мало. Видно что красная кривая ("кривая дельты") упирается в скорость 10 rpm. И эту скорость никак не превысить. Разумеется, конкретная скорость зависит от конкретных цифр, но не суть. Я говорю, что "нет простого способа" сказать дельте "перестань увеличивать ускорение".
    Конечно, можно начать играться с количеством ступенек, то при перескоке с одной на другую могут быть неприятные дёрганья -- большие ускорения, а значит, возможны и выходы за кривую возможностей движка.

    Конечно, ещё есть вариант делать "составное движение", но если его для этого и будут использовать, то не от хорошей жизни, а от безысходности. Честно говоря, мне лень проверять, но, скорее всего, составное движение в случае дельты не поможет, т.к. движение от 1кГц до 5кГц шагами по 1Гц + движение от 5кГц до 10кГц шагами по 1Гц по факту будут выглядеть точно так же, как и движение от 1кГц сразу до 10кГц этими же шагами по 1Гц. Я просто не исключаю того факта, что в дельте-таки может быть какой-нибудь извратный способ разогнать ШД и при этом не наращивать ускорение при самом разгоне.

    2) Кривая с постоянным ускорением тоже рано или поздно упирается в предел движка. Т.е. на определённых оборотах движок уже не может поддерживать нужное ускорение.
    Но если реально нужны большие обороты, то можно просто с самого начала указать более маленькое ускорение.
    Да, время выхода на режим увеличится, но на режим выйдет.

    3) Крутящий момент нужно измерять на "максимально необходимых для данной установки оборотах". Разумеется, указывать нужно не то значение, при котором начали возникать пропуски импульсов, а с неким запасом.

    4) Если говорить про "пропуски импульсов", то более важно "сглаживать" не начало пути, а конец -- тот момент, где тяга у движка ослабевает, и нужно снижать нагрузку.

    5) В случае "идеальной" кривой (ну, когда сначала ускорение плавно растёт, а потом уменьшается), конечно, по-полной используются возможности движка, но есть шанс, что "горб"-таки выйдет за границы возможностей.
    Как отлаживать S-кривую, чтобы она не выходила за границы допустимых нагрузок -- фиг знает.
    С каким-нибудь регистратором реального крутящего момента (нагрузки на движок) было бы, конечно, удобнее, но сомневаюсь, что их массово используют.

    Скорее всего, нужно делать некое подобие "с плавным выходом на постоянное ускорение", а потом "с плавным переходом на нулевое ускорение == на равномерное движение". Но тут эти самые "плавные выходы", скорее, не для пропуска импульсов будут служить, а для того, чтобы уменьшить толчки оборудования.


    Та же самая дельта генерирует большой толчок в конце разгона. У неё ускорение на протяжении всего разгона растёт, а потом сразу меняется на нулевое.
    Последний раз редактировалось Владимир Ситников; 28.09.2016 в 11:08. Причина: расширил часть про "составное движение", поправил вычисление времени выхода на 10кГц

  3. #253

    По умолчанию

    Цитата Сообщение от приборист Посмотреть сообщение
    А что задать?
    Я пытался как мог, все работает. (Описал вроде ранее)
    Либо скорость большая и на выходе ошибка.
    Вариантов то немного))
    Можешь ещё эксперимент провести: поставить малое ускорение разгона, и попытаться раскрутить до большой скорости?

    Просто у ШД крутящий момент падает с увеличением скорости вращения (см последнюю картинку), а мой блок сейчас выдаёт константное ускорение.
    Т.е. если нужно достичь большей скорости нужно ставить меньшее ускорение.

    Тут, скорее, из спортивного интереса. В спецификации энкодера сказано, что он до 200кГц, и "слова упирается в 23-25кГц" звучат странно.
    Последний раз редактировалось Владимир Ситников; 27.09.2016 в 02:08.

  4. #254

    По умолчанию

    Насколько я понял все более менее нормально. Но для полноценных испытаний нужен именно ШД и драйвер к нему. У сервопривода драйвер более совершенен и менее требователен к качеству сигнала подаваемого на вход Step.

    Дмитрий Артюховский, может вы подсобите в этом вопросе. У вас есть железо для проведения полноценных испытаний, и опыта у вас ого-го-го сколько. Надо отбросить амбиции и подключиться к общему делу.
    Последний раз редактировалось Newcomer; 27.09.2016 в 10:49.

  5. #255

    По умолчанию

    Цитата Сообщение от приборист Посмотреть сообщение
    По хорошему проверить бы количество передаваемых импульсов (для меня критично, потому что в итоге может накапливаться ошибка)Но осциллографа нет, проверить нечем.
    Тут не надо никакого осциллографа. Запомните положение вала двигателя. Подайте на драйвер столько импульсов чтобы вал двигателя повернулся ровно на 1 оборот и посмотрите результат. Еще лучше подать столько импульсов чтобы вал повернулся ровно на 10 или 100 оборотов. Если возникнет существенная ошибка в угле поворота вала, то это визуально будет видно.
    Последний раз редактировалось Newcomer; 27.09.2016 в 10:47.

  6. #256

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Но для полноценных испытаний нужен именно ШД и драйвер к нему.
    https://www.google.ru/search?tbm=isc...988&gws_rd=ssl
    Полноценный драйвер, стоит недорого, есть аналог с более высоким дроблением шага.
    если совсем лень паять обвес из кондёра, сопротивлений и перемычек, можно взять комплект.
    https://ru.aliexpress.com/item/Free-...8.0.116.74Vk0X
    Цеплял этот драйвер к обычному контроллеру от омрона.


    Полноценный мелкий шаговик вроде этого:
    https://ru.aliexpress.com/item/2-4-3...8.0.124.74Vk0X
    можно найти в старом струйнике от эпсона, причём вместе с железяками для линейного перемещения, т.е. нагрузку можно менять и визуально наблюдать за работой.
    На побаловаться можно взять шаговик от сидюка, но от драйвера по ссылке ток сложно для него настроить при питании от 12В.


    посмотреть протестированный код на тему рампы можно здесь
    https://github.com/grbl/grbl
    искать выполнение команды G00, там же можно глянуть поиск исходного положения.
    в файле gcode.c разбор поступивших команд и вызов функций




    есть ещё один пример, простой и не совсем допиленный.
    http://www.pjrc.com/teensy/td_libs_AccelStepper.html


    Инструкцию от Дельты конечно смотреть нужно, вроде не плохо сделано, у современных даже круговая интерполяция есть.
    Но в Омроне всё таки управление шаговиком намного удобнее в использовании, и в отличие от дельты можно налету менять скорость и координаты.
    http://www.techtrends.ru/docs/omron/...OperManual.pdf


    -----------------------
    По поводу правильной рампы, думаю пока не стоит заморачиваться.
    В омроне кстати разгон тоже ступенькой с интервалом в 4 мс.
    Последний раз редактировалось BETEP; 27.09.2016 в 12:18.

  7. #257

    По умолчанию

    Цитата Сообщение от BETEP Посмотреть сообщение
    По поводу правильной рампы, думаю пока не стоит заморачиваться.
    Это что значит?
    Рампа уже есть, и она линейная. Предлагается передалать на ступенчатую? Смысл?

    Возможно, омрон/дельта делают ступенчатые рампы для того, чтобы как-то сэкономить процессорное время.
    По факту, у сопроцессора ПЛК110 мощи хватает, а делать ему всё равно больше нечего.
    Поэтому можно делать ту рампу, которая нужна без всяких условностей со ступеньками.
    Последний раз редактировалось Владимир Ситников; 27.09.2016 в 12:35.

  8. #258

    По умолчанию

    Я имел ввиду что и линейной достаточно

  9. #259
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Тут не надо никакого осциллографа. Запомните положение вала двигателя. Подайте на драйвер столько импульсов чтобы вал двигателя повернулся ровно на 1 оборот и посмотрите результат. Еще лучше подать столько импульсов чтобы вал повернулся ровно на 10 или 100 оборотов. Если возникнет существенная ошибка в угле поворота вала, то это визуально будет видно.
    По мне - это не проверка.
    В моем случае такой проверки хватит (из-за специфики объекта), а вот потом другие могут получить интересные результаты

  10. #260

    По умолчанию

    Цитата Сообщение от приборист Посмотреть сообщение
    По мне - это не проверка.
    В моем случае такой проверки хватит (из-за специфики объекта), а вот потом другие могут получить интересные результаты
    Это отличная проверка. Не поленись и сделай. Задай как можно больше полных оборотов вала двигателя и посмотри результат. Таким образом будет проверено правильно ли ФБ формирует заданное количество импульсов.

    Можно в ПЛК написать тестовую программу, которая даст ФБ 10 заданий повернуть вал на 10 оборотов (итого будет 100 оборотов).
    Каждый раз будет разгон и торможение. Получится отличная проверка.
    Последний раз редактировалось Newcomer; 27.09.2016 в 14:52.

Страница 26 из 69 ПерваяПервая ... 16242526272836 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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