Мигаем быстрыми выходами
Сделаем так, чтобы выходы 1 и 2 мигали с интервалом 250 мс, а выходы 3 и 4 с интервалом 500 мс.
Если у вас открыта среда Hardella IDE, то можете либо
открыть код примера в среде, либо создать свой проект на основе примера (File
> New
> Project
> Blinking leds
).
В проекте можно увидеть следующее:
-
PRU Configuration – там описывается то, какие программы должно выполнять каждое PRU ядро, с каким интервалом цикла, и какая должна быть фильтрация входов. В данном случае конфигурация названа
BlinkningLeds
:Здесь указано, что фильтрации входов нет (см
no debounce
), и указано какие программы выполняются на PRU ядрах. Например, на PRU0 выполняетсяBLINK_3_4
со временем цикла 500 мс. Т.е. PRU ядро будет вызывать программуBLINK_3_4
не чаще, чем раз в 500 мс. -
Программа для
PRU0
. В нашем случае она названаBLINK_3_4
:В целом, должно быть понятно, но рассмотрим происходящее детальнее. Программа записывает значение
state
вfast out 3
(out3
) и значениеNOT state
вfast out 4
(смout4
). Само значениеstate
изменяется только тогда, когда взведён флагenable
.Как же
enable
может изменить своё значение? При объявлении переменнойenable
, для неё настроен обмен с “основным циклом CoDeSys” (см раздел обмен данных). Т.е. флагenable
будет управляться из основного цикла, а вся программа будет выполняться на PRU. -
Программа для
PRU1
. В нашем случае она названаBLINK_1_2
:Здесь всё аналогично, но используются
out1
иout2
.
При компиляции в созданных MemoryTransfer
программах будут переменные для enable
.
Так, например, будет выглядеть программа для PRU0:
PROGRAM BlinkningLeds_Pru0MemoryTransfer
VAR_INPUT
BLINK_3_4_enable : BOOL;
END_VAR
...
Таким образом, чтобы передать enable:=TRUE
в PRU0 программу, нужно в основном цикле ПЛК выполнить такой код:
BlinkningLeds_Pru1MemoryTransfer(BLINK_3_4_enable := TRUE)
Комментировать