А что надо выкладывать ?
Вид для печати
прикладывать надо мозги :)
https://youtu.be/S8Z8DCpVsrc
наработки небольшие по gcode и другим motion, есть и gcode и cam... не до конца понятно, как эмулировать виртуальный привод в коде.
CNC интерполятор и декодер GCODE , есть и круговая и линейная интерполяция можно прикручивать к PRU.
сделать цикл 20мкс, у в нем уставку по позиции в PRU передавать. В PRU расчет сколько надо импульсов сделать чтобы за 20мкс оказаться в той точке (на данном смещении). (те подсчет частоты импульсов) и с интераолятора dx dy передавать каждые 20мкс. как-то так. Нет ПЛК и всего остального. Есть только PI с CAN и сервы с CANOpen , как руки дойдут то буду дальше крутить.
20 мкс будет маловато. За такое время в программе PRU мало что получится сделать. При неизменном времени движения (20 мкс) и переменных расстояниях перемещения режущего инструмента надо будет менять на ходу частоту следования импулсов на быстрых выходах ПЛК. Тут основная проблема разгон и торможение. Еще одна проблема смена на ходу направления движения режущего инструмента.
ну на практике наверное не просто , разгоны и тд все софт из Codesys делает. А так знаем что цикл 20мкс, а цикл PRU t , и надо за 20кмс выдать столько-то импульсов , наверное можно организовать. Хотя сам не пробовал с PRU работать. Во вложении пример с GCODE для V3 + коррекция режущего инструмента и тд.
ПО из TwinCAT взято ?
Сам писал :) все для людей.
Приятно познакомиться, мистер Хилмар.
Вложение 47035
Приятно, мистер Frog.
Добрый день всем! После генерации кода Харделлой и открытия Кодесиса названия всех параметром к конфигурации ПЛК пишутся кракозабрами + какая-то ошибка билда вылезает. При этом код сгенерился нормально.
Вложение 48048
Собственно код ниже
Вложение 48049
Собственно что может быть? И да проект под ПЛК73...
Черепаха работает на Яве, которая в свою очередь по умолчанию использует юникод и виндузовый ср1251 превращается в такие символы
Можно сделать экспорт конфигурации и в текстовом редакторе подобрать нужную кодировку, это как один из вариантов
Как знать. Как знать.
aRRma99 использует широкоизвестный в узких кругах подход "использовать Hardella не для PRU программирования, а как редактор ST".
Такое, и для ПЛК73 тоже должно работать.
Но, блин, не сказать, что текущее состояние сильно лучше КДС :-/
aRRma99, а какие файлы получаются в итоге?
Можно на содержимое папки c:\...\Project4\target посмотреть?
Даже текущее состояние в разы лучше Кодесиса, а еще и все заработает как надо так вообще! Кстати замечал данную проблему и у самого Кодесиса. Многие студенты которые ставят себе на комп Кодесис видят в конфигурации иероглифы, причем иероглифами написаны прям все слова в конфигурации. Хотя у самого в данный момент нет такой проблемы (только при экспорте из Харделлы)
Вложение 48062
Добрый день.
Задача не стандартная , управление позиционированием, основанное на четырёх ШД.
Визуально представляет из себя четырёхкоординатный станок, но код динамический, т.е. не прямой алгоритм как на Mach3.
По этому планирую использовать для управления ПЛК.
С ОВЕН110-30М2 немного знаком, но действительно в кодесисе 2.3, по крайне мере не нашёл готовых библиотек, для работы с ШД и сервоприводами.
Наткнулся на данную ветку, скачал hadella IDE 1/7/2 , хотел бы протестировать на столе, но зашёл в тупик, как добавить в конфигурацию ещё дополнительные блоки управления ШД? т.е. всего должно получиться 4 шт.
STEPPER_RPU2 добавил, методом копирования, а прописать в SteppersConfig не получается, окно с кодом не редактируется.
Или проблема в том , что hadella IDE поддерживает максимум 2 ШД ?
Кто нибудь реализовал на железе управление ШД через данную среду?
Заранее благодарю Вас.
Я немного не про это пишу.
Я про то, что текущее состояние едва ли лучше КДС (по крайней мере, это моя оценка). Не значит, что лучше не будет.
Возможно, aRRma99 это первый случай использования Hardella для простого программирования.
Даже я свой домашний ПЛК110 по-простому в КДС программировал :-/
По факту, оказалось, что и сам стандарт 61131 на удивление кривой.
Например, система типов (signed, unsigned, byte, word и это всё) сделана хаотично, и без какой-либо симметрии.
В результате, несложные конструкции типа -1 уже вызывают кучу вопросов к тому что это должно означать.
И это ещё сверху полируется своеобразным взглядом КДС на стандарты.
Но, конечно, возможность "взять фрагмент кода, вынести в блок" или "объявить переменную по месту" или ещё чего -- можно без проблем дорабатывать и должно быть удобнее.
Ну или вечная тема "любителей конфигуратора" или "любителей modbus библиотеки".
Как раз в Hardella можно было бы сделать нормальный и понятный конфигуратор (который в результате генерировал бы modbus.lib код). Но тут снова: либо никто не понимает, либо уже привыкли.
Тут, конечно, можно было бы посмотреть, что как бы 5 лет прошло.
Но, блин, дальше ШД как-то заинтересованности не слышно.
Вернее, как неслышно. Тут, конечно, регулярно что-то пишут про ШД (ну и да, давно бы пора сделать нормальное изменение скорости на ходу).
И, да, как-то раз меня ни с того ни с сего материально поблагодарили со словами, что станок у них заработал. Это, конечно, здорово.
Вот пример проекта с 4 ШД: https://owen.ru/forum/showthread.php...l=1#post282856
В процессе будут меняться заготовки , высота, диаметры и т.д... соответственно в зависимости от этого будут кардинально изменяться координаты. Цикл исполнения программы бесконечный.
Благодарю за ссылки, буду разбираться, значит можно 4 шд запустить.
Lexey-ru
Да, можно. Но только в одно направление. Харделле доступно только четыре быстрых выхода. Для полноценного командования четырмя ШД требуется минимум восемь. Да, можно в качестве ДИР использовать обычные выходы, однако следует принимать во внимание возможный лаг между работой обычных и быстрых выходов. Например начинать махать Степом после некоей задержки после смены Дира.Цитата:
можно 4 шд запустить.
Мне конечно же необходимо крутить в обои направления.
Можно дополнительные модули расширения установить высокоскоростные. В таком случае не будет дефицита с количеством быстрых выходов.
Я имел в виду модули расширения :
https://owen.ru/product/moduli_diskr...rfejsom_rs_485
Это я понимаю, но чтобы на выходе МУ что-либо поменялось оно должно получить команду по modbus.
Ну и в МУ нет возможности "генерировать указанное количество импульсов".
В целом, конечно, можно управлять ШД в режиме ШИМ выхода, но точность позиционировать будет плавать (т.к. сигналы по modbus ходят непонятно как)
Доброго времени!
Нужен частотомер на быстрых вх. ПЛК110М02. (от 100 до 10100 Гц)
Решил что надо писать прогу для PRU
но раньше ничего подобного на таких языках не делал.
Наваял вот что:
А как из харделлы скопировать код? )))
прикрепил проект.
если расширение сменить на msd то проект откроется в Hardella?
Идея такова: измеряем длительность паузы между импульсами. И исходя из полученного значения высчитываем частоту.
Если считать что время цикла 1 мкСек.
Но у меня на втором канале IDE подсвечивает переменные красным.
Его, 2 к***** я просто скопировал. И не могу понять что не так сделал.
Это плюс. Вроде, в ПЛК110М02 быстрые входы могут работать в режиме счётчика.
Тогда можно в обычной КДС программе считывать показатель этого счётчика, смотреть сколько оно намотало "за секунду" и усреднять, если нужно.
Так не работает?
Я не к тому, что Hardella не работает, а, скорее, к тому, что простой частотомер на fast counter'ах (из обычного КДС) может оказаться проще и понятнее.
Так сказать, не стрелять из пушки по воробьям.
Да, это непросто. Либо выделять всё и ctrl+c/v, либо папку с проектом сохранить в zip архив.
Переменные объявлены? Нет проблем в духе "русская буква C в названии переменной"?
По-хорошему, если переменные объявлены, то ctrl+пробел в Hardella должно показывать автодополнение и там эти переменные должны быть.
Если перейти на красную переменную (напр CounterCH2), и нажать ctrl+пробел, то что-нибудь будет?
ctrl+пробел = успех.
Хотя переменные объявлены... ну да ладно.
В идеале я пытаюсь добавить управление быстрыми выходами. по достижении заданной частоты. (материал сыпится, время идёт... С кодесис тут наверняка будут мСек плясать не предсказуемо)
ctrl+c/v не получается. Перемешиваются строки...
Хотя вроде ничего. А в блокнот, - так безобразие....Цитата:
PROGRAM FAST_COUNTER
variables:
@Export
@Export
inputs : FAST_INPUTS;
CounterCH1 : WORD; (* счётчик для первого канала *)
CounterCH2 : WORD; (* счётчик для второго канала *)
StartCounter1 : BOOL; (* начался отсчёт по первому каналу *)
StartCounter2 : BOOL; (* начался отсчёт по 2 каналу *)
body:
(* первый канал *)
(* проверка флага начатого отсчёта *)
IF StartCounter1 THEN (* если флаг установлен *)
IF R_TRIG(CLK := inputs.in1).Q THEN (* ждём передний фронт второго импульса *)
(* если импульс пришёл *)
counter1 := CounterCH1; (* записываем значение на выход *)
CounterCH1 := 0; (* обнуляем счётчик *)
(* иначе, если флаг начала установлен, но пока нет переднего фронта второго импульса *)
ELSE
CounterCH1 := CounterCH1 + 1; (* считаем циклы *)
END_IF;
(* иначе, если флаг первого импульса не установлен *)
ELSE
IF F_TRIG(CLK := inputs.in1).Q THEN (* ждём заднего фронта первого импульса *)
StartCounter1 := TRUE; (* если импульс пришёл, устанавливаем флаг начала счёта *)
CounterCH1 := CounterCH1 + 1; (* и начинаем счёт циклов *)
END_IF;
END_IF;
(* второй канал *)
(* проверка флага начатого отсчёта *)
IF StartCounter2 THEN (* если флаг установлен *)
IF R_TRIG(CLK := inputs.in2).Q THEN (* ждём передний фронт второго импульса *)
(* если импульс пришёл *)
counter2 := CounterCH2; (* записываем значение на выход *)
CounterCH2 := 0; (* обнуляем счётчик *)
(* иначе, если флаг начала установлен, но пока нет переднего фронта второго импульса *)
ELSE
CounterCH2 := CounterCH2 + 1; (* считаем циклы *)
END_IF;
(* иначе, если флаг первого импульса не установлен *)
ELSE
IF F_TRIG(CLK := inputs.in2).Q THEN (* ждём заднего фронта первого импульса *)
StartCounter2 := TRUE; (* если импульс пришёл, устанавливаем флаг начала счёта *)
CounterCH2 := CounterCH2 + 1; (* и начинаем счёт циклов *)
END_IF;
END_IF;
END_PROGRAM
output counter1 : WORD; (* This variable will be visible in CoDeSys program *) output counter2 : WORD; (* период между импульсами в мкСек Канал ном.2 *)
Подскажите пожалуйста:
Если я пишу программу для получения информации с быстрых входов (1 и 2) и воздействия на быстрые выходы (с 1-го по 4-ый), мне нужно писать 2 программы? Одна для PRU0, вторая для PRU1. Так?
Где почитать как взаимодействовать между PRU0 и PRU1?. (то есть, - если из пру0 я читаю входы и в зависимости от полученного результата воздействую на выходы 3 и 4, то как посылать данные о текущем состоянии входов на пру1?)
Такая программа для PRU1 корректа?
IF counter1 = FinalValueCH1 AND counter2 = FinalValueCH2 THEN
portion_ready := TRUE;
CASE CurrentOutputs OF
1: FAST_OUTPUTS(out1 := FALSE);
2: FAST_OUTPUTS(out2 := FALSE);
3: FAST_OUTPUTS(out3 := FALSE);
4: FAST_OUTPUTS(out4 := FALSE);
END_CASE;
ELSE
CASE CurrentOutputs OF
1: FAST_OUTPUTS(out1 := TRUE);
2: FAST_OUTPUTS(out2 := TRUE);
3: FAST_OUTPUTS(out3 := TRUE);
4: FAST_OUTPUTS(out4 := TRUE);
END_CASE;
END_IF;
https://hardella.com/docs/pru/featur...9A110-%D0%9C02
Первые два быстрых выхода запитаны от PRU0, поэтому если двух достаточно, то обмен городить не нужно.
Если нужен именно обмен между PRU0 и PRU1 (и обмен нужен быстрый), то делать нужно через ассемблерную вставку.
В самой серде, наверное, надо подумать как сделать пересылку данных. Объявлять где-то глобальную переменную что-ли, чтобы можно в pru0 в её записывать, а в pru1 читать.
Ага. Понятно.
Только смущают слова:то есть проверенного действом способа пока нет.Цитата:
наверное, надо подумать как сделать пересылку данных. Объявлять где-то глобальную переменную что-ли
Как и какую вставку делать нужно узнавать из документации по AM1808?
Apd.:
However for
passing information between PRUs, each PRU can access the data ram of the ‘other’ PRU through address 0x0000 2000.
Переводчик: Однако для
передавая информацию между PRU, каждый PRU может получить доступ к полосе данных 'другого' PRU по адресу 0x0000 2000.
Как из Харделлы сделать переменные, для их записи из программы для PRU0 в Data RAM1 (PRU1)?