function GetRegister(regname) local inst = mc.mcGetInstance() local hreg = mc.mcRegGetHandle(inst, string.format("iRegs0/%s", regname)) return mc.mcRegGetValueString(hreg) end function m6() local inst = mc.mcGetInstance() local tcp={} local v=0 local TNumber={} TNumber= GetRegister("ToolToChange") TNumber=tonumber(TNumber) mc.mcCntlSetLastError(inst,tostring(TNumber)) --print(TNumber) local CSVPath = wx.wxGetCwd().."\\Profiles\\tool\\ToolChange\\ToolChangePositions.csv" ToolNum = 0; --[[ Open the file and read out the data --]] io.input(io.open(CSVPath,"r")) --mc.mcCntlSetLastError(inst,tostring(CSVPath)) local line; for line in io.lines(CSVPath) do tkz = wx.wxStringTokenizer(line, ","); tcp[ToolNum] = {}-- make a blank table in the positions table to hold the tool data local token = tkz:GetNextToken(); tcp[ToolNum] ["Tool_Number"] = token; tcp[ToolNum] ["X_Position"] = tkz:GetNextToken(); tcp[ToolNum] ["Y_Position"] = tkz:GetNextToken(); tcp[ToolNum] ["Z_Position"] = tkz:GetNextToken(); tcp["Max"] = ToolNum ToolNum = ToolNum + 1; end io.close() ------ Get and compare next and current tools ------ local SelectedTool = TNumber--mc.mcToolGetSelected(inst) mc.mcCntlSetLastError(inst,tostring(TNumber)) local CurrentTool = mc.mcToolGetCurrent(inst) if (SelectedTool == CurrentTool) then mc.mcCntlSetLastError(inst, "Next tool = Current tool") do return end end ------ Get current state ------ local CurFeed = mc.mcCntlGetPoundVar(inst, 2134) local CurFeedMode = mc.mcCntlGetPoundVar(inst, 4001) local CurAbsMode = mc.mcCntlGetPoundVar(inst, 4003) ------ Get position data for current tool ------ ToolData = tcp[CurrentTool] if (ToolData ~= nil) then Num1 = ToolData.Tool_Number XPos1 = ToolData.X_Position YPos1 = ToolData.Y_Position ZPos1 = ToolData.Z_Position else mc.mcCntlEStop(inst) mc.mcCntlSetLastError(inst, "ERROR: Tool number out of range!") do return end end ------ Get position data for next tool ------ mc.mcCntlSetLastError(inst,"now data1 ") ToolData = tcp[SelectedTool] if (ToolData ~= nil) then Num2 = ToolData.Tool_Number XPos2 = ToolData.X_Position YPos2 = ToolData.Y_Position ZPos2 = ToolData.Z_Position else mc.mcCntlSetLastError(inst, "ERROR: Tool number out of range!") do return end end ------ Move to current tool change position ------ local GCode = "" GCode = GCode .. "G00 G90 G53 Z0.0\n" GCode = GCode .. string.format("G00 G90 G53 X%.4f Y%.4f\n", XPos1, YPos1) GCode = GCode .. string.format("G00 G90 G53 Z%.4f\n", ZPos1 + 1.0) GCode = GCode .. string.format("G01 G90 G53 Z%.4f F15.0\n", ZPos1) mc.mcCntlGcodeExecuteWait(inst, GCode) ------ Release drawbar ------ local DrawBarOut = mc.OSIG_OUTPUT4 local hsig = mc.mcSignalGetHandle(inst, DrawBarOut) mc.mcSignalSetState(hsig, 1) ------ Move to next tool change position ------ GCode = "" GCode = GCode .. string.format("G01 G90 G53 Z%.4f\n F15.0", ZPos1 + 1.0) GCode = GCode .. "G00 G90 G53 Z0.0\n" GCode = GCode .. string.format("G00 G90 G53 X%.4f Y%.4f\n", XPos2, YPos2) GCode = GCode .. string.format("G00 G90 G53 Z%.4f\n", ZPos2 + 1.0) GCode = GCode .. string.format("G01 G90 G53 Z%.4f F15.0\n", ZPos2) mc.mcCntlGcodeExecuteWait(inst, GCode) ------ Clamp drawbar ------ mc.mcSignalSetState(hsig, 0) ------ Move Z to home position ------ mc.mcCntlGcodeExecuteWait(inst, "G00 G90 G53 Z0.0\n") ------ Reset state ------ mc.mcCntlSetPoundVar(inst, 2134, CurFeed) mc.mcCntlSetPoundVar(inst, 4001, CurFeedMode) mc.mcCntlSetPoundVar(inst, 4003, CurAbsMode) v=1 ------ Set new tool ------ if (v==1)then mc.mcToolSetCurrent(inst, TNumber)end mc.mcCntlSetLastError(inst, string.format("Tool change - Tool: %.0f", SelectedTool)) end if (mc.mcInEditor() == 1) then m6() end