function m6() local inst = mc.mcGetInstance() local rc = 0 local Alarm = mc.mcSignalGetHandle(inst, mc.OSIG_ALARM) local AlarmState = 0 local RequestedTool = mc.mcToolGetSelected(inst) local CurrentTool = mc.mcToolGetCurrent(inst) local ToolChangePosition = mc.mcCntlGetPoundVar(inst, 500) local RequestedToolPocket = mc.mcToolGetData (inst, mc.MTOOL_MILL_POCKET, RequestedTool) local Coolant = mc.mcSignalGetHandle(inst, mc.OSIG_COOLANTON) local Orient = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT5) local POTUp = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT12) local POTDown = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT13) local ArmToSpindle = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT17) local ArmToHome = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT18) local ToolDrawbar= mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT11) --local ToolClamp = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT60) local ArmUp = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT14) local ArmDown = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT15) local ArmCW = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT16) local ArmCCW = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT19) local ArmRotateDelay = 1500 local ErrorWaitTime = 2.5 local NextOperationDelay = 400 local ArmIsCCW = mc.mcSignalGetHandle(inst, mc.ISIG_INPUT29) local ArmIsCW = mc.mcSignalGetHandle(inst, mc.ISIG_INPUT30) local ArmIsCWState = mc.mcSignalGetState(ArmIsCW) local ArmIsCCWState = mc.mcSignalGetState(ArmIsCCW) ----------------------------------------------------------------------- ----------------------------------------------------------------------- --If the requeseted pocket it 0, then stop the macro. if (RequestedToolPocket == 0) then mc.mcCntlSetLastError(inst, "Tool change stopped; cannot use carousel pocket 0") else if RequestedTool == CurrentTool then mc.mcCntlSetLastError(inst, "The requested tool is already in the spindle.") else --Turn off spindle and coolant. mc.mcSpindleSetDirection(inst, 0) mc.mcSignalSetState(Coolant, 0) --Orient the spindle. mc.mcSignalSetState(Orient, 1) --Move the Z to the Tool Change Position. mc.mcCntlGcodeExecuteWait(inst, "G90 G53 G00 Z" .. ToolChangePosition) --Move to the requested tool pocket. mc.mcCntlGcodeExecuteWait(inst, "G90 G00 C" .. RequestedToolPocket) --Check the orient signal. rc = mc.mcSignalWait(inst, mc.ISIG_INPUT20, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem with the spindle orientation.") mc.mcSignalSetState(Alarm, 1) return end--Orient Error Check --Move the POT down. mc.mcSignalSetState(POTUp, 0) mc.mcSignalSetState(POTDown, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT24, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving POT down.") mc.mcSignalSetState(Alarm, 1) return end--POT down error check. --Move the arm to the spindle. mc.mcSignalSetState(ArmToHome, 0) mc.mcSignalSetState(ArmToSpindle, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT26, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving the arm to the spindle.") mc.mcSignalSetState(Alarm, 1) return end--Arm to spindle error check. wx.wxMilliSleep(NextOperationDelay) --Release the tool mc.mcSignalSetState(ToolDrawbar, 1) -- rc = mc.mcSignalWait(inst, mc.ISIG_INPUT, 1, ErrorWaitTime) -- if rc ~= 0 then -- mc.mcCntlSetLastError(inst, "There was a problem releasing the tool.") -- mc.mcSignalSetState(Alarm, 1) -- return -- end--Release tool error check. wx.wxMilliSleep(1500) --Move the arm down mc.mcSignalSetState(ArmUp, 0) mc.mcSignalSetState(ArmDown, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT28, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving the arm down.") mc.mcSignalSetState(Alarm, 1) return end--Arm Down error check. wx.wxMilliSleep(NextOperationDelay) --Decide the direction to rotate then rotate the arm 180. if ArmIsCCWState == 1 then mc.mcSignalSetState(ArmCCW, 0) mc.mcSignalSetState(ArmCW, 1) wx.wxMilliSleep(ArmRotateDelay) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT30, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem rotating the arm CW.") mc.mcSignalSetState(Alarm, 1) return end--Arm Rotate CW error check. end wx.wxMilliSleep(NextOperationDelay) if ArmIsCWState == 1 then mc.mcSignalSetState(ArmCW, 0) mc.mcSignalSetState(ArmCCW, 1) wx.wxMilliSleep(ArmRotateDelay) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT29, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem rotating the arm CCW.") mc.mcSignalSetState(Alarm, 1) return end--Arm Rotate CCW error check. end wx.wxMilliSleep(NextOperationDelay) --Move arm up. mc.mcSignalSetState(ArmDown, 0) mc.mcSignalSetState(ArmUp, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT27, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving the arm up.") mc.mcSignalSetState(Alarm, 1) return end--Arm up error check. wx.wxMilliSleep(NextOperationDelay) --Clamp the tool. mc.mcSignalSetState(ToolDrawbar, 0) -- rc = mc.mcSignalWait(inst, mc.ISIG_INPUT, mc.WAIT_MODE_HIGH, ErrorWaitTime) -- if rc ~= 0 then -- mc.mcCntlSetLastError(inst, "There was a problem clamping the tool.") -- mc.mcSignalSetState(Alarm, 1) -- return -- end--Tool clamp error check. wx.wxMilliSleep(1500) --Move the arm home. mc.mcSignalSetState(ArmToSpindle, 0) mc.mcSignalSetState(ArmToHome, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT25, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving the arm home.") mc.mcSignalSetState(Alarm, 1) return end--Arm to home error check. wx.wxMilliSleep(NextOperationDelay) --Move the POT up. mc.mcSignalSetState(POTDown, 0) mc.mcSignalSetState(POTUp, 1) rc = mc.mcSignalWait(inst, mc.ISIG_INPUT23, mc.WAIT_MODE_HIGH, ErrorWaitTime) if rc ~= 0 then mc.mcCntlSetLastError(inst, "There was a problem moving the POT up.") mc.mcSignalSetState(Alarm, 1) return end--POT Up error check. --Turn off spindle orient. mc.mcSignalSetState(Orient, 0) --Turn off outputs that are still on. mc.mcSignalSetState(POTUp, 0) mc.mcSignalSetState(ArmToHome, 0) mc.mcSignalSetState(ArmUp, 0) mc.mcSignalSetState(ArmCW, 0) mc.mcSignalSetState(ArmCCW, 0) --Check for the Alarm Output. AlarmState = mc.mcSignalGetState(Alarm) if AlarmState == 1 then mc.mcCntlSetLastError(inst, "Could not complet tool change. Check Error Log.") --mc.mcCntlEStop() else mc.mcCntlSetLastError(inst, "Tool change complete, current tool is now: T" .. RequestedTool) mc.mcToolSetData(inst, mc.MTOOL_MILL_POCKET, CurrentTool, RequestedToolPocket) mc.mcToolSetCurrent(inst, RequestedTool) end--AlarmState == 1 end--RequestedTool == CurrentTool end--Requested Pocket is 0. end--m6 if (mc.mcInEditor() == 1) then m6() end