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

От версии 2.1
отредактировано og
на 2019/08/05 11:22
Изменить комментарий: К данной версии нет комментариев
К версии 5.1
отредактировано writer
на 2023/01/26 13:53
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

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