Редактировать строку - это какое-то мучение.
Новости по Hardella какие-то есть ?
Вид для печати
Менял на одной машине ПЛК по причине его выхода из строя, проект с использованием Hardella написан около года назад. Залил проект в ПЛК, а pru0.prg и pru1.prg не залил, хотя в предыдущем ПЛК они были залиты. Однако, всё заработало. Т. е. получается, что не очень-то эти файлы и нужны?
Без этих файлов основная прошивка ПЛК пытается обращаться к PRU для отработки стандартной конфигурации (например, считывает показания быстрых входов)
Проблема в том, что даже после заливки PRU программы это не прекращается, т.к. основная прошивка не догадывается про Hardella.
Если же залить файл .prg, то основная прошивка перестаёт ломиться в PRU.
Как именно устроен штатный обмен не знаю, поэтому залить файл всё же стоит.
Спасибо, понял. При случае исправлю. Хотя машинка уже двое суток молотит без проблем.
Получается, что если и есть конфликт, то в данном случае его влияние не критично, но не факт, что не будет критичного влияния на других проектах с Hardella.
То Владимир Ситников.
Владимир, хочу сделать ФБ для управления ШД такого плана: ШД разгоняется и каждые 10 мс основная программа ПЛК на ходу (без останова ШД) меняет период следования импульсов. Фб для PRU считает все отработанные импульсы и передает их в основную программу ПЛК. Получится у меня такое сделать ?
То Владимир Ситников.
Владимир, у вас в ШИМ блоке из стандартной библиотеки период и скважность в каких единицах задаются ?
Если цикл PRU равен 1 мкс и мне надо получить скважность 2, а период 10 мкс, то perid надо задать 10. А какое значение должно иметь value (скважность) ?
Скважность - это отношение периода следования импульсов к длительности импульса и является безразмерной величиной.
FUNCTION_BLOCK PWM_DW (* Pulse Width Modulation generator *)
variables:
input value : DWORD;
input period : DWORD;
output Q : BOOL;
pos : DWORD;
body:
IF pos >= period THEN
pos := 1;
ELSE
pos := pos + 1;
END_IF;
Q := pos <= value;
Согласно вашему коду, если период следования импульсов должен быть 10 мкс, а скважность 2, то period надо задать 10, а value - 5. Я правильно понимаю ?
Ну, да. Выглядит верно.
Я бы вместо 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 будет постоянно выполнятся с заданными значениями ?
Да, программы в PRU выполняются сами собой и им не нужны какие-либо пинки снаружи.
Но стоит учитывать, что MemoryTransfer может завершиться с ошибкой и PRU программа данных не получит (см значение SteppersConfig_Pru0MemoryTransfer.writeFails)
Технически, MemoryTransfer делает 100 попыток и, если за эти 100 попыток PRU так и не ответит (например, PRU программа вошла в бесконечный цикл), то обмен отменяется.
На практике у меня данные передавались с 1-го раза, ну максимум со 2-3-4.
Вытащить что?
Нужно всё-таки объявить переменную (хотя бы указать её тип) и тогда уже можно будет рулить тем, какие из полей нужно-не нужно обменивать с основной программой.
Т.е. логика в том, что сначала создаём переменную в PRU программе, а потом уже указываем, что она (или её составные части) будут участвовать в обмене.
Владимир, не подскажите почему у меня на ПК с Windows XP не устанавливается Java 8. Год назад ставил и все было нормально. Скачал с сайта jdk-8u171-windows-i586.exe и не могу поставить. Переустановка ОС ничего не дала.
Владимир, такой вопрос. Файлы PRU*.prg нужно загружать в ПЛК каждый раз после корректировки программ для PRU или это надо сделать один единственный раз ?
чтоб не объяснять как добавлять путь в бат-файле я бы предложил содержимое архива "кинуть" в установленную папку с последним релизом
Владимир, гляньте, пожалуйста, опытным глазом правильно ли у меня все сделано. Правильно ли оформлена программа для PRU0 ? В PRU0 посредством ШИМ управляю входами Step двух драйверов ШД.
Владимир, можете пояснить есть ли возможность управлять с одной PRU 2-мя шаговыми двигателями?(всего нужно управлять 3-мя двигателями). Направление будет определятся обычными выходами контроллера
Данная чуть изменённая программа вызывает ошибку компиляции. из-за инициализации второго объекта PRU_STEPPER
Вложение 37861
Спасибо!
Выкладываю свой Stepper, позволяющий крутить 4 шаговых двигателя на ПЛК-110 (по 2 на 1 сопроцессор)
Ограничение: Ускорение = Замедлению, Импульсы в 1 такт (у меня 10 мкс, так как у меня драйверы ЩД требуют от 5 до 7,5 мкс).
На моем рабочем проекте все работает, а у меня именно 4 шд и работают одновременно. Если хотите выложу видео.
Желаю и Вам удачи!
https://cloud.mail.ru/public/LXH8/shgj2EU4q - Программа для CoDeSys с тестированием
https://cloud.mail.ru/public/7CRH/g9pXhZ1bT - Проект в Hardella
https://cloud.mail.ru/public/5pCP/yn48UdAND - PruConfig для загрузки в CoDeSys
Ваш Stepper может выдавать максимум 50 кГц ?
Переменные в проекте для ПЛК не прокомментированы. Какая переменная сопоставлена Dir, а какая Step ШД ?
500 кГц, но нужно будет исправить время такта на 1 мкс, и в ФБ Stepper_light в 3-х местах где деление исправить с 100 000 на 1000 000.
Но тогда импульсы будут длительностью 1мкс.
Мои драйверы ШД при таких импульсах давали фризы, и так как у меня скорости не достигают и 10 кГц, то я и ввел эти ограничения.