Pinned posts

                  Имеется станок mazak i-700, в станки есть опция оси V (ось положения инструмента, работает как ось поворота от 0 до 360 градусов). Вопрос возможно ли реализовать в Solidcam подобного рода обработку https://www.youtube.com/watch?v=RpgZkpEHgrg и еще видео https://www.youtube.com/watch?v=LSJ8lvFXTTs .  Функций отслеживания контура в станке нет. Пообщался с людьми из mazak , сообщили мне, что реализовать такую обработку можно двумя способами;

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

       Способ второй это CAM, создание УП с траекторией четырех осей одновременно X Y Z V что более приемлемо для нашего производства. 

 

 

           Как правильно реализовать данную ось в WMID'е? Т.к. нет оси в файле станка то и значения переменной неоткуда брать. Пробовал разные варианты, добавления оси в вмид, но значение для  поворота по прежнему брать неоткуда.

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

           Интересуют также подобные варианты исполнения и на других станках. 

           

 

 

 

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


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


UnPinned posts

чтобы не делать очередные голословные заявления и не разводить холивар SC vs NX

@vasilevmoment  выложите то что вы пробовали ваши варианты

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


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

@NickEL1000 В том и дело что вариантов толком и нет, Понятно как на трех координатный станок создать vmid как на пятикоординатный, но в данном случае даже не знаю от чего отчего отталкиваться. Использую стандартный vmid для пятикоординатного i-700, добавил то что выделено красным, результатов нет, вывожу полный код после активации трассировки не вижу никаких значений данной оси, т.е. незачто зацепится. Быть может я начинаю с самого начала неправильно и сделал неправильный vmid, но пост процессор работает правильно и выдает правильный gкод. 

 

P.S. есть опыт написания постпроцессоров, но нет опыта создания vmid. Хотелось бы добавить данную функцию обработки в наш i-700.

 

 

Снимок.PNG

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

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


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

 

 

 

Здравствуйте а какой стратегией в солиде вы хотите реализовать данную обработку?

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


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

@Povar1 контурная обработка врезание по спирали, далее в ввести дополнительный параметр в vmid вкладка фрезерование. В окне перехода ставим галочку активации этого параметра, в посте задаем условие обработки если данный параметр активен и выводим 4-е координаты X Y Z V и всё. Было б значение переменной V а дальше уже легко её обработать. 

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


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

@vasilevmoment данную обработку видел только на презентациях. Оборудования которое может это реализовать у меня на производстве  к сожалению нет но реализация такой обработки в каме довольно интересная задача. Я не уверен что прописание в файле станка даст какой либо результат т. к. я не вижу спец стратегий для данной обработки, хотя это мои поверхностные рассуждения возможно я и не прав. Как я предлагаю для начала взять простую окружность в 2,5Д геометрии для определения нормали к траектории расчет произвести через пост процессор так как у нас имеется все данные для расчета угла в кадре а именно радиус вектор точка траектории и центр вращения через тангенсы он должен просчитывать угол нормали. Если интересно давайте развивать для получения результата может у кого есть другие предложения. 

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


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

попробовать такой вариант - конфигурацию станка брать не как фрезерную, а как токарно-фрезерную, ось прицепить к башке как приводную

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


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

А ось V получается паралельно инструменту? Если да... это нерешаемая математически задача, у неё бесконечное число решений.

Перечитал вопрос. Понял. Надо создать V ось на столе, вектор 0.0.1 создать стандартную  4х face XC cartesian профиль. Угол apos будет нормалью к контору (направление определяется вектором оси V), а hpos - профилем. Арки надо дробить на линии, думаю с 0.03 0.01мм. Не пытайтесь пихать ось на голову, работать не будет, слишком много решений..

 

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


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

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

@Povar1  спасибо за идею, именно от неё начал отталкиваться. На данный момент вот что имею. 

В вмиде создал доп, параметр во фрезеровании, тип integer, имя Axis_V

В посте создал следующие условие скрин ниже.

 

Создаем контурную обработку вал/отверстие, указываем врезание по спирали, ставим нужный шаг по Z, включаем апроксимацию дуг.(без апроксимации неоткуда брать точки для расчета поворота), включаем коррекцию

