http://www.cnc-club.ru/forum/viewtopic. ... 32#p320032
http://www.cnc-club.ru/forum/viewtopic. ... 909#p27459
http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=521
http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=20385)
можно вынести лишь то, что проблема решается, потому свой свежайший опыт публикую в виде инструкции, с уровнем описания, по возможности, для пользователей с самой начальной подготовкой.
Благодарности - Что, зачем и почему.
Я работаю с деревом на станке умеренного размера, метр на три. Иногда делаю детали с переворотом, т.е. двусторонние. Понятно, что когда режем вдоль или поперек волокон и так уже геометрия не одинаковая, а тут еще и ось У никогда не перпендикулярна оси Х, т.е. углы априори не прямые. Более того, на станках такого размера вдоль длинной оси ставятся два мотора, по одному с каждой стороны (для одномоторных станков вопрос выравнивания столь же актуален). Я использую реечную передачу (для ШВП все равно актуально). Если я настройками датчиков Home выравниваю портал, то у меня обостряется проблема люфтов Рейка\Шестерня (что свидетельствует о приличной геометрии станка). В моем случае по оси У и Z люфта считай что нет благодаря "избирательному переносу" (трибология) мелкодисперсной древесной пыли. А ось Х прикрыта. И по традициям лучших охотников есть желание одним выстрелом убить двух зайчиков - решить проблему люфта и геометрии. Решение - простое, надо создать при поиске Home принудительно неперпендикулярность Х и У и при выполнении программ это компенсировать. Принудительно нарушая перпендикулярность Х и У я создаю предварительное напряжение в портале (это известная технология предварительного напряжения, используемая считай что повсеместно) и благодаря этому левый мотор оси Х и правый всегда будут катать свои шестерни лишь по взаимнопротивоположной стороне рейки, тем самым автоматически выбирая люфты.
Задача решается в несколько этапов.
Этап -1 вычисление меры неперпендикулярности.
А как вычислить меру неперпендикулярности? - благодаря помощи sas_75 мы имеем простую формулу.
Методология такая - на станке любого размера надо разместить угольник поверочный, желательно класса 1 и максимально доступного размера, не битый (т.е. ребра без выщерблин) и чистый. Размещение вцелом почти произвольно - лежит и прижат, он НЕ должен контактировать с токопроводящими деталями станка. Хорошим вариантом будет размещение под углом 45% к оси Х. Зажав в шпиндель штифт (любимого размера) и подключив контакт Probe к угольнику ищем координаты 4 точек, на каждом ребре угольника по 2 точки (командами вида G38.2 X100 , где 100 - это потенциальная координата. в сторону которой станку следует ехть до контакта с угольником. Диаметр штифта значения не имеет. Поскольку у поверочного угольника угол прямой по четырем точкам мы можем вычислить угол неперпендикулярности оси Х и имеющейся не ортогональной У.
Для моего угольника я использую вот такую программку поиска точек контакта -
(для просмотра содержимого нажмите на ссылку) - это программа обмера угольника, мой угольник 160*250. Вымерив кривизну и поправив командой ХАЛ кривизну в рабочем столе сделал паз, разместил в нем стальную пластину, подключил ее к пробе, измерил ее отклонени от перепендикуляра (сравнением показателя кривизны ДО коррекции из замеров угольник и из нижестледующей программы при корректоре внутри нее =0) и в дальнейшем после каждого хоминга вызываю следующую подпрограмму -
которая выводит значение кривизны для команды
Файлик Портал содержит математику, она примитивна, она настолько примитивна, что ее может посчитать LinuxCNC и записать в файлик, которые потом может использовать скриптик для команды ниже. Для вычисления НЕОБХОДИМО И ДОСТАТОЧНО знать длину только четырех отрезков - дельт по Х и по кривой У (не ортогональной) между двумя точками касания к каждому ребру. Каждому лучше делать свой файлик. На этом мы замерили геометрию и имеем значение для корректировки. Да, я знаю, что реально балка портала скорее сильно сдавленная S, а не прямая. Но в моих задачах покамест это не существенно.
Этап - 2. Внедрение функционала в LinuxCNC.
Для корректировки средствами LinuxCNC для начала нужно скомпилировать модуль, любезно предоставленный из своих личных архивов NKP (более свежий от автора модуля может некорректно обрабатывать значения коррекции свыше 0.5мм) - . Для компиляции открываем терминал и там -
sudo halcompile --install путь-к-файлу/relkins.c
При успешном выполнении последней строчкой будет сообщение о том, что скомпилированный модуль ядра скопирован в нужное место. Для пущей уверенности перезагрузитесь - чтобы быть уверенными, что собранный модуль ядра загрузился.
Затем нам надо в директории настроек станка открыть hal файл. Обычно это /home/user/linuxcnc/configs/имястанка/имястанка.hal
В этом файле надо в первых же строках -
loadrt trivkins
заменить на
#loadrt trivkins
и ниже вставить 2 строки -
loadrt relkins coordinates=XYZ adjust=X from=Y steps=2 step_size=1030 offset=-515
setp relkins.adjX.Y-515 0 (на самом деле эту строку лучше вписать позже, см. ниже)
Важно понимать значение всех параметров. Указывая -
coordinates=XYZ мы говорим об использовании (вообще) станком трех осей. Речь идет о двухмоторной реализации в LinuxCNC 2.7.15 + модуль выравнивания портала (для двух моторов без модуля используется LinuxCNC 2.8 и выше, у меня здесь опыта нет, но схема похожая и в этой строке указывают + допмотор)
adjust=X - что при коррекции неперпендикулярности мы будем корректировать положение Х (у меня Х >> У)
from=Y что корректируя Х мы будем вносить изменения в зависимости от положения У
steps=2 что будем использовать (в моем случае) только две точки для расчетов
step_size=1030 что между этими двумя точками столько мм
offset=-515 что первая точка там.
setp relkins.adjX.Y-515 0 -- что первую точку берем за ноль (если ошиблись с расчетами = программа не запустится, см. ниже)
Также важно понимать, что этот hal файл LinuxCNC считывает при загрузке программы, поэтому в него (я) НЕ записываю вторую точку коррекции, ее я передам программе после проверки геометрии. Первую тоже могу "потом", но экономя буковки хочу в терминале вводить только одну команду, потому в первой точке значение коррекции указываю как 0. Геометрию я вычисляю ДО коррекции (считая это правильным) и планирую это делать при каждом запуске станка (для этого с уже выверенной геометрией я сделал паз, разместил в нем специально кулпенный на Али нож от рубанка (100р?) дл 210мм и подключил его к пробе - теперь сделав замеры его угла к оси Х в дальнейшем буду не по угольнику, а по этой пластине вычислять поправки).
Теперь можно запустить LinuxCNC2.7.хх. Если вы ошиблись в настройках, программа может вылетать. Тогда удалите (временно) строчку -
setp relkins.adjX.Y-515 0
ВАЖНО - для LinuxCNC2.8.2 в августе 2022 все аналогично, но конфиги пправятся немного иначе, это здесь - viewtopic.php?p=634350#p634350
Для проверки того, что все идет как надо следует в терминале (без sudo, т.е. хватает прав юзера) ПРИ ЗАПУЩЕННОМ LinuxCNC выполнить -
halcmd show pin relkins
В ответ терминал расскажет, какие "пины" программа знает -
halcmd show pin relkins
Component Pins:
Owner Type Dir Value Name
6 float IN 0 relkins.adjX.Y-515
6 float IN 0 relkins.adjX.Y515
Я по первости не совладал с этими 515 (в первой строке указывал офсет 500, шаг 10030 и т.п., а программа создает пины исходя из заданного в первой строке и если ее ожидания не совпадут с последующими строками = аборт).
Этап - 3, применение.
Вот теперь мы можем замерить геометрию и вычислить необходимую величину коррекции в крайних точках. Сообщить эб этом программе (применить на лету) можно и нужно в терминале (бе судо и т.п.) -
halcmd setp relkins.adjX.Y-515 0
halcmd setp relkins.adjX.Y515 2.23545
Здесь важно не ошибиться со знаком этих корректирующих 2.23545 - ну да разберетесь на опыте.
Вы можете это сделать в любой момент, кроме всех тех моментов, когда станок двигается. Именно поэтому в главный конфиг я записал только 1 точку коррекции, для -515. Для второй я скомандую в терминале, это может сделать даже скрипт.
Для проверки работы можно скомандовать вместо 2.23545 например 50 и дав команду станку-
g1 F500 Yдругой_край
по его движению сразу понять, что станок движется и по У и при этом совершает компенсирующее движение по Х. в правильную ли сторону 9в смысле компенсации кривизны) движется и не напутали ли вы со знаками + и - у вводимых значений.
Надеюсь, что объяснил доступно и это будет полезно. Приступаем к Этапу - 4 = выпиваем и закусываем.