Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Macros & Script Mach
Все о станках с ЧПУ > Станки с ЧПУ, Hobby CNC > Программное обеспечение
arisov77
Предлагаю здесь обсуждать и делиться скриптами и макросами для Mach.

Макросы и скрипты предоставляют большие удобства при работе. Можно, например одной нажатием одной кнопки сделать сразу несколько операций.

Я делаю так. В Mach3Screen или Screen4 создаю нужную кнопку и в окне Execute G-Code (для Mach3Screen) или G-Code Function (для Screen4) пишу например, М1015 (М-латинская). Всё это дело сохраняю. Давать имена (значения) желательно выше 1000, чтобы не совпали с стандартными Machа.
Далее в Mach открываю Operator / VB Script Editor и в появившемся в окне ввожу текст скрипта и сохраняю его в папке macros, а в ней папке с соответствующим профилем, например Plasma. Название даю точно такое же, как указывал для кнопки (М1015).
В новых версиях Масh есть уже встроенный редактор кнопок. Можно пользовать им, но так как я пользуюсь Version R1.83.027, то описываю именно для этого варианта.
Редактором кнопок можно «выдирать» и смотреть примеры макросов из каких нибудь скринсетов.
В Visual Basic я не силён, о правилах написания и командах можно почитать специальную литературу. Я всё делал «методом научного тыка». В ниже приведённых примерах после верхней запятой – идут комментарии и соответственно, всё что находится в одной строке после верх.запятой не учитывается.

Вот например, мне для своего экрана понадобилась кнопка чтобы могла запомнить позицию, «обнулить» все оси, перемотать программу на начало и «обновить» экран. Эту кнопку я назвал «УСТАНОВИТЬ НОЛЬ ДЕТАЛИ».
-----------------------------
' Set Variable Position + ZerroAll + Rewind + RegenScreen

x = GetABSPosition(0) ‘ переписать (запомнить)
y = GetABSPosition(1) ‘ абсолютные
z = GetABSPosition(2) ‘ координаты X,Y,Z
SetUserDRO 1000, x ‘ (координаты станка)
SetUserDRO 1001, y ‘ (Это стандартный
SetUserDRO 1002, z ‘ скрипт Set Variable Position)

DoOEMButton(1007) ‘ «Обнулить» все оси
code "M30" ‘ «Перемотать на начало»
While ismoving() ‘ Ждём пока программа
Sleep 100 ‘ перемотается
Wend ‘ Как перемоталась
DoOEMButton(160) ‘ «Обновить» экран
------------------------------

Следующий пример – нажатие этой кнопки позволяет вернуться на ранее запомненную позицию (с помощью предыдущей кнопки) (например, в начале работы или после пропадания напряжения питания компа или «зависания»), обнулить положение, перемотать программу и «обновить» экран.
У меня она называется «К НУЛЮ ДЕТАЛИ».
----------------------------------
' Goto Variable Position + Zerro All + Zero Torch Cal
DoOEMButton(1007) ‘ «Обнулить» все оси
x = GetUserDRO( 1000 ) ‘ Восстановление позиции
y = GetUserDRO( 1001 ) ‘
z = GetUserDRO( 1002 ) ‘
code "G0G53X" & x & "Y" & y ‘ Переезд к этой позиции
'code "G0G53Z" & z ‘ (Это стандартный Goto Variable Position)

While ismoving() ' Подождать,
Sleep 100 ' пока
Wend ' не приедет
DoOEMButton(1007) ' Как только приехал, "обнулить положение"
code "M30" ‘ «Перемотать на начало»
While ismoving() ‘ Ждём пока программа
Sleep 100 ‘ перемотается
Wend ‘ Как перемоталась
DoOEMButton(160) ‘ «Обновить» экран
------------------------------


