Динамическое отключение/подключение двигателей, привязанных к оси

Редактировал(а) Edgar Allan Poe 2024/02/29 19:00

Для работы функции необходимо наличие опции "Поочерёдное управление несколькими двигателями, подключенными к оси", а также опции "Создание и редактирование макросов" или "Автоматическая смена инструмента" для реализации логики переключения двигателей.

Данная функция позволяет отключать и подключать каждый из двигателей, назначенных на определённую ось (или несколько осей). Рассмотрим ситуацию, когда необходимо управлять станком с двумя суппортами, каждый из которых приводится в движение своим двигателем по оси Z. В этом случае можно модифицировать макрос M6 таким образом, чтобы при смене инструмента сначала старый отводился на безопасную высоту и затем производилось переключение активных двигателей.

В функции SwitchMotors(0, 1) первый параметр — индекс двигателя (начиная с нуля), который необходимо отключить. Второй параметр — индекс двигателя, который необходимо включить. Таким образом при выполнении данной команды будет произведено переключение активного двигателя с первого на второй по списку в меню "Настройки" → "Двигатели".

function m6()
   if (Is_THC_Mode() or Is_Oxy_Mode()) then
       return
   end
    
   local toolSlot = GetSelectedToolSlot()
   local previousToolSlot = GetToolSlot()
    
    ExecuteMDI("G53 G0 Z0")
    
   if (toolSlot == 2) then
        SwitchMotors(0,1)
   else
        SwitchMotors(1,0)
   end
    
   local delta = 200  -- расстояние между двумя "головами"
    
   if (toolSlot == 2 and toolSlot ~= previousToolSlot) then
       local CurrX = AxisGetPos(Axis.X)
       local CurrY = AxisGetPos(Axis.Y)
       local NewY = CurrY - delta
        ExecuteMDI("G55")
        ExecuteMDI("G10L20P0 X"..str(CurrX).." Y"..str(NewY))
        ExecuteMDI("G90 G0 Y"..str(CurrY))
   elseif (previousToolSlot == 2 and toolSlot ~= previousToolSlot) then
       local CurrX = AxisGetPos(Axis.X)
       local CurrY = AxisGetPos(Axis.Y)
       local NewY = CurrY + delta
        ExecuteMDI("G54")
        ExecuteMDI("G10L20P0 X"..str(CurrX).." Y"..str(NewY))
        ExecuteMDI("G90 G0 Y"..str(CurrY))
   end
    
    SetToolSlot(toolSlot)
end

После того как работа вторым инструментом завершена, переключиться на использование первого суппорта можно командой M6 T1, в которой будет вызвана функция SwitchMotors(1,0). При этом будет автоматически восстановлена машинная координата по оси Z на значение, которое она имела, когда был активен первый двигатель.

При необходимости управления отключением/подключением каждого двигателя по отдельности можно использовать функции MotorDisable и MotorEnable, принимающие один параметр — индекс двигателя.

На вкладке "Диагностика" для отключенных двигателей отображается красный индикатор "Двигатель отключен". Включить все двигатели, т.е. вернуть состояние по-умолчанию, можно с помощью кнопки "Сделать все двигатели активными".