Страница 87 из 135 ПерваяПервая ... 3777858687888997 ... ПоследняяПоследняя
Показано с 861 по 870 из 1349

Тема: Hardella IDE

  1. #861

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    А можно перевести enable в false и не делать memoryread для анализа состояния блока, а просто подождать немного и далее перевести enable в true ?
    Можно-то оно можно, но нужно набраться уверенности, что прошло достаточно времени.

  2. #862

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Можно-то оно можно, но нужно набраться уверенности, что прошло достаточно времени.
    3 мкс - это мизер при цикле ПЛК 1 мс.
    Последний раз редактировалось Вольд; 24.03.2017 в 10:54.

  3. #863

    По умолчанию

    У меня в прерывающей программе, которая вызывается с периодом 200 мкс записано

    SteppersConfig_Pru1MemoryTransfer();

    Допустим в основной программе ПЛК однажды записано так

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 200000000,
    STEPPER1_PRU1_stepper_max_speed := 200000,
    STEPPER1_PRU1_stepper_min_speed := 0,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );


    Правильно ли я понимаю, что каждые 200 мкс между программой PRU и основной программой будут передаваться указанные выше значения ?

  4. #864

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Допустим в основной программе ПЛК однажды записано так
    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir, ...);

    Правильно ли я понимаю, что каждые 200 мкс между программой PRU и основной программой будут передаваться указанные выше значения ?
    Если MemoryTransfer() вызывается в 200мкс таймере, то в основной программе достаточно просто менять-читать значения переменных:
    Код:
    SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_dir := Dir;
    SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_stepper_accel_ramp := Accel;
    ...
    Либо просто в 200мкс таймере вызывать MemoryTransfer со всеми параметрами.

  5. #865

    По умолчанию

    Уточняю вопрос. Достаточно ли однократно вызвать

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 200000000,
    STEPPER1_PRU1_stepper_max_speed := 200000,
    STEPPER1_PRU1_stepper_min_speed := 0,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );


    чтобы эти значения постоянно передавались посредством вызова SteppersConfig_Pru1MemoryTransfer(); в прерывающей программе ?
    Последний раз редактировалось Вольд; 24.03.2017 в 13:04.

  6. #866

    По умолчанию

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

    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 200000000,
    STEPPER1_PRU1_stepper_max_speed := 200000,
    STEPPER1_PRU1_stepper_min_speed := 0,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );


    чтобы эти значения постоянно передавались.
    Что значит однажды?

    При вызове SteppersConfig_Pru1MemoryTransfer(), в PRU передаются значения переменных блока SteppersConfig_Pru1MemoryTransfer.

    Запись
    Код:
    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,...
    Это абсолютно то же самое, что и
    Код:
    SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_dir := Dir;
    SteppersConfig_Pru1MemoryTransfer.STEPPER1_PRU1_stepper_accel_ramp := Accel;
    SteppersConfig_Pru1MemoryTransfer();
    Иными словами, запись SteppersConfig_Pru1MemoryTransfer(STEPPER1_PRU1_di r := Dir,) не несёт в себе какого-то магического "отныне STEPPER1_PRU1_dir будет отслеживать значение переменной Dir". STEPPER1_PRU1_dir и Dir это независимые переменные, поэтому, если нужно передавать новое значение Dir в PRU, то нужно и выполнять присваивание в переменную STEPPER1_PRU1_dir.

  7. #867

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Что значит однажды?
    Вот так например

    CASE N OF

    10:
    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    STEPPER1_PRU1_stepper_accel_ramp := Accel,
    STEPPER1_PRU1_stepper_decel_ramp := 200000000,
    STEPPER1_PRU1_stepper_max_speed := 200000,
    STEPPER1_PRU1_stepper_min_speed := 0,
    STEPPER1_PRU1_stepper_quantity := Quantity,
    STEPPER1_PRU1_stepper_enable := TRUE
    );
    N := 20;

    20:
    ;

    END_CASE


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

    По умолчанию

    Владимир Ситников
    Отчитываюсь по своему проекту.
    Произведен монтаж ПЛК в шкаф машины, компиляция кода использована версией 1.7.0, код работает отлично, сбоев за двое суток непрерывной работы не зафиксировано.

    Есть небольшой вопросик. При выполнении в КДС Проект>Контроль>Неиспользуемые переменные выводит вот такую табличку:
    Var.jpg

    В принципе это не критично, но хотелось бы знать детали.

  9. #869

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Вот так например

    CASE N OF

    10:
    SteppersConfig_Pru1MemoryTransfer(
    STEPPER1_PRU1_dir := Dir,
    N := 20;

    20:
    ;

    END_CASE

    Как я писал выше, в PRU попадёт то значение Dir, которое было на момент выполнения шага N=10. Если потом Dir будет меняться, то новое значение попадёт в PRU уже только при очередном N=10.

  10. #870

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Владимир Ситников
    Отчитываюсь по своему проекту.
    Произведен монтаж ПЛК в шкаф машины, компиляция кода использована версией 1.7.0, код работает отлично, сбоев за двое суток непрерывной работы не зафиксировано.
    Здорово.

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Есть небольшой вопросик. При выполнении в КДС Проект>Контроль>Неиспользуемые переменные выводит вот такую табличку:
    Var.jpg
    В принципе это не критично, но хотелось бы знать детали.
    Идею с Hardella_SimulationDetector'ом подсказал Валенок: http://www.owen.ru/forum/showthread....l=1#post233794
    Решаемая проблема в том, что программы MemoryRead/Write/Transfer не работают в режиме симуляции (КДС не симулирует работу PRU), поэтому чтобы проект не падал в запуске этой самой симуляции в коде нужно как-то определять выполняется ли код на реальном ПЛК или нет.
    Там действительно переменные объявлены и не используются. Можно, наверное, сделать их "используемыми", чтобы не вызывали предупреждений.

    В MemoryTransfer действительно неиспользуемые переменные. Надо убрать.
    Я логику в Read/Write перенёс, а переменные остались.

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

Ваши права

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