PB Wie "selectbyid2" in einem Makro funktioniert, um Komponenten automatisch in einem ASM zu platzieren

Hallo ihr alle

Ein Kollege hat ein Makro erstellt, um Hilfslinien automatisch auf einem Förderbandlayout zu platzieren. Dieses Makro funktioniert gut auf seiner Workstation, während auf meiner, die die gleiche Konfiguration hat (HP Z4), die Teile zum ASM hinzugefügt werden, aber keine Einschränkungen erstellt werden und alle hinzugefügten Teile ihren Visualisierungsmittelpunkt auf den Ursprung des ASM legen.

Hier ist ein Auszug aus dem Makro für die Einschränkungen der neuen Teile:

'----------------------------------
            "Einfügen und Einbinden von Hilfslinien
            "----------------------------------
            
            Wenn TRM_aval oder CInt(length) 1044 >, dann
            
                "Leitfaden für den rechten Einstieg einfügen und einschränken
                Wenn tole_à_droite = falsch, dann
                
                    Set comp = Assembly.AddComponent5(lien_guide, 0, "", False, "", 0, 0, 0) 'Anleitung in Baugruppe einfügen
                    
                    Wenn nicht Comp nichts ist, dann
                        Leitfaden = komp. Name2
                        Aufrufen von Assembly.Extension.SelectByID2("Entrée@" & Conveyor & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, False, 0, Nothing, 0) Markierung 1 auswählen
                        Call Assembly.Extension.SelectByID2("Right Input" & larg & "@" & guide & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, True, 1, Nothing, 0) 'Markierung 2 auswählen
                        Call Assembly.AddMate5(20, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus) 'Markierung 1 auf Markierung 2 beschränken
                        Assembly.ClearSelection2 Wahr
                    Ende, wenn
                    
                Ende, wenn

 

Vielen Dank für Ihre Antworten

Hallo 

Problem gelöst, mit der Select2-Funktion ist dieser Auswahlmodus robuster und funktioniert auf den verschiedenen PCs unseres BE. So haben wir das Programm neu geschrieben:

Öffentliche Funktion constrain(component1 As SldWorks.Component2, place2 As String, component2 As SldWorks.Component2, place2 As String)
'Funktion zum Beschränken von 2 Komponenten anhand ihrer Markierungen

Dim fim As SldWorks.Feature
                        
Set feat = component1. ErsteFunktion

While Not feat Is Nothing' Überprüft alle Elemente im Baum von Komponente 1
    Wenn feat. Name = place1 Dann
        Nennen Sie feat. Select2(False, 0) 'Markierung 1 auswählen
    Ende, wenn
    Set feat = feat. GetNextFeature
Wend
                        
                        
Set feat = component2. ErsteFunktion

While Not feat': Is Nothing' Überprüft alle Elemente im Komponenten-2-Baum
    Wenn feat. Name = place2 Dann
        Nennen Sie feat. Select2(True, 1) 'Markierung 2 auswählen
    Ende, wenn
    Set feat = feat. GetNextFeature
Wend

Call Application.SldWorks.ActiveDoc.AddMate5(20, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus) 'Markierung 1 auf Markierung 2 beschränken
Application.SldWorks.ActiveDoc.ClearSelection2 Wahr
                    
Ende-Funktion
 

1 „Gefällt mir“

Hallo

 

Ich habe das gleiche Makroprinzip und es funktioniert sehr gut auf allen PCs im BE, nur dass ich meine Clearselection an die erste Stelle setze.

 

'--------------------------
'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

 

Ich habe eine automatische Montage aus mehreren Ebenen eines 60stel-Bauteils erstellt. Also habe ich sie nach meiner Positionierung wieder 'fixiert' gesetzt, das macht die Montage danach nutzbar.

Ich beginne mit einer Excel-Tabelle, in der ich alle meine Daten im Voraus zusammenstelle, so dass ich Fehler erkennen kann, wenn es welche gibt.