Jump to content

Сквозная нумерация Деталей, Конфигураций в текущей сборки. Solidworks 2024.


Recommended Posts

a5lex91

Сквозная нумерация выполнятся через код VBA. 

Детали добавляется новое свойство "Номер детали" с номером, в конфигурацию добавляется новое свойство "НомКонфиг".

Если в детали имеется одна конфигурация то присваивается "Номер детали".

Если в детали имеется множество конфигураций, в каждую конфигурацию добавляется свойство "НомКонфиг" присваивается "Номер детали"-"Порядковый номер конфигурации."

Пример одна конфиг.

"Номер детали"-1.

"НомКонфиг"-1

Пример несколько конфиг.

"Номер детали"

1. конфиг "НомКонфиг"- 1-1

2. конфиг "НомКонфиг"- 1-2

N. конфиг "НомКонфиг"- 1-N

Сам Код VBA

Option Explicit

Sub НумерацияДетелейИКонфигураций()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swAssy As SldWorks.AssemblyDoc
    Dim swComp As SldWorks.Component2
    Dim vComps As Variant
    Dim i As Long, j As Long
    Dim dictKeys As Object  ' Словарь для уникальных деталей
    Dim nextNum As Long
    Dim configName As String
    Dim configNames As Variant
    Dim prop As SldWorks.CustomPropertyManager
    Dim compModel As SldWorks.ModelDoc2
    Dim propValue As String
    Dim addResult As Boolean
    Dim debugMsg As String  ' Для отладки
    debugMsg = "Отладка:" & vbCrLf

    On Error GoTo ErrorHandler
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    ' 1. Проверка: открыт ли документ
    If swModel Is Nothing Then
        MsgBox "Нет открытой модели!", vbExclamation
        Exit Sub
    End If

    ' 2. Проверка: это сборка?
    If swModel.GetType <> swDocumentTypes_e.swDocASSEMBLY Then
        MsgBox "Откройте сборку!", vbExclamation
        Exit Sub
    End If

    Set swAssy = swModel
    vComps = swAssy.GetComponents(False)

    If IsEmpty(vComps) Then
        MsgBox "Сборка пуста!", vbInformation
        Exit Sub
    End If

    ' 3. Инициализация словаря для уникальных деталей
    Set dictKeys = CreateObject("Scripting.Dictionary")
    nextNum = 1

    ' 4. Цикл по компонентам сборки
    For i = 0 To UBound(vComps)
        Set swComp = vComps(i)
        Dim partPath As String: partPath = swComp.GetPathName

        ' Пропускаем виртуальные компоненты и подсборки
        If partPath = "" Or InStr(partPath, ".sldasm") > 0 Then GoTo NextComponent

        Dim partName As String: partName = Mid(partPath, InStrRev(partPath, "\") + 1)
        Dim key As String: key = partPath & "|" & partName

        ' 5. Присваиваем уникальный номер детали
        If Not dictKeys.Exists(key) Then
            dictKeys(key) = nextNum
            nextNum = nextNum + 1
        End If
        Dim nDetail As Long: nDetail = dictKeys(key)

        Set compModel = swComp.GetModelDoc2

        If compModel Is Nothing Then GoTo NextComponent

        debugMsg = debugMsg & "Компонент: " & swComp.Name2 & vbCrLf
        debugMsg = debugMsg & "  Уникальный номер: " & nDetail & vbCrLf

        ' 6. Работа с корневым свойством (без конфигурации)
        Set prop = swComp.CustomPropertyManager("")


        ' Проверяем, есть ли уже "Номер детали"
        propValue = ""
        On Error Resume Next
        propValue = prop.GetSpecifiedValue2("Номер детали", "")
        If Err.Number <> 0 Then
            Err.Clear
            propValue = ""
        End If
        On Error GoTo ErrorHandler

        debugMsg = debugMsg & "  Исходный 'Номер детали': " & propValue & vbCrLf

        ' Если свойства нет — записываем новый номер
        If propValue = "" Or propValue = "Null" Then
            On Error Resume Next
            addResult = prop.Add3( _
                "Номер детали", _
                swCustomInfoType_e.swCustomInfoText, _
                CStr(nDetail), _
                swCustomPropertyAddOption_e.swCustomPropertyReplaceValue _
            )
            If Err.Number <> 0 Or Not addResult Then
                Err.Clear
                debugMsg = debugMsg & "  Ошибка записи 'Номер детали'!" & vbCrLf
            Else
                debugMsg = debugMsg & "  Записан 'Номер детали': " & nDetail & vbCrLf
            End If
            On Error GoTo ErrorHandler
        Else
            debugMsg = debugMsg & "  'Номер детали' уже есть, не перезаписываем: " & propValue & vbCrLf
        End If

        ' 7. Работа с конфигурациями
        configNames = compModel.GetConfigurationNames
        debugMsg = debugMsg & "  Конфигурации: " & IIf(IsEmpty(configNames), 0, UBound(configNames) + 1) & vbCrLf

        If Not IsEmpty(configNames) Then
            If UBound(configNames) > 0 Then
                ' Несколько конфигураций: N-1, N-2, ...
                For j = 0 To UBound(configNames)
                    configName = configNames(j)
                    Set prop = swComp.CustomPropertyManager(configName)

                    On Error Resume Next
                    addResult = prop.Add3( _
                        "НомКонфиг", _
                        swCustomInfoType_e.swCustomInfoText, _
                        CStr(nDetail) & "-" & CStr(j + 1), _
                        swCustomPropertyAddOption_e.swCustomPropertyReplaceValue _
                    )
                    If Err.Number <> 0 Or Not addResult Then
                        Err.Clear
                        debugMsg = debugMsg & "  Ошибка в конфигурации '" & configName & "': не записан 'НомКонфиг'" & vbCrLf
                    Else
                        debugMsg = debugMsg & "  Записан 'НомКонфиг' в '" & configName & "': " & nDetail & "-" & (j + 1) & vbCrLf
                    End If
                    On Error GoTo ErrorHandler
                Next j
            Else
                ' Одна конфигурация: N
                configName = configNames(0)
                Set prop = swComp.CustomPropertyManager(configName)

                On Error Resume Next
                addResult = prop.Add3( _
                    "НомКонфиг", _
                    swCustomInfoType_e.swCustomInfoText, _
                    CStr(nDetail), _
                    swCustomPropertyAddOption_e.swCustomPropertyReplaceValue _
                )
                If Err.Number <> 0 Or Not addResult Then
                    Err.Clear
                    debugMsg = debugMsg & "  Ошибка в конфигурации '" & configName & "': не записан 'НомКонфиг'" & vbCrLf
                Else
                    debugMsg = debugMsg & "  Записан 'НомКонфиг' в '" & configName & "': " & nDetail & vbCrLf
                End If
                On Error GoTo ErrorHandler
            End If
        Else
            ' Нет конфигураций: записываем N-1
            Set prop = swComp.CustomPropertyManager("")
            On Error Resume Next
            addResult = prop.Add3( _
                "НомКонфиг", _
                swCustomInfoType_e.swCustomInfoText, _
                CStr(nDetail) & "-1", _
                swCustomPropertyAddOption_e.swCustomPropertyReplaceValue _
            )
            If Err.Number <> 0 Or Not addResult Then
                Err.Clear
                debugMsg = debugMsg & "  Ошибка: не записан 'НомКонфиг' (N-1)" & vbCrLf
            Else
                debugMsg = debugMsg & "  Записан 'НомКонфиг' (N-1): " & nDetail & "-1" & vbCrLf
            End If
            On Error GoTo ErrorHandler
        End If
NextComponent:
    Next i

    ' 8. Вывод результата
    debugMsg = debugMsg & vbCrLf & "Нумерация завершена! Всего уникальных деталей: " & (nextNum - 1)
    MsgBox debugMsg, vbInformation, "Результат выполнения"
    Exit Sub


ErrorHandler:
    MsgBox "Ошибка: " & Err.Description & vbCrLf & _
           "Строка: " & Erl, vbCritical, "Ошибка выполнения макроса"
End Sub


 

Link to post
Share on other sites


UnPinned posts
a5lex91

Код Для удаления всех нумераций из деталей.

Option Explicit

Sub УдалитьСвойстваДеталиИКонфигураций()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As ModelDoc2
    Dim swAssy As AssemblyDoc
    Dim swComp As Component2
    Dim vComps As Variant
    Dim i As Long, j As Long
    Dim configName As String
    Dim configNames As Variant
    Dim prop As CustomPropertyManager
    Dim compModel As ModelDoc2
    Dim propsToDelete As Variant
    Dim propName As Variant
    
    ' Список удаляемых свойств
    propsToDelete = Array("Номер детали", "НомКонфиг")
    
    ' Подключение к SolidWorks
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Нет открытой модели!", vbExclamation
        Exit Sub
    End If
    
    If swModel.GetType <> swDocumentTypes_e.swDocASSEMBLY Then
        MsgBox "Откройте сборку!", vbExclamation
        Exit Sub
    End If
    
    Set swAssy = swModel
    
    ' Получаем все компоненты сборки
    vComps = swAssy.GetComponents(False)
    If IsEmpty(vComps) Then
        MsgBox "Сборка пуста!", vbInformation
        Exit Sub
    End If
    
    ' Проходим по всем компонентам
    For i = 0 To UBound(vComps)
        Set swComp = vComps(i)
        
        ' Только детали (не субсборки)
        If swComp.GetPathName <> "" And InStr(swComp.GetPathName, ".sldasm") = 0 Then
            
            ' Получаем модель компонента (деталь)
            Set compModel = swComp.GetModelDoc2
            If compModel Is Nothing Then
                MsgBox "Не удалось получить модель компонента: " & swComp.Name2, vbExclamation
                GoTo NextComponent
            End If
            
            ' Менеджер свойств для основной конфигурации компонента
            Set prop = swComp.CustomPropertyManager("")
            
            ' Удаляем свойства из основной конфигурации
            For Each propName In propsToDelete
                If prop.Get(propName) <> "" Then
                    prop.Delete propName
                End If
            Next propName
            
            ' Получаем список конфигураций детали
            configNames = compModel.GetConfigurationNames
            If Not IsEmpty(configNames) Then
                For j = 0 To UBound(configNames)
                    configName = configNames(j)
                    
                    ' Менеджер свойств для конкретной конфигурации
                    Set prop = swComp.CustomPropertyManager(configName)
                    
                    ' Удаляем свойства из каждой конфигурации
                    For Each propName In propsToDelete
                        If prop.Get(propName) <> "" Then
                            prop.Delete propName
                        End If
                    Next propName
                Next j
            Else
                ' Если конфигураций нет — удаляем из пустой конфигурации
                Set prop = swComp.CustomPropertyManager("")
                For Each propName In propsToDelete
                    If prop.Get(propName) <> "" Then
                        prop.Delete propName
                    End If
                Next propName
            End If
        End If
NextComponent:
    Next i
    
    MsgBox "Удаление свойств завершено!", vbInformation
End Sub

Link to post
Share on other sites
a5lex91

Набор макросов. Сквозной нумерации деталей в одной сборки.

Вариантов несколько.

1) Занесения номера детали в Главное свойство детали. (Имя свойства "Номер детали")

2) Занесение номера как в главное свойство детали так и нумерация конфигураций в самой детали с занесением в свойство каждой конфигурации. (Имя свойства "НомКофиг")