Другая моя кнопка «К НУЛЮ СТАНКА» возвращает портал в исходное положение с последующей перекалибровкой датчиков начального положения (Home). Этот скрипт я также сделал, чтобы он стартовал при первом запуске Mach после нажатия Reset. Для этого в Mach в Config / State / в строке Initialization String ввожу номер этого скрипта, например М1001.
В этой строке также можно задать скорость подачи, которая устанавливается при включении. По умолчанию скорость подачи в Масн = 6мм/мин. Например, если у меня наиболее часто используемая скорость 400мм/мин, то я пишу в строке F400.
Можно сразу выполнить несколько команд, например G80M1001F400.

----------------------------
' GoHome + RefAll
‘ Макрос возрата "Домой" с последующей калибровкой "концевиков"

DoOEMButton(1007) ‘ Zero All - "обнулить положение"
code "G0G28.1Z" & z-0.1 ‘ Откалибровать ось Z
While ismoving() ' Подождать пока
Sleep 100 ' она не откалибруется
Wend ' Как только это закончилось
DoOEMButton(1007) ' «Обнулить» все оси

code "G0G53X" & x-10 & "Y" & y-5 ‘ И поехать
While ismoving() ' поближе к дому
Sleep 100 ' Подождать, пока не приедет
Wend ' как только приехали, снова
DoOEMButton(1007) ' «Обнулить» все оси
CODE "G28.1X-0.1Y-0.1" ' И начать калибровку X и Y
While ismoving() ' Подождать
Sleep 100 ' калибровку
Wend ' и опять
DoOEMButton(1007) ‘ «Обнулить» положение
--------------------------------------------



Вот ещё несколько примеров. Я их не использован, но они взяты со стандартных сетов.
-------------------------------
'Display Mode - Переключения режима отображения на экране
value = GetParam("Boundry")
if value = 1 then
'SetButtonText " Job "
SetParam "Boundry" , 0
else
SetParam "Boundry" , 1
'SetButtonText "Machine"
end if
-----------------

--------------------
' Set Z
Code "G92.2"
'Call SetDRO(24,0)
Call SetDRO(2, ABS(GetOEMDRO(1001)))
----------------------

--------------------
' Zero X, Y ("обнуление" окошек, без переезда)
Call SetDRO(0,0)
Call SetDRO(1,0)
---------------------
--------------------
'Ref All Home – калибровка всех осей
DoButton( 24 ) ‘ Ref Z
DoButton( 23 ) ‘ Ref Y
DoButton( 22 ) ‘ Ref X
DoButton( 25 ) ‘ Ref A
----------------------

Ещё несколько маленьких примеров:

Для этого примера (включение/выключение выхода Output4 одной кнопкой) кроме кнопки надо создать ещё светодиод с ОЕМ кодом =77 (для Output4)
------------------------
' Output 4 On/Off
' Макрос включения/выключения выхода одной кнопкой
If Not GetOEMLed (77) Then ' Если индикатор Output 4 Active LED не светиться,
DoOEMButton(233) ' то выполнить "нажатие" кнопки Output 4 On
Else ' Если иначе (индикатор светиться), то
DoOEMButton(234) ' выполнить нажатие кнопки Output 4 Off
End If '
-------------------------

Этот скрипт вкл./выкл. Триггер1 с индикацией его состояния. Также кроме кнопки создаём свой (нестандартный) светодиод с ОЕМ кодом. Значение этого кода желательно, чтобы было выше 1000. В примере - LED с ОЕМ = 1030.
Вместо сигнала триггера можно использовать другие.
-----------------------
' Trigger1 & Led On/Off
' Макрос включения/выключения триггера 1 с индикацией его состояния.
If GetUserLED (1030) Then ‘ Если индикатор светиться,
DeActivateSignal( OEMTRIG1) ‘ то сбросить триггер
Call SetUserLED (1030, 0) ‘ и погасить индикатор
Else ‘ Иначе (при погашенном индикаторе)
ActivateSignal( OEMTRIG1) ‘ установить триггер
Call SetUserLED (1030,1) ‘ и зажечь индикатор
End If ‘ Конец команды IF
-------------------------

