Показано с 1 по 10 из 1349

Тема: Hardella IDE

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

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

    По умолчанию

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

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

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

    По умолчанию

    Владимир Ситников
    Начал испытания в железе на столе. Обнаружил проблему с обменом.
    Когда обращаюсь так:
    Код:
    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 );(*Пройденный путь транспорта*)
    То проблем нет, всё работает нормально.
    В обоих случаях компиляция происходит без ошибок и предупреждений.
    Вполне допускаю, что напутал с синтаксисом в первом случае.

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,256

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Владимир Ситников
    Начал испытания в железе на столе. Обнаружил проблему с обменом.
    Когда обращаюсь так:
    Код:
    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 );(*Пройденный путь транспорта*)
    То проблем нет, всё работает нормально.
    В обоих случаях компиляция происходит без ошибок и предупреждений.
    Вполне допускаю, что напутал с синтаксисом в первом случае.
    наверное в первом случае просто присваиваете одной переменной выход ПОУ, а во втором выполняете ПОУ
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    наверное в первом случае просто присваиваете одной переменной выход ПОУ, а во втором выполняете ПОУ
    Да, верно. Переменные обновляются только после вызова. Сами по себе, разумеется, не обновляются.

    Т.е. такой вариант должен работать:

    Код:
    ENCODER_AND_COUNTER_Pru0MemoryTransfer(
    ...
    );
    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_ENCOER_COUNTER_Enc_Position;
    Последний раз редактировалось Владимир Ситников; 18.01.2017 в 13:23.

  7. #7

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Да, верно. Переменные обновляются только после вызова. Сами по себе, разумеется, не обновляются.

    Т.е. такой вариант должен работать:

    ENCODER_AND_COUNTER_Pru0MemoryTransfer(
    ...
    );
    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_EN COER_COUNTER_Enc_Position;
    Владимир, а у меня та же самая история ?

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

    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
    );
    ENC := SteppersConfig_Pru0MemoryTransfer.STEPPER2_Enc_PRU 0_encoder_position;


    Если сделать так, то энкодер будет опрашиваться ?

    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_encoder_position => ENC,
    STEPPER2_Enc_PRU0_stepper_enable := TRUE
    );
    Последний раз редактировалось Newcomer; 18.01.2017 в 13:34.

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

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Да, верно. Переменные обновляются только после вызова. Сами по себе, разумеется, не обновляются.

    Т.е. такой вариант должен работать:

    Код:
    ENCODER_AND_COUNTER_Pru0MemoryTransfer(
    ...
    );
    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_ENCOER_COUNTER_Enc_Position;
    Насколько я понял, нужно в начале цикла ПЛЦ_ПРГ сделать вызов ПРУ-ПОУ (ENCODER_AND_COUNTER_Pru0MemoryTransfer в моем случае) с пустыми параметрами, и после этого должно заработать непосредственное обращение к любой переменной ПРУ-ПОУ?

    В принципе, то, как сейчас работает устраивает. Однако для большей понятности программы (в первую очередь для себя, ибо "с памятью моей что-то стало") хотелось бы иметь возможность обращаться к нужным переменным обмена из любого места ПЛЦ-ПРГ.

Ваши права

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