3) Удаление свойств "Номер детали" и "НомКофиг".

4) В открытой Сборки ПЕРЕИМЕНОВАНИЕ  Имени детали по шаблону пользователя (Суффикс- номер детали)  в дереве конструирования. С обновлением и сохранение всех ссылок.

https://disk.yandex.ru/d/PxXf7ccE3qdBjw

 

Сильно не кидаться камнями. Только в процессе осваивания программирования.

Возможно необходимом будет установить Solidworks API.

Работоспособность проверена Solidworks 2024 SP5.

Link to post
Share on other sites
Kelny
48 минут назад, a5lex91 сказал:

Набор макросов.

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

 

49 минут назад, a5lex91 сказал:

После 5-10 сообщений можно приложить архив прямо к сообщению, что бы со временем архив не потерялся на стороннем ресурсе.

Макросы и программы для Solidworks: http://kelnyproject.ucoz.ru/

Link to post
Share on other sites
a5lex91
1 час назад, Kelny сказал:

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

 

После 5-10 сообщений можно приложить архив прямо к сообщению, что бы со временем архив не потерялся на стороннем ресурсе.

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

Link to post
Share on other sites
malvi.dp
13 часов назад, a5lex91 сказал:

Весь интернет прошарил, в поисках макроса переименовании деталей в сборке.

