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

От версии 1.1
отредактировано og
на 2019/08/05 11:22
Изменить комментарий: К данной версии нет комментариев
К версии 6.1
отредактировано writer
на 2023/01/26 14:12
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

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