Изменения документа Макрос для формирования карты высот
Редактировал(а) Edgar Allan Poe 2024/11/14 17:01
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,69 +1,62 @@ 1 -Для определённых задач (например, фрезеровки печатных плат) можетвозникнутьнеобходимость сканирования поверхности с последующей корректировкой неровностей по Z.1 +Для определённых задач (например, фрезеровки печатных плат) возникает необходимость сканирования поверхности с последующей корректировкой неровностей по Z. Карта высот подготавливается с помощью макроса (пример ниже), и на основе этой карты высот модифицируется G-код. Сформировать G-код с готовыми координатами можно, например, в программе G-Code Ripper. 2 2 3 -Карту высот на основе сканирования поверхности можно подготовить с помощью макроса (пример ниже) и затем, используя эту карту высот, модифицировать G-код. 4 - 5 -Сформировать G-код с готовыми координатами поможет, например, программа G-Code Ripper. 6 - 7 -{{code language="lua"}} 3 +{{code}} 8 8 function m155() 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 5 + local XWidth = 70 6 + local YWidth = 50 7 + local SafeZ = 3 8 + local ProbeZ = -3 9 + local StepX = 15 10 + local StepY = 15 11 + local Feed = 50 12 + local TipHeight = 0 13 + local ProbeFilename = "C:\temp\probe.txt" 18 18 19 - PushCurrentDistanceMode() 20 - PushCurrentMotionMode() 21 - 22 - if (IsProbingPinConfigured()) then 23 - file, msg = io.open(ProbeFilename, "w") -- open the file 24 - else 25 - DisplayMessage("Probe input is not configured") 26 - return 27 - end 15 + PushCurrentDistanceMode() 16 + PushCurrentMotionMode() 17 + 18 + if (IsProbingPinConfigured()) then 19 + -- open the file 20 + file, msg = io.open(ProbeFilename, "w") 28 28 29 29 if (file == nil) then 30 - 31 - 32 - 23 + DisplayMessage("Could not open probe output file ("..msg..")") 24 + Stop() 25 + return 33 33 end 34 34 35 35 ExecuteMDI("F "..Feed) 36 36 ExecuteMDI("G90 G38.2 Z-100") 37 37 38 - ExecuteMDI("G92 X0Y0Z0") -- set the current location to 0,0,0 31 + -- set the current location to 0,0,0 32 + ExecuteMDI("G92 X0Y0Z0") 39 39 ExecuteMDI("G0 Z"..SafeZ) 40 40 41 41 local direction = 0 42 42 for y = 0, YWidth, StepY do 37 + if (direction == 1) then 38 + direction = 0 39 + else 40 + direction = 1 41 + end 42 + 43 + for x = 0, XWidth, StepX do 43 43 if (direction == 1) then 44 - direction=045 + ExecuteMDI("G0 X"..x.." Y"..y.." Z"..SafeZ) 45 45 else 46 - direction=147 + ExecuteMDI("G0 X"..(XWidth - x).." Y"..y.." Z"..SafeZ) 47 47 end 48 - 49 - for x = 0, XWidth, StepX do 50 - if (direction == 1) then 51 - ExecuteMDI("G0 X"..x.." Y"..y.." Z"..SafeZ) 52 - else 53 - ExecuteMDI("G0 X"..(XWidth - x).." Y"..y.." Z"..SafeZ) 54 - end 55 55 56 - ExecuteMDI("G38.2 Z"..ProbeZ) 57 - LogCurrentPos(TipHeight) 58 - ExecuteMDI("G0 Z"..SafeZ) 59 - end 60 - 50 + ExecuteMDI("G38.2 Z"..ProbeZ) 51 + LogCurrentPos(TipHeight) 52 + ExecuteMDI("G0 Z"..SafeZ) 53 + end 61 61 end 62 62 63 63 if (direction == 1) then 64 - 57 + ExecuteMDI("G0 X"..XWidth.." Y"..YWidth.." Z"..SafeZ) 65 65 else 66 - 59 + ExecuteMDI("G0 X".."0".." Y"..YWidth.." Z"..SafeZ) 67 67 end 68 68 69 69 local HighZ = 5 ... ... @@ -71,17 +71,20 @@ 71 71 ExecuteMDI("G0 X0Y0") 72 72 73 73 file:close() 67 + else 68 + DisplayMessage("Probe input is not configured") 69 + return 70 + end 74 74 end 75 75 76 76 function LogCurrentPos(tipHeight) 77 - 78 - 79 - 74 + local CurrX = AxisGetPos(Axis.X) 75 + local CurrY = AxisGetPos(Axis.Y) 76 + local CurrZ = AxisGetPos(Axis.Z) 80 80 81 - local fmt = "%.5f" 82 - file:write(string.format(fmt, CurrX)..","..string.format(fmt, CurrY)..",".. 83 - string.format(fmt, CurrZ - tipHeight), "\n") 78 + local fmt = "%.5f" 79 + file:write(string.format(fmt, CurrX)..","..string.format(fmt, CurrY)..","..string.format(fmt, CurrZ - tipHeight), "\n") 84 84 end 85 85 {{/code}} 86 86 87 - **[[Скачать макрос>>attach:M155.pm]]**83 +[[Скачать макрос>>attach:M155.pm]]