Страница 111 из 135 ПерваяПервая ... 1161101109110111112113121 ... ПоследняяПоследняя
Показано с 1,101 по 1,110 из 1349

Тема: Hardella IDE

  1. #1101

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Вообще говоря, эти переменные сделаны WORD для экономии регистров. Можете привести пример установки, где нужен разгон быстрее, чем 65500 кГц/сек?
    У меня такое работает на реальном железе. Я взял код стандартного ФБ STEPPER и заменил у разгона и торможения WORD на DWORD.

    Вот кусок кода из рабочей программы.

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 500000000,
    STEPPER1_PRU1_stepper_max_speed := 300000,
    STEPPER1_PRU1_stepper_min_speed := 300,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );

    Accel у меня может быть несколько миллионов.
    Последний раз редактировалось IVM; 29.01.2018 в 12:30.

  2. #1102

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    У меня такое работает на реальном железе. Я взял код стандартного ФБ STEPPER и заменил у разгона и торможения WORD на DWORD.

    Вот кусок кода из рабочей программы.

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 500000000,
    STEPPER1_PRU1_stepper_max_speed := 300000,
    STEPPER1_PRU1_stepper_min_speed := 300,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );

    Accel у меня может быть несколько миллионов.
    Просто заменили на DWORD?
    Можете ещё назвать Accel и Quantity? Интересно стало через эмулятор прогнать - посмотреть как там генерируются импульсы.

  3. #1103

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Просто заменили на DWORD?
    Можете ещё назвать Accel и Quantity? Интересно стало через эмулятор прогнать - посмотреть как там генерируются импульсы.
    Да, просто заменил.

    Accel у меня может быть несколько миллионов.

    Quantity может быть от нескольких десятков до нескольких сотен.

  4. #1104

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Владимир, а оформить этот код в виде функции, которая тупо переписывает регистры туда-сюда нельзя ?
    Может получится добавить команду для сохранения и загрузки переменных, относящихся к ФБ в память.
    Ну, что-нибудь в духе
    Код:
      stepper: PRU_STEPPER;
    ...
      LOAD stepper, 1000; (* восстанавливаем состояние stepper из памяти по адресу 1000 *)
      stepper.enable := enable1; (* передаём актуальные входные данные *)
      stepper.quantity := quantity1;
    
      stepper(); (* вызваем *)
    
      STORE stepper1, 1000; (* сохраняем значение stepper в память по адресу 1000 *)
      q1 := stepper.Q; (* читаем результат *)
      state1 := stepper.state;
    Переменные для обмена всё-равно придётся в двойном количестве создавать и вручную присваивать. Но LOAD/STORE сделать, наверное, можно.

  5. #1105

    По умолчанию

    Владимир, можно в Hardella оставить ФБ STEPPER и сделать на его базе ФБ STEPPER_M, в котором accel_ramp и decel_ramp объявить как DWORD и поправить расчеты если это действительно нужно. Я думаю Hardella от этого только выиграет.
    Последний раз редактировалось IVM; 29.01.2018 в 13:49.

  6. #1106

    По умолчанию

    Привет всем!

    Решил попробовать покрутить ШД. Скачал pru_stepper_v12.zip, создал простенькую программку - работает.
    Скачал Hardella IDE 1.7.2, скомпилил предлагаемый проект для ШД, загрузил файлы и библиотеки - не работает. Попытался покопать: понял, что Pru0.prg это просто пустышка, резервирующая место под реальный код, который загружается из SteppersConfig_Pru0Init(). Но у меня сложилось впечатление, что в Init код для Pru0 неправильный - например сразу после его загрузки значение state принимает недопустимое значение и никак не меняется, и вообще всы выходные и внутренние переменные не меняются...
    Это я что-то делаю не так или что-то не так в Hardella IDE?

  7. #1107

    По умолчанию

    Цитата Сообщение от UAVpilot Посмотреть сообщение
    Но у меня сложилось впечатление, что в Init код для Pru0 неправильный - например сразу после его загрузки значение state принимает недопустимое значение и никак не меняется, и вообще всы выходные и внутренние переменные не меняются...
    Это я что-то делаю не так или что-то не так в Hardella IDE?
    Как при этом выглядит код в КДС?
    Пожажете чему равны значения переменных в online?

  8. #1108

    По умолчанию

    Пробовал по разному, в том числе и код из примера https://hardella.com/docs/pru/examples/step-motor/
    Вот скриншоты одного из вариантов:
    На этой картинке виден код, нажато только "Подключение"
    pru0-1.png
    обратите внимание на state.

    Теперь нажал "Старт
    pru0-2.png
    state становится "инвалидным" сразу после выполнения SteppersConfig_Pru0Init(), пробовал в пошаговом режиме.

    После этого перестаёт работать и закоментированный код вверху (коментами я переключаю варианты), пока не перезапустишь контроллер. Т.е. SteppersConfig_Pru0Init() заменяет код PRU0.prg в контроллере нерабочим, а после перезапуска рабочий код PRU0.prg восстанавливается из flash.
    Последний раз редактировалось UAVpilot; 05.02.2018 в 23:48.

  9. #1109

    По умолчанию

    В.Ситников куда-то пропал.

  10. #1110

    По умолчанию

    Цитата Сообщение от UAVpilot Посмотреть сообщение
    state становится "инвалидным" сразу после выполнения SteppersConfig_Pru0Init(), пробовал в пошаговом режиме.
    Это как? Pru0Init меняет значение переменной из другой программы? Такого вообще не должно быть.
    Значение STEPPER_PRU0_stepper_state меняется только в программе SteppersConfig_Pru0MemoryRead, и до вызова этой программы значение меняться никак не должно.

    Технически, оборачивать вызов SteppersConfig_Pru0Init в "if init" смысла нет. В Init точно заходит? Судя по картинкам, конечно, заходит.
    Но, лучше бы просто вызывали SteppersConfig_Pru0Init() и всего делов.

    Можете выложить КДС проект?
    Ну, т.е. который не работает в режиме: "перезагрузили ПЛК, заливаем проект".

    Цитата Сообщение от UAVpilot Посмотреть сообщение
    После этого перестаёт работать и закоментированный код вверху (коментами я переключаю варианты), пока не перезапустишь контроллер. Т.е. SteppersConfig_Pru0Init() заменяет код PRU0.prg в контроллере нерабочим, а после перезапуска рабочий код PRU0.prg восстанавливается из flash.
    Непонятно что значит "перестаёт работать". Вряд ли что-то хорошее получится, если выполнить SteppersConfig_Pru0Init, а потом пытаться работать через pru_stepper_v12. Как-никак это разный код и работать не будет.
    По-хорошему, заливаем через SteppersConfig_Pru0Init(), и потом запускаем через SteppersConfig_Pru0MemoryWrite(...)


    Проверил на своём ПЛК -- эффекта с неверным значением state не возникает. Может, зависит от того, что у вас настроено в PLC configuration?

    Вот что у меня:
    Снимок экрана 2018-02-11 в 17.42.28.png

    Уже после нажатия run. Ещё я в начало SteppersConfig_Pru0MemoryRead добавил lastReadOk := TRUE (на работу не влияет, но это по-хорошему, сбрасывать в true нужно):
    Снимок экрана 2018-02-11 в 17.43.07.png

    Пробовал как с PRU0.prg из состава pru_stepper_v12, так и и тот PRU0.prg, который генерирует Hardella 1.7.2.
    В обоих случаях STEPPER_PRU0_stepper_state остаётся в состоянии INIT.

    Ну и добавил memorywrite -- импульсы побежали, выход FDO3 замигал:
    Снимок экрана 2018-02-11 в 18.01.21.png

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

Ваши права

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