Страница 50 из 135 ПерваяПервая ... 40484950515260100 ... ПоследняяПоследняя
Показано с 491 по 500 из 1349

Тема: Hardella IDE

  1. #491

    По умолчанию

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

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

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

  2. #492

    По умолчанию

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

  3. #493

    По умолчанию

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

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

    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.

  4. #494

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Если сделать так, то энкодер будет опрашиваться ?
    По-моему, это эквивалентные варианты записи и работать они должны одинаково.

    Если работают по-разному, значит я чего-то не понимаю в ST (что не исключено).

  5. #495

    По умолчанию

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

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

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

    Enc:=ENCODER_AND_COUNTER_Pru0MemoryTransfer.PRU_EN COER_COUNTER_Enc_Position;

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

  6. #496

    По умолчанию

    Цитата Сообщение от 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. Выглядит верно.

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

    По умолчанию

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

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

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

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

  8. #498

    По умолчанию

    Вариант 1

    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
    );

    Вариант 2

    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;


    Оба варианта кода правильные ?
    Последний раз редактировалось Newcomer; 18.01.2017 в 13:54.

  9. #499

    По умолчанию

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



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

    Так устраивает? Или я чего-то не понял?

  10. #500

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Оба варианта кода правильные ?
    Да, оба варианта правильные, как я и говорил в 509

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

Ваши права

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