Страница 53 из 135 ПерваяПервая ... 343515253545563103 ... ПоследняяПоследняя
Показано с 521 по 530 из 1349

Тема: Hardella IDE

  1. #521

    По умолчанию

    Еще один вопрос. Как мне получить на входе Step драйвера ШД рампу прямоугольного вида. Т.е. исходная частота 0, далее
    сразу 20 000 Гц, после отработки 1000 импульсов частота сразу 0. Какие параметры нужно задать для этого ?

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := FALSE,
    STEPPER1_PRU1_stepper_accel_ramp := 20000,
    STEPPER1_PRU1_stepper_decel_ramp := 20000,
    STEPPER1_PRU1_stepper_max_speed := 20000,
    STEPPER1_PRU1_stepper_min_speed := 0,
    STEPPER1_PRU1_stepper_quantity := 1000,
    STEPPER1_PRU1_stepper_enable := TRUE,
    );
    Последний раз редактировалось Newcomer; 19.01.2017 в 15:29.

  2. #522

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    А вы бы как сделали ?
    Да пёс его знает. Можно и так и сяк делать. Всё зависит от того, что первое в голову придёт. Зависит от настроения и конкретной задачи.

    Например, Sulfur переписал энкодер и убрал CASE/ENUM из программы.
    Да, то что он написал выглядит простым и понятным. Но и мой вариант с CASE тоже простой и понятный.
    Вот, честное слово, не вижу почему один или другой способ был бы лучше или хуже. Поэтому и не спешу менять на тот вариант, который сделал Sulfur.
    Добавлять в примеры "второй вариант написания одного и того же" тоже особого смысла не вижу.

    Другое дело, если у Sulfur проект заработает в железе, то тогда можно (и я бы хотел) пример в Hardella заменить и обновить документацию. Тогда будет гораздо проще описать "постановку задачи", и объяснять как что связано (в PRU программе, в КДС программе, в реальных энкодерах и т.п.).


    Более того, это хорошо, что простой инженер без специальной "PRU подготовки" может сделать свою PRU программу "как он видит".
    Одной из целью Hardella и была возможность написания своих программ, а там уж сколько людей столько и мнений. Кому-то нравятся ENUM'ы, а кому-то брюнетки.

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Еще один вопрос. Как мне получить на входе Step драйвера ШД рампу прямоугольного вида. Т.е. исходная частота 0, далее
    сразу 20 000 Гц, после отработки 1000 импульсов частота сразу 0. Какие параметры нужно задать для этого ?
    Чтобы выдать команду без разгона и торможения нужно указывать accel_ramp :=0, decel_ramp := 0, max_speed := 20000, quantity := 10000

  3. #523

    По умолчанию

    IF SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_st epper_state = STOP_STEPPER_RUN_STATE THEN ; END_IF

    Владимир, что в вышеприведенном выражении есть STOP_STEPPER_RUN_STATE ?

    В моей программе эта штука нигде не объявлена, но компилятор CoDeSys не выдает ошибку.
    Последний раз редактировалось Newcomer; 19.01.2017 в 19:03.

  4. #524

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    IF SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_st epper_state = STOP_STEPPER_RUN_STATE THEN ; END_IF

    Владимир, что в вышеприведенном выражении есть STOP_STEPPER_RUN_STATE ?
    Это одно из значений ENUM
    Откройте в КДС закладку "types" (вроде, так называется). Она внизу слева. Там будет этот ENUM и можно будет посмотреть остальные значения

  5. #525
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,033

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Sulfur переписал энкодер и убрал CASE/ENUM из программы.
    Да, то что он написал выглядит простым и понятным. Но и мой вариант с CASE тоже простой и понятный.
    Вот, честное слово, не вижу почему один или другой способ был бы лучше или хуже.
    В первую очередь я решал свою задачу. Примененный мной алгоритм энкодера успешно работает уже несколько лет на ПЛК старой модификации (естественно не в ПРУ). Но Ваш алгоритм точнее и "правильнее".
    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Другое дело, если у Sulfur проект заработает в железе, то тогда можно (и я бы хотел) пример в Hardella заменить и обновить документацию. Тогда будет гораздо проще описать "постановку задачи", и объяснять как что связано (в PRU программе, в КДС программе, в реальных энкодерах и т.п.)
    Проект работает в железе (на аппаратном эмуляторе), скоро сделаю отчет в своей теме ПЛК110.60[М2] + энкодер + счетчик.

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    это хорошо, что простой инженер без специальной "PRU подготовки" может сделать свою PRU программу "как он видит".
    Выражаю огромную благодарность за организацию и поддержку проекта Hardella. И, кстати, моя основная проф.деятельность отнюдь не программирование.

  6. #526

    По умолчанию

    To В.Ситников. В ФБ для ШД enable после отработки заданного количества импульсов лучше переводить в состояние FALSE в самом ФБ. Это избавит от лишних телодвижений в программе CoDeSys. В моем проекте, где надо управлять ШД каждая мс на счету.

  7. #527

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    To В.Ситников. В ФБ для ШД enable после отработки заданного количества импульсов лучше переводить в состояние FALSE в самом ФБ. Это избавит от лишних телодвижений в программе CoDeSys. В моем проекте, где надо управлять ШД каждая мс на счету.
    А как вы себе представляете?
    PRU же никак не может заставить основную программу передавать что-то другое.

    Допустим, миллисекунда на счету. И что? В чём проблема-то?


    Основная программа: "PRU, передаю enable=true".
    PRU: "Вас понял, enable=true, запускаем ШД" <--- !!!
    Основная программа: "PRU, передаю enable=true".
    PRU: "Вас понял, всё ещё enable=true, продолжаем крутить ШД"
    Основная программа: "PRU, передаю enable=true".
    PRU: "Вас понял, всё ещё enable=true, продолжаем крутить ШД"
    Основная программа: "PRU, передаю enable=true".
    PRU: "Вас понял, всё ещё enable=true, продолжаем крутить ШД"
    ...
    Основная программа: "PRU, передаю enable=true".
    PRU: "А мне похрен, ШД отработал, поэтому enable=false"
    Основная программа: "PRU, передаю enable=true".
    PRU: "Вас понял, enable=true, запускаю ШД" <---!!!

    Если enable будет сбрасываться само собой, то будут автоколебания. Поэтому сейчас и сделано, что enable так и остаётся true, но ШД переходит в состояние STOP и не продложает движение до передёргивания enable.

  8. #528

    По умолчанию

    Я в своей программе не делаю постоянно это - Основная программа: "PRU, передаю enable=true". Я это сделал 1 раз и жду когда ФБ отработает задание.

  9. #529

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Я в своей программе не делаю постоянно это - Основная программа: "PRU, передаю enable=true". Я это сделал 1 раз и жду когда ФБ отработает задание.
    Ещё раз: синхронизируются ВСЕ переменные при каждом обмене.
    Невозможно, "просто прочитать одну переменную". Всегда запишутся последние значения всех переменных "на запись" и прочитаются тех, которые должны прочитаться.

    Иными словами, вызов MemoryTransfer() (без параметров) всё равно запишет enable, и он запишет то значение, которое в последний раз указывалось.

  10. #530

    По умолчанию

    Если прочитать из PRU без перезаписи всех переменных нельзя, то может разделить чтение и запись ?

    Cделать MemoryRead() и MemoryWrite(). Это будет более гибкий подход.
    Последний раз редактировалось Newcomer; 21.01.2017 в 13:59.

Страница 53 из 135 ПерваяПервая ... 343515253545563103 ... ПоследняяПоследняя

Ваши права

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