С помощью этого скрипта удобно задавать наиболее часто используемую скорость подачи с одновременным сбросом до 100%. Я сделал для себя несколько кнопок с часто используемыми значениями. Вот пример для задания скорости 250мм/мин.
----------------------------------------
SetDRO 18, 250 ‘ Установить в окне «FeedRate» значение=250
DoOEMButton(1014) ‘ Сбросить скорость подачи до 100%
------------------------------------------


Надеюсь приведенная мною информация окажется полезной, и здесь продолжится обмен скриптами и макросами.
AlexSpb
arisov77
Тема хорошая,полезная и многим пригодится.
Но например мне понятно как засунуть и прописать скрипт,а обычному пользователю нет.
Поэтому нужно подробное описание как изменять сет,как делать горячие клавиши,добавлять кнопки,убирать т .п.
Как работать с Screen3.exe,Screen4.exe.
Причем с картинками или видео.
Может займетесь? ab.gif
arisov77
Цитата(AlexSpb @ 7.2.2009, 10:45) *
arisov77
Тема хорошая,полезная и многим пригодится.
Но например мне понятно как засунуть и прописать скрипт,а обычному пользователю нет.
Поэтому нужно подробное описание как изменять сет,как делать горячие клавиши,добавлять кнопки,убирать т .п.
Как работать с Screen3.exe,Screen4.exe.
Причем с картинками или видео.
Может займетесь? ab.gif

У меня уже кое что и для этого подготовленно. Оформлю и выложу. Только всё кратенько будет, на основе моего примера.
AlexSpb
Вот и от меня кое-что.
Вчера переделывал под мет. фрезер,пока не доделан,но оптимизирован для клавы.
Ну, и 0 по Z ищет,центр отверстия,края.
Серый Чавкин
Раз уж так, добавлю скрипт смены инструмента на токарном по команде М06

Код
ActivateSignal(Output3)         ' выдвинуть турету, активировав уровень на выходе 3
sleep(1000)                         ' пауза
code"g0a10"                        ' ход мотора по оси А на 10 шагов
DeActivateSignal(Output3)   ' задвинуть турету
sleep(1000)



исполнительное устройство на выходе OUTPUT x может быть любым, пневмоцилиндр, электромагнит, электромотор. В настройках мотора на оси А надо указать 1 шаг на единицу.
Men
Цитата(arisov77 @ 7.2.2009, 12:10) *
У меня уже кое что и для этого подготовленно. Оформлю и выложу. Только всё кратенько будет, на основе моего примера.

Пожалуйста дайте пример как там все это надо делать , пошагово и сначала .
arisov77
Цитата(AlexSpb @ 7.2.2009, 11:45) *
Но например мне понятно как засунуть и прописать скрипт,а обычному пользователю нет.
Поэтому нужно подробное описание как изменять сет,как делать горячие клавиши,добавлять кнопки,убирать т .п.
Как работать с Screen3.exe,Screen4.exe.
Причем с картинками или видео.
Может займетесь? ab.gif
Цитата(arisov77 @ 7.2.2009, 12:10) *
У меня уже кое что и для этого подготовленно. Оформлю и выложу. Только всё кратенько будет, на основе моего примера.
Цитата(Men @ 2.8.2009, 10:57) *
Пожалуйста дайте пример как там все это надо делать , пошагово и сначала .
Обещанного 3 года ждут… О своём обещании постоянно помнил, но всё никак «руки не доходили». Наконец то «осилил» это дело http://www.cnczone.ru/forums/index.php?showtopic=788
Дело это оказывается и не такое уж и лёгкое wacko.gif . Написал только создание одной кнопочки и ещё кое-что.. Может быть когда-нибудь сделаю видео по созданию других операций, но не обещаю, т.к. надо на это время, а его как обычно всегда не хватает.
Модераторам – не пора ли отдельную ветку для Mach сделать? ArtCAM и Linux CNC EMC2 есть, а как же Mach? Неужели не заслуживает? biggrin.gif

