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

Тема: Hardella IDE

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

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

    По умолчанию

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

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

  2. #2

    По умолчанию

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

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

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

  3. #3

    По умолчанию

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

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

    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. #4

    По умолчанию

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

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

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

    По умолчанию

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

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

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

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

  6. #6

    По умолчанию

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



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

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

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

    По умолчанию

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

Ваши права

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