В соседней теме поищите макрос ПеКо или SaveAsCopy...

Мир в наших руках, так сделаем его лучше и добрее

Link to post
Share on other sites
a5lex91
23 минуты назад, malvi.dp сказал:

В соседней теме поищите макрос ПеКо или SaveAsCopy...

Спасибо. Этот метод похож Pack and Go.

Суть идеи заключается в следующем.

Имеется Главная сборка с кучей под сборок и кучей деталей. Все Детали необходимо переименовать по одному шаблону и пронумеровать, А все остальные сборки по другому шаблону и тоже пронумеровать.

Link to post
Share on other sites
  • 2 weeks later...

Набор макросов сквозной нумерации, переименование деталей и сборок.

Варианты использование:

1. Единый макрос под названием ПРИЛОЖЕНИЕ.SWP - включены все макросы нумерации и переименования сборок и деталей. С возможностью запускать совместную нумерацию, переименование, удаление. Так же и по раздельности.

2. Макросы разделены. В имени макроса можно понять какие действия выполняет.

Номера присваиваются в деталь и сборку, записываются в свойство.  ("НомерДТ", "НомерСБ")

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

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

При удалении любой нумерации эти свойства удаляются. 

"СчётчикСБ"

"СчётчикДТ"

 

Ссылки везде обновляются автоматически.

