PB Jak działa "selectbyid2" w makrze do automatycznego umieszczania komponentów w asm

Cze wszystkim

Kolega utworzył makro do automatycznego umieszczania prowadnic w układzie przenośnika. To makro działa dobrze na jego stacji roboczej, podczas gdy na mojej, która ma tę samą konfigurację (HP Z4), części są dodawane do asm, ale nie są tworzone żadne ograniczenia, a wszystkie dodane części umieszczają swój środek wizualizacji na początku asm.

Poniżej znajduje się fragment makra dla wiązań nowych części:

'----------------------------------
            "Wkładanie i ograniczanie prowadnic
            "----------------------------------
            
            Jeśli TRM_aval Or CInt(długość) > 1044 to
            
                'Wstawianie i ograniczanie prawej prowadnicy wprowadzania
                Jeśli tole_à_droite = Fałsz, to
                
                    Set comp = Assembly.AddComponent5(lien_guide, 0, "", False, "", 0, 0, 0) 'Wstaw prowadnicę w zespole
                    
                    jezeli nie to komp to nic to
                        przewodnik = komp. Nazwa2
                        Wywołaj metodę Assembly.Extension.SelectByID2("Entrée@" & Conveyor & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, False, 0, Nothing, 0) Wybierz znacznik 1
                        Wywołaj Assembly.Extension.SelectByID2("Right Input" & larg & "@" & guide & "@" & AssemblyTitle, "COORDSYS", 0, 0, 0, True, 1, Nothing, 0) 'Wybierz znacznik 2
                        Wywołaj metodę Assembly.AddMate5(20, -1, False, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus) 'Ogranicz znak 1 na znaku 2
                        Assembly.ClearSelection2 Prawda
                    Zakończ jeżeli:
                    
                Zakończ jeżeli:

 

Dziękuję za odpowiedzi

Witam 

Problem rozwiązany, dzięki funkcji Select2, ten tryb wyboru jest bardziej niezawodny i działa na różnych komputerach naszego BE. Oto jak przepisaliśmy program:

Funkcja publiczna constrain(component1 As SldWorks.Component2, place2 As String, component2 As SldWorks.Component2, place2 As String)
'Funkcja wiązania 2 komponentów za pomocą ich znaków

Dim feat As SldWorks.Feature
                        
Ustaw feat = komponent1. Pierwsza cecha

While Not feat Is Nothing" Przegląda wszystkie elementy w drzewie Komponentu 1
    Jeśli feat. Nazwa = miejsce1 Następnie
        Zadzwoń feat. Select2(False, 0) 'Wybierz znacznik 1
    Zakończ jeżeli:
    Set feat = feat. GetNextFeature
Wend
                        
                        
Zestaw feat = komponent2. Pierwsza cecha

While Not feat Is Nothing" Przegląda wszystkie elementy w drzewie Komponentu 2
    Jeśli feat. Nazwa = miejsce2 Następnie
        Zadzwoń feat. Select2(True, 1) 'Wybierz znacznik 2
    Zakończ jeżeli:
    Set feat = feat. GetNextFeature
Wend

Wywołaj metodę Application.SldWorks.ActiveDoc.AddMate5(20, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus) 'Ogranicz znak 1 na znaku 2
Application.SldWorks.ActiveDoc.ClearSelection2 Prawda
                    
Zakończ funkcję
 

1 polubienie

Witam

 

Mam tę samą zasadę makr i działa ona bardzo dobrze na wszystkich komputerach w BE, po prostu najpierw stawiam mój clearselect.

 

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

 

Dokonałem automatycznego montażu kilku poziomów po 60 części elementu. Więc po ustawieniu umieszczam je z powrotem "naprawione", dzięki czemu montaż jest później użyteczny.

Zaczynam od arkusza Excel, w którym wcześniej kompiluję wszystkie dane, co pozwala mi wykryć błędy, gdy takie występują.