Страница 93 из 135 ПерваяПервая ... 43839192939495103 ... ПоследняяПоследняя
Показано с 921 по 930 из 1349

Тема: Hardella IDE

  1. #921

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    Не понял, у меня в ПЛК загружено и PRU0 и PRU1, я сначало крутил ШД, через PRU1, в него входа и добавил т.к. не знаю какой PRU за что отвечает, информации нет.
    Информация описана тут: https://hardella.com/docs/pru/featur...ики-ПЛК110-М02


    Цитата Сообщение от Scream Посмотреть сообщение
    По поводу SteppersConfig тоже не понял, для меня это лес какой-то.

    Вот, переделал, так ?
    Вложение 30907
    Проект скомпилился.
    Да, так должно работать. SteppersConfig это "PRU configuration", и смысл этой конфигурации в том, чтобы назначить какие программы будут выполняться в PRU ядрах, какая будет фильтрация входов, и т.п.
    Последний раз редактировалось Владимир Ситников; 03.05.2017 в 10:53.

  2. #922
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Информация описана тут: https://hardella.com/docs/pru/featur...ики-ПЛК110-М02
    Да, так должно работать. SteppersConfig это "PRU configuration", и смысл этой конфигурации в том, чтобы назначить какие программы будут выполняться в PRU ядрах, какая будет фильтрация входов, и т.п.
    Ага, спасибо, вопрос...
    Не понял что такое initialOffset? Погонял, оно у меня меньше на 10, чем position.
    И как сбросить\обнулить энкодер?

  3. #923

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    Ага, спасибо, вопрос...
    Не понял что такое initialOffset? Погонял, оно у меня меньше на 10, чем position.
    И как сбросить\обнулить энкодер?
    Ну, началось.... "как сбросить энкодер".
    Ааааа.

    Если честно, то мне быть хоть краем глаза посмотреть на установки с энкодерами и решаемые задачи. Без этого тяжело понять "как сделать удобный блок энкодера".
    Тем не менее, это уже вторая версия блока и наверняка её вам хватит (в конце концов, посмотрите код блока PRU_ABZ_ENCODER -- наверняка станет понятно как ведут себя значения).

    В двух словах:
    position -- это переменная, которая при A/B импульсах увеличивается или уменьшается на 1 в зависимости от направления вращения. Грубо говоря, если из нового значения вычитать прошлое, то можно узнать "пробег". Это значение не сбрасывается по Z импульсу. По значению position можно понять относительное перемещение.

    initialOffset -- это значение переменной position в тот момент, когда была встречена Z метка. Если Z метка ещё не встречалась, то initialOffset равно 0.
    Если честно, то я думал, что initialOffset будет обновляться только при самом первом обнаружении Z метки, но сейчас код написан так, что initialOffset обновляется при обнаружении каждой Z метки.
    Тут дело в том, что от момента обнаружения Z метки до опроса из основного цикла ПЛК может прийти ещё несколько импульсов по A/B, поэтому и в результате обработки энкодера я возвращаю 2 значения: "фактическое положение" (==position), "положение, в момент прохождения Z метки" (==initialOffset). В этом ключе, конечно, название "initialOffset" нехорошее. Возможно, positionOfLastZ будет лучше.

    zCount -- количество раз, которое была обнаружена Z метка. В начале 0, потом 1, 2 и т.д.

    Код:
    IF R_TRIG(CLK := z).Q THEN 
      zCount := zCount + 1; 
      initialOffset := position; 
    END_IF;
    Например, возьмём энкодер с 40 импульсами на оборот
    1) 1-ый цикл ПЛК. прочитали и получили position=0, initialOffset=0
    2) Внезапно энкодер прокрутили на полтора оборота
    3) 2-ой цикл ПЛК. Тут будет position=60, initialOffset=40 (ну или около того).
    4) Прокрутили энкодер ещё на 70 импульсов.
    5) 3-ий цикл ПЛК. Тут будет position=130, initialOffset=120 (или около того). Разница 130-60 показывает, что энкодер провернулся на 70 импульсов. А initialOffset=120 показывает, что последний раз Z метка встречалась на отметке 120.

    Собственно, вопрос: а зачем обнулять энкодер? Какая фактическая задача при этом решается?
    Последний раз редактировалось Владимир Ситников; 03.05.2017 в 12:21.

  4. #924
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Если честно, то мне быть хоть краем глаза посмотреть на установки с энкодерами и решаемые задачи. Без этого тяжело понять "как сделать удобный блок энкодера".
    Скинул в ЛС.

  5. #925
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Энкодер 25 импульсов на оборот, ШД - 200.
    Делаю один оборот, position меняется на 100.
    При этом zCount увеличивается не на один, а на два.
    На валу есть метка, вижу визуально, что 200 для ШД это ровно 1 оборот.

    Покрутил раз 20, всегда position меняется на 100 вместо 25, а zCount на 2.

    Есть идеи?

  6. #926

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    Покрутил раз 20, всегда position меняется на 100 вместо 25,
    Это норма™
    Смысл в том, что считаются оба фронта (передний и задний) обоих каналов (A и B). Кто-то может называть это "4x счёт".
    Повышение точности на ровном месте.

    Цитата Сообщение от Scream Посмотреть сообщение
    При этом zCount увеличивается не на один, а на два.
    Вот это странно.
    Может, реально Z канал выдаёт дубли? (дребезг или просто поломан контакт)
    Как вариант -- можно попробовать настроить фильтрацию по Z входу.

    Код обработки Z выглядит верно, компилируется в разумный код, и мои тесты тоже показывают, что Z увеличивается на 1.
    Последний раз редактировалось Владимир Ситников; 03.05.2017 в 14:36.

  7. #927

    По умолчанию

    По мотивам последних замечаний, выпустил обновление Hardella 1.7.1 (обновиться можно через автообновление):

    Исправлено:
    • Проект не компилировался, если расположен в пути с пробелами
    • Убраны неиспользуемые переменные из создаваемых PruMemoryTransfer
    • Добавлена ошибка компиляции, если блок FAST_INPUTS используется в программе PRU1 (доступ к входам имеет только PRU0)
    • Переменная PRU_ABZ_ENCODER.initialOffset переименована в positionOfLastZ
    • Добавлена поддержка VAR_IN_OUT (для PRU и CoDeSys). Использовать IN_OUT в PRU нужно осторожно, т.к. write передаёт данные в PRU вообще всегда, а не только по изменению
    • Теперь программы PRU1 (init, memory read/write) не будут запускаться, если инициализация PRU0 не прошла. Так уж сделана прошивка ПЛК110, что PRU1 само по себе не работает, поэтому и добавлена дополнительная проверка

  8. #928

    По умолчанию

    Установил Java SE Development Kit 8u131, пользуюсь Hardella 1.6.1. При компиляции ранее созданных проектов получаю - см. картинку. Что это значит.
    Изображения Изображения

  9. #929

    По умолчанию

    В более ранней Java SE Development Kit и Hardella 1.6.1 корректирую проект, но при компиляции новый SteppersConfig.exp не создается.

  10. #930

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    В более ранней Java SE Development Kit и Hardella 1.6.1 корректирую проект, но при компиляции новый SteppersConfig.exp не создается.
    Может, есть реально файл с названием D:\Hardella\Pro\2_Step_&_Enc_red_2 ? Ну или файл, который отличается лишь регистром букв.
    Либо наоборот папки нет. Сейчас папка не создаётся и будет такая же ошибка.

    Покажите что выведет команда dir /N D:\Hardella\Pro


    В Hardella такой код:
    Код:
    if (!new File(args[0]).isDirectory()) { 
      System.err.println("The first argument should be a directory. Given " + args[0]); 
      System.err.println(); 
      CreateLibrary.usage(); 
      System.exit(-2); 
    }
    PS. Ну и обновиться на 1.7.1 вполне можно.

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

Ваши права

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