Редактировал(а) Edgar Allan Poe 2024/11/14 17:01

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