Сообщение от
Александр Бакин
Хочу продолжить эту тему.
Честно говоря не выполнил вашу просьбу - сделать видеозахват работы программы при accel_ramp>2500.
Сейчас хочу задать вопрос по работе вашей программы PRU_STEPPER.
Сообщение от
Александр Бакин
1. Можно-ли из программы ПЛК управлять быстрыми выходами? , или pru0.prg берет управление этими выходами на себя и блокирует обращение к ним.
Как нужно?
Я готовлю очередную версию Hardella IDE.
Есть такие примеры.
Пример "моргаем двумя выходами" (запись в быстрые выходы):
Снимок экрана 2016-12-06 в 17.10.27.png
Настройка "PRU цикла" (PRU0 100мс, PRU1 200мс)
Снимок экрана 2016-12-06 в 17.16.17.png
Пример "делаем быстрый счётчик" (==чтение быстрых входов):
Снимок экрана 2016-12-06 в 17.15.38.png
Можно сделать и пример, когда BOOL значение из КДС просто записывается в fast out.
Это будет так:
Код:
@Export()
val : BOOL;
...
FAST_OUTPUTS(out3 := val);
Сообщение от
Александр Бакин
2. как приделать аварийную остановку к вашей программе? т.е. во время генерации импульсов происходит срабатывание аварийной сигнализации - как остановить генерацию? Сейчас для этого нужно несколько циклов программы. т.е. сначала ставим на вход eneble:=false? затем на вход quantity:=0, затем снова на вход enable:=true. для этой операции нужна как минимум 3 цикла контроллера, за это время двигатель при частоте 5000 кГц пройдет несколько оборотов - что делать?
Тут два варианта:
2.1) enable:=false и quantity:=0 можно менять одновременно. Да, потребуется цикл ПЛК + ещё время от того, как ПЛК осознает значение "аварии".
2.2) При составлении программы в Hardella можно напрямую читать быстрые входы, вообще без "основного цикла ПЛК". Если аварийный сигнал завести на один из быстрых входов, то можно останавливать блок ШД "прямо сразу"
Например, так (считаем, что в случае аварии сигнал на in1 пропадает, и импульсы нужно прекращать):
Снимок экрана 2016-12-06 в 17.22.05.png
Тут интервал от появления аварии до реакции будет порядка микросекунд (зависит от того, какой настроить цикл PRU)