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

Тема: Hardella IDE

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

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

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Если цикл PRU 1 мкс, то 2...3 мкс ?
    Да.

    Цитата Сообщение от Вольд Посмотреть сообщение
    А обмен между ЦП и PRU постоянно идет ? Когда начинается и когда заканчивается обмен между ЦП и PRU ? Или как прошло это
    PRU программа выполняет следующее:
    Код:
    t0 := засекаем_время();
    WHITE TRUE
        USER_PROGRAM(); (* вызываем программу, указанную в pru configuration *)
    
        REPEAT
            обрабатываем_обмен_данными_с_host();
            читаем_входы();
        UNTIL время < t0 + мин_ц
        END_REPEAT;
    
        t0 := засекаем_время();
        записываем_выходы();
        читаем_входы();
    END_WHILE;
    Иначе говоря, большую часть времени PRU ядро ждёт от КДС программы команд на чтение-запись PRU данных.
    Но эти данные PRU программа сможет использовать только на следующем PRU цикле.

    Возвращаясь к исходному вопросу "когда можно перезапускать stepper". После перевода enable в false нужно выполнять memoryread и ждать когда блок сменит состояние. В целом, за одну-две микросекунды это может и случиться, т.е. можно это выполнять и в рамках одного цикла ПЛК (while stepper.state<>... memory read ...).



    Цитата Сообщение от Вольд Посмотреть сообщение
    SteppersConfig_Pru0Init();
    SteppersConfig_Pru1Init();


    так и пошел обмен ?
    Нет. После Init запускается только "ответная" сторона в PRU. Сами данные идут только по управлению КДС программы.

    Чтобы данные реально ходили нужно вызывать MemoryTransfer или MemoryRead или MemoryWrite.
    При каждом вызове Memory* будет новый обмен.

  2. #2

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    После перевода enable в false нужно выполнять memoryread и ждать когда блок сменит состояние. В целом, за одну-две микросекунды это может и случиться, т.е. можно это выполнять и в рамках одного цикла ПЛК (while stepper.state<>... memory read ...).
    А можно перевести enable в false и не делать memoryread для анализа состояния блока, а просто подождать немного и далее перевести enable в true ?

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

Ваши права

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