Проверено Solidworks 2024 SP5

 

Есть шанс работы и в старых версиях. Не проверял.

Прилож.jpg

П1.jpg

П3.jpg

Пер1.png

свГсб.jpg

Версия 1.0.rar

Переименование происходит при авто открытие каждой сборки.

Номера заносятся без открытий сборок.

Пер 2.jpg

Пер 3.jpg

Пер 4.jpg

Пер 6.png

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Сообщения

    • davidovka
      пробовал в конфиг.про добавить search_path *путь до папки с файлом bearing.prt* ?
    • fluooo
    • Когда-нибудь я стану гуру
      Существует библиотечная деталь с таблицей семейств. При использовании определенных исполнений, они теряются в сборке. Крео видит исполнение 1, спокойно его вставляет, а исполнение 2 считает отсутствующем. Сталкивался кто с таким? Деталь с нуля переделывал, заменял в библиотеке, обновлял cfg - не помогло.  (подшипник тут скидывался этот, но я дополнил кол-во размеров и все) 
    • ID_Hacker
      К сожалению у нас критичное место, вертикальные оси гантри. При некоторых неправильных действиях оси расходятся и мотор стоит с высокой нагрузкой, начинает греться. Предыдущий мотор так и сгорел. При этом температура предупреждения и ошибки выставляется стандартная по коду мотора. 150 и 170 градусов, а мотор при этом сгорел даже не дойдя до ошибки по температуре. Максимум достиг 150 градусов, но уже было поздно. В среднем была 130 градусов. В тот раз мотор аварийно перебрали своими силами, статор отправляли на перемотку. Но из за смещения угла полюсов по нему есть проблема с вибрацией и высокочастотным шумом. В итоге мотор заменили на новый, но теперь надо придумать что то с датчиком температуры. Вроде как можно в параметрах P604, P605 задать свои значения температуры, но редактировать я их не могу. Думаю попробовать указать мотор не по коду, а в ручную, может тогда параметры будут редактироваться.   Обновить ПО приводной системы можно, но станок критичный по загрузке, на долго не отдают, времени на эксперименты совсем нет, а я ни разу в синумерике не обновлял отдельно ПО приводов. Нет уверенности что так легко получится. Возможно надо всё ПО синумерика обновлять как минимум до версии 4.5, что может повлечь необходимость настройки измерительных циклов и циклов смены инструмента.   Мы так делали ещё в приводах Simovert Masterdrives когда помирал датчик внутри мотора. В Sinamics S120 так делать нет необходимости, просто пока отключил контроль температуры в параметре P601, сейчас показывает постоянное значение -200 градусов и ошибок не выдаёт.
    • Гиперион
      Как говорится - блажен тот, кто верует. Да, два станка с разницей в серийном номере на одну цифру. И никто из сервисников в трезвом уме и памяти не будет так радикально копаться в логике, тем более зная, что туда ещё приедет технолог. Ну, вы свой опыт озвучили, я свой.
    • andrey2147
      Вероятно что в обычном экране сименса у вас ошибки не появляются т к не прописаны, а в оболочке прописаны. Это не обязательно ДМГ у меня станок  EAGLE (Орёл) там то же оболочка есть.И то же кнопка ISO есть .
    • andrey2147
      Кто то ещё сомневается ?
    • Kelny
      Есть исходный файл? Не обновлённый до последней версии SW2024.   Ну или в SW2024 (там ведь есть поднижение версии на две ступени) сохраните его в SW2022 -  больше пользщователей сможет пощупать ваш странный файл.      
    • РоманВ
      Добрый день, коллеги. Предстоит очень большая сборка, в разы больше той, что до этого едва ворочалась на моем компе. Решил переосмыслить работу с большими сборками и обращаюсь к вам за подсказкой. Какие способы структурирования сборок, работы в SW позволяют не перегружать комп и легко работать с очень большими сборками? Ниже варианты, которые предполагаю.   1. Больше подсборок. Например в нулевую сборку все входящие детали группировать в подсборки (монтажный комплект, трубопроводный комплект и т.д.). Есть ощущение, что 3 сопряжения подсборки перевариваются легче, чем куча сопряжений кучи деталей. 2. Замена обычных сопряжений упрощенными. Например три координаты или три совпадения заменить на фиксацию. Так же слышал версию о привязках подсборок к базовым плоскостям верхней сборки, чтобы не было взаимозависимостей между подсборками. 3. Облегченные конфигурации подсборок. Использовать SpeedPak для облегчения подсборок. Возможно подсборку сохранять как деталь и вставлять в верхнюю сборку, вставив в это же место сборку и скрыв ее. Т.е. визуально будет деталь, а сборка будет скрыта и не будет обсчитываться. Возможно сборку-деталь вставить в саму подсборку как справочный элемент и сделать конфигурацию, где все детали подсборки скрыты, а высвечена только эта же сборка-деталь. 4. Привязка подсборок к справочному 3д эскизу и управление их расположением через один эскиз, а не массу взаимных сопряжений. (про компоновочный эскиз читал, пока не очень понял насколько он облегчит работу в сравнении с обычным эскизом в сборке)   Еще осложняет работу обилие трубопроводов и фитингов-соединителей. Pоутингом не пользуемся, но в планах попробовать. Может как-то можно упростить работу с трубопроводами в части загрузки компа геометрией?
    • jtok
      Уберите кромки с видов: Используйте "Состояния отображения" - например, сделайте несколько их - полная, без крепежа, без чего-нить и т.д. В нужных видах включайте только нужное состояние отображения: Например, у меня весь крепеж вставлен в сборку верхнего уровня. Сборка имеет два состояния отображения "Полная" и "Без крепежа" Если мне нужны общие виды - спереди, сверху там, то я выбираю "Без крепежа", его все равно там не видно. А для узлов - "Полная".   Используйте для разрезов галку "Глубина сечения" - сильно улучшает производительность при работе с чертежами:   Пару запрещенных приемов: Некоторые инженеры, возможно, не все, экспортируют в ACAD и потом разрисовывают чрезвычайно сложные сборки, т.к. в самом солиде именно с чертежами работать невозможно. Некоторые разбивают вид в эскиз и дальше линиями фигачат, отвязываясь от параметрической модели.
×
×
  • Create New...