Код: Выделить всё
//Tool
var WLToolF1Probe = 250 //скорость первого касания в мм/мин для замера инструмента
var WLToolF2Probe = 50 //скорость второго касания в мм/мин для замера инструмента
var WLToolBackDist = 5 //расстояние отхода для второго касания для замера инструмента
var WLToolSDStop = 0 //включение(1)/выключение(0) плавной остановки
var WLToolLastIndexT= -1 //номер последнего инструмента
var WLToolUseTabletH= 0 //используется (1) или нет (0) датчик-таблетка. Нужно для подтверждения её работы (установки).
var WLToolFindDist = 100 //расстояние поиска до предполаемой точки
var WLToolFindDist_A= -5 //расстояние поиска после
var WLToolAutoSetG43H = 1 //устанавливать G43H после измерений
var WLToolAlwaysHReplace= 1 //всегда переустанавливать инструмент
var WLToolLmin = 5 //минимальная длина инструмента
var WLToolLmax = 80 //максимальна длина инструмента
function WLToolAutoM6()
{
var X=0;
var Y=0;
var Z=0;
var autoH; //автоматический замер длины инструмента (при необходимости)
var Ltool=100;
autoH=!GCODE.getDataToolNum(GCODE.getT(),"WLToolAutoHDis",WLToolAutoHDisDefault)
SCRIPT.console("run WLToolAutoM6")
WLToolInitValue()
//1. Проверить, что был выполнен выход в механический ноль по всем осям (если нет, то остановить УП и выдать предупреждение).
if(!MACHINE.isTruPositionDrives())
{
DIALOG.message("Не был выполнен выход в механический ноль по всем осям. Остановка.")
M30()
return 0
}
//2. Сверка номера инструмента с установленным (если он равен установленному, то игнорируем команду М6 и продолжаем выполнение УП)
if(GCODE.getT()==GCODE.getCurTool())
{
SCRIPT.console("Инструмент "+GCODE.getCurTool()+" уже установлен")
return 1
}
//3.Сверка номера инструмента с количеством инструментов в магазине (если номер превышает количество инструментов в магазине, то выдаем ошибку и останавливаем выполнение УП)
if(GCODE.getT()>WLToolAutoM6Count)
{
DIALOG.message("Номер инструмента "+GCODE.getT()+" больше допустимого "+WLToolAutoM6Count)
M30()
return 0
}
//4. Проверка датчиков шпинделя (инструмент вставлен, штревель зажат), если нет сообщение об ошибке и М30
if(MACHINE.getIn(WLToolAutoM6InSetToolSpindle)==0)
{
SCRIPT.console("Шпиндель не готов. Проверьте вход "+WLToolAutoM6InSetToolSpindle+" (WLToolAutoM6InSetToolSpindle)")
M30()
return 0
}
//5. Проверка датчиков положения магазина (задвинут), если нет сообщение об ошибке и М30
if(MACHINE.getIn(WLToolAutoM6InReadyShop)==0)
{
SCRIPT.console("Магазин не готов. Проверьте вход "+WLToolAutoM6InReadyShop+" (WLToolAutoM6InReadyShop)")
M30()
return 0
}
//6. Проверка датчика вращения шпинделя (если есть)
SCRIPT.console("Ждём остановки шпинделя")
while(MACHINE.getSSpindle()!=0)
{
SCRIPT.process()
}
// Можно использовать сигнал InReadySpindle, так же этот сигнал можно использовать при измерении инструмента.
if(MACHINE.getIn(WLToolAutoM6InTurnSpindle)==1)
{
SCRIPT.console("Шпиндель вращается. Проверьте вход "+WLToolAutoM6InTurnSpindle+" (WLToolAutoM6InTurnSpindle)")
M30()
return 0
}
//7. Проверка датчика положения кожуха аспирации (если есть)
//if(MACHINE.getIn(WLToolAutoM6InReadyAspirateBox)==0)
//{
// SCRIPT.console("Кожух аспирации не готов. Проверьте вход "+WLToolAutoM6InReadyAspirateBox+" (WLToolAutoM6InReadyAspirateBox)")
// M30()
// return 0
//}
//1. Вывести диалоговое сообщение, что происходит смена инструмента Т1 на Т3
SCRIPT.console("Начало замены инструмента "+GCODE.getCurTool()+" >>> "+GCODE.getT());
//2. Выключить шпиндель М5
M5()
//3. Подняться по оси Z (G53 G90 G00 Z-4)
MACHINE.runGCode("G53 G90 G00 Z-4")
//4. Перейти в машинный 0 по оси B(G53 G90 G00 B0)
MACHINE.runGCode("G53 G90 G00 B0")
//5. Перейти в машинный 0 по оси C (G53 G90 G00 C0)
MACHINE.runGCode("G53 G90 G00 C0") //Не переходил, Нужно убрать в конце ";"
SCRIPT.console("Шпиндель остановлен")
//6. Переместить шпиндель в координаты Xи Y установленного инструмента (G53 G90 G00 X#101Y#101, где #101– координаты 1-го инструмента)
if(!GCODE.isContainsDataCurTool("WLToolAutoM6Xo")
||!GCODE.isContainsDataCurTool("WLToolAutoM6Yo")
||!GCODE.isContainsDataCurTool("WLToolAutoM6Zo"))
{
DIALOG.message("Не определены все точки смены инструмента №"+GCODE.getCurTool()+" (WLToolAutoM6Xo,WLToolAutoM6Yo,WLToolAutoM6Zo)")
M30()
return 0
}
/// Перемещается в координаты инструмента, который нужно взять, а должен приехать в координаты установленного инструмента
//WLDEV>>> исправленов WLMILL 2.2.50
X=GCODE.getDataCurToolNum("WLToolAutoM6Xo",0);
Y=GCODE.getDataCurToolNum("WLToolAutoM6Yo",0);
Z=GCODE.getDataCurToolNum("WLToolAutoM6Zo",0);
MACHINE.runGCode("G53 G90 G00 X"+X+" Y"+Y);
//7. Опустить шпиндель по оси Zв координату установленного инструмента (G53 G90 G00 Z#301)
MACHINE.runGCode("G53 G90 G00 Z"+Z);
SCRIPT.console("Ждём завершения движений")
while(MACHINE.isActiv())
{
SCRIPT.process()
}
//8. Открыть выход для выезда магазина с инструментом
MACHINE.setOut(WLToolAutoM6OutReadyShop,1);
//9. Задержка 200 мс для фильтрации ложного сигнала (G04 P200)
DELAY(5000)
//8. Получить сигнал от датчика, что магазин выехал), если нет сообщение об ошибке и М30
// Пока убераю
//if(WLToolAutoM6InReadyShop>1) //если он задан WLToolAutoM6InReadyShopgo
//{
// SCRIPT.console("Ждём готовности магазина. Вход "+WLToolAutoM6InReadyShop+" >>> 1")
// while(MACHINE.getIn(WLToolAutoM6InReadyShop)==0)
// {
// //можно добавить таймер предельного времени
// SCRIPT.process();
// }
//}
//10. Открыть выход штревеля (разжать зажим конуса)
MACHINE.setOut(WLToolAutoM6OutShtrevSpindle,1)
//11. Задержка 200 мс для фильтрации ложного сигнала (G04 P200)
DELAY(200)
//12. Получить сигнал от датчика, что штревель разжат, если нет сообщение об ошибке и М30
if(WLToolAutoM6InShtrevSpindle>1) //если задан
{
SCRIPT.console("Ждём разжатия штревеля шпинделя. Вход "+WLToolAutoM6InShtrevSpindle+" >>> 0")
while(MACHINE.getIn(WLToolAutoM6InShtrevSpindle)==1)
{
//можно добавить таймер предельного времени
SCRIPT.process();
}
}
//13. Подняться на безопасную высоту по оси Zдля переезда над магазином (G53 G90 G00 Z#120, где #120 безопасная высота переезда)
MACHINE.runGCode("G53 G90 G00 Z"+ WLToolAutoM6SafeZ)
//14. Переместить шпиндель в координаты X и Y требуемого инструмента (G53 G90 G00 X#103 Y#103, где #103 – координаты 3-го инструмента)
if(!GCODE.isContainsDataTool(GCODE.getT(),"WLToolAutoM6Xo")
||!GCODE.isContainsDataTool(GCODE.getT(),"WLToolAutoM6Yo")
||!GCODE.isContainsDataTool(GCODE.getT(),"WLToolAutoM6Zo"))
{
DIALOG.message("Не определены все точки смены инструмента №"+GCODE.getT()+" (WLToolAutoM6Xo,WLToolAutoM6Yo,WLToolAutoM6Zo)")
M30()
return 0
}
// Не переезжает, может потому что уже находится в них
// WLDEV>>>верно!
X=GCODE.getDataToolNum(GCODE.getT(),"WLToolAutoM6Xo",0);
Y=GCODE.getDataToolNum(GCODE.getT(),"WLToolAutoM6Yo",0);
Z=GCODE.getDataToolNum(GCODE.getT(),"WLToolAutoM6Zo",0);
MACHINE.runGCode("G53 G90 G00 X"+X+" Y"+Y);
//15. Опустить шпиндель по оси Zв координату требуемого инструмента (G53 G90 G00 Z#103)
// Не опускает
// WLDEV>>> исправил в скрипте +Z)
MACHINE.runGCode("G53 G90 G00 Z"+Z)
SCRIPT.console("Ждём завершения движений. XY+Z")
while(MACHINE.isActiv())
{
SCRIPT.process()
}
//16. Закрыть выход штревеля (зажать конус инструмента)
// не закрывает
MACHINE.setOut(WLToolAutoM6OutShtrevSpindle,0)
//17. Задержка 200 мс для фильтрации ложного сигнала (G04 P200)
DELAY(200)
//18. Получить сигнал от датчика, что штревель зажат, если нет сообщение об ошибке и М30
// Не проверяет
if(WLToolAutoM6InShtrevSpindle>1) //если задан
{
SCRIPT.console("Ждём зазжатия штревеля шпинделя. Вход "+WLToolAutoM6InShtrevSpindle+" >>> 1")
while(MACHINE.getIn(WLToolAutoM6InShtrevSpindle)==0)
{
//можно добавить таймер предельного времени
SCRIPT.process();
}
}
//19. Получить сигнал от датчика, что конус установлен, если нет сообщение об ошибке и М30
// Не проверяется!!!
if(WLToolAutoM6InSetToolSpindle>1) //если задан
{
SCRIPT.console("Ждём установки инструмента в шпиндель. Вход "+WLToolAutoM6InSetToolSpindle+" >>> 1")
while(MACHINE.getIn(WLToolAutoM6InSetToolSpindle)==0)
{
//можно добавить таймер предельного времени
SCRIPT.process();
}
}
//20. Записать новый установленный инструмент
GCODE.setCurTool(GCODE.getT())
GCODE.setOffsetTool(GCODE.getT())
SCRIPT.console("Установлен инструмент "+GCODE.getCurTool())
WLToolLastIndexT=GCODE.getT()
FILE.saveValue(WLToolFileINI,"LastIndexT" ,WLToolLastIndexT);
//21. Закрыть выход выезда магазина
// Не закрывает
MACHINE.setOut(WLToolAutoM6OutReadyShop,0)
//22. Задержка 200 мс для фильтрации ложного сигнала (G04 P200)
DELAY(200)
//23. Получить сигнал от датчика, что магазин уехал, если нет сообщение об ошибке и М30
if(WLToolAutoM6InReadyShop>1) //если задан
{
SCRIPT.console("Ждём готовности магазина. Вход "+WLToolAutoM6InReadyShop+" >>> 1")
if(MACHINE.getIn(WLToolAutoM6InReadyShop)==0)
{
while(MACHINE.getIn(WLToolAutoM6InReadyShop)==0)
{
//можно добавить таймер предельного времени
SCRIPT.process();
}
}
}
DELAY(5000)
//24. Подняться в машинный 0 оси Z
MACHINE.runGCode("G53 G0 Z-4");
SCRIPT.console("Ждём завершения движений (G53 G0 Z-4)")
while(MACHINE.isActiv())
{
SCRIPT.process()
}
//24. Замер длинны инструмента
if(GCODE.getHTool(GCODE.getT())!=0)
Ltool=GCODE.getHTool(GCODE.getT())
if(autoH==1){
MACHINE.runGCode("G53 G90 G0 Z-4")
if(WLToolAutoH(GCODE.getT(),Ltool)!=1)
return 0
MACHINE.runGCode("G53G90G0 Z-4")
}
else if(WLToolAutoSetG43H!=0)
MACHINE.runGCode("G43H"+GCODE.getT())
WLToolLastIndexT=GCODE.getT()
FILE.saveValue(WLToolFileINI,"LastIndexT" ,WLToolLastIndexT);
//25. Включить шпиндель М3
//M3()
//26. Сообщение «команда М6Т3 выполнена успешно».
SCRIPT.console("Смена инструмента M6 T"+GCODE.getT()+" прошла успешно!")
//27. Продолжить выполнение УП.
return 1
}