arisov77
Немного про макросы-скрипты есть здесь http://www.cncrouter.ru/forum/index.php?showforum=45
F2DVasek
Подскажите как написать макрос (точнее, что надо написать), чтобы сбрасывать кнопкой обороты шпинделя на 100%. Нужен именно макрос (та кнопка, что есть в программе не пойдет, т.к. надо привязать ее к плагину)
arisov77
Цитата(F2DVasek @ 25.5.2010, 19:59) *
Подскажите как написать макрос (точнее, что надо написать), чтобы сбрасывать кнопкой обороты шпинделя на 100%. Нужен именно макрос (та кнопка, что есть в программе не пойдет, т.к. надо привязать ее к плагину)

Честно, говоря – не знаю (не нашёл, для меня - пока не было такой надобности), где и как устанавливать (сбрасывать) скорость шпинделя в 100%.
Можно попробовать сделать так: «сделать» экранную кнопочку http://www.cnczone.ru/forums/index.php?showtopic=788, назначить под неё макрос (как делать - описывал выше), в котором написать: SetDRO 17, 100 . Число 100 может быть другим, т.е. вписываете не 100%, а Ваше значение средней скорости шпинделя.
Можно создать несколько таких кнопок, с разными значениями скоростей и назначить им "горячие" клавиши.
Это первое, что приходит "на ум". Возможно есть ещё какие то способы.




F2DVasek
Спасибо, но это маленько не то...
Мне надо использовать кнопочку резет шпинделя через макрос.
Для сброса оборотов шпинделя в заданные программой 100%.
AlexSpb
впишите в макрос код существующей кнопки.
найдите его через скрин дизайнер.
arisov77
ОЕМ-кода кнопок здесь http://www.machsupport.com/MachCustomizeWi...tle=OEM_Buttons .
Если версия Масна до 1.90, то пишется DoButton (N), если выше - DoOEMButton (N), где N – номер ОЕМ-кода.
DSP1
Не получается сделать кнопку одновременного перемещения по 2 осям ,
например , X++Y++ .
Экранный джойстик не нравится . Если кто-то знает , подскажите .
vladin21
Хочу поблагодарить AlexSPB за скрин с автообнулением. Сэкономил время на копание скрипта. На основе этого скрина забацал щуп центроискатель.
смотрим
CINN
Цитата(vladin21 @ 29.4.2011, 2:17) *
Хочу поблагодарить AlexSPB за скрин с автообнулением. Сэкономил время на копание скрипта. На основе этого скрина забацал щуп центроискатель.
смотрим

Можно поподробнее о центроискателе и автообнулителе?
Точность, техническое устройство и т.п.
vladin21
Конструкция простая. Стакан с металическим стержнем ,отцентрированным в торце на 0.5 мм.Внутри залито жидкой резиной(планируее еще вариант вулканизированной сырой ).Точность буду мерять ,как только резина "состарится".
Цитата(CINN @ 29.4.2011, 2:05) *
Можно поподробнее о центроискателе и автообнулителе?
Точность, техническое устройство и т.п.
mcmega
Вариант реализации авто смены инструмента, с измерением длины инструмента и авто привязки его по Z.
Код
'======================================================================
Sub Main
OldTool = GetOEMDRO   (1200)      'Tool In spindle DRO You must add this to your settings screen
x = GetToolChangeStart   (0)
y = GetToolChangeStart   (1)
z = GetToolChangeStart   (2)
a = GetToolChangeStart   (3)
b = GetToolChangeStart   (4)
c = GetToolChangeStart   (5)
Tool = GetSelectedTool   ()
'======================================================================
      'Макрос для автоматической смены инструмента с учётом его длины
'======================================================================
NewTool = tool
MaxToolNum = 9            'Максимальное число инструментов
ToolDown = 50               'Высота для захвата и выпуска инструмента
ToolUp =  100               'Высота переезда между инструментами
If NewTool = OldTool Then
Exit Sub
End If
While NewTool > MaxToolNum         'Проверка номера инструмента
NewTool = Question ("Введите номер другого инструмента:")   'Если номер неверный, выдаём сообщение
Wend
   'Сброс старого инструмента
