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

От версии 2.1
отредактировано og
на 2019/08/05 11:22
Изменить комментарий: К данной версии нет комментариев
К версии 3.3
отредактировано abolgov
на 2022/06/10 14:25
Изменить комментарий: Renamed from xwiki:PUMPUBLIC.Макрос для формирования карты высот

Сводка

Подробности

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