PB Hoe "selectbyid2" werkt in een macro om componenten automatisch in een asm te plaatsen

Hoi allemaal

Een collega heeft een macro gemaakt om automatisch hulplijnen op een transportbandlay-out te plaatsen. Deze macro werkt goed op zijn werkstation, terwijl op de mijne, die dezelfde configuratie heeft (HP Z4), de onderdelen aan de asm worden toegevoegd, maar er worden geen beperkingen gecreëerd en alle toegevoegde onderdelen plaatsen hun centrum van visualisatie op de oorsprong van de asm.

Hier is een uittreksel uit de macro voor de beperkingen van de nieuwe onderdelen:

'----------------------------------
            "Hulplijnen invoegen en beperken
            '----------------------------------
            
            Als TRM_aval of CInt(lengte) > 1044 dan
            
                "Gids voor de rechteringang invoegen en beperken
                Als tole_à_droite = onwaar dan
                
                    Set comp = Assembly.AddComponent5(lien_guide, 0, "", False, "", 0, 0, 0) 'Hulplijn invoegen in assemblage
                    
                    Zo niet, dan is comp niets
                        gids = comp. Naam2
                        Roep Assembly.Extension.SelectByID2("Entrée@" & Conveyor & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, False, 0, Nothing, 0) Selecteer Marker 1
                        Roep Assembly.Extension.SelectByID2 aan ("Right Input" & larg & "@" & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, True, 1, Nothing, 0) 'Selecteer marker 2
                        Aanroepen Assembly.AddMate5(20, -1, Onwaar, 0, 0, 0, 0, 0, 0, 0, Onwaar, Onwaar, 0, longstatus) 'Beperk teken 1 op teken 2
                        Assembly.ClearSelection2 Waar
                    Einde als
                    
                Einde als

 

Dank u voor uw antwoorden

Hallo 

Probleem opgelost, met de Select2-functie is deze selectiemodus robuuster en werkt deze op de verschillende pc's van onze BE. Dit is hoe we het programma hebben herschreven:

Beperking openbare functie (component1 als SldWorks.Component2, place2 als tekenreeks, component2 als SldWorks.Component2, plaats2 als tekenreeks)
"Functie om 2 componenten te beperken met behulp van hun merktekens

Dim feat als SldWorks.Feature
                        
Prestatie instellen = component1. Eerste functie

While Not feat Is Nothing' Beoordeelt alle elementen in de Component 1-boom
    Als prestatie. Naam = plaats1 Dan
        Oproep prestatie. Select2(False, 0) 'Selecteer marker 1
    Einde als
    Prestatie instellen = prestatie. VolgendeFunctie
Gaan
                        
                        
Stel prestatie in = component2. Eerste functie

While Not feat Is Nothing' Beoordeelt alle elementen in de Component 2-boom
    Als prestatie. Naam = plaats2 Dan
        Oproep prestatie. Select2(True, 1) 'Selecteer markering 2
    Einde als
    Prestatie instellen = prestatie. VolgendeFunctie
Gaan

Aanroepen Application.SldWorks.ActiveDoc.AddMate5(20, -1, False, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus) 'Beperk markering 1 op markering 2
Application.SldWorks.ActiveDoc.ClearSelection2 Waar
                    
Functie beëindigen
 

1 like

Hallo

 

Ik heb hetzelfde macro principe en het werkt heel goed op alle PC's in de BE, alleen zet ik mijn clearselection op de eerste plaats.

 

'--------------------------
'positionnement de la pièce
    'Variable
Dim CompInsert As String            'Pièce qui viens d'etre inserer dans l'assemblage
CompInsert = ActiveSheet.Range("B" & i) & "-1@" & ActiveSheet.Range("B" & a)
Dim FirstSelection As String        'Constante, position de l'origine du composant
FirstSelection = "Point1@Origine@" & CompInsert
Dim SecondSelection As String       'A définir, chaque composant a une place différente
SecondSelection = ActiveSheet.Range("C" & i)      'suivant une esquisse et un point potentiellement différent

    'suppression du "Fixe" sur la première pièce
    boolstatus = swModel.Extension.SelectByID2(CompInsert, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    swModel.UnfixComponent

    'Selection du composant et ajout contrainte coincident origine/origine
    swModel.ClearSelection2 True
    boolstatus = swModel.Extension.SelectByID2(FirstSelection, "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
    boolstatus = swModel.Extension.SelectByID2(SecondSelection, "COORDSYS", 0, 0, 0, True, 1, Nothing, 0)
    Set swMate = swModel.AddMate5(20, -1, False, 0, 0.001, 0.001, 0.001, 0.001, 0.5235987755983, 0.5235987755983, 0.5235987755983, False, False, 0, longstatus)

    'Remettre la pièce "Fixe"
    boolstatus = swModel.Extension.SelectByID2(CompInsert, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    swModel.FixComponent
    swModel.ClearSelection2 True

 

Ik heb een automatische assemblage gemaakt van verschillende niveaus van een 60e van een component. Dus ik heb ze na mijn positionering weer 'vast' teruggezet, het maakt de montage achteraf bruikbaar.

Ik begin met een Excel-sheet waar ik al mijn gegevens van tevoren samenstel, het stelt me in staat om fouten op te sporen wanneer die er zijn.