Code "G00 G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Call MovePos(OldTool)            'Вызов поиска координат старого инструмента
Code "G53 Z" & ToolDown         'Опускание по Z на высоту для захвата и выпуска инструмента
Sleep 500               'Ожидаем 0,5 сек.
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
ActivateSignal (Output2)         'Управление клапаном для выпуска инструмента
Sleep 1000               'Пауза для надёжного выпуск инструмента
'SystemWaitFor            'Дождаться сработки концевого выключателя
   'Захват нового инструмента
Code "G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
If NewTool = 0 Then            'Если новый инструмента - 0, то ничего не делаем
DeActivateSignal (Output2)         'Управление клапаном для захвата инструмента
Call SetUserDRO (1200,NewTool)
SetCurrentTool(NewTool)
Exit Sub               'Старый инструмент возвращается на место (сделано в предыдущем блоке)
End If
Call MovePos(NewTool)         'Вызов поиска координат нового инструмента
Code "G53 Z" & ToolDown         'Опускание по Z на высоту для захвата и выпуска инструмента
Sleep 500               'Ожидаем 0,5 сек.
While IsMoving()            'Ожидаем завершения переезда
Wend
DeActivateSignal (Output2)         'Управление клапаном для захвата инструмента
Sleep 1000               'Пауза 1 сек. для надёжного для захвата инструмента
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Code "G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
Call SetUserDRO (1200,NewTool)
SetCurrentTool(NewTool)
Call ToolLength
End Sub
   'Определение координат инструмента
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber         'Находим координаты инструмента
Case Is = 1               'Инструмент №1
Xpos =      0            'Значение по X
YPos =      50            'Значение по Y
Case Is = 2               'Инструмент №2
Xpos =      0            'Значение по X
YPos =      100            'Значение по Y
Case Is = 3               'Инструмент №3
Xpos =      0            'Значение по X
YPos =      150            'Значение по Y
Case Is = 4               'Инструмент №4
Xpos =      0            'Значение по X
YPos =      200            'Значение по Y
Case Is = 5               'Инструмент №5
Xpos =      0            'Значение по X
YPos =      250            'Значение по Y
Case Is = 6               'Инструмент №6
Xpos =      0            'Значение по X
YPos =      300            'Значение по Y
Case Is = 7               'Инструмент №7
Xpos =      0            'Значение по X
YPos =      350            'Значение по Y
Case Is = 8               'Инструмент №8
Xpos =      0            'Значение по X
YPos =      400            'Значение по Y
Case Is = 9               'Инструмент №9
Xpos =      0            'Значение по X
YPos =      450            'Значение по Y
End Select
Code "G53 G00 X" & XPos & "Y" & YPos   'Переезд к инструменту
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
End Sub
   'Определение длины инструмента
