На токарном у меня дополнительно стоит достаточно мощный ШД, который может подключаться к шпинделю с помощью муфты Хирта. Ранее я пробовал с помощью него нарезать резьбу резцом, но получается очень медленно. И тут мне стрельнуло - раз у меня все резьбы мелкие, то почему бы не нарезать плашкой? Сделал держатель для плашки, попробовал - мощности ШД вполне хватает. Однако, хоть и быстрее, чем руками, но все равно медленно. Придумал сделать такой финт - в настройках Motor Tuning параметр Step per стоит 29,6 и максимальная скорость 6000. При таких настройках, как сказал выше, мотор крутится медленно и никак ускорить его не получается. Однако, если поставить параметр Step per более высоким, то скорость во столько же раз увеличивается. Решил воспользоваться этим - увеличил Step per в 4 раза и таким образом скорость нарезания резьбы и мощность мотора пришли в гармонию. При бОльшем увеличении мощности уже не хватало.
Однако увеличение Step per приводит к тому, что теперь, если дать команду А360, то получится по факту в 4 раза больше, т.е. 1440, т.е. 4 оборота вместо одного.
Получается, что при подаче команды на ось А, надо это учитывать. Код получается неудобный, что-то типа А=шаг*длину резьбы*360/4. Кроме того, чтобы плашка гарантированно скручивалась с резьбы, я решил при скручивании обратный ход делать чуть подлиннее и соответственно нужно дать команду на увеличенное количество градусов. Чтобы упростить себе жизнь сперва написал G-код с переменными, чтобы задавать только шаг и длину резьбы. Стало удобнее, но все равно монструозно, т.к. все команды тут же в коде.
В итоге задачу решил кардинально - написал собственную команду M76, с дополнительными параметрами R (шаг резьбы) и Q (длина резьбы). Вот теперь удобно. В G-коде теперь достаточно вбить строку вида M76 R1 Q14, дальше станок все сделает самостоятельно.
Выкладываю код макроса. Такое длинное описание сделал специально, чтобы была понятна логика работы программы. Да, сарзу дисклеймер, - ось шпинделя на моем станке - Х, а поперечная подача - Y. Знаю, что не по фен-шую, не бейте, мне так проще.
Код: Выделить всё
' Сохраняем в макросы, как команду М, например M76
' В G-коде указываем данную команду с дополнительными параметрами - R и Q
' R - шаг резьбы
' Q - длина резьбы
' Пример применения в коде. Нарежется резьба М6, длиной 12 мм:
' G0 Y0 (подводим к торцу заготовки)
' M76 R1 Q12
L=param2() 'переменной L присваиваем значение параметром Q (длина резьбы)
LL=L+1 'Для того, чтобы гарантировано скрутиться с резьбы при выкручивании, на всякий случай длину выкручивания увеличиваем на 1 мм и присваиваем новое значение переменной LL
d=param3() 'переменной d присваиваем значение параметром R (шаг резьбы)
deg=d*L*360/4 'вычисляем количество градусов, на которое должна повернуться передняя бабка, чтобы нарезать резьбу с заданным шагом и длиной
degg=d*LL*360/4 'вычисляем количество градусов, на которое должна повернуться передняя бабка в обратную сторону, чтобы слезть с резьбы
ActivateSignal (Output1) ' переключаем переднюю бабку на ШД
Code "G91" ' переходим в относительные координаты
Code "F3000" ' устанавливаем рабочую скорость нарезания
Code "G1 A"° &"X-"&l ' включаем вращение бабки одновременно с синхронным перемещением плашки.
sleep (1000) 'ожидаем, чтобы погасить инерцию
Code "F6000" ' устанавливаем максимальную скорость вращения
Code "G1 A-"°g &"X"&ll ' скручиваемся с резьбы. Для гарантии станок пройдет дополнительный 1 мм в обратную сторону.
Code "G90" ' возвращаемся в режим абсолютных координат
While isMoving () ' ждем, пока все эти команды выполнятся
Wend
deActivateSignal (Output1) ' отключаем переднюю бабку от ШД