Страница 44 из 117 ПерваяПервая ... 3442434445465494 ... ПоследняяПоследняя
Показано с 431 по 440 из 1349

Тема: Hardella IDE

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

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

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Да, блок работает (мои тесты энкодера он проходит), но у вас A и B фазы перепутаны относительно моего блока.
    Перестановка фаз роли не играет. При подключении энкодера концы всегда можно поменять местами.

  2. #2

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Перестановка фаз роли не играет. При подключении энкодера концы всегда можно поменять местами.
    Для тестов -- играет. Тест подаёт заранее заложенные сигналы на входы A и B, и проверяет значение на выходе энкодера.

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

    По умолчанию

    Владимир Ситников
    Начал испытания в железе на столе. Обнаружил проблему с обменом.
    Когда обращаюсь так:
    Код:
    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_ENCOER_COUNTER_Enc_Position;(*Показания энекодера*)
    имею пустые данные, т. е. обмена нет. Как со входными, так и с выходными данными.
    Когда обращаюсь так:
    Код:
    ENCODER_AND_COUNTER_Pru0MemoryTransfer(
    	PRU_ENCOER_COUNTER_DO3:=FDO3 , (*Прямое управление выходом FDO3*)
    	PRU_ENCOER_COUNTER_DO4:=FDO4 , (*Прямое управление выходом FDO4*)
    	PRU_ENCOER_COUNTER_count_Enable:=RunTransport ,(*Запуск транспорта*)
    	PRU_ENCOER_COUNTER_count_Lenght:= Lenght ,(*Пройденный путь*)
    	running=> ,
    	writeFails=> , 
    	readFails=> , 
    	PRU_ENCOER_COUNTER_Enc_Position=>Enc ,(*Показания энкодера*)
    	PRU_ENCOER_COUNTER_Enc_ZeroDetect=>ZeroDetect ,(*Обнаружение машинного нуля*)
    	PRU_ENCOER_COUNTER_count_Path=>Path );(*Пройденный путь транспорта*)
    То проблем нет, всё работает нормально.
    В обоих случаях компиляция происходит без ошибок и предупреждений.
    Вполне допускаю, что напутал с синтаксисом в первом случае.

  4. #4

    По умолчанию

    Завтра напишу что получилось.

  5. #5

    По умолчанию

    С моим дубовым ФБ опроса энкоднра ситуация такая. ШД нормально управляются, а при медленном вращении вала энкодера считываемое значения (position) принимает попеременно два состояния - 0 и 1. Фазы А и В энкодера подключены к 1 и 2 быстрым дискретным входам ПЛК.

    Код ФБ опроса энкодера прилагаю.
    Вложения Вложения
    • Тип файла: rar 1.rar (111.2 Кб, Просмотров: 7)

  6. #6

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    С моим дубовым ФБ опроса энкоднра ситуация такая
    Как я и говорил, надо сделать 4 счётчика и посмотреть какие из них будут считать, а какие нет.

    Возможно, физическая распайка не соответствует документации.

  7. #7

    По умолчанию

    Так работает

    PRU_ENCOER_COUNTER_Enc_Position=>Enc ,(*Показания энкодера*)

    а так не работает

    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_EN COER_COUNTER_Enc_Position;(*Показания энкодера*)

  8. #8

    По умолчанию

    Получается в первом случае обмена с PRU0 нет поэтому состояние position и не меняется.

  9. #9

    По умолчанию

    А разве у Sulfur не та же самая проблема была что и у меня ?

    Ведь PRU-программа работает автономно, ее не обязательно постоянно вызывать.

    Если так обратиться, то можно получить текущее значение Position

    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_EN COER_COUNTER_Enc_Position;

    Почему же это не работает ?
    Последний раз редактировалось Newcomer; 18.01.2017 в 13:47.

  10. #10

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    А разве у Sulfur не та же самая проблема была что и у меня ?

    Ведь PRU-программа работает автономно, ее не обязательно вызывать.

    Если так обратиться, то можно получить текущее значение Position

    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_EN COER_COUNTER_Enc_Position;

    Почему же это не работает ?
    Ещё раз: вызов ENCODER_AND_COUNTER_Pru0MemoryTransfer() осуществляет обмен данными.
    Если не вызывать, то никаого обмена не будет, и никакие переменные обновляться не будут.

    Если просто читать ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_ENCOER_ COUNTER_Enc_Position и ничего больше не делать, то значение будет одним и тем же.

    Тем не менее, в сообщении 485 код похож на правильный:
    Код:
    SteppersConfig_Pru0MemoryTransfer(
      STEPPER2_Enc_PRU0_dir := TRUE,
      STEPPER2_Enc_PRU0_stepper_accel_ramp := 2000,
      STEPPER2_Enc_PRU0_stepper_decel_ramp := 2000,
      STEPPER2_Enc_PRU0_stepper_max_speed := 20000,
      STEPPER2_Enc_PRU0_stepper_min_speed := 0,
      STEPPER2_Enc_PRU0_stepper_quantity := 16#FFFFFFFF,
      STEPPER2_Enc_PRU0_stepper_enable :=  TRUE
    );
    
    SteppersConfig_Pru1MemoryTransfer(
      STEPPER1_PRU1_dir := TRUE,
      STEPPER1_PRU1_stepper_accel_ramp := 10,
      STEPPER1_PRU1_stepper_decel_ramp := 10,
      STEPPER1_PRU1_stepper_max_speed := 300,
      STEPPER1_PRU1_stepper_min_speed := 0,
      STEPPER1_PRU1_stepper_quantity := 100000,
     STEPPER1_PRU1_stepper_enable :=  TRUE
    );
    
    ENC := SteppersConfig_Pru0MemoryTransfer.STEPPER2_Enc_PRU0_encoder_position;
    Т.е. сначала Pru0MemoryTransfer, затем чтение STEPPER2_Enc_PRU0_encoder_position. Выглядит верно.

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

Ваши права

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