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

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