232
« on: January 21, 2021, 10:12:46 AM »
And last my M6;
function m6()
local inst = mc.mcGetInstance()
--get registers
local hregMHmd = mc.mcRegGetHandle(inst, 'iRegs0/MachHmd')
local valMHmd = mc.mcRegGetValue(hregMHmd)
local ATCReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCOnOff')
local ATCRegVal = mc.mcRegGetValue(ATCReg)
local MTCReg = mc.mcRegGetHandle(inst, 'iRegs0/ManToolChg')
local MTCRegVal = mc.mcRegGetValue(MTCReg)
local ATCClrReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCZClear')
local ATCClrVal = mc.mcRegGetValue(ATCClrReg)
local ATCDnReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCZDown')
local ATCDnVal = mc.mcRegGetValue(ATCDnReg)
local ATCYP1Reg = mc.mcRegGetHandle(inst, 'iRegs0/ATCYPos1')
local ATCYP1Val = mc.mcRegGetValue(ATCYP1Reg)
local ATCYPDReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCYPosDist')
local ATCYPDVal = mc.mcRegGetValue(ATCYPDReg)
local ATCMaxTlsReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCMaxTools')
local ATCMaxTlsVal = mc.mcRegGetValue(ATCMaxTlsReg)
local ATCToolHReg = mc.mcRegGetHandle(inst, 'iRegs0/ATCToolHolder')
--tk signals
local TKSSigH = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT7)
local TKOSigH = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT8)
local TKOscSigH = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT9)
--tk registers
local TKSReg = mc.mcRegGetHandle(inst, 'iRegs0/TKStdOnOff')
local TKOReg = mc.mcRegGetHandle(inst, 'iRegs0/TKOscOnOff')
local TKOnOffReg = mc.mcRegGetHandle(inst, 'iRegs0/TKOnOff')
local TKOnOffVal = mc.mcRegGetValue(TKOnOffReg)
--get tool numbers
local NewTool = mc.mcToolGetSelected(inst)
local OldTool = mc.mcToolGetCurrent(inst)
--if max depth set turn off
local MinZRegH = mc.mcRegGetHandle(inst, 'iRegs0/MaxDepth')
local MinZ2RegH = mc.mcRegGetHandle(inst, 'iRegs0/MaxDepth2')
local MinZ = mc.mcCntlGetParameter(1801)
if (MinZ >= -20.0) then
mc.mcRegSetValue(MinZ2RegH, MinZ)
mc.mcCntlSetParameter(1801, -22.0)
mc.mcRegSetValue(MinZRegH, -22.0)
end
--if new tool is in range do atc / mtc
if (NewTool <= ATCMaxTlsVal) or (NewTool == 100) or (NewTool == 101) or (NewTool == 102) then
--if manual tool change off do atc
if (MTCRegVal == 0) then
--if new tool is same as old tool
if (NewTool == OldTool) then
mc.mcCntlSetLastError(inst, "Same Tool")
else
--turn off tool comp and change to machine coordanants
mc.mcCntlGcodeExecuteWait(inst, "g49")
mc.mcCntlGcodeExecuteWait(inst, "g53")
--if mist on turn off and set MistWasON
local hMistWas = mc.mcSignalGetHandle(inst, mc.OSIG_MISTON)
local MistWasVal = mc.mcSignalGetState(hMistWas)
mc.mcSignalSetState(hMistWas, 0)
if (MistWasVal == 1) then
local hrMistWas = mc.mcRegGetHandle(inst, 'iRegs0/MistWasOn')
mc.mcRegSetValue(hrMistWas, 1)
elseif (MistWasVal == 0) then
local hrMistWas = mc.mcRegGetHandle(inst, 'iRegs0/MistWasOn')
mc.mcRegSetValue(hrMistWas, 0)
end
--if spindle on turn off and set SpinWasOn
local hSpinWas = mc.mcSignalGetHandle(inst, mc.OSIG_SPINDLEON)
local SpinWasVal = mc.mcSignalGetState(hSpinWas)
mc.mcSignalSetState(hSpinWas, 0)
if (SpinWasVal == 1) then
local hrSpinWas = mc.mcRegGetHandle(inst, 'iRegs0/SpinWasOn')
mc.mcRegSetValue(hrSpinWas, 1)
local hrSpinType = mc.mcRegGetHandle(inst, 'iRegs0/SpindleType')
local SpinType = mc.mcRegGetValue(hrSpinType)
if (SpinType == 0) then
wx.wxMilliSleep(1500)
elseif (SpinType == 1) then
wx.wxMilliSleep(5500)
elseif (SpinType == 2) then
wx.wxMilliSleep(28000)
end
elseif (SpinWasVal == 0) then
local hrSpinWas = mc.mcRegGetHandle(inst, 'iRegs0/SpinWasOn')
mc.mcRegSetValue(hrSpinWas, 0)
end
--if machine homed and atc on do tool change
if (valMHmd == 1) and (ATCRegVal == 1) then
local NewTool = mc.mcToolGetSelected(inst)
local OldTool = mc.mcToolGetCurrent(inst)
--is new tool camera
if (NewTool == 100) then
--wx.wxMessageBox("Camera")
mc.mcCntlSetLastError(inst, "CAMERA")
-- do shift to cam position
headshift()
--put current tool in tool holder and set current tool to 100
if (OldTool <= ATCMaxTlsVal) then
mc.mcRegSetValue(ATCToolHReg, OldTool)
end
mc.mcToolSetCurrent(inst, 100)
--is new tool Tang Knife Standard
elseif (NewTool == 101) then
-- do shift to tks position
headshift()
--lift head to clear for knife lower
local TempTKPos = string.format("G0 G53 Z"..ATCDnVal)
mc.mcCntlGcodeExecuteWait(inst, TempTKPos)
--wx.wxMessageBox("Tang Knife Std")
mc.mcCntlSetLastError(inst, "TANG KNIFE STD")
--put current tool in tool holder and set current tool to 101
if (OldTool <= ATCMaxTlsVal) then
mc.mcRegSetValue(ATCToolHReg, OldTool)
end
mc.mcToolSetCurrent(inst, 101)
--turn on tk mode
mc.mcCntlSetParameter(502, 1)
mc.mcRegSetValue(TKOnOffReg, 1)
--turn on and off tks reg and signals
mc.mcRegSetValue(TKOReg, 0)
mc.mcRegSetValue(TKSReg, 1)
mc.mcSignalSetState(TKSSigH, 1)
mc.mcSignalSetState(TKOSigH, 0)
mc.mcSignalSetState(TKOscSigH, 0)
--is new tool Tang Knife Oscillating
elseif (NewTool == 102) then
headshift()
--lift head to clear for knife lower
local TempTKPos = string.format("G0 G53 Z"..ATCDnVal)
mc.mcCntlGcodeExecuteWait(inst, TempTKPos)
mc.mcCntlSetLastError(inst, "TANG KNIFE OSC")
--put current tool in tool holder and set current tool to 102
if (OldTool <= ATCMaxTlsVal) then
mc.mcRegSetValue(ATCToolHReg, OldTool)
end
mc.mcToolSetCurrent(inst, 102)
--turn on tk mode
mc.mcCntlSetParameter(502, 1)
mc.mcRegSetValue(TKOnOffReg, 1)
--turn on and off tko reg and signals
mc.mcRegSetValue(TKOReg, 1)
mc.mcRegSetValue(TKSReg, 0)
mc.mcSignalSetState(TKSSigH, 0)
mc.mcSignalSetState(TKOSigH, 1)
mc.mcSignalSetState(TKOscSigH, 1)
-- do shift to tko position
--is new tool atc tool
elseif (NewTool >= 1) and (NewTool <= ATCMaxTlsVal) then
--if old tool is cam, tks or tko then put old tool back to tool holder value
if (OldTool == 100) or (OldTool == 101) or (OldTool == 102) then
headshift()
local ATCToolHolder = mc.mcRegGetValue(ATCToolHReg)
OldTool = ATCToolHolder
--turn off tk mode
mc.mcCntlSetParameter(502, 0)
--retract tks and tko
local TKSRetReg = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT7)
local TKORetReg = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT8)
local TKOOscReg = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT9)
mc.mcSignalSetState(TKSRetReg, 0)
mc.mcSignalSetState(TKORetReg, 0)
mc.mcSignalSetState(TKOOscReg, 0)
--set registers to tk off
local TKStdReg = mc.mcRegGetHandle(inst, 'iRegs0/TKStdOnOff')
local TKOscReg = mc.mcRegGetHandle(inst, 'iRegs0/TKOscOnOff')
local TKOOReg = mc.mcRegGetHandle(inst, 'iRegs0/TKOsc')
mc.mcRegSetValue(TKStdReg, 0)
mc.mcRegSetValue(TKOscReg, 0)
mc.mcRegSetValue(TKOOReg, 0)
--turn off tk mode
mc.mcCntlSetParameter(502, 0)
mc.mcRegSetValue(TKOnOffReg, 0)
--turn on and off tks and tko reg and signals
mc.mcRegSetValue(TKOReg, 0)
mc.mcRegSetValue(TKSReg, 0)
end
--if old tool is not cam, tks or tko drop old tool
if (NewTool == OldTool) then
mc.mcCntlSetLastError(inst, "SAME TOOL TO DROP")
else
if (OldTool <= ATCMaxTlsVal) then
--get tool drop position
local TempToolMinus = (OldTool - 1)
local TempToolDist = (TempToolMinus * ATCYPDVal)
local YTempPos = (ATCYP1Val + TempToolDist)
--move to tool drop position
local TempDropPos = string.format("G0 G53 Y"..YTempPos.."Z"..ATCDnVal)
mc.mcCntlGcodeExecuteWait(inst, TempDropPos)
--fire rack
local Rackhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT6)
mc.mcSignalSetState(Rackhsig, 1)
wx.wxMilliSleep(3000)
--drop tool
local DBarhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT5)
mc.mcSignalSetState(DBarhsig, 1)
wx.wxMilliSleep(1000)
--raise z to clear
ZTempUpPos = string.format("G0 G53 Z"..ATCClrVal)
mc.mcCntlGcodeExecuteWait(inst, ZTempUpPos)
--retract rack to clear
local Rackhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT6)
mc.mcSignalSetState(Rackhsig, 0)
wx.wxMilliSleep(2250)
end
end
-- if new tool is standard atc number pick up new tool
if (NewTool == OldTool) then
mc.mcCntlSetLastError(inst, "SAME TOOL TO PICK")
else
if (NewTool <= ATCMaxTlsVal) then
--fire draw bar
local DBarhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT5)
mc.mcSignalSetState(DBarhsig, 1)
--get tool pickup position
local TempToolMinus = (NewTool - 1)
local TempToolDist = (TempToolMinus * ATCYPDVal)
local YTempPos = (ATCYP1Val + TempToolDist)
--move to tool pickup position
local TempGrabPos = string.format("G0 G53 Y"..YTempPos.."Z"..ATCClrVal)
mc.mcCntlGcodeExecuteWait(inst, TempGrabPos)
--fire rack
local Rackhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT6)
mc.mcSignalSetState(Rackhsig, 1)
wx.wxMilliSleep(3000)
--lower z to grab
ZTempDnPos = string.format("G0 G53 Z"..ATCDnVal)
mc.mcCntlGcodeExecuteWait(inst, ZTempDnPos)
--grab tool
local DBarhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT5)
mc.mcSignalSetState(DBarhsig, 0)
wx.wxMilliSleep(1000)
--retract rack to clear
local Rackhsig = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT6)
mc.mcSignalSetState(Rackhsig, 0)
wx.wxMilliSleep(2250)
end
end
end
end
end
mc.mcToolSetCurrent(inst, NewTool)
wx.wxMilliSleep(10)
mc.mcCntlGcodeExecuteWait(inst, "g54")
mc.mcCntlGcodeExecuteWait(inst, string.format("G43 H" .. tostring(NewTool)))
--if mist was on turn back on
local hrMistWas = mc.mcRegGetHandle(inst, 'iRegs0/MistWasOn')
local MistWasVal = mc.mcRegGetValue(hrMistWas)
if (MistWasVal == 1) then
local hMistWas = mc.mcSignalGetHandle(inst, mc.OSIG_MISTON)
mc.mcSignalSetState(hMistWas, 1)
end
else
--manual tool change
mc.mcCntlGcodeExecuteWait(inst, "G49")
--raise z
MTCPos = mc.mcAxisGetPos(inst, 2)
MTCPos = (MTCPos + .5)
mc.mcCntlGcodeExecuteWait(inst, string.format("G0 Z" .. tostring(MTCPos)))
--stop spindle
local hSpindle = mc.mcSignalGetHandle(inst, mc.OSIG_SPINDLEON)
mc.mcSignalSetState(hSpindle, 0)
--wx.wxMessageBox("Manual Tool Change")
mc.mcCntlToolChangeManual(inst, true)
-- wx.wxMessageBox("Replace Tool\nSurface Tool")
-- --set surface register to 0
-- hreg = mc.mcRegGetHandle(inst, 'iRegs0/SurfSet')
-- mc.mcRegSetValue(hreg, 0)
-- --turn surface set led off
-- scr.SetProperty('ledSurfaceSet', 'Value', '0')
-- SMHit == 0
--surface
-- --get sm on or off register
-- local SMReg = mc.mcRegGetHandle(inst, 'iRegs0/SMOnOff')
-- local SMRegVal = mc.mcRegGetValue(SMReg)
-- mc.mcCntlGcodeExecuteWait(inst, "G49")
-- mc.mcToolSetCurrent(inst, 0)
-- --surface tool
-- --If SM turned OFF
-- if (SMRegVal == 0) then
--set to 0 and lift 0.5
wx.wxMilliSleep(100)
mc.mcAxisSetPos(inst, 2, 0.0)
wx.wxMilliSleep(100)
mc.mcCntlGcodeExecuteWait(inst, "g0 z0.5")
-- mc.mcCntlMdiExecute(inst, "g0 z0.5")
wx.wxMilliSleep(500)
-- SMHit = 1
-- end
-- --If SM turned ON
-- if (SMRegVal == 1) then
-- --set jog speed to 100%
-- scr.SetProperty('sliJogRate', 'Value', tostring(100))
-- --wx.wxMessageBox("SM Used")
-- mc.mcCntlGcodeExecuteWait(inst, "g31 z-8.0 f20.0")
-- --check to see if sm hit
-- SMHit = 0
-- SMHit, rc = mc.mcCntlProbeGetStrikeStatus(inst)
-- if (SMHit == 1) then
-- mc.mcAxisSetPos(inst, 2, 1.5)
-- --wx.wxMilliSleep(100)
-- mc.mcCntlGcodeExecuteWait(inst, "g0 z2.0")
-- else
-- wx.wxMessageBox("DID NOT HIT SURFACE MOUSE")
-- wx.wxMessageBox("MUST CLICK RESET BEFORE NEXT ATTEMPT")
-- end
-- end
-- if (SMHit == 1) then
-- hreg = mc.mcRegGetHandle(inst, 'iRegs0/SurfSet')
-- mc.mcRegSetValue(hreg, 1)
-- --turn surface set led on
-- scr.SetProperty('ledSurfaceSet', 'Value', '1')
-- end
-- mc.mcCntlToolChangeManual(inst, true)
end
else
--tool number out of range
wx.wxMessageBox("New Tool Number is too large.")
mc.mcCntlCycleStop(inst)
end
local MinZTemp = mc.mcRegGetValue(MinZ2RegH)
if (MinZTemp >= -20.0) then
mc.mcCntlSetParameter(1801, tonumber(MinZTemp))
mc.mcRegSetValue(MinZRegH, MinZTemp)
mc.mcRegSetValue(MinZ2RegH, -22.0)
end
end
if (mc.mcInEditor() == 1) then
m6()
end