Sub ToolLength
ChX = 0               'Положение датчика длины инструмента по X
ChY = 0               'Положение датчика длины инструмента по Y
PlateOffset = 50            'Высота датчика длины инструмента
Zup = 50               'Расстояние на которое отойдет фреза после коррекции
MaxZPlus = 250            'Максимальный ход станка по оси Z
Sleep 100               'Пауза 0,1 сек.
Code "G53 G00 X" & ChX & "Y" & ChY   'Переезд по XY в позицию датчика длины инструмента
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
CurrentFeed = GetOemDRO(818)      'Запоминаем текущюю скорость, для того чтобы восстановить после коррекции    
Code "F1000"               'Задаём скорость подачи до касания инструментом
ZNew = GetDro(2) - MaxZPlus        
Code "G31 Z" & ZNew            'Опускаем инструмент до касания
While IsMoving()            'Ожидаем касания
Sleep 100               'Пауза 0,1 сек.
Wend
ZNew = GetVar(2002)            'Читаем точку касания
Code "G00 Z" &ZNew + 3         'Поднимаемся вверх на 5мм для более точного измерения
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend  
Code "F100"               'Замедляем подачу до 50мм/мин
ZNew = GetDro(2) - 6
Code "G31 Z" & ZNew            'Опускаем инструмент до касания
While IsMoving()            'Ожидаем касания
Sleep 100               'Пауза 0,1 сек.
Wend
If PlateOffset <> 0 Then
Call SetDro (2, PlateOffset)         'Запись в окно Z высоту датчика, тем самым откорректировав позицию по Z
Sleep 1000               'Пауза 1 сек. для успешной записи значения в DRO
ZNew = PlateOffset + Zup         'Находим точку подьема
Code "G00 Z" &ZNew            'Поднимаем на высоту отхода после коррекции
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Code "(Смена инструмента выполнена)"   'послать сообщение в статус        
End If
Code "F" &CurrentFeed          'Возвращаем установленное значение подачи
Sleep 100               'Пауза 0,1 сек.
End Sub
Main
SerGPOOL
Цитата(mcmega @ 2.8.2014, 10:10) *
Вариант реализации авто смены инструмента, с измерением длины инструмента и авто привязки его по Z.
Код
'======================================================================
Sub Main
OldTool = GetOEMDRO   (1200)      'Tool In spindle DRO You must add this to your settings screen
x = GetToolChangeStart   (0)
y = GetToolChangeStart   (1)
z = GetToolChangeStart   (2)
a = GetToolChangeStart   (3)
b = GetToolChangeStart   (4)
c = GetToolChangeStart   (5)
Tool = GetSelectedTool   ()
'======================================================================
      'Макрос для автоматической смены инструмента с учётом его длины
'======================================================================
NewTool = tool
MaxToolNum = 9            'Максимальное число инструментов
ToolDown = 50               'Высота для захвата и выпуска инструмента
ToolUp =  100               'Высота переезда между инструментами
If NewTool = OldTool Then
Exit Sub
End If
While NewTool > MaxToolNum         'Проверка номера инструмента
NewTool = Question ("Введите номер другого инструмента:")   'Если номер неверный, выдаём сообщение
Wend
   'Сброс старого инструмента
Code "G00 G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Call MovePos(OldTool)            'Вызов поиска координат старого инструмента
Code "G53 Z" & ToolDown         'Опускание по Z на высоту для захвата и выпуска инструмента
Sleep 500               'Ожидаем 0,5 сек.
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
ActivateSignal (Output2)         'Управление клапаном для выпуска инструмента
Sleep 1000               'Пауза для надёжного выпуск инструмента
'SystemWaitFor            'Дождаться сработки концевого выключателя
   'Захват нового инструмента
Code "G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
If NewTool = 0 Then            'Если новый инструмента - 0, то ничего не делаем
DeActivateSignal (Output2)         'Управление клапаном для захвата инструмента
Call SetUserDRO (1200,NewTool)
SetCurrentTool(NewTool)
Exit Sub               'Старый инструмент возвращается на место (сделано в предыдущем блоке)
End If
Call MovePos(NewTool)         'Вызов поиска координат нового инструмента
Code "G53 Z" & ToolDown         'Опускание по Z на высоту для захвата и выпуска инструмента
Sleep 500               'Ожидаем 0,5 сек.
While IsMoving()            'Ожидаем завершения переезда
Wend
DeActivateSignal (Output2)         'Управление клапаном для захвата инструмента
Sleep 1000               'Пауза 1 сек. для надёжного для захвата инструмента
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Code "G53 Z" & ToolUp         'Подъём по Z на высоту переезда между инструментами
Call SetUserDRO (1200,NewTool)
SetCurrentTool(NewTool)
Call ToolLength
End Sub
   'Определение координат инструмента
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber         'Находим координаты инструмента
Case Is = 1               'Инструмент №1
Xpos =      0            'Значение по X
YPos =      50            'Значение по Y
Case Is = 2               'Инструмент №2
Xpos =      0            'Значение по X
YPos =      100            'Значение по Y
Case Is = 3               'Инструмент №3
Xpos =      0            'Значение по X
YPos =      150            'Значение по Y
Case Is = 4               'Инструмент №4
Xpos =      0            'Значение по X
YPos =      200            'Значение по Y
Case Is = 5               'Инструмент №5
Xpos =      0            'Значение по X
YPos =      250            'Значение по Y
Case Is = 6               'Инструмент №6
Xpos =      0            'Значение по X
YPos =      300            'Значение по Y
Case Is = 7               'Инструмент №7
Xpos =      0            'Значение по X
YPos =      350            'Значение по Y
Case Is = 8               'Инструмент №8
Xpos =      0            'Значение по X
YPos =      400            'Значение по Y
Case Is = 9               'Инструмент №9
Xpos =      0            'Значение по X
YPos =      450            'Значение по Y
End Select
Code "G53 G00 X" & XPos & "Y" & YPos   'Переезд к инструменту
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
End Sub
   'Определение длины инструмента
Sub ToolLength
ChX = 0               'Положение датчика длины инструмента по X
ChY = 0               'Положение датчика длины инструмента по Y
PlateOffset = 50            'Высота датчика длины инструмента
Zup = 50               'Расстояние на которое отойдет фреза после коррекции
MaxZPlus = 250            'Максимальный ход станка по оси Z
Sleep 100               'Пауза 0,1 сек.
Code "G53 G00 X" & ChX & "Y" & ChY   'Переезд по XY в позицию датчика длины инструмента
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
CurrentFeed = GetOemDRO(818)      'Запоминаем текущюю скорость, для того чтобы восстановить после коррекции    
Code "F1000"               'Задаём скорость подачи до касания инструментом
ZNew = GetDro(2) - MaxZPlus        
Code "G31 Z" & ZNew            'Опускаем инструмент до касания
While IsMoving()            'Ожидаем касания
Sleep 100               'Пауза 0,1 сек.
Wend
ZNew = GetVar(2002)            'Читаем точку касания
Code "G00 Z" &ZNew + 3         'Поднимаемся вверх на 5мм для более точного измерения
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend  
Code "F100"               'Замедляем подачу до 50мм/мин
ZNew = GetDro(2) - 6
Code "G31 Z" & ZNew            'Опускаем инструмент до касания
While IsMoving()            'Ожидаем касания
Sleep 100               'Пауза 0,1 сек.
Wend
If PlateOffset <> 0 Then
Call SetDro (2, PlateOffset)         'Запись в окно Z высоту датчика, тем самым откорректировав позицию по Z
Sleep 1000               'Пауза 1 сек. для успешной записи значения в DRO
ZNew = PlateOffset + Zup         'Находим точку подьема
Code "G00 Z" &ZNew            'Поднимаем на высоту отхода после коррекции
While IsMoving()            'Ожидаем завершения переезда
Sleep 100               'Пауза 0,1 сек.
Wend
Code "(Смена инструмента выполнена)"   'послать сообщение в статус        
End If
Code "F" &CurrentFeed          'Возвращаем установленное значение подачи
Sleep 100               'Пауза 0,1 сек.
End Sub
Main

Здравствуйте. Скажите пожалуйста этот макрос куда надо вставить? это поиск всех инструментов и внесение их значений грубо говоря пойди посмотри что есть в лотке? и он работает по принципу вертикального взятия и снятия инструмента??
SerGPOOL
или макрос по такому принципу будет работать как в ролике: https://www.youtube.com/watch?v=HH6yOOAq-NY
igor-div
привет всем
с макросом более-менее разобрался, но по нему инструмент берётся сверху,а как написать чтобы инструмент забирался с вилки???
то есть переехал на позицию, опустился далее опять переехал по y (или X) оставил инструмент ну и т.д.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.