Добавлена поддержка пульта управления XHC (WHB04…). Основные особенности:
- Ручной маховик.
- Два селектора выбора режимов.
- 16 кнопок. + поддержка комбинации двух кнопок (когда удерживается одна и нажимается другая)
- Проводная и беспроводная версия. (Внимание требуется хорошее питание по USB)
Для работы с пультом был создан объект XHB (в обоих скриптах LScript/MScript):
Можно узнавать состояние кнопок и селекторов пульта. Выводить некоторые данные на дисплей пульта.
При изменении состояния маховика, кнопок, селекторов. Вызываются функции для обработки этих событий (LScript).
Был написан базовый скрипт WLXHC.js (и добавлен в стандартный набор) в котором реализованы основные операции работы с ним.
- Ручное перемещение (с точным позиционированием). Согласно установленным селекторам
- Реализованы кнопки:
- RESET
- Stop
- Start/pause
- Fn+Feed+
- Fn+Feed-
- Fn+Spindle+
- Fn+Spindle-
- Fn+M_HOME (переезд в G54 X0 Y0 Z0)
- Fn+Safe-Z
- Fn+W_HOME
- Fn+Probe-Z
- Реализованы вызовы макросов 1-10 с помощью кнопок. Вызывается макрос “macroXXWLXHC()” в скрипте MScript (добавлены подсказки в редакторе скриптов)
PS также был расширен функционал скриптов. Теперь возможно добавлять функции “wek” которые будут высвечиваться в редакторе скриптов. Например в скрипте WLXHC.js:
MSCRIPT.addIncludeWeakFunction(“macro”+(i+1)+”WLXHC”) //добавляем прjтотип функции в MScript
Текст первой версии:
/*
WLXHC - пример работы с пультом XHC
Установка:
1.Для работы с пультом XHC нужно определить функции которые вызываются при изменение данных от него.
2.Ниже будут примеры функций. Которые могут быть использованы вами.
3. Копируем этот файл (WLXHCk.js) в папку /wlmillconfig/script/include
Подключаем, добавляя в LScript.
function init()
{
SCRIPT.includeFile("/include/WLXHC.js")
....
}
при нажатии на кнопки Macro-1...Macro10 будут вызываться функции скрипта MScript.
Например обнуление по X,Y,Z,A по кнопкам пульта
function macro1WLXHC()
{
if(!MACHINE.isActiv())
MACHINE.setCurPositionSC("X",0)
}
function macro2WLXHC()
{
if(!MACHINE.isActiv())
MACHINE.setCurPositionSC("Y",0)
}
function macro3WLXHC()
{
if(!MACHINE.isActiv())
MACHINE.setCurPositionSC("Z",0)
}
function macro4WLXHC()
{
if(!MACHINE.isActiv())
MACHINE.setCurPositionSC("A",0)
}
22/04/2024 - добавлена стандартная реализация
*/
var XHCTimeout = -1
var XHCContMode = 0
var XHCIncF = 2.5
var XHCDecF = 2.5
var XHCIncS = 2.5
var XHCDecS = 2.5
function WLXHCStop()
{
MACHINE.stopMov();
XHCTimeout = -1
}
function WLXHCInit()
{
SCRIPT.console("WLXHCInit()")
SCRIPT.setTimeout("updateDisplayWLXHC()",50)
var i=5
for(i=0;i<10;i++)
MSCRIPT.addIncludeWeakFunction("macro"+(i+1)+"WLXHC")
}
function updateDisplayWLXHC()
{
if(XHC.getSelectorA()==20 //A || B ||C
||XHC.getSelectorA()==21
||XHC.getSelectorA()==22)
XHC.setDisplayData(MACHINE.getCurPositionSC("A")
,MACHINE.getCurPositionSC("B")
,MACHINE.getCurPositionSC("C")
,GCODE.getValue("F").toFixed(3))
else
XHC.setDisplayData(MACHINE.getCurPositionSC("X")
,MACHINE.getCurPositionSC("Y")
,MACHINE.getCurPositionSC("Z")
,GCODE.getValue("F").toFixed(3))
SCRIPT.setTimeout("updateDisplayWLXHC()",50)
}
function changedWhellXHC(dist)
{
SCRIPT.console("changedWhellXHC("+dist+")"+XHC.getJogVelocity()/100.0)
var distXYZ=0
switch(XHC.getSelectorX())
{
case 13: //2%
distXYZ=0.001
break;
case 14: //5%
distXYZ=0.010
break;
case 15://10%
distXYZ=0.100
break;
case 16: //30%
distXYZ=1.000
break;
case 26: //60%
distXYZ=1.000
break;
case 27: //100%
distXYZ=1.000
break;
case 155: //Lead
distXYZ=1.000
break;
}
var F=0
if(MACHINE.isPossiblyManual())
{
if(XHCContMode)//if mpg int cont mode
{
if(XHCTimeout !=-1)
SCRIPT.clearTimeout(XHCTimeout)
XHCTimeout = SCRIPT.setTimeout("WLXHCStop()",100)
}
switch(XHC.getSelectorA())
{
case 17: //X
DRIVEX.setKSpeed(1)
DRIVEX.runMovRel(dist*distXYZ,F,1)
break;
case 18: //Y
DRIVEY.setKSpeed(1)
DRIVEY.runMovRel(dist*distXYZ,F,1)
break;
case 19: //Z
DRIVEZ.setKSpeed(1)
DRIVEZ.runMovRel(dist*distXYZ,F,1)
break;
case 20: //A
DRIVEA.setKSpeed(1)
DRIVEA.runMovRel(dist*distXYZ,F,1)
break;
}
}
}
function changedStopJogXHC()
{
switch(XHC.getSelectorA())
{
case 17: //X
MACHINE.goGDriveManual("X",0,0)
SCRIPT.console("Stop Jog")
break;
case 18: //Y
MACHINE.goGDriveManual("Y",0,0)
break;
case 19: //Z
MACHINE.goGDriveManual("Z",0,0)
break;
case 20: //A
MACHINE.goGDriveManual("A",0,0)
break;
}
}
function changedButtonsXHC(button1,button2)
{
SCRIPT.console("changedButtonsXHC("+button1+","+button2+")")
SCRIPT.console("MpgMode("+XHC.getMpgMode() +")")
switch(button1)
{
case 1: //RESET
MACHINE.reset();
break;
case 2: //Stop
MACHINE.stopMov()
break;
case 3: //Start/pause
if(MACHINE.isPause())
MACHINE.setPause(0)
else
MACHINE.setPause()
break;
case 12: //Fn key + button2
switch(button2)
{
case 3: //Start/pause
if(!MACHINE.isActiv())
MSCRIPT.runScript("MACHINE.runGProgram()");
break;
case 4: //Feed+
MACHINE.setPercentF(MACHINE.getPercentF()+XHCIncF)
break;
case 5: //Feed -
MACHINE.setPercentF(MACHINE.getPercentF()-XHCDecF)
break;
case 6: //Spindle+
MACHINE.setPercentS(MACHINE.getPercentS()+XHCIncS)
break;
case 7: //Spindle-
MACHINE.setPercentS(MACHINE.getPercentS()-XHCDecS)
break;
case 8: //M_HOME <--
if(!MACHINE.isActiv())
{
if(MACHINE.getCurPosition("Z")<0)
MACHINE.runGCode("G53 G90 G0 Z0")
MACHINE.runGCode("G53 G90 G0 X0 Y0")
}
break;
case 9: //Safe-Z
if(!MACHINE.isActiv())
{
if(MACHINE.getCurPosition("Z")<0)
MACHINE.runGCode("G91 G28 G0 Z0")
}
break;
case 10: //W_HOME <--
if(!MACHINE.isActiv())
{
if(MACHINE.getCurPositionSC("Z")<0)
MACHINE.runGCode("G90 G0 Z0")
MACHINE.runGCode("G90 G0 X0 Y0")
}
break;
case 11: //W_HOME <--
if(MACHINE.getStateSpindle()!=0)
MACHINE.runMCode(5);
else
MACHINE.runMCode(3);
break;
case 13: //Probe-Z
if(!MACHINE.isActiv())
{
MSCRIPT.runScript("WLTabletFastZ0()")
}
break;
}
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:MSCRIPT.runFunction("macro"+(button1-3)+"WLXHC()",1);
break
case 13:MSCRIPT.runFunction("macro9WLXHC()",1);
break
case 16:MSCRIPT.runFunction("macro10WXHC()",1);
break
case 14: XHCContMode=1
break
case 15: XHCContMode=0
break
}
}
function changedSelectorXXHC(pselect)
{
SCRIPT.console("changedSelectorXXHC("+pselect+")")
}
Видео: