Сергей2014

Учебник по G-code и постпроцессорам потерялся...

Всем доброго дня.

Как-то скачивал учебник по G-code и редактированию постпроцессоров, там было подробно описано как и что редактировать, какие переменные за что отвечают.

В итоге данный файл потерялся, не могу найти. Помогите люди добрые, ткните пальцем от куда скачать, а то в поиске не могу найти....

 

а если конкретнее то в УП выводиться следующая строчка

G90 G17 G40 G80 G00 G20

а должна быть такая

N1 G90 G17 G40 G80 G00

Где можно отключить вывод дюймовых координат?

Изменено пользователем Сергей2014

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах


такую литературу надо хранить как слиток золота =). Как вариант вот Видео Учебник.

я думаю вы посмотрев его быстро разберетесь как подправить вывод в УП нужных параметров

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Ishimtcev сказал:

такую литературу надо хранить как слиток золота =). Как вариант вот Видео Учебник.

я думаю вы посмотрев его быстро разберетесь как подправить вывод в УП нужных параметров

этот канал я смотрю переодически и все 6 частей просмотрел уже давно, видео очень полезное.

Вопрос именно в книге, которую переводил вроде бы кто-то с этого форума где было написано как менять переменные и какие варианты можно подставлять.

очень полезная книга, но в процессе переезда она прое...сь.

 

С этим я разобрался методом тыка и ковыряния в глубинах сознания.

Вопрос в другом.

Теперь мне важен конец кода.

Сейчас он выглядит вот так

finish.JPG.b0ffd3ba71a13f5e94dddf9b256798e2.JPG

 

Нужно чтобы выделенная строчка выглядела вот так - G00 G28 G91 Y300 либо ее вообще не было.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, Сергей2014 сказал:

Нужно чтобы выделенная строчка выглядела вот так - G00 G28 G91 Y300 либо ее вообще не было.

так вставь свое значение в посте и будет тебе счастье..)))

в посте вместо Y0 замени наY300

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, pavel-kpll сказал:

так вставь свое значение в посте и будет тебе счастье..)))

в посте вместо Y0 замени наY300

 

так собственно в этом и проблема...

где именно в посте это нужно удалить/заменить?

пост gmill_4x_haas_eval

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, Сергей2014 сказал:

так собственно в этом и проблема...

 

post.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ок, спасибо, только что как раз и увидел этот пункт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

.1.jpg.2504b26349f88e515f4b7716adc78ba2.jpg

1. добавил новую строчку

2.jpg.50a8fe001194d11c161db76ed9307fb6.jpg

2. описал ее

3.jpg.3c991e5003e96da4778ce7253b26cd4b.jpg

ну и вот что получилось.

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Ishimtcev сказал:

.

1. добавил новую строчку

2.jpg.50a8fe001194d11c161db76ed9307fb6.jpg

2. описал ее

3.jpg.3c991e5003e96da4778ce7253b26cd4b.jpg

ну и вот что получилось.

 

вот спасибо! я как раз для этого книжку и искал, чтобы посмотреть где это правильно прописать, но вроде изменения sHomestrend  тоже работает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я не говорю что другого варианта нет..... просто это один из них =)

@Сергей2014 для того чтобы понять откуда и какая строка берется включите строчку в УП trace "all":5 или trace "all":1 в зависимости от того сколько вы информации хотите получить. Потом будет очень легкой найти какая процедура отвечает за тот или иной вывод определенной строки. там легко можно отследить последовательность срабатывания условий УП

Изменено пользователем Ishimtcev

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Ishimtcev сказал:

я не говорю что другого варианта нет..... просто это один из них =)

 

я понимаю что вариантов много, вопрос только в том - какой из них более логичный и правильный с точки зрения машинного кода. Хотя это не сильно принципиально - работает и это главное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
39 минут назад, Сергей2014 сказал:

вопрос только в том - какой из них более логичный и правильный

дело не только в том что тут куча вариантов, а в том что пост может быть написан по разному...

к примеру на моем посту нет call @test.  есть только call @usr. и в вашем случае (с вашим опытом) вы можете просто не понять где именно изменять. можете элементарно запутаться.

и на моем посту нет смысла дописывать (как предлагал Ishimtcev) {nb, G91 928 и прочее, когда можно в разделе Homing & Zero Returning просто удалить Y0 или вписать Y300.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Сергей2014 сказал:

 

я понимаю что вариантов много, вопрос только в том - какой из них более логичный и правильный с точки зрения машинного кода. Хотя это не сильно принципиально - работает и это главное.

с точки зрения машинного кода, если оба варианта дают одинаковый результат, то абсолютно пофигу какой выбирать, лишь бы вам самим было понято где и что поменять.

 

@pavel-kpll , все процедуры начинающиеся с @usr... не стандартные, и писать в них можно по сути что угодно. Вы удивитесь, но даже в стандартных постах от разработчиков, логика местами оставляет желать лучшего...:wallbash:

 

@Ishimtcev , про трассировку по trace уже рассказывали, но, по большому счету, большинству юзеров лень разбираться, проще скопипастить уже готовое решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, pavel-kpll сказал:

дело не только в том что тут куча вариантов, а в том что пост может быть написан по разному...

к примеру на моем посту нет call @test.  есть только call @usr. и в вашем случае (с вашим опытом) вы можете просто не понять где именно изменять. можете элементарно запутаться.

и на моем посту нет смысла дописывать (как предлагал Ishimtcev) {nb, G91 928 и прочее, когда можно в разделе Homing & Zero Returning просто удалить Y0 или вписать Y300.

дак в том то и дело... вы создаете любую процедуру с любым именем..... @XXX

описание любой процедуры достаточно простое

@test
  *****
endp

главное первая и последняя строчка этой процедуры все что между это и есть тело процедуры...

для того чтобы вызвать описаную процедуру есть команда call

 

к чему я это пишу. Вы очень ошибаетесь что название процедур имеют какие то ограничения.

 

По моему мнению дабы не запутаться в посте надо как можно больше создать отдельных маленьких процедур.... а в самих цикла уже вызывать их.... чем в основных процедурах вносить изменения, но это лишь мое мнение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, Сергей2014 сказал:

Всем доброго дня.

Как-то скачивал учебник по G-code и редактированию постпроцессоров, там было подробно описано как и что редактировать, какие переменные за что отвечают.

В итоге данный файл потерялся, не могу найти. Помогите люди добрые, ткните пальцем от куда скачать, а то в поиске не могу найти....

 

 

Вы это имели ввиду?  https://yadi.sk/d/6aFf7STS3QZCvX

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скрытый текст
5 часов назад, Ishimtcev сказал:

.1.jpg.2504b26349f88e515f4b7716adc78ba2.jpg

1. добавил новую строчку

2.jpg.50a8fe001194d11c161db76ed9307fb6.jpg

2. описал ее

3.jpg.3c991e5003e96da4778ce7253b26cd4b.jpg

ну и вот что получилось.

 

Перемещение по Y на 0,3 мм или на 300 мм? Зависит от наличия точки после числа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

10 часов назад, Сергей2014 сказал:

Всем доброго дня.

Как-то скачивал учебник по G-code и редактированию постпроцессоров, там было подробно описано как и что редактировать, какие переменные за что отвечают.

 

Поищите на своем компе в каталоге с установленным SC, по умолчанию:

C:\Program Files\SolidCAM201_\Documentation\Gpptool.chm

+ любой онлайн переводчик в помощь, если с английским туго

Изменено пользователем NickEL1000

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

8 часов назад, Сергей2014 сказал:

 

 

 

Нужно чтобы выделенная строчка выглядела вот так - G00 G28 G91 Y300 либо ее вообще не было.

 

@mestnyi как просил автор так и вывели =))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно подробнее про трассировку? Как пользоваться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 минут назад, sudomex2016 сказал:

Можно подробнее про трассировку? Как пользоваться?

Скрытый текст

 

 

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
18 часов назад, Frezer_PU сказал:
  Скрыть содержимое

 

 

1. Уточню по поводу трассировки, режимы Mode1... Mode10 -абсолютно условны, можно придумать свой режим. Трассировку можно выполнить для любой отдельно взятой процедуры или произвольного пакета процедур, с заданным режимом глубины прорисовки кода.

 

Например,

создаем произвольную процедуру, и задаем её полную трассировку в начале программы

trace "@vasya_LOH":5               

 

ну и сама процедура:

@vasya_LOH

print 'Вася- программер кривые руки, измени правильно ориентацию СК'

endp

 

вызов процедуры прописан там, где есть вывод команд поворота стола/головы, и будет срабатывать если программист неправильно ориентировал СК для 3+2 обработки

 

if rotate_angle_y<>0

call  @vasya_LOH

 

(if rotate_angle_y<>0 - проверяемое условие, не должно быть наклона по оси B)

 

при генерации УП трассировка не будет отображаться для  других частей программы.

 

2. На вкус и цвет - товарищей нет, но. Порекомендую вместо AkelPad для редактирования постов использовать Notepad++, отличный редактор с настраиваемой подсветкой кода, чем удобен - позволяет произвести откат изменений уже после того как вы нажали кнопку сохранить файл и переписали файл постпроцессора (но при этом не закрыли сам Notepad++).

 

---------------------

Респект @Frezer_PU, за проделанную работу!! :clap_1:

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 12.12.2017 в 20:55, Finch сказал:

Вы это имели ввиду?  https://yadi.sk/d/6aFf7STS3QZCvX

:worthy: спасибо большое, а то не мог найти! Всех с наступившим! И поменьше ошибок в программе и столкновений с оправкой в этом году! :5a33a36a94edb_3DSmiles(199):

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу



  • Реклама

  • Сообщения

    • Knight of Truth
      По Windows 7 - не знаю. На этой оси у нас обновления не тестировались - так как решили не тратить время и не пробовать снова эту отраву на вкус, ведь принцип действия патчей одинаков, не зависимо от операционной системы, а разработчики Microsoft по указу сверху могут добавлять новые компоненты этих патчей в любые обновления "стабильности" и "безопасности". Интересная информация: компания ASUS уже выкатила новые версии БИОС для своих материнских плат, где в процессор прошивается новый микрокод, устраняющий "уязвимости" системы. Подозреваю, что там припасено дополнительное урезание мощности компьютерного железа.
    • soklakov
      у Ансиса есть старый курс " Aeroacoustics using ANSYS Fluent 14.5 ".   сам не читал, но говорят там довольно понятно всё.
    • Борман
    • Tad
      По поводу дрожания - надо развоздушить систему. Если воздух не обнаружится - пробовать немного уменьшить коэффициент усиления ПИД регулятора осей Y при рабочей скорости. По поводу отключения - мало информации.
    • soklakov
      Крайне интересно. Правильно ли я понял, что Ваша софтина умеет прикладывать нагрузки к кубику, не спрашивая меня, какую из шести граней закрепить, а какую нагрузить? Если так, то тревожит вопрос: откуда она знает?
    • soklakov
      Подробностей? А то и правда, секретный танк, о котором ученые еще ничего не знают, работает при -300 по цельсию.
    • Sla_68
      Можете меня обзывать как хотите, быдло-кодером ну и т.д. Ну хоть убейте меня , я не знаю как выполнить данную задачу без дополнительных построений.  А так код вполне себе рабочий.Определяет все что мне нужно. Только что написал. Выкладываю код. Там имеется еще наборчик пользовательских функций. Но они все тригонометрические. Поэтому пока без них. Sub Назначение_свойств_профиля() 'On Error GoTo ex Dim swFace As SldWorks.face2 Dim swSurf As SldWorks.Surface Dim swDisplayDimension As SldWorks.DisplayDimension Dim swDim As SldWorks.Dimension Dim v1 As SldWorks.Vertex Dim v2 As SldWorks.Vertex Dim swRefAxis As SldWorks.RefAxis Dim vAxisParam As Variant Dim x As Double Dim y As Double Dim z As Double Dim x1 As Double Dim y1 As Double Dim z1 As Double Dim fx As Double Dim fy As Double Dim fz As Double Dim fx1 As Double Dim fy1 As Double Dim fz1 As Double Dim sm() As Double Dim swFeatMgr As SldWorks.FeatureManager Set swApp = Application.SldWorks Set part = swApp.ActiveDoc Set swFeatMgr = part.FeatureManager Set swSelMgr = part.SelectionManager part.SketchManager.AddToDB = True swApp.SetUserPreferenceToggle swSketchAutomaticRelations, False 'автопривязки отключаем swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swSketchInference, False 'прилипание ..отключает все взаимосвязи swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, False 'убивает диалог с размером false -выключает диалог tt = part.GetTitle mg = Mid(tt, 10, 2) lRetVal = part.AddCustomInfo3("", "материал", swCustomInfoText, mg) partTitle = part.GetTitle namedetal = partTitle & ".SLDPRT" arrbody = part.GetBodies2(swSolidBody, False) Set body = arrbody(0) glavfaces = вернуть_номера_главных_плоскостей(body) Set swFace = glavfaces(2) Set swSurf = swFace.GetSurface '======================================================== If swSurf.IsPlane Then edjearr = вернуть_2_главных_кромки(swFace1) Set Edge = edjearr(2) params = Edge.GetCurveParams2 x1 = params(0): x2 = params(3): an1 = x1 - x2: bn1 = x2 - x1 'вектор оси y1 = params(1): y1 = params(4): an2 = y1 - y2: bn2 = y2 - y1 z1 = params(2): z1 = params(5): an3 = z1 - z2: bn3 = z2 - z1 pvec = перпендикулярный_вектор(an1, an2, an3) Set axeobj = Edge Set faceObj = swFace ElseIf swSurf.IsCylinder Then params = swFace.GetSurface.CylinderParams x1 = params(0): x2 = params(3): an1 = x1 - x2: bn1 = x2 - x1 'вектор оси y1 = params(1): y1 = params(4): an2 = y1 - y2: bn2 = y2 - y1 z1 = params(2): z1 = params(5): an3 = z1 - z2: bn3 = z2 - z1 pvec = перпендикулярный_вектор(an1, an2, an3) part.Insert3DSketch2 True 'вход строим 3 точки для плоскости Set swSketch = swApp.ActiveDoc.GetActiveSketch2 swSketch.Name = "точка" загрузочная_точка_смещена 0.1, (x1 + x2) / 2, (y1 + y2) / 2, (z1 + z2) / 2, pvec(0), pvec(1), pvec(2), fx0, fy0, fz0 Set swSketchPt0 = part.SketchManager.CreatePoint(fx0, fy0, fz0) part.Insert3DSketch2 True 'выход part.BlankSketch 'скрывает эскизы swSketchPt0.SelectByMark False, 2 swFace.SelectByMark True, 2 bret = part.InsertAxis 'вставка оси Set swFeatMgr = part.FeatureManager swFeatures = swFeatMgr.GetFeatures(True) Set axeobj = swFeatures(UBound(swFeatures)) 'ось axeobj.Name = "ось профиля" axeobj.SelectByMark False, 2 swSketchPt0.SelectByMark True, 2 Set faceObj = part.CreatePlaneThruLineAndPt(False) 'создает плоскость faceObj.Name = "плоскость распила" faceObj.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.BlankRefGeom Else Exit Sub End If '=============================================== загрузочная_точка_смещена 3, x1, y1, z1, an1, an2, an3, fx1, fy1, fz1 'точки оси загрузочная_точка_смещена 3, x2, y2, z2, bn1, bn2, bn3, fx2, fy2, fz2 'точки оси загрузочная_точка_смещена 0.1, fx1, fy1, fz1, pvec(0), pvec(1), pvec(2), fx11, fy11, fz11 'точки будущих линий2 загрузочная_точка_смещена 0.1, fx2, fy2, fz2, pvec(0), pvec(1), pvec(2), fx22, fy22, fz22 'точки будущих линий2 '==================================================== faceObj.SelectByMark False, 2 part.SketchManager.InsertSketch True 'вставка 2D эскиза на рабочей плоскости Set swSketch = swApp.ActiveDoc.GetActiveSketch2 swSketch.Name = "контур_распила" Dim swMathPt1 As SldWorks.MathPoint Dim swMathPt11 As SldWorks.MathPoint Dim swMathPt111 As SldWorks.MathPoint Dim swMathPt2 As SldWorks.MathPoint Dim swMathPt22 As SldWorks.MathPoint Dim swMathPt222 As SldWorks.MathPoint Set swMathPt1 = get2Dpoint(swSketch, fx1, fy1, fz1) Set swMathPt11 = get2Dpoint(swSketch, fx11, fy11, fz11) Set swMathPt2 = get2Dpoint(swSketch, fx2, fy2, fz2) Set swMathPt22 = get2Dpoint(swSketch, fx22, fy22, fz22) Set skSegment1 = part.SketchManager.CreateCenterLine _ (swMathPt1.ArrayData(0), swMathPt1.ArrayData(1), swMathPt1.ArrayData(2), _ swMathPt11.ArrayData(0), swMathPt11.ArrayData(1), swMathPt11.ArrayData(2)) skSegment1.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.SketchAddConstraints "sgPERPENDICULAR" Set skSegment2 = part.SketchManager.CreateCenterLine _ (swMathPt2.ArrayData(0), swMathPt2.ArrayData(1), swMathPt2.ArrayData(2), _ swMathPt22.ArrayData(0), swMathPt22.ArrayData(1), swMathPt22.ArrayData(2)) skSegment2.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.SketchAddConstraints "sgPERPENDICULAR" '======================================================================================== Set v1 = ближайшая_вершина_к_координате(body, fx1, fy1, fz1, vdis1) Set Edge1 = ближайшая_кромка_к_координате(body, fx1, fy1, fz1, edis1) Set v2 = ближайшая_вершина_к_координате(body, fx2, fy2, fz2, vdis2) Set edge2 = ближайшая_кромка_к_координате(body, fx2, fy2, fz2, edis2) '=================================== If vdis1 <= edis1 Then v1.SelectByMark False, 2 Set swStartPt1 = skSegment1.GetStartPoint2 swStartPt1.SelectByMark True, 2 part.SketchAddConstraints "sgCOINCIDENT" Else Edge1.SelectByMark False, 2 skSegment1.SelectByMark True, 2 part.SketchAddConstraints "sgTANGENT" part.SketchAddConstraints "sgCOLINEAR" End If '================= If vdis2 <= edis2 Then v2.SelectByMark False, 2 Set swStartPt2 = skSegment2.GetStartPoint2 swStartPt2.SelectByMark True, 2 part.SketchAddConstraints "sgCOINCIDENT" Else edge2.SelectByMark False, 2 skSegment2.SelectByMark True, 2 part.SketchAddConstraints "sgTANGENT" part.SketchAddConstraints "sgCOLINEAR" End If '===================================== skSegment1.SelectByMark False, 2 skSegment2.SelectByMark True, 2 Set swDisplayDimension = part.AddDimension2(0, 0, 0) Set swDim = swDisplayDimension.GetDimension swDim.DrivenState = 1 swDim.Name = "длина" dlina = """длина@контур_распила@@default@" & namedetal & """" shirina = "1" lRetVal = part.DeleteCustomInfo2("", "длина") lRetVal = part.DeleteCustomInfo2("", "ширина") lRetVal = part.AddCustomInfo3("", "длина", swCustomInfoText, dlina) lRetVal = part.AddCustomInfo3("", "ширина", swCustomInfoText, shirina) part.SketchManager.InsertSketch True 'выход из эскиза part.BlankSketch ' скрыть эскиз part.SketchManager.AddToDB = False swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swSketchInference, True 'прилипание ..отключает все взаимосвязи swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, True 'убивает диалог с размером true -включает диалог swApp.SetUserPreferenceToggle swSketchAutomaticRelations, True 'автопривязки включаем End Sub Function ближайшая_вершина_к_координате(body, x, y, z, dis) vList = body.GetVertices Dim arr() As Double Dim edjpoint As Variant Dim arrobj() As Object Dim arrobjdis() As Double If IsEmpty(vList) Then dis = 1000000 Set ближайшая_вершина_к_координате = Nothing Exit Function End If For i = 0 To UBound(vList) edjpoint = vList(i).GetClosestPointOn(x, y, z) 'ближайшая точка ReDim Preserve arr(i) 'массив дистанций ReDim Preserve arrobj(i) arr(i) = длина_линии(x, y, z, edjpoint(0), edjpoint(1), edjpoint(2)) Set arrobj(i) = vList(i) Next i max_min_indexarray arr, max1n, max2n, min1n, min2n dis = arr(min1n) Set ближайшая_вершина_к_координате = arrobj(min1n) End Function Function ближайшая_кромка_к_координате(body, x, y, z, dis) edgeList = body.GetEdges Dim arr() As Double Dim edjpoint As Variant Dim arrobj() As Object Dim arrobjdis() As Double For i = 0 To UBound(edgeList) edjpoint = edgeList(i).GetClosestPointOn(x, y, z) 'ближайшая точка ReDim Preserve arr(i) 'массив дистанций ReDim Preserve arrobj(i) arr(i) = длина_линии(x, y, z, edjpoint(0), edjpoint(1), edjpoint(2)) Set arrobj(i) = edgeList(i) Next i max_min_indexarray arr, max1n, max2n, min1n, min2n dis = arr(min1n) Set ближайшая_кромка_к_координате = arrobj(min1n) End Function Sub max_min_indexarray(mass, max1n, max2n, min1n, min2n) 'сортировка и удаление повторов в массиве max1n = 0 max2n = 0 min1n = 0 min2n = 0 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) > max1 Then max1 = CDbl(mass(i)) Next i max2 = 0 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) = max1 Then max1n = i Exit For End If Next i For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) > max2 And i <> max1n Then max2n = i max2 = mass(i) End If Next i ''''''''''''''''''''''''''''''''''''''''''''''''''обратная min1 = max1 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) < min1 Then min1 = CDbl(mass(i)) Next i min2 = max1 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) = min1 Then min1n = i Exit For End If Next i For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) < CDbl(min2) And i <> min1n Then min2n = i min2 = CDbl(mass(i)) End If Next i End Sub  
    • vad0000
      В первую очередь выкладывайте машинные параметры станка. 
    • Nevskiyalexxx
      Так то лучше вместо planarа несколько Z-levelов создать - он и припуск будет видеть и деталь гарантированно не зарежет.
    • lexincton
      Поменял вывод инструмента в событии начала траектории Прописать статично эту строку перед инструментом