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

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

Сводка

Подробности

Свойства страницы
Название
... ... @@ -1,1 +1,1 @@
1 -Макрос для формирования карты высот
1 +Как сформировать карту высот
Родительский документ
... ... @@ -1,1 +1,0 @@
1 -Руководство пользователя.Описание M-кодов.Примеры макросов.WebHome
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.Knetyaga
1 +XWiki.og
Содержимое
... ... @@ -1,81 +1,0 @@
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,1 +1,0 @@
1 -XWiki.XWikiGuest
Размер
... ... @@ -1,1 +1,0 @@
1 -1.7 KB
Содержимое
... ... @@ -1,77 +1,0 @@
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