Страница 94 из 117 ПерваяПервая ... 44849293949596104 ... ПоследняяПоследняя
Показано с 931 по 940 из 1349

Тема: Hardella IDE

Комбинированный просмотр

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

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Вручную нужно переменные сохранять.
    И как это выглядит ?

    Владимир, accel_ramp и decel_ramp в ФБ STEPPER как DWORD сделали ?

  2. #2

    По умолчанию

    Я думаю, что без функций, которые сохраняет контекст в ОЗУ по абсолютным адресам и делают восстановление контекста не обойтись.

  3. #3

    По умолчанию

    Владимир, а оформить этот код в виде функции, которая тупо переписывает регистры туда-сюда нельзя ?
    Последний раз редактировалось IVM; 29.01.2018 в 12:17.

  4. #4

    По умолчанию

    Цитата Сообщение от 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. #5

    По умолчанию

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

  6. #6

    По умолчанию

    Привет всем!

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

  7. #7

    По умолчанию

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

  8. #8

    По умолчанию

    Пробовал по разному, в том числе и код из примера 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. #9

    По умолчанию

    Цитата Сообщение от 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

  10. #10

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Это как? Pru0Init меняет значение переменной из другой программы? Такого вообще не должно быть.
    Это похоже на чей-то глюк. Удалил из ПЛК PRU0.prg, сделал заводской сброс, залил PRU0.prg в ПЛК - и всё заработало как и положено...
    До этого пробовал поотдельности перезаливать PRU0.prg или делать заводской сброс - не помогало. Причём это самый первый проект на этом экземпляре контроллера после его покупки.

    Благодарю за помощь!

Страница 94 из 117 ПерваяПервая ... 44849293949596104 ... ПоследняяПоследняя

Ваши права

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