Далее: при активном параметре Axis_v находим радиус для переменной С, считаем первый угол, находим второй нужный нам угол и выводим нужный угол в зависимости в каком секторе находится точка перемещения. (синус делит окружности два сектора со знаком - и два сектора со знаком +).

 

Минусы; при апроксимации возможно не будет нужной шероховатости, но в станке есть особый режим сглаживания контура при высоких подачах так что возможно получится. Также необходимо располагать pos или mac в центре вращения иначе неполучится просчитать угол.  Нужно включать коррекцию и знать диаметр вращения резца для указания в таблице инструментов. 

 

P.S. осталось добавить условие правильного позиционирования V при обработке отверстия или вала. Проверять буду уже после нг, о результатах отпишу тут.

 

Пример кода.

 

Цитата

G43 D4 H4 Z25.
 Z25.
G0
 Z2.
M193
G1 V0. Z0. F300
G41 G1 X50. V0. F1000
 X48.146 Y-13.49 V15.652 Z-0.043
 X42.721 Y-25.979 V31.304 Z-0.087
 X34.128 Y-36.542 V46.956 Z-0.13
 X23.003 Y-44.394 V62.609 Z-0.174
 X10.173 Y-48.954 V78.261 Z-0.217
 X-3.412 Y-49.883 V93.913 Z-0.261
 X-16.744 Y-47.113 V109.565 Z-0.304
 X-28.834 Y-40.848 V125.218 Z-0.348
 X-38.786 Y-31.554 V140.87 Z-0.391
 X-45.861 Y-19.92 V156.522 Z-0.435
 X-49.534 Y-6.808 V172.174 Z-0.478
 Y6.808 V187.826 Z-0.522
 X-45.861 Y19.92 V203.478 Z-0.565
 X-38.786 Y31.554 V219.13 Z-0.609
 X-28.834 Y40.848 V234.782 Z-0.652
 X-16.744 Y47.113 V250.435 Z-0.696
 X-3.412 Y49.883 V266.087 Z-0.739
 X10.173 Y48.954 V281.739 Z-0.783
 X23.003 Y44.394 V297.391 Z-0.826
 X34.128 Y36.542 V313.044 Z-0.87
 X42.721 Y25.979 V328.696 Z-0.913
 X48.146 Y13.49 V344.348 Z-0.957
 X50. Y0. V0. Z-1.

 

 

 

 

 

Снимок.PNG

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

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


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

Вечер добрый, что такое M193 ?

и тема действительно крайне интересная 

 

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

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


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

@Pochinix M193 включение позиционирования шпинделя как оси. Важно отметить что позиционирование происходит центром шпинделя а не кончиком резца, по крайней мере так на mazak'e i700

                 М194 отключение.

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

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


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

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

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

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


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

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

Любой станок в SolidCAM может быть представлен как токарно-фрезерный, если лицензия позволяет. Если не позволяет, то токарные операции будут заблокированы. Расчет интерполяции из контура токарной обработки - вполне решаемая задача, но только для цилиндрических деталей, и при условии, что центр цилиндра соосен с осью вращения станка и МАКом. Тогда зачем оно все? Хочется ведь обрабатывать что то сбоку и овальное :)

33 минуты назад, vasilevmoment сказал:

@Pochinix M193 включение позиционирования шпинделя как оси. Важно отметить что позиционирование происходит центром шпинделя а не кончиком резца, по крайней мере так на mazak'e i700

                 М194 отключение.

А есть ли возможность использовать токарные циклы или компенсацию? Как в Okuma?

 

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


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

@Mihavin Возможность использовать токарные циклы отсутствует, так как станок в вмиде представлен как фрезерный, компенсация будет работать, инструмент на станке надо будет задать как обычную фрезу. Делать различные поднутрения тоже будет возможно создав переход типа спирали HSS.

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


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

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

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

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

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


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

Войти

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


Войти сейчас

  • Сейчас на странице   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
      Поменял вывод инструмента в событии начала траектории Прописать статично эту строку перед инструментом