Итак дальше.
Вот конфиг, мой тестовый, в нём одна ось.
- 1.zip
- (2.04 КБ) 260 скачиваний
Будем на его основе разбираться.
Итак как работает ось в Lcnc.
Значит каждый сервопериод расчитывается координата оси, где она должна быть. Это все делается в основном модуле(ядре) самой Lcnc. Т.е. если не двигать ось, она должна стоять на месте. Допустим она стоит в координате 0. Итак посмотрим что у нас есть.
Код: Выделить всё
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
# My driver
loadrt to_pci
loadrt pid names=pid.x
В этих строках мы подгружаем в нашу систему нужные модули. Первые 2 строки это модули кинематики они должны быть всегда, в данном случае кинематика trivkins - это стандартная кинематика. На этом останавливаться не будем.
Далее подгружен драйвер to_pci и модуль pid.
Теперь если открыть вкладку PINS увидим вот это:
Тут целый ряд разделов: axis,axisui,ini,iocontrol,motion-command-handler, motion controller, motion, servo-thread,pid, pyvcp,to_pci
pid,to_pci- мы подключили см. чуть выше.pyvcp - подключен в другом hal файле это просто панелька с кнопками.
Все остальное это интерфейс(т.е. сигналы которые выдает и принимает ядро Lcnc) для передачи команд что то включить или куда то поехать или ядро смотрит включено что то или координаты положения. Описание опять же можно найти на все сигналы этих разделов.
Остановимся на разделе axis(в этом разделе все сигналы связанные с осями):
Тут есть подраздел 0 - это как раз наша одна ось, которую мы объявили в ini файле. Если будет больше осей - то тут появятся подразделы 1,2,3... сколько будет у вас осей. И в каждом подразделе будет куча сигналов. Все эти сигналы относятся к данной оси.
Тут много сигналов например: in-position это логический сигнал(0 или 1) показывает находится ли ось в заданной позиции или ещё не доехала до неё, f-error - (число показывающее отклонение оси от требуемой позиции в каждый момент времени) этот сигнал понадобится при настройке пида, когда нужно будет настроить ось что бы эта ошибка(рассогласование) была минимальна. В общем всего много почитаете...
Остановимся на двух сигналах motor-pos-cmd и motor-pos-fb.
Итак я уже говорил, что каждый сервопериод расчитывается координата оси, где она должна быть. И эта координата передаётся в параметре motor-pos-cmd, т.е. это цифра показывает какая сейчас должна быть позиция. Lcnc посчитал это число и выдал. Дальше как хотите сами там регулируйте крутите, но координата должна быть такой!
А вот по motor-pos-fb как раз Lcnc смотрит выполняем мы его задание или нет.
Причём т.к мы работаем с реальным железом, отклонения от требуемого точно будут. Мы Lcnc задаём погрешность в пределах которой будет считаться что ошибка допустимая:(ini)
.
В данном случае если ошибка меньше 10 метров, то все нормально (такое большое число для настройки, при реальной работе тут будут цифры меньше миллиметра).
Логика Lcnc такая :
Lcnc посчитал это число и выдал. Дальше как хотите сами там регулируйте крутите, но координата должна быть такой!
И если он смотрит что мы превысили погрешность, то это АВАРИЯ - > станок отрубается.
Теперь дальше В HAL файле можно соединять сигналы разных модулей, но только те которые есть, т.е. смотрим как называется выходной сигнал одного модуля, смотрим как называется входной сигнал другого модуля и связываем их.
Например :
Код: Выделить всё
net x-pos-cmd axis.0.motor-pos-cmd
net x-pos-cmd => pid.x.command
Есть в hal такие две строки. Это нужно понимать так net - соединение(цепь, провод как угодно) но у этого провода есть имя "x-pos-cmd" это имя можно дать любое, главное что бы вы сами понимали что через этот провод(виртуальный) вы передаёте. В данном случае это управление позиционирования оси Х.
И можно посмотреть что соединяет цепь под названием "x-pos-cmd", это в разделе не pins, а signals:
Так же в окне show видно что источником является axis.0.motor-pos-cmd, а приёмником pid.x.command.
При описании связи типа:
Стрелка никакого значения не имеет просто информативность, её может и не быть, а вот в окне show стрелка показывает вход это или выход.