Исходный код вики Динамическое отключение/подключение двигателей, привязанных к оси
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | {{info}} |
| 2 | Для работы функции необходимо наличии опции "**Поочерёдное управление несколькими двигателями, подключенными к оси**", а также опции "**Создание и редактирование макросов**" или "**Автоматическая смена инструмента**" для реализации логики переключения двигателей. | ||
| 3 | {{/info}} | ||
| 4 | |||
| |
2.1 | 5 | Данная функция позволяет отключать и подключать каждый из двигателей, назначенных на определённую ось (или несколько осей). Рассмотрим ситуацию, когда необходимо управлять станком с двумя суппортами, каждый из которых приводится в движение своим двигателем по оси Z. В этом случае можно модифицировать макрос (% style="color:#8d69b2" %)**M6**(%%) таким образом, чтобы при смене инструмента сначала старый отводился на безопасную высоту и затем производилось переключение активных двигателей. |
| |
1.1 | 6 | |
| |
2.1 | 7 | В функции SwitchMotors(0, 1) первый параметр - индекс двигателя (начиная с нуля), который необходимо отключить. Второй параметр - индекс двигателя, который необходимо включить. Таким образом при выполнении данной команды будет произведено переключение активного двигателя с первого на второй по списку в меню "Настройки" → "Двигатели". |
| |
1.1 | 8 | |
| 9 | {{code language="lua"}} | ||
| 10 | function m6() | ||
| 11 | if (Is_THC_Mode() or Is_Oxy_Mode()) then | ||
| 12 | return | ||
| 13 | end | ||
| 14 | |||
| 15 | local toolSlot = GetSelectedToolSlot() | ||
| 16 | local previousToolSlot = GetToolSlot() | ||
| 17 | |||
| 18 | ExecuteMDI("G53 G0 Z0") | ||
| 19 | |||
| 20 | if (toolSlot == 2) then | ||
| 21 | SwitchMotors(0,1) | ||
| 22 | else | ||
| 23 | SwitchMotors(1,0) | ||
| 24 | end | ||
| 25 | |||
| 26 | local delta = 200 -- расстояние между двумя "головами" | ||
| 27 | |||
| 28 | if (toolSlot == 2 and toolSlot ~= previousToolSlot) then | ||
| 29 | local CurrX = AxisGetPos(Axis.X) | ||
| 30 | local CurrY = AxisGetPos(Axis.Y) | ||
| 31 | local NewY = CurrY - delta | ||
| 32 | ExecuteMDI("G55") | ||
| 33 | ExecuteMDI("G10L20P0 X"..str(CurrX).." Y"..str(NewY)) | ||
| 34 | ExecuteMDI("G90 G0 Y"..str(CurrY)) | ||
| 35 | elseif (previousToolSlot == 2 and toolSlot ~= previousToolSlot) then | ||
| 36 | local CurrX = AxisGetPos(Axis.X) | ||
| 37 | local CurrY = AxisGetPos(Axis.Y) | ||
| 38 | local NewY = CurrY + delta | ||
| 39 | ExecuteMDI("G54") | ||
| 40 | ExecuteMDI("G10L20P0 X"..str(CurrX).." Y"..str(NewY)) | ||
| 41 | ExecuteMDI("G90 G0 Y"..str(CurrY)) | ||
| 42 | end | ||
| 43 | |||
| 44 | SetToolSlot(toolSlot) | ||
| 45 | end | ||
| 46 | {{/code}} | ||
| 47 | |||
| |
2.1 | 48 | После того, как работа вторым инструментом завершена, переключиться на использование первого суппорта можно командой (% style="color:#8d69b2" %)**M6**(%%)** T1**, в которой будет вызвана функция SwitchMotors(1,0). При этом будет автоматически восстановлена машинная координата по оси Z на значение, которое она имела, когда был активен первый двигатель. |
| |
1.1 | 49 | |
| 50 | При необходимости управления отключением/подключением каждого двигателя по отдельности можно использовать функции MotorDisable и MotorEnable, принимающие один параметр - индекс двигателя. | ||
| 51 | |||
| |
2.1 | 52 | На вкладке "Диагностика" для отключенных двигателей отображается красный индикатор "Двигатель отключен". Включить все двигатели, т.е. вернуть состояние по-умолчанию, можно с помощью кнопки "Сделать все двигатели активными". |