Ну, да. Выглядит верно.
Я бы вместо IF (Q_P = FALSE AND Q = TRUE)
написал IF R_TRIG(CLK := Q).Q THEN. При этом переменная Q_P не нужна, и по-моему более понятна суть (см https://hardella.com/docs/pru/examples/fast-counter/ )
Владимир, value в FUNCTION_BLOCK PWM_DW правильно называть не скважность, а длительность импульса.
Владимир, как создать то, что на картинке ?
To В.Ситников.
Правильно я понимаю, что если в основной программе ПЛК сделать один раз вызов программы, то программа TEPPER3_PRU0_PWM будет постоянно выполнятся с заданными значениями ?
Последний раз редактировалось Newcomer; 07.05.2018 в 17:47.
Да, программы в PRU выполняются сами собой и им не нужны какие-либо пинки снаружи.
Но стоит учитывать, что MemoryTransfer может завершиться с ошибкой и PRU программа данных не получит (см значение SteppersConfig_Pru0MemoryTransfer.writeFails)
Технически, MemoryTransfer делает 100 попыток и, если за эти 100 попыток PRU так и не ответит (например, PRU программа вошла в бесконечный цикл), то обмен отменяется.
На практике у меня данные передавались с 1-го раза, ну максимум со 2-3-4.
Вытащить что?
Нужно всё-таки объявить переменную (хотя бы указать её тип) и тогда уже можно будет рулить тем, какие из полей нужно-не нужно обменивать с основной программой.
Т.е. логика в том, что сначала создаём переменную в PRU программе, а потом уже указываем, что она (или её составные части) будут участвовать в обмене.